From 8ea8adbe5f02dd9799bc2e8fc2ce2ff72f8059b0 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 14 Mar 2015 13:18:04 +0800 Subject: [PATCH 01/51] Initial cut at Python 3.4.2 port. --- Makefile | 301 +- README.rst | 12 +- patch/Python/ModulesSetup | 49 - patch/Python/ModulesSetup.mobile | 2 - patch/Python/Python.patch | 26549 ++++++++++++++++ patch/Python/_scproxy.py | 10 - patch/Python/ctypes_duplicate.patch | 34 - patch/Python/dynload.patch | 24 - patch/Python/environ_symbol_fix.patch | 24 - patch/Python/pyconfig.h | 12 +- patch/Python/pyconfig.patch | 159 - patch/Python/setuppath.patch | 11 - patch/Python/ssize-t-max.patch | 17 - patch/Python/static-_sqlite3.patch | 25 - patch/Python/xcompile.patch | 138 - ...enerate-darwin-source-and-headers.py.patch | 20 - 16 files changed, 26646 insertions(+), 741 deletions(-) delete mode 100644 patch/Python/ModulesSetup delete mode 100644 patch/Python/ModulesSetup.mobile create mode 100644 patch/Python/Python.patch delete mode 100644 patch/Python/_scproxy.py delete mode 100644 patch/Python/ctypes_duplicate.patch delete mode 100644 patch/Python/dynload.patch delete mode 100644 patch/Python/environ_symbol_fix.patch delete mode 100644 patch/Python/pyconfig.patch delete mode 100644 patch/Python/setuppath.patch delete mode 100644 patch/Python/ssize-t-max.patch delete mode 100644 patch/Python/static-_sqlite3.patch delete mode 100644 patch/Python/xcompile.patch delete mode 100644 patch/libffi/generate-darwin-source-and-headers.py.patch diff --git a/Makefile b/Makefile index c57cc556..cd24cc7f 100644 --- a/Makefile +++ b/Makefile @@ -3,33 +3,29 @@ PROJECTDIR=$(shell pwd) # iOS Build variables. OSX_SDK_ROOT=$(shell xcrun --sdk macosx --show-sdk-path) -BUILD_NUMBER=4 +BUILD_NUMBER=1 # Version of packages that will be compiled by this meta-package -FFI_VERSION=3.1 PYTHON_VERSION=3.4.2 -RUBICON_VERSION=0.1.2 - -# IPHONE build commands and flags -IPHONE_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IPHONE_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -IPHONE_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -IPHONE_ARMV7_CFLAGS=-arch armv7 -pipe -no-cpp-precomp -isysroot $(IPHONE_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 -IPHONE_ARMV7_LDFLAGS=-arch armv7 -isysroot $(IPHONE_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 - -# IPHONE build commands and flags -IPHONE_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IPHONE_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -IPHONE_ARMV7S_LD=$(shell xcrun -find -sdk iphoneos ld) -IPHONE_ARMV7S_CFLAGS=-arch armv7s -pipe -no-cpp-precomp -isysroot $(IPHONE_ARMV7S_SDK_ROOT) -miphoneos-version-min=6.0 -IPHONE_ARMV7S_LDFLAGS=-arch armv7s -isysroot $(IPHONE_ARMV7S_SDK_ROOT) -miphoneos-version-min=6.0 - -# IPHONE_SIMULATOR build commands and flags -IPHONE_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -IPHONE_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -IPHONE_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -IPHONE_SIMULATOR_CFLAGS=-arch i386 -pipe -no-cpp-precomp -isysroot $(IPHONE_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 -IPHONE_SIMULATOR_LDFLAGS=-arch i386 -isysroot $(IPHONE_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 +RUBICON_VERSION=0.1.3 + +# Build identifier of the build OS. +BUILD_OS_ID=x86_64-apple-darwin$(shell uname -r) + +# IOS ARMV7 build commands and flags +IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) +IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 +IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 + +# IOS ARM64 build commands and flags +IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) +IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 +IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 + +# IOS_SIMULATOR build commands and flags +IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) +IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 +IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 all: Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz @@ -55,50 +51,12 @@ build: dist: mkdir -p dist -########################################################################### -# libFFI -########################################################################### - -# Clean the libffi project -clean-ffi: - rm -rf build/libffi-$(FFI_VERSION) - rm -rf dist/ffi.framework - -# Down original libffi source code archive. -downloads/libffi-$(FFI_VERSION).tar.gz: downloads - curl -L ftp://sourceware.org/pub/libffi/libffi-$(FFI_VERSION).tar.gz > downloads/libffi-$(FFI_VERSION).tar.gz - -# Unpack libffi source archive into build working directory -build/libffi-$(FFI_VERSION): build downloads/libffi-$(FFI_VERSION).tar.gz - tar zxf downloads/libffi-$(FFI_VERSION).tar.gz - mv libffi-$(FFI_VERSION) build - -# Patch and build the framework -dist/ffi.framework/ffi: dist build/libffi-$(FFI_VERSION) - # Patch the libFFI sources - cd build/libffi-$(FFI_VERSION) && patch -p1 -N < ../../patch/libffi/generate-darwin-source-and-headers.py.patch - # Generate headers for iOS platforms - cd build/libffi-$(FFI_VERSION) && python generate-darwin-source-and-headers.py --only-ios - # Build all required targets. - cd build/libffi-$(FFI_VERSION)/build_iphoneos-armv7 && make - cd build/libffi-$(FFI_VERSION)/build_iphoneos-arm64 && make - cd build/libffi-$(FFI_VERSION)/build_iphonesimulator-i386 && make - # Copy the headers into a single directory - mkdir -p dist/ffi.framework/Versions/${FFI_VERSION}/Headers - cp build/libffi-$(FFI_VERSION)/darwin_common/include/* dist/ffi.framework/Versions/${FFI_VERSION}/Headers - cp build/libffi-$(FFI_VERSION)/darwin_ios/include/* dist/ffi.framework/Versions/${FFI_VERSION}/Headers - # Make the fat binary - xcrun lipo -create -output dist/ffi.framework/Versions/$(FFI_VERSION)/ffi build/libffi-$(FFI_VERSION)/build_iphoneos-arm64/.libs/libffi.a build/libffi-$(FFI_VERSION)/build_iphoneos-armv7/.libs/libffi.a build/libffi-$(FFI_VERSION)/build_iphonesimulator-i386/.libs/libffi.a - # Link the Current, Headers and binary. - cd dist/ffi.framework/Versions && ln -sf ${FFI_VERSION} Current - cd dist/ffi.framework && ln -sf Versions/Current/Headers - cd dist/ffi.framework && ln -sf Versions/Current/ffi ########################################################################### # rubicon-objc ########################################################################### -# Clean the libffi project +# Clean the rubicon project clean-rubicon-objc: rm -rf build/rubicon-objc-$(RUBICON_VERSION) @@ -118,8 +76,8 @@ build/rubicon-objc-$(RUBICON_VERSION): downloads/rubicon-objc-$(RUBICON_VERSION) # Clean the Python project clean-Python: rm -rf build/Python-$(PYTHON_VERSION) + rm -rf build/python rm -rf dist/Python.framework - rm -rf dist/python # Down original Python source code archive. downloads/Python-$(PYTHON_VERSION).tgz: downloads @@ -130,14 +88,8 @@ build/Python-$(PYTHON_VERSION)/host/python.exe: build downloads/Python-$(PYTHON_ tar zxf downloads/Python-$(PYTHON_VERSION).tgz mkdir -p build/Python-$(PYTHON_VERSION) mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/host - # Apply patches - cp patch/Python/ModulesSetup build/Python-$(PYTHON_VERSION)/host/Modules/Setup.local - cp patch/Python/_scproxy.py build/Python-$(PYTHON_VERSION)/host/Lib/_scproxy.py - cd build/Python-$(PYTHON_VERSION)/host && patch -p1 -N < ../../../patch/Python/dynload.patch - cd build/Python-$(PYTHON_VERSION)/host && patch -p1 -N < ../../../patch/Python/ssize-t-max.patch - cd build/Python-$(PYTHON_VERSION)/host && patch -p1 -N < ../../../patch/Python/static-_sqlite3.patch # Configure and make the local build, providing compiled resources. - cd build/Python-$(PYTHON_VERSION)/host && ./configure CC="clang -Qunused-arguments -fcolor-diagnostics" LDFLAGS="-lsqlite3" CFLAGS="--sysroot=$(OSX_SDK_ROOT)" --prefix=$(PROJECTDIR)/build/Python-$(PYTHON_VERSION)/host/build + cd build/Python-$(PYTHON_VERSION)/host && ./configure --prefix=$(PROJECTDIR)/build/python/host cd build/Python-$(PYTHON_VERSION)/host && make build/python/ios-simulator/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe @@ -146,172 +98,83 @@ build/python/ios-simulator/Python: build build/Python-$(PYTHON_VERSION)/host/pyt mkdir -p build/Python-$(PYTHON_VERSION) mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-simulator # Apply patches - cp patch/Python/ModulesSetup build/Python-$(PYTHON_VERSION)/ios-simulator/Modules/Setup.local - cat patch/Python/ModulesSetup.mobile >> build/Python-$(PYTHON_VERSION)/ios-simulator/Modules/Setup.local - cp patch/Python/_scproxy.py build/Python-$(PYTHON_VERSION)/ios-simulator/Lib/_scproxy.py - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 -N < ../../../patch/Python/dynload.patch - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 -N < ../../../patch/Python/ssize-t-max.patch - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 -N < ../../../patch/Python/static-_sqlite3.patch - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/xcompile.patch - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/setuppath.patch + cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/Python.patch # Configure and build Simulator library - cd build/Python-$(PYTHON_VERSION)/ios-simulator && ./configure CC="$(IPHONE_SIMULATOR_CC)" LD="$(IPHONE_SIMULATOR_LD)" CFLAGS="$(IPHONE_SIMULATOR_CFLAGS) -I../../../dist/ffi.framework/Headers" LDFLAGS="$(IPHONE_SIMULATOR_LDFLAGS) -L../../../dist/ffi.framework/ -lsqlite3 -undefined dynamic_lookup" --without-pymalloc --disable-toolbox-glue --prefix=$(PROJECTDIR)/build/python/ios-simulator --without-doc-strings - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/ctypes_duplicate.patch - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/pyconfig.patch - mkdir -p build/python/ios-simulator - cd build/Python-$(PYTHON_VERSION)/ios-simulator && cp ../host/python.exe hostpython - cd build/Python-$(PYTHON_VERSION)/ios-simulator && make altbininstall libinstall inclinstall libainstall HOSTPYTHON=./hostpython CROSS_COMPILE_TARGET=yes - # Relocate and rename the libpython binary - cd build/python/ios-simulator/lib && mv libpython$(basename $(PYTHON_VERSION)).a ../Python - # Clean up build directory - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && rm config/libpython$(basename $(PYTHON_VERSION)).a config/python.o config/config.c.in config/makesetup - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && rm -rf *test* lib* wsgiref bsddb curses idlelib hotshot - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.pyc' | xargs rm - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.py' | xargs rm - cd build/python/ios-simulator/lib && rm -rf pkgconfig - # Pack libraries into .zip file - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && mv config .. - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && mv site-packages .. - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && zip -r ../python27.zip * - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && rm -rf * - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && mv ../config . - cd build/python/ios-simulator/lib/python$(basename $(PYTHON_VERSION)) && mv ../site-packages . - # Move all headers except for pyconfig.h into a Headers directory - mkdir -p build/python/ios-simulator/Headers - cd build/python/ios-simulator/Headers && mv ../include/python$(basename $(PYTHON_VERSION))/* . - cd build/python/ios-simulator/Headers && mv pyconfig.h ../include/python$(basename $(PYTHON_VERSION)) - + cd build/Python-$(PYTHON_VERSION)/ios-simulator && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=x86_64-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" --prefix=$(PROJECTDIR)/build/python/ios-simulator --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no + cd build/Python-$(PYTHON_VERSION)/ios-simulator && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install build/python/ios-armv7/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe # Unpack sources tar zxf downloads/Python-$(PYTHON_VERSION).tgz mkdir -p build/Python-$(PYTHON_VERSION) mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-armv7 - # Apply extra patches for iPhone build - cp patch/Python/ModulesSetup build/Python-$(PYTHON_VERSION)/ios-armv7/Modules/Setup.local - cat patch/Python/ModulesSetup.mobile >> build/Python-$(PYTHON_VERSION)/ios-armv7/Modules/Setup.local - cp patch/Python/_scproxy.py build/Python-$(PYTHON_VERSION)/ios-armv7/Lib/_scproxy.py - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 -N < ../../../patch/Python/dynload.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 -N < ../../../patch/Python/ssize-t-max.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 -N < ../../../patch/Python/static-_sqlite3.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/xcompile.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/setuppath.patch - # Configure and build iPhone library - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && ./configure CC="$(IPHONE_ARMV7_CC)" LD="$(IPHONE_ARMV7_LD)" CFLAGS="$(IPHONE_ARMV7_CFLAGS) -I../../../dist/ffi.framework/Headers" LDFLAGS="$(IPHONE_ARMV7_LDFLAGS) -L../../../dist/ffi.framework/ -lsqlite3 -undefined dynamic_lookup" --without-pymalloc --disable-toolbox-glue --host=armv7-apple-darwin --prefix=$(PROJECTDIR)/build/python/ios-armv7 --without-doc-strings - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/ctypes_duplicate.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/pyconfig.patch - mkdir -p build/python/ios-armv7 - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && cp ../host/python.exe hostpython - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && make altbininstall libinstall inclinstall libainstall HOSTPYTHON=./hostpython CROSS_COMPILE_TARGET=yes - # Relocate and rename the libpython binary - cd build/python/ios-armv7/lib && mv libpython$(basename $(PYTHON_VERSION)).a ../Python - # Clean up build directory - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && rm config/libpython$(basename $(PYTHON_VERSION)).a config/python.o config/config.c.in config/makesetup - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && rm -rf *test* lib* wsgiref bsddb curses idlelib hotshot - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.pyc' | xargs rm - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.py' | xargs rm - cd build/python/ios-armv7/lib && rm -rf pkgconfig - # Pack libraries into .zip file - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && mv config .. - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && mv site-packages .. - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && zip -r ../python27.zip * - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && rm -rf * - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && mv ../config . - cd build/python/ios-armv7/lib/python$(basename $(PYTHON_VERSION)) && mv ../site-packages . - # Move all headers except for pyconfig.h into a Headers directory - mkdir -p build/python/ios-armv7/Headers - cd build/python/ios-armv7/Headers && mv ../include/python$(basename $(PYTHON_VERSION))/* . - cd build/python/ios-armv7/Headers && mv pyconfig.h ../include/python$(basename $(PYTHON_VERSION)) - - -build/python/ios-armv7s/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe + # Apply patches + cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/Python.patch + # Configure and build ARMv7 library + cd build/Python-$(PYTHON_VERSION)/ios-armv7 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=armv7-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_ARMV7_CC)" LD="$(IOS_ARMV7_LD)" --prefix=$(PROJECTDIR)/build/python/ios-armv7 --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no + cd build/Python-$(PYTHON_VERSION)/ios-armv7 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install + +build/python/ios-arm64/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe # Unpack sources tar zxf downloads/Python-$(PYTHON_VERSION).tgz mkdir -p build/Python-$(PYTHON_VERSION) - mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-armv7s - # Apply extra patches for iPhone build - cp patch/Python/ModulesSetup build/Python-$(PYTHON_VERSION)/ios-armv7s/Modules/Setup.local - cat patch/Python/ModulesSetup.mobile >> build/Python-$(PYTHON_VERSION)/ios-armv7s/Modules/Setup.local - cp patch/Python/_scproxy.py build/Python-$(PYTHON_VERSION)/ios-armv7s/Lib/_scproxy.py - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 -N < ../../../patch/Python/dynload.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 -N < ../../../patch/Python/ssize-t-max.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 -N < ../../../patch/Python/static-_sqlite3.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 < ../../../patch/Python/xcompile.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 < ../../../patch/Python/setuppath.patch - # Configure and build iPhone library - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && ./configure CC="$(IPHONE_ARMV7_CC)" LD="$(IPHONE_ARMV7S_LD)" CFLAGS="$(IPHONE_ARMV7S_CFLAGS) -I../../../dist/ffi.framework/Headers" LDFLAGS="$(IPHONE_ARMV7S_LDFLAGS) -L../../../dist/ffi.framework/ -lsqlite3 -undefined dynamic_lookup" --without-pymalloc --disable-toolbox-glue --host=armv7s-apple-darwin --prefix=$(PROJECTDIR)/build/python/ios-armv7s --without-doc-strings - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 < ../../../patch/Python/ctypes_duplicate.patch - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && patch -p1 < ../../../patch/Python/pyconfig.patch - mkdir -p build/python/ios-armv7s - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && cp ../host/python.exe hostpython - cd build/Python-$(PYTHON_VERSION)/ios-armv7s && make altbininstall libinstall inclinstall libainstall HOSTPYTHON=./hostpython CROSS_COMPILE_TARGET=yes - # Relocate and rename the libpython binary - cd build/python/ios-armv7s/lib && mv libpython$(basename $(PYTHON_VERSION)).a ../Python - # Clean up build directory - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && rm config/libpython$(basename $(PYTHON_VERSION)).a config/python.o config/config.c.in config/makesetup - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && rm -rf *test* lib* wsgiref bsddb curses idlelib hotshot - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.pyc' | xargs rm - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && find . -iname '*.py' | xargs rm - cd build/python/ios-armv7s/lib && rm -rf pkgconfig - # Pack libraries into .zip file - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && mv config .. - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && mv site-packages .. - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && zip -r ../python27.zip * - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && rm -rf * - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && mv ../config . - cd build/python/ios-armv7s/lib/python$(basename $(PYTHON_VERSION)) && mv ../site-packages . - # Move all headers except for pyconfig.h into a Headers directory - mkdir -p build/python/ios-armv7s/Headers - cd build/python/ios-armv7s/Headers && mv ../include/python$(basename $(PYTHON_VERSION))/* . - cd build/python/ios-armv7s/Headers && mv pyconfig.h ../include/python$(basename $(PYTHON_VERSION)) - - -dist/Python.framework/Python: build/python/ios-simulator/Python build/python/ios-armv7/Python build/python/ios-armv7s/Python build/rubicon-objc-$(RUBICON_VERSION) - # Create the framework directory from the compiled resrouces + mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-arm64 + # Apply patches + cd build/Python-$(PYTHON_VERSION)/ios-arm64 && patch -p1 < ../../../patch/Python/Python.patch + # Configure and build ARM64 library + cd build/Python-$(PYTHON_VERSION)/ios-arm64 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=aarch64-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_ARM64_CC)" LD="$(IOS_ARM64_LD)" --prefix=$(PROJECTDIR)/build/python/ios-arm64 --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no + cd build/Python-$(PYTHON_VERSION)/ios-arm64 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install + +dist/Python.framework/Python: build/python/ios-simulator/Python build/python/ios-arm64/Python build/rubicon-objc-$(RUBICON_VERSION) + # Create the framework directory and set it as the current version mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/ cd dist/Python.framework/Versions && ln -fs $(basename $(PYTHON_VERSION)) Current - # Copy the headers from the simulator build - cp -r build/python/ios-simulator/Headers dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers + + # Copy the headers. The headers are the same for every platform, except for pyconfig.h; + # use the x86_64 simulator build because reasons. + cp -r build/python/ios-simulator/include/python$(basename $(PYTHON_VERSION)) dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers + # The only headers that change between versions is pyconfig.h; copy each supported version... + cp build/python/ios-simulator/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-x86_64.h + cp build/python/ios-arm64/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-arm64.h + # cp build/python/ios-armv7/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-armv7.h + # ... and then copy in a master pyconfig.h to unify them all. + cp patch/Python/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig.h + + # Link the current Headers to the top level cd dist/Python.framework && ln -fs Versions/Current/Headers - # Copy the standard library from the simulator build + + # Copy the standard library from the x86_64 simulator build. Again, the + # pure Python standard library is the same on every platform; use the + # simulator version because reasons. mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources cp -r build/python/ios-simulator/lib dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources - cd dist/Python.framework && ln -fs Versions/Current/Resources - # Copy the pyconfig headers from the builds, and install the fat header. - mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/include/python$(basename $(PYTHON_VERSION)) - cp build/python/ios-simulator/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/include/python$(basename $(PYTHON_VERSION))/pyconfig-simulator.h - cp build/python/ios-armv7/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/include/python$(basename $(PYTHON_VERSION))/pyconfig-armv7.h - cp patch/Python/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/include/python$(basename $(PYTHON_VERSION))/ - # Install Rubicon into site packages. - cd build && cp -r rubicon-objc-$(RUBICON_VERSION)/rubicon ../dist/Python.framework/Resources/lib/python$(basename $(PYTHON_VERSION))/site-packages/ - # Build a fat library with all targets included. - xcrun lipo -create -output dist/Python.framework/Versions/Current/Python build/python/ios-simulator/Python build/python/ios-armv7/Python build/python/ios-armv7s/Python - cd dist/Python.framework && ln -fs Versions/Current/Python - -Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz: dist/ffi.framework/ffi dist/Python.framework/Python - cd dist && tar zcvf ../Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz ffi.framework Python.framework + # Remove the pieces of the resources directory that aren't needed: + # libpython.a isn't needed in the lib directory + rm -f dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/libpython$(basename $(PYTHON_VERSION)).a + # pkgconfig isn't needed on the device + rm -rf dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/pkgconfig + # Remove all the modules we don't need, compress the rest. + cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref config-$(basename $(PYTHON_VERSION)) ctypes/test distutils/tests site-pacakges sqlite3/test + cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && zip -r ../python$(subst .,,$(basename $(PYTHON_VERSION))).zip * + cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && rm -rf * + # Install Rubicon into site packages. + mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION))/site-packages + cd build && cp -r rubicon-objc-$(RUBICON_VERSION)/rubicon ../dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION))/site-packages/ -env: - # PYTHON_VERSION $(PYTHON_VERSION) - # FFI_VERSION $(FFI_VERSION) - # OSX_SDK_ROOT $(OSX_SDK_ROOT) + # Link the current Resources to the top level + cd dist/Python.framework && ln -fs Versions/Current/Resources - # IPHONE_ARMV7_SDK_ROOT $(IPHONE_ARMV7_SDK_ROOT) - # IPHONE_ARMV7_CC $(IPHONE_ARMV7_CC) - # IPHONE_ARMV7_LD $(IPHONE_ARMV7_LD) - # IPHONE_ARMV7_CFLAGS $(IPHONE_ARMV7_CFLAGS) - # IPHONE_ARMV7_LDFLAGS $(IPHONE_ARMV7_LDFLAGS) + # Create a fat binary for the libPython library + xcrun lipo -create -output \ + dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Python \ + build/python/ios-simulator/lib/libpython$(basename $(PYTHON_VERSION)).a \ + build/python/ios-arm64/lib/libpython$(basename $(PYTHON_VERSION)).a; + # build/python/ios-armv7/lib/libpython$(basename $(PYTHON_VERSION)).a; - # IPHONE_ARMV7S_SDK_ROOT $(IPHONE_ARMV7S_SDK_ROOT) - # IPHONE_ARMV7S_CC $(IPHONE_ARMV7S_CC) - # IPHONE_ARMV7S_LD $(IPHONE_ARMV7S_LD) - # IPHONE_ARMV7S_CFLAGS $(IPHONE_ARMV7S_CFLAGS) - # IPHONE_ARMV7S_LDFLAGS $(IPHONE_ARMV7S_LDFLAGS) + # Link the current Python library to the top level + cd dist/Python.framework && ln -fs Versions/Current/Python - # IPHONE_SIMULATOR_SDK_ROOT $(IPHONE_SIMULATOR_SDK_ROOT) - # IPHONE_SIMULATOR_CC $(IPHONE_SIMULATOR_CC) - # IPHONE_SIMULATOR_LD $(IPHONE_SIMULATOR_LD) - # IPHONE_SIMULATOR_CFLAGS $(IPHONE_SIMULATOR_CFLAGS) - # IPHONE_SIMULATOR_LDFLAGS $(IPHONE_SIMULATOR_LDFLAGS) +Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz: dist/Python.framework/Python + cd dist && tar zcvf ../Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz Python.framework diff --git a/README.rst b/README.rst index 1c3d321f..7a7965c2 100644 --- a/README.rst +++ b/README.rst @@ -11,20 +11,21 @@ The ``site-packages`` has the `Rubicon Objective-C`_ library pre-installed. This library enables you to have direct access to the iOS system libraries from within the Python environment. -The binaries support the ``$(ARCHS_STANDARD_32_BIT)`` set - that is, armv7 and -armv7s. This should enable the code to run on: +The binaries support the ``$(ARCHS_STANDARD)`` set - that is, armv7 and +arm64. This should enable the code to run on: * iPhone - - iPhone 3GS, - - iPhone 4 - iPhone 4s - iPhone 5 - iPhone 5s + - iPhone 6 + - iPhone 6 Plus * iPad - iPad 2 - iPad (3rd gen) - iPad (4th gen) - iPad Air + - iPad retina * iPad Mini - iPad Mini (1st gen) - iPad Mini (2nd gen) @@ -53,8 +54,7 @@ This should: 2. Patch them as required for iOS compatibility 3. Build the packages as iOS frameworks. -The build products will be in the `build` directory. You'll need to add -**all** these frameworks (not just Python.framework) to your project. +The build products will be in the `build` directory. .. _downloaded: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b1/Python-3.4.2-iOS-support.b1.tar.gz diff --git a/patch/Python/ModulesSetup b/patch/Python/ModulesSetup deleted file mode 100644 index 3938a1ea..00000000 --- a/patch/Python/ModulesSetup +++ /dev/null @@ -1,49 +0,0 @@ -posix posixmodule.c # posix (UNIX) system calls -errno errnomodule.c # posix (UNIX) errno values -pwd pwdmodule.c # this is needed to find out the user's home dir - # if $HOME is not set -_sre _sre.c # Fredrik Lundh's new regular expressions -_codecs _codecsmodule.c # access to the builtin codecs and codec registry -zipimport zipimport.c -_symtable symtablemodule.c -array arraymodule.c # array objects -cmath cmathmodule.c # -lm # complex math library functions -math mathmodule.c # -lm # math library functions, e.g. sin() -_struct _struct.c # binary structure packing/unpacking -time timemodule.c # -lm # time operations and variables -operator operator.c # operator.add() and similar goodies -_weakref _weakref.c # basic weak reference support -_random _randommodule.c # Random number generator -_collections _collectionsmodule.c # Container types -itertools itertoolsmodule.c # Functions creating iterators for efficient looping -strop stropmodule.c # String manipulations -_functools _functoolsmodule.c # Tools for working with functions and callable objects -_elementtree -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI _elementtree.c # elementtree accelerator -datetime datetimemodule.c # date/time type -_bisect _bisectmodule.c # Bisection algorithms -fcntl fcntlmodule.c # fcntl(2) and ioctl(2) -select selectmodule.c # select(2); not on ancient System V -_socket socketmodule.c -_md5 md5module.c md5.c -_sha shamodule.c -_sha256 sha256module.c -_sha512 sha512module.c -binascii binascii.c -parser parsermodule.c -cStringIO cStringIO.c -cPickle cPickle.c -zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz -xxsubtype xxsubtype.c -unicodedata unicodedata.c # static Unicode character database - -# Theses modules are used by Kivy inside other module -# json in Settings, _io by zipfile... -_json _json.c -_io _io/bufferedio.c _io/bytesio.c _io/fileio.c _io/iobase.c _io/_iomodule.c _io/stringio.c _io/textio.c -_heapq _heapqmodule.c - -# Special inclusion for sqlite3 -_sqlite3 -DSQLITE_OMIT_LOAD_EXTENSION _sqlite/cache.c _sqlite/microprotocols.c _sqlite/row.c _sqlite/connection.c _sqlite/module.c _sqlite/statement.c _sqlite/cursor.c _sqlite/prepare_protocol.c _sqlite/util.c - -# Include expat -pyexpat expat/xmlparse.c expat/xmlrole.c expat/xmltok.c pyexpat.c -I$(srcdir)/Modules/expat -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI diff --git a/patch/Python/ModulesSetup.mobile b/patch/Python/ModulesSetup.mobile deleted file mode 100644 index 826bf1c0..00000000 --- a/patch/Python/ModulesSetup.mobile +++ /dev/null @@ -1,2 +0,0 @@ -# Ctypes -_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c -I$(srcdir)/../../build/include/ffi diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch new file mode 100644 index 00000000..6e0c1a91 --- /dev/null +++ b/patch/Python/Python.patch @@ -0,0 +1,26549 @@ +diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py +--- orig/Lib/ctypes/util.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/util.py 2015-02-28 19:22:12.000000000 +0800 +@@ -70,7 +70,7 @@ + def find_library(name): + return name + +-if os.name == "posix" and sys.platform == "darwin": ++if os.name == "posix" and sys.platform in ("darwin", "ios"): + from ctypes.macholib.dyld import dyld_find as _dyld_find + def find_library(name): + possible = ['lib%s.dylib' % name, +diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +--- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Lib/plat-ios/IN.py 2015-02-23 08:44:22.000000000 +0800 +@@ -0,0 +1,6577 @@ ++# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/include/netinet/in.h ++ ++# Included from sys/appleapiopts.h ++ ++# Included from sys/_types.h ++ ++# Included from sys/cdefs.h ++def __P(protos): return protos ++ ++def __STRING(x): return #x ++ ++def __P(protos): return () ++ ++def __STRING(x): return "x" ++ ++def __deprecated_msg(_msg): return __attribute__((deprecated(_msg))) ++ ++def __deprecated_msg(_msg): return __attribute__((deprecated)) ++ ++def __deprecated_msg(_msg): return __attribute__((deprecated(_msg))) ++ ++def __deprecated_msg(_msg): return __attribute__((deprecated)) ++ ++def __deprecated_enum_msg(_msg): return __deprecated_msg(_msg) ++ ++def __COPYRIGHT(s): return __IDSTRING(copyright,s) ++ ++def __RCSID(s): return __IDSTRING(rcsid,s) ++ ++def __SCCSID(s): return __IDSTRING(sccsid,s) ++ ++def __PROJECT_VERSION(s): return __IDSTRING(project_version,s) ++ ++def __FBSDID(s): return ++ ++__DARWIN_ONLY_64_BIT_INO_T = 1 ++__DARWIN_ONLY_UNIX_CONFORMANCE = 1 ++__DARWIN_ONLY_VERS_1050 = 1 ++__DARWIN_ONLY_UNIX_CONFORMANCE = 1 ++__DARWIN_ONLY_UNIX_CONFORMANCE = 0 ++__DARWIN_UNIX03 = 1 ++__DARWIN_UNIX03 = 0 ++__DARWIN_UNIX03 = 1 ++__DARWIN_UNIX03 = 0 ++__DARWIN_UNIX03 = 0 ++__DARWIN_UNIX03 = 1 ++__DARWIN_64_BIT_INO_T = 1 ++__DARWIN_64_BIT_INO_T = 0 ++__DARWIN_64_BIT_INO_T = 1 ++__DARWIN_64_BIT_INO_T = 0 ++__DARWIN_64_BIT_INO_T = 1 ++__DARWIN_VERS_1050 = 1 ++__DARWIN_VERS_1050 = 0 ++__DARWIN_VERS_1050 = 1 ++__DARWIN_NON_CANCELABLE = 0 ++__DARWIN_SUF_UNIX03 = "$UNIX2003" ++__DARWIN_SUF_64_BIT_INO_T = "$INODE64" ++__DARWIN_SUF_1050 = "$1050" ++__DARWIN_SUF_NON_CANCELABLE = "$NOCANCEL" ++__DARWIN_SUF_EXTSN = "$DARWIN_EXTSN" ++ ++# Included from sys/_symbol_aliasing.h ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_2(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_2(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_2(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_3(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_5_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_5_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_6_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_6_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_7_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_7_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_0(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_1(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_2(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_3(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_4(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_5(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_6(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_7(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_8(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_9(x): return x ++ ++def __DARWIN_ALIAS_STARTING_MAC___MAC_10_10(x): return x ++ ++_POSIX_C_SOURCE = 199009 ++_POSIX_C_SOURCE = 199209 ++_POSIX_C_SOURCE = 200809 ++_POSIX_C_SOURCE = 200112 ++_POSIX_C_SOURCE = 199506 ++_POSIX_C_SOURCE = 198808 ++ ++# Included from sys/_posix_availability.h ++def __POSIX_C_DEPRECATED(ver): return ___POSIX_C_DEPRECATED_STARTING_##ver ++ ++__DARWIN_C_ANSI = 010000 ++__DARWIN_C_FULL = 900000 ++__DARWIN_C_LEVEL = __DARWIN_C_ANSI ++__DARWIN_C_LEVEL = _POSIX_C_SOURCE ++__DARWIN_C_LEVEL = __DARWIN_C_FULL ++__STDC_WANT_LIB_EXT1__ = 1 ++_DARWIN_FEATURE_64_BIT_INODE = 1 ++_DARWIN_FEATURE_ONLY_64_BIT_INODE = 1 ++_DARWIN_FEATURE_ONLY_VERS_1050 = 1 ++_DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1 ++_DARWIN_FEATURE_UNIX_CONFORMANCE = 3 ++ ++# Included from machine/_types.h ++__DARWIN_NULL = (0) ++__DARWIN_NULL = 0 ++ ++# Included from sys/_pthread/_pthread_types.h ++__PTHREAD_SIZE__ = 8176 ++__PTHREAD_ATTR_SIZE__ = 56 ++__PTHREAD_MUTEXATTR_SIZE__ = 8 ++__PTHREAD_MUTEX_SIZE__ = 56 ++__PTHREAD_CONDATTR_SIZE__ = 8 ++__PTHREAD_COND_SIZE__ = 40 ++__PTHREAD_ONCE_SIZE__ = 8 ++__PTHREAD_RWLOCK_SIZE__ = 192 ++__PTHREAD_RWLOCKATTR_SIZE__ = 16 ++__PTHREAD_SIZE__ = 4088 ++__PTHREAD_ATTR_SIZE__ = 36 ++__PTHREAD_MUTEXATTR_SIZE__ = 8 ++__PTHREAD_MUTEX_SIZE__ = 40 ++__PTHREAD_CONDATTR_SIZE__ = 4 ++__PTHREAD_COND_SIZE__ = 24 ++__PTHREAD_ONCE_SIZE__ = 4 ++__PTHREAD_RWLOCK_SIZE__ = 124 ++__PTHREAD_RWLOCKATTR_SIZE__ = 12 ++ ++# Included from stdint.h ++__WORDSIZE = 64 ++__WORDSIZE = 32 ++ ++# Included from sys/_types/_int8_t.h ++ ++# Included from sys/_types/_int16_t.h ++ ++# Included from sys/_types/_int32_t.h ++ ++# Included from sys/_types/_int64_t.h ++ ++# Included from _types/_uint8_t.h ++ ++# Included from _types/_uint16_t.h ++ ++# Included from _types/_uint32_t.h ++ ++# Included from _types/_uint64_t.h ++ ++# Included from sys/_types/_intptr_t.h ++ ++# Included from sys/_types/_uintptr_t.h ++ ++# Included from _types/_intmax_t.h ++ ++# Included from _types/_uintmax_t.h ++INT8_MAX = 127 ++INT16_MAX = 32767 ++INT32_MAX = 2147483647 ++INT8_MIN = -128 ++INT16_MIN = -32768 ++INT32_MIN = (-INT32_MAX-1) ++UINT8_MAX = 255 ++UINT16_MAX = 65535 ++INT_LEAST8_MIN = INT8_MIN ++INT_LEAST16_MIN = INT16_MIN ++INT_LEAST32_MIN = INT32_MIN ++INT_LEAST8_MAX = INT8_MAX ++INT_LEAST16_MAX = INT16_MAX ++INT_LEAST32_MAX = INT32_MAX ++UINT_LEAST8_MAX = UINT8_MAX ++UINT_LEAST16_MAX = UINT16_MAX ++INT_FAST8_MIN = INT8_MIN ++INT_FAST16_MIN = INT16_MIN ++INT_FAST32_MIN = INT32_MIN ++INT_FAST8_MAX = INT8_MAX ++INT_FAST16_MAX = INT16_MAX ++INT_FAST32_MAX = INT32_MAX ++UINT_FAST8_MAX = UINT8_MAX ++UINT_FAST16_MAX = UINT16_MAX ++INTPTR_MIN = INT32_MIN ++INTPTR_MAX = INT32_MAX ++PTRDIFF_MIN = INT32_MIN ++PTRDIFF_MAX = INT32_MAX ++WCHAR_MAX = 0x7fffffff ++WCHAR_MIN = 0 ++WCHAR_MIN = (-WCHAR_MAX-1) ++WINT_MIN = INT32_MIN ++WINT_MAX = INT32_MAX ++SIG_ATOMIC_MIN = INT32_MIN ++SIG_ATOMIC_MAX = INT32_MAX ++def INT8_C(v): return (v) ++ ++def INT16_C(v): return (v) ++ ++def INT32_C(v): return (v) ++ ++ ++# Included from Availability.h ++__MAC_10_0 = 1000 ++__MAC_10_1 = 1010 ++__MAC_10_2 = 1020 ++__MAC_10_3 = 1030 ++__MAC_10_4 = 1040 ++__MAC_10_5 = 1050 ++__MAC_10_6 = 1060 ++__MAC_10_7 = 1070 ++__MAC_10_8 = 1080 ++__MAC_10_9 = 1090 ++__MAC_10_10 = 101000 ++__IPHONE_2_0 = 20000 ++__IPHONE_2_1 = 20100 ++__IPHONE_2_2 = 20200 ++__IPHONE_3_0 = 30000 ++__IPHONE_3_1 = 30100 ++__IPHONE_3_2 = 30200 ++__IPHONE_4_0 = 40000 ++__IPHONE_4_1 = 40100 ++__IPHONE_4_2 = 40200 ++__IPHONE_4_3 = 40300 ++__IPHONE_5_0 = 50000 ++__IPHONE_5_1 = 50100 ++__IPHONE_6_0 = 60000 ++__IPHONE_6_1 = 60100 ++__IPHONE_7_0 = 70000 ++__IPHONE_7_1 = 70100 ++__IPHONE_8_0 = 80000 ++__IPHONE_8_1 = 80100 ++ ++# Included from AvailabilityInternal.h ++def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated(_msg))) ++ ++def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated)) ++ ++def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated(_msg))) ++ ++def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated)) ++ ++__IPHONE_OS_VERSION_MAX_ALLOWED = __IPHONE_8_1 ++__IPHONE_OS_VERSION_MIN_REQUIRED = __IPHONE_2_0 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=2.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=2.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=3.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=4.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=5.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=6.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=7.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.0))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.1))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,unavailable))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE ++ ++__MAC_OS_X_VERSION_MAX_ALLOWED = __MAC_10_10 ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10))) ++ ++def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,unavailable))) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 ++ ++def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE ++ ++def __OSX_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(macosx_app_extension,unavailable,_msg) ++ ++def __IOS_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(ios_app_extension,unavailable,_msg) ++ ++ ++# Included from sys/_types/_in_addr_t.h ++ ++# Included from sys/_types/_in_port_t.h ++ ++# Included from sys/socket.h ++ ++# Included from sys/types.h ++ ++# Included from machine/types.h ++ ++# Included from machine/endian.h ++ ++# Included from sys/_types/_dev_t.h ++ ++# Included from sys/_types/_blkcnt_t.h ++ ++# Included from sys/_types/_blksize_t.h ++ ++# Included from sys/_types/_gid_t.h ++ ++# Included from sys/_types/_ino_t.h ++ ++# Included from sys/_types/_ino64_t.h ++ ++# Included from sys/_types/_key_t.h ++ ++# Included from sys/_types/_mode_t.h ++ ++# Included from sys/_types/_nlink_t.h ++ ++# Included from sys/_types/_id_t.h ++ ++# Included from sys/_types/_pid_t.h ++ ++# Included from sys/_types/_off_t.h ++ ++# Included from sys/_types/_uid_t.h ++def major(x): return ((int32_t)(((u_int32_t)(x) >> 24) & 0xff)) ++ ++def minor(x): return ((int32_t)((x) & 0xffffff)) ++ ++ ++# Included from sys/_types/_clock_t.h ++ ++# Included from sys/_types/_size_t.h ++ ++# Included from sys/_types/_ssize_t.h ++ ++# Included from sys/_types/_time_t.h ++ ++# Included from sys/_types/_useconds_t.h ++ ++# Included from sys/_types/_suseconds_t.h ++ ++# Included from sys/_types/_rsize_t.h ++ ++# Included from sys/_types/_errno_t.h ++ ++# Included from sys/_types/_fd_def.h ++__DARWIN_FD_SETSIZE = 1024 ++__DARWIN_NBBY = 8 ++def __DARWIN_FD_ZERO(p): return __builtin_bzero(p, sizeof(*(p))) ++ ++def __DARWIN_FD_ZERO(p): return bzero(p, sizeof(*(p))) ++ ++NBBY = __DARWIN_NBBY ++ ++# Included from sys/_types/_fd_setsize.h ++FD_SETSIZE = __DARWIN_FD_SETSIZE ++ ++# Included from sys/_types/_fd_set.h ++ ++# Included from sys/_types/_fd_clr.h ++ ++# Included from sys/_types/_fd_zero.h ++def FD_ZERO(p): return __DARWIN_FD_ZERO(p) ++ ++ ++# Included from sys/_types/_fd_isset.h ++ ++# Included from sys/_types/_fd_copy.h ++ ++# Included from sys/_pthread/_pthread_attr_t.h ++ ++# Included from sys/_pthread/_pthread_cond_t.h ++ ++# Included from sys/_pthread/_pthread_condattr_t.h ++ ++# Included from sys/_pthread/_pthread_mutex_t.h ++ ++# Included from sys/_pthread/_pthread_mutexattr_t.h ++ ++# Included from sys/_pthread/_pthread_once_t.h ++ ++# Included from sys/_pthread/_pthread_rwlock_t.h ++ ++# Included from sys/_pthread/_pthread_rwlockattr_t.h ++ ++# Included from sys/_pthread/_pthread_t.h ++ ++# Included from sys/_pthread/_pthread_key_t.h ++ ++# Included from sys/_types/_fsblkcnt_t.h ++ ++# Included from sys/_types/_fsfilcnt_t.h ++ ++# Included from machine/_param.h ++ ++# Included from sys/_types/_sa_family_t.h ++ ++# Included from sys/_types/_socklen_t.h ++ ++# Included from sys/_types/_iovec_t.h ++SOCK_STREAM = 1 ++SOCK_DGRAM = 2 ++SOCK_RAW = 3 ++SOCK_RDM = 4 ++SOCK_SEQPACKET = 5 ++SO_DEBUG = 0x0001 ++SO_ACCEPTCONN = 0x0002 ++SO_REUSEADDR = 0x0004 ++SO_KEEPALIVE = 0x0008 ++SO_DONTROUTE = 0x0010 ++SO_BROADCAST = 0x0020 ++SO_USELOOPBACK = 0x0040 ++SO_LINGER = 0x0080 ++SO_LINGER = 0x1080 ++SO_OOBINLINE = 0x0100 ++SO_REUSEPORT = 0x0200 ++SO_TIMESTAMP = 0x0400 ++SO_TIMESTAMP_MONOTONIC = 0x0800 ++SO_ACCEPTFILTER = 0x1000 ++SO_DONTTRUNC = 0x2000 ++SO_WANTMORE = 0x4000 ++SO_WANTOOBFLAG = 0x8000 ++SO_SNDBUF = 0x1001 ++SO_RCVBUF = 0x1002 ++SO_SNDLOWAT = 0x1003 ++SO_RCVLOWAT = 0x1004 ++SO_SNDTIMEO = 0x1005 ++SO_RCVTIMEO = 0x1006 ++SO_ERROR = 0x1007 ++SO_TYPE = 0x1008 ++SO_LABEL = 0x1010 ++SO_PEERLABEL = 0x1011 ++SO_NREAD = 0x1020 ++SO_NKE = 0x1021 ++SO_NOSIGPIPE = 0x1022 ++SO_NOADDRERR = 0x1023 ++SO_NWRITE = 0x1024 ++SO_REUSESHAREUID = 0x1025 ++SO_NOTIFYCONFLICT = 0x1026 ++SO_UPCALLCLOSEWAIT = 0x1027 ++SO_LINGER_SEC = 0x1080 ++SO_RANDOMPORT = 0x1082 ++SO_NP_EXTENSIONS = 0x1083 ++SO_NUMRCVPKT = 0x1112 ++SONPX_SETOPTSHUT = 0x000000001 ++SOL_SOCKET = 0xffff ++AF_UNSPEC = 0 ++AF_UNIX = 1 ++AF_LOCAL = AF_UNIX ++AF_INET = 2 ++AF_IMPLINK = 3 ++AF_PUP = 4 ++AF_CHAOS = 5 ++AF_NS = 6 ++AF_ISO = 7 ++AF_OSI = AF_ISO ++AF_ECMA = 8 ++AF_DATAKIT = 9 ++AF_CCITT = 10 ++AF_SNA = 11 ++AF_DECnet = 12 ++AF_DLI = 13 ++AF_LAT = 14 ++AF_HYLINK = 15 ++AF_APPLETALK = 16 ++AF_ROUTE = 17 ++AF_LINK = 18 ++pseudo_AF_XTP = 19 ++AF_COIP = 20 ++AF_CNT = 21 ++pseudo_AF_RTIP = 22 ++AF_IPX = 23 ++AF_SIP = 24 ++pseudo_AF_PIP = 25 ++AF_NDRV = 27 ++AF_ISDN = 28 ++AF_E164 = AF_ISDN ++pseudo_AF_KEY = 29 ++AF_INET6 = 30 ++AF_NATM = 31 ++AF_SYSTEM = 32 ++AF_NETBIOS = 33 ++AF_PPP = 34 ++pseudo_AF_HDRCMPLT = 35 ++AF_RESERVED_36 = 36 ++AF_IEEE80211 = 37 ++AF_UTUN = 38 ++AF_MAX = 40 ++SOCK_MAXADDRLEN = 255 ++_SS_MAXSIZE = 128 ++PF_UNSPEC = AF_UNSPEC ++PF_LOCAL = AF_LOCAL ++PF_UNIX = PF_LOCAL ++PF_INET = AF_INET ++PF_IMPLINK = AF_IMPLINK ++PF_PUP = AF_PUP ++PF_CHAOS = AF_CHAOS ++PF_NS = AF_NS ++PF_ISO = AF_ISO ++PF_OSI = AF_ISO ++PF_ECMA = AF_ECMA ++PF_DATAKIT = AF_DATAKIT ++PF_CCITT = AF_CCITT ++PF_SNA = AF_SNA ++PF_DECnet = AF_DECnet ++PF_DLI = AF_DLI ++PF_LAT = AF_LAT ++PF_HYLINK = AF_HYLINK ++PF_APPLETALK = AF_APPLETALK ++PF_ROUTE = AF_ROUTE ++PF_LINK = AF_LINK ++PF_XTP = pseudo_AF_XTP ++PF_COIP = AF_COIP ++PF_CNT = AF_CNT ++PF_SIP = AF_SIP ++PF_IPX = AF_IPX ++PF_RTIP = pseudo_AF_RTIP ++PF_PIP = pseudo_AF_PIP ++PF_NDRV = AF_NDRV ++PF_ISDN = AF_ISDN ++PF_KEY = pseudo_AF_KEY ++PF_INET6 = AF_INET6 ++PF_NATM = AF_NATM ++PF_SYSTEM = AF_SYSTEM ++PF_NETBIOS = AF_NETBIOS ++PF_PPP = AF_PPP ++PF_RESERVED_36 = AF_RESERVED_36 ++PF_UTUN = AF_UTUN ++PF_MAX = AF_MAX ++NET_MAXID = AF_MAX ++NET_RT_DUMP = 1 ++NET_RT_FLAGS = 2 ++NET_RT_IFLIST = 3 ++NET_RT_STAT = 4 ++NET_RT_TRASH = 5 ++NET_RT_IFLIST2 = 6 ++NET_RT_DUMP2 = 7 ++NET_RT_MAXID = 10 ++SOMAXCONN = 128 ++MSG_OOB = 0x1 ++MSG_PEEK = 0x2 ++MSG_DONTROUTE = 0x4 ++MSG_EOR = 0x8 ++MSG_TRUNC = 0x10 ++MSG_CTRUNC = 0x20 ++MSG_WAITALL = 0x40 ++MSG_DONTWAIT = 0x80 ++MSG_EOF = 0x100 ++MSG_WAITSTREAM = 0x200 ++MSG_FLUSH = 0x400 ++MSG_HOLD = 0x800 ++MSG_SEND = 0x1000 ++MSG_HAVEMORE = 0x2000 ++MSG_RCVMORE = 0x4000 ++MSG_NEEDSA = 0x10000 ++CMGROUP_MAX = 16 ++def CMSG_FIRSTHDR(mhdr): return \ ++ ++SCM_RIGHTS = 0x01 ++SCM_TIMESTAMP = 0x02 ++SCM_CREDS = 0x03 ++SCM_TIMESTAMP_MONOTONIC = 0x04 ++SHUT_RD = 0 ++SHUT_WR = 1 ++SHUT_RDWR = 2 ++ ++# Included from sys/_endian.h ++def ntohl(x): return ((__uint32_t)(x)) ++ ++def ntohs(x): return ((__uint16_t)(x)) ++ ++def htonl(x): return ((__uint32_t)(x)) ++ ++def htons(x): return ((__uint16_t)(x)) ++ ++def ntohll(x): return ((__uint64_t)(x)) ++ ++def htonll(x): return ((__uint64_t)(x)) ++ ++def NTOHL(x): return (x) ++ ++def NTOHS(x): return (x) ++ ++def NTOHLL(x): return (x) ++ ++def HTONL(x): return (x) ++ ++def HTONS(x): return (x) ++ ++def HTONLL(x): return (x) ++ ++ ++# Included from libkern/_OSByteOrder.h ++def __DARWIN_OSSwapConstInt16(x): return \ ++ ++def __DARWIN_OSSwapConstInt32(x): return \ ++ ++def __DARWIN_OSSwapConstInt64(x): return \ ++ ++ ++# Included from libkern/arm/OSByteOrder.h ++ ++# Included from arm/arch.h ++ ++# Included from sys/_types/_os_inline.h ++def __DARWIN_OSSwapInt16(x): return \ ++ ++def __DARWIN_OSSwapInt32(x): return \ ++ ++def __DARWIN_OSSwapInt64(x): return \ ++ ++def __DARWIN_OSSwapInt16(x): return _OSSwapInt16(x) ++ ++def __DARWIN_OSSwapInt32(x): return _OSSwapInt32(x) ++ ++def __DARWIN_OSSwapInt64(x): return _OSSwapInt64(x) ++ ++def ntohs(x): return __DARWIN_OSSwapInt16(x) ++ ++def htons(x): return __DARWIN_OSSwapInt16(x) ++ ++def ntohl(x): return __DARWIN_OSSwapInt32(x) ++ ++def htonl(x): return __DARWIN_OSSwapInt32(x) ++ ++def ntohll(x): return __DARWIN_OSSwapInt64(x) ++ ++def htonll(x): return __DARWIN_OSSwapInt64(x) ++ ++IPPROTO_IP = 0 ++IPPROTO_HOPOPTS = 0 ++IPPROTO_ICMP = 1 ++IPPROTO_IGMP = 2 ++IPPROTO_GGP = 3 ++IPPROTO_IPV4 = 4 ++IPPROTO_IPIP = IPPROTO_IPV4 ++IPPROTO_TCP = 6 ++IPPROTO_ST = 7 ++IPPROTO_EGP = 8 ++IPPROTO_PIGP = 9 ++IPPROTO_RCCMON = 10 ++IPPROTO_NVPII = 11 ++IPPROTO_PUP = 12 ++IPPROTO_ARGUS = 13 ++IPPROTO_EMCON = 14 ++IPPROTO_XNET = 15 ++IPPROTO_CHAOS = 16 ++IPPROTO_UDP = 17 ++IPPROTO_MUX = 18 ++IPPROTO_MEAS = 19 ++IPPROTO_HMP = 20 ++IPPROTO_PRM = 21 ++IPPROTO_IDP = 22 ++IPPROTO_TRUNK1 = 23 ++IPPROTO_TRUNK2 = 24 ++IPPROTO_LEAF1 = 25 ++IPPROTO_LEAF2 = 26 ++IPPROTO_RDP = 27 ++IPPROTO_IRTP = 28 ++IPPROTO_TP = 29 ++IPPROTO_BLT = 30 ++IPPROTO_NSP = 31 ++IPPROTO_INP = 32 ++IPPROTO_SEP = 33 ++IPPROTO_3PC = 34 ++IPPROTO_IDPR = 35 ++IPPROTO_XTP = 36 ++IPPROTO_DDP = 37 ++IPPROTO_CMTP = 38 ++IPPROTO_TPXX = 39 ++IPPROTO_IL = 40 ++IPPROTO_IPV6 = 41 ++IPPROTO_SDRP = 42 ++IPPROTO_ROUTING = 43 ++IPPROTO_FRAGMENT = 44 ++IPPROTO_IDRP = 45 ++IPPROTO_RSVP = 46 ++IPPROTO_GRE = 47 ++IPPROTO_MHRP = 48 ++IPPROTO_BHA = 49 ++IPPROTO_ESP = 50 ++IPPROTO_AH = 51 ++IPPROTO_INLSP = 52 ++IPPROTO_SWIPE = 53 ++IPPROTO_NHRP = 54 ++IPPROTO_ICMPV6 = 58 ++IPPROTO_NONE = 59 ++IPPROTO_DSTOPTS = 60 ++IPPROTO_AHIP = 61 ++IPPROTO_CFTP = 62 ++IPPROTO_HELLO = 63 ++IPPROTO_SATEXPAK = 64 ++IPPROTO_KRYPTOLAN = 65 ++IPPROTO_RVD = 66 ++IPPROTO_IPPC = 67 ++IPPROTO_ADFS = 68 ++IPPROTO_SATMON = 69 ++IPPROTO_VISA = 70 ++IPPROTO_IPCV = 71 ++IPPROTO_CPNX = 72 ++IPPROTO_CPHB = 73 ++IPPROTO_WSN = 74 ++IPPROTO_PVP = 75 ++IPPROTO_BRSATMON = 76 ++IPPROTO_ND = 77 ++IPPROTO_WBMON = 78 ++IPPROTO_WBEXPAK = 79 ++IPPROTO_EON = 80 ++IPPROTO_VMTP = 81 ++IPPROTO_SVMTP = 82 ++IPPROTO_VINES = 83 ++IPPROTO_TTP = 84 ++IPPROTO_IGP = 85 ++IPPROTO_DGP = 86 ++IPPROTO_TCF = 87 ++IPPROTO_IGRP = 88 ++IPPROTO_OSPFIGP = 89 ++IPPROTO_SRPC = 90 ++IPPROTO_LARP = 91 ++IPPROTO_MTP = 92 ++IPPROTO_AX25 = 93 ++IPPROTO_IPEIP = 94 ++IPPROTO_MICP = 95 ++IPPROTO_SCCSP = 96 ++IPPROTO_ETHERIP = 97 ++IPPROTO_ENCAP = 98 ++IPPROTO_APES = 99 ++IPPROTO_GMTP = 100 ++IPPROTO_PIM = 103 ++IPPROTO_IPCOMP = 108 ++IPPROTO_PGM = 113 ++IPPROTO_SCTP = 132 ++IPPROTO_DIVERT = 254 ++IPPROTO_RAW = 255 ++IPPROTO_MAX = 256 ++IPPROTO_DONE = 257 ++__DARWIN_IPPORT_RESERVED = 1024 ++IPPORT_RESERVED = __DARWIN_IPPORT_RESERVED ++IPPORT_USERRESERVED = 5000 ++IPPORT_HIFIRSTAUTO = 49152 ++IPPORT_HILASTAUTO = 65535 ++IPPORT_RESERVEDSTART = 600 ++def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) ++ ++IN_CLASSA_NET = 0xff000000 ++IN_CLASSA_NSHIFT = 24 ++IN_CLASSA_HOST = 0x00ffffff ++IN_CLASSA_MAX = 128 ++def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) ++ ++IN_CLASSB_NET = 0xffff0000 ++IN_CLASSB_NSHIFT = 16 ++IN_CLASSB_HOST = 0x0000ffff ++IN_CLASSB_MAX = 65536 ++def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) ++ ++IN_CLASSC_NET = 0xffffff00 ++IN_CLASSC_NSHIFT = 8 ++IN_CLASSC_HOST = 0x000000ff ++def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) ++ ++IN_CLASSD_NET = 0xf0000000 ++IN_CLASSD_NSHIFT = 28 ++IN_CLASSD_HOST = 0x0fffffff ++def IN_MULTICAST(i): return IN_CLASSD(i) ++ ++def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++ ++def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++ ++INADDR_NONE = 0xffffffff ++def IN_LINKLOCAL(i): return (((u_int32_t)(i) & IN_CLASSB_NET) == IN_LINKLOCALNETNUM) ++ ++def IN_LOOPBACK(i): return (((u_int32_t)(i) & 0xff000000) == 0x7f000000) ++ ++def IN_ZERONET(i): return (((u_int32_t)(i) & 0xff000000) == 0) ++ ++def IN_LOCAL_GROUP(i): return (((u_int32_t)(i) & 0xffffff00) == 0xe0000000) ++ ++IN_LOOPBACKNET = 127 ++INET_ADDRSTRLEN = 16 ++IP_OPTIONS = 1 ++IP_HDRINCL = 2 ++IP_TOS = 3 ++IP_TTL = 4 ++IP_RECVOPTS = 5 ++IP_RECVRETOPTS = 6 ++IP_RECVDSTADDR = 7 ++IP_RETOPTS = 8 ++IP_MULTICAST_IF = 9 ++IP_MULTICAST_TTL = 10 ++IP_MULTICAST_LOOP = 11 ++IP_ADD_MEMBERSHIP = 12 ++IP_DROP_MEMBERSHIP = 13 ++IP_MULTICAST_VIF = 14 ++IP_RSVP_ON = 15 ++IP_RSVP_OFF = 16 ++IP_RSVP_VIF_ON = 17 ++IP_RSVP_VIF_OFF = 18 ++IP_PORTRANGE = 19 ++IP_RECVIF = 20 ++IP_IPSEC_POLICY = 21 ++IP_FAITH = 22 ++IP_STRIPHDR = 23 ++IP_RECVTTL = 24 ++IP_BOUND_IF = 25 ++IP_PKTINFO = 26 ++IP_RECVPKTINFO = IP_PKTINFO ++IP_FW_ADD = 40 ++IP_FW_DEL = 41 ++IP_FW_FLUSH = 42 ++IP_FW_ZERO = 43 ++IP_FW_GET = 44 ++IP_FW_RESETLOG = 45 ++IP_OLD_FW_ADD = 50 ++IP_OLD_FW_DEL = 51 ++IP_OLD_FW_FLUSH = 52 ++IP_OLD_FW_ZERO = 53 ++IP_OLD_FW_GET = 54 ++IP_NAT__XXX = 55 ++IP_OLD_FW_RESETLOG = 56 ++IP_DUMMYNET_CONFIGURE = 60 ++IP_DUMMYNET_DEL = 61 ++IP_DUMMYNET_FLUSH = 62 ++IP_DUMMYNET_GET = 64 ++IP_TRAFFIC_MGT_BACKGROUND = 65 ++IP_MULTICAST_IFINDEX = 66 ++IP_ADD_SOURCE_MEMBERSHIP = 70 ++IP_DROP_SOURCE_MEMBERSHIP = 71 ++IP_BLOCK_SOURCE = 72 ++IP_UNBLOCK_SOURCE = 73 ++IP_MSFILTER = 74 ++MCAST_JOIN_GROUP = 80 ++MCAST_LEAVE_GROUP = 81 ++MCAST_JOIN_SOURCE_GROUP = 82 ++MCAST_LEAVE_SOURCE_GROUP = 83 ++MCAST_BLOCK_SOURCE = 84 ++MCAST_UNBLOCK_SOURCE = 85 ++IP_DEFAULT_MULTICAST_TTL = 1 ++IP_DEFAULT_MULTICAST_LOOP = 1 ++IP_MIN_MEMBERSHIPS = 31 ++IP_MAX_MEMBERSHIPS = 4095 ++IP_MAX_GROUP_SRC_FILTER = 512 ++IP_MAX_SOCK_SRC_FILTER = 128 ++IP_MAX_SOCK_MUTE_FILTER = 128 ++MCAST_UNDEFINED = 0 ++MCAST_INCLUDE = 1 ++MCAST_EXCLUDE = 2 ++IP_PORTRANGE_DEFAULT = 0 ++IP_PORTRANGE_HIGH = 1 ++IP_PORTRANGE_LOW = 2 ++IPPROTO_MAXID = (IPPROTO_AH + 1) ++IPCTL_FORWARDING = 1 ++IPCTL_SENDREDIRECTS = 2 ++IPCTL_DEFTTL = 3 ++IPCTL_DEFMTU = 4 ++IPCTL_RTEXPIRE = 5 ++IPCTL_RTMINEXPIRE = 6 ++IPCTL_RTMAXCACHE = 7 ++IPCTL_SOURCEROUTE = 8 ++IPCTL_DIRECTEDBROADCAST = 9 ++IPCTL_INTRQMAXLEN = 10 ++IPCTL_INTRQDROPS = 11 ++IPCTL_STATS = 12 ++IPCTL_ACCEPTSOURCEROUTE = 13 ++IPCTL_FASTFORWARDING = 14 ++IPCTL_KEEPFAITH = 15 ++IPCTL_GIF_TTL = 16 ++IPCTL_MAXID = 17 ++ ++# Included from netinet6/in6.h ++__KAME_VERSION = "2009/apple-darwin" ++IPV6PORT_RESERVED = 1024 ++IPV6PORT_ANONMIN = 49152 ++IPV6PORT_ANONMAX = 65535 ++IPV6PORT_RESERVEDMIN = 600 ++IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) ++INET6_ADDRSTRLEN = 46 ++def IN6_IS_ADDR_UNSPECIFIED(a): return \ ++ ++def IN6_IS_ADDR_LOOPBACK(a): return \ ++ ++def IN6_IS_ADDR_V4COMPAT(a): return \ ++ ++def IN6_IS_ADDR_V4MAPPED(a): return \ ++ ++__IPV6_ADDR_SCOPE_NODELOCAL = 0x01 ++__IPV6_ADDR_SCOPE_INTFACELOCAL = 0x01 ++__IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 ++__IPV6_ADDR_SCOPE_SITELOCAL = 0x05 ++__IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 ++__IPV6_ADDR_SCOPE_GLOBAL = 0x0e ++def IN6_IS_ADDR_LINKLOCAL(a): return \ ++ ++def IN6_IS_ADDR_SITELOCAL(a): return \ ++ ++def IN6_IS_ADDR_UNIQUE_LOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_NODELOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_SITELOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_GLOBAL(a): return \ ++ ++IPV6_OPTIONS = 1 ++IPV6_RECVOPTS = 5 ++IPV6_RECVRETOPTS = 6 ++IPV6_RECVDSTADDR = 7 ++IPV6_RETOPTS = 8 ++IPV6_SOCKOPT_RESERVED1 = 3 ++IPV6_UNICAST_HOPS = 4 ++IPV6_MULTICAST_IF = 9 ++IPV6_MULTICAST_HOPS = 10 ++IPV6_MULTICAST_LOOP = 11 ++IPV6_JOIN_GROUP = 12 ++IPV6_LEAVE_GROUP = 13 ++IPV6_PORTRANGE = 14 ++ICMP6_FILTER = 18 ++IPV6_2292PKTINFO = 19 ++IPV6_2292HOPLIMIT = 20 ++IPV6_2292NEXTHOP = 21 ++IPV6_2292HOPOPTS = 22 ++IPV6_2292DSTOPTS = 23 ++IPV6_2292RTHDR = 24 ++IPV6_2292PKTOPTIONS = 25 ++IPV6_PKTINFO = IPV6_2292PKTINFO ++IPV6_HOPLIMIT = IPV6_2292HOPLIMIT ++IPV6_NEXTHOP = IPV6_2292NEXTHOP ++IPV6_HOPOPTS = IPV6_2292HOPOPTS ++IPV6_DSTOPTS = IPV6_2292DSTOPTS ++IPV6_RTHDR = IPV6_2292RTHDR ++IPV6_PKTOPTIONS = IPV6_2292PKTOPTIONS ++IPV6_CHECKSUM = 26 ++IPV6_V6ONLY = 27 ++IPV6_BINDV6ONLY = IPV6_V6ONLY ++IPV6_IPSEC_POLICY = 28 ++IPV6_FAITH = 29 ++IPV6_FW_ADD = 30 ++IPV6_FW_DEL = 31 ++IPV6_FW_FLUSH = 32 ++IPV6_FW_ZERO = 33 ++IPV6_FW_GET = 34 ++IPV6_RECVTCLASS = 35 ++IPV6_TCLASS = 36 ++IPV6_RTHDRDSTOPTS = 57 ++IPV6_RECVPKTINFO = 61 ++IPV6_RECVHOPLIMIT = 37 ++IPV6_RECVRTHDR = 38 ++IPV6_RECVHOPOPTS = 39 ++IPV6_RECVDSTOPTS = 40 ++IPV6_USE_MIN_MTU = 42 ++IPV6_RECVPATHMTU = 43 ++IPV6_PATHMTU = 44 ++IPV6_REACHCONF = 45 ++IPV6_3542PKTINFO = 46 ++IPV6_3542HOPLIMIT = 47 ++IPV6_3542NEXTHOP = 48 ++IPV6_3542HOPOPTS = 49 ++IPV6_3542DSTOPTS = 50 ++IPV6_3542RTHDR = 51 ++IPV6_PKTINFO = IPV6_3542PKTINFO ++IPV6_HOPLIMIT = IPV6_3542HOPLIMIT ++IPV6_NEXTHOP = IPV6_3542NEXTHOP ++IPV6_HOPOPTS = IPV6_3542HOPOPTS ++IPV6_DSTOPTS = IPV6_3542DSTOPTS ++IPV6_RTHDR = IPV6_3542RTHDR ++IPV6_AUTOFLOWLABEL = 59 ++IPV6_DONTFRAG = 62 ++IPV6_PREFER_TEMPADDR = 63 ++IPV6_MSFILTER = 74 ++IPV6_BOUND_IF = 125 ++IPV6_RTHDR_LOOSE = 0 ++IPV6_RTHDR_STRICT = 1 ++IPV6_RTHDR_TYPE_0 = 0 ++IPV6_DEFAULT_MULTICAST_HOPS = 1 ++IPV6_DEFAULT_MULTICAST_LOOP = 1 ++IPV6_MIN_MEMBERSHIPS = 31 ++IPV6_MAX_MEMBERSHIPS = 4095 ++IPV6_MAX_GROUP_SRC_FILTER = 512 ++IPV6_MAX_SOCK_SRC_FILTER = 128 ++IPV6_PORTRANGE_DEFAULT = 0 ++IPV6_PORTRANGE_HIGH = 1 ++IPV6_PORTRANGE_LOW = 2 ++IPV6PROTO_MAXID = (IPPROTO_PIM + 1) ++IPV6CTL_FORWARDING = 1 ++IPV6CTL_SENDREDIRECTS = 2 ++IPV6CTL_DEFHLIM = 3 ++IPV6CTL_DEFMTU = 4 ++IPV6CTL_FORWSRCRT = 5 ++IPV6CTL_STATS = 6 ++IPV6CTL_MRTSTATS = 7 ++IPV6CTL_MRTPROTO = 8 ++IPV6CTL_MAXFRAGPACKETS = 9 ++IPV6CTL_SOURCECHECK = 10 ++IPV6CTL_SOURCECHECK_LOGINT = 11 ++IPV6CTL_ACCEPT_RTADV = 12 ++IPV6CTL_KEEPFAITH = 13 ++IPV6CTL_LOG_INTERVAL = 14 ++IPV6CTL_HDRNESTLIMIT = 15 ++IPV6CTL_DAD_COUNT = 16 ++IPV6CTL_AUTO_FLOWLABEL = 17 ++IPV6CTL_DEFMCASTHLIM = 18 ++IPV6CTL_GIF_HLIM = 19 ++IPV6CTL_KAME_VERSION = 20 ++IPV6CTL_USE_DEPRECATED = 21 ++IPV6CTL_RR_PRUNE = 22 ++IPV6CTL_MAPPED_ADDR = 23 ++IPV6CTL_V6ONLY = 24 ++IPV6CTL_RTEXPIRE = 25 ++IPV6CTL_RTMINEXPIRE = 26 ++IPV6CTL_RTMAXCACHE = 27 ++IPV6CTL_USETEMPADDR = 32 ++IPV6CTL_TEMPPLTIME = 33 ++IPV6CTL_TEMPVLTIME = 34 ++IPV6CTL_AUTO_LINKLOCAL = 35 ++IPV6CTL_RIP6STATS = 36 ++IPV6CTL_PREFER_TEMPADDR = 37 ++IPV6CTL_ADDRCTLPOLICY = 38 ++IPV6CTL_USE_DEFAULTZONE = 39 ++IPV6CTL_MAXFRAGS = 41 ++IPV6CTL_MCAST_PMTU = 44 ++IPV6CTL_NEIGHBORGCTHRESH = 46 ++IPV6CTL_MAXIFPREFIXES = 47 ++IPV6CTL_MAXIFDEFROUTERS = 48 ++IPV6CTL_MAXDYNROUTES = 49 ++ICMPV6CTL_ND6_ONLINKNSRFC4861 = 50 ++IPV6CTL_MAXID = 51 +diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen +--- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Lib/plat-ios/regen 2015-02-15 08:51:58.000000000 +0800 +@@ -0,0 +1,3 @@ ++#! /bin/sh ++set -v ++include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h +diff -Nru orig/Lib/platform.py modified/Lib/platform.py +--- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 +@@ -841,7 +841,7 @@ + + """ Interface to the system's uname command. + """ +- if sys.platform in ('dos', 'win32', 'win16'): ++ if sys.platform in ('dos', 'win32', 'win16', 'ios'): + # XXX Others too ? + return default + try: +@@ -864,7 +864,7 @@ + default in case the command should fail. + + """ +- if sys.platform in ('dos', 'win32', 'win16'): ++ if sys.platform in ('dos', 'win32', 'win16', 'ios'): + # XXX Others too ? + return default + target = _follow_symlinks(target) +diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py +--- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 +@@ -602,6 +602,57 @@ + register("firefox", None, MacOSXOSAScript('firefox'), -1) + register("MacOSX", None, MacOSXOSAScript('default'), -1) + ++# ++# Platform support for iOS ++# ++if sys.platform == 'ios': ++ class MobileSafari(BaseBrowser): ++ def open(self, url, new=0, autoraise=True): ++ # This code is the equivalent of: ++ # NSURL *nsurl = [NSURL URLWithString:url]; ++ # [[UIApplication sharedApplication] openURL:nsurl]; ++ from ctypes import cdll, c_void_p, c_char_p, c_uint32 ++ from ctypes import util ++ objc = cdll.LoadLibrary(util.find_library(b'objc')) ++ cf = cdll.LoadLibrary(util.find_library(b'CoreFoundation')) ++ objc.objc_getClass.restype = c_void_p ++ objc.objc_getClass.argtypes = [c_char_p] ++ objc.sel_registerName.restype = c_void_p ++ objc.sel_registerName.argtypes = [c_char_p] ++ cf.CFStringCreateWithCString.restype = c_void_p ++ cf.CFStringCreateWithCString.argtypes = [c_void_p, c_char_p, c_uint32] ++ ++ # Get an NSString describing the URL ++ kCFStringEncodingUTF8 = 0x08000100 ++ url = c_void_p(cf.CFStringCreateWithCString(None, url.encode('utf-8'), kCFStringEncodingUTF8)) ++ autorelease = c_void_p(objc.sel_registerName(b'autorelease')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] ++ objc.objc_msgSend.restype = c_void_p ++ objc.objc_msgSend(url, autorelease) ++ ++ # Get an NSURL object representing the URL ++ NSURL = c_void_p(objc.objc_getClass(b'NSURL')) ++ urlWithString_ = c_void_p(objc.sel_registerName(b'URLWithString:')) ++ objc.objc_msgSend.restype = c_void_p ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] ++ nsurl = c_void_p(objc.objc_msgSend(NSURL, urlWithString_, url)) ++ ++ # Get the shared UIApplication instance ++ UIApplication = c_void_p(objc.objc_getClass(b'UIApplication')) ++ sharedApplication = c_void_p(objc.sel_registerName(b'sharedApplication')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] ++ objc.objc_msgSend.restype = c_void_p ++ shared_app = c_void_p(objc.objc_msgSend(UIApplication, sharedApplication)) ++ ++ # Open the URL on the shared application ++ openURL_ = c_void_p(objc.sel_registerName(b'openURL:')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] ++ objc.objc_msgSend.restype = None ++ objc.objc_msgSend(shared_app, openURL_, nsurl) ++ ++ return True ++ ++ register("mobilesafari", None, MobileSafari(), -1) + + # OK, now that we know what the default preference orders for each + # platform are, allow user to override them with the BROWSER variable. +diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 +--- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-aarch64 2015-02-28 16:58:11.000000000 +0800 +@@ -0,0 +1,118 @@ ++##################################################################### ++# Static compilation instructions for all binary modules. ++##################################################################### ++ ++_bisect _bisectmodule.c ++_codecs_cn cjkcodecs/_codecs_cn.c ++_codecs_hk cjkcodecs/_codecs_hk.c ++_codecs_iso2022 cjkcodecs/_codecs_iso2022.c ++_codecs_jp cjkcodecs/_codecs_jp.c ++_codecs_kr cjkcodecs/_codecs_kr.c ++_codecs_tw cjkcodecs/_codecs_tw.c ++_crypt _cryptmodule.c ++_csv _csv.c ++_datetime _datetimemodule.c ++_elementtree _elementtree.c \ ++ -I$(srcdir)/Modules/expat ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++_heapq _heapqmodule.c ++_json _json.c ++_lsprof _lsprof.o rotatingtree.c ++_md5 md5module.c ++_multibytecodec cjkcodecs/multibytecodec.c ++_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c ++_opcode _opcode.c ++_pickle _pickle.c ++_posixsubprocess _posixsubprocess.c ++_random _randommodule.c ++_sha1 sha1module.c ++_sha256 sha256module.c ++_sha512 sha512module.c ++_socket socketmodule.c ++_struct _struct.c ++array arraymodule.c ++audioop audioop.c ++binascii binascii.c ++cmath cmathmodule.c _math.c ++fcntl fcntlmodule.c ++grp grpmodule.c ++math mathmodule.c ++mmap mmapmodule.c ++parser parsermodule.c ++pyexpat expat/xmlparse.c \ ++ expat/xmlrole.c \ ++ expat/xmltok.c \ ++ pyexpat.c \ ++ -I$(srcdir)/Modules/expat \ ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++resource resource.c ++select selectmodule.c ++syslog syslogmodule.c ++termios termios.c ++time timemodule.c ++unicodedata unicodedata.c ++xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 ++zlib zlibmodule.c -I$(prefix)/include -lz ++ ++##################################################################### ++# Testing modules ++##################################################################### ++_ctypes_test _ctypes/_ctypes_test.c ++_testbuffer _testbuffer.c ++_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 ++_testimportmultiple _testimportmultiple.c ++ ++##################################################################### ++# Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/aarch64/ffi.c \ ++ _ctypes/libffi_ios/aarch64/sysv.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 ++ ++##################################################################### ++# Modules that require additional frameworks ++##################################################################### ++#_bz2 bz2module.c -lbz2 ++#_curses _cursesmodule.c -lcurses -ltermcap ++#_curses_panel _curses_panel.c -lpanel -lncurses ++#_dbm _dbmmodule.c ++#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm ++#_lzma ++#_sqlite3 ++#_ssl _ssl.c \ ++# -I$(SSL)/include -I$(SSL)/include/openssl \ ++# -L$(SSL)/lib -lssl -lcrypto ++# -DUSE_SSL ++#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... ++#nis nismodule.c -lnsl ++#ossaudiodev ++#readline readline.c -lreadline -ltermcap ++#spwd spwdmodule.c +diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm +--- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-arm 2015-02-28 17:01:14.000000000 +0800 +@@ -0,0 +1,119 @@ ++##################################################################### ++# Static compilation instructions for all binary modules. ++##################################################################### ++ ++_bisect _bisectmodule.c ++_codecs_cn cjkcodecs/_codecs_cn.c ++_codecs_hk cjkcodecs/_codecs_hk.c ++_codecs_iso2022 cjkcodecs/_codecs_iso2022.c ++_codecs_jp cjkcodecs/_codecs_jp.c ++_codecs_kr cjkcodecs/_codecs_kr.c ++_codecs_tw cjkcodecs/_codecs_tw.c ++_crypt _cryptmodule.c ++_csv _csv.c ++_datetime _datetimemodule.c ++_elementtree _elementtree.c \ ++ -I$(srcdir)/Modules/expat ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++_heapq _heapqmodule.c ++_json _json.c ++_lsprof _lsprof.o rotatingtree.c ++_md5 md5module.c ++_multibytecodec cjkcodecs/multibytecodec.c ++_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c ++_opcode _opcode.c ++_pickle _pickle.c ++_posixsubprocess _posixsubprocess.c ++_random _randommodule.c ++_sha1 sha1module.c ++_sha256 sha256module.c ++_sha512 sha512module.c ++_socket socketmodule.c ++_struct _struct.c ++array arraymodule.c ++audioop audioop.c ++binascii binascii.c ++cmath cmathmodule.c _math.c ++fcntl fcntlmodule.c ++grp grpmodule.c ++math mathmodule.c ++mmap mmapmodule.c ++parser parsermodule.c ++pyexpat expat/xmlparse.c \ ++ expat/xmlrole.c \ ++ expat/xmltok.c \ ++ pyexpat.c \ ++ -I$(srcdir)/Modules/expat \ ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++resource resource.c ++select selectmodule.c ++syslog syslogmodule.c ++termios termios.c ++time timemodule.c ++unicodedata unicodedata.c ++xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 ++zlib zlibmodule.c -I$(prefix)/include -lz ++ ++##################################################################### ++# Testing modules ++##################################################################### ++_ctypes_test _ctypes/_ctypes_test.c ++_testbuffer _testbuffer.c ++_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 ++_testimportmultiple _testimportmultiple.c ++ ++##################################################################### ++# Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/arm/ffi.c \ ++ _ctypes/libffi_ios/arm/sysv.S \ ++ _ctypes/libffi_ios/arm/trampoline.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_32=1 -DANSI=1 ++ ++##################################################################### ++# Modules that require additional frameworks ++##################################################################### ++#_bz2 bz2module.c -lbz2 ++#_curses _cursesmodule.c -lcurses -ltermcap ++#_curses_panel _curses_panel.c -lpanel -lncurses ++#_dbm _dbmmodule.c ++#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm ++#_lzma ++#_sqlite3 ++#_ssl _ssl.c \ ++# -I$(SSL)/include -I$(SSL)/include/openssl \ ++# -L$(SSL)/lib -lssl -lcrypto ++# -DUSE_SSL ++#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... ++#nis nismodule.c -lnsl ++#ossaudiodev ++#readline readline.c -lreadline -ltermcap ++#spwd spwdmodule.c +diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 +--- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-i386 2015-03-12 21:44:02.000000000 +0800 +@@ -0,0 +1,118 @@ ++##################################################################### ++# Static compilation instructions for all binary modules. ++##################################################################### ++ ++_bisect _bisectmodule.c ++_codecs_cn cjkcodecs/_codecs_cn.c ++_codecs_hk cjkcodecs/_codecs_hk.c ++_codecs_iso2022 cjkcodecs/_codecs_iso2022.c ++_codecs_jp cjkcodecs/_codecs_jp.c ++_codecs_kr cjkcodecs/_codecs_kr.c ++_codecs_tw cjkcodecs/_codecs_tw.c ++_crypt _cryptmodule.c ++_csv _csv.c ++_datetime _datetimemodule.c ++_elementtree _elementtree.c \ ++ -I$(srcdir)/Modules/expat ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++_heapq _heapqmodule.c ++_json _json.c ++_lsprof _lsprof.o rotatingtree.c ++_md5 md5module.c ++_multibytecodec cjkcodecs/multibytecodec.c ++_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c ++_opcode _opcode.c ++_pickle _pickle.c ++_posixsubprocess _posixsubprocess.c ++_random _randommodule.c ++_sha1 sha1module.c ++_sha256 sha256module.c ++_sha512 sha512module.c ++_socket socketmodule.c ++_struct _struct.c ++array arraymodule.c ++audioop audioop.c ++binascii binascii.c ++cmath cmathmodule.c _math.c ++fcntl fcntlmodule.c ++grp grpmodule.c ++math mathmodule.c ++mmap mmapmodule.c ++parser parsermodule.c ++pyexpat expat/xmlparse.c \ ++ expat/xmlrole.c \ ++ expat/xmltok.c \ ++ pyexpat.c \ ++ -I$(srcdir)/Modules/expat \ ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++resource resource.c ++select selectmodule.c ++syslog syslogmodule.c ++termios termios.c ++time timemodule.c ++unicodedata unicodedata.c ++xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 ++zlib zlibmodule.c -I$(prefix)/include -lz ++ ++##################################################################### ++# Testing modules ++##################################################################### ++_ctypes_test _ctypes/_ctypes_test.c ++_testbuffer _testbuffer.c ++_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 ++_testimportmultiple _testimportmultiple.c ++ ++##################################################################### ++# Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/x86/ffi.c \ ++ _ctypes/libffi_ios/x86/sysv.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_32=1 -DANSI=1 ++ ++##################################################################### ++# Modules that require additional frameworks ++##################################################################### ++#_bz2 bz2module.c -lbz2 ++#_curses _cursesmodule.c -lcurses -ltermcap ++#_curses_panel _curses_panel.c -lpanel -lncurses ++#_dbm _dbmmodule.c ++#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm ++#_lzma ++#_sqlite3 ++#_ssl _ssl.c \ ++# -I$(SSL)/include -I$(SSL)/include/openssl \ ++# -L$(SSL)/lib -lssl -lcrypto ++# -DUSE_SSL ++#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... ++#nis nismodule.c -lnsl ++#ossaudiodev ++#readline readline.c -lreadline -ltermcap ++#spwd spwdmodule.c +diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 +--- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-x86_64 2015-03-12 21:40:26.000000000 +0800 +@@ -0,0 +1,118 @@ ++##################################################################### ++# Static compilation instructions for all binary modules. ++##################################################################### ++ ++_bisect _bisectmodule.c ++_codecs_cn cjkcodecs/_codecs_cn.c ++_codecs_hk cjkcodecs/_codecs_hk.c ++_codecs_iso2022 cjkcodecs/_codecs_iso2022.c ++_codecs_jp cjkcodecs/_codecs_jp.c ++_codecs_kr cjkcodecs/_codecs_kr.c ++_codecs_tw cjkcodecs/_codecs_tw.c ++_crypt _cryptmodule.c ++_csv _csv.c ++_datetime _datetimemodule.c ++_elementtree _elementtree.c \ ++ -I$(srcdir)/Modules/expat ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++_heapq _heapqmodule.c ++_json _json.c ++_lsprof _lsprof.o rotatingtree.c ++_md5 md5module.c ++_multibytecodec cjkcodecs/multibytecodec.c ++_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c ++_opcode _opcode.c ++_pickle _pickle.c ++_posixsubprocess _posixsubprocess.c ++_random _randommodule.c ++_sha1 sha1module.c ++_sha256 sha256module.c ++_sha512 sha512module.c ++_socket socketmodule.c ++_struct _struct.c ++array arraymodule.c ++audioop audioop.c ++binascii binascii.c ++cmath cmathmodule.c _math.c ++fcntl fcntlmodule.c ++grp grpmodule.c ++math mathmodule.c ++mmap mmapmodule.c ++parser parsermodule.c ++pyexpat expat/xmlparse.c \ ++ expat/xmlrole.c \ ++ expat/xmltok.c \ ++ pyexpat.c \ ++ -I$(srcdir)/Modules/expat \ ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++resource resource.c ++select selectmodule.c ++syslog syslogmodule.c ++termios termios.c ++time timemodule.c ++unicodedata unicodedata.c ++xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 ++zlib zlibmodule.c -I$(prefix)/include -lz ++ ++##################################################################### ++# Testing modules ++##################################################################### ++_ctypes_test _ctypes/_ctypes_test.c ++_testbuffer _testbuffer.c ++_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 ++_testimportmultiple _testimportmultiple.c ++ ++##################################################################### ++# Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/x86/ffi64.c \ ++ _ctypes/libffi_ios/x86/unix64.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 ++ ++##################################################################### ++# Modules that require additional frameworks ++##################################################################### ++#_bz2 bz2module.c -lbz2 ++#_curses _cursesmodule.c -lcurses -ltermcap ++#_curses_panel _curses_panel.c -lpanel -lncurses ++#_dbm _dbmmodule.c ++#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm ++#_lzma ++#_sqlite3 ++#_ssl _ssl.c \ ++# -I$(SSL)/include -I$(SSL)/include/openssl \ ++# -L$(SSL)/lib -lssl -lcrypto ++# -DUSE_SSL ++#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... ++#nis nismodule.c -lnsl ++#ossaudiodev ++#readline readline.c -lreadline -ltermcap ++#spwd spwdmodule.c +diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE +--- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-02-26 10:00:15.000000000 +0800 +@@ -0,0 +1,21 @@ ++libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. ++See source files for details. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. +diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README +--- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README 2015-02-26 10:00:00.000000000 +0800 +@@ -0,0 +1,447 @@ ++Status ++====== ++ ++libffi-3.2.1 was released on November 12, 2014. Check the libffi web ++page for updates: . ++ ++ ++What is libffi? ++=============== ++ ++Compilers for high level languages generate code that follow certain ++conventions. These conventions are necessary, in part, for separate ++compilation to work. One such convention is the "calling ++convention". The "calling convention" is essentially a set of ++assumptions made by the compiler about where function arguments will ++be found on entry to a function. A "calling convention" also specifies ++where the return value for a function is found. ++ ++Some programs may not know at the time of compilation what arguments ++are to be passed to a function. For instance, an interpreter may be ++told at run-time about the number and types of arguments used to call ++a given function. Libffi can be used in such programs to provide a ++bridge from the interpreter program to compiled code. ++ ++The libffi library provides a portable, high level programming ++interface to various calling conventions. This allows a programmer to ++call any function specified by a call interface description at run ++time. ++ ++FFI stands for Foreign Function Interface. A foreign function ++interface is the popular name for the interface that allows code ++written in one language to call code written in another language. The ++libffi library really only provides the lowest, machine dependent ++layer of a fully featured foreign function interface. A layer must ++exist above libffi that handles type conversions for values passed ++between the two languages. ++ ++ ++Supported Platforms ++=================== ++ ++Libffi has been ported to many different platforms. ++For specific configuration details and testing status, please ++refer to the wiki page here: ++ ++ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 ++ ++At the time of release, the following basic configurations have been ++tested: ++ ++|-----------------+------------------+-------------------------| ++| Architecture | Operating System | Compiler | ++|-----------------+------------------+-------------------------| ++| AArch64 (ARM64) | iOS | Clang | ++| AArch64 | Linux | GCC | ++| Alpha | Linux | GCC | ++| Alpha | Tru64 | GCC | ++| ARC | Linux | GCC | ++| ARM | Linux | GCC | ++| ARM | iOS | GCC | ++| AVR32 | Linux | GCC | ++| Blackfin | uClinux | GCC | ++| HPPA | HPUX | GCC | ++| IA-64 | Linux | GCC | ++| M68K | FreeMiNT | GCC | ++| M68K | Linux | GCC | ++| M68K | RTEMS | GCC | ++| M88K | OpenBSD/mvme88k | GCC | ++| Meta | Linux | GCC | ++| MicroBlaze | Linux | GCC | ++| MIPS | IRIX | GCC | ++| MIPS | Linux | GCC | ++| MIPS | RTEMS | GCC | ++| MIPS64 | Linux | GCC | ++| Moxie | Bare metal | GCC | ++| Nios II | Linux | GCC | ++| OpenRISC | Linux | GCC | ++| PowerPC 32-bit | AIX | IBM XL C | ++| PowerPC 64-bit | AIX | IBM XL C | ++| PowerPC | AMIGA | GCC | ++| PowerPC | Linux | GCC | ++| PowerPC | Mac OSX | GCC | ++| PowerPC | FreeBSD | GCC | ++| PowerPC 64-bit | FreeBSD | GCC | ++| PowerPC 64-bit | Linux ELFv1 | GCC | ++| PowerPC 64-bit | Linux ELFv2 | GCC | ++| S390 | Linux | GCC | ++| S390X | Linux | GCC | ++| SPARC | Linux | GCC | ++| SPARC | Solaris | GCC | ++| SPARC | Solaris | Oracle Solaris Studio C | ++| SPARC64 | Linux | GCC | ++| SPARC64 | FreeBSD | GCC | ++| SPARC64 | Solaris | Oracle Solaris Studio C | ++| TILE-Gx/TILEPro | Linux | GCC | ++| VAX | OpenBSD/vax | GCC | ++| X86 | FreeBSD | GCC | ++| X86 | GNU HURD | GCC | ++| X86 | Interix | GCC | ++| X86 | kFreeBSD | GCC | ++| X86 | Linux | GCC | ++| X86 | Mac OSX | GCC | ++| X86 | OpenBSD | GCC | ++| X86 | OS/2 | GCC | ++| X86 | Solaris | GCC | ++| X86 | Solaris | Oracle Solaris Studio C | ++| X86 | Windows/Cygwin | GCC | ++| X86 | Windows/MingW | GCC | ++| X86-64 | FreeBSD | GCC | ++| X86-64 | Linux | GCC | ++| X86-64 | Linux/x32 | GCC | ++| X86-64 | OpenBSD | GCC | ++| X86-64 | Solaris | Oracle Solaris Studio C | ++| X86-64 | Windows/Cygwin | GCC | ++| X86-64 | Windows/MingW | GCC | ++| Xtensa | Linux | GCC | ++|-----------------+------------------+-------------------------| ++ ++Please send additional platform test results to ++libffi-discuss@sourceware.org and feel free to update the wiki page ++above. ++ ++Installing libffi ++================= ++ ++First you must configure the distribution for your particular ++system. Go to the directory you wish to build libffi in and run the ++"configure" program found in the root directory of the libffi source ++distribution. ++ ++If you're building libffi directly from version control, configure won't ++exist yet; run ./autogen.sh first. ++ ++You may want to tell configure where to install the libffi library and ++header files. To do that, use the --prefix configure switch. Libffi ++will install under /usr/local by default. ++ ++If you want to enable extra run-time debugging checks use the the ++--enable-debug configure switch. This is useful when your program dies ++mysteriously while using libffi. ++ ++Another useful configure switch is --enable-purify-safety. Using this ++will add some extra code which will suppress certain warnings when you ++are using Purify with libffi. Only use this switch when using ++Purify, as it will slow down the library. ++ ++It's also possible to build libffi on Windows platforms with ++Microsoft's Visual C++ compiler. In this case, use the msvcc.sh ++wrapper script during configuration like so: ++ ++path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" ++ ++For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and ++CXX="path/to/msvcc.sh -m64". You may also need to specify --build ++appropriately. ++ ++It is also possible to build libffi on Windows platforms with the LLVM ++project's clang-cl compiler, like below: ++ ++path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" ++ ++When building with MSVC under a MingW environment, you may need to ++remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' ++command. ('cygpath' is not present in MingW, and is not required when ++using MingW-style paths.) ++ ++For iOS builds, the 'libffi.xcodeproj' Xcode project is available. ++ ++Configure has many other options. Use "configure --help" to see them all. ++ ++Once configure has finished, type "make". Note that you must be using ++GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . ++ ++To ensure that libffi is working as advertised, type "make check". ++This will require that you have DejaGNU installed. ++ ++To install the library and header files, type "make install". ++ ++ ++History ++======= ++ ++See the git log for details at http://github.com/atgreen/libffi. ++ ++3.2.1 Nov-12-14 ++ Build fix for non-iOS AArch64 targets. ++ ++3.2 Nov-11-14 ++ Add C99 Complex Type support (currently only supported on ++ s390). ++ Add support for PASCAL and REGISTER calling conventions on x86 ++ Windows/Linux. ++ Add OpenRISC and Cygwin-64 support. ++ Bug fixes. ++ ++3.1 May-19-14 ++ Add AArch64 (ARM64) iOS support. ++ Add Nios II support. ++ Add m88k and DEC VAX support. ++ Add support for stdcall, thiscall, and fastcall on non-Windows ++ 32-bit x86 targets such as Linux. ++ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi ++ fixes. ++ Make the testsuite more robust: eliminate several spurious ++ failures, and respect the $CC and $CXX environment variables. ++ Archive off the manually maintained ChangeLog in favor of git ++ log. ++ ++3.0.13 Mar-17-13 ++ Add Meta support. ++ Add missing Moxie bits. ++ Fix stack alignment bug on 32-bit x86. ++ Build fix for m68000 targets. ++ Build fix for soft-float Power targets. ++ Fix the install dir location for some platforms when building ++ with GCC (OS X, Solaris). ++ Fix Cygwin regression. ++ ++3.0.12 Feb-11-13 ++ Add Moxie support. ++ Add AArch64 support. ++ Add Blackfin support. ++ Add TILE-Gx/TILEPro support. ++ Add MicroBlaze support. ++ Add Xtensa support. ++ Add support for PaX enabled kernels with MPROTECT. ++ Add support for native vendor compilers on ++ Solaris and AIX. ++ Work around LLVM/GCC interoperability issue on x86_64. ++ ++3.0.11 Apr-11-12 ++ Lots of build fixes. ++ Add support for variadic functions (ffi_prep_cif_var). ++ Add Linux/x32 support. ++ Add thiscall, fastcall and MSVC cdecl support on Windows. ++ Add Amiga and newer MacOS support. ++ Add m68k FreeMiNT support. ++ Integration with iOS' xcode build tools. ++ Fix Octeon and MC68881 support. ++ Fix code pessimizations. ++ ++3.0.10 Aug-23-11 ++ Add support for Apple's iOS. ++ Add support for ARM VFP ABI. ++ Add RTEMS support for MIPS and M68K. ++ Fix instruction cache clearing problems on ++ ARM and SPARC. ++ Fix the N64 build on mips-sgi-irix6.5. ++ Enable builds with Microsoft's compiler. ++ Enable x86 builds with Oracle's Solaris compiler. ++ Fix support for calling code compiled with Oracle's Sparc ++ Solaris compiler. ++ Testsuite fixes for Tru64 Unix. ++ Additional platform support. ++ ++3.0.9 Dec-31-09 ++ Add AVR32 and win64 ports. Add ARM softfp support. ++ Many fixes for AIX, Solaris, HP-UX, *BSD. ++ Several PowerPC and x86-64 bug fixes. ++ Build DLL for windows. ++ ++3.0.8 Dec-19-08 ++ Add *BSD, BeOS, and PA-Linux support. ++ ++3.0.7 Nov-11-08 ++ Fix for ppc FreeBSD. ++ (thanks to Andreas Tobler) ++ ++3.0.6 Jul-17-08 ++ Fix for closures on sh. ++ Mark the sh/sh64 stack as non-executable. ++ (both thanks to Kaz Kojima) ++ ++3.0.5 Apr-3-08 ++ Fix libffi.pc file. ++ Fix #define ARM for IcedTea users. ++ Fix x86 closure bug. ++ ++3.0.4 Feb-24-08 ++ Fix x86 OpenBSD configury. ++ ++3.0.3 Feb-22-08 ++ Enable x86 OpenBSD thanks to Thomas Heller, and ++ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. ++ Clean up test instruction in README. ++ ++3.0.2 Feb-21-08 ++ Improved x86 FreeBSD support. ++ Thanks to Björn König. ++ ++3.0.1 Feb-15-08 ++ Fix instruction cache flushing bug on MIPS. ++ Thanks to David Daney. ++ ++3.0.0 Feb-15-08 ++ Many changes, mostly thanks to the GCC project. ++ Cygnus Solutions is now Red Hat. ++ ++ [10 years go by...] ++ ++1.20 Oct-5-98 ++ Raffaele Sena produces ARM port. ++ ++1.19 Oct-5-98 ++ Fixed x86 long double and long long return support. ++ m68k bug fixes from Andreas Schwab. ++ Patch for DU assembler compatibility for the Alpha from Richard ++ Henderson. ++ ++1.18 Apr-17-98 ++ Bug fixes and MIPS configuration changes. ++ ++1.17 Feb-24-98 ++ Bug fixes and m68k port from Andreas Schwab. PowerPC port from ++ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. ++ ++1.16 Feb-11-98 ++ Richard Henderson produces Alpha port. ++ ++1.15 Dec-4-97 ++ Fixed an n32 ABI bug. New libtool, auto* support. ++ ++1.14 May-13-97 ++ libtool is now used to generate shared and static libraries. ++ Fixed a minor portability problem reported by Russ McManus ++ . ++ ++1.13 Dec-2-96 ++ Added --enable-purify-safety to keep Purify from complaining ++ about certain low level code. ++ Sparc fix for calling functions with < 6 args. ++ Linux x86 a.out fix. ++ ++1.12 Nov-22-96 ++ Added missing ffi_type_void, needed for supporting void return ++ types. Fixed test case for non MIPS machines. Cygnus Support ++ is now Cygnus Solutions. ++ ++1.11 Oct-30-96 ++ Added notes about GNU make. ++ ++1.10 Oct-29-96 ++ Added configuration fix for non GNU compilers. ++ ++1.09 Oct-29-96 ++ Added --enable-debug configure switch. Clean-ups based on LCLint ++ feedback. ffi_mips.h is always installed. Many configuration ++ fixes. Fixed ffitest.c for sparc builds. ++ ++1.08 Oct-15-96 ++ Fixed n32 problem. Many clean-ups. ++ ++1.07 Oct-14-96 ++ Gordon Irlam rewrites v8.S again. Bug fixes. ++ ++1.06 Oct-14-96 ++ Gordon Irlam improved the sparc port. ++ ++1.05 Oct-14-96 ++ Interface changes based on feedback. ++ ++1.04 Oct-11-96 ++ Sparc port complete (modulo struct passing bug). ++ ++1.03 Oct-10-96 ++ Passing struct args, and returning struct values works for ++ all architectures/calling conventions. Expanded tests. ++ ++1.02 Oct-9-96 ++ Added SGI n32 support. Fixed bugs in both o32 and Linux support. ++ Added "make test". ++ ++1.01 Oct-8-96 ++ Fixed float passing bug in mips version. Restructured some ++ of the code. Builds cleanly with SGI tools. ++ ++1.00 Oct-7-96 ++ First release. No public announcement. ++ ++ ++Authors & Credits ++================= ++ ++libffi was originally written by Anthony Green . ++ ++The developers of the GNU Compiler Collection project have made ++innumerable valuable contributions. See the ChangeLog file for ++details. ++ ++Some of the ideas behind libffi were inspired by Gianni Mariani's free ++gencall library for Silicon Graphics machines. ++ ++The closure mechanism was designed and implemented by Kresten Krab ++Thorup. ++ ++Major processor architecture ports were contributed by the following ++developers: ++ ++aarch64 Marcus Shawcroft, James Greenhalgh ++alpha Richard Henderson ++arm Raffaele Sena ++blackfin Alexandre Keunecke I. de Mendonca ++cris Simon Posnjak, Hans-Peter Nilsson ++frv Anthony Green ++ia64 Hans Boehm ++m32r Kazuhiro Inaoka ++m68k Andreas Schwab ++m88k Miod Vallat ++microblaze Nathan Rossi ++mips Anthony Green, Casey Marshall ++mips64 David Daney ++moxie Anthony Green ++nios ii Sandra Loosemore ++openrisc Sebastian Macke ++pa Randolph Chung, Dave Anglin, Andreas Tobler ++powerpc Geoffrey Keating, Andreas Tobler, ++ David Edelsohn, John Hornkvist ++powerpc64 Jakub Jelinek ++s390 Gerhard Tonn, Ulrich Weigand ++sh Kaz Kojima ++sh64 Kaz Kojima ++sparc Anthony Green, Gordon Irlam ++tile-gx/tilepro Walter Lee ++vax Miod Vallat ++x86 Anthony Green, Jon Beniston ++x86-64 Bo Thorsen ++xtensa Chris Zankel ++ ++Jesper Skov and Andrew Haley both did more than their fair share of ++stepping through the code and tracking down bugs. ++ ++Thanks also to Tom Tromey for bug fixes, documentation and ++configuration help. ++ ++Thanks to Jim Blandy, who provided some useful feedback on the libffi ++interface. ++ ++Andreas Tobler has done a tremendous amount of work on the testsuite. ++ ++Alex Oliva solved the executable page problem for SElinux. ++ ++The list above is almost certainly incomplete and inaccurate. I'm ++happy to make corrections or additions upon request. ++ ++If you have a problem, or have found a bug, please send a note to the ++author at green@moxielogic.com, or the project mailing list at ++libffi-discuss@sourceware.org. +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi.c +--- orig/Modules/_ctypes/libffi_ios/aarch64/ffi.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi.c 2015-03-12 21:33:06.000000000 +0800 +@@ -0,0 +1,1152 @@ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. */ ++ ++#include ++#include ++#include ++#include ++#include ++#include "internal.h" ++ ++/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; ++ all further uses in this file will refer to the 128-bit type. */ ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++# if FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++#else ++# undef FFI_TYPE_LONGDOUBLE ++# define FFI_TYPE_LONGDOUBLE 4 ++#endif ++ ++union _d ++{ ++ UINT64 d; ++ UINT32 s[2]; ++}; ++ ++struct _v ++{ ++ union _d d[2] __attribute__((aligned(16))); ++}; ++ ++struct call_context ++{ ++ struct _v v[N_V_ARG_REG]; ++ UINT64 x[N_X_ARG_REG]; ++}; ++ ++#if defined (__clang__) && defined (__APPLE__) ++extern void sys_icache_invalidate (void *start, size_t len); ++#endif ++ ++static inline void ++ffi_clear_cache (void *start, void *end) ++{ ++#if defined (__clang__) && defined (__APPLE__) ++ sys_icache_invalidate (start, (char *)end - (char *)start); ++#elif defined (__GNUC__) ++ __builtin___clear_cache (start, end); ++#else ++#error "Missing builtin to flush instruction cache" ++#endif ++} ++ ++/* A subroutine of is_vfp_type. Given a structure type, return the type code ++ of the first non-structure element. Recurse for structure elements. ++ Return -1 if the structure is in fact empty, i.e. no nested elements. */ ++ ++static int ++is_hfa0 (const ffi_type *ty) ++{ ++ ffi_type **elements = ty->elements; ++ int i, ret = -1; ++ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ ret = elements[i]->type; ++ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) ++ { ++ ret = is_hfa0 (elements[i]); ++ if (ret < 0) ++ continue; ++ } ++ break; ++ } ++ ++ return ret; ++} ++ ++/* A subroutine of is_vfp_type. Given a structure type, return true if all ++ of the non-structure elements are the same as CANDIDATE. */ ++ ++static int ++is_hfa1 (const ffi_type *ty, int candidate) ++{ ++ ffi_type **elements = ty->elements; ++ int i; ++ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* Determine if TY may be allocated to the FP registers. This is both an ++ fp scalar type as well as an homogenous floating point aggregate (HFA). ++ That is, a structure consisting of 1 to 4 members of all the same type, ++ where that type is an fp scalar. ++ ++ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* ++ constant for the type. */ ++ ++static int ++is_vfp_type (const ffi_type *ty) ++{ ++ ffi_type **elements; ++ int candidate, i; ++ size_t size, ele_count; ++ ++ /* Quickest tests first. */ ++ candidate = ty->type; ++ switch (candidate) ++ { ++ default: ++ return 0; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 1; ++ goto done; ++ case FFI_TYPE_COMPLEX: ++ candidate = ty->elements[0]->type; ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 2; ++ goto done; ++ } ++ return 0; ++ case FFI_TYPE_STRUCT: ++ break; ++ } ++ ++ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ ++ size = ty->size; ++ if (size < 4 || size > 64) ++ return 0; ++ ++ /* Find the type of the first non-structure member. */ ++ elements = ty->elements; ++ candidate = elements[0]->type; ++ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) ++ { ++ for (i = 0; ; ++i) ++ { ++ candidate = is_hfa0 (elements[i]); ++ if (candidate >= 0) ++ break; ++ } ++ } ++ ++ /* If the first member is not a floating point type, it's not an HFA. ++ Also quickly re-check the size of the structure. */ ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ ele_count = size / sizeof(float); ++ if (size != ele_count * sizeof(float)) ++ return 0; ++ break; ++ case FFI_TYPE_DOUBLE: ++ ele_count = size / sizeof(double); ++ if (size != ele_count * sizeof(double)) ++ return 0; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = size / sizeof(long double); ++ if (size != ele_count * sizeof(long double)) ++ return 0; ++ break; ++ default: ++ return 0; ++ } ++ if (ele_count > 4) ++ return 0; ++ ++ /* Finally, make sure that all scalar elements are the same type. */ ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } ++ ++ /* All tests succeeded. Encode the result. */ ++ done: ++ return candidate * 4 + (4 - ele_count); ++} ++ ++/* Representation of the procedure call argument marshalling ++ state. ++ ++ The terse state variable names match the names used in the AARCH64 ++ PCS. */ ++ ++struct arg_state ++{ ++ unsigned ngrn; /* Next general-purpose register number. */ ++ unsigned nsrn; /* Next vector register number. */ ++ size_t nsaa; /* Next stack offset. */ ++ ++#if defined (__APPLE__) ++ unsigned allocating_variadic; ++#endif ++}; ++ ++/* Initialize a procedure call argument marshalling state. */ ++static void ++arg_init (struct arg_state *state) ++{ ++ state->ngrn = 0; ++ state->nsrn = 0; ++ state->nsaa = 0; ++#if defined (__APPLE__) ++ state->allocating_variadic = 0; ++#endif ++} ++ ++/* Allocate an aligned slot on the stack and return a pointer to it. */ ++static void * ++allocate_to_stack (struct arg_state *state, void *stack, ++ size_t alignment, size_t size) ++{ ++ size_t nsaa = state->nsaa; ++ ++ /* Round up the NSAA to the larger of 8 or the natural ++ alignment of the argument's type. */ ++#if defined (__APPLE__) ++ if (state->allocating_variadic && alignment < 8) ++ alignment = 8; ++#else ++ if (alignment < 8) ++ alignment = 8; ++#endif ++ ++ nsaa = ALIGN (nsaa, alignment); ++ state->nsaa = nsaa + size; ++ ++ return (char *)stack + nsaa; ++} ++ ++static ffi_arg ++extend_integer_type (void *source, int type) ++{ ++ switch (type) ++ { ++ case FFI_TYPE_UINT8: ++ return *(UINT8 *) source; ++ case FFI_TYPE_SINT8: ++ return *(SINT8 *) source; ++ case FFI_TYPE_UINT16: ++ return *(UINT16 *) source; ++ case FFI_TYPE_SINT16: ++ return *(SINT16 *) source; ++ case FFI_TYPE_UINT32: ++ return *(UINT32 *) source; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ return *(SINT32 *) source; ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ return *(UINT64 *) source; ++ break; ++ case FFI_TYPE_POINTER: ++ return *(uintptr_t *) source; ++ default: ++ abort(); ++ } ++} ++ ++static void ++extend_hfa_type (void *dest, void *src, int h) ++{ ++ int f = h - AARCH64_RET_S4; ++ void *x0; ++ ++ asm volatile ( ++ "adr %0, 0f\n" ++" add %0, %0, %1\n" ++" br %0\n" ++"0: ldp s16, s17, [%3]\n" /* S4 */ ++" ldp s18, s19, [%3, #8]\n" ++" b 4f\n" ++" ldp s16, s17, [%3]\n" /* S3 */ ++" ldr s18, [%3, #8]\n" ++" b 3f\n" ++" ldp s16, s17, [%3]\n" /* S2 */ ++" b 2f\n" ++" nop\n" ++" ldr s16, [%3]\n" /* S1 */ ++" b 1f\n" ++" nop\n" ++" ldp d16, d17, [%3]\n" /* D4 */ ++" ldp d18, d19, [%3, #16]\n" ++" b 4f\n" ++" ldp d16, d17, [%3]\n" /* D3 */ ++" ldr d18, [%3, #16]\n" ++" b 3f\n" ++" ldp d16, d17, [%3]\n" /* D2 */ ++" b 2f\n" ++" nop\n" ++" ldr d16, [%3]\n" /* D1 */ ++" b 1f\n" ++" nop\n" ++" ldp q16, q17, [%3]\n" /* Q4 */ ++" ldp q18, q19, [%3, #16]\n" ++" b 4f\n" ++" ldp q16, q17, [%3]\n" /* Q3 */ ++" ldr q18, [%3, #16]\n" ++" b 3f\n" ++" ldp q16, q17, [%3]\n" /* Q2 */ ++" b 2f\n" ++" nop\n" ++" ldr q16, [%3]\n" /* Q1 */ ++" b 1f\n" ++"4: str q19, [%2, #48]\n" ++"3: str q18, [%2, #32]\n" ++"2: str q17, [%2, #16]\n" ++"1: str q16, [%2]" ++ : "=&r"(x0) ++ : "r"(f * 12), "r"(dest), "r"(src) ++ : "memory", "v16", "v17", "v18", "v19"); ++} ++ ++static void * ++compress_hfa_type (void *dest, void *reg, int h) ++{ ++ switch (h) ++ { ++ case AARCH64_RET_S1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 12; ++#endif ++ } ++ else ++ *(float *)dest = *(float *)reg; ++ break; ++ case AARCH64_RET_S2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.s, v17.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_S3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.s, v17.s, v18.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_S4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); ++ break; ++ ++ case AARCH64_RET_D1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 8; ++#endif ++ } ++ else ++ *(double *)dest = *(double *)reg; ++ break; ++ case AARCH64_RET_D2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.d, v17.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_D3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.d, v17.d, v18.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_D4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); ++ break; ++ ++ default: ++ if (dest != reg) ++ return memcpy (dest, reg, 16 * (4 - (h & 3))); ++ break; ++ } ++ return dest; ++} ++ ++/* Either allocate an appropriate register for the argument type, or if ++ none are available, allocate a stack slot and return a pointer ++ to the allocated space. */ ++ ++static void * ++allocate_int_to_reg_or_stack (struct call_context *context, ++ struct arg_state *state, ++ void *stack, size_t size) ++{ ++ if (state->ngrn < N_X_ARG_REG) ++ return &context->x[state->ngrn++]; ++ ++ state->ngrn = N_X_ARG_REG; ++ return allocate_to_stack (state, stack, size, size); ++} ++ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ ffi_type *rtype = cif->rtype; ++ size_t bytes = cif->bytes; ++ int flags, i, n; ++ ++ switch (rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = AARCH64_RET_VOID; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = AARCH64_RET_UINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = AARCH64_RET_UINT16; ++ break; ++ case FFI_TYPE_UINT32: ++ flags = AARCH64_RET_UINT32; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = AARCH64_RET_SINT8; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = AARCH64_RET_SINT16; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ flags = AARCH64_RET_SINT32; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = AARCH64_RET_INT64; ++ break; ++ case FFI_TYPE_POINTER: ++ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ flags = is_vfp_type (rtype); ++ if (flags == 0) ++ { ++ size_t s = rtype->size; ++ if (s > 16) ++ { ++ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; ++ bytes += 8; ++ } ++ else if (s == 16) ++ flags = AARCH64_RET_INT128; ++ else if (s == 8) ++ flags = AARCH64_RET_INT64; ++ else ++ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; ++ } ++ break; ++ ++ default: ++ abort(); ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ if (is_vfp_type (cif->arg_types[i])) ++ { ++ flags |= AARCH64_FLAG_ARG_V; ++ break; ++ } ++ ++ /* Round the stack up to a multiple of the stack alignment requirement. */ ++ cif->bytes = ALIGN(bytes, 16); ++ cif->flags = flags; ++#if defined (__APPLE__) ++ cif->aarch64_nfixedargs = 0; ++#endif ++ ++ return FFI_OK; ++} ++ ++#if defined (__APPLE__) ++/* Perform Apple-specific cif processing for variadic calls */ ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs) ++{ ++ ffi_status status = ffi_prep_cif_machdep (cif); ++ cif->aarch64_nfixedargs = nfixedargs; ++ return status; ++} ++#endif /* __APPLE__ */ ++ ++extern void ffi_call_SYSV (struct call_context *context, void *frame, ++ void (*fn)(void), void *rvalue, int flags, ++ void *closure) FFI_HIDDEN; ++ ++/* Call a function with the provided arguments and capture the return ++ value. */ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, ++ void **avalue, void *closure) ++{ ++ struct call_context *context; ++ void *stack, *frame, *rvalue; ++ struct arg_state state; ++ size_t stack_bytes, rtype_size, rsize; ++ int i, nargs, flags; ++ ffi_type *rtype; ++ ++ flags = cif->flags; ++ rtype = cif->rtype; ++ rtype_size = rtype->size; ++ stack_bytes = cif->bytes; ++ ++ /* If the target function returns a structure via hidden pointer, ++ then we cannot allow a null rvalue. Otherwise, mash a null ++ rvalue to void return type. */ ++ rsize = 0; ++ if (flags & AARCH64_RET_IN_MEM) ++ { ++ if (orig_rvalue == NULL) ++ rsize = rtype_size; ++ } ++ else if (orig_rvalue == NULL) ++ flags &= AARCH64_FLAG_ARG_V; ++ else if (flags & AARCH64_RET_NEED_COPY) ++ rsize = 16; ++ ++ /* Allocate consectutive stack for everything we'll need. */ ++ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); ++ stack = context + 1; ++ frame = stack + stack_bytes; ++ rvalue = (rsize ? frame + 32 : orig_rvalue); ++ ++ arg_init (&state); ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) ++ { ++ ffi_type *ty = cif->arg_types[i]; ++ size_t s = ty->size; ++ void *a = avalue[i]; ++ int h, t; ++ ++ t = ty->type; ++ switch (t) ++ { ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; ++ ++ /* If the argument is a basic type the argument is allocated to an ++ appropriate register, or if none are available, to the stack. */ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ do_pointer: ++ { ++ ffi_arg ext = extend_integer_type (a, t); ++ if (state.ngrn < N_X_ARG_REG) ++ context->x[state.ngrn++] = ext; ++ else ++ { ++ void *d = allocate_to_stack (&state, stack, ty->alignment, s); ++ state.ngrn = N_X_ARG_REG; ++ /* Note that the default abi extends each argument ++ to a full 64-bit slot, while the iOS abi allocates ++ only enough space. */ ++#ifdef __APPLE__ ++ memcpy(d, a, s); ++#else ++ *(ffi_arg *)d = ext; ++#endif ++ } ++ } ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ { ++ void *dest; ++ ++ h = is_vfp_type (ty); ++ if (h) ++ { ++ int elems = 4 - (h & 3); ++ if (state.nsrn + elems <= N_V_ARG_REG) ++ { ++ dest = &context->v[state.nsrn]; ++ state.nsrn += elems; ++ extend_hfa_type (dest, a, h); ++ break; ++ } ++ state.nsrn = N_V_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ else if (s > 16) ++ { ++ /* If the argument is a composite type that is larger than 16 ++ bytes, then the argument has been copied to memory, and ++ the argument is replaced by a pointer to the copy. */ ++ a = &avalue[i]; ++ t = FFI_TYPE_POINTER; ++ goto do_pointer; ++ } ++ else ++ { ++ size_t n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ /* If the argument is a composite type and the size in ++ double-words is not more than the number of available ++ X registers, then the argument is copied into ++ consecutive X registers. */ ++ dest = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ /* Otherwise, there are insufficient X registers. Further ++ X register allocations are prevented, the NSAA is ++ adjusted and the argument is copied to memory at the ++ adjusted NSAA. */ ++ state.ngrn = N_X_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ } ++ memcpy (dest, a, s); ++ } ++ break; ++ ++ default: ++ abort(); ++ } ++ ++#if defined (__APPLE__) ++ if (i + 1 == cif->aarch64_nfixedargs) ++ { ++ state.ngrn = N_X_ARG_REG; ++ state.nsrn = N_V_ARG_REG; ++ state.allocating_variadic = 1; ++ } ++#endif ++ } ++ ++ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); ++ ++ if (flags & AARCH64_RET_NEED_COPY) ++ memcpy (orig_rvalue, rvalue, rtype_size); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++#ifdef FFI_GO_CLOSURES ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++#endif /* FFI_GO_CLOSURES */ ++ ++/* Build a trampoline. */ ++ ++extern void ffi_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ++#include ++#include ++#include ++#include ++ ++extern void *ffi_closure_trampoline_table_page; ++ ++typedef struct ffi_trampoline_table ffi_trampoline_table; ++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++ ++struct ffi_trampoline_table ++{ ++ /* contiguous writable and executable pages */ ++ vm_address_t config_page; ++ vm_address_t trampoline_page; ++ ++ /* free list tracking */ ++ uint16_t free_count; ++ ffi_trampoline_table_entry *free_list; ++ ffi_trampoline_table_entry *free_list_pool; ++ ++ ffi_trampoline_table *prev; ++ ffi_trampoline_table *next; ++}; ++ ++struct ffi_trampoline_table_entry ++{ ++ void *(*trampoline) (); ++ ffi_trampoline_table_entry *next; ++}; ++ ++/* The trampoline configuration is placed a page prior to the trampoline's entry point */ ++#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - PAGE_SIZE)); ++ ++/* Total number of trampolines that fit in one trampoline table */ ++#define FFI_TRAMPOLINE_COUNT (PAGE_SIZE / FFI_TRAMPOLINE_SIZE) ++ ++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; ++static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++ ++static ffi_trampoline_table * ++ffi_trampoline_table_alloc () ++{ ++ ffi_trampoline_table *table = NULL; ++ ++ /* Loop until we can allocate two contiguous pages */ ++ while (table == NULL) ++ { ++ vm_address_t config_page = 0x0; ++ kern_return_t kt; ++ ++ /* Try to allocate two pages */ ++ kt = ++ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, ++ VM_FLAGS_ANYWHERE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Now drop the second half of the allocation to make room for the trampoline table */ ++ vm_address_t trampoline_page = config_page + PAGE_SIZE; ++ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Remap the trampoline table to directly follow the config page */ ++ vm_prot_t cur_prot; ++ vm_prot_t max_prot; ++ ++ kt = ++ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, ++ mach_task_self (), ++ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, ++ &cur_prot, &max_prot, VM_INHERIT_SHARE); ++ ++ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ ++ if (kt != KERN_SUCCESS) ++ { ++ /* Log unexpected failures */ ++ if (kt != KERN_NO_SPACE) ++ { ++ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ } ++ ++ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); ++ continue; ++ } ++ ++ /* We have valid trampoline and config pages */ ++ table = calloc (1, sizeof (ffi_trampoline_table)); ++ table->free_count = FFI_TRAMPOLINE_COUNT; ++ table->config_page = config_page; ++ table->trampoline_page = trampoline_page; ++ ++ /* Create and initialize the free list */ ++ table->free_list_pool = ++ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); ++ ++ uint16_t i; ++ for (i = 0; i < table->free_count; i++) ++ { ++ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; ++ entry->trampoline = ++ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++ ++ if (i < table->free_count - 1) ++ entry->next = &table->free_list_pool[i + 1]; ++ } ++ ++ table->free_list = table->free_list_pool; ++ } ++ ++ return table; ++} ++ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ /* Create the closure */ ++ ffi_closure *closure = malloc (size); ++ if (closure == NULL) ++ return NULL; ++ ++ pthread_mutex_lock (&ffi_trampoline_lock); ++ ++ /* Check for an active trampoline table with available entries. */ ++ ffi_trampoline_table *table = ffi_trampoline_tables; ++ if (table == NULL || table->free_list == NULL) ++ { ++ table = ffi_trampoline_table_alloc (); ++ if (table == NULL) ++ { ++ free (closure); ++ return NULL; ++ } ++ ++ /* Insert the new table at the top of the list */ ++ table->next = ffi_trampoline_tables; ++ if (table->next != NULL) ++ table->next->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ /* Claim the free entry */ ++ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; ++ ffi_trampoline_tables->free_list = entry->next; ++ ffi_trampoline_tables->free_count--; ++ entry->next = NULL; ++ ++ pthread_mutex_unlock (&ffi_trampoline_lock); ++ ++ /* Initialize the return values */ ++ *code = entry->trampoline; ++ closure->trampoline_table = table; ++ closure->trampoline_table_entry = entry; ++ ++ return closure; ++} ++ ++void ++ffi_closure_free (void *ptr) ++{ ++ ffi_closure *closure = ptr; ++ ++ pthread_mutex_lock (&ffi_trampoline_lock); ++ ++ /* Fetch the table and entry references */ ++ ffi_trampoline_table *table = closure->trampoline_table; ++ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++ ++ /* Return the entry to the free list */ ++ entry->next = table->free_list; ++ table->free_list = entry; ++ table->free_count++; ++ ++ /* If all trampolines within this table are free, and at least one other table exists, deallocate ++ * the table */ ++ if (table->free_count == FFI_TRAMPOLINE_COUNT ++ && ffi_trampoline_tables != table) ++ { ++ /* Remove from the list */ ++ if (table->prev != NULL) ++ table->prev->next = table->next; ++ ++ if (table->next != NULL) ++ table->next->prev = table->prev; ++ ++ /* Deallocate pages */ ++ kern_return_t kt; ++ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ ++ kt = ++ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ ++ /* Deallocate free list */ ++ free (table->free_list_pool); ++ free (table); ++ } ++ else if (ffi_trampoline_tables != table) ++ { ++ /* Otherwise, bump this table to the top of the list */ ++ table->prev = NULL; ++ table->next = ffi_trampoline_tables; ++ if (ffi_trampoline_tables != NULL) ++ ffi_trampoline_tables->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ pthread_mutex_unlock (&ffi_trampoline_lock); ++ ++ /* Free the closure */ ++ free (closure); ++} ++ ++#endif ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure *closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; ++ ++ void (*start)(void); ++ ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_closure_SYSV_V; ++ else ++ start = ffi_closure_SYSV; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); ++ config[0] = closure; ++ config[1] = start; ++#else ++ static const unsigned char trampoline[16] = { ++ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ ++ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ ++ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ ++ }; ++ char *tramp = closure->tramp; ++ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ ++ *(UINT64 *)(tramp + 16) = (uintptr_t)start; ++ ++ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); ++#endif ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++#ifdef FFI_GO_CLOSURES ++extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) ++{ ++ void (*start)(void); ++ ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; ++ ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_go_closure_SYSV_V; ++ else ++ start = ffi_go_closure_SYSV; ++ ++ closure->tramp = start; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++#endif /* FFI_GO_CLOSURES */ ++ ++/* Primary handler to setup and invoke a function within a closure. ++ ++ A closure when invoked enters via the assembler wrapper ++ ffi_closure_SYSV(). The wrapper allocates a call context on the ++ stack, saves the interesting registers (from the perspective of ++ the calling convention) into the context then passes control to ++ ffi_closure_SYSV_inner() passing the saved context and a pointer to ++ the stack at the point ffi_closure_SYSV() was invoked. ++ ++ On the return path the assembler wrapper will reload call context ++ registers. ++ ++ ffi_closure_SYSV_inner() marshalls the call context into ffi value ++ descriptors, invokes the wrapped function, then marshalls the return ++ value back into the call context. */ ++ ++int FFI_HIDDEN ++ffi_closure_SYSV_inner (ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ struct call_context *context, ++ void *stack, void *rvalue, void *struct_rvalue) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ int i, h, nargs, flags; ++ struct arg_state state; ++ ++ arg_init (&state); ++ ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) ++ { ++ ffi_type *ty = cif->arg_types[i]; ++ int t = ty->type; ++ size_t n, s = ty->size; ++ ++ switch (t) ++ { ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; ++ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ h = is_vfp_type (ty); ++ if (h) ++ { ++ n = 4 - (h & 3); ++ if (state.nsrn + n <= N_V_ARG_REG) ++ { ++ void *reg = &context->v[state.nsrn]; ++ state.nsrn += n; ++ ++ /* Eeek! We need a pointer to the structure, however the ++ homogeneous float elements are being passed in individual ++ registers, therefore for float and double the structure ++ is not represented as a contiguous sequence of bytes in ++ our saved register context. We don't need the original ++ contents of the register storage, so we reformat the ++ structure into the same memory. */ ++ avalue[i] = compress_hfa_type (reg, reg, h); ++ } ++ else ++ { ++ state.nsrn = N_V_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } ++ } ++ else if (s > 16) ++ { ++ /* Replace Composite type of size greater than 16 with a ++ pointer. */ ++ avalue[i] = *(void **) ++ allocate_int_to_reg_or_stack (context, &state, stack, ++ sizeof (void *)); ++ } ++ else ++ { ++ n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ avalue[i] = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ state.ngrn = N_X_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } ++ } ++ break; ++ ++ default: ++ abort(); ++ } ++ } ++ ++ flags = cif->flags; ++ if (flags & AARCH64_RET_IN_MEM) ++ rvalue = struct_rvalue; ++ ++ fun (cif, rvalue, avalue, user_data); ++ ++ return flags; ++} +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h modified/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h 2015-03-12 21:33:06.000000000 +0800 +@@ -0,0 +1,73 @@ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef LIBFFI_ASM ++#ifdef __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++typedef unsigned long long ffi_arg; ++typedef signed long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++ ++typedef enum ffi_abi ++ { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++ } ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#if defined (__APPLE__) ++#define FFI_TRAMPOLINE_SIZE 20 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 ++#else ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE ++#endif ++#define FFI_NATIVE_RAW_API 0 ++ ++/* ---- Internal ---- */ ++ ++#if defined (__APPLE__) ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs ++#else ++/* iOS reserves x18 for the system. Disable Go closures until ++ a new static chain is chosen. */ ++#define FFI_GO_CLOSURES 1 ++#endif ++ ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h +--- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-03-12 21:33:06.000000000 +0800 +@@ -0,0 +1,67 @@ ++/* ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. */ ++ ++#define AARCH64_RET_VOID 0 ++#define AARCH64_RET_INT64 1 ++#define AARCH64_RET_INT128 2 ++ ++#define AARCH64_RET_UNUSED3 3 ++#define AARCH64_RET_UNUSED4 4 ++#define AARCH64_RET_UNUSED5 5 ++#define AARCH64_RET_UNUSED6 6 ++#define AARCH64_RET_UNUSED7 7 ++ ++/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, ++ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ ++#define AARCH64_RET_S4 8 ++#define AARCH64_RET_S3 9 ++#define AARCH64_RET_S2 10 ++#define AARCH64_RET_S1 11 ++ ++#define AARCH64_RET_D4 12 ++#define AARCH64_RET_D3 13 ++#define AARCH64_RET_D2 14 ++#define AARCH64_RET_D1 15 ++ ++#define AARCH64_RET_Q4 16 ++#define AARCH64_RET_Q3 17 ++#define AARCH64_RET_Q2 18 ++#define AARCH64_RET_Q1 19 ++ ++/* Note that each of the sub-64-bit integers gets two entries. */ ++#define AARCH64_RET_UINT8 20 ++#define AARCH64_RET_UINT16 22 ++#define AARCH64_RET_UINT32 24 ++ ++#define AARCH64_RET_SINT8 26 ++#define AARCH64_RET_SINT16 28 ++#define AARCH64_RET_SINT32 30 ++ ++#define AARCH64_RET_MASK 31 ++ ++#define AARCH64_RET_IN_MEM (1 << 5) ++#define AARCH64_RET_NEED_COPY (1 << 6) ++ ++#define AARCH64_FLAG_ARG_V_BIT 7 ++#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) ++ ++#define N_X_ARG_REG 8 ++#define N_V_ARG_REG 8 ++#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv.S +--- orig/Modules/_ctypes/libffi_ios/aarch64/sysv.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv.S 2015-03-12 21:33:06.000000000 +0800 +@@ -0,0 +1,434 @@ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. */ ++ ++#define LIBFFI_ASM ++#include ++#include ++#include ++#include "internal.h" ++ ++#ifdef HAVE_MACHINE_ASM_H ++#include ++#else ++#ifdef __USER_LABEL_PREFIX__ ++#define CONCAT1(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b ++ ++/* Use the right prefix for global labels. */ ++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) ++#else ++#define CNAME(x) x ++#endif ++#endif ++ ++#ifdef __AARCH64EB__ ++# define BE(X) X ++#else ++# define BE(X) 0 ++#endif ++ ++#ifdef __ILP32__ ++#define PTR_REG(n) w##n ++#else ++#define PTR_REG(n) x##n ++#endif ++ ++#ifdef __ILP32__ ++#define PTR_SIZE 4 ++#else ++#define PTR_SIZE 8 ++#endif ++ ++ .text ++ .align 4 ++ ++/* ffi_call_SYSV ++ extern void ffi_call_SYSV (void *stack, void *frame, ++ void (*fn)(void), void *rvalue, ++ int flags, void *closure); ++ ++ Therefore on entry we have: ++ ++ x0 stack ++ x1 frame ++ x2 fn ++ x3 rvalue ++ x4 flags ++ x5 closure ++*/ ++ ++ cfi_startproc ++CNAME(ffi_call_SYSV): ++ /* Use a stack frame allocated by our caller. */ ++ cfi_def_cfa(x1, 32); ++ stp x29, x30, [x1] ++ mov x29, x1 ++ mov sp, x0 ++ cfi_def_cfa_register(x29) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ mov x9, x2 /* save fn */ ++ mov x8, x3 /* install structure return */ ++#ifdef FFI_GO_CLOSURES ++ mov x18, x5 /* install static chain */ ++#endif ++ stp x3, x4, [x29, #16] /* save rvalue and flags */ ++ ++ /* Load the vector argument passing registers, if necessary. */ ++ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f ++ ldp q0, q1, [sp, #0] ++ ldp q2, q3, [sp, #32] ++ ldp q4, q5, [sp, #64] ++ ldp q6, q7, [sp, #96] ++1: ++ /* Load the core argument passing registers, including ++ the structure return pointer. */ ++ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] ++ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] ++ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] ++ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] ++ ++ /* Deallocate the context, leaving the stacked arguments. */ ++ add sp, sp, #CALL_CONTEXT_SIZE ++ ++ blr x9 /* call fn */ ++ ++ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ ++ ++ /* Partially deconstruct the stack frame. */ ++ mov sp, x29 ++ cfi_def_cfa_register (sp) ++ ldp x29, x30, [x29] ++ ++ /* Save the return value as directed. */ ++ adr x5, 0f ++ and w4, w4, #AARCH64_RET_MASK ++ add x5, x5, x4, lsl #3 ++ br x5 ++ ++ /* Note that each table entry is 2 insns, and thus 8 bytes. ++ For integer data, note that we're storing into ffi_arg ++ and therefore we want to extend to 64 bits; these types ++ have two consecutive entries allocated for them. */ ++ .align 4 ++0: ret /* VOID */ ++ nop ++1: str x0, [x3] /* INT64 */ ++ ret ++2: stp x0, x1, [x3] /* INT128 */ ++ ret ++3: brk #1000 /* UNUSED */ ++ ret ++4: brk #1000 /* UNUSED */ ++ ret ++5: brk #1000 /* UNUSED */ ++ ret ++6: brk #1000 /* UNUSED */ ++ ret ++7: brk #1000 /* UNUSED */ ++ ret ++8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ ++ ret ++9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ ++ ret ++10: stp s0, s1, [x3] /* S2 */ ++ ret ++11: str s0, [x3] /* S1 */ ++ ret ++12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ ++ ret ++13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ ++ ret ++14: stp d0, d1, [x3] /* D2 */ ++ ret ++15: str d0, [x3] /* D1 */ ++ ret ++16: str q3, [x3, #48] /* Q4 */ ++ nop ++17: str q2, [x3, #32] /* Q3 */ ++ nop ++18: stp q0, q1, [x3] /* Q2 */ ++ ret ++19: str q0, [x3] /* Q1 */ ++ ret ++20: uxtb w0, w0 /* UINT8 */ ++ str x0, [x3] ++21: ret /* reserved */ ++ nop ++22: uxth w0, w0 /* UINT16 */ ++ str x0, [x3] ++23: ret /* reserved */ ++ nop ++24: mov w0, w0 /* UINT32 */ ++ str x0, [x3] ++25: ret /* reserved */ ++ nop ++26: sxtb x0, w0 /* SINT8 */ ++ str x0, [x3] ++27: ret /* reserved */ ++ nop ++28: sxth x0, w0 /* SINT16 */ ++ str x0, [x3] ++29: ret /* reserved */ ++ nop ++30: sxtw x0, w0 /* SINT32 */ ++ str x0, [x3] ++31: ret /* reserved */ ++ nop ++ ++ cfi_endproc ++ ++ .globl CNAME(ffi_call_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_call_SYSV), #function ++ .hidden CNAME(ffi_call_SYSV) ++ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) ++#endif ++ ++/* ffi_closure_SYSV ++ ++ Closure invocation glue. This is the low level code invoked directly by ++ the closure trampoline to setup and call a closure. ++ ++ On entry x17 points to a struct ffi_closure, x16 has been clobbered ++ all other registers are preserved. ++ ++ We allocate a call context and save the argument passing registers, ++ then invoked the generic C ffi_closure_SYSV_inner() function to do all ++ the real work, on return we load the result passing registers back from ++ the call context. ++*/ ++ ++#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) ++ ++ .align 4 ++CNAME(ffi_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc ++ ++ .globl CNAME(ffi_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV_V), #function ++ .hidden CNAME(ffi_closure_SYSV_V) ++ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) ++#endif ++ ++ .align 4 ++ cfi_startproc ++CNAME(ffi_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp ++ ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++ ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ ++ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ ++.Ldo_closure: ++ add x3, sp, #16 /* load context */ ++ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ ++ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ ++ mov x6, x8 /* load struct_rval */ ++ bl CNAME(ffi_closure_SYSV_inner) ++ ++ /* Load the return value as directed. */ ++ adr x1, 0f ++ and w0, w0, #AARCH64_RET_MASK ++ add x1, x1, x0, lsl #3 ++ add x3, sp, #16+CALL_CONTEXT_SIZE ++ br x1 ++ ++ /* Note that each table entry is 2 insns, and thus 8 bytes. */ ++ .align 4 ++0: b 99f /* VOID */ ++ nop ++1: ldr x0, [x3] /* INT64 */ ++ b 99f ++2: ldp x0, x1, [x3] /* INT128 */ ++ b 99f ++3: brk #1000 /* UNUSED */ ++ nop ++4: brk #1000 /* UNUSED */ ++ nop ++5: brk #1000 /* UNUSED */ ++ nop ++6: brk #1000 /* UNUSED */ ++ nop ++7: brk #1000 /* UNUSED */ ++ nop ++8: ldr s3, [x3, #12] /* S4 */ ++ nop ++9: ldr s2, [x2, #8] /* S3 */ ++ nop ++10: ldp s0, s1, [x3] /* S2 */ ++ b 99f ++11: ldr s0, [x3] /* S1 */ ++ b 99f ++12: ldr d3, [x3, #24] /* D4 */ ++ nop ++13: ldr d2, [x3, #16] /* D3 */ ++ nop ++14: ldp d0, d1, [x3] /* D2 */ ++ b 99f ++15: ldr d0, [x3] /* D1 */ ++ b 99f ++16: ldr q3, [x3, #48] /* Q4 */ ++ nop ++17: ldr q2, [x3, #32] /* Q3 */ ++ nop ++18: ldp q0, q1, [x3] /* Q2 */ ++ b 99f ++19: ldr q0, [x3] /* Q1 */ ++ b 99f ++20: ldrb w0, [x3, #BE(7)] /* UINT8 */ ++ b 99f ++21: brk #1000 /* reserved */ ++ nop ++22: ldrh w0, [x3, #BE(6)] /* UINT16 */ ++ b 99f ++23: brk #1000 /* reserved */ ++ nop ++24: ldr w0, [x3, #BE(4)] /* UINT32 */ ++ b 99f ++25: brk #1000 /* reserved */ ++ nop ++26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ ++ b 99f ++27: brk #1000 /* reserved */ ++ nop ++28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ ++ b 99f ++29: brk #1000 /* reserved */ ++ nop ++30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ ++ nop ++31: /* reserved */ ++99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS ++ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) ++ cfi_restore (x29) ++ cfi_restore (x30) ++ ret ++ cfi_endproc ++ ++ .globl CNAME(ffi_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV), #function ++ .hidden CNAME(ffi_closure_SYSV) ++ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) ++#endif ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ .align 12 ++CNAME(ffi_closure_trampoline_table_page): ++ .rept 16384 / FFI_TRAMPOLINE_SIZE ++ adr x17, -16384 ++ adr x16, -16380 ++ ldr x16, [x16] ++ ldr x17, [x17] ++ br x16 ++ .endr ++ ++ .globl CNAME(ffi_closure_trampoline_table_page) ++ #ifdef __ELF__ ++ .type CNAME(ffi_closure_trampoline_table_page), #function ++ .hidden CNAME(ffi_closure_trampoline_table_page) ++ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) ++ #endif ++#endif ++ ++#ifdef FFI_GO_CLOSURES ++ .align 4 ++CNAME(ffi_go_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc ++ ++ .globl CNAME(ffi_go_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV_V), #function ++ .hidden CNAME(ffi_go_closure_SYSV_V) ++ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) ++#endif ++ ++ .align 4 ++ cfi_startproc ++CNAME(ffi_go_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp ++ ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++ ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ ++ mov x2, x18 /* load user_data */ ++ b .Ldo_closure ++ cfi_endproc ++ ++ .globl CNAME(ffi_go_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV), #function ++ .hidden CNAME(ffi_go_closure_SYSV) ++ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) ++#endif ++#endif /* FFI_GO_CLOSURES */ ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif ++ +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi.c modified/Modules/_ctypes/libffi_ios/arm/ffi.c +--- orig/Modules/_ctypes/libffi_ios/arm/ffi.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffi.c 2015-03-12 21:33:17.000000000 +0800 +@@ -0,0 +1,1043 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2011 Timothy Wall ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2011 Free Software Foundation ++ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++ ++ ARM Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++#include ++#include "internal.h" ++ ++/* Forward declares. */ ++static int vfp_type_p (const ffi_type *); ++static void layout_vfp_args (ffi_cif *); ++ ++static void * ++ffi_align (ffi_type *ty, void *p) ++{ ++ /* Align if necessary */ ++ size_t alignment; ++#ifdef _WIN32_WCE ++ alignment = 4; ++#else ++ alignment = ty->alignment; ++ if (alignment < 4) ++ alignment = 4; ++#endif ++ return (void *) ALIGN (p, alignment); ++} ++ ++static size_t ++ffi_put_arg (ffi_type *ty, void *src, void *dst) ++{ ++ size_t z = ty->size; ++ ++ switch (ty->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(UINT32 *)dst = *(SINT8 *)src; ++ break; ++ case FFI_TYPE_UINT8: ++ *(UINT32 *)dst = *(UINT8 *)src; ++ break; ++ case FFI_TYPE_SINT16: ++ *(UINT32 *)dst = *(SINT16 *)src; ++ break; ++ case FFI_TYPE_UINT16: ++ *(UINT32 *)dst = *(UINT16 *)src; ++ break; ++ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ case FFI_TYPE_FLOAT: ++ *(UINT32 *)dst = *(UINT32 *)src; ++ break; ++ ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_DOUBLE: ++ *(UINT64 *)dst = *(UINT64 *)src; ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ memcpy (dst, src, z); ++ break; ++ ++ default: ++ abort(); ++ } ++ ++ return ALIGN (z, 4); ++} ++ ++/* ffi_prep_args is called once stack space has been allocated ++ for the function's arguments. ++ ++ The vfp_space parameter is the load area for VFP regs, the return ++ value is cif->vfp_used (word bitset of VFP regs used for passing ++ arguments). These are only used for the VFP hard-float ABI. ++*/ ++static void ++ffi_prep_args_SYSV (ffi_cif *cif, int flags, void *rvalue, ++ void **avalue, char *argp) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n; ++ ++ if (flags == ARM_TYPE_STRUCT) ++ { ++ *(void **) argp = rvalue; ++ argp += 4; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ argp = ffi_align (ty, argp); ++ argp += ffi_put_arg (ty, avalue[i], argp); ++ } ++} ++ ++static void ++ffi_prep_args_VFP (ffi_cif *cif, int flags, void *rvalue, ++ void **avalue, char *stack, char *vfp_space) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n, vi = 0; ++ char *argp, *regp, *eo_regp; ++ char stack_used = 0; ++ char done_with_regs = 0; ++ ++ /* The first 4 words on the stack are used for values ++ passed in core registers. */ ++ regp = stack; ++ eo_regp = argp = regp + 16; ++ ++ /* If the function returns an FFI_TYPE_STRUCT in memory, ++ that address is passed in r0 to the function. */ ++ if (flags == ARM_TYPE_STRUCT) ++ { ++ *(void **) regp = rvalue; ++ regp += 4; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ void *a = avalue[i]; ++ int is_vfp_type = vfp_type_p (ty); ++ ++ /* Allocated in VFP registers. */ ++ if (vi < cif->vfp_nargs && is_vfp_type) ++ { ++ char *vfp_slot = vfp_space + cif->vfp_args[vi++] * 4; ++ ffi_put_arg (ty, a, vfp_slot); ++ continue; ++ } ++ /* Try allocating in core registers. */ ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char *tregp = ffi_align (ty, regp); ++ size_t size = ty->size; ++ size = (size < 4) ? 4 : size; // pad ++ /* Check if there is space left in the aligned register ++ area to place the argument. */ ++ if (tregp + size <= eo_regp) ++ { ++ regp = tregp + ffi_put_arg (ty, a, tregp); ++ done_with_regs = (regp == argp); ++ // ensure we did not write into the stack area ++ FFI_ASSERT (regp <= argp); ++ continue; ++ } ++ /* In case there are no arguments in the stack area yet, ++ the argument is passed in the remaining core registers ++ and on the stack. */ ++ else if (!stack_used) ++ { ++ stack_used = 1; ++ done_with_regs = 1; ++ argp = tregp + ffi_put_arg (ty, a, tregp); ++ FFI_ASSERT (eo_regp < argp); ++ continue; ++ } ++ } ++ /* Base case, arguments are passed on the stack */ ++ stack_used = 1; ++ argp = ffi_align (ty, argp); ++ argp += ffi_put_arg (ty, a, argp); ++ } ++} ++ ++/* Perform machine dependent cif processing */ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int flags = 0, cabi = cif->abi; ++ size_t bytes = cif->bytes; ++ ++ /* Map out the register placements of VFP register args. The VFP ++ hard-float calling conventions are slightly more sophisticated ++ than the base calling conventions, so we do it here instead of ++ in ffi_prep_args(). */ ++ if (cabi == FFI_VFP) ++ layout_vfp_args (cif); ++ ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = ARM_TYPE_VOID; ++ break; ++ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_POINTER: ++ flags = ARM_TYPE_INT; ++ break; ++ ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = ARM_TYPE_INT64; ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_S : ARM_TYPE_INT); ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_D : ARM_TYPE_INT64); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ if (cabi == FFI_VFP) ++ { ++ int h = vfp_type_p (cif->rtype); ++ ++ flags = ARM_TYPE_VFP_N; ++ if (h == 0x100 + FFI_TYPE_FLOAT) ++ flags = ARM_TYPE_VFP_S; ++ if (h == 0x100 + FFI_TYPE_DOUBLE) ++ flags = ARM_TYPE_VFP_D; ++ if (h != 0) ++ break; ++ } ++ ++ /* A Composite Type not larger than 4 bytes is returned in r0. ++ A Composite Type larger than 4 bytes, or whose size cannot ++ be determined statically ... is stored in memory at an ++ address passed [in r0]. */ ++ if (cif->rtype->size <= 4) ++ flags = ARM_TYPE_INT; ++ else ++ { ++ flags = ARM_TYPE_STRUCT; ++ bytes += 4; ++ } ++ break; ++ ++ default: ++ abort(); ++ } ++ ++ /* Round the stack up to a multiple of 8 bytes. This isn't needed ++ everywhere, but it is on some platforms, and it doesn't harm anything ++ when it isn't needed. */ ++ bytes = ALIGN (bytes, 8); ++ ++ /* Minimum stack space is the 4 register arguments that we pop. */ ++ if (bytes < 4*4) ++ bytes = 4*4; ++ ++ cif->bytes = bytes; ++ cif->flags = flags; ++ ++ return FFI_OK; ++} ++ ++/* Perform machine dependent cif processing for variadic calls */ ++ffi_status ++ffi_prep_cif_machdep_var (ffi_cif * cif, ++ unsigned int nfixedargs, unsigned int ntotalargs) ++{ ++ /* VFP variadic calls actually use the SYSV ABI */ ++ if (cif->abi == FFI_VFP) ++ cif->abi = FFI_SYSV; ++ ++ return ffi_prep_cif_machdep (cif); ++} ++ ++/* Prototypes for assembly functions, in sysv.S. */ ++ ++struct call_frame ++{ ++ void *fp; ++ void *lr; ++ void *rvalue; ++ int flags; ++ void *closure; ++}; ++ ++extern void ffi_call_SYSV (void *stack, struct call_frame *, ++ void (*fn) (void)) FFI_HIDDEN; ++extern void ffi_call_VFP (void *vfp_space, struct call_frame *, ++ void (*fn) (void), unsigned vfp_used) FFI_HIDDEN; ++ ++static void ++ffi_call_int (ffi_cif * cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ int flags = cif->flags; ++ ffi_type *rtype = cif->rtype; ++ size_t bytes, rsize, vfp_size; ++ char *stack, *vfp_space, *new_rvalue; ++ struct call_frame *frame; ++ ++ rsize = 0; ++ if (rvalue == NULL) ++ { ++ /* If the return value is a struct and we don't have a return ++ value address then we need to make one. Otherwise the return ++ value is in registers and we can ignore them. */ ++ if (flags == ARM_TYPE_STRUCT) ++ rsize = rtype->size; ++ else ++ flags = ARM_TYPE_VOID; ++ } ++ else if (flags == ARM_TYPE_VFP_N) ++ { ++ /* Largest case is double x 4. */ ++ rsize = 32; ++ } ++ else if (flags == ARM_TYPE_INT && rtype->type == FFI_TYPE_STRUCT) ++ rsize = 4; ++ ++ /* Largest case. */ ++ vfp_size = (cif->abi == FFI_VFP && cif->vfp_used ? 8*8: 0); ++ ++ bytes = cif->bytes; ++ stack = alloca (vfp_size + bytes + sizeof(struct call_frame) + rsize); ++ ++ vfp_space = NULL; ++ if (vfp_size) ++ { ++ vfp_space = stack; ++ stack += vfp_size; ++ } ++ ++ frame = (struct call_frame *)(stack + bytes); ++ ++ new_rvalue = rvalue; ++ if (rsize) ++ new_rvalue = (void *)(frame + 1); ++ ++ frame->rvalue = new_rvalue; ++ frame->flags = flags; ++ frame->closure = closure; ++ ++ if (vfp_space) ++ { ++ ffi_prep_args_VFP (cif, flags, new_rvalue, avalue, stack, vfp_space); ++ ffi_call_VFP (vfp_space, frame, fn, cif->vfp_used); ++ } ++ else ++ { ++ ffi_prep_args_SYSV (cif, flags, new_rvalue, avalue, stack); ++ ffi_call_SYSV (stack, frame, fn); ++ } ++ ++ if (rvalue && rvalue != new_rvalue) ++ memcpy (rvalue, new_rvalue, rtype->size); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++ ++static void * ++ffi_prep_incoming_args_SYSV (ffi_cif *cif, void *rvalue, ++ char *argp, void **avalue) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n; ++ ++ if (cif->flags == ARM_TYPE_STRUCT) ++ { ++ rvalue = *(void **) argp; ++ argp += 4; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; ++ ++ argp = ffi_align (ty, argp); ++ avalue[i] = (void *) argp; ++ argp += z; ++ } ++ ++ return rvalue; ++} ++ ++static void * ++ffi_prep_incoming_args_VFP (ffi_cif *cif, void *rvalue, char *stack, ++ char *vfp_space, void **avalue) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n, vi = 0; ++ char *argp, *regp, *eo_regp; ++ char done_with_regs = 0; ++ char stack_used = 0; ++ ++ regp = stack; ++ eo_regp = argp = regp + 16; ++ ++ if (cif->flags == ARM_TYPE_STRUCT) ++ { ++ rvalue = *(void **) regp; ++ regp += 4; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ int is_vfp_type = vfp_type_p (ty); ++ size_t z = ty->size; ++ ++ if (vi < cif->vfp_nargs && is_vfp_type) ++ { ++ avalue[i] = vfp_space + cif->vfp_args[vi++] * 4; ++ continue; ++ } ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char *tregp = ffi_align (ty, regp); ++ ++ z = (z < 4) ? 4 : z; // pad ++ ++ /* If the arguments either fits into the registers or uses registers ++ and stack, while we haven't read other things from the stack */ ++ if (tregp + z <= eo_regp || !stack_used) ++ { ++ /* Because we're little endian, this is what it turns into. */ ++ avalue[i] = (void *) tregp; ++ regp = tregp + z; ++ ++ /* If we read past the last core register, make sure we ++ have not read from the stack before and continue ++ reading after regp. */ ++ if (regp > eo_regp) ++ { ++ FFI_ASSERT (!stack_used); ++ argp = regp; ++ } ++ if (regp >= eo_regp) ++ { ++ done_with_regs = 1; ++ stack_used = 1; ++ } ++ continue; ++ } ++ } ++ ++ stack_used = 1; ++ argp = ffi_align (ty, argp); ++ avalue[i] = (void *) argp; ++ argp += z; ++ } ++ ++ return rvalue; ++} ++ ++struct closure_frame ++{ ++ char vfp_space[8*8] __attribute__((aligned(8))); ++ char result[8*4]; ++ char argp[]; ++}; ++ ++int FFI_HIDDEN ++ffi_closure_inner_SYSV (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ struct closure_frame *frame) ++{ ++ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); ++ void *rvalue = ffi_prep_incoming_args_SYSV (cif, frame->result, ++ frame->argp, avalue); ++ fun (cif, rvalue, avalue, user_data); ++ return cif->flags; ++} ++ ++int FFI_HIDDEN ++ffi_closure_inner_VFP (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ struct closure_frame *frame) ++{ ++ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); ++ void *rvalue = ffi_prep_incoming_args_VFP (cif, frame->result, frame->argp, ++ frame->vfp_space, avalue); ++ fun (cif, rvalue, avalue, user_data); ++ return cif->flags; ++} ++ ++void ffi_closure_SYSV (void) FFI_HIDDEN; ++void ffi_closure_VFP (void) FFI_HIDDEN; ++void ffi_go_closure_SYSV (void) FFI_HIDDEN; ++void ffi_go_closure_VFP (void) FFI_HIDDEN; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ++#include ++#include ++#include ++#include ++ ++extern void *ffi_closure_trampoline_table_page; ++ ++typedef struct ffi_trampoline_table ffi_trampoline_table; ++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++ ++struct ffi_trampoline_table ++{ ++ /* contiguous writable and executable pages */ ++ vm_address_t config_page; ++ vm_address_t trampoline_page; ++ ++ /* free list tracking */ ++ uint16_t free_count; ++ ffi_trampoline_table_entry *free_list; ++ ffi_trampoline_table_entry *free_list_pool; ++ ++ ffi_trampoline_table *prev; ++ ffi_trampoline_table *next; ++}; ++ ++struct ffi_trampoline_table_entry ++{ ++ void *(*trampoline) (); ++ ffi_trampoline_table_entry *next; ++}; ++ ++/* Override the standard architecture trampoline size */ ++// XXX TODO - Fix ++#undef FFI_TRAMPOLINE_SIZE ++#define FFI_TRAMPOLINE_SIZE 12 ++ ++/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ ++#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); ++ ++/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ ++#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 ++ ++/* Total number of trampolines that fit in one trampoline table */ ++#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) ++ ++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; ++static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++ ++static ffi_trampoline_table * ++ffi_trampoline_table_alloc () ++{ ++ ffi_trampoline_table *table = NULL; ++ ++ /* Loop until we can allocate two contiguous pages */ ++ while (table == NULL) ++ { ++ vm_address_t config_page = 0x0; ++ kern_return_t kt; ++ ++ /* Try to allocate two pages */ ++ kt = ++ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, ++ VM_FLAGS_ANYWHERE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Now drop the second half of the allocation to make room for the trampoline table */ ++ vm_address_t trampoline_page = config_page + PAGE_SIZE; ++ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Remap the trampoline table to directly follow the config page */ ++ vm_prot_t cur_prot; ++ vm_prot_t max_prot; ++ ++ kt = ++ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, ++ mach_task_self (), ++ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, ++ &cur_prot, &max_prot, VM_INHERIT_SHARE); ++ ++ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ ++ if (kt != KERN_SUCCESS) ++ { ++ /* Log unexpected failures */ ++ if (kt != KERN_NO_SPACE) ++ { ++ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ } ++ ++ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); ++ continue; ++ } ++ ++ /* We have valid trampoline and config pages */ ++ table = calloc (1, sizeof (ffi_trampoline_table)); ++ table->free_count = FFI_TRAMPOLINE_COUNT; ++ table->config_page = config_page; ++ table->trampoline_page = trampoline_page; ++ ++ /* Create and initialize the free list */ ++ table->free_list_pool = ++ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); ++ ++ uint16_t i; ++ for (i = 0; i < table->free_count; i++) ++ { ++ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; ++ entry->trampoline = ++ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++ ++ if (i < table->free_count - 1) ++ entry->next = &table->free_list_pool[i + 1]; ++ } ++ ++ table->free_list = table->free_list_pool; ++ } ++ ++ return table; ++} ++ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ /* Create the closure */ ++ ffi_closure *closure = malloc (size); ++ if (closure == NULL) ++ return NULL; ++ ++ pthread_mutex_lock (&ffi_trampoline_lock); ++ ++ /* Check for an active trampoline table with available entries. */ ++ ffi_trampoline_table *table = ffi_trampoline_tables; ++ if (table == NULL || table->free_list == NULL) ++ { ++ table = ffi_trampoline_table_alloc (); ++ if (table == NULL) ++ { ++ free (closure); ++ return NULL; ++ } ++ ++ /* Insert the new table at the top of the list */ ++ table->next = ffi_trampoline_tables; ++ if (table->next != NULL) ++ table->next->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ /* Claim the free entry */ ++ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; ++ ffi_trampoline_tables->free_list = entry->next; ++ ffi_trampoline_tables->free_count--; ++ entry->next = NULL; ++ ++ pthread_mutex_unlock (&ffi_trampoline_lock); ++ ++ /* Initialize the return values */ ++ *code = entry->trampoline; ++ closure->trampoline_table = table; ++ closure->trampoline_table_entry = entry; ++ ++ return closure; ++} ++ ++void ++ffi_closure_free (void *ptr) ++{ ++ ffi_closure *closure = ptr; ++ ++ pthread_mutex_lock (&ffi_trampoline_lock); ++ ++ /* Fetch the table and entry references */ ++ ffi_trampoline_table *table = closure->trampoline_table; ++ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++ ++ /* Return the entry to the free list */ ++ entry->next = table->free_list; ++ table->free_list = entry; ++ table->free_count++; ++ ++ /* If all trampolines within this table are free, and at least one other table exists, deallocate ++ * the table */ ++ if (table->free_count == FFI_TRAMPOLINE_COUNT ++ && ffi_trampoline_tables != table) ++ { ++ /* Remove from the list */ ++ if (table->prev != NULL) ++ table->prev->next = table->next; ++ ++ if (table->next != NULL) ++ table->next->prev = table->prev; ++ ++ /* Deallocate pages */ ++ kern_return_t kt; ++ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ ++ kt = ++ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ ++ /* Deallocate free list */ ++ free (table->free_list_pool); ++ free (table); ++ } ++ else if (ffi_trampoline_tables != table) ++ { ++ /* Otherwise, bump this table to the top of the list */ ++ table->prev = NULL; ++ table->next = ffi_trampoline_tables; ++ if (ffi_trampoline_tables != NULL) ++ ffi_trampoline_tables->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ pthread_mutex_unlock (&ffi_trampoline_lock); ++ ++ /* Free the closure */ ++ free (closure); ++} ++ ++#else ++ ++extern unsigned int ffi_arm_trampoline[2] FFI_HIDDEN; ++ ++#endif ++ ++/* the cif must already be prep'ed */ ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure * closure, ++ ffi_cif * cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, void *codeloc) ++{ ++ void (*closure_func) (void) = ffi_closure_SYSV; ++ ++ if (cif->abi == FFI_VFP) ++ { ++ /* We only need take the vfp path if there are vfp arguments. */ ++ if (cif->vfp_used) ++ closure_func = ffi_closure_VFP; ++ } ++ else if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); ++ config[0] = closure; ++ config[1] = closure_func; ++#else ++ memcpy (closure->tramp, ffi_arm_trampoline, 8); ++ __clear_cache(closure->tramp, closure->tramp + 8); /* clear data map */ ++ __clear_cache(codeloc, codeloc + 8); /* clear insn map */ ++ *(void (**)(void))(closure->tramp + 8) = closure_func; ++#endif ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *)) ++{ ++ void (*closure_func) (void) = ffi_go_closure_SYSV; ++ ++ if (cif->abi == FFI_VFP) ++ { ++ /* We only need take the vfp path if there are vfp arguments. */ ++ if (cif->vfp_used) ++ closure_func = ffi_go_closure_VFP; ++ } ++ else if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; ++ ++ closure->tramp = closure_func; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++/* Below are routines for VFP hard-float support. */ ++ ++/* A subroutine of vfp_type_p. Given a structure type, return the type code ++ of the first non-structure element. Recurse for structure elements. ++ Return -1 if the structure is in fact empty, i.e. no nested elements. */ ++ ++static int ++is_hfa0 (const ffi_type *ty) ++{ ++ ffi_type **elements = ty->elements; ++ int i, ret = -1; ++ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ ret = elements[i]->type; ++ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) ++ { ++ ret = is_hfa0 (elements[i]); ++ if (ret < 0) ++ continue; ++ } ++ break; ++ } ++ ++ return ret; ++} ++ ++/* A subroutine of vfp_type_p. Given a structure type, return true if all ++ of the non-structure elements are the same as CANDIDATE. */ ++ ++static int ++is_hfa1 (const ffi_type *ty, int candidate) ++{ ++ ffi_type **elements = ty->elements; ++ int i; ++ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } ++ ++ return 1; ++} ++ ++/* Determine if TY is an homogenous floating point aggregate (HFA). ++ That is, a structure consisting of 1 to 4 members of all the same type, ++ where that type is a floating point scalar. ++ ++ Returns non-zero iff TY is an HFA. The result is an encoded value where ++ bits 0-7 contain the type code, and bits 8-10 contain the element count. */ ++ ++static int ++vfp_type_p (const ffi_type *ty) ++{ ++ ffi_type **elements; ++ int candidate, i; ++ size_t size, ele_count; ++ ++ /* Quickest tests first. */ ++ candidate = ty->type; ++ switch (ty->type) ++ { ++ default: ++ return 0; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ ele_count = 1; ++ goto done; ++ case FFI_TYPE_COMPLEX: ++ candidate = ty->elements[0]->type; ++ if (candidate != FFI_TYPE_FLOAT && candidate != FFI_TYPE_DOUBLE) ++ return 0; ++ ele_count = 2; ++ goto done; ++ case FFI_TYPE_STRUCT: ++ break; ++ } ++ ++ /* No HFA types are smaller than 4 bytes, or larger than 32 bytes. */ ++ size = ty->size; ++ if (size < 4 || size > 32) ++ return 0; ++ ++ /* Find the type of the first non-structure member. */ ++ elements = ty->elements; ++ candidate = elements[0]->type; ++ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) ++ { ++ for (i = 0; ; ++i) ++ { ++ candidate = is_hfa0 (elements[i]); ++ if (candidate >= 0) ++ break; ++ } ++ } ++ ++ /* If the first member is not a floating point type, it's not an HFA. ++ Also quickly re-check the size of the structure. */ ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ ele_count = size / sizeof(float); ++ if (size != ele_count * sizeof(float)) ++ return 0; ++ break; ++ case FFI_TYPE_DOUBLE: ++ ele_count = size / sizeof(double); ++ if (size != ele_count * sizeof(double)) ++ return 0; ++ break; ++ default: ++ return 0; ++ } ++ if (ele_count > 4) ++ return 0; ++ ++ /* Finally, make sure that all scalar elements are the same type. */ ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } ++ ++ /* All tests succeeded. Encode the result. */ ++ done: ++ return (ele_count << 8) | candidate; ++} ++ ++static int ++place_vfp_arg (ffi_cif *cif, int h) ++{ ++ unsigned short reg = cif->vfp_reg_free; ++ int align = 1, nregs = h >> 8; ++ ++ if ((h & 0xff) == FFI_TYPE_DOUBLE) ++ align = 2, nregs *= 2; ++ ++ /* Align register number. */ ++ if ((reg & 1) && align == 2) ++ reg++; ++ ++ while (reg + nregs <= 16) ++ { ++ int s, new_used = 0; ++ for (s = reg; s < reg + nregs; s++) ++ { ++ new_used |= (1 << s); ++ if (cif->vfp_used & (1 << s)) ++ { ++ reg += align; ++ goto next_reg; ++ } ++ } ++ /* Found regs to allocate. */ ++ cif->vfp_used |= new_used; ++ cif->vfp_args[cif->vfp_nargs++] = reg; ++ ++ /* Update vfp_reg_free. */ ++ if (cif->vfp_used & (1 << cif->vfp_reg_free)) ++ { ++ reg += nregs; ++ while (cif->vfp_used & (1 << reg)) ++ reg += 1; ++ cif->vfp_reg_free = reg; ++ } ++ return 0; ++ next_reg:; ++ } ++ // done, mark all regs as used ++ cif->vfp_reg_free = 16; ++ cif->vfp_used = 0xFFFF; ++ return 1; ++} ++ ++static void ++layout_vfp_args (ffi_cif * cif) ++{ ++ int i; ++ /* Init VFP fields */ ++ cif->vfp_used = 0; ++ cif->vfp_nargs = 0; ++ cif->vfp_reg_free = 0; ++ memset (cif->vfp_args, -1, 16); /* Init to -1. */ ++ ++ for (i = 0; i < cif->nargs; i++) ++ { ++ int h = vfp_type_p (cif->arg_types[i]); ++ if (h && place_vfp_arg (cif, h) == 1) ++ break; ++ } ++} +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffitarget.h modified/Modules/_ctypes/libffi_ios/arm/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/arm/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffitarget.h 2015-03-12 21:33:17.000000000 +0800 +@@ -0,0 +1,69 @@ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012 Anthony Green ++ Copyright (c) 2010 CodeSourcery ++ Copyright (c) 1996-2003 Red Hat, Inc. ++ ++ Target configuration macros for ARM. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_VFP, ++ FFI_LAST_ABI, ++#ifdef __ARM_PCS_VFP ++ FFI_DEFAULT_ABI = FFI_VFP, ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV, ++#endif ++} ffi_abi; ++#endif ++ ++#define FFI_EXTRA_CIF_FIELDS \ ++ int vfp_used; \ ++ unsigned short vfp_reg_free, vfp_nargs; \ ++ signed char vfp_args[16] \ ++ ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++#define FFI_TRAMPOLINE_SIZE 12 ++#define FFI_NATIVE_RAW_API 0 ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h +--- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-03-12 21:33:17.000000000 +0800 +@@ -0,0 +1,7 @@ ++#define ARM_TYPE_VFP_S 0 ++#define ARM_TYPE_VFP_D 1 ++#define ARM_TYPE_VFP_N 2 ++#define ARM_TYPE_INT64 3 ++#define ARM_TYPE_INT 4 ++#define ARM_TYPE_VOID 5 ++#define ARM_TYPE_STRUCT 6 +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv.S modified/Modules/_ctypes/libffi_ios/arm/sysv.S +--- orig/Modules/_ctypes/libffi_ios/arm/sysv.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/sysv.S 2015-03-12 21:33:17.000000000 +0800 +@@ -0,0 +1,335 @@ ++/* ----------------------------------------------------------------------- ++ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ ++ ARM Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#define LIBFFI_ASM ++#include ++#include ++#include ++#include "internal.h" ++ ++/* GCC 4.8 provides __ARM_ARCH; construct it otherwise. */ ++#ifndef __ARM_ARCH ++# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ ++ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ ++ || defined(__ARM_ARCH_7EM__) ++# define __ARM_ARCH 7 ++# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ ++ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ ++ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ ++ || defined(__ARM_ARCH_6M__) ++# define __ARM_ARCH 6 ++# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ ++ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ ++ || defined(__ARM_ARCH_5TEJ__) ++# define __ARM_ARCH 5 ++# else ++# define __ARM_ARCH 4 ++# endif ++#endif ++ ++/* Conditionally compile unwinder directives. */ ++.macro UNWIND text:vararg ++#ifdef __ARM_EABI__ ++ \text ++#endif ++.endm ++#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__ARM_EABI__) ++ .cfi_sections .debug_frame ++#endif ++ ++#define CONCAT(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b ++ ++#ifdef __USER_LABEL_PREFIX__ ++# define CNAME(X) CONCAT (__USER_LABEL_PREFIX__, X) ++#else ++# define CNAME(X) X ++#endif ++#ifdef __ELF__ ++# define SIZE(X) .size CNAME(X), . - CNAME(X) ++# define TYPE(X, Y) .type CNAME(X), Y ++#else ++# define SIZE(X) ++# define TYPE(X, Y) ++#endif ++ ++#define ARM_FUNC_START(name, gl) \ ++ .align 3; \ ++ .ifne gl; .globl CNAME(name); FFI_HIDDEN(CNAME(name)); .endif; \ ++ TYPE(name, %function); \ ++ CNAME(name): ++ ++#define ARM_FUNC_END(name) \ ++ SIZE(name) ++ ++/* Aid in defining a jump table with 8 bytes between entries. */ ++.macro E index ++ .if . - 0b - 8*\index ++ .error "type table out of sync" ++ .endif ++.endm ++ ++ .text ++ .syntax unified ++ .arm ++ ++ /* We require interworking on LDM, which implies ARMv5T, ++ which implies the existance of BLX. */ ++ .arch armv5t ++ ++ /* Note that we use STC and LDC to encode VFP instructions, ++ so that we do not need ".fpu vfp", nor get that added to ++ the object file attributes. These will not be executed ++ unless the FFI_VFP abi is used. */ ++ ++ @ r0: stack ++ @ r1: frame ++ @ r2: fn ++ @ r3: vfp_used ++ ++ARM_FUNC_START(ffi_call_VFP, 1) ++ UNWIND .fnstart ++ cfi_startproc ++ ++ cmp r3, #3 @ load only d0 if possible ++ ldcle p11, cr0, [r0] @ vldrle d0, [sp] ++ ldcgt p11, cr0, [r0], {16} @ vldmgt sp, {d0-d7} ++ add r0, r0, #64 @ discard the vfp register args ++ /* FALLTHRU */ ++ARM_FUNC_END(ffi_call_VFP) ++ ++ARM_FUNC_START(ffi_call_SYSV, 1) ++ stm r1, {fp, lr} ++ mov fp, r1 ++ ++ @ This is a bit of a lie wrt the origin of the unwind info, but ++ @ now we've got the usual frame pointer and two saved registers. ++ UNWIND .save {fp,lr} ++ UNWIND .setfp fp, sp ++ cfi_def_cfa(fp, 8) ++ cfi_rel_offset(fp, 0) ++ cfi_rel_offset(lr, 4) ++ ++ mov sp, r0 @ install the stack pointer ++ mov lr, r2 @ move the fn pointer out of the way ++ ldr ip, [fp, #16] @ install the static chain ++ ldmia sp!, {r0-r3} @ move first 4 parameters in registers. ++ blx lr @ call fn ++ ++ @ Load r2 with the pointer to storage for the return value ++ @ Load r3 with the return type code ++ ldr r2, [fp, #8] ++ ldr r3, [fp, #12] ++ ++ @ Deallocate the stack with the arguments. ++ mov sp, fp ++ cfi_def_cfa_register(sp) ++ ++ @ Store values stored in registers. ++ .align 3 ++ add pc, pc, r3, lsl #3 ++ nop ++0: ++E ARM_TYPE_VFP_S ++ stc p10, cr0, [r2] @ vstr s0, [r2] ++ pop {fp,pc} ++E ARM_TYPE_VFP_D ++ stc p11, cr0, [r2] @ vstr d0, [r2] ++ pop {fp,pc} ++E ARM_TYPE_VFP_N ++ stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3} ++ pop {fp,pc} ++E ARM_TYPE_INT64 ++ str r1, [r2, #4] ++ nop ++E ARM_TYPE_INT ++ str r0, [r2] ++ pop {fp,pc} ++E ARM_TYPE_VOID ++ pop {fp,pc} ++ nop ++E ARM_TYPE_STRUCT ++ pop {fp,pc} ++ ++ cfi_endproc ++ UNWIND .fnend ++ARM_FUNC_END(ffi_call_SYSV) ++ ++ ++/* ++ int ffi_closure_inner_* (cif, fun, user_data, frame) ++*/ ++ ++ARM_FUNC_START(ffi_go_closure_SYSV, 1) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #4] @ load cif ++ ldr r1, [ip, #8] @ load fun ++ mov r2, ip @ load user_data ++ b 0f ++ cfi_endproc ++ARM_FUNC_END(ffi_go_closure_SYSV) ++ ++ARM_FUNC_START(ffi_closure_SYSV, 1) ++ UNWIND .fnstart ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #FFI_TRAMPOLINE_SIZE] @ load cif ++ ldr r1, [ip, #FFI_TRAMPOLINE_SIZE+4] @ load fun ++ ldr r2, [ip, #FFI_TRAMPOLINE_SIZE+8] @ load user_data ++0: ++ add ip, sp, #16 @ compute entry sp ++ sub sp, sp, #64+32 @ allocate frame ++ cfi_adjust_cfa_offset(64+32) ++ stmdb sp!, {ip,lr} ++ ++ /* Remember that EABI unwind info only applies at call sites. ++ We need do nothing except note the save of the stack pointer ++ and the link registers. */ ++ UNWIND .save {sp,lr} ++ cfi_adjust_cfa_offset(8) ++ cfi_rel_offset(lr, 4) ++ ++ add r3, sp, #8 @ load frame ++ bl CNAME(ffi_closure_inner_SYSV) ++ ++ @ Load values returned in registers. ++ add r2, sp, #8+64 @ load result ++ adr r3, CNAME(ffi_closure_ret) ++ add pc, r3, r0, lsl #3 ++ cfi_endproc ++ UNWIND .fnend ++ARM_FUNC_END(ffi_closure_SYSV) ++ ++ARM_FUNC_START(ffi_go_closure_VFP, 1) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #4] @ load cif ++ ldr r1, [ip, #8] @ load fun ++ mov r2, ip @ load user_data ++ b 0f ++ cfi_endproc ++ARM_FUNC_END(ffi_go_closure_VFP) ++ ++ARM_FUNC_START(ffi_closure_VFP, 1) ++ UNWIND .fnstart ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #FFI_TRAMPOLINE_SIZE] @ load cif ++ ldr r1, [ip, #FFI_TRAMPOLINE_SIZE+4] @ load fun ++ ldr r2, [ip, #FFI_TRAMPOLINE_SIZE+8] @ load user_data ++0: ++ add ip, sp, #16 ++ sub sp, sp, #64+32 @ allocate frame ++ cfi_adjust_cfa_offset(64+32) ++ stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7} ++ stmdb sp!, {ip,lr} ++ ++ /* See above. */ ++ UNWIND .save {sp,lr} ++ cfi_adjust_cfa_offset(8) ++ cfi_rel_offset(lr, 4) ++ ++ add r3, sp, #8 @ load frame ++ bl CNAME(ffi_closure_inner_VFP) ++ ++ @ Load values returned in registers. ++ add r2, sp, #8+64 @ load result ++ adr r3, CNAME(ffi_closure_ret) ++ add pc, r3, r0, lsl #3 ++ cfi_endproc ++ UNWIND .fnend ++ARM_FUNC_END(ffi_closure_VFP) ++ ++/* Load values returned in registers for both closure entry points. ++ Note that we use LDM with SP in the register set. This is deprecated ++ by ARM, but not yet unpredictable. */ ++ ++ARM_FUNC_START(ffi_closure_ret, 0) ++ cfi_startproc ++ cfi_rel_offset(sp, 0) ++ cfi_rel_offset(lr, 4) ++0: ++E ARM_TYPE_VFP_S ++ ldc p10, cr0, [r2] @ vldr s0, [r2] ++ ldm sp, {sp,pc} ++E ARM_TYPE_VFP_D ++ ldc p11, cr0, [r2] @ vldr d0, [r2] ++ ldm sp, {sp,pc} ++E ARM_TYPE_VFP_N ++ ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3} ++ ldm sp, {sp,pc} ++E ARM_TYPE_INT64 ++ ldr r1, [r2, #4] ++ nop ++E ARM_TYPE_INT ++ ldr r0, [r2] ++ ldm sp, {sp,pc} ++E ARM_TYPE_VOID ++ ldm sp, {sp,pc} ++ nop ++E ARM_TYPE_STRUCT ++ ldm sp, {sp,pc} ++ cfi_endproc ++ARM_FUNC_END(ffi_closure_ret) ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ++/* ??? The iOS support should be updated. The first insn used to ++ be STMFD, but that's been moved into ffi_closure_SYSV. If the ++ writable page is put after this one we can make use of the ++ pc+8 feature of the architecture. We can also reduce the size ++ of the thunk to 8 and pack more of these into the page. ++ ++ In the meantime, simply replace the STMFD with a NOP so as to ++ keep all the magic numbers the same within ffi.c. */ ++ ++ .align 12 ++ARM_FUNC_START(ffi_closure_trampoline_table_page) ++.rept 4096 / 12 ++ nop ++ ldr ip, [pc, #-4092] ++ ldr pc, [pc, #-4092] ++.endr ++ ++#else ++ ++ARM_FUNC_START(ffi_arm_trampoline, 1) ++0: adr ip, 0b ++ ldr pc, 1f ++1: .long 0 ++ARM_FUNC_END(ffi_arm_trampoline) ++ ++#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c +--- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,688 @@ ++/* ----------------------------------------------------------------------- ++ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. ++ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ ++ Code to allocate and deallocate memory for closures. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#if defined __linux__ && !defined _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++ ++#include ++#include ++ ++#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE ++# if __gnu_linux__ && !defined(__ANDROID__) ++/* This macro indicates it may be forbidden to map anonymous memory ++ with both write and execute permission. Code compiled when this ++ option is defined will attempt to map such pages once, but if it ++ fails, it falls back to creating a temporary file in a writable and ++ executable filesystem and mapping pages from it into separate ++ locations in the virtual memory space, one location writable and ++ another executable. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# define HAVE_MNTENT 1 ++# endif ++# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) ++/* Windows systems may have Data Execution Protection (DEP) enabled, ++ which requires the use of VirtualMalloc/VirtualFree to alloc/free ++ executable memory. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# endif ++#endif ++ ++#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX ++# ifdef __linux__ ++/* When defined to 1 check for SELinux and if SELinux is active, ++ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that ++ might cause audit messages. */ ++# define FFI_MMAP_EXEC_SELINUX 1 ++# endif ++#endif ++ ++#if FFI_CLOSURES ++ ++# if FFI_EXEC_TRAMPOLINE_TABLE ++ ++// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. ++ ++# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ ++ ++#define USE_LOCKS 1 ++#define USE_DL_PREFIX 1 ++#ifdef __GNUC__ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 1 ++#endif ++#endif ++ ++/* We need to use mmap, not sbrk. */ ++#define HAVE_MORECORE 0 ++ ++/* We could, in theory, support mremap, but it wouldn't buy us anything. */ ++#define HAVE_MREMAP 0 ++ ++/* We have no use for this, so save some code and data. */ ++#define NO_MALLINFO 1 ++ ++/* We need all allocations to be in regular segments, otherwise we ++ lose track of the corresponding code address. */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++ ++/* Don't allocate more than a page unless needed. */ ++#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) ++ ++#if FFI_CLOSURE_TEST ++/* Don't release single pages, to avoid a worst-case scenario of ++ continuously allocating and releasing single pages, but release ++ pairs of pages, which should do just as well given that allocations ++ are likely to be small. */ ++#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) ++#endif ++ ++#include ++#include ++#include ++#include ++#ifndef _MSC_VER ++#include ++#endif ++#include ++#include ++#if !defined(X86_WIN32) && !defined(X86_WIN64) ++#ifdef HAVE_MNTENT ++#include ++#endif /* HAVE_MNTENT */ ++#include ++#include ++ ++/* We don't want sys/mman.h to be included after we redefine mmap and ++ dlmunmap. */ ++#include ++#define LACKS_SYS_MMAN_H 1 ++ ++#if FFI_MMAP_EXEC_SELINUX ++#include ++#include ++ ++static int selinux_enabled = -1; ++ ++static int ++selinux_enabled_check (void) ++{ ++ struct statfs sfs; ++ FILE *f; ++ char *buf = NULL; ++ size_t len = 0; ++ ++ if (statfs ("/selinux", &sfs) >= 0 ++ && (unsigned int) sfs.f_type == 0xf97cff8cU) ++ return 1; ++ f = fopen ("/proc/mounts", "r"); ++ if (f == NULL) ++ return 0; ++ while (getline (&buf, &len, f) >= 0) ++ { ++ char *p = strchr (buf, ' '); ++ if (p == NULL) ++ break; ++ p = strchr (p + 1, ' '); ++ if (p == NULL) ++ break; ++ if (strncmp (p + 1, "selinuxfs ", 10) == 0) ++ { ++ free (buf); ++ fclose (f); ++ return 1; ++ } ++ } ++ free (buf); ++ fclose (f); ++ return 0; ++} ++ ++#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ ++ : (selinux_enabled = selinux_enabled_check ())) ++ ++#else ++ ++#define is_selinux_enabled() 0 ++ ++#endif /* !FFI_MMAP_EXEC_SELINUX */ ++ ++/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ ++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#include ++ ++static int emutramp_enabled = -1; ++ ++static int ++emutramp_enabled_check (void) ++{ ++ char *buf = NULL; ++ size_t len = 0; ++ FILE *f; ++ int ret; ++ f = fopen ("/proc/self/status", "r"); ++ if (f == NULL) ++ return 0; ++ ret = 0; ++ ++ while (getline (&buf, &len, f) != -1) ++ if (!strncmp (buf, "PaX:", 4)) ++ { ++ char emutramp; ++ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) ++ ret = (emutramp == 'E'); ++ break; ++ } ++ free (buf); ++ fclose (f); ++ return ret; ++} ++ ++#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ ++ : (emutramp_enabled = emutramp_enabled_check ())) ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++#elif defined (__CYGWIN__) || defined(__INTERIX) ++ ++#include ++ ++/* Cygwin is Linux-like, but not quite that Linux-like. */ ++#define is_selinux_enabled() 0 ++ ++#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ ++ ++#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#define is_emutramp_enabled() 0 ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Declare all functions defined in dlmalloc.c as static. */ ++static void *dlmalloc(size_t); ++static void dlfree(void*); ++static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; ++static void *dlrealloc(void *, size_t) MAYBE_UNUSED; ++static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; ++static void *dlvalloc(size_t) MAYBE_UNUSED; ++static int dlmallopt(int, int) MAYBE_UNUSED; ++static size_t dlmalloc_footprint(void) MAYBE_UNUSED; ++static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; ++static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; ++static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; ++static void *dlpvalloc(size_t) MAYBE_UNUSED; ++static int dlmalloc_trim(size_t) MAYBE_UNUSED; ++static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; ++static void dlmalloc_stats(void) MAYBE_UNUSED; ++ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++/* Use these for mmap and munmap within dlmalloc.c. */ ++static void *dlmmap(void *, size_t, int, int, int, off_t); ++static int dlmunmap(void *, size_t); ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++ ++#define mmap dlmmap ++#define munmap dlmunmap ++ ++#include "dlmalloc.c" ++ ++#undef mmap ++#undef munmap ++ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++ ++/* A mutex used to synchronize access to *exec* variables in this file. */ ++static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++/* A file descriptor of a temporary file from which we'll map ++ executable pages. */ ++static int execfd = -1; ++ ++/* The amount of space already allocated from the temporary file. */ ++static size_t execsize = 0; ++ ++/* Open a temporary file name, and immediately unlink it. */ ++static int ++open_temp_exec_file_name (char *name, int flags) ++{ ++ int fd; ++ ++#ifdef HAVE_MKOSTEMP ++ fd = mkostemp (name, flags); ++#else ++ fd = mkstemp (name); ++#endif ++ ++ if (fd != -1) ++ unlink (name); ++ ++ return fd; ++} ++ ++/* Open a temporary file in the named directory. */ ++static int ++open_temp_exec_file_dir (const char *dir) ++{ ++ static const char suffix[] = "/ffiXXXXXX"; ++ int lendir, flags; ++ char *tempname; ++#ifdef O_TMPFILE ++ int fd; ++#endif ++ ++#ifdef O_CLOEXEC ++ flags = O_CLOEXEC; ++#else ++ flags = 0; ++#endif ++ ++#ifdef O_TMPFILE ++ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); ++ /* If the running system does not support the O_TMPFILE flag then retry without it. */ ++ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { ++ return fd; ++ } else { ++ errno = 0; ++ } ++#endif ++ ++ lendir = strlen (dir); ++ tempname = __builtin_alloca (lendir + sizeof (suffix)); ++ ++ if (!tempname) ++ return -1; ++ ++ memcpy (tempname, dir, lendir); ++ memcpy (tempname + lendir, suffix, sizeof (suffix)); ++ ++ return open_temp_exec_file_name (tempname, flags); ++} ++ ++/* Open a temporary file in the directory in the named environment ++ variable. */ ++static int ++open_temp_exec_file_env (const char *envvar) ++{ ++ const char *value = getenv (envvar); ++ ++ if (!value) ++ return -1; ++ ++ return open_temp_exec_file_dir (value); ++} ++ ++#ifdef HAVE_MNTENT ++/* Open a temporary file in an executable and writable mount point ++ listed in the mounts file. Subsequent calls with the same mounts ++ keep searching for mount points in the same file. Providing NULL ++ as the mounts file closes the file. */ ++static int ++open_temp_exec_file_mnt (const char *mounts) ++{ ++ static const char *last_mounts; ++ static FILE *last_mntent; ++ ++ if (mounts != last_mounts) ++ { ++ if (last_mntent) ++ endmntent (last_mntent); ++ ++ last_mounts = mounts; ++ ++ if (mounts) ++ last_mntent = setmntent (mounts, "r"); ++ else ++ last_mntent = NULL; ++ } ++ ++ if (!last_mntent) ++ return -1; ++ ++ for (;;) ++ { ++ int fd; ++ struct mntent mnt; ++ char buf[MAXPATHLEN * 3]; ++ ++ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) ++ return -1; ++ ++ if (hasmntopt (&mnt, "ro") ++ || hasmntopt (&mnt, "noexec") ++ || access (mnt.mnt_dir, W_OK)) ++ continue; ++ ++ fd = open_temp_exec_file_dir (mnt.mnt_dir); ++ ++ if (fd != -1) ++ return fd; ++ } ++} ++#endif /* HAVE_MNTENT */ ++ ++/* Instructions to look for a location to hold a temporary file that ++ can be mapped in for execution. */ ++static struct ++{ ++ int (*func)(const char *); ++ const char *arg; ++ int repeat; ++} open_temp_exec_file_opts[] = { ++ { open_temp_exec_file_env, "TMPDIR", 0 }, ++ { open_temp_exec_file_dir, "/tmp", 0 }, ++ { open_temp_exec_file_dir, "/var/tmp", 0 }, ++ { open_temp_exec_file_dir, "/dev/shm", 0 }, ++ { open_temp_exec_file_env, "HOME", 0 }, ++#ifdef HAVE_MNTENT ++ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, ++ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, ++#endif /* HAVE_MNTENT */ ++}; ++ ++/* Current index into open_temp_exec_file_opts. */ ++static int open_temp_exec_file_opts_idx = 0; ++ ++/* Reset a current multi-call func, then advances to the next entry. ++ If we're at the last, go back to the first and return nonzero, ++ otherwise return zero. */ ++static int ++open_temp_exec_file_opts_next (void) ++{ ++ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); ++ ++ open_temp_exec_file_opts_idx++; ++ if (open_temp_exec_file_opts_idx ++ == (sizeof (open_temp_exec_file_opts) ++ / sizeof (*open_temp_exec_file_opts))) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* Return a file descriptor of a temporary zero-sized file in a ++ writable and executable filesystem. */ ++static int ++open_temp_exec_file (void) ++{ ++ int fd; ++ ++ do ++ { ++ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func ++ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); ++ ++ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat ++ || fd == -1) ++ { ++ if (open_temp_exec_file_opts_next ()) ++ break; ++ } ++ } ++ while (fd == -1); ++ ++ return fd; ++} ++ ++/* Map in a chunk of memory from the temporary exec file into separate ++ locations in the virtual memory address space, one writable and one ++ executable. Returns the address of the writable portion, after ++ storing an offset to the corresponding executable portion at the ++ last word of the requested chunk. */ ++static void * ++dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) ++{ ++ void *ptr; ++ ++ if (execfd == -1) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ retry_open: ++ execfd = open_temp_exec_file (); ++ if (execfd == -1) ++ return MFAIL; ++ } ++ ++ offset = execsize; ++ ++ if (ftruncate (execfd, offset + length)) ++ return MFAIL; ++ ++ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); ++ flags |= MAP_SHARED; ++ ++ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, ++ flags, execfd, offset); ++ if (ptr == MFAIL) ++ { ++ if (!offset) ++ { ++ close (execfd); ++ goto retry_open; ++ } ++ ftruncate (execfd, offset); ++ return MFAIL; ++ } ++ else if (!offset ++ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts_next (); ++ ++ start = mmap (start, length, prot, flags, execfd, offset); ++ ++ if (start == MFAIL) ++ { ++ munmap (ptr, length); ++ ftruncate (execfd, offset); ++ return start; ++ } ++ ++ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; ++ ++ execsize += length; ++ ++ return start; ++} ++ ++/* Map in a writable and executable chunk of memory if possible. ++ Failing that, fall back to dlmmap_locked. */ ++static void * ++dlmmap (void *start, size_t length, int prot, ++ int flags, int fd, off_t offset) ++{ ++ void *ptr; ++ ++ assert (start == NULL && length % malloc_getpagesize == 0 ++ && prot == (PROT_READ | PROT_WRITE) ++ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) ++ && fd == -1 && offset == 0); ++ ++#if FFI_CLOSURE_TEST ++ printf ("mapping in %zi\n", length); ++#endif ++ ++ if (execfd == -1 && is_emutramp_enabled ()) ++ { ++ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); ++ return ptr; ++ } ++ ++ if (execfd == -1 && !is_selinux_enabled ()) ++ { ++ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); ++ ++ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) ++ /* Cool, no need to mess with separate segments. */ ++ return ptr; ++ ++ /* If MREMAP_DUP is ever introduced and implemented, try mmap ++ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with ++ MREMAP_DUP and prot at this point. */ ++ } ++ ++ if (execsize == 0 || execfd == -1) ++ { ++ pthread_mutex_lock (&open_temp_exec_file_mutex); ++ ptr = dlmmap_locked (start, length, prot, flags, offset); ++ pthread_mutex_unlock (&open_temp_exec_file_mutex); ++ ++ return ptr; ++ } ++ ++ return dlmmap_locked (start, length, prot, flags, offset); ++} ++ ++/* Release memory at the given address, as well as the corresponding ++ executable page if it's separate. */ ++static int ++dlmunmap (void *start, size_t length) ++{ ++ /* We don't bother decreasing execsize or truncating the file, since ++ we can't quite tell whether we're unmapping the end of the file. ++ We don't expect frequent deallocation anyway. If we did, we ++ could locate pages in the file by writing to the pages being ++ deallocated and checking that the file contents change. ++ Yuck. */ ++ msegmentptr seg = segment_holding (gm, start); ++ void *code; ++ ++#if FFI_CLOSURE_TEST ++ printf ("unmapping %zi\n", length); ++#endif ++ ++ if (seg && (code = add_segment_exec_offset (start, seg)) != start) ++ { ++ int ret = munmap (code, length); ++ if (ret) ++ return ret; ++ } ++ ++ return munmap (start, length); ++} ++ ++#if FFI_CLOSURE_FREE_CODE ++/* Return segment holding given code address. */ ++static msegmentptr ++segment_holding_code (mstate m, char* addr) ++{ ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= add_segment_exec_offset (sp->base, sp) ++ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++#endif ++ ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++ ++/* Allocate a chunk of memory with the given size. Returns a pointer ++ to the writable address, and sets *CODE to the executable ++ corresponding virtual address. */ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ void *ptr; ++ ++ if (!code) ++ return NULL; ++ ++ ptr = dlmalloc (size); ++ ++ if (ptr) ++ { ++ msegmentptr seg = segment_holding (gm, ptr); ++ ++ *code = add_segment_exec_offset (ptr, seg); ++ } ++ ++ return ptr; ++} ++ ++/* Release a chunk of memory allocated with ffi_closure_alloc. If ++ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the ++ writable or the executable address given. Otherwise, only the ++ writable address can be provided here. */ ++void ++ffi_closure_free (void *ptr) ++{ ++#if FFI_CLOSURE_FREE_CODE ++ msegmentptr seg = segment_holding_code (gm, ptr); ++ ++ if (seg) ++ ptr = sub_segment_exec_offset (ptr, seg); ++#endif ++ ++ dlfree (ptr); ++} ++ ++ ++#if FFI_CLOSURE_TEST ++/* Do some internal sanity testing to make sure allocation and ++ deallocation of pages are working as intended. */ ++int main () ++{ ++ void *p[3]; ++#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) ++#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) ++ GET (0, malloc_getpagesize / 2); ++ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); ++ PUT (1); ++ GET (1, 2 * malloc_getpagesize); ++ GET (2, malloc_getpagesize / 2); ++ PUT (1); ++ PUT (0); ++ PUT (2); ++ return 0; ++} ++#endif /* FFI_CLOSURE_TEST */ ++# else /* ! FFI_MMAP_EXEC_WRIT */ ++ ++/* On many systems, memory returned by malloc is writable and ++ executable, so just use it. */ ++ ++#include ++ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ if (!code) ++ return NULL; ++ ++ return *code = malloc (size); ++} ++ ++void ++ffi_closure_free (void *ptr) ++{ ++ free (ptr); ++} ++ ++# endif /* ! FFI_MMAP_EXEC_WRIT */ ++#endif /* FFI_CLOSURES */ +diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c +--- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,64 @@ ++/* ----------------------------------------------------------------------- ++ debug.c - Copyright (c) 1996 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++#include ++#include ++ ++/* General debugging routines */ ++ ++void ffi_stop_here(void) ++{ ++ /* This function is only useful for debugging purposes. ++ Place a breakpoint on ffi_stop_here to be notified of ++ significant events. */ ++} ++ ++/* This function should only be called via the FFI_ASSERT() macro */ ++ ++void ffi_assert(char *expr, char *file, int line) ++{ ++ fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); ++ ffi_stop_here(); ++ abort(); ++} ++ ++/* Perform a sanity check on an ffi_type structure */ ++ ++void ffi_type_test(ffi_type *a, char *file, int line) ++{ ++ FFI_ASSERT_AT(a != NULL, file, line); ++ ++ FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); ++ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); ++ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); ++ FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX) ++ || a->elements != NULL, file, line); ++ FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX ++ || (a->elements != NULL ++ && a->elements[0] != NULL && a->elements[1] == NULL), ++ file, line); ++ ++} +diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c +--- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,5161 @@ ++/* ++ This is a version (aka dlmalloc) of malloc/free/realloc written by ++ Doug Lea and released to the public domain, as explained at ++ http://creativecommons.org/licenses/publicdomain. Send questions, ++ comments, complaints, performance data, etc to dl@cs.oswego.edu ++ ++* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) ++ ++ Note: There may be an updated version of this malloc obtainable at ++ ftp://gee.cs.oswego.edu/pub/misc/malloc.c ++ Check before installing! ++ ++* Quickstart ++ ++ This library is all in one file to simplify the most common usage: ++ ftp it, compile it (-O3), and link it into another program. All of ++ the compile-time options default to reasonable values for use on ++ most platforms. You might later want to step through various ++ compile-time and dynamic tuning options. ++ ++ For convenience, an include file for code using this malloc is at: ++ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h ++ You don't really need this .h file unless you call functions not ++ defined in your system include files. The .h file contains only the ++ excerpts from this file needed for using this malloc on ANSI C/C++ ++ systems, so long as you haven't changed compile-time options about ++ naming and tuning parameters. If you do, then you can create your ++ own malloc.h that does include all settings by cutting at the point ++ indicated below. Note that you may already by default be using a C ++ library containing a malloc that is based on some version of this ++ malloc (for example in linux). You might still want to use the one ++ in this file to customize settings or to avoid overheads associated ++ with library versions. ++ ++* Vital statistics: ++ ++ Supported pointer/size_t representation: 4 or 8 bytes ++ size_t MUST be an unsigned type of the same width as ++ pointers. (If you are using an ancient system that declares ++ size_t as a signed type, or need it to be a different width ++ than pointers, you can use a previous release of this malloc ++ (e.g. 2.7.2) supporting these.) ++ ++ Alignment: 8 bytes (default) ++ This suffices for nearly all current machines and C compilers. ++ However, you can define MALLOC_ALIGNMENT to be wider than this ++ if necessary (up to 128bytes), at the expense of using more space. ++ ++ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) ++ 8 or 16 bytes (if 8byte sizes) ++ Each malloced chunk has a hidden word of overhead holding size ++ and status information, and additional cross-check word ++ if FOOTERS is defined. ++ ++ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) ++ 8-byte ptrs: 32 bytes (including overhead) ++ ++ Even a request for zero bytes (i.e., malloc(0)) returns a ++ pointer to something of the minimum allocatable size. ++ The maximum overhead wastage (i.e., number of extra bytes ++ allocated than were requested in malloc) is less than or equal ++ to the minimum size, except for requests >= mmap_threshold that ++ are serviced via mmap(), where the worst case wastage is about ++ 32 bytes plus the remainder from a system page (the minimal ++ mmap unit); typically 4096 or 8192 bytes. ++ ++ Security: static-safe; optionally more or less ++ The "security" of malloc refers to the ability of malicious ++ code to accentuate the effects of errors (for example, freeing ++ space that is not currently malloc'ed or overwriting past the ++ ends of chunks) in code that calls malloc. This malloc ++ guarantees not to modify any memory locations below the base of ++ heap, i.e., static variables, even in the presence of usage ++ errors. The routines additionally detect most improper frees ++ and reallocs. All this holds as long as the static bookkeeping ++ for malloc itself is not corrupted by some other means. This ++ is only one aspect of security -- these checks do not, and ++ cannot, detect all possible programming errors. ++ ++ If FOOTERS is defined nonzero, then each allocated chunk ++ carries an additional check word to verify that it was malloced ++ from its space. These check words are the same within each ++ execution of a program using malloc, but differ across ++ executions, so externally crafted fake chunks cannot be ++ freed. This improves security by rejecting frees/reallocs that ++ could corrupt heap memory, in addition to the checks preventing ++ writes to statics that are always on. This may further improve ++ security at the expense of time and space overhead. (Note that ++ FOOTERS may also be worth using with MSPACES.) ++ ++ By default detected errors cause the program to abort (calling ++ "abort()"). You can override this to instead proceed past ++ errors by defining PROCEED_ON_ERROR. In this case, a bad free ++ has no effect, and a malloc that encounters a bad address ++ caused by user overwrites will ignore the bad address by ++ dropping pointers and indices to all known memory. This may ++ be appropriate for programs that should continue if at all ++ possible in the face of programming errors, although they may ++ run out of memory because dropped memory is never reclaimed. ++ ++ If you don't like either of these options, you can define ++ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything ++ else. And if if you are sure that your program using malloc has ++ no errors or vulnerabilities, you can define INSECURE to 1, ++ which might (or might not) provide a small performance improvement. ++ ++ Thread-safety: NOT thread-safe unless USE_LOCKS defined ++ When USE_LOCKS is defined, each public call to malloc, free, ++ etc is surrounded with either a pthread mutex or a win32 ++ spinlock (depending on WIN32). This is not especially fast, and ++ can be a major bottleneck. It is designed only to provide ++ minimal protection in concurrent environments, and to provide a ++ basis for extensions. If you are using malloc in a concurrent ++ program, consider instead using ptmalloc, which is derived from ++ a version of this malloc. (See http://www.malloc.de). ++ ++ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP ++ This malloc can use unix sbrk or any emulation (invoked using ++ the CALL_MORECORE macro) and/or mmap/munmap or any emulation ++ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system ++ memory. On most unix systems, it tends to work best if both ++ MORECORE and MMAP are enabled. On Win32, it uses emulations ++ based on VirtualAlloc. It also uses common C library functions ++ like memset. ++ ++ Compliance: I believe it is compliant with the Single Unix Specification ++ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably ++ others as well. ++ ++* Overview of algorithms ++ ++ This is not the fastest, most space-conserving, most portable, or ++ most tunable malloc ever written. However it is among the fastest ++ while also being among the most space-conserving, portable and ++ tunable. Consistent balance across these factors results in a good ++ general-purpose allocator for malloc-intensive programs. ++ ++ In most ways, this malloc is a best-fit allocator. Generally, it ++ chooses the best-fitting existing chunk for a request, with ties ++ broken in approximately least-recently-used order. (This strategy ++ normally maintains low fragmentation.) However, for requests less ++ than 256bytes, it deviates from best-fit when there is not an ++ exactly fitting available chunk by preferring to use space adjacent ++ to that used for the previous small request, as well as by breaking ++ ties in approximately most-recently-used order. (These enhance ++ locality of series of small allocations.) And for very large requests ++ (>= 256Kb by default), it relies on system memory mapping ++ facilities, if supported. (This helps avoid carrying around and ++ possibly fragmenting memory used only for large chunks.) ++ ++ All operations (except malloc_stats and mallinfo) have execution ++ times that are bounded by a constant factor of the number of bits in ++ a size_t, not counting any clearing in calloc or copying in realloc, ++ or actions surrounding MORECORE and MMAP that have times ++ proportional to the number of non-contiguous regions returned by ++ system allocation routines, which is often just 1. ++ ++ The implementation is not very modular and seriously overuses ++ macros. Perhaps someday all C compilers will do as good a job ++ inlining modular code as can now be done by brute-force expansion, ++ but now, enough of them seem not to. ++ ++ Some compilers issue a lot of warnings about code that is ++ dead/unreachable only on some platforms, and also about intentional ++ uses of negation on unsigned types. All known cases of each can be ++ ignored. ++ ++ For a longer but out of date high-level description, see ++ http://gee.cs.oswego.edu/dl/html/malloc.html ++ ++* MSPACES ++ If MSPACES is defined, then in addition to malloc, free, etc., ++ this file also defines mspace_malloc, mspace_free, etc. These ++ are versions of malloc routines that take an "mspace" argument ++ obtained using create_mspace, to control all internal bookkeeping. ++ If ONLY_MSPACES is defined, only these versions are compiled. ++ So if you would like to use this allocator for only some allocations, ++ and your system malloc for others, you can compile with ++ ONLY_MSPACES and then do something like... ++ static mspace mymspace = create_mspace(0,0); // for example ++ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) ++ ++ (Note: If you only need one instance of an mspace, you can instead ++ use "USE_DL_PREFIX" to relabel the global malloc.) ++ ++ You can similarly create thread-local allocators by storing ++ mspaces as thread-locals. For example: ++ static __thread mspace tlms = 0; ++ void* tlmalloc(size_t bytes) { ++ if (tlms == 0) tlms = create_mspace(0, 0); ++ return mspace_malloc(tlms, bytes); ++ } ++ void tlfree(void* mem) { mspace_free(tlms, mem); } ++ ++ Unless FOOTERS is defined, each mspace is completely independent. ++ You cannot allocate from one and free to another (although ++ conformance is only weakly checked, so usage errors are not always ++ caught). If FOOTERS is defined, then each chunk carries around a tag ++ indicating its originating mspace, and frees are directed to their ++ originating spaces. ++ ++ ------------------------- Compile-time options --------------------------- ++ ++Be careful in setting #define values for numerical constants of type ++size_t. On some systems, literal values are not automatically extended ++to size_t precision unless they are explicitly casted. ++ ++WIN32 default: defined if _WIN32 defined ++ Defining WIN32 sets up defaults for MS environment and compilers. ++ Otherwise defaults are for unix. ++ ++MALLOC_ALIGNMENT default: (size_t)8 ++ Controls the minimum alignment for malloc'ed chunks. It must be a ++ power of two and at least 8, even on machines for which smaller ++ alignments would suffice. It may be defined as larger than this ++ though. Note however that code and data structures are optimized for ++ the case of 8-byte alignment. ++ ++MSPACES default: 0 (false) ++ If true, compile in support for independent allocation spaces. ++ This is only supported if HAVE_MMAP is true. ++ ++ONLY_MSPACES default: 0 (false) ++ If true, only compile in mspace versions, not regular versions. ++ ++USE_LOCKS default: 0 (false) ++ Causes each call to each public routine to be surrounded with ++ pthread or WIN32 mutex lock/unlock. (If set true, this can be ++ overridden on a per-mspace basis for mspace versions.) ++ ++FOOTERS default: 0 ++ If true, provide extra checking and dispatching by placing ++ information in the footers of allocated chunks. This adds ++ space and time overhead. ++ ++INSECURE default: 0 ++ If true, omit checks for usage errors and heap space overwrites. ++ ++USE_DL_PREFIX default: NOT defined ++ Causes compiler to prefix all public routines with the string 'dl'. ++ This can be useful when you only want to use this malloc in one part ++ of a program, using your regular system malloc elsewhere. ++ ++ABORT default: defined as abort() ++ Defines how to abort on failed checks. On most systems, a failed ++ check cannot die with an "assert" or even print an informative ++ message, because the underlying print routines in turn call malloc, ++ which will fail again. Generally, the best policy is to simply call ++ abort(). It's not very useful to do more than this because many ++ errors due to overwriting will show up as address faults (null, odd ++ addresses etc) rather than malloc-triggered checks, so will also ++ abort. Also, most compilers know that abort() does not return, so ++ can better optimize code conditionally calling it. ++ ++PROCEED_ON_ERROR default: defined as 0 (false) ++ Controls whether detected bad addresses cause them to bypassed ++ rather than aborting. If set, detected bad arguments to free and ++ realloc are ignored. And all bookkeeping information is zeroed out ++ upon a detected overwrite of freed heap space, thus losing the ++ ability to ever return it from malloc again, but enabling the ++ application to proceed. If PROCEED_ON_ERROR is defined, the ++ static variable malloc_corruption_error_count is compiled in ++ and can be examined to see if errors have occurred. This option ++ generates slower code than the default abort policy. ++ ++DEBUG default: NOT defined ++ The DEBUG setting is mainly intended for people trying to modify ++ this code or diagnose problems when porting to new platforms. ++ However, it may also be able to better isolate user errors than just ++ using runtime checks. The assertions in the check routines spell ++ out in more detail the assumptions and invariants underlying the ++ algorithms. The checking is fairly extensive, and will slow down ++ execution noticeably. Calling malloc_stats or mallinfo with DEBUG ++ set will attempt to check every non-mmapped allocated and free chunk ++ in the course of computing the summaries. ++ ++ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) ++ Debugging assertion failures can be nearly impossible if your ++ version of the assert macro causes malloc to be called, which will ++ lead to a cascade of further failures, blowing the runtime stack. ++ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), ++ which will usually make debugging easier. ++ ++MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 ++ The action to take before "return 0" when malloc fails to be able to ++ return memory because there is none available. ++ ++HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES ++ True if this system supports sbrk or an emulation of it. ++ ++MORECORE default: sbrk ++ The name of the sbrk-style system routine to call to obtain more ++ memory. See below for guidance on writing custom MORECORE ++ functions. The type of the argument to sbrk/MORECORE varies across ++ systems. It cannot be size_t, because it supports negative ++ arguments, so it is normally the signed type of the same width as ++ size_t (sometimes declared as "intptr_t"). It doesn't much matter ++ though. Internally, we only call it with arguments less than half ++ the max value of a size_t, which should work across all reasonable ++ possibilities, although sometimes generating compiler warnings. See ++ near the end of this file for guidelines for creating a custom ++ version of MORECORE. ++ ++MORECORE_CONTIGUOUS default: 1 (true) ++ If true, take advantage of fact that consecutive calls to MORECORE ++ with positive arguments always return contiguous increasing ++ addresses. This is true of unix sbrk. It does not hurt too much to ++ set it true anyway, since malloc copes with non-contiguities. ++ Setting it false when definitely non-contiguous saves time ++ and possibly wasted space it would take to discover this though. ++ ++MORECORE_CANNOT_TRIM default: NOT defined ++ True if MORECORE cannot release space back to the system when given ++ negative arguments. This is generally necessary only if you are ++ using a hand-crafted MORECORE function that cannot handle negative ++ arguments. ++ ++HAVE_MMAP default: 1 (true) ++ True if this system supports mmap or an emulation of it. If so, and ++ HAVE_MORECORE is not true, MMAP is used for all system ++ allocation. If set and HAVE_MORECORE is true as well, MMAP is ++ primarily used to directly allocate very large blocks. It is also ++ used as a backup strategy in cases where MORECORE fails to provide ++ space from system. Note: A single call to MUNMAP is assumed to be ++ able to unmap memory that may have be allocated using multiple calls ++ to MMAP, so long as they are adjacent. ++ ++HAVE_MREMAP default: 1 on linux, else 0 ++ If true realloc() uses mremap() to re-allocate large blocks and ++ extend or shrink allocation spaces. ++ ++MMAP_CLEARS default: 1 on unix ++ True if mmap clears memory so calloc doesn't need to. This is true ++ for standard unix mmap using /dev/zero. ++ ++USE_BUILTIN_FFS default: 0 (i.e., not used) ++ Causes malloc to use the builtin ffs() function to compute indices. ++ Some compilers may recognize and intrinsify ffs to be faster than the ++ supplied C version. Also, the case of x86 using gcc is special-cased ++ to an asm instruction, so is already as fast as it can be, and so ++ this setting has no effect. (On most x86s, the asm version is only ++ slightly faster than the C version.) ++ ++malloc_getpagesize default: derive from system includes, or 4096. ++ The system page size. To the extent possible, this malloc manages ++ memory from the system in page-size units. This may be (and ++ usually is) a function rather than a constant. This is ignored ++ if WIN32, where page size is determined using getSystemInfo during ++ initialization. ++ ++USE_DEV_RANDOM default: 0 (i.e., not used) ++ Causes malloc to use /dev/random to initialize secure magic seed for ++ stamping footers. Otherwise, the current time is used. ++ ++NO_MALLINFO default: 0 ++ If defined, don't compile "mallinfo". This can be a simple way ++ of dealing with mismatches between system declarations and ++ those in this file. ++ ++MALLINFO_FIELD_TYPE default: size_t ++ The type of the fields in the mallinfo struct. This was originally ++ defined as "int" in SVID etc, but is more usefully defined as ++ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set ++ ++REALLOC_ZERO_BYTES_FREES default: not defined ++ This should be set if a call to realloc with zero bytes should ++ be the same as a call to free. Some people think it should. Otherwise, ++ since this malloc returns a unique pointer for malloc(0), so does ++ realloc(p, 0). ++ ++LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H ++LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H ++LACKS_STDLIB_H default: NOT defined unless on WIN32 ++ Define these if your system does not have these header files. ++ You might need to manually insert some of the declarations they provide. ++ ++DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, ++ system_info.dwAllocationGranularity in WIN32, ++ otherwise 64K. ++ Also settable using mallopt(M_GRANULARITY, x) ++ The unit for allocating and deallocating memory from the system. On ++ most systems with contiguous MORECORE, there is no reason to ++ make this more than a page. However, systems with MMAP tend to ++ either require or encourage larger granularities. You can increase ++ this value to prevent system allocation functions to be called so ++ often, especially if they are slow. The value must be at least one ++ page and must be a power of two. Setting to 0 causes initialization ++ to either page size or win32 region size. (Note: In previous ++ versions of malloc, the equivalent of this option was called ++ "TOP_PAD") ++ ++DEFAULT_TRIM_THRESHOLD default: 2MB ++ Also settable using mallopt(M_TRIM_THRESHOLD, x) ++ The maximum amount of unused top-most memory to keep before ++ releasing via malloc_trim in free(). Automatic trimming is mainly ++ useful in long-lived programs using contiguous MORECORE. Because ++ trimming via sbrk can be slow on some systems, and can sometimes be ++ wasteful (in cases where programs immediately afterward allocate ++ more large chunks) the value should be high enough so that your ++ overall system performance would improve by releasing this much ++ memory. As a rough guide, you might set to a value close to the ++ average size of a process (program) running on your system. ++ Releasing this much memory would allow such a process to run in ++ memory. Generally, it is worth tuning trim thresholds when a ++ program undergoes phases where several large chunks are allocated ++ and released in ways that can reuse each other's storage, perhaps ++ mixed with phases where there are no such chunks at all. The trim ++ value must be greater than page size to have any useful effect. To ++ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick ++ some people use of mallocing a huge space and then freeing it at ++ program startup, in an attempt to reserve system memory, doesn't ++ have the intended effect under automatic trimming, since that memory ++ will immediately be returned to the system. ++ ++DEFAULT_MMAP_THRESHOLD default: 256K ++ Also settable using mallopt(M_MMAP_THRESHOLD, x) ++ The request size threshold for using MMAP to directly service a ++ request. Requests of at least this size that cannot be allocated ++ using already-existing space will be serviced via mmap. (If enough ++ normal freed space already exists it is used instead.) Using mmap ++ segregates relatively large chunks of memory so that they can be ++ individually obtained and released from the host system. A request ++ serviced through mmap is never reused by any other request (at least ++ not directly; the system may just so happen to remap successive ++ requests to the same locations). Segregating space in this way has ++ the benefits that: Mmapped space can always be individually released ++ back to the system, which helps keep the system level memory demands ++ of a long-lived program low. Also, mapped memory doesn't become ++ `locked' between other chunks, as can happen with normally allocated ++ chunks, which means that even trimming via malloc_trim would not ++ release them. However, it has the disadvantage that the space ++ cannot be reclaimed, consolidated, and then used to service later ++ requests, as happens with normal chunks. The advantages of mmap ++ nearly always outweigh disadvantages for "large" chunks, but the ++ value of "large" may vary across systems. The default is an ++ empirically derived value that works well in most systems. You can ++ disable mmap by setting to MAX_SIZE_T. ++ ++*/ ++ ++#ifndef WIN32 ++#ifdef _WIN32 ++#define WIN32 1 ++#endif /* _WIN32 */ ++#endif /* WIN32 */ ++#ifdef WIN32 ++#define WIN32_LEAN_AND_MEAN ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_UNISTD_H ++#define LACKS_SYS_PARAM_H ++#define LACKS_SYS_MMAN_H ++#define LACKS_STRING_H ++#define LACKS_STRINGS_H ++#define LACKS_SYS_TYPES_H ++#define LACKS_ERRNO_H ++#define MALLOC_FAILURE_ACTION ++#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ ++#endif /* WIN32 */ ++ ++#ifdef __OS2__ ++#define INCL_DOS ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_SYS_MMAN_H ++#endif /* __OS2__ */ ++ ++#if defined(DARWIN) || defined(_DARWIN) ++/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ ++#ifndef HAVE_MORECORE ++#define HAVE_MORECORE 0 ++#define HAVE_MMAP 1 ++#endif /* HAVE_MORECORE */ ++#endif /* DARWIN */ ++ ++#ifndef LACKS_SYS_TYPES_H ++#include /* For size_t */ ++#endif /* LACKS_SYS_TYPES_H */ ++ ++/* The maximum possible size_t value has all bits set */ ++#define MAX_SIZE_T (~(size_t)0) ++ ++#ifndef ONLY_MSPACES ++#define ONLY_MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#ifndef MSPACES ++#if ONLY_MSPACES ++#define MSPACES 1 ++#else /* ONLY_MSPACES */ ++#define MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#endif /* MSPACES */ ++#ifndef MALLOC_ALIGNMENT ++#define MALLOC_ALIGNMENT ((size_t)8U) ++#endif /* MALLOC_ALIGNMENT */ ++#ifndef FOOTERS ++#define FOOTERS 0 ++#endif /* FOOTERS */ ++#ifndef ABORT ++#define ABORT abort() ++#endif /* ABORT */ ++#ifndef ABORT_ON_ASSERT_FAILURE ++#define ABORT_ON_ASSERT_FAILURE 1 ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#ifndef PROCEED_ON_ERROR ++#define PROCEED_ON_ERROR 0 ++#endif /* PROCEED_ON_ERROR */ ++#ifndef USE_LOCKS ++#define USE_LOCKS 0 ++#endif /* USE_LOCKS */ ++#ifndef INSECURE ++#define INSECURE 0 ++#endif /* INSECURE */ ++#ifndef HAVE_MMAP ++#define HAVE_MMAP 1 ++#endif /* HAVE_MMAP */ ++#ifndef MMAP_CLEARS ++#define MMAP_CLEARS 1 ++#endif /* MMAP_CLEARS */ ++#ifndef HAVE_MREMAP ++#ifdef linux ++#define HAVE_MREMAP 1 ++#else /* linux */ ++#define HAVE_MREMAP 0 ++#endif /* linux */ ++#endif /* HAVE_MREMAP */ ++#ifndef MALLOC_FAILURE_ACTION ++#define MALLOC_FAILURE_ACTION errno = ENOMEM; ++#endif /* MALLOC_FAILURE_ACTION */ ++#ifndef HAVE_MORECORE ++#if ONLY_MSPACES ++#define HAVE_MORECORE 0 ++#else /* ONLY_MSPACES */ ++#define HAVE_MORECORE 1 ++#endif /* ONLY_MSPACES */ ++#endif /* HAVE_MORECORE */ ++#if !HAVE_MORECORE ++#define MORECORE_CONTIGUOUS 0 ++#else /* !HAVE_MORECORE */ ++#ifndef MORECORE ++#define MORECORE sbrk ++#endif /* MORECORE */ ++#ifndef MORECORE_CONTIGUOUS ++#define MORECORE_CONTIGUOUS 1 ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* HAVE_MORECORE */ ++#ifndef DEFAULT_GRANULARITY ++#if MORECORE_CONTIGUOUS ++#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ ++#else /* MORECORE_CONTIGUOUS */ ++#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* DEFAULT_GRANULARITY */ ++#ifndef DEFAULT_TRIM_THRESHOLD ++#ifndef MORECORE_CANNOT_TRIM ++#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) ++#else /* MORECORE_CANNOT_TRIM */ ++#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T ++#endif /* MORECORE_CANNOT_TRIM */ ++#endif /* DEFAULT_TRIM_THRESHOLD */ ++#ifndef DEFAULT_MMAP_THRESHOLD ++#if HAVE_MMAP ++#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) ++#else /* HAVE_MMAP */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++#endif /* HAVE_MMAP */ ++#endif /* DEFAULT_MMAP_THRESHOLD */ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 0 ++#endif /* USE_BUILTIN_FFS */ ++#ifndef USE_DEV_RANDOM ++#define USE_DEV_RANDOM 0 ++#endif /* USE_DEV_RANDOM */ ++#ifndef NO_MALLINFO ++#define NO_MALLINFO 0 ++#endif /* NO_MALLINFO */ ++#ifndef MALLINFO_FIELD_TYPE ++#define MALLINFO_FIELD_TYPE size_t ++#endif /* MALLINFO_FIELD_TYPE */ ++ ++/* ++ mallopt tuning options. SVID/XPG defines four standard parameter ++ numbers for mallopt, normally defined in malloc.h. None of these ++ are used in this malloc, so setting them has no effect. But this ++ malloc does support the following options. ++*/ ++ ++#define M_TRIM_THRESHOLD (-1) ++#define M_GRANULARITY (-2) ++#define M_MMAP_THRESHOLD (-3) ++ ++/* ------------------------ Mallinfo declarations ------------------------ */ ++ ++#if !NO_MALLINFO ++/* ++ This version of malloc supports the standard SVID/XPG mallinfo ++ routine that returns a struct containing usage properties and ++ statistics. It should work on any system that has a ++ /usr/include/malloc.h defining struct mallinfo. The main ++ declaration needed is the mallinfo struct that is returned (by-copy) ++ by mallinfo(). The malloinfo struct contains a bunch of fields that ++ are not even meaningful in this version of malloc. These fields are ++ are instead filled by mallinfo() with other numbers that might be of ++ interest. ++ ++ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a ++ /usr/include/malloc.h file that includes a declaration of struct ++ mallinfo. If so, it is included; else a compliant version is ++ declared below. These must be precisely the same for mallinfo() to ++ work. The original SVID version of this struct, defined on most ++ systems with mallinfo, declares all fields as ints. But some others ++ define as unsigned long. If your system defines the fields using a ++ type of different width than listed here, you MUST #include your ++ system version and #define HAVE_USR_INCLUDE_MALLOC_H. ++*/ ++ ++/* #define HAVE_USR_INCLUDE_MALLOC_H */ ++ ++#ifdef HAVE_USR_INCLUDE_MALLOC_H ++#include "/usr/include/malloc.h" ++#else /* HAVE_USR_INCLUDE_MALLOC_H */ ++ ++/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ ++#define _STRUCT_MALLINFO ++ ++struct mallinfo { ++ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ ++ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ ++ MALLINFO_FIELD_TYPE smblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ ++ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ ++ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ ++ MALLINFO_FIELD_TYPE fordblks; /* total free space */ ++ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ ++}; ++ ++#endif /* HAVE_USR_INCLUDE_MALLOC_H */ ++#endif /* NO_MALLINFO */ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#if !ONLY_MSPACES ++ ++/* ------------------- Declarations of public routines ------------------- */ ++ ++#ifndef USE_DL_PREFIX ++#define dlcalloc calloc ++#define dlfree free ++#define dlmalloc malloc ++#define dlmemalign memalign ++#define dlrealloc realloc ++#define dlvalloc valloc ++#define dlpvalloc pvalloc ++#define dlmallinfo mallinfo ++#define dlmallopt mallopt ++#define dlmalloc_trim malloc_trim ++#define dlmalloc_stats malloc_stats ++#define dlmalloc_usable_size malloc_usable_size ++#define dlmalloc_footprint malloc_footprint ++#define dlmalloc_max_footprint malloc_max_footprint ++#define dlindependent_calloc independent_calloc ++#define dlindependent_comalloc independent_comalloc ++#endif /* USE_DL_PREFIX */ ++ ++ ++/* ++ malloc(size_t n) ++ Returns a pointer to a newly allocated chunk of at least n bytes, or ++ null if no space is available, in which case errno is set to ENOMEM ++ on ANSI C systems. ++ ++ If n is zero, malloc returns a minimum-sized chunk. (The minimum ++ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit ++ systems.) Note that size_t is an unsigned type, so calls with ++ arguments that would be negative if signed are interpreted as ++ requests for huge amounts of space, which will often fail. The ++ maximum supported value of n differs across systems, but is in all ++ cases less than the maximum representable value of a size_t. ++*/ ++void* dlmalloc(size_t); ++ ++/* ++ free(void* p) ++ Releases the chunk of memory pointed to by p, that had been previously ++ allocated using malloc or a related routine such as realloc. ++ It has no effect if p is null. If p was not malloced or already ++ freed, free(p) will by default cause the current program to abort. ++*/ ++void dlfree(void*); ++ ++/* ++ calloc(size_t n_elements, size_t element_size); ++ Returns a pointer to n_elements * element_size bytes, with all locations ++ set to zero. ++*/ ++void* dlcalloc(size_t, size_t); ++ ++/* ++ realloc(void* p, size_t n) ++ Returns a pointer to a chunk of size n that contains the same data ++ as does chunk p up to the minimum of (n, p's size) bytes, or null ++ if no space is available. ++ ++ The returned pointer may or may not be the same as p. The algorithm ++ prefers extending p in most cases when possible, otherwise it ++ employs the equivalent of a malloc-copy-free sequence. ++ ++ If p is null, realloc is equivalent to malloc. ++ ++ If space is not available, realloc returns null, errno is set (if on ++ ANSI) and p is NOT freed. ++ ++ if n is for fewer bytes than already held by p, the newly unused ++ space is lopped off and freed if possible. realloc with a size ++ argument of zero (re)allocates a minimum-sized chunk. ++ ++ The old unix realloc convention of allowing the last-free'd chunk ++ to be used as an argument to realloc is not supported. ++*/ ++ ++void* dlrealloc(void*, size_t); ++ ++/* ++ memalign(size_t alignment, size_t n); ++ Returns a pointer to a newly allocated chunk of n bytes, aligned ++ in accord with the alignment argument. ++ ++ The alignment argument should be a power of two. If the argument is ++ not a power of two, the nearest greater power is used. ++ 8-byte alignment is guaranteed by normal malloc calls, so don't ++ bother calling memalign with an argument of 8 or less. ++ ++ Overreliance on memalign is a sure way to fragment space. ++*/ ++void* dlmemalign(size_t, size_t); ++ ++/* ++ valloc(size_t n); ++ Equivalent to memalign(pagesize, n), where pagesize is the page ++ size of the system. If the pagesize is unknown, 4096 is used. ++*/ ++void* dlvalloc(size_t); ++ ++/* ++ mallopt(int parameter_number, int parameter_value) ++ Sets tunable parameters The format is to provide a ++ (parameter-number, parameter-value) pair. mallopt then sets the ++ corresponding parameter to the argument value if it can (i.e., so ++ long as the value is meaningful), and returns 1 if successful else ++ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, ++ normally defined in malloc.h. None of these are use in this malloc, ++ so setting them has no effect. But this malloc also supports other ++ options in mallopt. See below for details. Briefly, supported ++ parameters are as follows (listed defaults are for "typical" ++ configurations). ++ ++ Symbol param # default allowed param values ++ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) ++ M_GRANULARITY -2 page size any power of 2 >= page size ++ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) ++*/ ++int dlmallopt(int, int); ++ ++/* ++ malloc_footprint(); ++ Returns the number of bytes obtained from the system. The total ++ number of bytes allocated by malloc, realloc etc., is less than this ++ value. Unlike mallinfo, this function returns only a precomputed ++ result, so can be called frequently to monitor memory consumption. ++ Even if locks are otherwise defined, this function does not use them, ++ so results might not be up to date. ++*/ ++size_t dlmalloc_footprint(void); ++ ++/* ++ malloc_max_footprint(); ++ Returns the maximum number of bytes obtained from the system. This ++ value will be greater than current footprint if deallocated space ++ has been reclaimed by the system. The peak number of bytes allocated ++ by malloc, realloc etc., is less than this value. Unlike mallinfo, ++ this function returns only a precomputed result, so can be called ++ frequently to monitor memory consumption. Even if locks are ++ otherwise defined, this function does not use them, so results might ++ not be up to date. ++*/ ++size_t dlmalloc_max_footprint(void); ++ ++#if !NO_MALLINFO ++/* ++ mallinfo() ++ Returns (by copy) a struct containing various summary statistics: ++ ++ arena: current total non-mmapped bytes allocated from system ++ ordblks: the number of free chunks ++ smblks: always zero. ++ hblks: current number of mmapped regions ++ hblkhd: total bytes held in mmapped regions ++ usmblks: the maximum total allocated space. This will be greater ++ than current total if trimming has occurred. ++ fsmblks: always zero ++ uordblks: current total allocated space (normal or mmapped) ++ fordblks: total free space ++ keepcost: the maximum number of bytes that could ideally be released ++ back to system via malloc_trim. ("ideally" means that ++ it ignores page restrictions etc.) ++ ++ Because these fields are ints, but internal bookkeeping may ++ be kept as longs, the reported values may wrap around zero and ++ thus be inaccurate. ++*/ ++struct mallinfo dlmallinfo(void); ++#endif /* NO_MALLINFO */ ++ ++/* ++ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); ++ ++ independent_calloc is similar to calloc, but instead of returning a ++ single cleared space, it returns an array of pointers to n_elements ++ independent elements that can hold contents of size elem_size, each ++ of which starts out cleared, and can be independently freed, ++ realloc'ed etc. The elements are guaranteed to be adjacently ++ allocated (this is not guaranteed to occur with multiple callocs or ++ mallocs), which may also improve cache locality in some ++ applications. ++ ++ The "chunks" argument is optional (i.e., may be null, which is ++ probably the most typical usage). If it is null, the returned array ++ is itself dynamically allocated and should also be freed when it is ++ no longer needed. Otherwise, the chunks array must be of at least ++ n_elements in length. It is filled in with the pointers to the ++ chunks. ++ ++ In either case, independent_calloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and "chunks" ++ is null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). ++ ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use regular calloc and assign pointers into this ++ space to represent elements. (In this case though, you cannot ++ independently free elements.) ++ ++ independent_calloc simplifies and speeds up implementations of many ++ kinds of pools. It may also be useful when constructing large data ++ structures that initially have a fixed number of fixed-sized nodes, ++ but the number is not known at compile time, and some of the nodes ++ may later need to be freed. For example: ++ ++ struct Node { int item; struct Node* next; }; ++ ++ struct Node* build_list() { ++ struct Node** pool; ++ int n = read_number_of_nodes_needed(); ++ if (n <= 0) return 0; ++ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); ++ if (pool == 0) die(); ++ // organize into a linked list... ++ struct Node* first = pool[0]; ++ for (i = 0; i < n-1; ++i) ++ pool[i]->next = pool[i+1]; ++ free(pool); // Can now free the array (or not, if it is needed later) ++ return first; ++ } ++*/ ++void** dlindependent_calloc(size_t, size_t, void**); ++ ++/* ++ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); ++ ++ independent_comalloc allocates, all at once, a set of n_elements ++ chunks with sizes indicated in the "sizes" array. It returns ++ an array of pointers to these elements, each of which can be ++ independently freed, realloc'ed etc. The elements are guaranteed to ++ be adjacently allocated (this is not guaranteed to occur with ++ multiple callocs or mallocs), which may also improve cache locality ++ in some applications. ++ ++ The "chunks" argument is optional (i.e., may be null). If it is null ++ the returned array is itself dynamically allocated and should also ++ be freed when it is no longer needed. Otherwise, the chunks array ++ must be of at least n_elements in length. It is filled in with the ++ pointers to the chunks. ++ ++ In either case, independent_comalloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and chunks is ++ null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). ++ ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use a single regular malloc, and assign pointers at ++ particular offsets in the aggregate space. (In this case though, you ++ cannot independently free elements.) ++ ++ independent_comallac differs from independent_calloc in that each ++ element may have a different size, and also that it does not ++ automatically clear elements. ++ ++ independent_comalloc can be used to speed up allocation in cases ++ where several structs or objects must always be allocated at the ++ same time. For example: ++ ++ struct Head { ... } ++ struct Foot { ... } ++ ++ void send_message(char* msg) { ++ int msglen = strlen(msg); ++ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; ++ void* chunks[3]; ++ if (independent_comalloc(3, sizes, chunks) == 0) ++ die(); ++ struct Head* head = (struct Head*)(chunks[0]); ++ char* body = (char*)(chunks[1]); ++ struct Foot* foot = (struct Foot*)(chunks[2]); ++ // ... ++ } ++ ++ In general though, independent_comalloc is worth using only for ++ larger values of n_elements. For small values, you probably won't ++ detect enough difference from series of malloc calls to bother. ++ ++ Overuse of independent_comalloc can increase overall memory usage, ++ since it cannot reuse existing noncontiguous small chunks that ++ might be available for some of the elements. ++*/ ++void** dlindependent_comalloc(size_t, size_t*, void**); ++ ++ ++/* ++ pvalloc(size_t n); ++ Equivalent to valloc(minimum-page-that-holds(n)), that is, ++ round up n to nearest pagesize. ++ */ ++void* dlpvalloc(size_t); ++ ++/* ++ malloc_trim(size_t pad); ++ ++ If possible, gives memory back to the system (via negative arguments ++ to sbrk) if there is unused memory at the `high' end of the malloc ++ pool or in unused MMAP segments. You can call this after freeing ++ large blocks of memory to potentially reduce the system-level memory ++ requirements of a program. However, it cannot guarantee to reduce ++ memory. Under some allocation patterns, some large free blocks of ++ memory will be locked between two used chunks, so they cannot be ++ given back to the system. ++ ++ The `pad' argument to malloc_trim represents the amount of free ++ trailing space to leave untrimmed. If this argument is zero, only ++ the minimum amount of memory to maintain internal data structures ++ will be left. Non-zero arguments can be supplied to maintain enough ++ trailing space to service future expected allocations without having ++ to re-obtain memory from the system. ++ ++ Malloc_trim returns 1 if it actually released any memory, else 0. ++*/ ++int dlmalloc_trim(size_t); ++ ++/* ++ malloc_usable_size(void* p); ++ ++ Returns the number of bytes you can actually use in ++ an allocated chunk, which may be more than you requested (although ++ often not) due to alignment and minimum size constraints. ++ You can use this many bytes without worrying about ++ overwriting other allocated objects. This is not a particularly great ++ programming practice. malloc_usable_size can be more useful in ++ debugging and assertions, for example: ++ ++ p = malloc(n); ++ assert(malloc_usable_size(p) >= 256); ++*/ ++size_t dlmalloc_usable_size(void*); ++ ++/* ++ malloc_stats(); ++ Prints on stderr the amount of space obtained from the system (both ++ via sbrk and mmap), the maximum amount (which may be more than ++ current if malloc_trim and/or munmap got called), and the current ++ number of bytes allocated via malloc (or realloc, etc) but not yet ++ freed. Note that this is the number of bytes allocated, not the ++ number requested. It will be larger than the number requested ++ because of alignment and bookkeeping overhead. Because it includes ++ alignment wastage as being in use, this figure may be greater than ++ zero even when no user-level chunks are allocated. ++ ++ The reported current and maximum system memory can be inaccurate if ++ a program makes other calls to system memory allocation functions ++ (normally sbrk) outside of malloc. ++ ++ malloc_stats prints only the most commonly interesting statistics. ++ More information can be obtained by calling mallinfo. ++*/ ++void dlmalloc_stats(void); ++ ++#endif /* ONLY_MSPACES */ ++ ++#if MSPACES ++ ++/* ++ mspace is an opaque type representing an independent ++ region of space that supports mspace_malloc, etc. ++*/ ++typedef void* mspace; ++ ++/* ++ create_mspace creates and returns a new independent space with the ++ given initial capacity, or, if 0, the default granularity size. It ++ returns null if there is no system memory available to create the ++ space. If argument locked is non-zero, the space uses a separate ++ lock to control access. The capacity of the space will grow ++ dynamically as needed to service mspace_malloc requests. You can ++ control the sizes of incremental increases of this space by ++ compiling with a different DEFAULT_GRANULARITY or dynamically ++ setting with mallopt(M_GRANULARITY, value). ++*/ ++mspace create_mspace(size_t capacity, int locked); ++ ++/* ++ destroy_mspace destroys the given space, and attempts to return all ++ of its memory back to the system, returning the total number of ++ bytes freed. After destruction, the results of access to all memory ++ used by the space become undefined. ++*/ ++size_t destroy_mspace(mspace msp); ++ ++/* ++ create_mspace_with_base uses the memory supplied as the initial base ++ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this ++ space is used for bookkeeping, so the capacity must be at least this ++ large. (Otherwise 0 is returned.) When this initial space is ++ exhausted, additional memory will be obtained from the system. ++ Destroying this space will deallocate all additionally allocated ++ space (if possible) but not the initial base. ++*/ ++mspace create_mspace_with_base(void* base, size_t capacity, int locked); ++ ++/* ++ mspace_malloc behaves as malloc, but operates within ++ the given space. ++*/ ++void* mspace_malloc(mspace msp, size_t bytes); ++ ++/* ++ mspace_free behaves as free, but operates within ++ the given space. ++ ++ If compiled with FOOTERS==1, mspace_free is not actually needed. ++ free may be called instead of mspace_free because freed chunks from ++ any space are handled by their originating spaces. ++*/ ++void mspace_free(mspace msp, void* mem); ++ ++/* ++ mspace_realloc behaves as realloc, but operates within ++ the given space. ++ ++ If compiled with FOOTERS==1, mspace_realloc is not actually ++ needed. realloc may be called instead of mspace_realloc because ++ realloced chunks from any space are handled by their originating ++ spaces. ++*/ ++void* mspace_realloc(mspace msp, void* mem, size_t newsize); ++ ++/* ++ mspace_calloc behaves as calloc, but operates within ++ the given space. ++*/ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); ++ ++/* ++ mspace_memalign behaves as memalign, but operates within ++ the given space. ++*/ ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); ++ ++/* ++ mspace_independent_calloc behaves as independent_calloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]); ++ ++/* ++ mspace_independent_comalloc behaves as independent_comalloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]); ++ ++/* ++ mspace_footprint() returns the number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_footprint(mspace msp); ++ ++/* ++ mspace_max_footprint() returns the peak number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_max_footprint(mspace msp); ++ ++ ++#if !NO_MALLINFO ++/* ++ mspace_mallinfo behaves as mallinfo, but reports properties of ++ the given space. ++*/ ++struct mallinfo mspace_mallinfo(mspace msp); ++#endif /* NO_MALLINFO */ ++ ++/* ++ mspace_malloc_stats behaves as malloc_stats, but reports ++ properties of the given space. ++*/ ++void mspace_malloc_stats(mspace msp); ++ ++/* ++ mspace_trim behaves as malloc_trim, but ++ operates within the given space. ++*/ ++int mspace_trim(mspace msp, size_t pad); ++ ++/* ++ An alias for mallopt. ++*/ ++int mspace_mallopt(int, int); ++ ++#endif /* MSPACES */ ++ ++#ifdef __cplusplus ++}; /* end of extern "C" */ ++#endif /* __cplusplus */ ++ ++/* ++ ======================================================================== ++ To make a fully customizable malloc.h header file, cut everything ++ above this line, put into file malloc.h, edit to suit, and #include it ++ on the next line, as well as in programs that use this malloc. ++ ======================================================================== ++*/ ++ ++/* #include "malloc.h" */ ++ ++/*------------------------------ internal #includes ---------------------- */ ++ ++#ifdef _MSC_VER ++#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ ++#endif /* _MSC_VER */ ++ ++#include /* for printing in malloc_stats */ ++ ++#ifndef LACKS_ERRNO_H ++#include /* for MALLOC_FAILURE_ACTION */ ++#endif /* LACKS_ERRNO_H */ ++#if FOOTERS ++#include /* for magic initialization */ ++#endif /* FOOTERS */ ++#ifndef LACKS_STDLIB_H ++#include /* for abort() */ ++#endif /* LACKS_STDLIB_H */ ++#ifdef DEBUG ++#if ABORT_ON_ASSERT_FAILURE ++#define assert(x) if(!(x)) ABORT ++#else /* ABORT_ON_ASSERT_FAILURE */ ++#include ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#else /* DEBUG */ ++#define assert(x) ++#endif /* DEBUG */ ++#ifndef LACKS_STRING_H ++#include /* for memset etc */ ++#endif /* LACKS_STRING_H */ ++#if USE_BUILTIN_FFS ++#ifndef LACKS_STRINGS_H ++#include /* for ffs */ ++#endif /* LACKS_STRINGS_H */ ++#endif /* USE_BUILTIN_FFS */ ++#if HAVE_MMAP ++#ifndef LACKS_SYS_MMAN_H ++#include /* for mmap */ ++#endif /* LACKS_SYS_MMAN_H */ ++#ifndef LACKS_FCNTL_H ++#include ++#endif /* LACKS_FCNTL_H */ ++#endif /* HAVE_MMAP */ ++#if HAVE_MORECORE ++#ifndef LACKS_UNISTD_H ++#include /* for sbrk */ ++#else /* LACKS_UNISTD_H */ ++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) ++extern void* sbrk(ptrdiff_t); ++#endif /* FreeBSD etc */ ++#endif /* LACKS_UNISTD_H */ ++#endif /* HAVE_MMAP */ ++ ++#ifndef WIN32 ++#ifndef malloc_getpagesize ++# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ ++# ifndef _SC_PAGE_SIZE ++# define _SC_PAGE_SIZE _SC_PAGESIZE ++# endif ++# endif ++# ifdef _SC_PAGE_SIZE ++# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) ++# else ++# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) ++ extern size_t getpagesize(); ++# define malloc_getpagesize getpagesize() ++# else ++# ifdef WIN32 /* use supplied emulation of getpagesize */ ++# define malloc_getpagesize getpagesize() ++# else ++# ifndef LACKS_SYS_PARAM_H ++# include ++# endif ++# ifdef EXEC_PAGESIZE ++# define malloc_getpagesize EXEC_PAGESIZE ++# else ++# ifdef NBPG ++# ifndef CLSIZE ++# define malloc_getpagesize NBPG ++# else ++# define malloc_getpagesize (NBPG * CLSIZE) ++# endif ++# else ++# ifdef NBPC ++# define malloc_getpagesize NBPC ++# else ++# ifdef PAGESIZE ++# define malloc_getpagesize PAGESIZE ++# else /* just guess */ ++# define malloc_getpagesize ((size_t)4096U) ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++#endif ++#endif ++ ++/* ------------------- size_t and alignment properties -------------------- */ ++ ++/* The byte and bit size of a size_t */ ++#define SIZE_T_SIZE (sizeof(size_t)) ++#define SIZE_T_BITSIZE (sizeof(size_t) << 3) ++ ++/* Some constants coerced to size_t */ ++/* Annoying but necessary to avoid errors on some platforms */ ++#define SIZE_T_ZERO ((size_t)0) ++#define SIZE_T_ONE ((size_t)1) ++#define SIZE_T_TWO ((size_t)2) ++#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) ++#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) ++#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) ++#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) ++ ++/* The bit mask value corresponding to MALLOC_ALIGNMENT */ ++#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) ++ ++/* True if address a has acceptable alignment */ ++#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) ++ ++/* the number of bytes to offset an address to align it */ ++#define align_offset(A)\ ++ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ ++ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) ++ ++/* -------------------------- MMAP preliminaries ------------------------- */ ++ ++/* ++ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and ++ checks to fail so compiler optimizer can delete code rather than ++ using so many "#if"s. ++*/ ++ ++ ++/* MORECORE and MMAP must return MFAIL on failure */ ++#define MFAIL ((void*)(MAX_SIZE_T)) ++#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ ++ ++#if !HAVE_MMAP ++#define IS_MMAPPED_BIT (SIZE_T_ZERO) ++#define USE_MMAP_BIT (SIZE_T_ZERO) ++#define CALL_MMAP(s) MFAIL ++#define CALL_MUNMAP(a, s) (-1) ++#define DIRECT_MMAP(s) MFAIL ++ ++#else /* HAVE_MMAP */ ++#define IS_MMAPPED_BIT (SIZE_T_ONE) ++#define USE_MMAP_BIT (SIZE_T_ONE) ++ ++#if !defined(WIN32) && !defined (__OS2__) ++#define CALL_MUNMAP(a, s) munmap((a), (s)) ++#define MMAP_PROT (PROT_READ|PROT_WRITE) ++#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) ++#define MAP_ANONYMOUS MAP_ANON ++#endif /* MAP_ANON */ ++#ifdef MAP_ANONYMOUS ++#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) ++#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) ++#else /* MAP_ANONYMOUS */ ++/* ++ Nearly all versions of mmap support MAP_ANONYMOUS, so the following ++ is unlikely to be needed, but is supplied just in case. ++*/ ++#define MMAP_FLAGS (MAP_PRIVATE) ++static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ ++#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ ++ (dev_zero_fd = open("/dev/zero", O_RDWR), \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) ++#endif /* MAP_ANONYMOUS */ ++ ++#define DIRECT_MMAP(s) CALL_MMAP(s) ++ ++#elif defined(__OS2__) ++ ++/* OS/2 MMAP via DosAllocMem */ ++static void* os2mmap(size_t size) { ++ void* ptr; ++ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && ++ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) ++ return MFAIL; ++ return ptr; ++} ++ ++#define os2direct_mmap(n) os2mmap(n) ++ ++/* This function supports releasing coalesed segments */ ++static int os2munmap(void* ptr, size_t size) { ++ while (size) { ++ ULONG ulSize = size; ++ ULONG ulFlags = 0; ++ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) ++ return -1; ++ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || ++ ulSize > size) ++ return -1; ++ if (DosFreeMem(ptr) != 0) ++ return -1; ++ ptr = ( void * ) ( ( char * ) ptr + ulSize ); ++ size -= ulSize; ++ } ++ return 0; ++} ++ ++#define CALL_MMAP(s) os2mmap(s) ++#define CALL_MUNMAP(a, s) os2munmap((a), (s)) ++#define DIRECT_MMAP(s) os2direct_mmap(s) ++ ++#else /* WIN32 */ ++ ++/* Win32 MMAP via VirtualAlloc */ ++static void* win32mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} ++ ++/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ ++static void* win32direct_mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, ++ PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} ++ ++/* This function supports releasing coalesed segments */ ++static int win32munmap(void* ptr, size_t size) { ++ MEMORY_BASIC_INFORMATION minfo; ++ char* cptr = ptr; ++ while (size) { ++ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) ++ return -1; ++ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || ++ minfo.State != MEM_COMMIT || minfo.RegionSize > size) ++ return -1; ++ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) ++ return -1; ++ cptr += minfo.RegionSize; ++ size -= minfo.RegionSize; ++ } ++ return 0; ++} ++ ++#define CALL_MMAP(s) win32mmap(s) ++#define CALL_MUNMAP(a, s) win32munmap((a), (s)) ++#define DIRECT_MMAP(s) win32direct_mmap(s) ++#endif /* WIN32 */ ++#endif /* HAVE_MMAP */ ++ ++#if HAVE_MMAP && HAVE_MREMAP ++#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) ++#else /* HAVE_MMAP && HAVE_MREMAP */ ++#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL ++#endif /* HAVE_MMAP && HAVE_MREMAP */ ++ ++#if HAVE_MORECORE ++#define CALL_MORECORE(S) MORECORE(S) ++#else /* HAVE_MORECORE */ ++#define CALL_MORECORE(S) MFAIL ++#endif /* HAVE_MORECORE */ ++ ++/* mstate bit set if contiguous morecore disabled or failed */ ++#define USE_NONCONTIGUOUS_BIT (4U) ++ ++/* segment bit set in create_mspace_with_base */ ++#define EXTERN_BIT (8U) ++ ++ ++/* --------------------------- Lock preliminaries ------------------------ */ ++ ++#if USE_LOCKS ++ ++/* ++ When locks are defined, there are up to two global locks: ++ ++ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to ++ MORECORE. In many cases sys_alloc requires two calls, that should ++ not be interleaved with calls by other threads. This does not ++ protect against direct calls to MORECORE by other threads not ++ using this lock, so there is still code to cope the best we can on ++ interference. ++ ++ * magic_init_mutex ensures that mparams.magic and other ++ unique mparams values are initialized only once. ++*/ ++ ++#if !defined(WIN32) && !defined(__OS2__) ++/* By default use posix locks */ ++#include ++#define MLOCK_T pthread_mutex_t ++#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) ++#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) ++#define RELEASE_LOCK(l) pthread_mutex_unlock(l) ++ ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; ++#endif /* HAVE_MORECORE */ ++ ++static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++#elif defined(__OS2__) ++#define MLOCK_T HMTX ++#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) ++#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) ++#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; ++ ++#else /* WIN32 */ ++/* ++ Because lock-protected regions have bounded times, and there ++ are no recursive lock calls, we can use simple spinlocks. ++*/ ++ ++#define MLOCK_T long ++static int win32_acquire_lock (MLOCK_T *sl) { ++ for (;;) { ++#ifdef InterlockedCompareExchangePointer ++ if (!InterlockedCompareExchange(sl, 1, 0)) ++ return 0; ++#else /* Use older void* version */ ++ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) ++ return 0; ++#endif /* InterlockedCompareExchangePointer */ ++ Sleep (0); ++ } ++} ++ ++static void win32_release_lock (MLOCK_T *sl) { ++ InterlockedExchange (sl, 0); ++} ++ ++#define INITIAL_LOCK(l) *(l)=0 ++#define ACQUIRE_LOCK(l) win32_acquire_lock(l) ++#define RELEASE_LOCK(l) win32_release_lock(l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; ++#endif /* WIN32 */ ++ ++#define USE_LOCK_BIT (2U) ++#else /* USE_LOCKS */ ++#define USE_LOCK_BIT (0U) ++#define INITIAL_LOCK(l) ++#endif /* USE_LOCKS */ ++ ++#if USE_LOCKS && HAVE_MORECORE ++#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); ++#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); ++#else /* USE_LOCKS && HAVE_MORECORE */ ++#define ACQUIRE_MORECORE_LOCK() ++#define RELEASE_MORECORE_LOCK() ++#endif /* USE_LOCKS && HAVE_MORECORE */ ++ ++#if USE_LOCKS ++#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); ++#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); ++#else /* USE_LOCKS */ ++#define ACQUIRE_MAGIC_INIT_LOCK() ++#define RELEASE_MAGIC_INIT_LOCK() ++#endif /* USE_LOCKS */ ++ ++ ++/* ----------------------- Chunk representations ------------------------ */ ++ ++/* ++ (The following includes lightly edited explanations by Colin Plumb.) ++ ++ The malloc_chunk declaration below is misleading (but accurate and ++ necessary). It declares a "view" into memory allowing access to ++ necessary fields at known offsets from a given base. ++ ++ Chunks of memory are maintained using a `boundary tag' method as ++ originally described by Knuth. (See the paper by Paul Wilson ++ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such ++ techniques.) Sizes of free chunks are stored both in the front of ++ each chunk and at the end. This makes consolidating fragmented ++ chunks into bigger chunks fast. The head fields also hold bits ++ representing whether chunks are free or in use. ++ ++ Here are some pictures to make it clearer. They are "exploded" to ++ show that the state of a chunk can be thought of as extending from ++ the high 31 bits of the head field of its header through the ++ prev_foot and PINUSE_BIT bit of the following chunk header. ++ ++ A chunk that's in use looks like: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk (if P = 1) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 1| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | | ++ +- -+ ++ | | ++ +- -+ ++ | : ++ +- size - sizeof(size_t) available payload bytes -+ ++ : | ++ chunk-> +- -+ ++ | | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| ++ | Size of next chunk (may or may not be in use) | +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ And if it's free, it looks like this: ++ ++ chunk-> +- -+ ++ | User payload (must be in use, or we would have merged!) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 0| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Next pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Prev pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- size - sizeof(struct chunk) unused bytes -+ ++ : | ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| ++ | Size of next chunk (must be in use, or we would have merged)| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- User payload -+ ++ : | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ |0| ++ +-+ ++ Note that since we always merge adjacent free chunks, the chunks ++ adjacent to a free chunk must be in use. ++ ++ Given a pointer to a chunk (which can be derived trivially from the ++ payload pointer) we can, in O(1) time, find out whether the adjacent ++ chunks are free, and if so, unlink them from the lists that they ++ are on and merge them with the current chunk. ++ ++ Chunks always begin on even word boundaries, so the mem portion ++ (which is returned to the user) is also on an even word boundary, and ++ thus at least double-word aligned. ++ ++ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the ++ chunk size (which is always a multiple of two words), is an in-use ++ bit for the *previous* chunk. If that bit is *clear*, then the ++ word before the current chunk size contains the previous chunk ++ size, and can be used to find the front of the previous chunk. ++ The very first chunk allocated always has this bit set, preventing ++ access to non-existent (or non-owned) memory. If pinuse is set for ++ any given chunk, then you CANNOT determine the size of the ++ previous chunk, and might even get a memory addressing fault when ++ trying to do so. ++ ++ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of ++ the chunk size redundantly records whether the current chunk is ++ inuse. This redundancy enables usage checks within free and realloc, ++ and reduces indirection when freeing and consolidating chunks. ++ ++ Each freshly allocated chunk must have both cinuse and pinuse set. ++ That is, each allocated chunk borders either a previously allocated ++ and still in-use chunk, or the base of its memory arena. This is ++ ensured by making all allocations from the the `lowest' part of any ++ found chunk. Further, no free chunk physically borders another one, ++ so each free chunk is known to be preceded and followed by either ++ inuse chunks or the ends of memory. ++ ++ Note that the `foot' of the current chunk is actually represented ++ as the prev_foot of the NEXT chunk. This makes it easier to ++ deal with alignments etc but can be very confusing when trying ++ to extend or adapt this code. ++ ++ The exceptions to all this are ++ ++ 1. The special chunk `top' is the top-most available chunk (i.e., ++ the one bordering the end of available memory). It is treated ++ specially. Top is never included in any bin, is used only if ++ no other chunk is available, and is released back to the ++ system if it is very large (see M_TRIM_THRESHOLD). In effect, ++ the top chunk is treated as larger (and thus less well ++ fitting) than any other available chunk. The top chunk ++ doesn't update its trailing size field since there is no next ++ contiguous chunk that would have to index off it. However, ++ space is still allocated for it (TOP_FOOT_SIZE) to enable ++ separation or merging when space is extended. ++ ++ 3. Chunks allocated via mmap, which have the lowest-order bit ++ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set ++ PINUSE_BIT in their head fields. Because they are allocated ++ one-by-one, each must carry its own prev_foot field, which is ++ also used to hold the offset this chunk has within its mmapped ++ region, which is needed to preserve alignment. Each mmapped ++ chunk is trailed by the first two fields of a fake next-chunk ++ for sake of usage checks. ++ ++*/ ++ ++struct malloc_chunk { ++ size_t prev_foot; /* Size of previous chunk (if free). */ ++ size_t head; /* Size and inuse bits. */ ++ struct malloc_chunk* fd; /* double links -- used only if free. */ ++ struct malloc_chunk* bk; ++}; ++ ++typedef struct malloc_chunk mchunk; ++typedef struct malloc_chunk* mchunkptr; ++typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ ++typedef size_t bindex_t; /* Described below */ ++typedef unsigned int binmap_t; /* Described below */ ++typedef unsigned int flag_t; /* The type of various bit flag sets */ ++ ++/* ------------------- Chunks sizes and alignments ----------------------- */ ++ ++#define MCHUNK_SIZE (sizeof(mchunk)) ++ ++#if FOOTERS ++#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++#else /* FOOTERS */ ++#define CHUNK_OVERHEAD (SIZE_T_SIZE) ++#endif /* FOOTERS */ ++ ++/* MMapped chunks need a second word of overhead ... */ ++#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++/* ... and additional padding for fake next-chunk at foot */ ++#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) ++ ++/* The smallest size we can malloc is an aligned minimal chunk */ ++#define MIN_CHUNK_SIZE\ ++ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++ ++/* conversion from malloc headers to user pointers, and back */ ++#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) ++#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) ++/* chunk associated with aligned address A */ ++#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) ++ ++/* Bounds on request (not chunk) sizes. */ ++#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) ++#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) ++ ++/* pad request bytes into a usable size */ ++#define pad_request(req) \ ++ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++ ++/* pad request, checking for minimum (but not maximum) */ ++#define request2size(req) \ ++ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) ++ ++ ++/* ------------------ Operations on head and foot fields ----------------- */ ++ ++/* ++ The head field of a chunk is or'ed with PINUSE_BIT when previous ++ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in ++ use. If the chunk was obtained with mmap, the prev_foot field has ++ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the ++ mmapped region to the base of the chunk. ++*/ ++ ++#define PINUSE_BIT (SIZE_T_ONE) ++#define CINUSE_BIT (SIZE_T_TWO) ++#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) ++ ++/* Head value for fenceposts */ ++#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) ++ ++/* extraction of fields from head words */ ++#define cinuse(p) ((p)->head & CINUSE_BIT) ++#define pinuse(p) ((p)->head & PINUSE_BIT) ++#define chunksize(p) ((p)->head & ~(INUSE_BITS)) ++ ++#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) ++#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) ++ ++/* Treat space at ptr +/- offset as a chunk */ ++#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) ++#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) ++ ++/* Ptr to next or previous physical malloc_chunk. */ ++#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) ++#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) ++ ++/* extract next chunk's pinuse bit */ ++#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) ++ ++/* Get/set size at footer */ ++#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) ++#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) ++ ++/* Set size, pinuse bit, and foot */ ++#define set_size_and_pinuse_of_free_chunk(p, s)\ ++ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) ++ ++/* Set size, pinuse bit, foot, and clear next pinuse */ ++#define set_free_with_pinuse(p, s, n)\ ++ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) ++ ++#define is_mmapped(p)\ ++ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) ++ ++/* Get the internal overhead associated with chunk p */ ++#define overhead_for(p)\ ++ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) ++ ++/* Return true if malloced space is not necessarily cleared */ ++#if MMAP_CLEARS ++#define calloc_must_clear(p) (!is_mmapped(p)) ++#else /* MMAP_CLEARS */ ++#define calloc_must_clear(p) (1) ++#endif /* MMAP_CLEARS */ ++ ++/* ---------------------- Overlaid data structures ----------------------- */ ++ ++/* ++ When chunks are not in use, they are treated as nodes of either ++ lists or trees. ++ ++ "Small" chunks are stored in circular doubly-linked lists, and look ++ like this: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space (may be 0 bytes long) . ++ . . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ Larger chunks are kept in a form of bitwise digital trees (aka ++ tries) keyed on chunksizes. Because malloc_tree_chunks are only for ++ free chunks greater than 256 bytes, their size doesn't impose any ++ constraints on user chunk sizes. Each node looks like: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to left child (child[0]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to right child (child[1]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to parent | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | bin index of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ Each tree holding treenodes is a tree of unique chunk sizes. Chunks ++ of the same size are arranged in a circularly-linked list, with only ++ the oldest chunk (the next to be used, in our FIFO ordering) ++ actually in the tree. (Tree members are distinguished by a non-null ++ parent pointer.) If a chunk with the same size an an existing node ++ is inserted, it is linked off the existing node using pointers that ++ work in the same way as fd/bk pointers of small chunks. ++ ++ Each tree contains a power of 2 sized range of chunk sizes (the ++ smallest is 0x100 <= x < 0x180), which is is divided in half at each ++ tree level, with the chunks in the smaller half of the range (0x100 ++ <= x < 0x140 for the top nose) in the left subtree and the larger ++ half (0x140 <= x < 0x180) in the right subtree. This is, of course, ++ done by inspecting individual bits. ++ ++ Using these rules, each node's left subtree contains all smaller ++ sizes than its right subtree. However, the node at the root of each ++ subtree has no particular ordering relationship to either. (The ++ dividing line between the subtree sizes is based on trie relation.) ++ If we remove the last chunk of a given size from the interior of the ++ tree, we need to replace it with a leaf node. The tree ordering ++ rules permit a node to be replaced by any leaf below it. ++ ++ The smallest chunk in a tree (a common operation in a best-fit ++ allocator) can be found by walking a path to the leftmost leaf in ++ the tree. Unlike a usual binary tree, where we follow left child ++ pointers until we reach a null, here we follow the right child ++ pointer any time the left one is null, until we reach a leaf with ++ both child pointers null. The smallest chunk in the tree will be ++ somewhere along that path. ++ ++ The worst case number of steps to add, find, or remove a node is ++ bounded by the number of bits differentiating chunks within ++ bins. Under current bin calculations, this ranges from 6 up to 21 ++ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case ++ is of course much better. ++*/ ++ ++struct malloc_tree_chunk { ++ /* The first four fields must be compatible with malloc_chunk */ ++ size_t prev_foot; ++ size_t head; ++ struct malloc_tree_chunk* fd; ++ struct malloc_tree_chunk* bk; ++ ++ struct malloc_tree_chunk* child[2]; ++ struct malloc_tree_chunk* parent; ++ bindex_t index; ++}; ++ ++typedef struct malloc_tree_chunk tchunk; ++typedef struct malloc_tree_chunk* tchunkptr; ++typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ ++ ++/* A little helper macro for trees */ ++#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) ++ ++/* ----------------------------- Segments -------------------------------- */ ++ ++/* ++ Each malloc space may include non-contiguous segments, held in a ++ list headed by an embedded malloc_segment record representing the ++ top-most space. Segments also include flags holding properties of ++ the space. Large chunks that are directly allocated by mmap are not ++ included in this list. They are instead independently created and ++ destroyed without otherwise keeping track of them. ++ ++ Segment management mainly comes into play for spaces allocated by ++ MMAP. Any call to MMAP might or might not return memory that is ++ adjacent to an existing segment. MORECORE normally contiguously ++ extends the current space, so this space is almost always adjacent, ++ which is simpler and faster to deal with. (This is why MORECORE is ++ used preferentially to MMAP when both are available -- see ++ sys_alloc.) When allocating using MMAP, we don't use any of the ++ hinting mechanisms (inconsistently) supported in various ++ implementations of unix mmap, or distinguish reserving from ++ committing memory. Instead, we just ask for space, and exploit ++ contiguity when we get it. It is probably possible to do ++ better than this on some systems, but no general scheme seems ++ to be significantly better. ++ ++ Management entails a simpler variant of the consolidation scheme ++ used for chunks to reduce fragmentation -- new adjacent memory is ++ normally prepended or appended to an existing segment. However, ++ there are limitations compared to chunk consolidation that mostly ++ reflect the fact that segment processing is relatively infrequent ++ (occurring only when getting memory from system) and that we ++ don't expect to have huge numbers of segments: ++ ++ * Segments are not indexed, so traversal requires linear scans. (It ++ would be possible to index these, but is not worth the extra ++ overhead and complexity for most programs on most platforms.) ++ * New segments are only appended to old ones when holding top-most ++ memory; if they cannot be prepended to others, they are held in ++ different segments. ++ ++ Except for the top-most segment of an mstate, each segment record ++ is kept at the tail of its segment. Segments are added by pushing ++ segment records onto the list headed by &mstate.seg for the ++ containing mstate. ++ ++ Segment flags control allocation/merge/deallocation policies: ++ * If EXTERN_BIT set, then we did not allocate this segment, ++ and so should not try to deallocate or merge with others. ++ (This currently holds only for the initial segment passed ++ into create_mspace_with_base.) ++ * If IS_MMAPPED_BIT set, the segment may be merged with ++ other surrounding mmapped segments and trimmed/de-allocated ++ using munmap. ++ * If neither bit is set, then the segment was obtained using ++ MORECORE so can be merged with surrounding MORECORE'd segments ++ and deallocated/trimmed using MORECORE with negative arguments. ++*/ ++ ++struct malloc_segment { ++ char* base; /* base address */ ++ size_t size; /* allocated size */ ++ struct malloc_segment* next; /* ptr to next segment */ ++#if FFI_MMAP_EXEC_WRIT ++ /* The mmap magic is supposed to store the address of the executable ++ segment at the very end of the requested block. */ ++ ++# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) ++ ++ /* We can only merge segments if their corresponding executable ++ segments are at identical offsets. */ ++# define check_segment_merge(S,b,s) \ ++ (mmap_exec_offset((b),(s)) == (S)->exec_offset) ++ ++# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) ++# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) ++ ++ /* The removal of sflags only works with HAVE_MORECORE == 0. */ ++ ++# define get_segment_flags(S) (IS_MMAPPED_BIT) ++# define set_segment_flags(S,v) \ ++ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ ++ (((S)->exec_offset = \ ++ mmap_exec_offset((S)->base, (S)->size)), \ ++ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ ++ (S)->exec_offset) ? (ABORT, (v)) : \ ++ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) ++ ++ /* We use an offset here, instead of a pointer, because then, when ++ base changes, we don't have to modify this. On architectures ++ with segmented addresses, this might not work. */ ++ ptrdiff_t exec_offset; ++#else ++ ++# define get_segment_flags(S) ((S)->sflags) ++# define set_segment_flags(S,v) ((S)->sflags = (v)) ++# define check_segment_merge(S,b,s) (1) ++ ++ flag_t sflags; /* mmap and extern flag */ ++#endif ++}; ++ ++#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) ++#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) ++ ++typedef struct malloc_segment msegment; ++typedef struct malloc_segment* msegmentptr; ++ ++/* ---------------------------- malloc_state ----------------------------- */ ++ ++/* ++ A malloc_state holds all of the bookkeeping for a space. ++ The main fields are: ++ ++ Top ++ The topmost chunk of the currently active segment. Its size is ++ cached in topsize. The actual size of topmost space is ++ topsize+TOP_FOOT_SIZE, which includes space reserved for adding ++ fenceposts and segment records if necessary when getting more ++ space from the system. The size at which to autotrim top is ++ cached from mparams in trim_check, except that it is disabled if ++ an autotrim fails. ++ ++ Designated victim (dv) ++ This is the preferred chunk for servicing small requests that ++ don't have exact fits. It is normally the chunk split off most ++ recently to service another small request. Its size is cached in ++ dvsize. The link fields of this chunk are not maintained since it ++ is not kept in a bin. ++ ++ SmallBins ++ An array of bin headers for free chunks. These bins hold chunks ++ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains ++ chunks of all the same size, spaced 8 bytes apart. To simplify ++ use in double-linked lists, each bin header acts as a malloc_chunk ++ pointing to the real first node, if it exists (else pointing to ++ itself). This avoids special-casing for headers. But to avoid ++ waste, we allocate only the fd/bk pointers of bins, and then use ++ repositioning tricks to treat these as the fields of a chunk. ++ ++ TreeBins ++ Treebins are pointers to the roots of trees holding a range of ++ sizes. There are 2 equally spaced treebins for each power of two ++ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything ++ larger. ++ ++ Bin maps ++ There is one bit map for small bins ("smallmap") and one for ++ treebins ("treemap). Each bin sets its bit when non-empty, and ++ clears the bit when empty. Bit operations are then used to avoid ++ bin-by-bin searching -- nearly all "search" is done without ever ++ looking at bins that won't be selected. The bit maps ++ conservatively use 32 bits per map word, even if on 64bit system. ++ For a good description of some of the bit-based techniques used ++ here, see Henry S. Warren Jr's book "Hacker's Delight" (and ++ supplement at http://hackersdelight.org/). Many of these are ++ intended to reduce the branchiness of paths through malloc etc, as ++ well as to reduce the number of memory locations read or written. ++ ++ Segments ++ A list of segments headed by an embedded malloc_segment record ++ representing the initial space. ++ ++ Address check support ++ The least_addr field is the least address ever obtained from ++ MORECORE or MMAP. Attempted frees and reallocs of any address less ++ than this are trapped (unless INSECURE is defined). ++ ++ Magic tag ++ A cross-check field that should always hold same value as mparams.magic. ++ ++ Flags ++ Bits recording whether to use MMAP, locks, or contiguous MORECORE ++ ++ Statistics ++ Each space keeps track of current and maximum system memory ++ obtained via MORECORE or MMAP. ++ ++ Locking ++ If USE_LOCKS is defined, the "mutex" lock is acquired and released ++ around every public call using this mspace. ++*/ ++ ++/* Bin types, widths and sizes */ ++#define NSMALLBINS (32U) ++#define NTREEBINS (32U) ++#define SMALLBIN_SHIFT (3U) ++#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) ++#define TREEBIN_SHIFT (8U) ++#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) ++#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) ++#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) ++ ++struct malloc_state { ++ binmap_t smallmap; ++ binmap_t treemap; ++ size_t dvsize; ++ size_t topsize; ++ char* least_addr; ++ mchunkptr dv; ++ mchunkptr top; ++ size_t trim_check; ++ size_t magic; ++ mchunkptr smallbins[(NSMALLBINS+1)*2]; ++ tbinptr treebins[NTREEBINS]; ++ size_t footprint; ++ size_t max_footprint; ++ flag_t mflags; ++#if USE_LOCKS ++ MLOCK_T mutex; /* locate lock among fields that rarely change */ ++#endif /* USE_LOCKS */ ++ msegment seg; ++}; ++ ++typedef struct malloc_state* mstate; ++ ++/* ------------- Global malloc_state and malloc_params ------------------- */ ++ ++/* ++ malloc_params holds global properties, including those that can be ++ dynamically set using mallopt. There is a single instance, mparams, ++ initialized in init_mparams. ++*/ ++ ++struct malloc_params { ++ size_t magic; ++ size_t page_size; ++ size_t granularity; ++ size_t mmap_threshold; ++ size_t trim_threshold; ++ flag_t default_mflags; ++}; ++ ++static struct malloc_params mparams; ++ ++/* The global malloc_state used for all non-"mspace" calls */ ++static struct malloc_state _gm_; ++#define gm (&_gm_) ++#define is_global(M) ((M) == &_gm_) ++#define is_initialized(M) ((M)->top != 0) ++ ++/* -------------------------- system alloc setup ------------------------- */ ++ ++/* Operations on mflags */ ++ ++#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) ++#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) ++#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) ++ ++#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) ++#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) ++#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) ++ ++#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) ++#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) ++ ++#define set_lock(M,L)\ ++ ((M)->mflags = (L)?\ ++ ((M)->mflags | USE_LOCK_BIT) :\ ++ ((M)->mflags & ~USE_LOCK_BIT)) ++ ++/* page-align a size */ ++#define page_align(S)\ ++ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) ++ ++/* granularity-align a size */ ++#define granularity_align(S)\ ++ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) ++ ++#define is_page_aligned(S)\ ++ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) ++#define is_granularity_aligned(S)\ ++ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) ++ ++/* True if segment S holds address A */ ++#define segment_holds(S, A)\ ++ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) ++ ++/* Return segment holding given address */ ++static msegmentptr segment_holding(mstate m, char* addr) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= sp->base && addr < sp->base + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++ ++/* Return true if segment contains a segment link */ ++static int has_segment_link(mstate m, msegmentptr ss) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) ++ return 1; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++ ++#ifndef MORECORE_CANNOT_TRIM ++#define should_trim(M,s) ((s) > (M)->trim_check) ++#else /* MORECORE_CANNOT_TRIM */ ++#define should_trim(M,s) (0) ++#endif /* MORECORE_CANNOT_TRIM */ ++ ++/* ++ TOP_FOOT_SIZE is padding at the end of a segment, including space ++ that may be needed to place segment records and fenceposts when new ++ noncontiguous segments are added. ++*/ ++#define TOP_FOOT_SIZE\ ++ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) ++ ++ ++/* ------------------------------- Hooks -------------------------------- */ ++ ++/* ++ PREACTION should be defined to return 0 on success, and nonzero on ++ failure. If you are not using locking, you can redefine these to do ++ anything you like. ++*/ ++ ++#if USE_LOCKS ++ ++/* Ensure locks are initialized */ ++#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) ++ ++#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) ++#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } ++#else /* USE_LOCKS */ ++ ++#ifndef PREACTION ++#define PREACTION(M) (0) ++#endif /* PREACTION */ ++ ++#ifndef POSTACTION ++#define POSTACTION(M) ++#endif /* POSTACTION */ ++ ++#endif /* USE_LOCKS */ ++ ++/* ++ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. ++ USAGE_ERROR_ACTION is triggered on detected bad frees and ++ reallocs. The argument p is an address that might have triggered the ++ fault. It is ignored by the two predefined actions, but might be ++ useful in custom actions that try to help diagnose errors. ++*/ ++ ++#if PROCEED_ON_ERROR ++ ++/* A count of the number of corruption errors causing resets */ ++int malloc_corruption_error_count; ++ ++/* default corruption action */ ++static void reset_on_error(mstate m); ++ ++#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) ++#define USAGE_ERROR_ACTION(m, p) ++ ++#else /* PROCEED_ON_ERROR */ ++ ++#ifndef CORRUPTION_ERROR_ACTION ++#define CORRUPTION_ERROR_ACTION(m) ABORT ++#endif /* CORRUPTION_ERROR_ACTION */ ++ ++#ifndef USAGE_ERROR_ACTION ++#define USAGE_ERROR_ACTION(m,p) ABORT ++#endif /* USAGE_ERROR_ACTION */ ++ ++#endif /* PROCEED_ON_ERROR */ ++ ++/* -------------------------- Debugging setup ---------------------------- */ ++ ++#if ! DEBUG ++ ++#define check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) ++#define check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) ++#define check_malloc_state(M) ++#define check_top_chunk(M,P) ++ ++#else /* DEBUG */ ++#define check_free_chunk(M,P) do_check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) ++#define check_top_chunk(M,P) do_check_top_chunk(M,P) ++#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) ++#define check_malloc_state(M) do_check_malloc_state(M) ++ ++static void do_check_any_chunk(mstate m, mchunkptr p); ++static void do_check_top_chunk(mstate m, mchunkptr p); ++static void do_check_mmapped_chunk(mstate m, mchunkptr p); ++static void do_check_inuse_chunk(mstate m, mchunkptr p); ++static void do_check_free_chunk(mstate m, mchunkptr p); ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s); ++static void do_check_tree(mstate m, tchunkptr t); ++static void do_check_treebin(mstate m, bindex_t i); ++static void do_check_smallbin(mstate m, bindex_t i); ++static void do_check_malloc_state(mstate m); ++static int bin_find(mstate m, mchunkptr x); ++static size_t traverse_and_check(mstate m); ++#endif /* DEBUG */ ++ ++/* ---------------------------- Indexing Bins ---------------------------- */ ++ ++#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) ++#define small_index(s) ((s) >> SMALLBIN_SHIFT) ++#define small_index2size(i) ((i) << SMALLBIN_SHIFT) ++#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) ++ ++/* addressing by index. See above about smallbin repositioning */ ++#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) ++#define treebin_at(M,i) (&((M)->treebins[i])) ++ ++/* assign tree index for size S to variable I */ ++#if defined(__GNUC__) && defined(__i386__) ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int K;\ ++ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ ++ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ ++ }\ ++} ++#else /* GNUC */ ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int Y = (unsigned int)X;\ ++ unsigned int N = ((Y - 0x100) >> 16) & 8;\ ++ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ ++ N += K;\ ++ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ ++ K = 14 - N + ((Y <<= K) >> 15);\ ++ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ ++ }\ ++} ++#endif /* GNUC */ ++ ++/* Bit representing maximum resolved size in a treebin at i */ ++#define bit_for_tree_index(i) \ ++ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) ++ ++/* Shift placing maximum resolved bit in a treebin at i as sign bit */ ++#define leftshift_for_tree_index(i) \ ++ ((i == NTREEBINS-1)? 0 : \ ++ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) ++ ++/* The size of the smallest chunk held in bin with index i */ ++#define minsize_for_tree_index(i) \ ++ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ ++ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) ++ ++ ++/* ------------------------ Operations on bin maps ----------------------- */ ++ ++/* bit corresponding to given index */ ++#define idx2bit(i) ((binmap_t)(1) << (i)) ++ ++/* Mark/Clear bits with given index */ ++#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) ++#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) ++#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) ++ ++#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) ++#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) ++#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) ++ ++/* index corresponding to given bit */ ++ ++#if defined(__GNUC__) && defined(__i386__) ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int J;\ ++ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ ++ I = (bindex_t)J;\ ++} ++ ++#else /* GNUC */ ++#if USE_BUILTIN_FFS ++#define compute_bit2idx(X, I) I = ffs(X)-1 ++ ++#else /* USE_BUILTIN_FFS */ ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int Y = X - 1;\ ++ unsigned int K = Y >> (16-4) & 16;\ ++ unsigned int N = K; Y >>= K;\ ++ N += K = Y >> (8-3) & 8; Y >>= K;\ ++ N += K = Y >> (4-2) & 4; Y >>= K;\ ++ N += K = Y >> (2-1) & 2; Y >>= K;\ ++ N += K = Y >> (1-0) & 1; Y >>= K;\ ++ I = (bindex_t)(N + Y);\ ++} ++#endif /* USE_BUILTIN_FFS */ ++#endif /* GNUC */ ++ ++/* isolate the least set bit of a bitmap */ ++#define least_bit(x) ((x) & -(x)) ++ ++/* mask with all bits to left of least bit of x on */ ++#define left_bits(x) ((x<<1) | -(x<<1)) ++ ++/* mask with all bits to left of or equal to least bit of x on */ ++#define same_or_left_bits(x) ((x) | -(x)) ++ ++ ++/* ----------------------- Runtime Check Support ------------------------- */ ++ ++/* ++ For security, the main invariant is that malloc/free/etc never ++ writes to a static address other than malloc_state, unless static ++ malloc_state itself has been corrupted, which cannot occur via ++ malloc (because of these checks). In essence this means that we ++ believe all pointers, sizes, maps etc held in malloc_state, but ++ check all of those linked or offsetted from other embedded data ++ structures. These checks are interspersed with main code in a way ++ that tends to minimize their run-time cost. ++ ++ When FOOTERS is defined, in addition to range checking, we also ++ verify footer fields of inuse chunks, which can be used guarantee ++ that the mstate controlling malloc/free is intact. This is a ++ streamlined version of the approach described by William Robertson ++ et al in "Run-time Detection of Heap-based Overflows" LISA'03 ++ http://www.usenix.org/events/lisa03/tech/robertson.html The footer ++ of an inuse chunk holds the xor of its mstate and a random seed, ++ that is checked upon calls to free() and realloc(). This is ++ (probablistically) unguessable from outside the program, but can be ++ computed by any code successfully malloc'ing any chunk, so does not ++ itself provide protection against code that has already broken ++ security through some other means. Unlike Robertson et al, we ++ always dynamically check addresses of all offset chunks (previous, ++ next, etc). This turns out to be cheaper than relying on hashes. ++*/ ++ ++#if !INSECURE ++/* Check if address a is at least as high as any from MORECORE or MMAP */ ++#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) ++/* Check if address of next chunk n is higher than base chunk p */ ++#define ok_next(p, n) ((char*)(p) < (char*)(n)) ++/* Check if p has its cinuse bit on */ ++#define ok_cinuse(p) cinuse(p) ++/* Check if p has its pinuse bit on */ ++#define ok_pinuse(p) pinuse(p) ++ ++#else /* !INSECURE */ ++#define ok_address(M, a) (1) ++#define ok_next(b, n) (1) ++#define ok_cinuse(p) (1) ++#define ok_pinuse(p) (1) ++#endif /* !INSECURE */ ++ ++#if (FOOTERS && !INSECURE) ++/* Check if (alleged) mstate m has expected magic field */ ++#define ok_magic(M) ((M)->magic == mparams.magic) ++#else /* (FOOTERS && !INSECURE) */ ++#define ok_magic(M) (1) ++#endif /* (FOOTERS && !INSECURE) */ ++ ++ ++/* In gcc, use __builtin_expect to minimize impact of checks */ ++#if !INSECURE ++#if defined(__GNUC__) && __GNUC__ >= 3 ++#define RTCHECK(e) __builtin_expect(e, 1) ++#else /* GNUC */ ++#define RTCHECK(e) (e) ++#endif /* GNUC */ ++#else /* !INSECURE */ ++#define RTCHECK(e) (1) ++#endif /* !INSECURE */ ++ ++/* macros to set up inuse chunks with or without footers */ ++ ++#if !FOOTERS ++ ++#define mark_inuse_foot(M,p,s) ++ ++/* Set cinuse bit and pinuse bit of next chunk */ ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++ ++/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++ ++/* Set size, cinuse and pinuse bit of this chunk */ ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) ++ ++#else /* FOOTERS */ ++ ++/* Set foot of inuse chunk to be xor of mstate and seed */ ++#define mark_inuse_foot(M,p,s)\ ++ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) ++ ++#define get_mstate_for(p)\ ++ ((mstate)(((mchunkptr)((char*)(p) +\ ++ (chunksize(p))))->prev_foot ^ mparams.magic)) ++ ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ ++ mark_inuse_foot(M,p,s)) ++ ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ ++ mark_inuse_foot(M,p,s)) ++ ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ mark_inuse_foot(M, p, s)) ++ ++#endif /* !FOOTERS */ ++ ++/* ---------------------------- setting mparams -------------------------- */ ++ ++/* Initialize mparams */ ++static int init_mparams(void) { ++ if (mparams.page_size == 0) { ++ size_t s; ++ ++ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; ++ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; ++#if MORECORE_CONTIGUOUS ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; ++#else /* MORECORE_CONTIGUOUS */ ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; ++#endif /* MORECORE_CONTIGUOUS */ ++ ++#if (FOOTERS && !INSECURE) ++ { ++#if USE_DEV_RANDOM ++ int fd; ++ unsigned char buf[sizeof(size_t)]; ++ /* Try to use /dev/urandom, else fall back on using time */ ++ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && ++ read(fd, buf, sizeof(buf)) == sizeof(buf)) { ++ s = *((size_t *) buf); ++ close(fd); ++ } ++ else ++#endif /* USE_DEV_RANDOM */ ++ s = (size_t)(time(0) ^ (size_t)0x55555555U); ++ ++ s |= (size_t)8U; /* ensure nonzero */ ++ s &= ~(size_t)7U; /* improve chances of fault for bad values */ ++ ++ } ++#else /* (FOOTERS && !INSECURE) */ ++ s = (size_t)0x58585858U; ++#endif /* (FOOTERS && !INSECURE) */ ++ ACQUIRE_MAGIC_INIT_LOCK(); ++ if (mparams.magic == 0) { ++ mparams.magic = s; ++ /* Set up lock for main malloc area */ ++ INITIAL_LOCK(&gm->mutex); ++ gm->mflags = mparams.default_mflags; ++ } ++ RELEASE_MAGIC_INIT_LOCK(); ++ ++#if !defined(WIN32) && !defined(__OS2__) ++ mparams.page_size = malloc_getpagesize; ++ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? ++ DEFAULT_GRANULARITY : mparams.page_size); ++#elif defined (__OS2__) ++ /* if low-memory is used, os2munmap() would break ++ if it were anything other than 64k */ ++ mparams.page_size = 4096u; ++ mparams.granularity = 65536u; ++#else /* WIN32 */ ++ { ++ SYSTEM_INFO system_info; ++ GetSystemInfo(&system_info); ++ mparams.page_size = system_info.dwPageSize; ++ mparams.granularity = system_info.dwAllocationGranularity; ++ } ++#endif /* WIN32 */ ++ ++ /* Sanity-check configuration: ++ size_t must be unsigned and as wide as pointer type. ++ ints must be at least 4 bytes. ++ alignment must be at least 8. ++ Alignment, min chunk size, and page size must all be powers of 2. ++ */ ++ if ((sizeof(size_t) != sizeof(char*)) || ++ (MAX_SIZE_T < MIN_CHUNK_SIZE) || ++ (sizeof(int) < 4) || ++ (MALLOC_ALIGNMENT < (size_t)8U) || ++ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || ++ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || ++ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || ++ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) ++ ABORT; ++ } ++ return 0; ++} ++ ++/* support for mallopt */ ++static int change_mparam(int param_number, int value) { ++ size_t val = (size_t)value; ++ init_mparams(); ++ switch(param_number) { ++ case M_TRIM_THRESHOLD: ++ mparams.trim_threshold = val; ++ return 1; ++ case M_GRANULARITY: ++ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { ++ mparams.granularity = val; ++ return 1; ++ } ++ else ++ return 0; ++ case M_MMAP_THRESHOLD: ++ mparams.mmap_threshold = val; ++ return 1; ++ default: ++ return 0; ++ } ++} ++ ++#if DEBUG ++/* ------------------------- Debugging Support --------------------------- */ ++ ++/* Check properties of any chunk, whether free, inuse, mmapped etc */ ++static void do_check_any_chunk(mstate m, mchunkptr p) { ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++} ++ ++/* Check properties of top chunk */ ++static void do_check_top_chunk(mstate m, mchunkptr p) { ++ msegmentptr sp = segment_holding(m, (char*)p); ++ size_t sz = chunksize(p); ++ assert(sp != 0); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(sz == m->topsize); ++ assert(sz > 0); ++ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); ++ assert(pinuse(p)); ++ assert(!next_pinuse(p)); ++} ++ ++/* Check properties of (inuse) mmapped chunks */ ++static void do_check_mmapped_chunk(mstate m, mchunkptr p) { ++ size_t sz = chunksize(p); ++ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); ++ assert(is_mmapped(p)); ++ assert(use_mmap(m)); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(!is_small(sz)); ++ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); ++ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); ++ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); ++} ++ ++/* Check properties of inuse chunks */ ++static void do_check_inuse_chunk(mstate m, mchunkptr p) { ++ do_check_any_chunk(m, p); ++ assert(cinuse(p)); ++ assert(next_pinuse(p)); ++ /* If not pinuse and not mmapped, previous chunk has OK offset */ ++ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); ++ if (is_mmapped(p)) ++ do_check_mmapped_chunk(m, p); ++} ++ ++/* Check properties of free chunks */ ++static void do_check_free_chunk(mstate m, mchunkptr p) { ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ mchunkptr next = chunk_plus_offset(p, sz); ++ do_check_any_chunk(m, p); ++ assert(!cinuse(p)); ++ assert(!next_pinuse(p)); ++ assert (!is_mmapped(p)); ++ if (p != m->dv && p != m->top) { ++ if (sz >= MIN_CHUNK_SIZE) { ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(is_aligned(chunk2mem(p))); ++ assert(next->prev_foot == sz); ++ assert(pinuse(p)); ++ assert (next == m->top || cinuse(next)); ++ assert(p->fd->bk == p); ++ assert(p->bk->fd == p); ++ } ++ else /* markers are always of size SIZE_T_SIZE */ ++ assert(sz == SIZE_T_SIZE); ++ } ++} ++ ++/* Check properties of malloced chunks at the point they are malloced */ ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ do_check_inuse_chunk(m, p); ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(sz >= MIN_CHUNK_SIZE); ++ assert(sz >= s); ++ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ ++ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); ++ } ++} ++ ++/* Check a tree and its subtrees. */ ++static void do_check_tree(mstate m, tchunkptr t) { ++ tchunkptr head = 0; ++ tchunkptr u = t; ++ bindex_t tindex = t->index; ++ size_t tsize = chunksize(t); ++ bindex_t idx; ++ compute_tree_index(tsize, idx); ++ assert(tindex == idx); ++ assert(tsize >= MIN_LARGE_SIZE); ++ assert(tsize >= minsize_for_tree_index(idx)); ++ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); ++ ++ do { /* traverse through chain of same-sized nodes */ ++ do_check_any_chunk(m, ((mchunkptr)u)); ++ assert(u->index == tindex); ++ assert(chunksize(u) == tsize); ++ assert(!cinuse(u)); ++ assert(!next_pinuse(u)); ++ assert(u->fd->bk == u); ++ assert(u->bk->fd == u); ++ if (u->parent == 0) { ++ assert(u->child[0] == 0); ++ assert(u->child[1] == 0); ++ } ++ else { ++ assert(head == 0); /* only one node on chain has parent */ ++ head = u; ++ assert(u->parent != u); ++ assert (u->parent->child[0] == u || ++ u->parent->child[1] == u || ++ *((tbinptr*)(u->parent)) == u); ++ if (u->child[0] != 0) { ++ assert(u->child[0]->parent == u); ++ assert(u->child[0] != u); ++ do_check_tree(m, u->child[0]); ++ } ++ if (u->child[1] != 0) { ++ assert(u->child[1]->parent == u); ++ assert(u->child[1] != u); ++ do_check_tree(m, u->child[1]); ++ } ++ if (u->child[0] != 0 && u->child[1] != 0) { ++ assert(chunksize(u->child[0]) < chunksize(u->child[1])); ++ } ++ } ++ u = u->fd; ++ } while (u != t); ++ assert(head != 0); ++} ++ ++/* Check all the chunks in a treebin. */ ++static void do_check_treebin(mstate m, bindex_t i) { ++ tbinptr* tb = treebin_at(m, i); ++ tchunkptr t = *tb; ++ int empty = (m->treemap & (1U << i)) == 0; ++ if (t == 0) ++ assert(empty); ++ if (!empty) ++ do_check_tree(m, t); ++} ++ ++/* Check all the chunks in a smallbin. */ ++static void do_check_smallbin(mstate m, bindex_t i) { ++ sbinptr b = smallbin_at(m, i); ++ mchunkptr p = b->bk; ++ unsigned int empty = (m->smallmap & (1U << i)) == 0; ++ if (p == b) ++ assert(empty); ++ if (!empty) { ++ for (; p != b; p = p->bk) { ++ size_t size = chunksize(p); ++ mchunkptr q; ++ /* each chunk claims to be free */ ++ do_check_free_chunk(m, p); ++ /* chunk belongs in bin */ ++ assert(small_index(size) == i); ++ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); ++ /* chunk is followed by an inuse chunk */ ++ q = next_chunk(p); ++ if (q->head != FENCEPOST_HEAD) ++ do_check_inuse_chunk(m, q); ++ } ++ } ++} ++ ++/* Find x in a bin. Used in other check functions. */ ++static int bin_find(mstate m, mchunkptr x) { ++ size_t size = chunksize(x); ++ if (is_small(size)) { ++ bindex_t sidx = small_index(size); ++ sbinptr b = smallbin_at(m, sidx); ++ if (smallmap_is_marked(m, sidx)) { ++ mchunkptr p = b; ++ do { ++ if (p == x) ++ return 1; ++ } while ((p = p->fd) != b); ++ } ++ } ++ else { ++ bindex_t tidx; ++ compute_tree_index(size, tidx); ++ if (treemap_is_marked(m, tidx)) { ++ tchunkptr t = *treebin_at(m, tidx); ++ size_t sizebits = size << leftshift_for_tree_index(tidx); ++ while (t != 0 && chunksize(t) != size) { ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ sizebits <<= 1; ++ } ++ if (t != 0) { ++ tchunkptr u = t; ++ do { ++ if (u == (tchunkptr)x) ++ return 1; ++ } while ((u = u->fd) != t); ++ } ++ } ++ } ++ return 0; ++} ++ ++/* Traverse each chunk and check it; return total */ ++static size_t traverse_and_check(mstate m) { ++ size_t sum = 0; ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ sum += m->topsize + TOP_FOOT_SIZE; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ mchunkptr lastq = 0; ++ assert(pinuse(q)); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ sum += chunksize(q); ++ if (cinuse(q)) { ++ assert(!bin_find(m, q)); ++ do_check_inuse_chunk(m, q); ++ } ++ else { ++ assert(q == m->dv || bin_find(m, q)); ++ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ ++ do_check_free_chunk(m, q); ++ } ++ lastq = q; ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } ++ return sum; ++} ++ ++/* Check all properties of malloc_state. */ ++static void do_check_malloc_state(mstate m) { ++ bindex_t i; ++ size_t total; ++ /* check bins */ ++ for (i = 0; i < NSMALLBINS; ++i) ++ do_check_smallbin(m, i); ++ for (i = 0; i < NTREEBINS; ++i) ++ do_check_treebin(m, i); ++ ++ if (m->dvsize != 0) { /* check dv chunk */ ++ do_check_any_chunk(m, m->dv); ++ assert(m->dvsize == chunksize(m->dv)); ++ assert(m->dvsize >= MIN_CHUNK_SIZE); ++ assert(bin_find(m, m->dv) == 0); ++ } ++ ++ if (m->top != 0) { /* check top chunk */ ++ do_check_top_chunk(m, m->top); ++ assert(m->topsize == chunksize(m->top)); ++ assert(m->topsize > 0); ++ assert(bin_find(m, m->top) == 0); ++ } ++ ++ total = traverse_and_check(m); ++ assert(total <= m->footprint); ++ assert(m->footprint <= m->max_footprint); ++} ++#endif /* DEBUG */ ++ ++/* ----------------------------- statistics ------------------------------ */ ++ ++#if !NO_MALLINFO ++static struct mallinfo internal_mallinfo(mstate m) { ++ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ++ if (!PREACTION(m)) { ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ size_t nfree = SIZE_T_ONE; /* top always free */ ++ size_t mfree = m->topsize + TOP_FOOT_SIZE; ++ size_t sum = mfree; ++ msegmentptr s = &m->seg; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ size_t sz = chunksize(q); ++ sum += sz; ++ if (!cinuse(q)) { ++ mfree += sz; ++ ++nfree; ++ } ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ ++ nm.arena = sum; ++ nm.ordblks = nfree; ++ nm.hblkhd = m->footprint - sum; ++ nm.usmblks = m->max_footprint; ++ nm.uordblks = m->footprint - mfree; ++ nm.fordblks = mfree; ++ nm.keepcost = m->topsize; ++ } ++ ++ POSTACTION(m); ++ } ++ return nm; ++} ++#endif /* !NO_MALLINFO */ ++ ++static void internal_malloc_stats(mstate m) { ++ if (!PREACTION(m)) { ++ size_t maxfp = 0; ++ size_t fp = 0; ++ size_t used = 0; ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ maxfp = m->max_footprint; ++ fp = m->footprint; ++ used = fp - (m->topsize + TOP_FOOT_SIZE); ++ ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ if (!cinuse(q)) ++ used -= chunksize(q); ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } ++ ++ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); ++ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); ++ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); ++ ++ POSTACTION(m); ++ } ++} ++ ++/* ----------------------- Operations on smallbins ----------------------- */ ++ ++/* ++ Various forms of linking and unlinking are defined as macros. Even ++ the ones for trees, which are very long but have very short typical ++ paths. This is ugly but reduces reliance on inlining support of ++ compilers. ++*/ ++ ++/* Link a free chunk into a smallbin */ ++#define insert_small_chunk(M, P, S) {\ ++ bindex_t I = small_index(S);\ ++ mchunkptr B = smallbin_at(M, I);\ ++ mchunkptr F = B;\ ++ assert(S >= MIN_CHUNK_SIZE);\ ++ if (!smallmap_is_marked(M, I))\ ++ mark_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, B->fd)))\ ++ F = B->fd;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ B->fd = P;\ ++ F->bk = P;\ ++ P->fd = F;\ ++ P->bk = B;\ ++} ++ ++/* Unlink a chunk from a smallbin */ ++#define unlink_small_chunk(M, P, S) {\ ++ mchunkptr F = P->fd;\ ++ mchunkptr B = P->bk;\ ++ bindex_t I = small_index(S);\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (F == B)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ ++ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ ++ F->bk = B;\ ++ B->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} ++ ++/* Unlink the first chunk from a smallbin */ ++#define unlink_first_small_chunk(M, B, P, I) {\ ++ mchunkptr F = P->fd;\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (B == F)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, F))) {\ ++ B->fd = F;\ ++ F->bk = B;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} ++ ++/* Replace dv node, binning the old one */ ++/* Used only when dvsize known to be small */ ++#define replace_dv(M, P, S) {\ ++ size_t DVS = M->dvsize;\ ++ if (DVS != 0) {\ ++ mchunkptr DV = M->dv;\ ++ assert(is_small(DVS));\ ++ insert_small_chunk(M, DV, DVS);\ ++ }\ ++ M->dvsize = S;\ ++ M->dv = P;\ ++} ++ ++/* ------------------------- Operations on trees ------------------------- */ ++ ++/* Insert chunk into tree */ ++#define insert_large_chunk(M, X, S) {\ ++ tbinptr* H;\ ++ bindex_t I;\ ++ compute_tree_index(S, I);\ ++ H = treebin_at(M, I);\ ++ X->index = I;\ ++ X->child[0] = X->child[1] = 0;\ ++ if (!treemap_is_marked(M, I)) {\ ++ mark_treemap(M, I);\ ++ *H = X;\ ++ X->parent = (tchunkptr)H;\ ++ X->fd = X->bk = X;\ ++ }\ ++ else {\ ++ tchunkptr T = *H;\ ++ size_t K = S << leftshift_for_tree_index(I);\ ++ for (;;) {\ ++ if (chunksize(T) != S) {\ ++ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ ++ K <<= 1;\ ++ if (*C != 0)\ ++ T = *C;\ ++ else if (RTCHECK(ok_address(M, C))) {\ ++ *C = X;\ ++ X->parent = T;\ ++ X->fd = X->bk = X;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr F = T->fd;\ ++ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ ++ T->fd = F->bk = X;\ ++ X->fd = F;\ ++ X->bk = T;\ ++ X->parent = 0;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ }\ ++ }\ ++} ++ ++/* ++ Unlink steps: ++ ++ 1. If x is a chained node, unlink it from its same-sized fd/bk links ++ and choose its bk node as its replacement. ++ 2. If x was the last node of its size, but not a leaf node, it must ++ be replaced with a leaf node (not merely one with an open left or ++ right), to make sure that lefts and rights of descendants ++ correspond properly to bit masks. We use the rightmost descendant ++ of x. We could use any other leaf, but this is easy to locate and ++ tends to counteract removal of leftmosts elsewhere, and so keeps ++ paths shorter than minimally guaranteed. This doesn't loop much ++ because on average a node in a tree is near the bottom. ++ 3. If x is the base of a chain (i.e., has parent links) relink ++ x's parent and children to x's replacement (or null if none). ++*/ ++ ++#define unlink_large_chunk(M, X) {\ ++ tchunkptr XP = X->parent;\ ++ tchunkptr R;\ ++ if (X->bk != X) {\ ++ tchunkptr F = X->fd;\ ++ R = X->bk;\ ++ if (RTCHECK(ok_address(M, F))) {\ ++ F->bk = R;\ ++ R->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr* RP;\ ++ if (((R = *(RP = &(X->child[1]))) != 0) ||\ ++ ((R = *(RP = &(X->child[0]))) != 0)) {\ ++ tchunkptr* CP;\ ++ while ((*(CP = &(R->child[1])) != 0) ||\ ++ (*(CP = &(R->child[0])) != 0)) {\ ++ R = *(RP = CP);\ ++ }\ ++ if (RTCHECK(ok_address(M, RP)))\ ++ *RP = 0;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ }\ ++ if (XP != 0) {\ ++ tbinptr* H = treebin_at(M, X->index);\ ++ if (X == *H) {\ ++ if ((*H = R) == 0) \ ++ clear_treemap(M, X->index);\ ++ }\ ++ else if (RTCHECK(ok_address(M, XP))) {\ ++ if (XP->child[0] == X) \ ++ XP->child[0] = R;\ ++ else \ ++ XP->child[1] = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ if (R != 0) {\ ++ if (RTCHECK(ok_address(M, R))) {\ ++ tchunkptr C0, C1;\ ++ R->parent = XP;\ ++ if ((C0 = X->child[0]) != 0) {\ ++ if (RTCHECK(ok_address(M, C0))) {\ ++ R->child[0] = C0;\ ++ C0->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ if ((C1 = X->child[1]) != 0) {\ ++ if (RTCHECK(ok_address(M, C1))) {\ ++ R->child[1] = C1;\ ++ C1->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++} ++ ++/* Relays to large vs small bin operations */ ++ ++#define insert_chunk(M, P, S)\ ++ if (is_small(S)) insert_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } ++ ++#define unlink_chunk(M, P, S)\ ++ if (is_small(S)) unlink_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } ++ ++ ++/* Relays to internal calls to malloc/free from realloc, memalign etc */ ++ ++#if ONLY_MSPACES ++#define internal_malloc(m, b) mspace_malloc(m, b) ++#define internal_free(m, mem) mspace_free(m,mem); ++#else /* ONLY_MSPACES */ ++#if MSPACES ++#define internal_malloc(m, b)\ ++ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) ++#define internal_free(m, mem)\ ++ if (m == gm) dlfree(mem); else mspace_free(m,mem); ++#else /* MSPACES */ ++#define internal_malloc(m, b) dlmalloc(b) ++#define internal_free(m, mem) dlfree(mem) ++#endif /* MSPACES */ ++#endif /* ONLY_MSPACES */ ++ ++/* ----------------------- Direct-mmapping chunks ----------------------- */ ++ ++/* ++ Directly mmapped chunks are set up with an offset to the start of ++ the mmapped region stored in the prev_foot field of the chunk. This ++ allows reconstruction of the required argument to MUNMAP when freed, ++ and also allows adjustment of the returned chunk to meet alignment ++ requirements (especially in memalign). There is also enough space ++ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain ++ the PINUSE bit so frees can be checked. ++*/ ++ ++/* Malloc using mmap */ ++static void* mmap_alloc(mstate m, size_t nb) { ++ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ if (mmsize > nb) { /* Check for wrap around 0 */ ++ char* mm = (char*)(DIRECT_MMAP(mmsize)); ++ if (mm != CMFAIL) { ++ size_t offset = align_offset(chunk2mem(mm)); ++ size_t psize = mmsize - offset - MMAP_FOOT_PAD; ++ mchunkptr p = (mchunkptr)(mm + offset); ++ p->prev_foot = offset | IS_MMAPPED_BIT; ++ (p)->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, p, psize); ++ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; ++ ++ if (mm < m->least_addr) ++ m->least_addr = mm; ++ if ((m->footprint += mmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ assert(is_aligned(chunk2mem(p))); ++ check_mmapped_chunk(m, p); ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} ++ ++/* Realloc using mmap */ ++static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { ++ size_t oldsize = chunksize(oldp); ++ if (is_small(nb)) /* Can't shrink mmap regions below small size */ ++ return 0; ++ /* Keep old chunk if big enough but not too big */ ++ if (oldsize >= nb + SIZE_T_SIZE && ++ (oldsize - nb) <= (mparams.granularity << 1)) ++ return oldp; ++ else { ++ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; ++ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; ++ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + ++ CHUNK_ALIGN_MASK); ++ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, ++ oldmmsize, newmmsize, 1); ++ if (cp != CMFAIL) { ++ mchunkptr newp = (mchunkptr)(cp + offset); ++ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; ++ newp->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, newp, psize); ++ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; ++ ++ if (cp < m->least_addr) ++ m->least_addr = cp; ++ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ check_mmapped_chunk(m, newp); ++ return newp; ++ } ++ } ++ return 0; ++} ++ ++/* -------------------------- mspace management -------------------------- */ ++ ++/* Initialize top chunk and its size */ ++static void init_top(mstate m, mchunkptr p, size_t psize) { ++ /* Ensure alignment */ ++ size_t offset = align_offset(chunk2mem(p)); ++ p = (mchunkptr)((char*)p + offset); ++ psize -= offset; ++ ++ m->top = p; ++ m->topsize = psize; ++ p->head = psize | PINUSE_BIT; ++ /* set size of fake trailing chunk holding overhead space only once */ ++ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; ++ m->trim_check = mparams.trim_threshold; /* reset on each update */ ++} ++ ++/* Initialize bins for a new mstate that is otherwise zeroed out */ ++static void init_bins(mstate m) { ++ /* Establish circular links for smallbins */ ++ bindex_t i; ++ for (i = 0; i < NSMALLBINS; ++i) { ++ sbinptr bin = smallbin_at(m,i); ++ bin->fd = bin->bk = bin; ++ } ++} ++ ++#if PROCEED_ON_ERROR ++ ++/* default corruption action */ ++static void reset_on_error(mstate m) { ++ int i; ++ ++malloc_corruption_error_count; ++ /* Reinitialize fields to forget about all memory */ ++ m->smallbins = m->treebins = 0; ++ m->dvsize = m->topsize = 0; ++ m->seg.base = 0; ++ m->seg.size = 0; ++ m->seg.next = 0; ++ m->top = m->dv = 0; ++ for (i = 0; i < NTREEBINS; ++i) ++ *treebin_at(m, i) = 0; ++ init_bins(m); ++} ++#endif /* PROCEED_ON_ERROR */ ++ ++/* Allocate chunk and prepend remainder with chunk in successor base. */ ++static void* prepend_alloc(mstate m, char* newbase, char* oldbase, ++ size_t nb) { ++ mchunkptr p = align_as_chunk(newbase); ++ mchunkptr oldfirst = align_as_chunk(oldbase); ++ size_t psize = (char*)oldfirst - (char*)p; ++ mchunkptr q = chunk_plus_offset(p, nb); ++ size_t qsize = psize - nb; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++ ++ assert((char*)oldfirst > (char*)q); ++ assert(pinuse(oldfirst)); ++ assert(qsize >= MIN_CHUNK_SIZE); ++ ++ /* consolidate remainder with first chunk of old base */ ++ if (oldfirst == m->top) { ++ size_t tsize = m->topsize += qsize; ++ m->top = q; ++ q->head = tsize | PINUSE_BIT; ++ check_top_chunk(m, q); ++ } ++ else if (oldfirst == m->dv) { ++ size_t dsize = m->dvsize += qsize; ++ m->dv = q; ++ set_size_and_pinuse_of_free_chunk(q, dsize); ++ } ++ else { ++ if (!cinuse(oldfirst)) { ++ size_t nsize = chunksize(oldfirst); ++ unlink_chunk(m, oldfirst, nsize); ++ oldfirst = chunk_plus_offset(oldfirst, nsize); ++ qsize += nsize; ++ } ++ set_free_with_pinuse(q, qsize, oldfirst); ++ insert_chunk(m, q, qsize); ++ check_free_chunk(m, q); ++ } ++ ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++} ++ ++ ++/* Add a segment to hold a new noncontiguous region */ ++static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { ++ /* Determine locations and sizes of segment, fenceposts, old top */ ++ char* old_top = (char*)m->top; ++ msegmentptr oldsp = segment_holding(m, old_top); ++ char* old_end = oldsp->base + oldsp->size; ++ size_t ssize = pad_request(sizeof(struct malloc_segment)); ++ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ size_t offset = align_offset(chunk2mem(rawsp)); ++ char* asp = rawsp + offset; ++ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; ++ mchunkptr sp = (mchunkptr)csp; ++ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); ++ mchunkptr tnext = chunk_plus_offset(sp, ssize); ++ mchunkptr p = tnext; ++ int nfences = 0; ++ ++ /* reset top to new space */ ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++ ++ /* Set up segment record */ ++ assert(is_aligned(ss)); ++ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); ++ *ss = m->seg; /* Push current record */ ++ m->seg.base = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmapped); ++ m->seg.next = ss; ++ ++ /* Insert trailing fenceposts */ ++ for (;;) { ++ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); ++ p->head = FENCEPOST_HEAD; ++ ++nfences; ++ if ((char*)(&(nextp->head)) < old_end) ++ p = nextp; ++ else ++ break; ++ } ++ assert(nfences >= 2); ++ ++ /* Insert the rest of old top into a bin as an ordinary free chunk */ ++ if (csp != old_top) { ++ mchunkptr q = (mchunkptr)old_top; ++ size_t psize = csp - old_top; ++ mchunkptr tn = chunk_plus_offset(q, psize); ++ set_free_with_pinuse(q, psize, tn); ++ insert_chunk(m, q, psize); ++ } ++ ++ check_top_chunk(m, m->top); ++} ++ ++/* -------------------------- System allocation -------------------------- */ ++ ++/* Get memory from system using MORECORE or MMAP */ ++static void* sys_alloc(mstate m, size_t nb) { ++ char* tbase = CMFAIL; ++ size_t tsize = 0; ++ flag_t mmap_flag = 0; ++ ++ init_mparams(); ++ ++ /* Directly map large chunks */ ++ if (use_mmap(m) && nb >= mparams.mmap_threshold) { ++ void* mem = mmap_alloc(m, nb); ++ if (mem != 0) ++ return mem; ++ } ++ ++ /* ++ Try getting memory in any of three ways (in most-preferred to ++ least-preferred order): ++ 1. A call to MORECORE that can normally contiguously extend memory. ++ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or ++ or main space is mmapped or a previous contiguous call failed) ++ 2. A call to MMAP new space (disabled if not HAVE_MMAP). ++ Note that under the default settings, if MORECORE is unable to ++ fulfill a request, and HAVE_MMAP is true, then mmap is ++ used as a noncontiguous system allocator. This is a useful backup ++ strategy for systems with holes in address spaces -- in this case ++ sbrk cannot contiguously expand the heap, but mmap may be able to ++ find space. ++ 3. A call to MORECORE that cannot usually contiguously extend memory. ++ (disabled if not HAVE_MORECORE) ++ */ ++ ++ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { ++ char* br = CMFAIL; ++ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); ++ size_t asize = 0; ++ ACQUIRE_MORECORE_LOCK(); ++ ++ if (ss == 0) { /* First time through or recovery */ ++ char* base = (char*)CALL_MORECORE(0); ++ if (base != CMFAIL) { ++ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Adjust to end on a page boundary */ ++ if (!is_page_aligned(base)) ++ asize += (page_align((size_t)base) - (size_t)base); ++ /* Can't call MORECORE if size is negative when treated as signed */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == base) { ++ tbase = base; ++ tsize = asize; ++ } ++ } ++ } ++ else { ++ /* Subtract out existing available top space from MORECORE request. */ ++ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Use mem here only if it did continuously extend old space */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { ++ tbase = br; ++ tsize = asize; ++ } ++ } ++ ++ if (tbase == CMFAIL) { /* Cope with partial failure */ ++ if (br != CMFAIL) { /* Try to use/extend the space we did get */ ++ if (asize < HALF_MAX_SIZE_T && ++ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { ++ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); ++ if (esize < HALF_MAX_SIZE_T) { ++ char* end = (char*)CALL_MORECORE(esize); ++ if (end != CMFAIL) ++ asize += esize; ++ else { /* Can't use; try to release */ ++ (void)CALL_MORECORE(-asize); ++ br = CMFAIL; ++ } ++ } ++ } ++ } ++ if (br != CMFAIL) { /* Use the space we did get */ ++ tbase = br; ++ tsize = asize; ++ } ++ else ++ disable_contiguous(m); /* Don't try contiguous path in the future */ ++ } ++ ++ RELEASE_MORECORE_LOCK(); ++ } ++ ++ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ ++ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; ++ size_t rsize = granularity_align(req); ++ if (rsize > nb) { /* Fail if wraps around zero */ ++ char* mp = (char*)(CALL_MMAP(rsize)); ++ if (mp != CMFAIL) { ++ tbase = mp; ++ tsize = rsize; ++ mmap_flag = IS_MMAPPED_BIT; ++ } ++ } ++ } ++ ++ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ ++ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ if (asize < HALF_MAX_SIZE_T) { ++ char* br = CMFAIL; ++ char* end = CMFAIL; ++ ACQUIRE_MORECORE_LOCK(); ++ br = (char*)(CALL_MORECORE(asize)); ++ end = (char*)(CALL_MORECORE(0)); ++ RELEASE_MORECORE_LOCK(); ++ if (br != CMFAIL && end != CMFAIL && br < end) { ++ size_t ssize = end - br; ++ if (ssize > nb + TOP_FOOT_SIZE) { ++ tbase = br; ++ tsize = ssize; ++ } ++ } ++ } ++ } ++ ++ if (tbase != CMFAIL) { ++ ++ if ((m->footprint += tsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ ++ if (!is_initialized(m)) { /* first-time initialization */ ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmap_flag); ++ m->magic = mparams.magic; ++ init_bins(m); ++ if (is_global(m)) ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++ else { ++ /* Offset top by embedded malloc_state */ ++ mchunkptr mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); ++ } ++ } ++ ++ else { ++ /* Try to merge with an existing segment */ ++ msegmentptr sp = &m->seg; ++ while (sp != 0 && tbase != sp->base + sp->size) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && ++ segment_holds(sp, m->top)) { /* append */ ++ sp->size += tsize; ++ init_top(m, m->top, m->topsize + tsize); ++ } ++ else { ++ if (tbase < m->least_addr) ++ m->least_addr = tbase; ++ sp = &m->seg; ++ while (sp != 0 && sp->base != tbase + tsize) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { ++ char* oldbase = sp->base; ++ sp->base = tbase; ++ sp->size += tsize; ++ return prepend_alloc(m, tbase, oldbase, nb); ++ } ++ else ++ add_segment(m, tbase, tsize, mmap_flag); ++ } ++ } ++ ++ if (nb < m->topsize) { /* Allocate from new or extended top space */ ++ size_t rsize = m->topsize -= nb; ++ mchunkptr p = m->top; ++ mchunkptr r = m->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++ check_top_chunk(m, m->top); ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++ } ++ } ++ ++ MALLOC_FAILURE_ACTION; ++ return 0; ++} ++ ++/* ----------------------- system deallocation -------------------------- */ ++ ++/* Unmap and unlink any mmapped segments that don't contain used chunks */ ++static size_t release_unused_segments(mstate m) { ++ size_t released = 0; ++ msegmentptr pred = &m->seg; ++ msegmentptr sp = pred->next; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ msegmentptr next = sp->next; ++ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { ++ mchunkptr p = align_as_chunk(base); ++ size_t psize = chunksize(p); ++ /* Can unmap if first chunk holds entire segment and not pinned */ ++ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { ++ tchunkptr tp = (tchunkptr)p; ++ assert(segment_holds(sp, (char*)sp)); ++ if (p == m->dv) { ++ m->dv = 0; ++ m->dvsize = 0; ++ } ++ else { ++ unlink_large_chunk(m, tp); ++ } ++ if (CALL_MUNMAP(base, size) == 0) { ++ released += size; ++ m->footprint -= size; ++ /* unlink obsoleted record */ ++ sp = pred; ++ sp->next = next; ++ } ++ else { /* back out if cannot unmap */ ++ insert_large_chunk(m, tp, psize); ++ } ++ } ++ } ++ pred = sp; ++ sp = next; ++ } ++ return released; ++} ++ ++static int sys_trim(mstate m, size_t pad) { ++ size_t released = 0; ++ if (pad < MAX_REQUEST && is_initialized(m)) { ++ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ ++ ++ if (m->topsize > pad) { ++ /* Shrink top space in granularity-size units, keeping at least one */ ++ size_t unit = mparams.granularity; ++ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - ++ SIZE_T_ONE) * unit; ++ msegmentptr sp = segment_holding(m, (char*)m->top); ++ ++ if (!is_extern_segment(sp)) { ++ if (is_mmapped_segment(sp)) { ++ if (HAVE_MMAP && ++ sp->size >= extra && ++ !has_segment_link(m, sp)) { /* can't shrink if pinned */ ++ size_t newsize = sp->size - extra; ++ /* Prefer mremap, fall back to munmap */ ++ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || ++ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { ++ released = extra; ++ } ++ } ++ } ++ else if (HAVE_MORECORE) { ++ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ ++ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; ++ ACQUIRE_MORECORE_LOCK(); ++ { ++ /* Make sure end of memory is where we last set it. */ ++ char* old_br = (char*)(CALL_MORECORE(0)); ++ if (old_br == sp->base + sp->size) { ++ char* rel_br = (char*)(CALL_MORECORE(-extra)); ++ char* new_br = (char*)(CALL_MORECORE(0)); ++ if (rel_br != CMFAIL && new_br < old_br) ++ released = old_br - new_br; ++ } ++ } ++ RELEASE_MORECORE_LOCK(); ++ } ++ } ++ ++ if (released != 0) { ++ sp->size -= released; ++ m->footprint -= released; ++ init_top(m, m->top, m->topsize - released); ++ check_top_chunk(m, m->top); ++ } ++ } ++ ++ /* Unmap any unused mmapped segments */ ++ if (HAVE_MMAP) ++ released += release_unused_segments(m); ++ ++ /* On failure, disable autotrim to avoid repeated failed future calls */ ++ if (released == 0) ++ m->trim_check = MAX_SIZE_T; ++ } ++ ++ return (released != 0)? 1 : 0; ++} ++ ++/* ---------------------------- malloc support --------------------------- */ ++ ++/* allocate a large request from the best fitting chunk in a treebin */ ++static void* tmalloc_large(mstate m, size_t nb) { ++ tchunkptr v = 0; ++ size_t rsize = -nb; /* Unsigned negation */ ++ tchunkptr t; ++ bindex_t idx; ++ compute_tree_index(nb, idx); ++ ++ if ((t = *treebin_at(m, idx)) != 0) { ++ /* Traverse tree for this bin looking for node with size == nb */ ++ size_t sizebits = nb << leftshift_for_tree_index(idx); ++ tchunkptr rst = 0; /* The deepest untaken right subtree */ ++ for (;;) { ++ tchunkptr rt; ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ v = t; ++ if ((rsize = trem) == 0) ++ break; ++ } ++ rt = t->child[1]; ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ if (rt != 0 && rt != t) ++ rst = rt; ++ if (t == 0) { ++ t = rst; /* set t to least subtree holding sizes > nb */ ++ break; ++ } ++ sizebits <<= 1; ++ } ++ } ++ ++ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ ++ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; ++ if (leftbits != 0) { ++ bindex_t i; ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ t = *treebin_at(m, i); ++ } ++ } ++ ++ while (t != 0) { /* find smallest of tree or subtree */ ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ t = leftmost_child(t); ++ } ++ ++ /* If dv is a better fit, return 0 so malloc will use it */ ++ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { ++ if (RTCHECK(ok_address(m, v))) { /* split */ ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ insert_chunk(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } ++ CORRUPTION_ERROR_ACTION(m); ++ } ++ return 0; ++} ++ ++/* allocate a small request from the best fitting chunk in a treebin */ ++static void* tmalloc_small(mstate m, size_t nb) { ++ tchunkptr t, v; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leastbit = least_bit(m->treemap); ++ compute_bit2idx(leastbit, i); ++ ++ v = t = *treebin_at(m, i); ++ rsize = chunksize(t) - nb; ++ ++ while ((t = leftmost_child(t)) != 0) { ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ } ++ ++ if (RTCHECK(ok_address(m, v))) { ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } ++ ++ CORRUPTION_ERROR_ACTION(m); ++ return 0; ++} ++ ++/* --------------------------- realloc support --------------------------- */ ++ ++static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { ++ if (bytes >= MAX_REQUEST) { ++ MALLOC_FAILURE_ACTION; ++ return 0; ++ } ++ if (!PREACTION(m)) { ++ mchunkptr oldp = mem2chunk(oldmem); ++ size_t oldsize = chunksize(oldp); ++ mchunkptr next = chunk_plus_offset(oldp, oldsize); ++ mchunkptr newp = 0; ++ void* extra = 0; ++ ++ /* Try to either shrink or extend into top. Else malloc-copy-free */ ++ ++ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && ++ ok_next(oldp, next) && ok_pinuse(next))) { ++ size_t nb = request2size(bytes); ++ if (is_mmapped(oldp)) ++ newp = mmap_resize(m, oldp, nb); ++ else if (oldsize >= nb) { /* already big enough */ ++ size_t rsize = oldsize - nb; ++ newp = oldp; ++ if (rsize >= MIN_CHUNK_SIZE) { ++ mchunkptr remainder = chunk_plus_offset(newp, nb); ++ set_inuse(m, newp, nb); ++ set_inuse(m, remainder, rsize); ++ extra = chunk2mem(remainder); ++ } ++ } ++ else if (next == m->top && oldsize + m->topsize > nb) { ++ /* Expand into top */ ++ size_t newsize = oldsize + m->topsize; ++ size_t newtopsize = newsize - nb; ++ mchunkptr newtop = chunk_plus_offset(oldp, nb); ++ set_inuse(m, oldp, nb); ++ newtop->head = newtopsize |PINUSE_BIT; ++ m->top = newtop; ++ m->topsize = newtopsize; ++ newp = oldp; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(m, oldmem); ++ POSTACTION(m); ++ return 0; ++ } ++ ++ POSTACTION(m); ++ ++ if (newp != 0) { ++ if (extra != 0) { ++ internal_free(m, extra); ++ } ++ check_inuse_chunk(m, newp); ++ return chunk2mem(newp); ++ } ++ else { ++ void* newmem = internal_malloc(m, bytes); ++ if (newmem != 0) { ++ size_t oc = oldsize - overhead_for(oldp); ++ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); ++ internal_free(m, oldmem); ++ } ++ return newmem; ++ } ++ } ++ return 0; ++} ++ ++/* --------------------------- memalign support -------------------------- */ ++ ++static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { ++ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ ++ return internal_malloc(m, bytes); ++ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ ++ alignment = MIN_CHUNK_SIZE; ++ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ ++ size_t a = MALLOC_ALIGNMENT << 1; ++ while (a < alignment) a <<= 1; ++ alignment = a; ++ } ++ ++ if (bytes >= MAX_REQUEST - alignment) { ++ if (m != 0) { /* Test isn't needed but avoids compiler warning */ ++ MALLOC_FAILURE_ACTION; ++ } ++ } ++ else { ++ size_t nb = request2size(bytes); ++ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; ++ char* mem = (char*)internal_malloc(m, req); ++ if (mem != 0) { ++ void* leader = 0; ++ void* trailer = 0; ++ mchunkptr p = mem2chunk(mem); ++ ++ if (PREACTION(m)) return 0; ++ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ ++ /* ++ Find an aligned spot inside chunk. Since we need to give ++ back leading space in a chunk of at least MIN_CHUNK_SIZE, if ++ the first calculation places us at a spot with less than ++ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. ++ We've allocated enough total room so that this is always ++ possible. ++ */ ++ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + ++ alignment - ++ SIZE_T_ONE)) & ++ -alignment)); ++ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? ++ br : br+alignment; ++ mchunkptr newp = (mchunkptr)pos; ++ size_t leadsize = pos - (char*)(p); ++ size_t newsize = chunksize(p) - leadsize; ++ ++ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ ++ newp->prev_foot = p->prev_foot + leadsize; ++ newp->head = (newsize|CINUSE_BIT); ++ } ++ else { /* Otherwise, give back leader, use the rest */ ++ set_inuse(m, newp, newsize); ++ set_inuse(m, p, leadsize); ++ leader = chunk2mem(p); ++ } ++ p = newp; ++ } ++ ++ /* Give back spare room at the end */ ++ if (!is_mmapped(p)) { ++ size_t size = chunksize(p); ++ if (size > nb + MIN_CHUNK_SIZE) { ++ size_t remainder_size = size - nb; ++ mchunkptr remainder = chunk_plus_offset(p, nb); ++ set_inuse(m, p, nb); ++ set_inuse(m, remainder, remainder_size); ++ trailer = chunk2mem(remainder); ++ } ++ } ++ ++ assert (chunksize(p) >= nb); ++ assert((((size_t)(chunk2mem(p))) % alignment) == 0); ++ check_inuse_chunk(m, p); ++ POSTACTION(m); ++ if (leader != 0) { ++ internal_free(m, leader); ++ } ++ if (trailer != 0) { ++ internal_free(m, trailer); ++ } ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} ++ ++/* ------------------------ comalloc/coalloc support --------------------- */ ++ ++static void** ialloc(mstate m, ++ size_t n_elements, ++ size_t* sizes, ++ int opts, ++ void* chunks[]) { ++ /* ++ This provides common support for independent_X routines, handling ++ all of the combinations that can result. ++ ++ The opts arg has: ++ bit 0 set if all elements are same size (using sizes[0]) ++ bit 1 set if elements should be zeroed ++ */ ++ ++ size_t element_size; /* chunksize of each element, if all same */ ++ size_t contents_size; /* total size of elements */ ++ size_t array_size; /* request size of pointer array */ ++ void* mem; /* malloced aggregate space */ ++ mchunkptr p; /* corresponding chunk */ ++ size_t remainder_size; /* remaining bytes while splitting */ ++ void** marray; /* either "chunks" or malloced ptr array */ ++ mchunkptr array_chunk; /* chunk for malloced ptr array */ ++ flag_t was_enabled; /* to disable mmap */ ++ size_t size; ++ size_t i; ++ ++ /* compute array length, if needed */ ++ if (chunks != 0) { ++ if (n_elements == 0) ++ return chunks; /* nothing to do */ ++ marray = chunks; ++ array_size = 0; ++ } ++ else { ++ /* if empty req, must still return chunk representing empty array */ ++ if (n_elements == 0) ++ return (void**)internal_malloc(m, 0); ++ marray = 0; ++ array_size = request2size(n_elements * (sizeof(void*))); ++ } ++ ++ /* compute total element size */ ++ if (opts & 0x1) { /* all-same-size */ ++ element_size = request2size(*sizes); ++ contents_size = n_elements * element_size; ++ } ++ else { /* add up all the sizes */ ++ element_size = 0; ++ contents_size = 0; ++ for (i = 0; i != n_elements; ++i) ++ contents_size += request2size(sizes[i]); ++ } ++ ++ size = contents_size + array_size; ++ ++ /* ++ Allocate the aggregate chunk. First disable direct-mmapping so ++ malloc won't use it, since we would not be able to later ++ free/realloc space internal to a segregated mmap region. ++ */ ++ was_enabled = use_mmap(m); ++ disable_mmap(m); ++ mem = internal_malloc(m, size - CHUNK_OVERHEAD); ++ if (was_enabled) ++ enable_mmap(m); ++ if (mem == 0) ++ return 0; ++ ++ if (PREACTION(m)) return 0; ++ p = mem2chunk(mem); ++ remainder_size = chunksize(p); ++ ++ assert(!is_mmapped(p)); ++ ++ if (opts & 0x2) { /* optionally clear the elements */ ++ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); ++ } ++ ++ /* If not provided, allocate the pointer array as final part of chunk */ ++ if (marray == 0) { ++ size_t array_chunk_size; ++ array_chunk = chunk_plus_offset(p, contents_size); ++ array_chunk_size = remainder_size - contents_size; ++ marray = (void**) (chunk2mem(array_chunk)); ++ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); ++ remainder_size = contents_size; ++ } ++ ++ /* split out elements */ ++ for (i = 0; ; ++i) { ++ marray[i] = chunk2mem(p); ++ if (i != n_elements-1) { ++ if (element_size != 0) ++ size = element_size; ++ else ++ size = request2size(sizes[i]); ++ remainder_size -= size; ++ set_size_and_pinuse_of_inuse_chunk(m, p, size); ++ p = chunk_plus_offset(p, size); ++ } ++ else { /* the final element absorbs any overallocation slop */ ++ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); ++ break; ++ } ++ } ++ ++#if DEBUG ++ if (marray != chunks) { ++ /* final element must have exactly exhausted chunk */ ++ if (element_size != 0) { ++ assert(remainder_size == element_size); ++ } ++ else { ++ assert(remainder_size == request2size(sizes[i])); ++ } ++ check_inuse_chunk(m, mem2chunk(marray)); ++ } ++ for (i = 0; i != n_elements; ++i) ++ check_inuse_chunk(m, mem2chunk(marray[i])); ++ ++#endif /* DEBUG */ ++ ++ POSTACTION(m); ++ return marray; ++} ++ ++ ++/* -------------------------- public routines ---------------------------- */ ++ ++#if !ONLY_MSPACES ++ ++void* dlmalloc(size_t bytes) { ++ /* ++ Basic algorithm: ++ If a small request (< 256 bytes minus per-chunk overhead): ++ 1. If one exists, use a remainderless chunk in associated smallbin. ++ (Remainderless means that there are too few excess bytes to ++ represent as a chunk.) ++ 2. If it is big enough, use the dv chunk, which is normally the ++ chunk adjacent to the one used for the most recent small request. ++ 3. If one exists, split the smallest available chunk in a bin, ++ saving remainder in dv. ++ 4. If it is big enough, use the top chunk. ++ 5. If available, get memory from system and use it ++ Otherwise, for a large request: ++ 1. Find the smallest available binned chunk that fits, and use it ++ if it is better fitting than dv chunk, splitting if necessary. ++ 2. If better fitting than any binned chunk, use the dv chunk. ++ 3. If it is big enough, use the top chunk. ++ 4. If request size >= mmap threshold, try to directly mmap this chunk. ++ 5. If available, get memory from system and use it ++ ++ The ugly goto's here ensure that postaction occurs along all paths. ++ */ ++ ++ if (!PREACTION(gm)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = gm->smallmap >> idx; ++ ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(gm, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(gm, b, p, idx); ++ set_inuse_and_pinuse(gm, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb > gm->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(gm, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(gm, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(gm, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(gm, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } ++ ++ if (nb <= gm->dvsize) { ++ size_t rsize = gm->dvsize - nb; ++ mchunkptr p = gm->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); ++ gm->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = gm->dvsize; ++ gm->dvsize = 0; ++ gm->dv = 0; ++ set_inuse_and_pinuse(gm, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb < gm->topsize) { /* Split top */ ++ size_t rsize = gm->topsize -= nb; ++ mchunkptr p = gm->top; ++ mchunkptr r = gm->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(gm, gm->top); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ mem = sys_alloc(gm, nb); ++ ++ postaction: ++ POSTACTION(gm); ++ return mem; ++ } ++ ++ return 0; ++} ++ ++void dlfree(void* mem) { ++ /* ++ Consolidate freed chunks with preceding or succeeding bordering ++ free chunks, if they exist, and then place in a bin. Intermixed ++ with special cases for top, dv, mmapped chunks, and usage errors. ++ */ ++ ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++#else /* FOOTERS */ ++#define fm gm ++#endif /* FOOTERS */ ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } ++ ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++#if !FOOTERS ++#undef fm ++#endif /* FOOTERS */ ++} ++ ++void* dlcalloc(size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = dlmalloc(req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} ++ ++void* dlrealloc(void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return dlmalloc(bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ dlfree(oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if ! FOOTERS ++ mstate m = gm; ++#else /* FOOTERS */ ++ mstate m = get_mstate_for(mem2chunk(oldmem)); ++ if (!ok_magic(m)) { ++ USAGE_ERROR_ACTION(m, oldmem); ++ return 0; ++ } ++#endif /* FOOTERS */ ++ return internal_realloc(m, oldmem, bytes); ++ } ++} ++ ++void* dlmemalign(size_t alignment, size_t bytes) { ++ return internal_memalign(gm, alignment, bytes); ++} ++ ++void** dlindependent_calloc(size_t n_elements, size_t elem_size, ++ void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ return ialloc(gm, n_elements, &sz, 3, chunks); ++} ++ ++void** dlindependent_comalloc(size_t n_elements, size_t sizes[], ++ void* chunks[]) { ++ return ialloc(gm, n_elements, sizes, 0, chunks); ++} ++ ++void* dlvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, bytes); ++} ++ ++void* dlpvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); ++} ++ ++int dlmalloc_trim(size_t pad) { ++ int result = 0; ++ if (!PREACTION(gm)) { ++ result = sys_trim(gm, pad); ++ POSTACTION(gm); ++ } ++ return result; ++} ++ ++size_t dlmalloc_footprint(void) { ++ return gm->footprint; ++} ++ ++size_t dlmalloc_max_footprint(void) { ++ return gm->max_footprint; ++} ++ ++#if !NO_MALLINFO ++struct mallinfo dlmallinfo(void) { ++ return internal_mallinfo(gm); ++} ++#endif /* NO_MALLINFO */ ++ ++void dlmalloc_stats() { ++ internal_malloc_stats(gm); ++} ++ ++size_t dlmalloc_usable_size(void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ if (cinuse(p)) ++ return chunksize(p) - overhead_for(p); ++ } ++ return 0; ++} ++ ++int dlmallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} ++ ++#endif /* !ONLY_MSPACES */ ++ ++/* ----------------------------- user mspaces ---------------------------- */ ++ ++#if MSPACES ++ ++static mstate init_user_mstate(char* tbase, size_t tsize) { ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ mchunkptr mn; ++ mchunkptr msp = align_as_chunk(tbase); ++ mstate m = (mstate)(chunk2mem(msp)); ++ memset(m, 0, msize); ++ INITIAL_LOCK(&m->mutex); ++ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = m->footprint = m->max_footprint = tsize; ++ m->magic = mparams.magic; ++ m->mflags = mparams.default_mflags; ++ disable_contiguous(m); ++ init_bins(m); ++ mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); ++ check_top_chunk(m, m->top); ++ return m; ++} ++ ++mspace create_mspace(size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ ++ ++ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ size_t rs = ((capacity == 0)? mparams.granularity : ++ (capacity + TOP_FOOT_SIZE + msize)); ++ size_t tsize = granularity_align(rs); ++ char* tbase = (char*)(CALL_MMAP(tsize)); ++ if (tbase != CMFAIL) { ++ m = init_user_mstate(tbase, tsize); ++ set_segment_flags(&m->seg, IS_MMAPPED_BIT); ++ set_lock(m, locked); ++ } ++ } ++ return (mspace)m; ++} ++ ++mspace create_mspace_with_base(void* base, size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ ++ ++ if (capacity > msize + TOP_FOOT_SIZE && ++ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ m = init_user_mstate((char*)base, capacity); ++ set_segment_flags(&m->seg, EXTERN_BIT); ++ set_lock(m, locked); ++ } ++ return (mspace)m; ++} ++ ++size_t destroy_mspace(mspace msp) { ++ size_t freed = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ msegmentptr sp = &ms->seg; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ flag_t flag = get_segment_flags(sp); ++ sp = sp->next; ++ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && ++ CALL_MUNMAP(base, size) == 0) ++ freed += size; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return freed; ++} ++ ++/* ++ mspace versions of routines are near-clones of the global ++ versions. This is not so nice but better than the alternatives. ++*/ ++ ++ ++void* mspace_malloc(mspace msp, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (!PREACTION(ms)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = ms->smallmap >> idx; ++ ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(ms, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(ms, b, p, idx); ++ set_inuse_and_pinuse(ms, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb > ms->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(ms, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(ms, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(ms, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(ms, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } ++ ++ if (nb <= ms->dvsize) { ++ size_t rsize = ms->dvsize - nb; ++ mchunkptr p = ms->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); ++ ms->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = ms->dvsize; ++ ms->dvsize = 0; ++ ms->dv = 0; ++ set_inuse_and_pinuse(ms, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb < ms->topsize) { /* Split top */ ++ size_t rsize = ms->topsize -= nb; ++ mchunkptr p = ms->top; ++ mchunkptr r = ms->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(ms, ms->top); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ mem = sys_alloc(ms, nb); ++ ++ postaction: ++ POSTACTION(ms); ++ return mem; ++ } ++ ++ return 0; ++} ++ ++void mspace_free(mspace msp, void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate fm = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } ++ ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++} ++ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = internal_malloc(ms, req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} ++ ++void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return mspace_malloc(msp, bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ mspace_free(msp, oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if FOOTERS ++ mchunkptr p = mem2chunk(oldmem); ++ mstate ms = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate ms = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_realloc(ms, oldmem, bytes); ++ } ++} ++ ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_memalign(ms, alignment, bytes); ++} ++ ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, &sz, 3, chunks); ++} ++ ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, sizes, 0, chunks); ++} ++ ++int mspace_trim(mspace msp, size_t pad) { ++ int result = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ if (!PREACTION(ms)) { ++ result = sys_trim(ms, pad); ++ POSTACTION(ms); ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return result; ++} ++ ++void mspace_malloc_stats(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ internal_malloc_stats(ms); ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++} ++ ++size_t mspace_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} ++ ++ ++size_t mspace_max_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->max_footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} ++ ++ ++#if !NO_MALLINFO ++struct mallinfo mspace_mallinfo(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return internal_mallinfo(ms); ++} ++#endif /* NO_MALLINFO */ ++ ++int mspace_mallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} ++ ++#endif /* MSPACES */ ++ ++/* -------------------- Alternative MORECORE functions ------------------- */ ++ ++/* ++ Guidelines for creating a custom version of MORECORE: ++ ++ * For best performance, MORECORE should allocate in multiples of pagesize. ++ * MORECORE may allocate more memory than requested. (Or even less, ++ but this will usually result in a malloc failure.) ++ * MORECORE must not allocate memory when given argument zero, but ++ instead return one past the end address of memory from previous ++ nonzero call. ++ * For best performance, consecutive calls to MORECORE with positive ++ arguments should return increasing addresses, indicating that ++ space has been contiguously extended. ++ * Even though consecutive calls to MORECORE need not return contiguous ++ addresses, it must be OK for malloc'ed chunks to span multiple ++ regions in those cases where they do happen to be contiguous. ++ * MORECORE need not handle negative arguments -- it may instead ++ just return MFAIL when given negative arguments. ++ Negative arguments are always multiples of pagesize. MORECORE ++ must not misinterpret negative args as large positive unsigned ++ args. You can suppress all such calls from even occurring by defining ++ MORECORE_CANNOT_TRIM, ++ ++ As an example alternative MORECORE, here is a custom allocator ++ kindly contributed for pre-OSX macOS. It uses virtually but not ++ necessarily physically contiguous non-paged memory (locked in, ++ present and won't get swapped out). You can use it by uncommenting ++ this section, adding some #includes, and setting up the appropriate ++ defines above: ++ ++ #define MORECORE osMoreCore ++ ++ There is also a shutdown routine that should somehow be called for ++ cleanup upon program exit. ++ ++ #define MAX_POOL_ENTRIES 100 ++ #define MINIMUM_MORECORE_SIZE (64 * 1024U) ++ static int next_os_pool; ++ void *our_os_pools[MAX_POOL_ENTRIES]; ++ ++ void *osMoreCore(int size) ++ { ++ void *ptr = 0; ++ static void *sbrk_top = 0; ++ ++ if (size > 0) ++ { ++ if (size < MINIMUM_MORECORE_SIZE) ++ size = MINIMUM_MORECORE_SIZE; ++ if (CurrentExecutionLevel() == kTaskLevel) ++ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); ++ if (ptr == 0) ++ { ++ return (void *) MFAIL; ++ } ++ // save ptrs so they can be freed during cleanup ++ our_os_pools[next_os_pool] = ptr; ++ next_os_pool++; ++ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); ++ sbrk_top = (char *) ptr + size; ++ return ptr; ++ } ++ else if (size < 0) ++ { ++ // we don't currently support shrink behavior ++ return (void *) MFAIL; ++ } ++ else ++ { ++ return sbrk_top; ++ } ++ } ++ ++ // cleanup any allocated memory pools ++ // called as last thing before shutting down driver ++ ++ void osCleanupMem(void) ++ { ++ void **ptr; ++ ++ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) ++ if (*ptr) ++ { ++ PoolDeallocate(*ptr); ++ *ptr = 0; ++ } ++ } ++ ++*/ ++ ++ ++/* ----------------------------------------------------------------------- ++History: ++ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) ++ * Add max_footprint functions ++ * Ensure all appropriate literals are size_t ++ * Fix conditional compilation problem for some #define settings ++ * Avoid concatenating segments with the one provided ++ in create_mspace_with_base ++ * Rename some variables to avoid compiler shadowing warnings ++ * Use explicit lock initialization. ++ * Better handling of sbrk interference. ++ * Simplify and fix segment insertion, trimming and mspace_destroy ++ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x ++ * Thanks especially to Dennis Flanagan for help on these. ++ ++ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) ++ * Fix memalign brace error. ++ ++ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) ++ * Fix improper #endif nesting in C++ ++ * Add explicit casts needed for C++ ++ ++ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) ++ * Use trees for large bins ++ * Support mspaces ++ * Use segments to unify sbrk-based and mmap-based system allocation, ++ removing need for emulation on most platforms without sbrk. ++ * Default safety checks ++ * Optional footer checks. Thanks to William Robertson for the idea. ++ * Internal code refactoring ++ * Incorporate suggestions and platform-specific changes. ++ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, ++ Aaron Bachmann, Emery Berger, and others. ++ * Speed up non-fastbin processing enough to remove fastbins. ++ * Remove useless cfree() to avoid conflicts with other apps. ++ * Remove internal memcpy, memset. Compilers handle builtins better. ++ * Remove some options that no one ever used and rename others. ++ ++ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) ++ * Fix malloc_state bitmap array misdeclaration ++ ++ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) ++ * Allow tuning of FIRST_SORTED_BIN_SIZE ++ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. ++ * Better detection and support for non-contiguousness of MORECORE. ++ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger ++ * Bypass most of malloc if no frees. Thanks To Emery Berger. ++ * Fix freeing of old top non-contiguous chunk im sysmalloc. ++ * Raised default trim and map thresholds to 256K. ++ * Fix mmap-related #defines. Thanks to Lubos Lunak. ++ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. ++ * Branch-free bin calculation ++ * Default trim and mmap thresholds now 256K. ++ ++ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) ++ * Introduce independent_comalloc and independent_calloc. ++ Thanks to Michael Pachos for motivation and help. ++ * Make optional .h file available ++ * Allow > 2GB requests on 32bit systems. ++ * new WIN32 sbrk, mmap, munmap, lock code from . ++ Thanks also to Andreas Mueller , ++ and Anonymous. ++ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for ++ helping test this.) ++ * memalign: check alignment arg ++ * realloc: don't try to shift chunks backwards, since this ++ leads to more fragmentation in some programs and doesn't ++ seem to help in any others. ++ * Collect all cases in malloc requiring system memory into sysmalloc ++ * Use mmap as backup to sbrk ++ * Place all internal state in malloc_state ++ * Introduce fastbins (although similar to 2.5.1) ++ * Many minor tunings and cosmetic improvements ++ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK ++ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS ++ Thanks to Tony E. Bennett and others. ++ * Include errno.h to support default failure action. ++ ++ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) ++ * return null for negative arguments ++ * Added Several WIN32 cleanups from Martin C. Fong ++ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' ++ (e.g. WIN32 platforms) ++ * Cleanup header file inclusion for WIN32 platforms ++ * Cleanup code to avoid Microsoft Visual C++ compiler complaints ++ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing ++ memory allocation routines ++ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) ++ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to ++ usage of 'assert' in non-WIN32 code ++ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to ++ avoid infinite loop ++ * Always call 'fREe()' rather than 'free()' ++ ++ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) ++ * Fixed ordering problem with boundary-stamping ++ ++ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) ++ * Added pvalloc, as recommended by H.J. Liu ++ * Added 64bit pointer support mainly from Wolfram Gloger ++ * Added anonymously donated WIN32 sbrk emulation ++ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen ++ * malloc_extend_top: fix mask error that caused wastage after ++ foreign sbrks ++ * Add linux mremap support code from HJ Liu ++ ++ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) ++ * Integrated most documentation with the code. ++ * Add support for mmap, with help from ++ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Use last_remainder in more cases. ++ * Pack bins using idea from colin@nyx10.cs.du.edu ++ * Use ordered bins instead of best-fit threshold ++ * Eliminate block-local decls to simplify tracing and debugging. ++ * Support another case of realloc via move into top ++ * Fix error occurring when initial sbrk_base not word-aligned. ++ * Rely on page size for units instead of SBRK_UNIT to ++ avoid surprises about sbrk alignment conventions. ++ * Add mallinfo, mallopt. Thanks to Raymond Nijssen ++ (raymond@es.ele.tue.nl) for the suggestion. ++ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. ++ * More precautions for cases where other routines call sbrk, ++ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Added macros etc., allowing use in linux libc from ++ H.J. Lu (hjl@gnu.ai.mit.edu) ++ * Inverted this history list ++ ++ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) ++ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. ++ * Removed all preallocation code since under current scheme ++ the work required to undo bad preallocations exceeds ++ the work saved in good cases for most test programs. ++ * No longer use return list or unconsolidated bins since ++ no scheme using them consistently outperforms those that don't ++ given above changes. ++ * Use best fit for very large chunks to prevent some worst-cases. ++ * Added some support for debugging ++ ++ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) ++ * Removed footers when chunks are in use. Thanks to ++ Paul Wilson (wilson@cs.texas.edu) for the suggestion. ++ ++ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) ++ * Added malloc_trim, with help from Wolfram Gloger ++ (wmglo@Dent.MED.Uni-Muenchen.DE). ++ ++ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) ++ ++ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) ++ * realloc: try to expand in both directions ++ * malloc: swap order of clean-bin strategy; ++ * realloc: only conditionally expand backwards ++ * Try not to scavenge used bins ++ * Use bin counts as a guide to preallocation ++ * Occasionally bin return list chunks in first scan ++ * Add a few optimizations from colin@nyx10.cs.du.edu ++ ++ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) ++ * faster bin computation & slightly different binning ++ * merged all consolidations to one part of malloc proper ++ (eliminating old malloc_find_space & malloc_clean_bin) ++ * Scan 2 returns chunks (not just 1) ++ * Propagate failure in realloc if malloc returns 0 ++ * Add stuff to allow compilation on non-ANSI compilers ++ from kpv@research.att.com ++ ++ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) ++ * removed potential for odd address access in prev_chunk ++ * removed dependency on getpagesize.h ++ * misc cosmetics and a bit more internal documentation ++ * anticosmetics: mangled names in macros to evade debugger strangeness ++ * tested on sparc, hp-700, dec-mips, rs6000 ++ with gcc & native cc (hp, dec only) allowing ++ Detlefs & Zorn comparison study (in SIGPLAN Notices.) ++ ++ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) ++ * Based loosely on libg++-1.2X malloc. (It retains some of the overall ++ structure of old version, but most details differ.) ++ ++*/ +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-03-12 21:32:24.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ ++ ++#include ++ ++ ++#endif ++#ifdef __i386__ ++ ++#include ++ ++ ++#endif ++#ifdef __arm__ ++ ++#include ++ ++ ++#endif ++#ifdef __x86_64__ ++ ++#include ++ ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __arm64__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. ++ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. ++ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. ++ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef AARCH64 ++#define AARCH64 ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; ++ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif ++ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif ++ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif ++ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif ++ ++ ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif ++ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); ++ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); ++ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; ++ ++} ffi_raw_closure; ++ ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++#endif /* FFI_CLOSURES */ ++ ++#if FFI_GO_CLOSURES ++ ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; ++ ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); ++ ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); ++ ++#endif /* FFI_GO_CLOSURES */ ++ ++/* ---- Public interface definition -------------------------------------- */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); ++ ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ ++ ++#endif ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __arm__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. ++ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. ++ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. ++ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef ARM ++#define ARM ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; ++ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif ++ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif ++ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif ++ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif ++ ++ ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif ++ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); ++ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); ++ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; ++ ++} ffi_raw_closure; ++ ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++#endif /* FFI_CLOSURES */ ++ ++#if FFI_GO_CLOSURES ++ ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; ++ ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); ++ ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); ++ ++#endif /* FFI_GO_CLOSURES */ ++ ++/* ---- Public interface definition -------------------------------------- */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); ++ ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ ++ ++#endif ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-03-12 21:32:24.000000000 +0800 +@@ -0,0 +1,55 @@ ++/* ----------------------------------------------------------------------- ++ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. ++ ++ Conditionally assemble cfi directives. Only necessary for building libffi. ++ ----------------------------------------------------------------------- */ ++ ++#ifndef FFI_CFI_H ++#define FFI_CFI_H ++ ++#ifdef HAVE_AS_CFI_PSEUDO_OP ++ ++# define cfi_startproc .cfi_startproc ++# define cfi_endproc .cfi_endproc ++# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off ++# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg ++# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off ++# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off ++# define cfi_offset(reg, off) .cfi_offset reg, off ++# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off ++# define cfi_register(r1, r2) .cfi_register r1, r2 ++# define cfi_return_column(reg) .cfi_return_column reg ++# define cfi_restore(reg) .cfi_restore reg ++# define cfi_same_value(reg) .cfi_same_value reg ++# define cfi_undefined(reg) .cfi_undefined reg ++# define cfi_remember_state .cfi_remember_state ++# define cfi_restore_state .cfi_restore_state ++# define cfi_window_save .cfi_window_save ++# define cfi_personality(enc, exp) .cfi_personality enc, exp ++# define cfi_lsda(enc, exp) .cfi_lsda enc, exp ++# define cfi_escape(...) .cfi_escape __VA_ARGS__ ++ ++#else ++ ++# define cfi_startproc ++# define cfi_endproc ++# define cfi_def_cfa(reg, off) ++# define cfi_def_cfa_register(reg) ++# define cfi_def_cfa_offset(off) ++# define cfi_adjust_cfa_offset(off) ++# define cfi_offset(reg, off) ++# define cfi_rel_offset(reg, off) ++# define cfi_register(r1, r2) ++# define cfi_return_column(reg) ++# define cfi_restore(reg) ++# define cfi_same_value(reg) ++# define cfi_undefined(reg) ++# define cfi_remember_state ++# define cfi_restore_state ++# define cfi_window_save ++# define cfi_personality(enc, exp) ++# define cfi_lsda(enc, exp) ++# define cfi_escape(...) ++ ++#endif /* HAVE_AS_CFI_PSEUDO_OP */ ++#endif /* FFI_CFI_H */ +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-03-12 21:32:24.000000000 +0800 +@@ -0,0 +1,132 @@ ++/* ----------------------------------------------------------------------- ++ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green ++ Copyright (C) 2007 Free Software Foundation, Inc ++ Copyright (c) 1996 Red Hat, Inc. ++ ++ Common internal definitions and macros. Only necessary for building ++ libffi. ++ ----------------------------------------------------------------------- */ ++ ++#ifndef FFI_COMMON_H ++#define FFI_COMMON_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#include ++ ++/* Do not move this. Some versions of AIX are very picky about where ++ this is positioned. */ ++#ifdef __GNUC__ ++# if HAVE_ALLOCA_H ++# include ++# else ++ /* mingw64 defines this already in malloc.h. */ ++# ifndef alloca ++# define alloca __builtin_alloca ++# endif ++# endif ++# define MAYBE_UNUSED __attribute__((__unused__)) ++#else ++# define MAYBE_UNUSED ++# if HAVE_ALLOCA_H ++# include ++# else ++# ifdef _AIX ++# pragma alloca ++# else ++# ifndef alloca /* predefined by HP cc +Olibcalls */ ++# ifdef _MSC_VER ++# define alloca _alloca ++# else ++char *alloca (); ++# endif ++# endif ++# endif ++# endif ++#endif ++ ++/* Check for the existence of memcpy. */ ++#if STDC_HEADERS ++# include ++#else ++# ifndef HAVE_MEMCPY ++# define memcpy(d, s, n) bcopy ((s), (d), (n)) ++# endif ++#endif ++ ++#if defined(FFI_DEBUG) ++#include ++#endif ++ ++#ifdef FFI_DEBUG ++void ffi_assert(char *expr, char *file, int line); ++void ffi_stop_here(void); ++void ffi_type_test(ffi_type *a, char *file, int line); ++ ++#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) ++#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) ++#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) ++#else ++#define FFI_ASSERT(x) ++#define FFI_ASSERT_AT(x, f, l) ++#define FFI_ASSERT_VALID_TYPE(x) ++#endif ++ ++#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) ++#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) ++ ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif); ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, unsigned int ntotalargs); ++ ++/* Extended cif, used in callback from assembly routine */ ++typedef struct ++{ ++ ffi_cif *cif; ++ void *rvalue; ++ void **avalue; ++} extended_cif; ++ ++/* Terse sized type definitions. */ ++#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) ++typedef unsigned char UINT8; ++typedef signed char SINT8; ++typedef unsigned short UINT16; ++typedef signed short SINT16; ++typedef unsigned int UINT32; ++typedef signed int SINT32; ++# ifdef _MSC_VER ++typedef unsigned __int64 UINT64; ++typedef signed __int64 SINT64; ++# else ++# include ++typedef uint64_t UINT64; ++typedef int64_t SINT64; ++# endif ++#else ++typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); ++typedef signed int SINT8 __attribute__((__mode__(__QI__))); ++typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); ++typedef signed int SINT16 __attribute__((__mode__(__HI__))); ++typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); ++typedef signed int SINT32 __attribute__((__mode__(__SI__))); ++typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); ++typedef signed int SINT64 __attribute__((__mode__(__DI__))); ++#endif ++ ++typedef float FLOAT32; ++ ++#ifndef __GNUC__ ++#define __builtin_expect(x, expected_value) (x) ++#endif ++#define LIKELY(x) __builtin_expect(!!(x),1) ++#define UNLIKELY(x) __builtin_expect((x)!=0,0) ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __i386__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. ++ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. ++ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. ++ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_DARWIN ++#define X86_DARWIN ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; ++ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif ++ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif ++ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif ++ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif ++ ++ ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif ++ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); ++ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); ++ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; ++ ++} ffi_raw_closure; ++ ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++#endif /* FFI_CLOSURES */ ++ ++#if FFI_GO_CLOSURES ++ ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; ++ ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); ++ ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); ++ ++#endif /* FFI_GO_CLOSURES */ ++ ++/* ---- Public interface definition -------------------------------------- */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); ++ ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ ++ ++#endif ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __x86_64__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. ++ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. ++ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. ++ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_64 ++#define X86_64 ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; ++ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif ++ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif ++ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif ++ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif ++ ++ ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif ++ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); ++ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); ++ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; ++ ++} ffi_raw_closure; ++ ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++#endif /* FFI_CLOSURES */ ++ ++#if FFI_GO_CLOSURES ++ ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; ++ ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); ++ ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); ++ ++#endif /* FFI_GO_CLOSURES */ ++ ++/* ---- Public interface definition -------------------------------------- */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); ++ ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ ++ ++#endif ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-03-12 21:32:24.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ ++ ++#include ++ ++ ++#endif ++#ifdef __i386__ ++ ++#include ++ ++ ++#endif ++#ifdef __arm__ ++ ++#include ++ ++ ++#endif ++#ifdef __x86_64__ ++ ++#include ++ ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __arm64__ ++ ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ ++ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ ++ ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" ++ ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ ++ ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ ++ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ ++ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ ++ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 ++ ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 ++ ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 ++ ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++ ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ ++ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 ++ ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ ++ ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ ++ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 ++ ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 ++ ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ ++ ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 ++ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" ++ ++/* Name of package */ ++#define PACKAGE "libffi" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 ++ ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 ++ ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 ++ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.99999" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __arm__ ++ ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ ++ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ ++ ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" ++ ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ ++ ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ ++ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ ++ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ ++ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 ++ ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 ++ ++/* Define if your assembler supports .cfi_* directives. */ ++/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++ ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++ ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ ++ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 ++ ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ ++ ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ ++ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 ++ ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 ++ ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ ++ ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 ++ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" ++ ++/* Name of package */ ++#define PACKAGE "libffi" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 ++ ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 ++ ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 ++ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.99999" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __i386__ ++ ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ ++ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ ++ ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" ++ ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ ++ ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ ++ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 ++ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ ++ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ ++ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 ++ ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 ++ ++/* Define if your assembler supports .cfi_* directives. */ ++/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++ ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++ ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ ++ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ ++/* Define if your assembler supports PC relative relocs. */ ++#define HAVE_AS_X86_PCREL 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 ++ ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 ++ ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ ++ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 ++ ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 ++ ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ ++ ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 ++ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" ++ ++/* Name of package */ ++#define PACKAGE "libffi" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 ++ ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 ++ ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 ++ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.99999" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __x86_64__ ++ ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ ++ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ ++ ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" ++ ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ ++ ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ ++ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 ++ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ ++ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ ++ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 ++ ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 ++ ++/* Define if your assembler supports .cfi_* directives. */ ++/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++ ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++ ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ ++ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ ++/* Define if your assembler supports PC relative relocs. */ ++#define HAVE_AS_X86_PCREL 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 ++ ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 ++ ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ ++ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 ++ ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 ++ ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ ++ ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 ++ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" ++ ++/* Name of package */ ++#define PACKAGE "libffi" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 ++ ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 ++ ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 ++ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.99999" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-03-12 21:32:24.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ ++ ++#include ++ ++ ++#endif ++#ifdef __i386__ ++ ++#include ++ ++ ++#endif ++#ifdef __arm__ ++ ++#include ++ ++ ++#endif ++#ifdef __x86_64__ ++ ++#include ++ ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,78 @@ ++#ifdef __arm64__ ++ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef LIBFFI_ASM ++#ifdef __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++typedef unsigned long long ffi_arg; ++typedef signed long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++ ++typedef enum ffi_abi ++ { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++ } ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#if defined (__APPLE__) ++#define FFI_TRAMPOLINE_SIZE 20 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 ++#else ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE ++#endif ++#define FFI_NATIVE_RAW_API 0 ++ ++/* ---- Internal ---- */ ++ ++#if defined (__APPLE__) ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs ++#else ++/* iOS reserves x18 for the system. Disable Go closures until ++ a new static chain is chosen. */ ++#define FFI_GO_CLOSURES 1 ++#endif ++ ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,74 @@ ++#ifdef __arm__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012 Anthony Green ++ Copyright (c) 2010 CodeSourcery ++ Copyright (c) 1996-2003 Red Hat, Inc. ++ ++ Target configuration macros for ARM. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_VFP, ++ FFI_LAST_ABI, ++#ifdef __ARM_PCS_VFP ++ FFI_DEFAULT_ABI = FFI_VFP, ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV, ++#endif ++} ffi_abi; ++#endif ++ ++#define FFI_EXTRA_CIF_FIELDS \ ++ int vfp_used; \ ++ unsigned short vfp_reg_free, vfp_nargs; \ ++ signed char vfp_args[16] \ ++ ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++#define FFI_TRAMPOLINE_SIZE 12 ++#define FFI_NATIVE_RAW_API 0 ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,144 @@ ++#ifdef __i386__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++ Target configuration macros for x86 and x86-64. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++/* ---- System specific configurations ----------------------------------- */ ++ ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY ++ ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif ++ ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif ++ ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#ifndef _MSC_VER ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++#endif ++ ++/* ---- Generic type definitions ----------------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif ++ ++typedef enum ffi_abi { ++#if defined(X86_WIN64) ++ FFI_FIRST_ABI = 0, ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 ++ ++#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++ FFI_FIRST_ABI = 1, ++ FFI_UNIX64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_UNIX64 ++ ++#elif defined(X86_WIN32) ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_STDCALL = 2, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_MS_CDECL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_STDCALL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_MS_CDECL = 8, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++} ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++ ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ ++#if defined (X86_64) || defined(X86_WIN64) \ ++ || (defined (__x86_64__) && defined (X86_DARWIN)) ++# define FFI_TRAMPOLINE_SIZE 24 ++# define FFI_NATIVE_RAW_API 0 ++#else ++# define FFI_TRAMPOLINE_SIZE 12 ++# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif ++ ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-03-12 21:32:31.000000000 +0800 +@@ -0,0 +1,144 @@ ++#ifdef __x86_64__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++ Target configuration macros for x86 and x86-64. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++/* ---- System specific configurations ----------------------------------- */ ++ ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY ++ ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif ++ ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif ++ ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#ifndef _MSC_VER ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++#endif ++ ++/* ---- Generic type definitions ----------------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif ++ ++typedef enum ffi_abi { ++#if defined(X86_WIN64) ++ FFI_FIRST_ABI = 0, ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 ++ ++#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++ FFI_FIRST_ABI = 1, ++ FFI_UNIX64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_UNIX64 ++ ++#elif defined(X86_WIN32) ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_STDCALL = 2, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_MS_CDECL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_STDCALL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_MS_CDECL = 8, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++} ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++ ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ ++#if defined (X86_64) || defined(X86_WIN64) \ ++ || (defined (__x86_64__) && defined (X86_DARWIN)) ++# define FFI_TRAMPOLINE_SIZE 24 ++# define FFI_NATIVE_RAW_API 0 ++#else ++# define FFI_TRAMPOLINE_SIZE 12 ++# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif ++ ++#endif ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c +--- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,374 @@ ++/* ----------------------------------------------------------------------- ++ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. ++ ++ Cloned from raw_api.c ++ ++ Raw_api.c author: Kresten Krab Thorup ++ Java_raw_api.c author: Hans-J. Boehm ++ ++ $Id $ ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++/* This defines a Java- and 64-bit specific variant of the raw API. */ ++/* It assumes that "raw" argument blocks look like Java stacks on a */ ++/* 64-bit machine. Arguments that can be stored in a single stack */ ++/* stack slots (longs, doubles) occupy 128 bits, but only the first */ ++/* 64 bits are actually used. */ ++ ++#include ++#include ++#include ++ ++#if !defined(NO_JAVA_RAW_API) ++ ++size_t ++ffi_java_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; ++ ++ ffi_type **at = cif->arg_types; ++ ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++ switch((*at) -> type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ result += 2 * FFI_SIZEOF_JAVA_RAW; ++ break; ++ case FFI_TYPE_STRUCT: ++ /* No structure parameters in Java. */ ++ abort(); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ result += FFI_SIZEOF_JAVA_RAW; ++ } ++ } ++ ++ return result; ++} ++ ++ ++void ++ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++#if WORDS_BIGENDIAN ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + 3); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + 2); ++ break; ++ ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void *)raw; ++ raw += 2; ++ break; ++#endif ++ ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ *args = raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++ } ++ } ++ ++#else /* WORDS_BIGENDIAN */ ++ ++#if !PDP ++ ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ switch((*tp)->type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void*) raw; ++ raw += 2; ++ break; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ *args = (void*) raw++; ++ } ++#else /* FFI_SIZEOF_JAVA_RAW != 8 */ ++ *args = (void*) raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ ++ } ++ ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ ++ ++#endif /* WORDS_BIGENDIAN */ ++} ++ ++void ++ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT8*) (*args); ++#else ++ (raw++)->uint = *(UINT8*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_SINT8: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT8*) (*args); ++#else ++ (raw++)->sint = *(SINT8*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_UINT16: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT16*) (*args); ++#else ++ (raw++)->uint = *(UINT16*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_SINT16: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT16*) (*args); ++#else ++ (raw++)->sint = *(SINT16*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_UINT32: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT32*) (*args); ++#else ++ (raw++)->uint = *(UINT32*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_SINT32: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT32*) (*args); ++#else ++ (raw++)->sint = *(SINT32*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ (raw++)->flt = *(FLOAT32*) (*args); ++ break; ++ ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ raw->uint = *(UINT64*) (*args); ++ raw += 2; ++ break; ++#endif ++ ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; ++ ++ default: ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ FFI_ASSERT(0); /* Should have covered all cases */ ++#else ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif ++ } ++ } ++} ++ ++#if !FFI_NATIVE_RAW_API ++ ++static void ++ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) ++{ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue <<= 32; ++ break; ++ ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++#if FFI_SIZEOF_JAVA_RAW == 4 ++ case FFI_TYPE_POINTER: ++#endif ++ *(SINT64 *)rvalue <<= 32; ++ break; ++ ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ break; ++ } ++#endif ++} ++ ++static void ++ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) ++{ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue >>= 32; ++ break; ++ ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++ *(SINT64 *)rvalue >>= 32; ++ break; ++ ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ break; ++ } ++#endif ++} ++ ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ ffi_java_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_java_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++ ffi_java_rvalue_to_raw (cif, rvalue); ++} ++ ++#if FFI_CLOSURES /* base system provides closures */ ++ ++static void ++ffi_java_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ ++ ffi_java_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); ++ ffi_java_raw_to_rvalue (cif, rvalue); ++} ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; ++ ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_java_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } ++ ++ return status; ++} ++ ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); ++} ++ ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ ++#endif /* !NO_JAVA_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c +--- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,242 @@ ++/* ----------------------------------------------------------------------- ++ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green ++ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++#include ++ ++/* Round up to FFI_SIZEOF_ARG. */ ++ ++#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) ++ ++/* Perform machine independent initialization of aggregate type ++ specifications. */ ++ ++static ffi_status initialize_aggregate(ffi_type *arg) ++{ ++ ffi_type **ptr; ++ ++ if (UNLIKELY(arg == NULL || arg->elements == NULL)) ++ return FFI_BAD_TYPEDEF; ++ ++ arg->size = 0; ++ arg->alignment = 0; ++ ++ ptr = &(arg->elements[0]); ++ ++ if (UNLIKELY(ptr == 0)) ++ return FFI_BAD_TYPEDEF; ++ ++ while ((*ptr) != NULL) ++ { ++ if (UNLIKELY(((*ptr)->size == 0) ++ && (initialize_aggregate((*ptr)) != FFI_OK))) ++ return FFI_BAD_TYPEDEF; ++ ++ /* Perform a sanity check on the argument type */ ++ FFI_ASSERT_VALID_TYPE(*ptr); ++ ++ arg->size = ALIGN(arg->size, (*ptr)->alignment); ++ arg->size += (*ptr)->size; ++ ++ arg->alignment = (arg->alignment > (*ptr)->alignment) ? ++ arg->alignment : (*ptr)->alignment; ++ ++ ptr++; ++ } ++ ++ /* Structure size includes tail padding. This is important for ++ structures that fit in one register on ABIs like the PowerPC64 ++ Linux ABI that right justify small structs in a register. ++ It's also needed for nested structure layout, for example ++ struct A { long a; char b; }; struct B { struct A x; char y; }; ++ should find y at an offset of 2*sizeof(long) and result in a ++ total size of 3*sizeof(long). */ ++ arg->size = ALIGN (arg->size, arg->alignment); ++ ++ /* On some targets, the ABI defines that structures have an additional ++ alignment beyond the "natural" one based on their elements. */ ++#ifdef FFI_AGGREGATE_ALIGNMENT ++ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) ++ arg->alignment = FFI_AGGREGATE_ALIGNMENT; ++#endif ++ ++ if (arg->size == 0) ++ return FFI_BAD_TYPEDEF; ++ else ++ return FFI_OK; ++} ++ ++#ifndef __CRIS__ ++/* The CRIS ABI specifies structure elements to have byte ++ alignment only, so it completely overrides this functions, ++ which assumes "natural" alignment and padding. */ ++ ++/* Perform machine independent ffi_cif preparation, then call ++ machine dependent routine. */ ++ ++/* For non variadic functions isvariadic should be 0 and ++ nfixedargs==ntotalargs. ++ ++ For variadic calls, isvariadic should be 1 and nfixedargs ++ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ ++ ++ ++ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ unsigned bytes = 0; ++ unsigned int i; ++ ffi_type **ptr; ++ ++ FFI_ASSERT(cif != NULL); ++ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); ++ FFI_ASSERT(nfixedargs <= ntotalargs); ++ ++ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) ++ return FFI_BAD_ABI; ++ ++ cif->abi = abi; ++ cif->arg_types = atypes; ++ cif->nargs = ntotalargs; ++ cif->rtype = rtype; ++ ++ cif->flags = 0; ++ ++#if HAVE_LONG_DOUBLE_VARIANT ++ ffi_prep_types (abi); ++#endif ++ ++ /* Initialize the return type if necessary */ ++ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; ++ ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if (rtype->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the return type */ ++ FFI_ASSERT_VALID_TYPE(cif->rtype); ++ ++ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ /* Make space for the return structure pointer */ ++ if (cif->rtype->type == FFI_TYPE_STRUCT ++#ifdef TILE ++ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) ++#endif ++#ifdef XTENSA ++ && (cif->rtype->size > 16) ++#endif ++#ifdef NIOS2 ++ && (cif->rtype->size > 8) ++#endif ++ ) ++ bytes = STACK_ARG_SIZE(sizeof(void*)); ++#endif ++ ++ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) ++ { ++ ++ /* Initialize any uninitialized aggregate type definitions */ ++ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; ++ ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if ((*ptr)->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the argument type, do this ++ check after the initialization. */ ++ FFI_ASSERT_VALID_TYPE(*ptr); ++ ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ { ++ /* Add any padding if necessary */ ++ if (((*ptr)->alignment - 1) & bytes) ++ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); ++ ++#ifdef TILE ++ if (bytes < 10 * FFI_SIZEOF_ARG && ++ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) ++ { ++ /* An argument is never split between the 10 parameter ++ registers and the stack. */ ++ bytes = 10 * FFI_SIZEOF_ARG; ++ } ++#endif ++#ifdef XTENSA ++ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) ++ bytes = 6*4; ++#endif ++ ++ bytes += STACK_ARG_SIZE((*ptr)->size); ++ } ++#endif ++ } ++ ++ cif->bytes = bytes; ++ ++ /* Perform machine dependent cif processing */ ++#ifdef FFI_TARGET_SPECIFIC_VARIADIC ++ if (isvariadic) ++ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); ++#endif ++ ++ return ffi_prep_cif_machdep(cif); ++} ++#endif /* not __CRIS__ */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); ++} ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); ++} ++ ++#if FFI_CLOSURES ++ ++ffi_status ++ffi_prep_closure (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data) ++{ ++ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); ++} ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c +--- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,267 @@ ++/* ----------------------------------------------------------------------- ++ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. ++ ++ Author: Kresten Krab Thorup ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++/* This file defines generic functions for use with the raw api. */ ++ ++#include ++#include ++ ++#if !FFI_NO_RAW_API ++ ++size_t ++ffi_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; ++ ++ ffi_type **at = cif->arg_types; ++ ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*at)->type == FFI_TYPE_STRUCT) ++ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); ++ else ++#endif ++ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); ++ } ++ ++ return result; ++} ++ ++ ++void ++ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++#if WORDS_BIGENDIAN ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); ++ break; ++ ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); ++ break; ++#endif ++ ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ *args = (raw++)->ptr; ++ break; ++#endif ++ ++ case FFI_TYPE_COMPLEX: ++ *args = (raw++)->ptr; ++ break; ++ ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ default: ++ *args = raw; ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } ++ ++#else /* WORDS_BIGENDIAN */ ++ ++#if !PDP ++ ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*tp)->type == FFI_TYPE_STRUCT) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++#endif ++ if ((*tp)->type == FFI_TYPE_COMPLEX) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++ { ++ *args = (void*) raw; ++ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); ++ } ++ } ++ ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ ++ ++#endif /* WORDS_BIGENDIAN */ ++} ++ ++void ++ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ (raw++)->uint = *(UINT8*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT8: ++ (raw++)->sint = *(SINT8*) (*args); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ (raw++)->uint = *(UINT16*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ (raw++)->sint = *(SINT16*) (*args); ++ break; ++ ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ (raw++)->uint = *(UINT32*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT32: ++ (raw++)->sint = *(SINT32*) (*args); ++ break; ++#endif ++ ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ (raw++)->ptr = *args; ++ break; ++#endif ++ ++ case FFI_TYPE_COMPLEX: ++ (raw++)->ptr = *args; ++ break; ++ ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; ++ ++ default: ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } ++} ++ ++#if !FFI_NATIVE_RAW_API ++ ++ ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ ++ ++void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++} ++ ++#if FFI_CLOSURES /* base system provides closures */ ++ ++static void ++ffi_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ ++ ffi_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, raw, cl->user_data); ++} ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; ++ ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } ++ ++ return status; ++} ++ ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ ++ ++#if FFI_CLOSURES ++ ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); ++} ++ ++#endif /* FFI_CLOSURES */ ++ ++#endif /* !FFI_NO_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c +--- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/types.c 2015-03-12 21:34:00.000000000 +0800 +@@ -0,0 +1,106 @@ ++/* ----------------------------------------------------------------------- ++ types.c - Copyright (c) 1996, 1998 Red Hat, Inc. ++ ++ Predefined ffi_types needed by libffi. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++/* Hide the basic type definitions from the header file, so that we ++ can redefine them here as "const". */ ++#define LIBFFI_HIDE_BASIC_TYPES ++ ++#include ++#include ++ ++/* Type definitions */ ++ ++#define FFI_TYPEDEF(name, type, id, maybe_const)\ ++struct struct_align_##name { \ ++ char c; \ ++ type x; \ ++}; \ ++maybe_const ffi_type ffi_type_##name = { \ ++ sizeof(type), \ ++ offsetof(struct struct_align_##name, x), \ ++ id, NULL \ ++} ++ ++#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ ++static ffi_type *ffi_elements_complex_##name [2] = { \ ++ (ffi_type *)(&ffi_type_##name), NULL \ ++}; \ ++struct struct_align_complex_##name { \ ++ char c; \ ++ _Complex type x; \ ++}; \ ++maybe_const ffi_type ffi_type_complex_##name = { \ ++ sizeof(_Complex type), \ ++ offsetof(struct struct_align_complex_##name, x), \ ++ FFI_TYPE_COMPLEX, \ ++ (ffi_type **)ffi_elements_complex_##name \ ++} ++ ++/* Size and alignment are fake here. They must not be 0. */ ++const ffi_type ffi_type_void = { ++ 1, 1, FFI_TYPE_VOID, NULL ++}; ++ ++FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); ++FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); ++FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); ++FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); ++FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); ++FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); ++FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); ++FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); ++ ++FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); ++ ++FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); ++FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); ++ ++#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ ++#define FFI_LDBL_CONST const ++#else ++#define FFI_LDBL_CONST ++#endif ++ ++#ifdef __alpha__ ++/* Even if we're not configured to default to 128-bit long double, ++ maintain binary compatibility, as -mlong-double-128 can be used ++ at any time. */ ++/* Validate the hard-coded number below. */ ++# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; ++#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_COMPLEX_TYPEDEF(float, float, const); ++FFI_COMPLEX_TYPEDEF(double, double, const); ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); ++#endif ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi.c modified/Modules/_ctypes/libffi_ios/x86/ffi.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi.c 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,729 @@ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. ++ Copyright (c) 2002 Ranjit Mathew ++ Copyright (c) 2002 Bo Thorsen ++ Copyright (c) 2002 Roger Sayle ++ Copyright (C) 2008, 2010 Free Software Foundation, Inc. ++ ++ x86 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#ifndef __x86_64__ ++#include ++#include ++#include ++#include "internal.h" ++ ++/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; ++ all further uses in this file will refer to the 80-bit type. */ ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++# if FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++#else ++# undef FFI_TYPE_LONGDOUBLE ++# define FFI_TYPE_LONGDOUBLE 4 ++#endif ++ ++#if defined(__GNUC__) && !defined(__declspec) ++# define __declspec(x) __attribute__((x)) ++#endif ++ ++/* Perform machine dependent cif processing. */ ++ffi_status FFI_HIDDEN ++ffi_prep_cif_machdep(ffi_cif *cif) ++{ ++ size_t bytes = 0; ++ int i, n, flags, cabi = cif->abi; ++ ++ switch (cabi) ++ { ++ case FFI_SYSV: ++ case FFI_STDCALL: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_MS_CDECL: ++ case FFI_PASCAL: ++ case FFI_REGISTER: ++ break; ++ default: ++ return FFI_BAD_ABI; ++ } ++ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = X86_RET_VOID; ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = X86_RET_FLOAT; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = X86_RET_DOUBLE; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ flags = X86_RET_LDOUBLE; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = X86_RET_UINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = X86_RET_UINT16; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = X86_RET_SINT8; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = X86_RET_SINT16; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ flags = X86_RET_INT32; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = X86_RET_INT64; ++ break; ++ case FFI_TYPE_STRUCT: ++#ifndef X86 ++ /* ??? This should be a different ABI rather than an ifdef. */ ++ if (cif->rtype->size == 1) ++ flags = X86_RET_STRUCT_1B; ++ else if (cif->rtype->size == 2) ++ flags = X86_RET_STRUCT_2B; ++ else if (cif->rtype->size == 4) ++ flags = X86_RET_INT32; ++ else if (cif->rtype->size == 8) ++ flags = X86_RET_INT64; ++ else ++#endif ++ { ++ do_struct: ++ switch (cabi) ++ { ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_STDCALL: ++ case FFI_MS_CDECL: ++ flags = X86_RET_STRUCTARG; ++ break; ++ default: ++ flags = X86_RET_STRUCTPOP; ++ break; ++ } ++ /* Allocate space for return value pointer. */ ++ bytes += ALIGN (sizeof(void*), FFI_SIZEOF_ARG); ++ } ++ break; ++ case FFI_TYPE_COMPLEX: ++ switch (cif->rtype->elements[0]->type) ++ { ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ goto do_struct; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ flags = X86_RET_INT64; ++ break; ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT16: ++ flags = X86_RET_INT32; ++ break; ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT8: ++ flags = X86_RET_STRUCT_2B; ++ break; ++ default: ++ return FFI_BAD_TYPEDEF; ++ } ++ break; ++ default: ++ return FFI_BAD_TYPEDEF; ++ } ++ cif->flags = flags; ++ ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *t = cif->arg_types[i]; ++ ++ bytes = ALIGN (bytes, t->alignment); ++ bytes += ALIGN (t->size, FFI_SIZEOF_ARG); ++ } ++ cif->bytes = ALIGN (bytes, 16); ++ ++ return FFI_OK; ++} ++ ++static ffi_arg ++extend_basic_type(void *arg, int type) ++{ ++ switch (type) ++ { ++ case FFI_TYPE_SINT8: ++ return *(SINT8 *)arg; ++ case FFI_TYPE_UINT8: ++ return *(UINT8 *)arg; ++ case FFI_TYPE_SINT16: ++ return *(SINT16 *)arg; ++ case FFI_TYPE_UINT16: ++ return *(UINT16 *)arg; ++ ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ case FFI_TYPE_FLOAT: ++ return *(UINT32 *)arg; ++ ++ default: ++ abort(); ++ } ++} ++ ++struct call_frame ++{ ++ void *ebp; /* 0 */ ++ void *retaddr; /* 4 */ ++ void (*fn)(void); /* 8 */ ++ int flags; /* 12 */ ++ void *rvalue; /* 16 */ ++ unsigned regs[3]; /* 20-28 */ ++}; ++ ++struct abi_params ++{ ++ int dir; /* parameter growth direction */ ++ int static_chain; /* the static chain register used by gcc */ ++ int nregs; /* number of register parameters */ ++ int regs[3]; ++}; ++ ++static const struct abi_params abi_params[FFI_LAST_ABI] = { ++ [FFI_SYSV] = { 1, R_ECX, 0 }, ++ [FFI_THISCALL] = { 1, R_EAX, 1, { R_ECX } }, ++ [FFI_FASTCALL] = { 1, R_EAX, 2, { R_ECX, R_EDX } }, ++ [FFI_STDCALL] = { 1, R_ECX, 0 }, ++ [FFI_PASCAL] = { -1, R_ECX, 0 }, ++ /* ??? No defined static chain; gcc does not support REGISTER. */ ++ [FFI_REGISTER] = { -1, R_ECX, 3, { R_EAX, R_EDX, R_ECX } }, ++ [FFI_MS_CDECL] = { 1, R_ECX, 0 } ++}; ++ ++extern void ffi_call_i386(struct call_frame *, char *) ++#if HAVE_FASTCALL ++ __declspec(fastcall) ++#endif ++ FFI_HIDDEN; ++ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ size_t rsize, bytes; ++ struct call_frame *frame; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int flags, cabi, i, n, dir, narg_reg; ++ const struct abi_params *pabi; ++ ++ flags = cif->flags; ++ cabi = cif->abi; ++ pabi = &abi_params[cabi]; ++ dir = pabi->dir; ++ ++ rsize = 0; ++ if (rvalue == NULL) ++ { ++ switch (flags) ++ { ++ case X86_RET_FLOAT: ++ case X86_RET_DOUBLE: ++ case X86_RET_LDOUBLE: ++ case X86_RET_STRUCTPOP: ++ case X86_RET_STRUCTARG: ++ /* The float cases need to pop the 387 stack. ++ The struct cases need to pass a valid pointer to the callee. */ ++ rsize = cif->rtype->size; ++ break; ++ default: ++ /* We can pretend that the callee returns nothing. */ ++ flags = X86_RET_VOID; ++ break; ++ } ++ } ++ ++ bytes = cif->bytes; ++ stack = alloca(bytes + sizeof(*frame) + rsize); ++ argp = (dir < 0 ? stack + bytes : stack); ++ frame = (struct call_frame *)(stack + bytes); ++ if (rsize) ++ rvalue = frame + 1; ++ ++ frame->fn = fn; ++ frame->flags = flags; ++ frame->rvalue = rvalue; ++ frame->regs[pabi->static_chain] = (unsigned)closure; ++ ++ narg_reg = 0; ++ switch (flags) ++ { ++ case X86_RET_STRUCTARG: ++ /* The pointer is passed as the first argument. */ ++ if (pabi->nregs > 0) ++ { ++ frame->regs[pabi->regs[0]] = (unsigned)rvalue; ++ narg_reg = 1; ++ break; ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ *(void **)argp = rvalue; ++ argp += sizeof(void *); ++ break; ++ } ++ ++ arg_types = cif->arg_types; ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ void *valp = avalue[i]; ++ size_t z = ty->size; ++ int t = ty->type; ++ ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) ++ { ++ ffi_arg val = extend_basic_type (valp, t); ++ ++ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) ++ frame->regs[pabi->regs[narg_reg++]] = val; ++ else if (dir < 0) ++ { ++ argp -= 4; ++ *(ffi_arg *)argp = val; ++ } ++ else ++ { ++ *(ffi_arg *)argp = val; ++ argp += 4; ++ } ++ } ++ else ++ { ++ size_t za = ALIGN (z, FFI_SIZEOF_ARG); ++ size_t align = FFI_SIZEOF_ARG; ++ ++ /* Alignment rules for arguments are quite complex. Vectors and ++ structures with 16 byte alignment get it. Note that long double ++ on Darwin does have 16 byte alignment, and does not get this ++ alignment if passed directly; a structure with a long double ++ inside, however, would get 16 byte alignment. Since libffi does ++ not support vectors, we need non concern ourselves with other ++ cases. */ ++ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) ++ align = 16; ++ ++ if (dir < 0) ++ { ++ /* ??? These reverse argument ABIs are probably too old ++ to have cared about alignment. Someone should check. */ ++ argp -= za; ++ memcpy (argp, valp, z); ++ } ++ else ++ { ++ argp = (char *)ALIGN (argp, align); ++ memcpy (argp, valp, z); ++ argp += za; ++ } ++ } ++ } ++ FFI_ASSERT (dir > 0 || argp == stack); ++ ++ ffi_call_i386 (frame, stack); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++ ++/** private members **/ ++ ++void FFI_HIDDEN ffi_closure_i386(void); ++void FFI_HIDDEN ffi_closure_STDCALL(void); ++void FFI_HIDDEN ffi_closure_REGISTER(void); ++ ++struct closure_frame ++{ ++ unsigned rettemp[4]; /* 0 */ ++ unsigned regs[3]; /* 16-24 */ ++ ffi_cif *cif; /* 28 */ ++ void (*fun)(ffi_cif*,void*,void**,void*); /* 32 */ ++ void *user_data; /* 36 */ ++}; ++ ++int FFI_HIDDEN ++#if HAVE_FASTCALL ++__declspec(fastcall) ++#endif ++ffi_closure_inner (struct closure_frame *frame, char *stack) ++{ ++ ffi_cif *cif = frame->cif; ++ int cabi, i, n, flags, dir, narg_reg; ++ const struct abi_params *pabi; ++ ffi_type **arg_types; ++ char *argp; ++ void *rvalue; ++ void **avalue; ++ ++ cabi = cif->abi; ++ flags = cif->flags; ++ narg_reg = 0; ++ rvalue = frame->rettemp; ++ pabi = &abi_params[cabi]; ++ dir = pabi->dir; ++ argp = (dir < 0 ? stack + cif->bytes : stack); ++ ++ switch (flags) ++ { ++ case X86_RET_STRUCTARG: ++ if (pabi->nregs > 0) ++ { ++ rvalue = (void *)frame->regs[pabi->regs[0]]; ++ narg_reg = 1; ++ frame->rettemp[0] = (unsigned)rvalue; ++ break; ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ rvalue = *(void **)argp; ++ argp += sizeof(void *); ++ frame->rettemp[0] = (unsigned)rvalue; ++ break; ++ } ++ ++ n = cif->nargs; ++ avalue = alloca(sizeof(void *) * n); ++ ++ arg_types = cif->arg_types; ++ for (i = 0; i < n; ++i) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; ++ int t = ty->type; ++ void *valp; ++ ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) ++ { ++ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) ++ valp = &frame->regs[pabi->regs[narg_reg++]]; ++ else if (dir < 0) ++ { ++ argp -= 4; ++ valp = argp; ++ } ++ else ++ { ++ valp = argp; ++ argp += 4; ++ } ++ } ++ else ++ { ++ size_t za = ALIGN (z, FFI_SIZEOF_ARG); ++ size_t align = FFI_SIZEOF_ARG; ++ ++ /* See the comment in ffi_call_int. */ ++ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) ++ align = 16; ++ ++ if (dir < 0) ++ { ++ /* ??? These reverse argument ABIs are probably too old ++ to have cared about alignment. Someone should check. */ ++ argp -= za; ++ valp = argp; ++ } ++ else ++ { ++ argp = (char *)ALIGN (argp, align); ++ valp = argp; ++ argp += za; ++ } ++ } ++ ++ avalue[i] = valp; ++ } ++ ++ frame->fun (cif, rvalue, avalue, frame->user_data); ++ ++ if (cabi == FFI_STDCALL) ++ return flags + (cif->bytes << X86_RET_POP_SHIFT); ++ else ++ return flags; ++} ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ char *tramp = closure->tramp; ++ void (*dest)(void); ++ int op = 0xb8; /* movl imm, %eax */ ++ ++ switch (cif->abi) ++ { ++ case FFI_SYSV: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_MS_CDECL: ++ dest = ffi_closure_i386; ++ break; ++ case FFI_STDCALL: ++ case FFI_PASCAL: ++ dest = ffi_closure_STDCALL; ++ break; ++ case FFI_REGISTER: ++ dest = ffi_closure_REGISTER; ++ op = 0x68; /* pushl imm */ ++ default: ++ return FFI_BAD_ABI; ++ } ++ ++ /* movl or pushl immediate. */ ++ tramp[0] = op; ++ *(void **)(tramp + 1) = codeloc; ++ ++ /* jmp dest */ ++ tramp[5] = 0xe9; ++ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++void FFI_HIDDEN ffi_go_closure_EAX(void); ++void FFI_HIDDEN ffi_go_closure_ECX(void); ++void FFI_HIDDEN ffi_go_closure_STDCALL(void); ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) ++{ ++ void (*dest)(void); ++ ++ switch (cif->abi) ++ { ++ case FFI_SYSV: ++ case FFI_MS_CDECL: ++ dest = ffi_go_closure_ECX; ++ break; ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ dest = ffi_go_closure_EAX; ++ break; ++ case FFI_STDCALL: ++ case FFI_PASCAL: ++ dest = ffi_go_closure_STDCALL; ++ break; ++ case FFI_REGISTER: ++ default: ++ return FFI_BAD_ABI; ++ } ++ ++ closure->tramp = dest; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++/* ------- Native raw API support -------------------------------- */ ++ ++#if !FFI_NO_RAW_API ++ ++void FFI_HIDDEN ffi_closure_raw_SYSV(void); ++void FFI_HIDDEN ffi_closure_raw_THISCALL(void); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure *closure, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ char *tramp = closure->tramp; ++ void (*dest)(void); ++ int i; ++ ++ /* We currently don't support certain kinds of arguments for raw ++ closures. This should be implemented by a separate assembly ++ language routine, since it would require argument processing, ++ something we don't do now for performance. */ ++ for (i = cif->nargs-1; i >= 0; i--) ++ switch (cif->arg_types[i]->type) ++ { ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_LONGDOUBLE: ++ return FFI_BAD_TYPEDEF; ++ } ++ ++ switch (cif->abi) ++ { ++ case FFI_THISCALL: ++ dest = ffi_closure_raw_THISCALL; ++ break; ++ case FFI_SYSV: ++ dest = ffi_closure_raw_SYSV; ++ break; ++ default: ++ return FFI_BAD_ABI; ++ } ++ ++ /* movl imm, %eax. */ ++ tramp[0] = 0xb8; ++ *(void **)(tramp + 1) = codeloc; ++ ++ /* jmp dest */ ++ tramp[5] = 0xe9; ++ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++void ++ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *avalue) ++{ ++ size_t rsize, bytes; ++ struct call_frame *frame; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int flags, cabi, i, n, narg_reg; ++ const struct abi_params *pabi; ++ ++ flags = cif->flags; ++ cabi = cif->abi; ++ pabi = &abi_params[cabi]; ++ ++ rsize = 0; ++ if (rvalue == NULL) ++ { ++ switch (flags) ++ { ++ case X86_RET_FLOAT: ++ case X86_RET_DOUBLE: ++ case X86_RET_LDOUBLE: ++ case X86_RET_STRUCTPOP: ++ case X86_RET_STRUCTARG: ++ /* The float cases need to pop the 387 stack. ++ The struct cases need to pass a valid pointer to the callee. */ ++ rsize = cif->rtype->size; ++ break; ++ default: ++ /* We can pretend that the callee returns nothing. */ ++ flags = X86_RET_VOID; ++ break; ++ } ++ } ++ ++ bytes = cif->bytes; ++ argp = stack = alloca(bytes + sizeof(*frame) + rsize); ++ frame = (struct call_frame *)(stack + bytes); ++ if (rsize) ++ rvalue = frame + 1; ++ ++ frame->fn = fn; ++ frame->flags = flags; ++ frame->rvalue = rvalue; ++ ++ narg_reg = 0; ++ switch (flags) ++ { ++ case X86_RET_STRUCTARG: ++ /* The pointer is passed as the first argument. */ ++ if (pabi->nregs > 0) ++ { ++ frame->regs[pabi->regs[0]] = (unsigned)rvalue; ++ narg_reg = 1; ++ break; ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ *(void **)argp = rvalue; ++ argp += sizeof(void *); ++ bytes -= sizeof(void *); ++ break; ++ } ++ ++ arg_types = cif->arg_types; ++ for (i = 0, n = cif->nargs; narg_reg < pabi->nregs && i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; ++ int t = ty->type; ++ ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT && t != FFI_TYPE_FLOAT) ++ { ++ ffi_arg val = extend_basic_type (avalue, t); ++ frame->regs[pabi->regs[narg_reg++]] = val; ++ z = FFI_SIZEOF_ARG; ++ } ++ else ++ { ++ memcpy (argp, avalue, z); ++ z = ALIGN (z, FFI_SIZEOF_ARG); ++ argp += z; ++ } ++ avalue += z; ++ bytes -= z; ++ } ++ if (i < n) ++ memcpy (argp, avalue, bytes); ++ ++ ffi_call_i386 (frame, stack); ++} ++#endif /* !FFI_NO_RAW_API */ ++#endif /* !__x86_64__ */ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi64.c 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,824 @@ ++/* ----------------------------------------------------------------------- ++ ffi64.c - Copyright (c) 2013 The Written Word, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2008, 2010 Red Hat, Inc. ++ Copyright (c) 2002, 2007 Bo Thorsen ++ ++ x86-64 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include "internal64.h" ++ ++#ifdef __x86_64__ ++ ++#define MAX_GPR_REGS 6 ++#define MAX_SSE_REGS 8 ++ ++#if defined(__INTEL_COMPILER) ++#include "xmmintrin.h" ++#define UINT128 __m128 ++#else ++#if defined(__SUNPRO_C) ++#include ++#define UINT128 __m128i ++#else ++#define UINT128 __int128_t ++#endif ++#endif ++ ++union big_int_union ++{ ++ UINT32 i32; ++ UINT64 i64; ++ UINT128 i128; ++}; ++ ++struct register_args ++{ ++ /* Registers for argument passing. */ ++ UINT64 gpr[MAX_GPR_REGS]; ++ union big_int_union sse[MAX_SSE_REGS]; ++ UINT64 rax; /* ssecount */ ++ UINT64 r10; /* static chain */ ++}; ++ ++extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void)) FFI_HIDDEN; ++ ++/* All reference to register classes here is identical to the code in ++ gcc/config/i386/i386.c. Do *not* change one without the other. */ ++ ++/* Register class used for passing given 64bit part of the argument. ++ These represent classes as documented by the PS ABI, with the ++ exception of SSESF, SSEDF classes, that are basically SSE class, ++ just gcc will use SF or DFmode move instead of DImode to avoid ++ reformatting penalties. ++ ++ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves ++ whenever possible (upper half does contain padding). */ ++enum x86_64_reg_class ++ { ++ X86_64_NO_CLASS, ++ X86_64_INTEGER_CLASS, ++ X86_64_INTEGERSI_CLASS, ++ X86_64_SSE_CLASS, ++ X86_64_SSESF_CLASS, ++ X86_64_SSEDF_CLASS, ++ X86_64_SSEUP_CLASS, ++ X86_64_X87_CLASS, ++ X86_64_X87UP_CLASS, ++ X86_64_COMPLEX_X87_CLASS, ++ X86_64_MEMORY_CLASS ++ }; ++ ++#define MAX_CLASSES 4 ++ ++#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) ++ ++/* x86-64 register passing implementation. See x86-64 ABI for details. Goal ++ of this code is to classify each 8bytes of incoming argument by the register ++ class and assign registers accordingly. */ ++ ++/* Return the union class of CLASS1 and CLASS2. ++ See the x86-64 PS ABI for details. */ ++ ++static enum x86_64_reg_class ++merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) ++{ ++ /* Rule #1: If both classes are equal, this is the resulting class. */ ++ if (class1 == class2) ++ return class1; ++ ++ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is ++ the other class. */ ++ if (class1 == X86_64_NO_CLASS) ++ return class2; ++ if (class2 == X86_64_NO_CLASS) ++ return class1; ++ ++ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ ++ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) ++ return X86_64_MEMORY_CLASS; ++ ++ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ ++ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) ++ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) ++ return X86_64_INTEGERSI_CLASS; ++ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS ++ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) ++ return X86_64_INTEGER_CLASS; ++ ++ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, ++ MEMORY is used. */ ++ if (class1 == X86_64_X87_CLASS ++ || class1 == X86_64_X87UP_CLASS ++ || class1 == X86_64_COMPLEX_X87_CLASS ++ || class2 == X86_64_X87_CLASS ++ || class2 == X86_64_X87UP_CLASS ++ || class2 == X86_64_COMPLEX_X87_CLASS) ++ return X86_64_MEMORY_CLASS; ++ ++ /* Rule #6: Otherwise class SSE is used. */ ++ return X86_64_SSE_CLASS; ++} ++ ++/* Classify the argument of type TYPE and mode MODE. ++ CLASSES will be filled by the register class used to pass each word ++ of the operand. The number of words is returned. In case the parameter ++ should be passed in memory, 0 is returned. As a special case for zero ++ sized containers, classes[0] will be NO_CLASS and 1 is returned. ++ ++ See the x86-64 PS ABI for details. ++*/ ++static size_t ++classify_argument (ffi_type *type, enum x86_64_reg_class classes[], ++ size_t byte_offset) ++{ ++ switch (type->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ do_integer: ++ { ++ size_t size = byte_offset + type->size; ++ ++ if (size <= 4) ++ { ++ classes[0] = X86_64_INTEGERSI_CLASS; ++ return 1; ++ } ++ else if (size <= 8) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ return 1; ++ } ++ else if (size <= 12) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ classes[1] = X86_64_INTEGERSI_CLASS; ++ return 2; ++ } ++ else if (size <= 16) ++ { ++ classes[0] = classes[1] = X86_64_INTEGER_CLASS; ++ return 2; ++ } ++ else ++ FFI_ASSERT (0); ++ } ++ case FFI_TYPE_FLOAT: ++ if (!(byte_offset % 8)) ++ classes[0] = X86_64_SSESF_CLASS; ++ else ++ classes[0] = X86_64_SSE_CLASS; ++ return 1; ++ case FFI_TYPE_DOUBLE: ++ classes[0] = X86_64_SSEDF_CLASS; ++ return 1; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ classes[0] = X86_64_X87_CLASS; ++ classes[1] = X86_64_X87UP_CLASS; ++ return 2; ++#endif ++ case FFI_TYPE_STRUCT: ++ { ++ const size_t UNITS_PER_WORD = 8; ++ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; ++ ffi_type **ptr; ++ int i; ++ enum x86_64_reg_class subclasses[MAX_CLASSES]; ++ ++ /* If the struct is larger than 32 bytes, pass it on the stack. */ ++ if (type->size > 32) ++ return 0; ++ ++ for (i = 0; i < words; i++) ++ classes[i] = X86_64_NO_CLASS; ++ ++ /* Zero sized arrays or structures are NO_CLASS. We return 0 to ++ signalize memory class, so handle it as special case. */ ++ if (!words) ++ { ++ case FFI_TYPE_VOID: ++ classes[0] = X86_64_NO_CLASS; ++ return 1; ++ } ++ ++ /* Merge the fields of structure. */ ++ for (ptr = type->elements; *ptr != NULL; ptr++) ++ { ++ size_t num; ++ ++ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); ++ ++ num = classify_argument (*ptr, subclasses, byte_offset % 8); ++ if (num == 0) ++ return 0; ++ for (i = 0; i < num; i++) ++ { ++ size_t pos = byte_offset / 8; ++ classes[i + pos] = ++ merge_classes (subclasses[i], classes[i + pos]); ++ } ++ ++ byte_offset += (*ptr)->size; ++ } ++ ++ if (words > 2) ++ { ++ /* When size > 16 bytes, if the first one isn't ++ X86_64_SSE_CLASS or any other ones aren't ++ X86_64_SSEUP_CLASS, everything should be passed in ++ memory. */ ++ if (classes[0] != X86_64_SSE_CLASS) ++ return 0; ++ ++ for (i = 1; i < words; i++) ++ if (classes[i] != X86_64_SSEUP_CLASS) ++ return 0; ++ } ++ ++ /* Final merger cleanup. */ ++ for (i = 0; i < words; i++) ++ { ++ /* If one class is MEMORY, everything should be passed in ++ memory. */ ++ if (classes[i] == X86_64_MEMORY_CLASS) ++ return 0; ++ ++ /* The X86_64_SSEUP_CLASS should be always preceded by ++ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ ++ if (classes[i] == X86_64_SSEUP_CLASS ++ && classes[i - 1] != X86_64_SSE_CLASS ++ && classes[i - 1] != X86_64_SSEUP_CLASS) ++ { ++ /* The first one should never be X86_64_SSEUP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ classes[i] = X86_64_SSE_CLASS; ++ } ++ ++ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, ++ everything should be passed in memory. */ ++ if (classes[i] == X86_64_X87UP_CLASS ++ && (classes[i - 1] != X86_64_X87_CLASS)) ++ { ++ /* The first one should never be X86_64_X87UP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ return 0; ++ } ++ } ++ return words; ++ } ++ case FFI_TYPE_COMPLEX: ++ { ++ ffi_type *inner = type->elements[0]; ++ switch (inner->type) ++ { ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ goto do_integer; ++ ++ case FFI_TYPE_FLOAT: ++ classes[0] = X86_64_SSE_CLASS; ++ if (byte_offset % 8) ++ { ++ classes[1] = X86_64_SSESF_CLASS; ++ return 2; ++ } ++ return 1; ++ case FFI_TYPE_DOUBLE: ++ classes[0] = classes[1] = X86_64_SSEDF_CLASS; ++ return 2; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ classes[0] = X86_64_COMPLEX_X87_CLASS; ++ return 1; ++#endif ++ } ++ } ++ } ++ abort(); ++} ++ ++/* Examine the argument and return set number of register required in each ++ class. Return zero iff parameter should be passed in memory, otherwise ++ the number of registers. */ ++ ++static size_t ++examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], ++ _Bool in_return, int *pngpr, int *pnsse) ++{ ++ size_t n; ++ int i, ngpr, nsse; ++ ++ n = classify_argument (type, classes, 0); ++ if (n == 0) ++ return 0; ++ ++ ngpr = nsse = 0; ++ for (i = 0; i < n; ++i) ++ switch (classes[i]) ++ { ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ ngpr++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSESF_CLASS: ++ case X86_64_SSEDF_CLASS: ++ nsse++; ++ break; ++ case X86_64_NO_CLASS: ++ case X86_64_SSEUP_CLASS: ++ break; ++ case X86_64_X87_CLASS: ++ case X86_64_X87UP_CLASS: ++ case X86_64_COMPLEX_X87_CLASS: ++ return in_return != 0; ++ default: ++ abort (); ++ } ++ ++ *pngpr = ngpr; ++ *pnsse = nsse; ++ ++ return n; ++} ++ ++/* Perform machine dependent cif processing. */ ++ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int gprcount, ssecount, i, avn, ngpr, nsse, flags; ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t bytes, n, rtype_size; ++ ffi_type *rtype; ++ ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; ++ ++ gprcount = ssecount = 0; ++ ++ rtype = cif->rtype; ++ rtype_size = rtype->size; ++ switch (rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = UNIX64_RET_VOID; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = UNIX64_RET_UINT8; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = UNIX64_RET_SINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = UNIX64_RET_UINT16; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = UNIX64_RET_SINT16; ++ break; ++ case FFI_TYPE_UINT32: ++ flags = UNIX64_RET_UINT32; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ flags = UNIX64_RET_SINT32; ++ break; ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ flags = UNIX64_RET_INT64; ++ break; ++ case FFI_TYPE_POINTER: ++ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = UNIX64_RET_XMM32; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = UNIX64_RET_XMM64; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ flags = UNIX64_RET_X87; ++ break; ++ case FFI_TYPE_STRUCT: ++ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); ++ if (n == 0) ++ { ++ /* The return value is passed in memory. A pointer to that ++ memory is the first argument. Allocate a register for it. */ ++ gprcount++; ++ /* We don't have to do anything in asm for the return. */ ++ flags = UNIX64_RET_VOID | UNIX64_FLAG_RET_IN_MEM; ++ } ++ else ++ { ++ _Bool sse0 = SSE_CLASS_P (classes[0]); ++ ++ if (rtype_size == 4 && sse0) ++ flags = UNIX64_RET_XMM32; ++ else if (rtype_size == 8) ++ flags = sse0 ? UNIX64_RET_XMM64 : UNIX64_RET_INT64; ++ else ++ { ++ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); ++ if (sse0 && sse1) ++ flags = UNIX64_RET_ST_XMM0_XMM1; ++ else if (sse0) ++ flags = UNIX64_RET_ST_XMM0_RAX; ++ else if (sse1) ++ flags = UNIX64_RET_ST_RAX_XMM0; ++ else ++ flags = UNIX64_RET_ST_RAX_RDX; ++ flags |= rtype_size << UNIX64_SIZE_SHIFT; ++ } ++ } ++ break; ++ case FFI_TYPE_COMPLEX: ++ switch (rtype->elements[0]->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ flags = UNIX64_RET_ST_RAX_RDX | (rtype_size << UNIX64_SIZE_SHIFT); ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = UNIX64_RET_XMM64; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = UNIX64_RET_ST_XMM0_XMM1 | (16 << UNIX64_SIZE_SHIFT); ++ break; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ flags = UNIX64_RET_X87_2; ++ break; ++#endif ++ default: ++ return FFI_BAD_TYPEDEF; ++ } ++ break; ++ default: ++ return FFI_BAD_TYPEDEF; ++ } ++ ++ /* Go over all arguments and determine the way they should be passed. ++ If it's in a register and there is space for it, let that be so. If ++ not, add it's size to the stack byte count. */ ++ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) ++ { ++ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = cif->arg_types[i]->alignment; ++ ++ if (align < 8) ++ align = 8; ++ ++ bytes = ALIGN (bytes, align); ++ bytes += cif->arg_types[i]->size; ++ } ++ else ++ { ++ gprcount += ngpr; ++ ssecount += nsse; ++ } ++ } ++ if (ssecount) ++ flags |= UNIX64_FLAG_XMM_ARGS; ++ ++ cif->flags = flags; ++ cif->bytes = ALIGN (bytes, 8); ++ ++ return FFI_OK; ++} ++ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int gprcount, ssecount, ngpr, nsse, i, avn, flags; ++ struct register_args *reg_args; ++ ++ /* Can't call 32-bit mode from 64-bit mode. */ ++ FFI_ASSERT (cif->abi == FFI_UNIX64); ++ ++ /* If the return value is a struct and we don't have a return value ++ address then we need to make one. Otherwise we can ignore it. */ ++ flags = cif->flags; ++ if (rvalue == NULL) ++ { ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ rvalue = alloca (cif->rtype->size); ++ else ++ flags = UNIX64_RET_VOID; ++ } ++ ++ /* Allocate the space for the arguments, plus 4 words of temp space. */ ++ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); ++ reg_args = (struct register_args *) stack; ++ argp = stack + sizeof (struct register_args); ++ ++ reg_args->r10 = (uintptr_t) closure; ++ ++ gprcount = ssecount = 0; ++ ++ /* If the return value is passed in memory, add the pointer as the ++ first integer argument. */ ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ reg_args->gpr[gprcount++] = (unsigned long) rvalue; ++ ++ avn = cif->nargs; ++ arg_types = cif->arg_types; ++ ++ for (i = 0; i < avn; ++i) ++ { ++ size_t n, size = arg_types[i]->size; ++ ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; ++ ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; ++ ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ memcpy (argp, avalue[i], size); ++ argp += size; ++ } ++ else ++ { ++ /* The argument is passed entirely in registers. */ ++ char *a = (char *) avalue[i]; ++ int j; ++ ++ for (j = 0; j < n; j++, a += 8, size -= 8) ++ { ++ switch (classes[j]) ++ { ++ case X86_64_NO_CLASS: ++ case X86_64_SSEUP_CLASS: ++ break; ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ /* Sign-extend integer arguments passed in general ++ purpose registers, to cope with the fact that ++ LLVM incorrectly assumes that this will be done ++ (the x86-64 PS ABI does not specify this). */ ++ switch (arg_types[i]->type) ++ { ++ case FFI_TYPE_SINT8: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); ++ break; ++ case FFI_TYPE_SINT16: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); ++ break; ++ case FFI_TYPE_SINT32: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); ++ break; ++ default: ++ reg_args->gpr[gprcount] = 0; ++ memcpy (®_args->gpr[gprcount], a, size); ++ } ++ gprcount++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSEDF_CLASS: ++ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; ++ break; ++ case X86_64_SSESF_CLASS: ++ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; ++ break; ++ default: ++ abort(); ++ } ++ } ++ } ++ } ++ reg_args->rax = ssecount; ++ ++ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), ++ flags, rvalue, fn); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++ ++extern void ffi_closure_unix64(void) FFI_HIDDEN; ++extern void ffi_closure_unix64_sse(void) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *codeloc) ++{ ++ static const unsigned char trampoline[16] = { ++ /* leaq -0x7(%rip),%r10 # 0x0 */ ++ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, ++ /* jmpq *0x3(%rip) # 0x10 */ ++ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, ++ /* nopl (%rax) */ ++ 0x0f, 0x1f, 0x00 ++ }; ++ void (*dest)(void); ++ char *tramp = closure->tramp; ++ ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; ++ ++ if (cif->flags & UNIX64_FLAG_XMM_ARGS) ++ dest = ffi_closure_unix64_sse; ++ else ++ dest = ffi_closure_unix64; ++ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ *(UINT64 *)(tramp + 16) = (uintptr_t)dest; ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++int FFI_HIDDEN ++ffi_closure_unix64_inner(ffi_cif *cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *rvalue, ++ struct register_args *reg_args, ++ char *argp) ++{ ++ void **avalue; ++ ffi_type **arg_types; ++ long i, avn; ++ int gprcount, ssecount, ngpr, nsse; ++ int flags; ++ ++ avn = cif->nargs; ++ flags = cif->flags; ++ avalue = alloca(avn * sizeof(void *)); ++ gprcount = ssecount = 0; ++ ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ { ++ /* On return, %rax will contain the address that was passed ++ by the caller in %rdi. */ ++ void *r = (void *)(uintptr_t)reg_args->gpr[gprcount++]; ++ *(void **)rvalue = r; ++ rvalue = r; ++ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); ++ } ++ ++ arg_types = cif->arg_types; ++ for (i = 0; i < avn; ++i) ++ { ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t n; ++ ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; ++ ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; ++ ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ avalue[i] = argp; ++ argp += arg_types[i]->size; ++ } ++ /* If the argument is in a single register, or two consecutive ++ integer registers, then we can use that address directly. */ ++ else if (n == 1 ++ || (n == 2 && !(SSE_CLASS_P (classes[0]) ++ || SSE_CLASS_P (classes[1])))) ++ { ++ /* The argument is in a single register. */ ++ if (SSE_CLASS_P (classes[0])) ++ { ++ avalue[i] = ®_args->sse[ssecount]; ++ ssecount += n; ++ } ++ else ++ { ++ avalue[i] = ®_args->gpr[gprcount]; ++ gprcount += n; ++ } ++ } ++ /* Otherwise, allocate space to make them consecutive. */ ++ else ++ { ++ char *a = alloca (16); ++ int j; ++ ++ avalue[i] = a; ++ for (j = 0; j < n; j++, a += 8) ++ { ++ if (SSE_CLASS_P (classes[j])) ++ memcpy (a, ®_args->sse[ssecount++], 8); ++ else ++ memcpy (a, ®_args->gpr[gprcount++], 8); ++ } ++ } ++ } ++ ++ /* Invoke the closure. */ ++ fun (cif, rvalue, avalue, user_data); ++ ++ /* Tell assembly how to perform return type promotions. */ ++ return flags; ++} ++ ++extern void ffi_go_closure_unix64(void) FFI_HIDDEN; ++extern void ffi_go_closure_unix64_sse(void) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*)) ++{ ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; ++ ++ closure->tramp = (cif->flags & UNIX64_FLAG_XMM_ARGS ++ ? ffi_go_closure_unix64_sse ++ : ffi_go_closure_unix64); ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++#endif /* __x86_64__ */ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffitarget.h modified/Modules/_ctypes/libffi_ios/x86/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/x86/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffitarget.h 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,139 @@ ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++ Target configuration macros for x86 and x86-64. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++/* ---- System specific configurations ----------------------------------- */ ++ ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY ++ ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif ++ ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif ++ ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#ifndef _MSC_VER ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++#endif ++ ++/* ---- Generic type definitions ----------------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif ++ ++typedef enum ffi_abi { ++#if defined(X86_WIN64) ++ FFI_FIRST_ABI = 0, ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 ++ ++#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++ FFI_FIRST_ABI = 1, ++ FFI_UNIX64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_UNIX64 ++ ++#elif defined(X86_WIN32) ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_STDCALL = 2, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_MS_CDECL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_STDCALL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_MS_CDECL = 8, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++} ffi_abi; ++#endif ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++ ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ ++#if defined (X86_64) || defined(X86_WIN64) \ ++ || (defined (__x86_64__) && defined (X86_DARWIN)) ++# define FFI_TRAMPOLINE_SIZE 24 ++# define FFI_NATIVE_RAW_API 0 ++#else ++# define FFI_TRAMPOLINE_SIZE 12 ++# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif ++ ++#endif ++ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffiw64.c modified/Modules/_ctypes/libffi_ios/x86/ffiw64.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffiw64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffiw64.c 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,281 @@ ++/* ----------------------------------------------------------------------- ++ ffiw64.c - Copyright (c) 2014 Red Hat, Inc. ++ ++ x86 win64 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++#include ++#include ++ ++#ifdef X86_WIN64 ++ ++struct win64_call_frame ++{ ++ UINT64 rbp; /* 0 */ ++ UINT64 retaddr; /* 8 */ ++ UINT64 fn; /* 16 */ ++ UINT64 flags; /* 24 */ ++ UINT64 rvalue; /* 32 */ ++}; ++ ++extern void ffi_call_win64 (void *stack, struct win64_call_frame *, ++ void *closure) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int flags, n; ++ ++ if (cif->abi != FFI_WIN64) ++ return FFI_BAD_ABI; ++ ++ flags = cif->rtype->type; ++ switch (flags) ++ { ++ default: ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ flags = FFI_TYPE_STRUCT; ++ break; ++ case FFI_TYPE_COMPLEX: ++ flags = FFI_TYPE_STRUCT; ++ /* FALLTHRU */ ++ case FFI_TYPE_STRUCT: ++ switch (cif->rtype->size) ++ { ++ case 8: ++ flags = FFI_TYPE_UINT64; ++ break; ++ case 4: ++ flags = FFI_TYPE_SMALL_STRUCT_4B; ++ break; ++ case 2: ++ flags = FFI_TYPE_SMALL_STRUCT_2B; ++ break; ++ case 1: ++ flags = FFI_TYPE_SMALL_STRUCT_1B; ++ break; ++ } ++ break; ++ } ++ cif->flags = flags; ++ ++ /* Each argument either fits in a register, an 8 byte slot, or is ++ passed by reference with the pointer in the 8 byte slot. */ ++ n = cif->nargs; ++ n += (flags == FFI_TYPE_STRUCT); ++ if (n < 4) ++ n = 4; ++ cif->bytes = n * 8; ++ ++ return FFI_OK; ++} ++ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ int i, j, n, flags; ++ UINT64 *stack; ++ size_t rsize; ++ struct win64_call_frame *frame; ++ ++ FFI_ASSERT(cif->abi == FFI_WIN64); ++ ++ flags = cif->flags; ++ rsize = 0; ++ ++ /* If we have no return value for a structure, we need to create one. ++ Otherwise we can ignore the return type entirely. */ ++ if (rvalue == NULL) ++ { ++ if (flags == FFI_TYPE_STRUCT) ++ rsize = cif->rtype->size; ++ else ++ flags = FFI_TYPE_VOID; ++ } ++ ++ stack = alloca(cif->bytes + sizeof(struct win64_call_frame) + rsize); ++ frame = (struct win64_call_frame *)((char *)stack + cif->bytes); ++ if (rsize) ++ rvalue = frame + 1; ++ ++ frame->fn = (uintptr_t)fn; ++ frame->flags = flags; ++ frame->rvalue = (uintptr_t)rvalue; ++ ++ j = 0; ++ if (flags == FFI_TYPE_STRUCT) ++ { ++ stack[0] = (uintptr_t)rvalue; ++ j = 1; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; ++i, ++j) ++ { ++ switch (cif->arg_types[i]->size) ++ { ++ case 8: ++ stack[j] = *(UINT64 *)avalue[i]; ++ break; ++ case 4: ++ stack[j] = *(UINT32 *)avalue[i]; ++ break; ++ case 2: ++ stack[j] = *(UINT16 *)avalue[i]; ++ break; ++ case 1: ++ stack[j] = *(UINT8 *)avalue[i]; ++ break; ++ default: ++ stack[j] = (uintptr_t)avalue[i]; ++ break; ++ } ++ } ++ ++ ffi_call_win64 (stack, frame, closure); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++ ++ ++extern void ffi_closure_win64(void) FFI_HIDDEN; ++extern void ffi_go_closure_win64(void) FFI_HIDDEN; ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *codeloc) ++{ ++ static const unsigned char trampoline[16] = { ++ /* leaq -0x7(%rip),%r10 # 0x0 */ ++ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, ++ /* jmpq *0x3(%rip) # 0x10 */ ++ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, ++ /* nopl (%rax) */ ++ 0x0f, 0x1f, 0x00 ++ }; ++ unsigned char *tramp = closure->tramp; ++ ++ if (cif->abi != FFI_WIN64) ++ return FFI_BAD_ABI; ++ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ *(UINT64 *)(tramp + 16) = (uintptr_t)ffi_closure_win64; ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*)) ++{ ++ if (cif->abi != FFI_WIN64) ++ return FFI_BAD_ABI; ++ ++ closure->tramp = ffi_go_closure_win64; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++struct win64_closure_frame ++{ ++ UINT64 rvalue[2]; ++ UINT64 fargs[4]; ++ UINT64 retaddr; ++ UINT64 args[]; ++}; ++ ++int FFI_HIDDEN ++ffi_closure_win64_inner(ffi_cif *cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ struct win64_closure_frame *frame) ++{ ++ void **avalue; ++ void *rvalue; ++ int i, n, nreg, flags; ++ ++ avalue = alloca(cif->nargs * sizeof(void *)); ++ rvalue = frame->rvalue; ++ nreg = 0; ++ ++ /* When returning a structure, the address is in the first argument. ++ We must also be prepared to return the same address in eax, so ++ install that address in the frame and pretend we return a pointer. */ ++ flags = cif->flags; ++ if (flags == FFI_TYPE_STRUCT) ++ { ++ rvalue = (void *)(uintptr_t)frame->args[0]; ++ frame->rvalue[0] = frame->args[0]; ++ nreg = 1; ++ } ++ ++ for (i = 0, n = cif->nargs; i < n; ++i, ++nreg) ++ { ++ size_t size = cif->arg_types[i]->size; ++ size_t type = cif->arg_types[i]->type; ++ void *a; ++ ++ if (type == FFI_TYPE_DOUBLE || type == FFI_TYPE_FLOAT) ++ { ++ if (nreg < 4) ++ a = &frame->fargs[nreg]; ++ else ++ a = &frame->args[nreg]; ++ } ++ else if (size == 1 || size == 2 || size == 4 || size == 8) ++ a = &frame->args[nreg]; ++ else ++ a = (void *)(uintptr_t)frame->args[nreg]; ++ ++ avalue[i] = a; ++ } ++ ++ /* Invoke the closure. */ ++ fun (cif, rvalue, avalue, user_data); ++ return flags; ++} ++ ++#endif /* X86_WIN64 */ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h +--- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,29 @@ ++#define X86_RET_FLOAT 0 ++#define X86_RET_DOUBLE 1 ++#define X86_RET_LDOUBLE 2 ++#define X86_RET_SINT8 3 ++#define X86_RET_SINT16 4 ++#define X86_RET_UINT8 5 ++#define X86_RET_UINT16 6 ++#define X86_RET_INT64 7 ++#define X86_RET_INT32 8 ++#define X86_RET_VOID 9 ++#define X86_RET_STRUCTPOP 10 ++#define X86_RET_STRUCTARG 11 ++#define X86_RET_STRUCT_1B 12 ++#define X86_RET_STRUCT_2B 13 ++#define X86_RET_UNUSED14 14 ++#define X86_RET_UNUSED15 15 ++ ++#define X86_RET_TYPE_MASK 15 ++#define X86_RET_POP_SHIFT 4 ++ ++#define R_EAX 0 ++#define R_EDX 1 ++#define R_ECX 2 ++ ++#ifdef __PCC__ ++# define HAVE_FASTCALL 0 ++#else ++# define HAVE_FASTCALL 1 ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h +--- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,22 @@ ++#define UNIX64_RET_VOID 0 ++#define UNIX64_RET_UINT8 1 ++#define UNIX64_RET_UINT16 2 ++#define UNIX64_RET_UINT32 3 ++#define UNIX64_RET_SINT8 4 ++#define UNIX64_RET_SINT16 5 ++#define UNIX64_RET_SINT32 6 ++#define UNIX64_RET_INT64 7 ++#define UNIX64_RET_XMM32 8 ++#define UNIX64_RET_XMM64 9 ++#define UNIX64_RET_X87 10 ++#define UNIX64_RET_X87_2 11 ++#define UNIX64_RET_ST_XMM0_RAX 12 ++#define UNIX64_RET_ST_RAX_XMM0 13 ++#define UNIX64_RET_ST_XMM0_XMM1 14 ++#define UNIX64_RET_ST_RAX_RDX 15 ++ ++#define UNIX64_RET_LAST 15 ++ ++#define UNIX64_FLAG_RET_IN_MEM (1 << 10) ++#define UNIX64_FLAG_XMM_ARGS (1 << 11) ++#define UNIX64_SIZE_SHIFT 12 +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv.S modified/Modules/_ctypes/libffi_ios/x86/sysv.S +--- orig/Modules/_ctypes/libffi_ios/x86/sysv.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/sysv.S 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,1040 @@ ++/* ----------------------------------------------------------------------- ++ sysv.S - Copyright (c) 2013 The Written Word, Inc. ++ - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc. ++ ++ X86 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#ifndef __x86_64__ ++ ++#define LIBFFI_ASM ++#include ++#include ++#include "internal.h" ++ ++#define C2(X, Y) X ## Y ++#define C1(X, Y) C2(X, Y) ++#ifdef __USER_LABEL_PREFIX__ ++# define C(X) C1(__USER_LABEL_PREFIX__, X) ++#else ++# define C(X) X ++#endif ++ ++#ifdef X86_DARWIN ++# define L(X) C1(L, X) ++#else ++# define L(X) C1(.L, X) ++#endif ++ ++#ifdef __ELF__ ++# define ENDF(X) .type X,@function; .size X, . - X ++#else ++# define ENDF(X) ++#endif ++ ++/* Handle win32 fastcall name mangling. */ ++#ifdef X86_WIN32 ++# define ffi_call_i386 @ffi_call_i386@8 ++# define ffi_closure_inner @ffi_closure_inner@8 ++#else ++# define ffi_call_i386 C(ffi_call_i386) ++# define ffi_closure_inner C(ffi_closure_inner) ++#endif ++ ++/* This macro allows the safe creation of jump tables without an ++ actual table. The entry points into the table are all 8 bytes. ++ The use of ORG asserts that we're at the correct location. */ ++/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ ++#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) ++# define E(BASE, X) .balign 8 ++#else ++# define E(BASE, X) .balign 8; .org BASE + X * 8 ++#endif ++ ++ .text ++ .balign 16 ++ .globl ffi_call_i386 ++ FFI_HIDDEN(ffi_call_i386) ++ ++/* This is declared as ++ ++ void ffi_call_i386(struct call_frame *frame, char *argp) ++ __attribute__((fastcall)); ++ ++ Thus the arguments are present in ++ ++ ecx: frame ++ edx: argp ++*/ ++ ++ffi_call_i386: ++L(UW0): ++ # cfi_startproc ++#if !HAVE_FASTCALL ++ movl 4(%esp), %ecx ++ movl 8(%esp), %edx ++#endif ++ movl (%esp), %eax /* move the return address */ ++ movl %ebp, (%ecx) /* store %ebp into local frame */ ++ movl %eax, 4(%ecx) /* store retaddr into local frame */ ++ ++ /* New stack frame based off ebp. This is a itty bit of unwind ++ trickery in that the CFA *has* changed. There is no easy way ++ to describe it correctly on entry to the function. Fortunately, ++ it doesn't matter too much since at all points we can correctly ++ unwind back to ffi_call. Note that the location to which we ++ moved the return address is (the new) CFA-4, so from the ++ perspective of the unwind info, it hasn't moved. */ ++ movl %ecx, %ebp ++L(UW1): ++ # cfi_def_cfa(%ebp, 8) ++ # cfi_rel_offset(%ebp, 0) ++ ++ movl %edx, %esp /* set outgoing argument stack */ ++ movl 20+R_EAX*4(%ebp), %eax /* set register arguments */ ++ movl 20+R_EDX*4(%ebp), %edx ++ movl 20+R_ECX*4(%ebp), %ecx ++ ++ call *8(%ebp) ++ ++ movl 12(%ebp), %ecx /* load return type code */ ++ movl %ebx, 8(%ebp) /* preserve %ebx */ ++L(UW2): ++ # cfi_rel_offset(%ebx, 8) ++ ++ andl $X86_RET_TYPE_MASK, %ecx ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc1): ++ leal L(store_table)-L(pc1)(%ebx, %ecx, 8), %ebx ++#else ++ leal L(store_table)(,%ecx, 8), %ebx ++#endif ++ movl 16(%ebp), %ecx /* load result address */ ++ jmp *%ebx ++ ++ .balign 8 ++L(store_table): ++E(L(store_table), X86_RET_FLOAT) ++ fstps (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_DOUBLE) ++ fstpl (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_LDOUBLE) ++ fstpt (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_SINT8) ++ movsbl %al, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_SINT16) ++ movswl %ax, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_UINT8) ++ movzbl %al, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_UINT16) ++ movzwl %ax, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_INT64) ++ movl %edx, 4(%ecx) ++ /* fallthru */ ++E(L(store_table), X86_RET_INT32) ++ movl %eax, (%ecx) ++ /* fallthru */ ++E(L(store_table), X86_RET_VOID) ++L(e1): ++ movl 8(%ebp), %ebx ++ movl %ebp, %esp ++ popl %ebp ++L(UW3): ++ # cfi_remember_state ++ # cfi_def_cfa(%esp, 4) ++ # cfi_restore(%ebx) ++ # cfi_restore(%ebp) ++ ret ++L(UW4): ++ # cfi_restore_state ++ ++E(L(store_table), X86_RET_STRUCTPOP) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCTARG) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCT_1B) ++ movb %al, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCT_2B) ++ movw %ax, (%ecx) ++ jmp L(e1) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(store_table), X86_RET_UNUSED14) ++ ud2 ++E(L(store_table), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW5): ++ # cfi_endproc ++ENDF(ffi_call_i386) ++ ++/* The inner helper is declared as ++ ++ void ffi_closure_inner(struct closure_frame *frame, char *argp) ++ __attribute_((fastcall)) ++ ++ Thus the arguments are placed in ++ ++ ecx: frame ++ edx: argp ++*/ ++ ++/* Macros to help setting up the closure_data structure. */ ++ ++#if HAVE_FASTCALL ++# define closure_FS (40 + 4) ++# define closure_CF 0 ++#else ++# define closure_FS (8 + 40 + 12) ++# define closure_CF 8 ++#endif ++ ++#define FFI_CLOSURE_SAVE_REGS \ ++ movl %eax, closure_CF+16+R_EAX*4(%esp); \ ++ movl %edx, closure_CF+16+R_EDX*4(%esp); \ ++ movl %ecx, closure_CF+16+R_ECX*4(%esp) ++ ++#define FFI_CLOSURE_COPY_TRAMP_DATA \ ++ movl FFI_TRAMPOLINE_SIZE(%eax), %edx; /* copy cif */ \ ++ movl FFI_TRAMPOLINE_SIZE+4(%eax), %ecx; /* copy fun */ \ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %eax; /* copy user_data */ \ ++ movl %edx, closure_CF+28(%esp); \ ++ movl %ecx, closure_CF+32(%esp); \ ++ movl %eax, closure_CF+36(%esp) ++ ++#if HAVE_FASTCALL ++# define FFI_CLOSURE_PREP_CALL \ ++ movl %esp, %ecx; /* load closure_data */ \ ++ leal closure_FS+4(%esp), %edx; /* load incoming stack */ ++#else ++# define FFI_CLOSURE_PREP_CALL \ ++ leal closure_CF(%esp), %ecx; /* load closure_data */ \ ++ leal closure_FS+4(%esp), %edx; /* load incoming stack */ \ ++ movl %ecx, (%esp); \ ++ movl %edx, 4(%esp) ++#endif ++ ++#define FFI_CLOSURE_CALL_INNER(UWN) \ ++ call ffi_closure_inner ++ ++#define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ leal L(C1(load_table,N))(, %eax, 8), %edx; \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx ++ ++#ifdef __PIC__ ++# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++# undef FFI_CLOSURE_MASK_AND_JUMP ++# define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ call C(__x86.get_pc_thunk.dx); \ ++L(C1(pc,N)): \ ++ leal L(C1(load_table,N))-L(C1(pc,N))(%edx, %eax, 8), %edx; \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx ++# else ++# define FFI_CLOSURE_CALL_INNER_SAVE_EBX ++# undef FFI_CLOSURE_CALL_INNER ++# define FFI_CLOSURE_CALL_INNER(UWN) \ ++ movl %ebx, 40(%esp); /* save ebx */ \ ++L(C1(UW,UWN)): \ ++ # cfi_rel_offset(%ebx, 40); \ ++ call C(__x86.get_pc_thunk.bx); /* load got register */ \ ++ addl $C(_GLOBAL_OFFSET_TABLE_), %ebx; \ ++ call ffi_closure_inner@PLT ++# undef FFI_CLOSURE_MASK_AND_JUMP ++# define FFI_CLOSURE_MASK_AND_JUMP(N, UWN) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ leal L(C1(load_table,N))@GOTOFF(%ebx, %eax, 8), %edx; \ ++ movl 40(%esp), %ebx; /* restore ebx */ \ ++L(C1(UW,UWN)): \ ++ # cfi_restore(%ebx); \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx ++# endif /* DARWIN || HIDDEN */ ++#endif /* __PIC__ */ ++ ++ .balign 16 ++ .globl C(ffi_go_closure_EAX) ++ FFI_HIDDEN(C(ffi_go_closure_EAX)) ++C(ffi_go_closure_EAX): ++L(UW6): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW7): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%eax), %edx /* copy cif */ ++ movl 8(%eax), %ecx /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %ecx, closure_CF+32(%esp) ++ movl %eax, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_i386) ++L(UW8): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_EAX)) ++ ++ .balign 16 ++ .globl C(ffi_go_closure_ECX) ++ FFI_HIDDEN(C(ffi_go_closure_ECX)) ++C(ffi_go_closure_ECX): ++L(UW9): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW10): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%ecx), %edx /* copy cif */ ++ movl 8(%ecx), %eax /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %eax, closure_CF+32(%esp) ++ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_i386) ++L(UW11): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_ECX)) ++ ++/* The closure entry points are reached from the ffi_closure trampoline. ++ On entry, %eax contains the address of the ffi_closure. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_i386) ++ FFI_HIDDEN(C(ffi_closure_i386)) ++ ++C(ffi_closure_i386): ++L(UW12): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW13): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ ++ FFI_CLOSURE_SAVE_REGS ++ FFI_CLOSURE_COPY_TRAMP_DATA ++ ++ /* Entry point from preceeding Go closures. */ ++L(do_closure_i386): ++ ++ FFI_CLOSURE_PREP_CALL ++ FFI_CLOSURE_CALL_INNER(14) ++ FFI_CLOSURE_MASK_AND_JUMP(2, 15) ++ ++ .balign 8 ++L(load_table2): ++E(L(load_table2), X86_RET_FLOAT) ++ flds closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_DOUBLE) ++ fldl closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_LDOUBLE) ++ fldt closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_INT64) ++ movl closure_CF+4(%esp), %edx ++ jmp L(e2) ++E(L(load_table2), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table2), X86_RET_VOID) ++L(e2): ++ addl $closure_FS, %esp ++L(UW16): ++ # cfi_adjust_cfa_offset(-closure_FS) ++ ret ++L(UW17): ++ # cfi_adjust_cfa_offset(closure_FS) ++E(L(load_table2), X86_RET_STRUCTPOP) ++ addl $closure_FS, %esp ++L(UW18): ++ # cfi_adjust_cfa_offset(-closure_FS) ++ ret $4 ++L(UW19): ++ # cfi_adjust_cfa_offset(closure_FS) ++E(L(load_table2), X86_RET_STRUCTARG) ++ jmp L(e2) ++E(L(load_table2), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e2) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table2), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table2), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW20): ++ # cfi_endproc ++ENDF(C(ffi_closure_i386)) ++ ++ .balign 16 ++ .globl C(ffi_go_closure_STDCALL) ++ FFI_HIDDEN(C(ffi_go_closure_STDCALL)) ++C(ffi_go_closure_STDCALL): ++L(UW21): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW22): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%ecx), %edx /* copy cif */ ++ movl 8(%ecx), %eax /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %eax, closure_CF+32(%esp) ++ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_STDCALL) ++L(UW23): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_STDCALL)) ++ ++/* For REGISTER, we have no available parameter registers, and so we ++ enter here having pushed the closure onto the stack. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_REGISTER) ++ FFI_HIDDEN(C(ffi_closure_REGISTER)) ++C(ffi_closure_REGISTER): ++L(UW24): ++ # cfi_startproc ++ # cfi_def_cfa(%esp, 8) ++ # cfi_offset(%eip, -8) ++ subl $closure_FS-4, %esp ++L(UW25): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl closure_FS-4(%esp), %ecx /* load retaddr */ ++ movl closure_FS(%esp), %eax /* load closure */ ++ movl %ecx, closure_FS(%esp) /* move retaddr */ ++ jmp L(do_closure_REGISTER) ++L(UW26): ++ # cfi_endproc ++ENDF(C(ffi_closure_REGISTER)) ++ ++/* For STDCALL (and others), we need to pop N bytes of arguments off ++ the stack following the closure. The amount needing to be popped ++ is returned to us from ffi_closure_inner. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_STDCALL) ++ FFI_HIDDEN(C(ffi_closure_STDCALL)) ++C(ffi_closure_STDCALL): ++L(UW27): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW28): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ ++ FFI_CLOSURE_SAVE_REGS ++ ++ /* Entry point from ffi_closure_REGISTER. */ ++L(do_closure_REGISTER): ++ ++ FFI_CLOSURE_COPY_TRAMP_DATA ++ ++ /* Entry point from preceeding Go closure. */ ++L(do_closure_STDCALL): ++ ++ FFI_CLOSURE_PREP_CALL ++ FFI_CLOSURE_CALL_INNER(29) ++ ++ movl %eax, %ecx ++ shrl $X86_RET_POP_SHIFT, %ecx /* isolate pop count */ ++ leal closure_FS(%esp, %ecx), %ecx /* compute popped esp */ ++ movl closure_FS(%esp), %edx /* move return address */ ++ movl %edx, (%ecx) ++ ++ /* From this point on, the value of %esp upon return is %ecx+4, ++ and we've copied the return address to %ecx to make return easy. ++ There's no point in representing this in the unwind info, as ++ there is always a window between the mov and the ret which ++ will be wrong from one point of view or another. */ ++ ++ FFI_CLOSURE_MASK_AND_JUMP(3, 30) ++ ++ .balign 8 ++L(load_table3): ++E(L(load_table3), X86_RET_FLOAT) ++ flds closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_DOUBLE) ++ fldl closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_LDOUBLE) ++ fldt closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_SINT8) ++ movsbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_SINT16) ++ movswl %ax, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_UINT8) ++ movzbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_UINT16) ++ movzwl %ax, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_INT64) ++ movl closure_CF+4(%esp), %edx ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_INT32) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_VOID) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCTPOP) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCTARG) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ movl %ecx, %esp ++ ret ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table3), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table3), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW31): ++ # cfi_endproc ++ENDF(C(ffi_closure_STDCALL)) ++ ++#if !FFI_NO_RAW_API ++ ++#define raw_closure_S_FS (16+16+12) ++ ++ .balign 16 ++ .globl C(ffi_closure_raw_SYSV) ++ FFI_HIDDEN(C(ffi_closure_raw_SYSV)) ++C(ffi_closure_raw_SYSV): ++L(UW32): ++ # cfi_startproc ++ subl $raw_closure_S_FS, %esp ++L(UW33): ++ # cfi_def_cfa_offset(raw_closure_S_FS + 4) ++ movl %ebx, raw_closure_S_FS-4(%esp) ++L(UW34): ++ # cfi_rel_offset(%ebx, raw_closure_S_FS-4) ++ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ ++ movl %edx, 12(%esp) ++ leal raw_closure_S_FS+4(%esp), %edx /* load raw_args */ ++ movl %edx, 8(%esp) ++ leal 16(%esp), %edx /* load &res */ ++ movl %edx, 4(%esp) ++ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ ++ movl %ebx, (%esp) ++ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ ++ ++ movl 20(%ebx), %eax /* load cif->flags */ ++ andl $X86_RET_TYPE_MASK, %eax ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc4): ++ leal L(load_table4)-L(pc4)(%ebx, %eax, 8), %ecx ++#else ++ leal L(load_table4)(,%eax, 8), %ecx ++#endif ++ movl raw_closure_S_FS-4(%esp), %ebx ++L(UW35): ++ # cfi_restore(%ebx) ++ movl 16(%esp), %eax /* Optimistic load */ ++ jmp *%ecx ++ ++ .balign 8 ++L(load_table4): ++E(L(load_table4), X86_RET_FLOAT) ++ flds 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_DOUBLE) ++ fldl 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_LDOUBLE) ++ fldt 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_INT64) ++ movl 16+4(%esp), %edx ++ jmp L(e4) ++E(L(load_table4), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table4), X86_RET_VOID) ++L(e4): ++ addl $raw_closure_S_FS, %esp ++L(UW36): ++ # cfi_adjust_cfa_offset(-raw_closure_S_FS) ++ ret ++L(UW37): ++ # cfi_adjust_cfa_offset(raw_closure_S_FS) ++E(L(load_table4), X86_RET_STRUCTPOP) ++ addl $raw_closure_S_FS, %esp ++L(UW38): ++ # cfi_adjust_cfa_offset(-raw_closure_S_FS) ++ ret $4 ++L(UW39): ++ # cfi_adjust_cfa_offset(raw_closure_S_FS) ++E(L(load_table4), X86_RET_STRUCTARG) ++ jmp L(e4) ++E(L(load_table4), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e4) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table4), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table4), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW40): ++ # cfi_endproc ++ENDF(C(ffi_closure_raw_SYSV)) ++ ++#define raw_closure_T_FS (16+16+8) ++ ++ .balign 16 ++ .globl C(ffi_closure_raw_THISCALL) ++ FFI_HIDDEN(C(ffi_closure_raw_THISCALL)) ++C(ffi_closure_raw_THISCALL): ++L(UW41): ++ # cfi_startproc ++ /* Rearrange the stack such that %ecx is the first argument. ++ This means moving the return address. */ ++ popl %edx ++L(UW42): ++ # cfi_def_cfa_offset(0) ++ # cfi_register(%eip, %edx) ++ pushl %ecx ++L(UW43): ++ # cfi_adjust_cfa_offset(4) ++ pushl %edx ++L(UW44): ++ # cfi_adjust_cfa_offset(4) ++ # cfi_rel_offset(%eip, 0) ++ subl $raw_closure_T_FS, %esp ++L(UW45): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++ movl %ebx, raw_closure_T_FS-4(%esp) ++L(UW46): ++ # cfi_rel_offset(%ebx, raw_closure_T_FS-4) ++ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ ++ movl %edx, 12(%esp) ++ leal raw_closure_T_FS+4(%esp), %edx /* load raw_args */ ++ movl %edx, 8(%esp) ++ leal 16(%esp), %edx /* load &res */ ++ movl %edx, 4(%esp) ++ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ ++ movl %ebx, (%esp) ++ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ ++ ++ movl 20(%ebx), %eax /* load cif->flags */ ++ andl $X86_RET_TYPE_MASK, %eax ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc5): ++ leal L(load_table5)-L(pc5)(%ebx, %eax, 8), %ecx ++#else ++ leal L(load_table5)(,%eax, 8), %ecx ++#endif ++ movl raw_closure_T_FS-4(%esp), %ebx ++L(UW47): ++ # cfi_restore(%ebx) ++ movl 16(%esp), %eax /* Optimistic load */ ++ jmp *%ecx ++ ++ .balign 8 ++L(load_table5): ++E(L(load_table5), X86_RET_FLOAT) ++ flds 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_DOUBLE) ++ fldl 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_LDOUBLE) ++ fldt 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_INT64) ++ movl 16+4(%esp), %edx ++ jmp L(e5) ++E(L(load_table5), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table5), X86_RET_VOID) ++L(e5): ++ addl $raw_closure_T_FS, %esp ++L(UW48): ++ # cfi_adjust_cfa_offset(-raw_closure_T_FS) ++ /* Remove the extra %ecx argument we pushed. */ ++ ret $4 ++L(UW49): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++E(L(load_table5), X86_RET_STRUCTPOP) ++ addl $raw_closure_T_FS, %esp ++L(UW50): ++ # cfi_adjust_cfa_offset(-raw_closure_T_FS) ++ ret $8 ++L(UW51): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++E(L(load_table5), X86_RET_STRUCTARG) ++ jmp L(e5) ++E(L(load_table5), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e5) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table5), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table5), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW52): ++ # cfi_endproc ++ENDF(C(ffi_closure_raw_THISCALL)) ++ ++#endif /* !FFI_NO_RAW_API */ ++ ++#ifdef X86_DARWIN ++# define COMDAT(X) \ ++ .section __TEXT,__textcoal_nt,coalesced,pure_instructions; \ ++ .weak_definition X; \ ++ .private_extern X ++#elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__)) ++# define COMDAT(X) \ ++ .section .text.X,"axG",@progbits,X,comdat; \ ++ .globl X; \ ++ FFI_HIDDEN(X) ++#else ++# define COMDAT(X) ++#endif ++ ++#if defined(__PIC__) ++ COMDAT(C(__x86.get_pc_thunk.bx)) ++C(__x86.get_pc_thunk.bx): ++ movl (%esp), %ebx ++ ret ++ENDF(C(__x86.get_pc_thunk.bx)) ++# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++ COMDAT(C(__x86.get_pc_thunk.dx)) ++C(__x86.get_pc_thunk.dx): ++ movl (%esp), %edx ++ ret ++ENDF(C(__x86.get_pc_thunk.dx)) ++#endif /* DARWIN || HIDDEN */ ++#endif /* __PIC__ */ ++ ++/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ ++ ++#ifdef __APPLE__ ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EHFrame0: ++#elif defined(X86_WIN32) ++.section .eh_frame,"r" ++#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) ++.section .eh_frame,EH_FRAME_FLAGS,@unwind ++#else ++.section .eh_frame,EH_FRAME_FLAGS,@progbits ++#endif ++ ++#ifdef HAVE_AS_X86_PCREL ++# define PCREL(X) X - . ++#else ++# define PCREL(X) X@rel ++#endif ++ ++/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ ++#define ADV(N, P) .byte 2, L(N)-L(P) ++ ++ .balign 4 ++L(CIE): ++ .set L(set0),L(ECIE)-L(SCIE) ++ .long L(set0) /* CIE Length */ ++L(SCIE): ++ .long 0 /* CIE Identifier Tag */ ++ .byte 1 /* CIE Version */ ++ .ascii "zR\0" /* CIE Augmentation */ ++ .byte 1 /* CIE Code Alignment Factor */ ++ .byte 0x7c /* CIE Data Alignment Factor */ ++ .byte 0x8 /* CIE RA Column */ ++ .byte 1 /* Augmentation size */ ++ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ ++ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */ ++ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */ ++ .balign 4 ++L(ECIE): ++ ++ .set L(set1),L(EFDE1)-L(SFDE1) ++ .long L(set1) /* FDE Length */ ++L(SFDE1): ++ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW0)) /* Initial location */ ++ .long L(UW5)-L(UW0) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW1, UW0) ++ .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */ ++ .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */ ++ ADV(UW2, UW1) ++ .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */ ++ ADV(UW3, UW2) ++ .byte 0xa /* DW_CFA_remember_state */ ++ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */ ++ .byte 0xc0+3 /* DW_CFA_restore, %ebx */ ++ .byte 0xc0+5 /* DW_CFA_restore, %ebp */ ++ ADV(UW4, UW3) ++ .byte 0xb /* DW_CFA_restore_state */ ++ .balign 4 ++L(EFDE1): ++ ++ .set L(set2),L(EFDE2)-L(SFDE2) ++ .long L(set2) /* FDE Length */ ++L(SFDE2): ++ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW6)) /* Initial location */ ++ .long L(UW8)-L(UW6) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW7, UW6) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE2): ++ ++ .set L(set3),L(EFDE3)-L(SFDE3) ++ .long L(set3) /* FDE Length */ ++L(SFDE3): ++ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW9)) /* Initial location */ ++ .long L(UW11)-L(UW9) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW10, UW9) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE3): ++ ++ .set L(set4),L(EFDE4)-L(SFDE4) ++ .long L(set4) /* FDE Length */ ++L(SFDE4): ++ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW12)) /* Initial location */ ++ .long L(UW20)-L(UW12) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW13, UW12) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX ++ ADV(UW14, UW13) ++ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ ++ ADV(UW15, UW14) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW16, UW15) ++#else ++ ADV(UW16, UW13) ++#endif ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW17, UW16) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW18, UW17) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW19, UW18) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE4): ++ ++ .set L(set5),L(EFDE5)-L(SFDE5) ++ .long L(set5) /* FDE Length */ ++L(SFDE5): ++ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW21)) /* Initial location */ ++ .long L(UW23)-L(UW21) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW22, UW21) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE5): ++ ++ .set L(set6),L(EFDE6)-L(SFDE6) ++ .long L(set6) /* FDE Length */ ++L(SFDE6): ++ .long L(SFDE6)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW24)) /* Initial location */ ++ .long L(UW26)-L(UW24) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */ ++ ADV(UW25, UW24) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE6): ++ ++ .set L(set7),L(EFDE7)-L(SFDE7) ++ .long L(set7) /* FDE Length */ ++L(SFDE7): ++ .long L(SFDE7)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW27)) /* Initial location */ ++ .long L(UW31)-L(UW27) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW28, UW27) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX ++ ADV(UW29, UW28) ++ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ ++ ADV(UW30, UW29) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++#endif ++ .balign 4 ++L(EFDE7): ++ ++#if !FFI_NO_RAW_API ++ .set L(set8),L(EFDE8)-L(SFDE8) ++ .long L(set8) /* FDE Length */ ++L(SFDE8): ++ .long L(SFDE8)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW32)) /* Initial location */ ++ .long L(UW40)-L(UW32) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW33, UW32) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW34, UW33) ++ .byte 0x80+3, 2 /* DW_CFA_offset %ebx 2*-4 */ ++ ADV(UW35, UW34) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW36, UW35) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW37, UW36) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW38, UW37) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW39, UW38) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE8): ++ ++ .set L(set9),L(EFDE9)-L(SFDE9) ++ .long L(set9) /* FDE Length */ ++L(SFDE9): ++ .long L(SFDE9)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW41)) /* Initial location */ ++ .long L(UW52)-L(UW41) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW42, UW41) ++ .byte 0xe, 0 /* DW_CFA_def_cfa_offset */ ++ .byte 0x9, 8, 2 /* DW_CFA_register %eip, %edx */ ++ ADV(UW43, UW42) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW44, UW43) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ .byte 0x80+8, 2 /* DW_CFA_offset %eip 2*-4 */ ++ ADV(UW45, UW44) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW46, UW45) ++ .byte 0x80+3, 3 /* DW_CFA_offset %ebx 3*-4 */ ++ ADV(UW47, UW46) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW48, UW47) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW49, UW48) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW50, UW49) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW51, UW50) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE9): ++#endif /* !FFI_NO_RAW_API */ ++ ++#endif /* ifndef __x86_64__ */ ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64.S modified/Modules/_ctypes/libffi_ios/x86/unix64.S +--- orig/Modules/_ctypes/libffi_ios/x86/unix64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/unix64.S 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,546 @@ ++/* ----------------------------------------------------------------------- ++ unix64.S - Copyright (c) 2013 The Written Word, Inc. ++ - Copyright (c) 2008 Red Hat, Inc ++ - Copyright (c) 2002 Bo Thorsen ++ ++ x86-64 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#ifdef __x86_64__ ++#define LIBFFI_ASM ++#include ++#include ++#include "internal64.h" ++ ++ .text ++ ++#define C2(X, Y) X ## Y ++#define C1(X, Y) C2(X, Y) ++#ifdef __USER_LABEL_PREFIX__ ++# define C(X) C1(__USER_LABEL_PREFIX__, X) ++#else ++# define C(X) X ++#endif ++ ++#ifdef __APPLE__ ++# define L(X) C1(L, X) ++#else ++# define L(X) C1(.L, X) ++#endif ++ ++#ifdef __ELF__ ++# define PLT(X) X@PLT ++# define ENDF(X) .type X,@function; .size X, . - X ++#else ++# define PLT(X) X ++# define ENDF(X) ++#endif ++ ++/* This macro allows the safe creation of jump tables without an ++ actual table. The entry points into the table are all 8 bytes. ++ The use of ORG asserts that we're at the correct location. */ ++/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ ++#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) ++# define E(BASE, X) .balign 8 ++#else ++# define E(BASE, X) .balign 8; .org BASE + X * 8 ++#endif ++ ++/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void)); ++ ++ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame ++ for this function. This has been allocated by ffi_call. We also ++ deallocate some of the stack that has been alloca'd. */ ++ ++ .balign 8 ++ .globl C(ffi_call_unix64) ++ FFI_HIDDEN(C(ffi_call_unix64)) ++ ++C(ffi_call_unix64): ++L(UW0): ++ movq (%rsp), %r10 /* Load return address. */ ++ leaq (%rdi, %rsi), %rax /* Find local stack base. */ ++ movq %rdx, (%rax) /* Save flags. */ ++ movq %rcx, 8(%rax) /* Save raddr. */ ++ movq %rbp, 16(%rax) /* Save old frame pointer. */ ++ movq %r10, 24(%rax) /* Relocate return address. */ ++ movq %rax, %rbp /* Finalize local stack frame. */ ++ ++ /* New stack frame based off rbp. This is a itty bit of unwind ++ trickery in that the CFA *has* changed. There is no easy way ++ to describe it correctly on entry to the function. Fortunately, ++ it doesn't matter too much since at all points we can correctly ++ unwind back to ffi_call. Note that the location to which we ++ moved the return address is (the new) CFA-8, so from the ++ perspective of the unwind info, it hasn't moved. */ ++L(UW1): ++ /* cfi_def_cfa(%rbp, 32) */ ++ /* cfi_rel_offset(%rbp, 16) */ ++ ++ movq %rdi, %r10 /* Save a copy of the register area. */ ++ movq %r8, %r11 /* Save a copy of the target fn. */ ++ movl %r9d, %eax /* Set number of SSE registers. */ ++ ++ /* Load up all argument registers. */ ++ movq (%r10), %rdi ++ movq 0x08(%r10), %rsi ++ movq 0x10(%r10), %rdx ++ movq 0x18(%r10), %rcx ++ movq 0x20(%r10), %r8 ++ movq 0x28(%r10), %r9 ++ movl 0xb0(%r10), %eax ++ testl %eax, %eax ++ jnz L(load_sse) ++L(ret_from_load_sse): ++ ++ /* Deallocate the reg arg area, except for r10, then load via pop. */ ++ leaq 0xb8(%r10), %rsp ++ popq %r10 ++ ++ /* Call the user function. */ ++ call *%r11 ++ ++ /* Deallocate stack arg area; local stack frame in redzone. */ ++ leaq 24(%rbp), %rsp ++ ++ movq 0(%rbp), %rcx /* Reload flags. */ ++ movq 8(%rbp), %rdi /* Reload raddr. */ ++ movq 16(%rbp), %rbp /* Reload old frame pointer. */ ++L(UW2): ++ /* cfi_remember_state */ ++ /* cfi_def_cfa(%rsp, 8) */ ++ /* cfi_restore(%rbp) */ ++ ++ /* The first byte of the flags contains the FFI_TYPE. */ ++ cmpb $UNIX64_RET_LAST, %cl ++ movzbl %cl, %r10d ++ leaq L(store_table)(%rip), %r11 ++ ja L(sa) ++ leaq (%r11, %r10, 8), %r10 ++ ++ /* Prep for the structure cases: scratch area in redzone. */ ++ leaq -20(%rsp), %rsi ++ jmp *%r10 ++ ++ .balign 8 ++L(store_table): ++E(L(store_table), UNIX64_RET_VOID) ++ ret ++E(L(store_table), UNIX64_RET_UINT8) ++ movzbl %al, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_UINT16) ++ movzwl %ax, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_UINT32) ++ movl %eax, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT8) ++ movsbq %al, %rax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT16) ++ movswq %ax, %rax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT32) ++ cltq ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_INT64) ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_XMM32) ++ movd %xmm0, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_XMM64) ++ movq %xmm0, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_X87) ++ fstpt (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_X87_2) ++ fstpt (%rdi) ++ fstpt 16(%rdi) ++ ret ++E(L(store_table), UNIX64_RET_ST_XMM0_RAX) ++ movq %rax, 8(%rsi) ++ jmp L(s3) ++E(L(store_table), UNIX64_RET_ST_RAX_XMM0) ++ movq %xmm0, 8(%rsi) ++ jmp L(s2) ++E(L(store_table), UNIX64_RET_ST_XMM0_XMM1) ++ movq %xmm1, 8(%rsi) ++ jmp L(s3) ++E(L(store_table), UNIX64_RET_ST_RAX_RDX) ++ movq %rdx, 8(%rsi) ++L(s2): ++ movq %rax, (%rsi) ++ shrl $UNIX64_SIZE_SHIFT, %ecx ++ rep movsb ++ ret ++ .balign 8 ++L(s3): ++ movq %xmm0, (%rsi) ++ shrl $UNIX64_SIZE_SHIFT, %ecx ++ rep movsb ++ ret ++ ++L(sa): call PLT(C(abort)) ++ ++ /* Many times we can avoid loading any SSE registers at all. ++ It's not worth an indirect jump to load the exact set of ++ SSE registers needed; zero or all is a good compromise. */ ++ .balign 2 ++L(UW3): ++ /* cfi_restore_state */ ++L(load_sse): ++ movdqa 0x30(%r10), %xmm0 ++ movdqa 0x40(%r10), %xmm1 ++ movdqa 0x50(%r10), %xmm2 ++ movdqa 0x60(%r10), %xmm3 ++ movdqa 0x70(%r10), %xmm4 ++ movdqa 0x80(%r10), %xmm5 ++ movdqa 0x90(%r10), %xmm6 ++ movdqa 0xa0(%r10), %xmm7 ++ jmp L(ret_from_load_sse) ++ ++L(UW4): ++ENDF(C(ffi_call_unix64)) ++ ++/* 6 general registers, 8 vector registers, ++ 32 bytes of rvalue, 8 bytes of alignment. */ ++#define ffi_closure_OFS_G 0 ++#define ffi_closure_OFS_V (6*8) ++#define ffi_closure_OFS_RVALUE (ffi_closure_OFS_V + 8*16) ++#define ffi_closure_FS (ffi_closure_OFS_RVALUE + 32 + 8) ++ ++/* The location of rvalue within the red zone after deallocating the frame. */ ++#define ffi_closure_RED_RVALUE (ffi_closure_OFS_RVALUE - ffi_closure_FS) ++ ++ .balign 2 ++ .globl C(ffi_closure_unix64_sse) ++ FFI_HIDDEN(C(ffi_closure_unix64_sse)) ++ ++C(ffi_closure_unix64_sse): ++L(UW5): ++ subq $ffi_closure_FS, %rsp ++L(UW6): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++ ++ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) ++ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) ++ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) ++ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) ++ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) ++ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) ++ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) ++ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) ++ jmp L(sse_entry1) ++ ++L(UW7): ++ENDF(C(ffi_closure_unix64_sse)) ++ ++ .balign 2 ++ .globl C(ffi_closure_unix64) ++ FFI_HIDDEN(C(ffi_closure_unix64)) ++ ++C(ffi_closure_unix64): ++L(UW8): ++ subq $ffi_closure_FS, %rsp ++L(UW9): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++L(sse_entry1): ++ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) ++ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) ++ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) ++ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) ++ movq %r8, ffi_closure_OFS_G+0x20(%rsp) ++ movq %r9, ffi_closure_OFS_G+0x28(%rsp) ++ ++#ifdef __ILP32__ ++ movl FFI_TRAMPOLINE_SIZE(%r10), %edi /* Load cif */ ++ movl FFI_TRAMPOLINE_SIZE+4(%r10), %esi /* Load fun */ ++ movl FFI_TRAMPOLINE_SIZE+8(%r10), %edx /* Load user_data */ ++#else ++ movq FFI_TRAMPOLINE_SIZE(%r10), %rdi /* Load cif */ ++ movq FFI_TRAMPOLINE_SIZE+8(%r10), %rsi /* Load fun */ ++ movq FFI_TRAMPOLINE_SIZE+16(%r10), %rdx /* Load user_data */ ++#endif ++L(do_closure): ++ leaq ffi_closure_OFS_RVALUE(%rsp), %rcx /* Load rvalue */ ++ movq %rsp, %r8 /* Load reg_args */ ++ leaq ffi_closure_FS+8(%rsp), %r9 /* Load argp */ ++ call C(ffi_closure_unix64_inner) ++ ++ /* Deallocate stack frame early; return value is now in redzone. */ ++ addq $ffi_closure_FS, %rsp ++L(UW10): ++ /* cfi_adjust_cfa_offset(-ffi_closure_FS) */ ++ ++ /* The first byte of the return value contains the FFI_TYPE. */ ++ cmpb $UNIX64_RET_LAST, %al ++ movzbl %al, %r10d ++ leaq L(load_table)(%rip), %r11 ++ ja L(la) ++ leaq (%r11, %r10, 8), %r10 ++ leaq ffi_closure_RED_RVALUE(%rsp), %rsi ++ jmp *%r10 ++ ++ .balign 8 ++L(load_table): ++E(L(load_table), UNIX64_RET_VOID) ++ ret ++E(L(load_table), UNIX64_RET_UINT8) ++ movzbl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_UINT16) ++ movzwl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_UINT32) ++ movl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT8) ++ movsbl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT16) ++ movswl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT32) ++ movl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_INT64) ++ movq (%rsi), %rax ++ ret ++E(L(load_table), UNIX64_RET_XMM32) ++ movd (%rsi), %xmm0 ++ ret ++E(L(load_table), UNIX64_RET_XMM64) ++ movq (%rsi), %xmm0 ++ ret ++E(L(load_table), UNIX64_RET_X87) ++ fldt (%rsi) ++ ret ++E(L(load_table), UNIX64_RET_X87_2) ++ fldt 16(%rsi) ++ fldt (%rsi) ++ ret ++E(L(load_table), UNIX64_RET_ST_XMM0_RAX) ++ movq 8(%rsi), %rax ++ jmp L(l3) ++E(L(load_table), UNIX64_RET_ST_RAX_XMM0) ++ movq 8(%rsi), %xmm0 ++ jmp L(l2) ++E(L(load_table), UNIX64_RET_ST_XMM0_XMM1) ++ movq 8(%rsi), %xmm1 ++ jmp L(l3) ++E(L(load_table), UNIX64_RET_ST_RAX_RDX) ++ movq 8(%rsi), %rdx ++L(l2): ++ movq (%rsi), %rax ++ ret ++ .balign 8 ++L(l3): ++ movq (%rsi), %xmm0 ++ ret ++ ++L(la): call PLT(C(abort)) ++ ++L(UW11): ++ENDF(C(ffi_closure_unix64)) ++ ++ .balign 2 ++ .globl C(ffi_go_closure_unix64_sse) ++ FFI_HIDDEN(C(ffi_go_closure_unix64_sse)) ++ ++C(ffi_go_closure_unix64_sse): ++L(UW12): ++ subq $ffi_closure_FS, %rsp ++L(UW13): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++ ++ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) ++ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) ++ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) ++ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) ++ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) ++ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) ++ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) ++ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) ++ jmp L(sse_entry2) ++ ++L(UW14): ++ENDF(C(ffi_go_closure_unix64_sse)) ++ ++ .balign 2 ++ .globl C(ffi_go_closure_unix64) ++ FFI_HIDDEN(C(ffi_go_closure_unix64)) ++ ++C(ffi_go_closure_unix64): ++L(UW15): ++ subq $ffi_closure_FS, %rsp ++L(UW16): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++L(sse_entry2): ++ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) ++ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) ++ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) ++ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) ++ movq %r8, ffi_closure_OFS_G+0x20(%rsp) ++ movq %r9, ffi_closure_OFS_G+0x28(%rsp) ++ ++#ifdef __ILP32__ ++ movl 4(%r10), %edi /* Load cif */ ++ movl 8(%r10), %esi /* Load fun */ ++ movl %r10d, %edx /* Load closure (user_data) */ ++#else ++ movq 8(%r10), %rdi /* Load cif */ ++ movq 16(%r10), %rsi /* Load fun */ ++ movq %r10, %rdx /* Load closure (user_data) */ ++#endif ++ jmp L(do_closure) ++ ++L(UW17): ++ENDF(C(ffi_go_closure_unix64)) ++ ++/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ ++ ++#ifdef __APPLE__ ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EHFrame0: ++#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) ++.section .eh_frame,"a",@unwind ++#else ++.section .eh_frame,"a",@progbits ++#endif ++ ++#ifdef HAVE_AS_X86_PCREL ++# define PCREL(X) X - . ++#else ++# define PCREL(X) X@rel ++#endif ++ ++/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ ++#define ADV(N, P) .byte 2, L(N)-L(P) ++ ++ .balign 8 ++L(CIE): ++ .set L(set0),L(ECIE)-L(SCIE) ++ .long L(set0) /* CIE Length */ ++L(SCIE): ++ .long 0 /* CIE Identifier Tag */ ++ .byte 1 /* CIE Version */ ++ .ascii "zR\0" /* CIE Augmentation */ ++ .byte 1 /* CIE Code Alignment Factor */ ++ .byte 0x78 /* CIE Data Alignment Factor */ ++ .byte 0x10 /* CIE RA Column */ ++ .byte 1 /* Augmentation size */ ++ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ ++ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp offset 8 */ ++ .byte 0x80+16, 1 /* DW_CFA_offset, %rip offset 1*-8 */ ++ .balign 8 ++L(ECIE): ++ ++ .set L(set1),L(EFDE1)-L(SFDE1) ++ .long L(set1) /* FDE Length */ ++L(SFDE1): ++ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW0)) /* Initial location */ ++ .long L(UW4)-L(UW0) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW1, UW0) ++ .byte 0xc, 6, 32 /* DW_CFA_def_cfa, %rbp 32 */ ++ .byte 0x80+6, 2 /* DW_CFA_offset, %rbp 2*-8 */ ++ ADV(UW2, UW1) ++ .byte 0xa /* DW_CFA_remember_state */ ++ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp 8 */ ++ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ ++ ADV(UW3, UW2) ++ .byte 0xb /* DW_CFA_restore_state */ ++ .balign 8 ++L(EFDE1): ++ ++ .set L(set2),L(EFDE2)-L(SFDE2) ++ .long L(set2) /* FDE Length */ ++L(SFDE2): ++ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW5)) /* Initial location */ ++ .long L(UW7)-L(UW5) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW6, UW5) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE2): ++ ++ .set L(set3),L(EFDE3)-L(SFDE3) ++ .long L(set3) /* FDE Length */ ++L(SFDE3): ++ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW8)) /* Initial location */ ++ .long L(UW11)-L(UW8) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW9, UW8) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ ADV(UW10, UW9) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset 8 */ ++L(EFDE3): ++ ++ .set L(set4),L(EFDE4)-L(SFDE4) ++ .long L(set4) /* FDE Length */ ++L(SFDE4): ++ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW12)) /* Initial location */ ++ .long L(UW14)-L(UW12) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW13, UW12) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE4): ++ ++ .set L(set5),L(EFDE5)-L(SFDE5) ++ .long L(set5) /* FDE Length */ ++L(SFDE5): ++ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW15)) /* Initial location */ ++ .long L(UW17)-L(UW15) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW16, UW15) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE5): ++#ifdef __APPLE__ ++ .subsections_via_symbols ++#endif ++ ++#endif /* __x86_64__ */ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/win64.S modified/Modules/_ctypes/libffi_ios/x86/win64.S +--- orig/Modules/_ctypes/libffi_ios/x86/win64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/win64.S 2015-03-12 21:33:31.000000000 +0800 +@@ -0,0 +1,219 @@ ++#define LIBFFI_ASM ++#include ++#include ++#include ++ ++#if defined(HAVE_AS_CFI_PSEUDO_OP) ++ .cfi_sections .debug_frame ++#endif ++ ++#define arg0 %rcx ++#define arg1 %rdx ++#define arg2 %r8 ++#define arg3 %r9 ++ ++#ifdef SYMBOL_UNDERSCORE ++#define SYMBOL_NAME(name) _##name ++#else ++#define SYMBOL_NAME(name) name ++#endif ++ ++.macro E which ++ .align 8 ++ .org 0b + \which * 8 ++.endm ++ ++ .text ++ ++/* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10) ++ ++ Bit o trickiness here -- FRAME is the base of the stack frame ++ for this function. This has been allocated by ffi_call. We also ++ deallocate some of the stack that has been alloca'd. */ ++ ++ .align 8 ++ .globl ffi_call_win64 ++ ++ .seh_proc ffi_call_win64 ++ffi_call_win64: ++ cfi_startproc ++ /* Set up the local stack frame and install it in rbp/rsp. */ ++ movq (%rsp), %rax ++ movq %rbp, (arg1) ++ movq %rax, 8(arg1) ++ movq arg1, %rbp ++ cfi_def_cfa(%rbp, 16) ++ cfi_rel_offset(%rbp, 0) ++ .seh_pushreg %rbp ++ .seh_setframe %rbp, 0 ++ .seh_endprologue ++ movq arg0, %rsp ++ ++ movq arg2, %r10 ++ ++ /* Load all slots into both general and xmm registers. */ ++ movq (%rsp), %rcx ++ movsd (%rsp), %xmm0 ++ movq 8(%rsp), %rdx ++ movsd 8(%rsp), %xmm1 ++ movq 16(%rsp), %r8 ++ movsd 16(%rsp), %xmm2 ++ movq 24(%rsp), %r9 ++ movsd 24(%rsp), %xmm3 ++ ++ call *16(%rbp) ++ ++ movl 24(%rbp), %ecx ++ movq 32(%rbp), %r8 ++ leaq 0f(%rip), %r10 ++ cmpl $FFI_TYPE_SMALL_STRUCT_4B, %ecx ++ leaq (%r10, %rcx, 8), %r10 ++ ja 99f ++ jmp *%r10 ++ ++/* Below, we're space constrained most of the time. Thus we eschew the ++ modern "mov, pop, ret" sequence (5 bytes) for "leave, ret" (2 bytes). */ ++.macro epilogue ++ leaveq ++ cfi_remember_state ++ cfi_def_cfa(%rsp, 8) ++ cfi_restore(%rbp) ++ ret ++ cfi_restore_state ++.endm ++ ++ .align 8 ++0: ++E FFI_TYPE_VOID ++ epilogue ++E FFI_TYPE_INT ++ movslq %eax, %rax ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_FLOAT ++ movss %xmm0, (%r8) ++ epilogue ++E FFI_TYPE_DOUBLE ++ movsd %xmm0, (%r8) ++ epilogue ++E FFI_TYPE_LONGDOUBLE ++ call abort ++E FFI_TYPE_UINT8 ++ movzbl %al, %eax ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_SINT8 ++ movsbq %al, %rax ++ jmp 98f ++E FFI_TYPE_UINT16 ++ movzwl %ax, %eax ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_SINT16 ++ movswq %ax, %rax ++ jmp 98f ++E FFI_TYPE_UINT32 ++ movl %eax, %eax ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_SINT32 ++ movslq %eax, %rax ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_UINT64 ++98: movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_SINT64 ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_STRUCT ++ epilogue ++E FFI_TYPE_POINTER ++ movq %rax, (%r8) ++ epilogue ++E FFI_TYPE_COMPLEX ++ call abort ++E FFI_TYPE_SMALL_STRUCT_1B ++ movb %al, (%r8) ++ epilogue ++E FFI_TYPE_SMALL_STRUCT_2B ++ movw %ax, (%r8) ++ epilogue ++E FFI_TYPE_SMALL_STRUCT_4B ++ movl %eax, (%r8) ++ epilogue ++ ++ .align 8 ++99: call abort ++ ++.purgem epilogue ++ ++ cfi_endproc ++ .seh_endproc ++ ++ ++/* 32 bytes of outgoing register stack space, 8 bytes of alignment, ++ 16 bytes of result, 32 bytes of xmm registers. */ ++#define ffi_clo_FS (32+8+16+32) ++#define ffi_clo_OFF_R (32+8) ++#define ffi_clo_OFF_X (32+8+16) ++ ++ .align 8 ++ .globl ffi_go_closure_win64 ++ ++ .seh_proc ffi_go_closure_win64 ++ffi_go_closure_win64: ++ cfi_startproc ++ /* Save all integer arguments into the incoming reg stack space. */ ++ movq arg0, 8(%rsp) ++ movq arg1, 16(%rsp) ++ movq arg2, 24(%rsp) ++ movq arg3, 32(%rsp) ++ ++ movq 8(%r10), arg0 /* load cif */ ++ movq 16(%r10), arg1 /* load fun */ ++ movq %r10, arg2 /* closure is user_data */ ++ jmp 0f ++ cfi_endproc ++ .seh_endproc ++ ++ .align 8 ++ .globl ffi_closure_win64 ++ ++ .seh_proc ffi_closure_win64 ++ffi_closure_win64: ++ cfi_startproc ++ /* Save all integer arguments into the incoming reg stack space. */ ++ movq arg0, 8(%rsp) ++ movq arg1, 16(%rsp) ++ movq arg2, 24(%rsp) ++ movq arg3, 32(%rsp) ++ ++ movq FFI_TRAMPOLINE_SIZE(%r10), arg0 /* load cif */ ++ movq FFI_TRAMPOLINE_SIZE+8(%r10), arg1 /* load fun */ ++ movq FFI_TRAMPOLINE_SIZE+16(%r10), arg2 /* load user_data */ ++0: ++ subq $ffi_clo_FS, %rsp ++ cfi_adjust_cfa_offset(ffi_clo_FS) ++ .seh_stackalloc ffi_clo_FS ++ .seh_endprologue ++ ++ /* Save all sse arguments into the stack frame. */ ++ movsd %xmm0, ffi_clo_OFF_X(%rsp) ++ movsd %xmm1, ffi_clo_OFF_X+8(%rsp) ++ movsd %xmm2, ffi_clo_OFF_X+16(%rsp) ++ movsd %xmm3, ffi_clo_OFF_X+24(%rsp) ++ ++ leaq ffi_clo_OFF_R(%rsp), arg3 ++ call ffi_closure_win64_inner ++ ++ /* Load the result into both possible result registers. */ ++ movq ffi_clo_OFF_R(%rsp), %rax ++ movsd ffi_clo_OFF_R(%rsp), %xmm0 ++ ++ addq $ffi_clo_FS, %rsp ++ cfi_adjust_cfa_offset(-ffi_clo_FS) ++ ret ++ ++ cfi_endproc ++ .seh_endproc +diff -Nru orig/Modules/makesetup modified/Modules/makesetup +--- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/makesetup 2015-02-28 13:35:58.000000000 +0800 +@@ -176,6 +176,7 @@ + *.c++) srcs="$srcs $arg";; + *.cxx) srcs="$srcs $arg";; + *.cpp) srcs="$srcs $arg";; ++ *.S) srcs="$srcs $arg";; + \$*) libs="$libs $arg" + cpps="$cpps $arg";; + *.*) echo 1>&2 "bad word $arg in $line" +@@ -205,6 +206,7 @@ + *.C) obj=`basename $src .C`.o; cc='$(CXX)';; + *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; + *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; ++ *.S) obj=`basename $src .S`.o; cc='$(CC)';; # Assembly + *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C + *) continue;; + esac +@@ -266,7 +268,7 @@ + *) sed -e " + 1i$NL/* Generated automatically from $config by makesetup. */ + /MARKER 1/i$NL$EXTDECLS +- ++ + /MARKER 2/i$NL$INITBITS + + " $config >config.c +diff -Nru orig/config.sub modified/config.sub +--- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 ++++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 +@@ -1512,6 +1512,8 @@ + ;; + -nacl*) + ;; ++ -ios*) ++ ;; + -none) + ;; + *) +diff -Nru orig/configure modified/configure +--- orig/configure 2015-02-03 19:49:02.000000000 +0800 ++++ modified/configure 2015-03-14 23:11:10.000000000 +0800 +@@ -3290,6 +3290,9 @@ + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-apple-ios) ++ ac_sys_system=iOS ++ ;; + *) + # for now, limit cross builds to known configurations + MACHDEP="unknown" +@@ -3332,6 +3335,15 @@ + _host_cpu=$host_cpu + esac + ;; ++ *-apple-ios) ++ case "$host_cpu" in ++ arm*) ++ _host_cpu=arm ++ ;; ++ *) ++ _host_cpu=$host_cpu ++ esac ++ ;; + *-*-cygwin*) + _host_cpu= + ;; +@@ -3411,6 +3423,9 @@ + define_xopen_source=no;; + Darwin/1[0-9].*) + define_xopen_source=no;; ++ # On iOS, defining _POSIX_C_SOURCE also disables platform specific features. ++ iOS/*) ++ define_xopen_source=no;; + # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but + # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined + # or has another value. By not (re)defining it, the defaults come in place. +@@ -5993,11 +6008,17 @@ + fi + + if test "$cross_compiling" = yes; then +- case "$READELF" in +- readelf|:) +- as_fn_error $? "readelf for the host is required for cross builds" "$LINENO" 5 +- ;; +- esac ++ case "$host" in ++ *-apple-ios) ++ # readelf not required for iOS cross builds. ++ ;; ++ *) ++ case "$READELF" in ++ readelf|:) ++ as_fn_error $? "readelf for the host is required for cross builds" "$LINENO" 5 ++ ;; ++ esac ++ esac + fi + + +@@ -16732,7 +16753,17 @@ + echo "creating Modules/Setup.local" >&6 + if test ! -f Modules/Setup.local + then +- echo "# Edit this file for local setup changes" >Modules/Setup.local ++ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM ++ then ++ echo "# Edit this file for local setup changes" >Modules/Setup.local ++ else ++ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local ++ then ++ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local ++ else ++ cp Modules/Setup.$_PYTHON_HOST_PLATFORM Modules/Setup.local ++ fi ++ fi + fi + + echo "creating Makefile" >&6 +diff -Nru orig/configure.ac modified/configure.ac +--- orig/configure.ac 2015-02-25 21:21:37.000000000 +0800 ++++ modified/configure.ac 2015-03-14 23:11:05.000000000 +0800 +@@ -373,6 +373,9 @@ + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-apple-ios) ++ ac_sys_system=iOS ++ ;; + *) + # for now, limit cross builds to known configurations + MACHDEP="unknown" +@@ -415,6 +418,15 @@ + _host_cpu=$host_cpu + esac + ;; ++ *-apple-ios) ++ case "$host_cpu" in ++ arm*) ++ _host_cpu=arm ++ ;; ++ *) ++ _host_cpu=$host_cpu ++ esac ++ ;; + *-*-cygwin*) + _host_cpu= + ;; +@@ -491,6 +503,9 @@ + define_xopen_source=no;; + Darwin/1@<:@0-9@:>@.*) + define_xopen_source=no;; ++ # On iOS, defining _POSIX_C_SOURCE also disables platform specific features. ++ iOS/*) ++ define_xopen_source=no;; + # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but + # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined + # or has another value. By not (re)defining it, the defaults come in place. +@@ -1023,11 +1038,17 @@ + + AC_CHECK_TOOLS([READELF], [readelf], [:]) + if test "$cross_compiling" = yes; then +- case "$READELF" in +- readelf|:) +- AC_MSG_ERROR([readelf for the host is required for cross builds]) +- ;; +- esac ++ case "$host" in ++ *-apple-ios) ++ # readelf not required for iOS cross builds. ++ ;; ++ *) ++ case "$READELF" in ++ readelf|:) ++ AC_MSG_ERROR([readelf for the host is required for cross builds]) ++ ;; ++ esac ++ esac + fi + AC_SUBST(READELF) + +@@ -4826,7 +4847,17 @@ + echo "creating Modules/Setup.local" >&AS_MESSAGE_FD + if test ! -f Modules/Setup.local + then +- echo "# Edit this file for local setup changes" >Modules/Setup.local ++ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM ++ then ++ echo "# Edit this file for local setup changes" >Modules/Setup.local ++ else ++ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local ++ then ++ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local ++ else ++ cp Modules/Setup.$_PYTHON_HOST_PLATFORM Modules/Setup.local ++ fi ++ fi + fi + + echo "creating Makefile" >&AS_MESSAGE_FD +diff -Nru orig/iOS/Makefile modified/iOS/Makefile +--- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/Makefile 2015-03-14 23:01:05.000000000 +0800 +@@ -0,0 +1,168 @@ ++# This is a "Meta-makefile" for building an iOS-compatible Python.framework. ++# It invokes the base makefile multiple times, once for each hardware platform ++# that needs to be supported; then it combines the products into a single "fat" ++# binary. ++ ++IOS_DIR=$(shell pwd) ++ ++# Extract the Python version from the master configure.ac ++PYTHON_VERSION=$(shell grep "m4_define.PYTHON_VERSION," ../configure.ac | sed "s/m4_define(PYTHON_VERSION, \(.*\))/\1/") ++ ++# Build identifier of the build OS. ++BUILD_OS_ID=x86_64-apple-darwin$(shell uname -r) ++ ++# IOS ARMV7 build commands and flags ++IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path1) ++IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 ++IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 ++ ++# IOS ARM64 build commands and flags ++IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) ++IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 ++IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 ++ ++# IOS_SIMULATOR_64 build commands and flags ++IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) ++IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=6.0 ++IOS_SIMULATOR_64_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=6.0 ++ ++# IOS_SIMULATOR build commands and flags ++# This is provided for completeness, but shouldn't be required any more ++IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) ++IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 ++IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 ++ ++.PHONY: all clean ++ ++all: ../Python.framework ++ ++clean: ++ rm -rf build ++ rm -rf ../Python.framework ++ rm -rf XCode-sample/sample.xcodeproj/project.xcworkspace ++ rm -rf XCode-sample/sample.xcodeproj/xcuserdata ++ rm -rf XCode-sample/Python.framework ++ ++build/host/bin/python$(PYTHON_VERSION): ++ # Configure and make the local build, providing compiled resources. ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && ./configure --prefix=$(IOS_DIR)/build/host --without-ensurepip ++ cd .. && make ++ cd .. && make install ++ ++build/ios-simulator-x86_64.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++ # Configure and build Simulator library ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && \ ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ ++ --host=x86_64-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_SIMULATOR_64_CC)" LD="$(IOS_SIMULATOR_64_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-simulator-x86_64 \ ++ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ++ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf ios-simulator-x86_64.tar.gz ios-simulator-x86_64 && rm -rf ios-simulator-x86_64 ++ ++build/ios-simulator-i386.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++ # Configure and build Simulator library ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && \ ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ ++ --host=i386-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-simulator-i386 \ ++ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ++ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf ios-simulator-i386.tar.gz ios-simulator-i386 && rm -rf ios-simulator-i386 ++ ++build/ios-armv7.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++ # Configure and build ARMv7 library ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && \ ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure ++ --host=armv7-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_ARMV7_CC)" LD="$(IOS_ARMV7_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-armv7 \ ++ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ++ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf ios-armv7.tar.gz ios-armv7 && rm -rf ios-armv7 ++ ++build/ios-arm64.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++ # Configure and build ARM64 library ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && \ ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ ++ --host=aarch64-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_ARM64_CC)" LD="$(IOS_ARM64_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-arm64 \ ++ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ++ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf ios-arm64.tar.gz ios-arm64 && rm -rf ios-arm64 ++ ++# FIXME - ARMv7 build is currently broken due to libffi problems. ++# ../Python.framework: build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-arm64.tar.gz ++../Python.framework: build/ios-simulator-x86_64.tar.gz build/ios-arm64.tar.gz ++ # Unpack the archived install directories ++ cd build && tar zxvf ios-simulator-x86_64.tar.gz ++ # cd build && tar zxvf ios-armv7.tar.gz ++ cd build && tar zxvf ios-arm64.tar.gz ++ ++ # Create the framework directory and set it as the current version ++ mkdir -p ../Python.framework/Versions/$(PYTHON_VERSION)/ ++ cd ../Python.framework/Versions && ln -fs $(PYTHON_VERSION) Current ++ ++ # Copy the headers. The headers are the same for every platform, except for pyconfig.h; ++ # use the x86_64 simulator build because reasons. ++ cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) ../Python.framework/Versions/$(PYTHON_VERSION)/Headers ++ # The only headers that change between versions is pyconfig.h; copy each supported version... ++ cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h ++ cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h ++ # cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h ++ # ... and then copy in a master pyconfig.h to unify them all. ++ cp include/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h ++ ++ # Link the current Headers to the top level ++ cd ../Python.framework && ln -fs Versions/Current/Headers ++ ++ # Copy the standard library from the simulator build. Again, the ++ # pure Python standard library is the same on every platform; ++ # use the simulator version because reasons. ++ mkdir -p ../Python.framework/Versions/$(PYTHON_VERSION)/Resources ++ cp -r build/ios-simulator-x86_64/lib ../Python.framework/Versions/$(PYTHON_VERSION)/Resources ++ ++ # Remove the pieces of the resources directory that aren't needed: ++ # libpython.a isn't needed in the lib directory ++ rm -f ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a ++ # pkgconfig isn't needed on the device ++ rm -rf ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig ++ # Remove all the modules we don't need, and compress the rest. ++ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && \ ++ rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ ++ config-$(PYTHON_VERSION) ctypes/test distutils/tests site-pacakges sqlite3/test ++ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && \ ++ zip -r ../python$(subst .,,$(PYTHON_VERSION)).zip * ++ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && rm -rf * ++ ++ # Link the current Resources to the top level ++ cd ../Python.framework && ln -fs Versions/Current/Resources ++ ++ # Create a fat binary for the libPython library ++ xcrun lipo -create -output \ ++ ../Python.framework/Versions/$(PYTHON_VERSION)/Python \ ++ build/ios-simulator-x86_64/lib/libpython$(PYTHON_VERSION).a \ ++ build/ios-arm64/lib/libpython$(PYTHON_VERSION).a; ++ # build/python/ios-armv7/lib/libpython$(PYTHON_VERSION).a; ++ ++ # Link the current Python library to the top level ++ cd ../Python.framework && ln -fs Versions/Current/Python +diff -Nru orig/iOS/README modified/iOS/README +--- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/README 2015-03-14 23:20:19.000000000 +0800 +@@ -0,0 +1,131 @@ ++==================== ++Python on iOS README ++==================== ++ ++:Authors: ++ Russell Keith-Magee (2015) ++ ++:Version: 3.4.2 ++ ++This document provides a overview of eccentricities of building and using ++Python on iOS. ++ ++Build instructions ++================== ++ ++The iOS build must be run on an Mac with XCode installed. To build the iOS ++framework, unpack the Python sources, move into the iOS subdirectory, and ++run ``make``. There are no configuration options to this build process - ++it will use XCode utilities to identify the location of compilers, ++resource directories, and so on. ++ ++The build process will configure and build Python 4 times, producing: ++ ++ * A "host" version of Python ++ * A version of Python compiled for the x86-64 iOS Simulator ++ * A version of Python compiled for ARMv7 iOS devices ++ * A version of Python compiled for ARM64 iOS devices ++ ++Build products will be "installed" into iOS/build. The built products will ++then be combined into a single "fat" ``Python.framework`` that can be added to ++an XCode project. The resulting framework will be located in the root ++directory of the Python source tree. ++ ++A ``make clean`` target also exists to clean out all build products. ++ ++iOS-specific details ++==================== ++ ++* ``import sys; sys.platform`` will report as "ios", regardless of whether you are on ++ a simulator or a real platform. ++ ++* ``import platform; platform.machine()`` will return the device identifier. ++ For example, an iPhone 5S will return "iPhone6,2" ++ ++* The following modules are not currently supported: ++ ++ - ``bsddb`` ++ - ``bz2`` ++ - ``curses`` ++ - ``dbm`` ++ - ``gdbm`` ++ - ``hotshot`` ++ - ``idlelib`` ++ - ``lzma`` ++ - ``nis`` ++ - ``ossaudiodev`` ++ - ``readline`` ++ - ``spwd`` ++ - ``sqlite3`` ++ - ``ssl`` ++ - ``tkinter`` ++ - ``turtledemo`` ++ - ``wsgiref`` ++ ++* Due to limitations in using dynamic loading on iOS, binary Python modules must be ++ statically-linked into the exectuable. The framework package produced by the iOS ++ ``make install`` statically links all the supported standard library modules. ++ If you have a third-party Python binary module, you'll need to incorporate the ++ source files for that module into the sources for your own app. ++ ++ If you want to add or remove a binary module from the set that is included in the ++ Python library, you can do so by providing module setup files for each platform. ++ There are three default module configuration files: ++ ++ - ``Modules/Setup.ios-aarch64`` for ARM64 iOS builds ++ - ``Modules/Setup.ios-arm`` for ARMv7 iOS builds ++ - ``Modules/Setup.ios-x86_64`` for x86_64 iOS simulator builds ++ ++ If you copy these files to a ``.local`` version (e.g., ++ ``Modules/Setup.ios-aarch64.local``), the local version will override the ++ default. You can then make modifications to the modules that will be included ++ in the iOS framework, and the flags passed to the compiler when compiling those ++ modules. ++ ++Adding Python to an iOS project ++=============================== ++ ++The iOS subdirectory contains a sample XCode 6.1 project to demonstrate how ++Python can be added to an iOS project. After building the Python iOS framework, ++copy it into the ``iOS/XCode-sample`` directory. You should end up with a directory ++structure that looks like this:: ++ ++ XCode-sample/ ++ Python.framework/ - Manually copied into the project ++ app/ ++ sample/ ++ __init__.py ++ main.py - The Python script to be executed ++ app_packages/ - A directory that will be added to the `PYTHONPATH` at runtime ++ sample ++ Images.xcassets ++ en.lproj ++ main.c - The main() definition for the iOS application ++ sample-Info.plist ++ sample-Prefix.pch ++ sample.xcodeproj - The XCode project file ++ ++If you open the project file is project and run it, you should get output ++similar to the following:: ++ ++ 2015-03-14 22:15:19.595 sample[84454:22100187] PythonHome is: /Users/rkm/Library/Developer/CoreSimulator/Devices/19FE988F-E5C3-4A6C-8752-C12DE9BF079D/data/Containers/Bundle/Application/A949B323-FD20-4C76-B370-99AFF294E9D5/sample.app ++ 2015-03-14 22:15:19.597 sample[84454:22100187] Initializing Python runtime ++ 2015-03-14 22:15:19.758 sample[84454:22100187] Running /Users/rkm/Library/Developer/CoreSimulator/Devices/19FE988F-E5C3-4A6C-8752-C12DE9BF079D/data/Containers/Bundle/Application/A949B323-FD20-4C76-B370-99AFF294E9D5/sample.app/app/sample/main.py ++ Hello, World. ++ 2015-03-14 22:15:19.792 sample[84454:22100187] Leaving ++ ++You can now modify the provide Python source code, import and use ++code from the Python standard library, and add third-party modules to ++app_packages. ++ ++The sample app is a console-only app, so it isn't of any real practical use. ++Python can be embedded into any Objective-C project using the normal Python ++APIs for embedding; but if you want to write a full iOS app in Python, or ++you want to access iOS services from within embedded code, you'll need to ++bridge between the Objective-C environment and the Python environment. ++This briding isn't something that Python does out of the box; you'll need ++to use a third-party library like `Rubicon ObjC`_, `Pyobjus`_ or `PyObjC`_. ++ ++.. _Rubicon ObjC: http://pybee.org/rubicon ++.. _Pyobjus: http://pyobjus.readthedocs.org/ ++.. _PyObjC: https://pythonhosted.org/pyobjc/ +Binary files orig/iOS/XCode-sample/.DS_Store and modified/iOS/XCode-sample/.DS_Store differ +diff -Nru orig/iOS/XCode-sample/app/sample/main.py modified/iOS/XCode-sample/app/sample/main.py +--- orig/iOS/XCode-sample/app/sample/main.py 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/app/sample/main.py 2015-03-14 22:02:09.000000000 +0800 +@@ -0,0 +1,3 @@ ++ ++if __name__ == '__main__': ++ print("Hello, World.") +diff -Nru orig/iOS/XCode-sample/app_packages/README modified/iOS/XCode-sample/app_packages/README +--- orig/iOS/XCode-sample/app_packages/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/app_packages/README 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1 @@ ++This directory exists so that 3rd party packages can be installed here. +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json +--- orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1,53 @@ ++{ ++ "images" : [ ++ { ++ "idiom" : "iphone", ++ "size" : "29x29", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "iphone", ++ "size" : "40x40", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "iphone", ++ "size" : "60x60", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "29x29", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "29x29", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "40x40", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "40x40", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "76x76", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "76x76", ++ "scale" : "2x" ++ } ++ ], ++ "info" : { ++ "version" : 1, ++ "author" : "xcode" ++ } ++} +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json +--- orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1,51 @@ ++{ ++ "images" : [ ++ { ++ "orientation" : "portrait", ++ "idiom" : "iphone", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "iphone", ++ "subtype" : "retina4", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "1x" ++ }, ++ { ++ "orientation" : "landscape", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "1x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "landscape", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ } ++ ], ++ "info" : { ++ "version" : 1, ++ "author" : "xcode" ++ } ++} +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings +--- orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1 @@ ++/* Localized versions of Info.plist keys */ +diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/main.m +--- orig/iOS/XCode-sample/sample/main.m 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/main.m 2015-03-14 22:34:08.000000000 +0800 +@@ -0,0 +1,97 @@ ++// ++// main.m ++// A main module for starting Python projects under iOS. ++// ++ ++#import ++#import ++#include ++#include ++ ++int main(int argc, char *argv[]) { ++ int ret = 0; ++ unsigned int i; ++ wchar_t* python_home; ++ wchar_t** python_argv; ++ @autoreleasepool { ++ ++ NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; ++ ++ // Special environment to prefer .pyo, and don't write bytecode if .py are found ++ // because the process will not have write attribute on the device. ++ putenv("PYTHONOPTIMIZE=2"); ++ putenv("PYTHONDONTWRITEBYTECODE=1"); ++ putenv("PYTHONNOUSERSITE=1"); ++ ++ NSString *python_path = [NSString stringWithFormat:@"PYTHONPATH=%@/src:%@/app_packages", ++ resourcePath, resourcePath, nil]; ++ putenv((char *)[python_path UTF8String]); ++ // putenv("PYTHONVERBOSE=1"); ++ ++ NSLog(@"PythonHome is: %s", [resourcePath UTF8String]); ++ python_home = _Py_char2wchar([resourcePath cStringUsingEncoding:NSUTF8StringEncoding], NULL); ++ Py_SetPythonHome(python_home); ++ ++ NSLog(@"Initializing Python runtime"); ++ Py_Initialize(); ++ ++ python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * argc); ++ for (i = 0; i < argc; i++) { ++ python_argv[i] = _Py_char2wchar(argv[i], NULL); ++ } ++ PySys_SetArgv(argc, python_argv); ++ ++ // If other modules are using thread, we need to initialize them before. ++ PyEval_InitThreads(); ++ ++ // Search and start main.py ++ const char * prog = [ ++ [[NSBundle mainBundle] pathForResource:@"app/sample/main" ++ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; ++ NSLog(@"Running %s", prog); ++ ++ @try { ++ FILE* fd = fopen(prog, "r"); ++ if (fd == NULL) { ++ ret = 1; ++ NSLog(@"Unable to open main.py, abort."); ++ } else { ++ ret = PyRun_SimpleFileEx(fd, prog, 1); ++ if (ret != 0) { ++ NSLog(@"Application quit abnormally!"); ++ } else { ++ // In a normal iOS application, the following line is what ++ // actually runs the application. It requires that the ++ // Objective-C runtime environment has a class named ++ // "PythonAppDelegate". This sample project doesn't define ++ // one, because Objective-C bridging isn't something ++ // Python does out of the box. You'll need to use ++ // a library like Rubicon-ObjC [1], Pyobjus [2] or ++ // PyObjC [3] if you want to run an *actual* iOS app. ++ // [1] http://pybee.org/rubicon ++ // [2] http://pyobjus.readthedocs.org/ ++ // [3] https://pythonhosted.org/pyobjc/ ++ ++ // UIApplicationMain(argc, argv, nil, @"PythonAppDelegate"); ++ } ++ } ++ } ++ @catch (NSException *exception) { ++ NSLog(@"Python runtime error: %@", [exception reason]); ++ } ++ @finally { ++ Py_Finalize(); ++ } ++ ++ error: ++ if (python_argv) { ++ for (i = 0; i < argc; i++) ++ PyMem_RawFree(python_argv[i]); ++ PyMem_RawFree(python_argv); ++ } ++ NSLog(@"Leaving"); ++ } ++ ++ exit(ret); ++ return ret; ++} +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-sample/sample/sample-Info.plist +--- orig/iOS/XCode-sample/sample/sample-Info.plist 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Info.plist 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1,45 @@ ++ ++ ++ ++ ++ CFBundleDevelopmentRegion ++ en ++ CFBundleDisplayName ++ ${PRODUCT_NAME} ++ CFBundleExecutable ++ ${EXECUTABLE_NAME} ++ CFBundleIdentifier ++ com.example.${PRODUCT_NAME:rfc1034identifier} ++ CFBundleInfoDictionaryVersion ++ 6.0 ++ CFBundleName ++ ${PRODUCT_NAME} ++ CFBundlePackageType ++ APPL ++ CFBundleShortVersionString ++ 1.0 ++ CFBundleSignature ++ ???? ++ CFBundleVersion ++ 1.0 ++ LSRequiresIPhoneOS ++ ++ UIRequiredDeviceCapabilities ++ ++ armv7 ++ ++ UISupportedInterfaceOrientations ++ ++ UIInterfaceOrientationPortrait ++ UIInterfaceOrientationLandscapeLeft ++ UIInterfaceOrientationLandscapeRight ++ ++ UISupportedInterfaceOrientations~ipad ++ ++ UIInterfaceOrientationPortrait ++ UIInterfaceOrientationPortraitUpsideDown ++ UIInterfaceOrientationLandscapeLeft ++ UIInterfaceOrientationLandscapeRight ++ ++ ++ +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-sample/sample/sample-Prefix.pch +--- orig/iOS/XCode-sample/sample/sample-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2015-03-14 21:57:52.000000000 +0800 +@@ -0,0 +1,16 @@ ++// ++// Prefix header ++// ++// The contents of this file are implicitly included at the beginning of every source file. ++// ++ ++#import ++ ++#ifndef __IPHONE_3_0 ++#warning "This project uses features only available in iOS SDK 3.0 and later." ++#endif ++ ++#ifdef __OBJC__ ++ #import ++ #import ++#endif +\ No newline at end of file +diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj +--- orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-03-14 22:03:22.000000000 +0800 +@@ -0,0 +1,373 @@ ++// !$*UTF8*$! ++{ ++ archiveVersion = 1; ++ classes = { ++ }; ++ objectVersion = 46; ++ objects = { ++ ++/* Begin PBXBuildFile section */ ++ 605737FC1AB4772A00F05C6F /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 60796F35191A76C400A9926B /* lib */; }; ++ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE519190F4100A9926B /* Foundation.framework */; }; ++ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE719190F4100A9926B /* CoreGraphics.framework */; }; ++ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE919190F4100A9926B /* UIKit.framework */; }; ++ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 60796EEE19190F4100A9926B /* InfoPlist.strings */; }; ++ 60796EF219190F4100A9926B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60796EF119190F4100A9926B /* main.m */; }; ++ 60796EF819190F4100A9926B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60796EF719190F4100A9926B /* Images.xcassets */; }; ++ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1819190FBB00A9926B /* libz.dylib */; }; ++ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; ++ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; ++ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; ++ 60F0BABE191FC83F006EC268 /* app in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABD191FC83F006EC268 /* app */; }; ++ 60F0BAC0191FC868006EC268 /* app_packages in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABF191FC868006EC268 /* app_packages */; }; ++/* End PBXBuildFile section */ ++ ++/* Begin PBXFileReference section */ ++ 60796EE219190F4100A9926B /* sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; ++ 60796EE519190F4100A9926B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; ++ 60796EE719190F4100A9926B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; ++ 60796EE919190F4100A9926B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; ++ 60796EED19190F4100A9926B /* sample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "sample-Info.plist"; sourceTree = ""; }; ++ 60796EEF19190F4100A9926B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; ++ 60796EF119190F4100A9926B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; ++ 60796EF319190F4100A9926B /* sample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "sample-Prefix.pch"; sourceTree = ""; }; ++ 60796EF719190F4100A9926B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; ++ 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; ++ 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; ++ 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; ++ 60796F35191A76C400A9926B /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = Python.framework/Resources/lib; sourceTree = ""; }; ++ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; ++ 60F0BABD191FC83F006EC268 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; ++ 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; ++/* End PBXFileReference section */ ++ ++/* Begin PBXFrameworksBuildPhase section */ ++ 60796EDF19190F4100A9926B /* Frameworks */ = { ++ isa = PBXFrameworksBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */, ++ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */, ++ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */, ++ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */, ++ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */, ++ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */, ++ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXFrameworksBuildPhase section */ ++ ++/* Begin PBXGroup section */ ++ 60796ED919190F4100A9926B = { ++ isa = PBXGroup; ++ children = ( ++ 60796F1A19190FEB00A9926B /* Python */, ++ 60796EEB19190F4100A9926B /* sample */, ++ 60796EE419190F4100A9926B /* Frameworks */, ++ 60796EE319190F4100A9926B /* Products */, ++ ); ++ sourceTree = ""; ++ }; ++ 60796EE319190F4100A9926B /* Products */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796EE219190F4100A9926B /* sample.app */, ++ ); ++ name = Products; ++ sourceTree = ""; ++ }; ++ 60796EE419190F4100A9926B /* Frameworks */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796F1F1919174D00A9926B /* libsqlite3.dylib */, ++ 60796F1819190FBB00A9926B /* libz.dylib */, ++ 60796F2B1919C70800A9926B /* Python.framework */, ++ 60796EE519190F4100A9926B /* Foundation.framework */, ++ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, ++ 60796EE719190F4100A9926B /* CoreGraphics.framework */, ++ 60796EE919190F4100A9926B /* UIKit.framework */, ++ ); ++ name = Frameworks; ++ sourceTree = ""; ++ }; ++ 60796EEB19190F4100A9926B /* sample */ = { ++ isa = PBXGroup; ++ children = ( ++ 60F0BABF191FC868006EC268 /* app_packages */, ++ 60F0BABD191FC83F006EC268 /* app */, ++ 60796EF719190F4100A9926B /* Images.xcassets */, ++ 60796EEC19190F4100A9926B /* Supporting Files */, ++ ); ++ path = sample; ++ sourceTree = ""; ++ }; ++ 60796EEC19190F4100A9926B /* Supporting Files */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796EED19190F4100A9926B /* sample-Info.plist */, ++ 60796EEE19190F4100A9926B /* InfoPlist.strings */, ++ 60796EF119190F4100A9926B /* main.m */, ++ 60796EF319190F4100A9926B /* sample-Prefix.pch */, ++ ); ++ name = "Supporting Files"; ++ sourceTree = ""; ++ }; ++ 60796F1A19190FEB00A9926B /* Python */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796F35191A76C400A9926B /* lib */, ++ ); ++ name = Python; ++ sourceTree = ""; ++ }; ++/* End PBXGroup section */ ++ ++/* Begin PBXNativeTarget section */ ++ 60796EE119190F4100A9926B /* sample */ = { ++ isa = PBXNativeTarget; ++ buildConfigurationList = 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "sample" */; ++ buildPhases = ( ++ 60796F2F1919C7E700A9926B /* Refresh Python source */, ++ 60796EDE19190F4100A9926B /* Sources */, ++ 60796EDF19190F4100A9926B /* Frameworks */, ++ 60796EE019190F4100A9926B /* Resources */, ++ ); ++ buildRules = ( ++ ); ++ dependencies = ( ++ ); ++ name = sample; ++ productName = sample; ++ productReference = 60796EE219190F4100A9926B /* sample.app */; ++ productType = "com.apple.product-type.application"; ++ }; ++/* End PBXNativeTarget section */ ++ ++/* Begin PBXProject section */ ++ 60796EDA19190F4100A9926B /* Project object */ = { ++ isa = PBXProject; ++ attributes = { ++ CLASSPREFIX = Py; ++ LastUpgradeCheck = 0510; ++ ORGANIZATIONNAME = "Example Corp"; ++ }; ++ buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "sample" */; ++ compatibilityVersion = "Xcode 3.2"; ++ developmentRegion = English; ++ hasScannedForEncodings = 0; ++ knownRegions = ( ++ en, ++ ); ++ mainGroup = 60796ED919190F4100A9926B; ++ productRefGroup = 60796EE319190F4100A9926B /* Products */; ++ projectDirPath = ""; ++ projectRoot = ""; ++ targets = ( ++ 60796EE119190F4100A9926B /* sample */, ++ ); ++ }; ++/* End PBXProject section */ ++ ++/* Begin PBXResourcesBuildPhase section */ ++ 60796EE019190F4100A9926B /* Resources */ = { ++ isa = PBXResourcesBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60F0BABE191FC83F006EC268 /* app in Resources */, ++ 605737FC1AB4772A00F05C6F /* lib in Resources */, ++ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, ++ 60796EF819190F4100A9926B /* Images.xcassets in Resources */, ++ 60F0BAC0191FC868006EC268 /* app_packages in Resources */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXResourcesBuildPhase section */ ++ ++/* Begin PBXShellScriptBuildPhase section */ ++ 60796F2F1919C7E700A9926B /* Refresh Python source */ = { ++ isa = PBXShellScriptBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ ); ++ inputPaths = ( ++ ); ++ name = "Refresh Python source"; ++ outputPaths = ( ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ shellPath = /bin/sh; ++ shellScript = "rsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\n"; ++ }; ++/* End PBXShellScriptBuildPhase section */ ++ ++/* Begin PBXSourcesBuildPhase section */ ++ 60796EDE19190F4100A9926B /* Sources */ = { ++ isa = PBXSourcesBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60796EF219190F4100A9926B /* main.m in Sources */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXSourcesBuildPhase section */ ++ ++/* Begin PBXVariantGroup section */ ++ 60796EEE19190F4100A9926B /* InfoPlist.strings */ = { ++ isa = PBXVariantGroup; ++ children = ( ++ 60796EEF19190F4100A9926B /* en */, ++ ); ++ name = InfoPlist.strings; ++ sourceTree = ""; ++ }; ++/* End PBXVariantGroup section */ ++ ++/* Begin XCBuildConfiguration section */ ++ 60796F0C19190F4100A9926B /* Debug */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ALWAYS_SEARCH_USER_PATHS = NO; ++ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; ++ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; ++ CLANG_CXX_LIBRARY = "libc++"; ++ CLANG_ENABLE_MODULES = YES; ++ CLANG_ENABLE_OBJC_ARC = YES; ++ CLANG_WARN_BOOL_CONVERSION = YES; ++ CLANG_WARN_CONSTANT_CONVERSION = YES; ++ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; ++ CLANG_WARN_EMPTY_BODY = YES; ++ CLANG_WARN_ENUM_CONVERSION = YES; ++ CLANG_WARN_INT_CONVERSION = YES; ++ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; ++ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ++ COPY_PHASE_STRIP = NO; ++ GCC_C_LANGUAGE_STANDARD = gnu99; ++ GCC_DYNAMIC_NO_PIC = NO; ++ GCC_OPTIMIZATION_LEVEL = 0; ++ GCC_PREPROCESSOR_DEFINITIONS = ( ++ "DEBUG=1", ++ "$(inherited)", ++ ); ++ GCC_SYMBOLS_PRIVATE_EXTERN = NO; ++ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; ++ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; ++ GCC_WARN_UNDECLARED_SELECTOR = YES; ++ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; ++ GCC_WARN_UNUSED_FUNCTION = YES; ++ GCC_WARN_UNUSED_VARIABLE = YES; ++ IPHONEOS_DEPLOYMENT_TARGET = 7.1; ++ ONLY_ACTIVE_ARCH = YES; ++ SDKROOT = iphoneos; ++ TARGETED_DEVICE_FAMILY = "1,2"; ++ }; ++ name = Debug; ++ }; ++ 60796F0D19190F4100A9926B /* Release */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ALWAYS_SEARCH_USER_PATHS = NO; ++ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; ++ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; ++ CLANG_CXX_LIBRARY = "libc++"; ++ CLANG_ENABLE_MODULES = YES; ++ CLANG_ENABLE_OBJC_ARC = YES; ++ CLANG_WARN_BOOL_CONVERSION = YES; ++ CLANG_WARN_CONSTANT_CONVERSION = YES; ++ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; ++ CLANG_WARN_EMPTY_BODY = YES; ++ CLANG_WARN_ENUM_CONVERSION = YES; ++ CLANG_WARN_INT_CONVERSION = YES; ++ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; ++ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ++ COPY_PHASE_STRIP = YES; ++ ENABLE_NS_ASSERTIONS = NO; ++ GCC_C_LANGUAGE_STANDARD = gnu99; ++ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; ++ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; ++ GCC_WARN_UNDECLARED_SELECTOR = YES; ++ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; ++ GCC_WARN_UNUSED_FUNCTION = YES; ++ GCC_WARN_UNUSED_VARIABLE = YES; ++ IPHONEOS_DEPLOYMENT_TARGET = 7.1; ++ SDKROOT = iphoneos; ++ TARGETED_DEVICE_FAMILY = "1,2"; ++ VALIDATE_PRODUCT = YES; ++ }; ++ name = Release; ++ }; ++ 60796F0F19190F4100A9926B /* Debug */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ARCHS = "$(ARCHS_STANDARD)"; ++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ FRAMEWORK_SEARCH_PATHS = ( ++ "$(inherited)", ++ "$(PROJECT_DIR)", ++ ); ++ GCC_PRECOMPILE_PREFIX_HEADER = YES; ++ GCC_PREFIX_HEADER = "sample/sample-Prefix.pch"; ++ HEADER_SEARCH_PATHS = ( ++ "$(inherited)", ++ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ++ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", ++ ); ++ INFOPLIST_FILE = "sample/sample-Info.plist"; ++ PRODUCT_NAME = "$(TARGET_NAME)"; ++ USER_HEADER_SEARCH_PATHS = include/python2.7; ++ WRAPPER_EXTENSION = app; ++ }; ++ name = Debug; ++ }; ++ 60796F1019190F4100A9926B /* Release */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ARCHS = "$(ARCHS_STANDARD)"; ++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ FRAMEWORK_SEARCH_PATHS = ( ++ "$(inherited)", ++ "$(PROJECT_DIR)", ++ ); ++ GCC_PRECOMPILE_PREFIX_HEADER = YES; ++ GCC_PREFIX_HEADER = "sample/sample-Prefix.pch"; ++ HEADER_SEARCH_PATHS = ( ++ "$(inherited)", ++ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ++ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", ++ ); ++ INFOPLIST_FILE = "sample/sample-Info.plist"; ++ PRODUCT_NAME = "$(TARGET_NAME)"; ++ USER_HEADER_SEARCH_PATHS = include/python2.7; ++ WRAPPER_EXTENSION = app; ++ }; ++ name = Release; ++ }; ++/* End XCBuildConfiguration section */ ++ ++/* Begin XCConfigurationList section */ ++ 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "sample" */ = { ++ isa = XCConfigurationList; ++ buildConfigurations = ( ++ 60796F0C19190F4100A9926B /* Debug */, ++ 60796F0D19190F4100A9926B /* Release */, ++ ); ++ defaultConfigurationIsVisible = 0; ++ defaultConfigurationName = Release; ++ }; ++ 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "sample" */ = { ++ isa = XCConfigurationList; ++ buildConfigurations = ( ++ 60796F0F19190F4100A9926B /* Debug */, ++ 60796F1019190F4100A9926B /* Release */, ++ ); ++ defaultConfigurationIsVisible = 0; ++ defaultConfigurationName = Release; ++ }; ++/* End XCConfigurationList section */ ++ }; ++ rootObject = 60796EDA19190F4100A9926B /* Project object */; ++} +diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h +--- orig/iOS/include/pyconfig.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/iOS/include/pyconfig.h 2015-03-14 21:42:14.000000000 +0800 +@@ -0,0 +1,15 @@ ++#ifdef __arm__ ++#include "pyconfig-armv7.h" ++#endif ++ ++#ifdef __arm64__ ++#include "pyconfig-arm64.h" ++#endif ++ ++#ifdef __i386__ ++#include "pyconfig-i386.h" ++#endif ++ ++#ifdef __x86_64__ ++#include "pyconfig-x86_64.h" ++#endif +\ No newline at end of file +diff -Nru orig/setup.py modified/setup.py +--- orig/setup.py 2015-02-03 19:49:05.000000000 +0800 ++++ modified/setup.py 2015-02-28 17:26:54.000000000 +0800 +@@ -252,7 +252,11 @@ + + build_ext.build_extensions(self) + +- longest = max([len(e.name) for e in self.extensions]) ++ if missing: ++ longest = max([len(m) for m in missing]) ++ else: ++ longest = 0 ++ + if self.failed: + longest = max(longest, max([len(name) for name in self.failed])) + diff --git a/patch/Python/_scproxy.py b/patch/Python/_scproxy.py deleted file mode 100644 index 24239409..00000000 --- a/patch/Python/_scproxy.py +++ /dev/null @@ -1,10 +0,0 @@ -''' -Stub functions for _scproxy on iOS -No proxy is supported yet. -''' - -def _get_proxy_settings(): - return {'exclude_simple': 1} - -def _get_proxies(): - return {} diff --git a/patch/Python/ctypes_duplicate.patch b/patch/Python/ctypes_duplicate.patch deleted file mode 100644 index be44824a..00000000 --- a/patch/Python/ctypes_duplicate.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- Python-2.7-old/Modules/_ctypes/cfield.c 2010-05-09 22:46:46.000000000 +0800 -+++ Python-2.7-new/Modules/_ctypes/cfield.c 2014-04-27 16:06:06.000000000 +0800 -@@ -1747,31 +1747,4 @@ - } ffi_type; - */ - --/* align and size are bogus for void, but they must not be zero */ --ffi_type ffi_type_void = { 1, 1, FFI_TYPE_VOID }; -- --ffi_type ffi_type_uint8 = { 1, 1, FFI_TYPE_UINT8 }; --ffi_type ffi_type_sint8 = { 1, 1, FFI_TYPE_SINT8 }; -- --ffi_type ffi_type_uint16 = { 2, 2, FFI_TYPE_UINT16 }; --ffi_type ffi_type_sint16 = { 2, 2, FFI_TYPE_SINT16 }; -- --ffi_type ffi_type_uint32 = { 4, 4, FFI_TYPE_UINT32 }; --ffi_type ffi_type_sint32 = { 4, 4, FFI_TYPE_SINT32 }; -- --ffi_type ffi_type_uint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_UINT64 }; --ffi_type ffi_type_sint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_SINT64 }; -- --ffi_type ffi_type_float = { sizeof(float), FLOAT_ALIGN, FFI_TYPE_FLOAT }; --ffi_type ffi_type_double = { sizeof(double), DOUBLE_ALIGN, FFI_TYPE_DOUBLE }; -- --#ifdef ffi_type_longdouble --#undef ffi_type_longdouble --#endif -- /* This is already defined on OSX */ --ffi_type ffi_type_longdouble = { sizeof(long double), LONGDOUBLE_ALIGN, -- FFI_TYPE_LONGDOUBLE }; -- --ffi_type ffi_type_pointer = { sizeof(void *), VOID_P_ALIGN, FFI_TYPE_POINTER }; -- - /*---------------- EOF ----------------*/ diff --git a/patch/Python/dynload.patch b/patch/Python/dynload.patch deleted file mode 100644 index 7cb73f60..00000000 --- a/patch/Python/dynload.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- Python-2.7.1/Python/dynload_shlib.c.orig 2011-12-05 00:00:00.000000000 +0100 -+++ Python-2.7.1/Python/dynload_shlib.c 2011-12-05 00:02:51.000000000 +0100 -@@ -84,6 +84,15 @@ - PyOS_snprintf(funcname, sizeof(funcname), - LEAD_UNDERSCORE "init%.200s", shortname); - -+ /* On IOS, dlopen crash as soon as we try to open one of our library. -+ * Instead, we have done a redirection of linking to convert our .so into a -+ * .a. Then the main executable is linked with theses symbol. So, instead -+ * of trying to dlopen, directly do the dlsym. -+ * -- Mathieu -+ */ -+ return (dl_funcptr) dlsym(RTLD_MAIN_ONLY, funcname); -+ -+#if 0 - if (fp != NULL) { - int i; - struct stat statb; -@@ -140,4 +149,5 @@ - handles[nhandles++].handle = handle; - p = (dl_funcptr) dlsym(handle, funcname); - return p; -+#endif - } diff --git a/patch/Python/environ_symbol_fix.patch b/patch/Python/environ_symbol_fix.patch deleted file mode 100644 index 2de5ac80..00000000 --- a/patch/Python/environ_symbol_fix.patch +++ /dev/null @@ -1,24 +0,0 @@ -Index: Modules/posixmodule.c -=================================================================== ---- Modules/posixmodule.c (revision 52827) -+++ Modules/posixmodule.c (working copy) -@@ -314,7 +314,7 @@ - #endif - - /* Return a dictionary corresponding to the POSIX environment table */ --#ifdef WITH_NEXT_FRAMEWORK -+#ifdef __APPLE__ - /* On Darwin/MacOSX a shared library or framework has no access to - ** environ directly, we must obtain it with _NSGetEnviron(). - */ -@@ -332,7 +332,7 @@ - d = PyDict_New(); - if (d == NULL) - return NULL; --#ifdef WITH_NEXT_FRAMEWORK -+#ifdef __APPLE__ - if (environ == NULL) - environ = *_NSGetEnviron(); - #endif - - diff --git a/patch/Python/pyconfig.h b/patch/Python/pyconfig.h index bb9890f4..e169fb91 100644 --- a/patch/Python/pyconfig.h +++ b/patch/Python/pyconfig.h @@ -1,5 +1,11 @@ -#if TARGET_IPHONE_SIMULATOR -#include "pyconfig-simulator.h" -#else +#ifdef __arm64__ +#include "pyconfig-arm64.h" +#endif + +#ifdef __arm__ #include "pyconfig-armv7.h" +#endif + +#ifdef __x86_64__ +#include "pyconfig-x86_64.h" #endif \ No newline at end of file diff --git a/patch/Python/pyconfig.patch b/patch/Python/pyconfig.patch deleted file mode 100644 index a7fe3420..00000000 --- a/patch/Python/pyconfig.patch +++ /dev/null @@ -1,159 +0,0 @@ ---- Python2.7-old/pyconfig.h 2013-08-26 19:26:05.000000000 +0200 -+++ Python2.7-new/pyconfig.h 2013-08-27 00:11:06.000000000 +0200 -@@ -72,7 +72,7 @@ - /* #undef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE */ - - /* Define to 1 if you have the `bind_textdomain_codeset' function. */ --#define HAVE_BIND_TEXTDOMAIN_CODESET 1 -+/* #undef HAVE_BIND_TEXTDOMAIN_CODESET */ - - /* Define to 1 if you have the header file. */ - /* #undef HAVE_BLUETOOTH_BLUETOOTH_H */ -@@ -218,7 +218,7 @@ - /* #undef HAVE_FDATASYNC */ - - /* Define to 1 if you have the `finite' function. */ --#define HAVE_FINITE 1 -+/* #undef HAVE_FINITE */ - - /* Define to 1 if you have the `flock' function. */ - #define HAVE_FLOCK 1 -@@ -233,7 +233,7 @@ - #define HAVE_FPATHCONF 1 - - /* Define to 1 if you have the `fseek64' function. */ --#define HAVE_FSEEK64 1 -+/* #undef HAVE_FSEEK64 */ - - /* Define to 1 if you have the `fseeko' function. */ - #define HAVE_FSEEKO 1 -@@ -245,7 +245,7 @@ - #define HAVE_FSYNC 1 - - /* Define to 1 if you have the `ftell64' function. */ --#define HAVE_FTELL64 1 -+/* #undef HAVE_FTELL64 */ - - /* Define to 1 if you have the `ftello' function. */ - #define HAVE_FTELLO 1 -@@ -260,7 +260,7 @@ - #define HAVE_GAI_STRERROR 1 - - /* Define to 1 if you have the `gamma' function. */ --#define HAVE_GAMMA 1 -+/* #undef HAVE_GAMMA */ - - /* Define if we can use gcc inline assembler to get and set x87 control word - */ -@@ -279,10 +279,10 @@ - #define HAVE_GETGROUPS 1 - - /* Define to 1 if you have the `gethostbyname' function. */ --/* #undef HAVE_GETHOSTBYNAME */ -+#define HAVE_GETHOSTBYNAME 1 - - /* Define this if you have some version of gethostbyname_r() */ --#define HAVE_GETHOSTBYNAME_R 1 -+/* #undef HAVE_GETHOSTBYNAME_R */ - - /* Define this if you have the 3-arg version of gethostbyname_r(). */ - /* #undef HAVE_GETHOSTBYNAME_R_3_ARG */ -@@ -291,7 +291,7 @@ - /* #undef HAVE_GETHOSTBYNAME_R_5_ARG */ - - /* Define this if you have the 6-arg version of gethostbyname_r(). */ --#define HAVE_GETHOSTBYNAME_R_6_ARG 1 -+/* #undef HAVE_GETHOSTBYNAME_R_6_ARG */ - - /* Define to 1 if you have the `getitimer' function. */ - #define HAVE_GETITIMER 1 -@@ -327,19 +327,19 @@ - #define HAVE_GETPWENT 1 - - /* Define to 1 if you have the `getresgid' function. */ --#define HAVE_GETRESGID 1 -+/* #undef HAVE_GETRESGID */ - - /* Define to 1 if you have the `getresuid' function. */ --#define HAVE_GETRESUID 1 -+/* #undef HAVE_GETRESUID */ - - /* Define to 1 if you have the `getsid' function. */ - #define HAVE_GETSID 1 - - /* Define to 1 if you have the `getspent' function. */ --#define HAVE_GETSPENT 1 -+/* #undef HAVE_GETSPENT */ - - /* Define to 1 if you have the `getspnam' function. */ --#define HAVE_GETSPNAM 1 -+/* #undef HAVE_GETSPNAM */ - - /* Define to 1 if you have the `gettimeofday' function. */ - #define HAVE_GETTIMEOFDAY 1 -@@ -465,7 +465,7 @@ - #define HAVE_MKTIME 1 - - /* Define to 1 if you have the `mremap' function. */ --#define HAVE_MREMAP 1 -+/* #undef HAVE_MREMAP */ - - /* Define to 1 if you have the header file. */ - /* #undef HAVE_NCURSES_H */ -@@ -492,7 +492,7 @@ - #define HAVE_PAUSE 1 - - /* Define to 1 if you have the `plock' function. */ --#define HAVE_PLOCK 1 -+/* #undef HAVE_PLOCK */ - - /* Define to 1 if you have the `poll' function. */ - #define HAVE_POLL 1 -@@ -567,7 +567,7 @@ - #define HAVE_SEM_OPEN 1 - - /* Define to 1 if you have the `sem_timedwait' function. */ --#define HAVE_SEM_TIMEDWAIT 1 -+/* #undef HAVE_SEM_TIMEDWAIT */ - - /* Define to 1 if you have the `sem_unlink' function. */ - #define HAVE_SEM_UNLINK 1 -@@ -600,10 +600,10 @@ - #define HAVE_SETREGID 1 - - /* Define to 1 if you have the `setresgid' function. */ --#define HAVE_SETRESGID 1 -+/* #undef HAVE_SETRESGID */ - - /* Define to 1 if you have the `setresuid' function. */ --#define HAVE_SETRESUID 1 -+/* #undef HAVE_SETRESUID */ - - /* Define to 1 if you have the `setreuid' function. */ - #define HAVE_SETREUID 1 -@@ -829,7 +829,7 @@ - #define HAVE_TMPNAM 1 - - /* Define to 1 if you have the `tmpnam_r' function. */ --#define HAVE_TMPNAM_R 1 -+/* #undef HAVE_TMPNAM_R */ - - /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -@@ -894,7 +894,7 @@ - #define HAVE_ZLIB_COPY 1 - - /* Define to 1 if you have the `_getpty' function. */ --#define HAVE__GETPTY 1 -+/* #undef HAVE__GETPTY */ - - /* Define if you are using Mach cthreads directly under /include */ - /* #undef HURD_C_THREADS */ -@@ -1245,5 +1245,4 @@ - #define STRICT_SYSV_CURSES /* Don't use ncurses extensions */ - #endif - --#endif /*Py_PYCONFIG_H*/ -- -+#endif /*Py_PYCONFIG_H*/ -\ No newline at end of file diff --git a/patch/Python/setuppath.patch b/patch/Python/setuppath.patch deleted file mode 100644 index c4d9d19e..00000000 --- a/patch/Python/setuppath.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- Python-2.7.1/setup.py.orig 2013-10-25 17:28:03.000000000 +0200 -+++ Python-2.7.1/setup.py 2013-10-25 17:27:56.000000000 +0200 -@@ -87,7 +87,7 @@ - f = os.path.join(sysroot, dir[1:], filename) - - if os.path.exists(f): -- return [dir] -+ return [os.path.dirname(f)] - - # Not found anywhere - return None diff --git a/patch/Python/ssize-t-max.patch b/patch/Python/ssize-t-max.patch deleted file mode 100644 index 3d63b49d..00000000 --- a/patch/Python/ssize-t-max.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -Naur Python-2.7.1.orig/Include/pyport.h Python-2.7.1/Include/pyport.h ---- Python-2.7.1.orig/Include/pyport.h 2010-09-14 18:10:22.000000000 +0200 -+++ Python-2.7.1/Include/pyport.h 2011-05-13 12:24:53.000000000 +0200 -@@ -186,9 +186,11 @@ - #endif - - /* Largest positive value of type Py_ssize_t. */ --#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) -+//#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) - /* Smallest negative value of type Py_ssize_t. */ --#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) -+//#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) -+#define PY_SSIZE_T_MAX TMP_MAX -+#define PY_SSIZE_T_MIN -TMP_MAX - - #if SIZEOF_PID_T > SIZEOF_LONG - # error "Python doesn't support sizeof(pid_t) > sizeof(long)" diff --git a/patch/Python/static-_sqlite3.patch b/patch/Python/static-_sqlite3.patch deleted file mode 100644 index 783c5efb..00000000 --- a/patch/Python/static-_sqlite3.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- Python-2.7.1/Modules/_sqlite/module.c.orig 2012-10-28 02:30:58.000000000 +0200 -+++ Python-2.7.1/Modules/_sqlite/module.c 2012-10-28 02:28:12.000000000 +0200 -@@ -28,6 +28,9 @@ - #include "prepare_protocol.h" - #include "microprotocols.h" - #include "row.h" -+#ifndef MODULE_NAME -+#define MODULE_NAME "_sqlite3" -+#endif - - #if SQLITE_VERSION_NUMBER >= 3003003 - #define HAVE_SHARED_CACHE ---- Python-2.7.1/Modules/_sqlite/sqlitecompat.h.orig 2012-10-28 02:30:53.000000000 +0200 -+++ Python-2.7.1/Modules/_sqlite/sqlitecompat.h 2012-10-28 02:28:14.000000000 +0200 -@@ -26,6 +26,10 @@ - #ifndef PYSQLITE_COMPAT_H - #define PYSQLITE_COMPAT_H - -+#ifndef MODULE_NAME -+#define MODULE_NAME "_sqlite3" -+#endif -+ - /* define Py_ssize_t for pre-2.5 versions of Python */ - - #if PY_VERSION_HEX < 0x02050000 diff --git a/patch/Python/xcompile.patch b/patch/Python/xcompile.patch deleted file mode 100644 index 6f3a08ed..00000000 --- a/patch/Python/xcompile.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff -Naur Python-2.7-old/Makefile.pre.in Python-2.7-new/Makefile.pre.in ---- Python-2.7-old/Makefile.pre.in 2010-04-11 17:10:46.000000000 -0700 -+++ Python-2.7-new/Makefile.pre.in 2010-07-09 13:40:47.000000000 -0700 -@@ -179,6 +179,7 @@ - - PYTHON= python$(EXE) - BUILDPYTHON= python$(BUILDEXE) -+HOSTPYTHON= ./$(BUILDPYTHON) - - # The task to run while instrument when building the profile-opt target - PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck -@@ -212,6 +213,8 @@ - # Parser - PGEN= Parser/pgen$(EXE) - -+HOSTPGEN= $(PGEN) -+ - POBJS= \ - Parser/acceler.o \ - Parser/grammar1.o \ -@@ -404,8 +407,8 @@ - # Build the shared modules - sharedmods: $(BUILDPYTHON) - @case $$MAKEFLAGS in \ -- *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ -- *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ -+ *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' PYTHONXCPREFIX='$(DESTDIR)$(prefix)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \ -+ *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' PYTHONXCPREFIX='$(DESTDIR)$(prefix)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \ - esac - - # Build static library -@@ -538,7 +541,7 @@ - - $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT) - -@$(INSTALL) -d Include -- -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) -+ -$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) - - $(PGEN): $(PGENOBJS) - $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN) -@@ -919,26 +922,26 @@ - done; \ - done - $(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt -- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -- ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -+ $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ - $(DESTDIR)$(LIBDEST) -- PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -- ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -+ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -+ $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ - $(DESTDIR)$(LIBDEST) - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -- ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ -+ $(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST)/site-packages -f \ - -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -- ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ -+ $(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \ - -d $(LIBDEST)/site-packages -f \ - -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages - -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ -- ./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" -+ $(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()" - - # Create the PLATDIR source directory, if one wasn't distributed.. - $(srcdir)/Lib/$(PLATDIR): -@@ -1042,8 +1045,10 @@ - - # Install the dynamically loadable modules - # This goes into $(exec_prefix) --sharedinstall: sharedmods -- $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \ -+sharedinstall: sharedmods -+ CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ -+ $(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \ -+ --skip-build \ - --prefix=$(prefix) \ - --install-scripts=$(BINDIR) \ - --install-platlib=$(DESTSHARED) \ -diff -Naur Python-2.7-old/setup.py Python-2.7-new/setup.py ---- Python-2.7-old/setup.py 2010-06-27 05:36:16.000000000 -0700 -+++ Python-2.7-new/setup.py 2010-07-09 13:54:29.000000000 -0700 -@@ -23,6 +23,10 @@ - # This global variable is used to hold the list of modules to be disabled. - disabled_module_list = [] - -+# _ctypes fails to cross-compile due to the libffi configure script. -+if os.environ.has_key('PYTHONXCPREFIX'): -+ disabled_module_list.append('_ctypes') -+ - def add_dir_to_list(dirlist, dir): - """Add the directory 'dir' to the list 'dirlist' (at the front) if - 1) 'dir' is not already in 'dirlist' -@@ -278,6 +282,14 @@ - (ext.name, sys.exc_info()[1])) - self.failed.append(ext.name) - return -+ -+ # Inport check will not work when cross-compiling. -+ if os.environ.has_key('PYTHONXCPREFIX'): -+ self.announce( -+ 'WARNING: skipping inport check for cross-compiled: "%s"' % -+ ext.name) -+ return -+ - # Workaround for Mac OS X: The Carbon-based modules cannot be - # reliably imported into a command-line Python - if 'Carbon' in ext.extra_link_args: - ---- Python-2.7Orig/configure 2011-04-29 22:30:59.231331437 +1000 -+++ Python-2.7/configure 2010-05-29 01:28:47.000000000 +1000 -@@ -13517,7 +13517,7 @@ - $as_echo_n "(cached) " >&6 - else - if test "$cross_compiling" = yes; then : -- ac_cv_have_long_long_format=no -+ ac_cv_have_long_long_format="cross -- assuming yes" - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ -@@ -13569,7 +13569,7 @@ - $as_echo "$ac_cv_have_long_long_format" >&6; } - fi - --if test "$ac_cv_have_long_long_format" = yes -+if test "$ac_cv_have_long_long_format" != no - then - - $as_echo "#define PY_FORMAT_LONG_LONG \"ll\"" >>confdefs.h - diff --git a/patch/libffi/generate-darwin-source-and-headers.py.patch b/patch/libffi/generate-darwin-source-and-headers.py.patch deleted file mode 100644 index 87af8638..00000000 --- a/patch/libffi/generate-darwin-source-and-headers.py.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- libffi-3.1-old/generate-darwin-source-and-headers.py 2014-10-23 17:49:33.000000000 +0800 -+++ libffi-3.1-new/generate-darwin-source-and-headers.py 2014-10-23 17:50:01.000000000 +0800 -@@ -14,7 +14,7 @@ - sdk = 'iphonesimulator' - arch = 'i386' - triple = 'i386-apple-darwin11' -- version_min = '-miphoneos-version-min=5.1.1' -+ version_min = '-miphoneos-version-min=6.0' - - prefix = "#ifdef __i386__\n\n" - suffix = "\n\n#endif" -@@ -40,7 +40,7 @@ - sdk = 'iphoneos' - arch = 'armv7' - triple = 'arm-apple-darwin11' -- version_min = '-miphoneos-version-min=5.1.1' -+ version_min = '-miphoneos-version-min=6.0' - - prefix = "#ifdef __arm__\n\n" - suffix = "\n\n#endif" From 57ac76d5fb018298a60e894c9e2482eec6964250 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 18 May 2015 10:34:49 +0800 Subject: [PATCH 02/51] Added 20150505 version of Python patch. --- patch/Python/Python.patch | 57043 +++++++++++++++++++++++++----------- patch/Python/pyconfig.h | 8 +- 2 files changed, 40072 insertions(+), 16979 deletions(-) diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 6e0c1a91..ec785503 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -1,3 +1,608 @@ +diff -Nru orig/Include/datetime.h modified/Include/datetime.h +--- orig/Include/datetime.h 2015-02-03 19:49:02.000000000 +0800 ++++ modified/Include/datetime.h 2015-04-27 13:51:52.000000000 +0800 +@@ -166,6 +166,11 @@ + + #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" + ++#define PyDateTime_IMPORT \ ++ PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) ++ ++/* Define global variable for the C API and a macro for setting it. */ ++static PyDateTime_CAPI *PyDateTimeAPI = NULL; + + #ifdef Py_BUILD_CORE + +@@ -187,12 +192,6 @@ + + #else + +-/* Define global variable for the C API and a macro for setting it. */ +-static PyDateTime_CAPI *PyDateTimeAPI = NULL; +- +-#define PyDateTime_IMPORT \ +- PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) +- + /* Macros for type checking when not building the Python core. */ + #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) + #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) +diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/test_as_parameter.py +--- orig/Lib/ctypes/test/test_as_parameter.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_as_parameter.py 2015-04-27 21:02:02.000000000 +0800 +@@ -1,9 +1,11 @@ ++import sys + import unittest + from ctypes import * + from ctypes.test import need_symbol + import _ctypes_test + +-dll = CDLL(_ctypes_test.__file__) ++ ++dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + try: + CALLBACK_FUNCTYPE = WINFUNCTYPE +@@ -14,6 +16,7 @@ + class POINT(Structure): + _fields_ = [("x", c_int), ("y", c_int)] + ++ + class BasicWrapTestCase(unittest.TestCase): + def wrap(self, param): + return param +diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_bitfields.py +--- orig/Lib/ctypes/test/test_bitfields.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_bitfields.py 2015-04-27 21:02:13.000000000 +0800 +@@ -1,11 +1,13 @@ + from ctypes import * + from ctypes.test import need_symbol +-import unittest + import os ++import sys ++import unittest + + import ctypes + import _ctypes_test + ++ + class BITS(Structure): + _fields_ = [("A", c_int, 1), + ("B", c_int, 2), +@@ -25,7 +27,7 @@ + ("R", c_short, 6), + ("S", c_short, 7)] + +-func = CDLL(_ctypes_test.__file__).unpack_bitfields ++func = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])).unpack_bitfields + func.argtypes = POINTER(BITS), c_char + + ##for n in "ABCDEFGHIMNOPQRS": +diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buffers.py +--- orig/Lib/ctypes/test/test_buffers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_buffers.py 2015-04-27 21:02:18.000000000 +0800 +@@ -2,6 +2,7 @@ + from ctypes.test import need_symbol + import unittest + ++ + class StringBufferTestCase(unittest.TestCase): + + def test_buffer(self): +diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_callbacks.py +--- orig/Lib/ctypes/test/test_callbacks.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_callbacks.py 2015-04-27 21:02:35.000000000 +0800 +@@ -1,8 +1,10 @@ ++import sys + import unittest + from ctypes import * + from ctypes.test import need_symbol + import _ctypes_test + ++ + class Callbacks(unittest.TestCase): + functype = CFUNCTYPE + +@@ -157,7 +159,7 @@ + + def test_integrate(self): + # Derived from some then non-working code, posted by David Foster +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + # The function prototype called by 'integrate': double func(double); + CALLBACK = CFUNCTYPE(c_double, c_double) +@@ -208,7 +210,7 @@ + def test_callback_register_int(self): + # Issue #8275: buggy handling of callback args under Win64 + # NOTE: should be run on release builds as well +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + CALLBACK = CFUNCTYPE(c_int, c_int, c_int, c_int, c_int, c_int) + # All this function does is call the callback with its args squared + func = dll._testfunc_cbk_reg_int +@@ -224,7 +226,7 @@ + def test_callback_register_double(self): + # Issue #8275: buggy handling of callback args under Win64 + # NOTE: should be run on release builds as well +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + CALLBACK = CFUNCTYPE(c_double, c_double, c_double, c_double, + c_double, c_double) + # All this function does is call the callback with its args squared +diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfuncs.py +--- orig/Lib/ctypes/test/test_cfuncs.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_cfuncs.py 2015-04-27 21:02:50.000000000 +0800 +@@ -1,17 +1,20 @@ + # A lot of failures in these tests on Mac OS X. + # Byte order related? + ++import sys + import unittest + from ctypes import * + from ctypes.test import need_symbol + + import _ctypes_test + ++ + class CFunctions(unittest.TestCase): +- _dll = CDLL(_ctypes_test.__file__) ++ _dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + def S(self): + return c_longlong.in_dll(self._dll, "last_tf_arg_s").value ++ + def U(self): + return c_ulonglong.in_dll(self._dll, "last_tf_arg_u").value + +@@ -206,7 +209,7 @@ + + @need_symbol('WinDLL') + class stdcallCFunctions(CFunctions): +- _dll = stdcall_dll(_ctypes_test.__file__) ++ _dll = stdcall_dll(getattr(_ctypes_test, '__file__', sys.argv[0])) + + if __name__ == '__main__': + unittest.main() +diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test_checkretval.py +--- orig/Lib/ctypes/test/test_checkretval.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_checkretval.py 2015-04-27 21:03:01.000000000 +0800 +@@ -1,8 +1,10 @@ ++import sys + import unittest + + from ctypes import * + from ctypes.test import need_symbol + ++ + class CHECKED(c_int): + def _check_retval_(value): + # Receives a CHECKED instance. +@@ -14,7 +16,7 @@ + def test_checkretval(self): + + import _ctypes_test +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + self.assertEqual(42, dll._testfunc_p_p(42)) + + dll._testfunc_p_p.restype = CHECKED +diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_funcptr.py +--- orig/Lib/ctypes/test/test_funcptr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_funcptr.py 2015-04-27 21:03:08.000000000 +0800 +@@ -1,4 +1,6 @@ +-import os, unittest ++import os ++import sys ++import unittest + from ctypes import * + + try: +@@ -8,7 +10,10 @@ + WINFUNCTYPE = CFUNCTYPE + + import _ctypes_test +-lib = CDLL(_ctypes_test.__file__) ++ ++ ++lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ + + class CFuncPtrTestCase(unittest.TestCase): + def test_basic(self): +diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_functions.py +--- orig/Lib/ctypes/test/test_functions.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_functions.py 2015-04-27 21:03:17.000000000 +0800 +@@ -7,7 +7,8 @@ + + from ctypes import * + from ctypes.test import need_symbol +-import sys, unittest ++import sys ++import unittest + + try: + WINFUNCTYPE +@@ -16,15 +17,22 @@ + WINFUNCTYPE = CFUNCTYPE + + import _ctypes_test +-dll = CDLL(_ctypes_test.__file__) ++ ++ ++dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + if sys.platform == "win32": + windll = WinDLL(_ctypes_test.__file__) + ++ + class POINT(Structure): + _fields_ = [("x", c_int), ("y", c_int)] ++ ++ + class RECT(Structure): + _fields_ = [("left", c_int), ("top", c_int), + ("right", c_int), ("bottom", c_int)] ++ ++ + class FunctionTestCase(unittest.TestCase): + + def test_mro(self): +diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.py +--- orig/Lib/ctypes/test/test_libc.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_libc.py 2015-04-27 21:03:25.000000000 +0800 +@@ -1,14 +1,18 @@ ++import sys + import unittest + + from ctypes import * + import _ctypes_test + +-lib = CDLL(_ctypes_test.__file__) ++ ++lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ + + def three_way_cmp(x, y): + """Return -1 if x < y, 0 if x == y and 1 if x > y""" + return (x > y) - (x < y) + ++ + class LibTest(unittest.TestCase): + def test_sqrt(self): + lib.my_sqrt.argtypes = c_double, +diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_parameters.py +--- orig/Lib/ctypes/test/test_parameters.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_parameters.py 2015-04-27 21:03:34.000000000 +0800 +@@ -1,6 +1,9 @@ +-import unittest, sys ++import sys ++import unittest ++ + from ctypes.test import need_symbol + ++ + class SimpleTypesTestCase(unittest.TestCase): + + def setUp(self): +@@ -139,7 +142,7 @@ + import _ctypes_test + from ctypes import CDLL, c_void_p, ArgumentError + +- func = CDLL(_ctypes_test.__file__)._testfunc_p_p ++ func = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))._testfunc_p_p + func.restype = c_void_p + # TypeError: has no from_param method + self.assertRaises(TypeError, setattr, func, "argtypes", (object,)) +diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pickling.py +--- orig/Lib/ctypes/test/test_pickling.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pickling.py 2015-04-27 21:03:50.000000000 +0800 +@@ -1,8 +1,11 @@ +-import unittest + import pickle ++import sys ++import unittest + from ctypes import * + import _ctypes_test +-dll = CDLL(_ctypes_test.__file__) ++ ++ ++dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + class X(Structure): + _fields_ = [("a", c_int), ("b", c_double)] +diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_pointers.py +--- orig/Lib/ctypes/test/test_pointers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pointers.py 2015-04-27 21:03:59.000000000 +0800 +@@ -1,4 +1,5 @@ +-import unittest, sys ++import sys ++import unittest + + from ctypes import * + import _ctypes_test +@@ -8,6 +9,7 @@ + python_types = [int, int, int, int, int, int, + int, int, int, int, float, float] + ++ + class PointersTestCase(unittest.TestCase): + + def test_pointer_crash(self): +@@ -20,7 +22,7 @@ + self.assertRaises(TypeError, A, c_ulong(33)) + + def test_pass_pointers(self): +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + func = dll._testfunc_p_p + func.restype = c_long + +@@ -35,7 +37,7 @@ + self.assertEqual(res[0], 12345678) + + def test_change_pointers(self): +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + func = dll._testfunc_p_p + + i = c_int(87654) +@@ -70,7 +72,7 @@ + return 0 + callback = PROTOTYPE(func) + +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + # This function expects a function pointer, + # and calls this with an integer pointer as parameter. + # The int pointer points to a table containing the numbers 1..10 +@@ -135,7 +137,7 @@ + + def test_charpp(self): + """Test that a character pointer-to-pointer is correctly passed""" +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + func = dll._testfunc_c_p_p + func.restype = c_char_p + argv = (c_char_p * 2)() +diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_prototypes.py +--- orig/Lib/ctypes/test/test_prototypes.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_prototypes.py 2015-04-27 21:04:08.000000000 +0800 +@@ -1,6 +1,7 @@ ++import sys ++import unittest + from ctypes import * + from ctypes.test import need_symbol +-import unittest + + # IMPORTANT INFO: + # +@@ -23,7 +24,9 @@ + # In this case, there would have to be an additional reference to the argument... + + import _ctypes_test +-testdll = CDLL(_ctypes_test.__file__) ++ ++ ++testdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + # Return machine address `a` as a (possibly long) non-negative integer. + # Starting with Python 2.5, id(anything) is always non-negative, and +diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_refcounts.py +--- orig/Lib/ctypes/test/test_refcounts.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_refcounts.py 2015-04-27 21:04:22.000000000 +0800 +@@ -1,13 +1,17 @@ +-import unittest +-from test import support + import ctypes + import gc ++import sys ++import unittest ++from test import support + + MyCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int) + OtherCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_ulonglong) + + import _ctypes_test +-dll = ctypes.CDLL(_ctypes_test.__file__) ++ ++ ++dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ + + class RefcountTestCase(unittest.TestCase): + +diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/test_returnfuncptrs.py +--- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-04-27 21:04:34.000000000 +0800 +@@ -1,15 +1,16 @@ ++import sys + import unittest + from ctypes import * +-import os + + import _ctypes_test + ++ + class ReturnFuncPtrTestCase(unittest.TestCase): + + def test_with_prototype(self): + # The _ctypes_test shared lib/dll exports quite some functions for testing. + # The get_strchr function returns a *pointer* to the C strchr function. +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + get_strchr = dll.get_strchr + get_strchr.restype = CFUNCTYPE(c_char_p, c_char_p, c_char) + strchr = get_strchr() +@@ -21,7 +22,7 @@ + self.assertRaises(TypeError, strchr, b"abcdef") + + def test_without_prototype(self): +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + get_strchr = dll.get_strchr + # the default 'c_int' would not work on systems where sizeof(int) != sizeof(void *) + get_strchr.restype = c_void_p +@@ -35,7 +36,7 @@ + self.assertRaises(TypeError, strchr, b"abcdef") + + def test_from_dll(self): +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + # _CFuncPtr instances are now callable with a tuple argument + # which denotes a function name and a dll: + strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(("my_strchr", dll)) +@@ -51,13 +52,13 @@ + if key == 0: + return "my_strchr" + if key == 1: +- return CDLL(_ctypes_test.__file__) ++ return CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + raise IndexError + + # _CFuncPtr instances are now callable with a tuple argument + # which denotes a function name and a dll: + strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)( +- BadSequence(("my_strchr", CDLL(_ctypes_test.__file__)))) ++ BadSequence(("my_strchr", CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))))) + self.assertTrue(strchr(b"abcdef", b"b"), "bcdef") + self.assertEqual(strchr(b"abcdef", b"x"), None) + self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) +diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_slicing.py +--- orig/Lib/ctypes/test/test_slicing.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_slicing.py 2015-04-27 21:04:43.000000000 +0800 +@@ -1,3 +1,4 @@ ++import sys + import unittest + from ctypes import * + from ctypes.test import need_symbol +@@ -62,7 +63,7 @@ + def test_char_ptr(self): + s = b"abcdefghijklmnopqrstuvwxyz" + +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + dll.my_strdup.restype = POINTER(c_char) + dll.my_free.restype = None + res = dll.my_strdup(s) +@@ -94,7 +95,7 @@ + dll.my_free(res) + + def test_char_ptr_with_free(self): +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + s = b"abcdefghijklmnopqrstuvwxyz" + + class allocated_c_char_p(c_char_p): +@@ -130,7 +131,7 @@ + def test_wchar_ptr(self): + s = "abcdefghijklmnopqrstuvwxyz\0" + +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + dll.my_wcsdup.restype = POINTER(c_wchar) + dll.my_wcsdup.argtypes = POINTER(c_wchar), + dll.my_free.restype = None +diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_stringptr.py +--- orig/Lib/ctypes/test/test_stringptr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_stringptr.py 2015-04-27 21:04:57.000000000 +0800 +@@ -1,10 +1,12 @@ ++import sys + import unittest + from test import support + from ctypes import * + + import _ctypes_test + +-lib = CDLL(_ctypes_test.__file__) ++ ++lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + class StringPtrTestCase(unittest.TestCase): + +diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_unicode.py +--- orig/Lib/ctypes/test/test_unicode.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_unicode.py 2015-04-27 21:05:06.000000000 +0800 +@@ -1,13 +1,15 @@ ++import sys + import unittest + import ctypes + from ctypes.test import need_symbol + + import _ctypes_test + ++ + @need_symbol('c_wchar') + class UnicodeTestCase(unittest.TestCase): + def test_wcslen(self): +- dll = ctypes.CDLL(_ctypes_test.__file__) ++ dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + wcslen = dll.my_wcslen + wcslen.argtypes = [ctypes.c_wchar_p] + +@@ -26,7 +28,7 @@ + self.assertEqual(buf[::2], 'a\xe4\xfc') + self.assertEqual(buf[6:5:-1], "") + +-func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p ++func = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))._testfunc_p_p + + class StringTestCase(UnicodeTestCase): + def setUp(self): +diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_values.py +--- orig/Lib/ctypes/test/test_values.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_values.py 2015-04-27 21:05:16.000000000 +0800 +@@ -2,18 +2,19 @@ + A testcase which accesses *values* in a dll. + """ + +-import unittest + import sys ++import unittest + from ctypes import * + + import _ctypes_test + ++ + class ValuesTestCase(unittest.TestCase): + + def test_an_integer(self): + # This test checks and changes an integer stored inside the + # _ctypes_test dll/shared lib. +- ctdll = CDLL(_ctypes_test.__file__) ++ ctdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + an_integer = c_int.in_dll(ctdll, "an_integer") + x = an_integer.value + self.assertEqual(x, ctdll.get_an_integer()) +@@ -25,7 +26,7 @@ + self.assertEqual(x, ctdll.get_an_integer()) + + def test_undefined(self): +- ctdll = CDLL(_ctypes_test.__file__) ++ ctdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + self.assertRaises(ValueError, c_int.in_dll, ctdll, "Undefined_Symbol") + + @unittest.skipUnless(sys.platform == 'win32', 'Windows-specific test') +diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32.py +--- orig/Lib/ctypes/test/test_win32.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_win32.py 2015-04-27 21:05:21.000000000 +0800 +@@ -1,7 +1,8 @@ + # Windows specific tests + + from ctypes import * +-import unittest, sys ++import sys ++import unittest + from test import support + + import _ctypes_test +@@ -109,7 +110,7 @@ + ("right", c_long), + ("bottom", c_long)] + +- dll = CDLL(_ctypes_test.__file__) ++ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) + + pt = POINT(10, 10) + rect = RECT(0, 0, 20, 20) diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py --- orig/Lib/ctypes/util.py 2015-02-03 19:49:03.000000000 +0800 +++ modified/Lib/ctypes/util.py 2015-02-28 19:22:12.000000000 +0800 @@ -10,22 +615,228 @@ diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py from ctypes.macholib.dyld import dyld_find as _dyld_find def find_library(name): possible = ['lib%s.dylib' % name, +diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/tests/test_build_ext.py +--- orig/Lib/distutils/tests/test_build_ext.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_ext.py 2015-05-03 00:00:04.000000000 +0800 +@@ -37,6 +37,7 @@ + from distutils.command import build_ext + build_ext.USER_BASE = site.USER_BASE + ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_build_ext(self): + global ALREADY_TESTED + copy_xxmodule_c(self.tmp_dir) +@@ -285,6 +286,7 @@ + cmd.run() + self.assertEqual(cmd.compiler, 'unix') + ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_get_outputs(self): + tmp_dir = self.mkdtemp() + c_file = os.path.join(tmp_dir, 'foo.c') +diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests/test_build_py.py +--- orig/Lib/distutils/tests/test_build_py.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_py.py 2015-05-03 00:00:35.000000000 +0800 +@@ -106,6 +106,7 @@ + ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_byte_compile_optimized(self): + project_dir, dist = self.create_dist(py_modules=['boiledeggs']) + os.chdir(project_dir) +diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tests/test_config_cmd.py +--- orig/Lib/distutils/tests/test_config_cmd.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_config_cmd.py 2015-05-03 00:01:43.000000000 +0800 +@@ -38,6 +38,7 @@ + self.assertEqual(len(self._logs), numlines+1) + + @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") ++ @unittest.skipUnless(hasattr(os, 'fork'), "distutils cannot spawn child processes") + def test_search_cpp(self): + pkg_dir, dist = self.create_dist() + cmd = config(dist) +diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutils/tests/test_cygwinccompiler.py +--- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2015-04-30 08:21:03.000000000 +0800 +@@ -3,16 +3,19 @@ + import sys + import os + from io import BytesIO +-import subprocess + from test.support import run_unittest + +-from distutils import cygwinccompiler +-from distutils.cygwinccompiler import (CygwinCCompiler, check_config_h, +- CONFIG_H_OK, CONFIG_H_NOTOK, +- CONFIG_H_UNCERTAIN, get_versions, +- get_msvcr) ++# Importing cygwinccompiler attempts to import other tools ++# that may not exist unless you're on win32. ++if sys.platform == 'win32': ++ from distutils import cygwinccompiler ++ from distutils.cygwinccompiler import (check_config_h, ++ CONFIG_H_OK, CONFIG_H_NOTOK, ++ CONFIG_H_UNCERTAIN, get_versions, ++ get_msvcr) + from distutils.tests import support + ++ + class FakePopen(object): + test_class = None + +@@ -26,6 +29,7 @@ + self.stdout = os.popen(cmd, 'r') + + ++@unittest.skipUnless(sys.platform == "win32", "These tests are only for win32") + class CygwinCCompilerTestCase(support.TempdirManager, + unittest.TestCase): + +@@ -119,7 +123,7 @@ + def test_get_msvcr(self): + + # none +- sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' ++ sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' + '\n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]') + self.assertEqual(get_msvcr(), None) + +diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/test_install.py +--- orig/Lib/distutils/tests/test_install.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install.py 2015-05-02 23:58:59.000000000 +0800 +@@ -197,6 +197,7 @@ + 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] + self.assertEqual(found, expected) + ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_record_extensions(self): + install_dir = self.mkdtemp() + project_dir, dist = self.create_dist(ext_modules=[ +diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/tests/test_install_lib.py +--- orig/Lib/distutils/tests/test_install_lib.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install_lib.py 2015-05-03 00:02:08.000000000 +0800 +@@ -35,6 +35,7 @@ + self.assertEqual(cmd.optimize, 2) + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_byte_compile(self): + project_dir, dist = self.create_dist() + os.chdir(project_dir) +diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/test_spawn.py +--- orig/Lib/distutils/tests/test_spawn.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_spawn.py 2015-05-03 00:03:50.000000000 +0800 +@@ -1,14 +1,14 @@ + """Tests for distutils.spawn.""" + import unittest + import os +-import time +-from test.support import captured_stdout, run_unittest ++from test.support import run_unittest + + from distutils.spawn import _nt_quote_args +-from distutils.spawn import spawn, find_executable ++from distutils.spawn import spawn + from distutils.errors import DistutilsExecError + from distutils.tests import support + ++ + class SpawnTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): +@@ -22,9 +22,7 @@ + res = _nt_quote_args(args) + self.assertEqual(res, wanted) + +- +- @unittest.skipUnless(os.name in ('nt', 'posix'), +- 'Runs only under posix or nt') ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_spawn(self): + tmpdir = self.mkdtemp() + +@@ -51,6 +49,7 @@ + os.chmod(exe, 0o777) + spawn([exe]) # should work without any error + ++ + def test_suite(): + return unittest.makeSuite(SpawnTestCase) + +diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py +--- orig/Lib/distutils/tests/test_sysconfig.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_sysconfig.py 2015-05-04 14:42:47.000000000 +0800 +@@ -11,6 +11,7 @@ + from distutils.tests import support + from test.support import TESTFN, run_unittest, check_warnings + ++ + class SysconfigTestCase(support.EnvironGuard, unittest.TestCase): + def setUp(self): + super(SysconfigTestCase, self).setUp() +@@ -177,6 +178,7 @@ + self.assertIsNotNone(vars['SO']) + self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_customize_compiler_before_get_config_vars(self): + # Issue #21923: test that a Distribution compiler + # instance can be called without an explicit call to +diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/test_util.py +--- orig/Lib/distutils/tests/test_util.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_util.py 2015-05-03 00:04:32.000000000 +0800 +@@ -10,12 +10,13 @@ + check_environ, split_quoted, strtobool, + rfc822_escape, byte_compile, + grok_environment_error) +-from distutils import util # used to patch _environ_checked ++from distutils import util # used to patch _environ_checked + from distutils.sysconfig import get_config_vars + from distutils import sysconfig + from distutils.tests import support + import _osx_support + ++ + class UtilTestCase(support.EnvironGuard, unittest.TestCase): + + def setUp(self): +@@ -239,6 +240,7 @@ + + # XXX platforms to be covered: mac + ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") + def test_check_environ(self): + util._environ_checked = 0 + if 'HOME' in os.environ: +diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py +--- orig/Lib/importlib/_bootstrap.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/importlib/_bootstrap.py 2015-05-02 11:56:09.000000000 +0800 +@@ -22,7 +22,7 @@ + + # Bootstrap-related code ###################################################### + +-_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' ++_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin', 'ios' + + + def _make_relax_case(): diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py --- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/IN.py 2015-02-23 08:44:22.000000000 +0800 -@@ -0,0 +1,6577 @@ -+# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/include/netinet/in.h ++++ modified/Lib/plat-ios/IN.py 2015-04-26 09:30:37.000000000 +0800 +@@ -0,0 +1,8269 @@ ++# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/netinet/in.h + +# Included from sys/appleapiopts.h + +# Included from sys/_types.h + +# Included from sys/cdefs.h -+def __P(protos): return protos ++def __P(protos): return protos + +def __STRING(x): return #x + -+def __P(protos): return () ++def __P(protos): return () + +def __STRING(x): return "x" + @@ -47,7 +858,7 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __PROJECT_VERSION(s): return __IDSTRING(project_version,s) + -+def __FBSDID(s): return ++def __FBSDID(s): return + +__DARWIN_ONLY_64_BIT_INO_T = 1 +__DARWIN_ONLY_UNIX_CONFORMANCE = 1 @@ -112,6 +923,10 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_1(x): return x + ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_2(x): return x ++ ++def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_3(x): return x ++ +def __DARWIN_ALIAS_STARTING_MAC___MAC_10_0(x): return x + +def __DARWIN_ALIAS_STARTING_MAC___MAC_10_1(x): return x @@ -279,6 +1094,8 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +__IPHONE_7_1 = 70100 +__IPHONE_8_0 = 80000 +__IPHONE_8_1 = 80100 ++__IPHONE_8_2 = 80200 ++__IPHONE_8_3 = 80300 + +# Included from AvailabilityInternal.h +def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated(_msg))) @@ -289,7 +1106,7 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated)) + -+__IPHONE_OS_VERSION_MAX_ALLOWED = __IPHONE_8_1 ++__IPHONE_OS_VERSION_MAX_ALLOWED = __IPHONE_8_3 +__IPHONE_OS_VERSION_MIN_REQUIRED = __IPHONE_2_0 +def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.0,message=_msg))) + @@ -363,6 +1180,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.1,message=_msg))) @@ -433,6 +1258,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=2.2,message=_msg))) @@ -499,6 +1332,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.2))) + +def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.0,message=_msg))) @@ -561,6 +1402,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.1,message=_msg))) @@ -619,6 +1468,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=3.2,message=_msg))) @@ -673,6 +1530,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.2))) + +def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.0,message=_msg))) @@ -723,6 +1588,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.1,message=_msg))) @@ -769,6 +1642,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.2,message=_msg))) @@ -811,6 +1692,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.2))) + +def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=4.3,message=_msg))) @@ -849,6 +1738,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.3))) + +def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.0,message=_msg))) @@ -883,6 +1780,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=5.1,message=_msg))) @@ -913,6 +1818,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.0,message=_msg))) @@ -939,6 +1852,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=6.1,message=_msg))) @@ -961,6 +1882,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.0,message=_msg))) @@ -979,6 +1908,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=7.1,message=_msg))) @@ -993,6 +1930,14 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.1))) + +def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.0,message=_msg))) @@ -1003,14 +1948,46 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.0))) + +def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1,message=_msg))) + +def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.1))) + ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.2,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.2))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.3,deprecated=8.3,message=_msg))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.3,deprecated=8.3))) ++ ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.3))) ++ +def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,unavailable))) + +def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_0 @@ -5267,11569 +6244,22915 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 + -+__MAC_OS_X_VERSION_MAX_ALLOWED = __MAC_10_10 -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7))) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10,message=_msg))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10))) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,unavailable))) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __OSX_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(macosx_app_extension,unavailable,_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __IOS_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(ios_app_extension,unavailable,_msg) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_in_addr_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_in_port_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/socket.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/types.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from machine/types.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from machine/endian.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_dev_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_blkcnt_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_blksize_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_gid_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_ino_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_ino64_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_key_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+# Included from sys/_types/_mode_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+# Included from sys/_types/_nlink_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+# Included from sys/_types/_id_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_pid_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_off_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_uid_t.h -+def major(x): return ((int32_t)(((u_int32_t)(x) >> 24) & 0xff)) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def minor(x): return ((int32_t)((x) & 0xffffff)) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_clock_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_size_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_ssize_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_time_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_useconds_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_suseconds_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_rsize_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_errno_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fd_def.h -+__DARWIN_FD_SETSIZE = 1024 -+__DARWIN_NBBY = 8 -+def __DARWIN_FD_ZERO(p): return __builtin_bzero(p, sizeof(*(p))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def __DARWIN_FD_ZERO(p): return bzero(p, sizeof(*(p))) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+NBBY = __DARWIN_NBBY ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fd_setsize.h -+FD_SETSIZE = __DARWIN_FD_SETSIZE ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 + -+# Included from sys/_types/_fd_set.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 + -+# Included from sys/_types/_fd_clr.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fd_zero.h -+def FD_ZERO(p): return __DARWIN_FD_ZERO(p) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fd_isset.h ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fd_copy.h ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_attr_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_cond_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_condattr_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_mutex_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_mutexattr_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_once_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_rwlock_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_rwlockattr_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_pthread/_pthread_key_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fsblkcnt_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_fsfilcnt_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from machine/_param.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from sys/_types/_sa_family_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 + -+# Included from sys/_types/_socklen_t.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+# Included from sys/_types/_iovec_t.h -+SOCK_STREAM = 1 -+SOCK_DGRAM = 2 -+SOCK_RAW = 3 -+SOCK_RDM = 4 -+SOCK_SEQPACKET = 5 -+SO_DEBUG = 0x0001 -+SO_ACCEPTCONN = 0x0002 -+SO_REUSEADDR = 0x0004 -+SO_KEEPALIVE = 0x0008 -+SO_DONTROUTE = 0x0010 -+SO_BROADCAST = 0x0020 -+SO_USELOOPBACK = 0x0040 -+SO_LINGER = 0x0080 -+SO_LINGER = 0x1080 -+SO_OOBINLINE = 0x0100 -+SO_REUSEPORT = 0x0200 -+SO_TIMESTAMP = 0x0400 -+SO_TIMESTAMP_MONOTONIC = 0x0800 -+SO_ACCEPTFILTER = 0x1000 -+SO_DONTTRUNC = 0x2000 -+SO_WANTMORE = 0x4000 -+SO_WANTOOBFLAG = 0x8000 -+SO_SNDBUF = 0x1001 -+SO_RCVBUF = 0x1002 -+SO_SNDLOWAT = 0x1003 -+SO_RCVLOWAT = 0x1004 -+SO_SNDTIMEO = 0x1005 -+SO_RCVTIMEO = 0x1006 -+SO_ERROR = 0x1007 -+SO_TYPE = 0x1008 -+SO_LABEL = 0x1010 -+SO_PEERLABEL = 0x1011 -+SO_NREAD = 0x1020 -+SO_NKE = 0x1021 -+SO_NOSIGPIPE = 0x1022 -+SO_NOADDRERR = 0x1023 -+SO_NWRITE = 0x1024 -+SO_REUSESHAREUID = 0x1025 -+SO_NOTIFYCONFLICT = 0x1026 -+SO_UPCALLCLOSEWAIT = 0x1027 -+SO_LINGER_SEC = 0x1080 -+SO_RANDOMPORT = 0x1082 -+SO_NP_EXTENSIONS = 0x1083 -+SO_NUMRCVPKT = 0x1112 -+SONPX_SETOPTSHUT = 0x000000001 -+SOL_SOCKET = 0xffff -+AF_UNSPEC = 0 -+AF_UNIX = 1 -+AF_LOCAL = AF_UNIX -+AF_INET = 2 -+AF_IMPLINK = 3 -+AF_PUP = 4 -+AF_CHAOS = 5 -+AF_NS = 6 -+AF_ISO = 7 -+AF_OSI = AF_ISO -+AF_ECMA = 8 -+AF_DATAKIT = 9 -+AF_CCITT = 10 -+AF_SNA = 11 -+AF_DECnet = 12 -+AF_DLI = 13 -+AF_LAT = 14 -+AF_HYLINK = 15 -+AF_APPLETALK = 16 -+AF_ROUTE = 17 -+AF_LINK = 18 -+pseudo_AF_XTP = 19 -+AF_COIP = 20 -+AF_CNT = 21 -+pseudo_AF_RTIP = 22 -+AF_IPX = 23 -+AF_SIP = 24 -+pseudo_AF_PIP = 25 -+AF_NDRV = 27 -+AF_ISDN = 28 -+AF_E164 = AF_ISDN -+pseudo_AF_KEY = 29 -+AF_INET6 = 30 -+AF_NATM = 31 -+AF_SYSTEM = 32 -+AF_NETBIOS = 33 -+AF_PPP = 34 -+pseudo_AF_HDRCMPLT = 35 -+AF_RESERVED_36 = 36 -+AF_IEEE80211 = 37 -+AF_UTUN = 38 -+AF_MAX = 40 -+SOCK_MAXADDRLEN = 255 -+_SS_MAXSIZE = 128 -+PF_UNSPEC = AF_UNSPEC -+PF_LOCAL = AF_LOCAL -+PF_UNIX = PF_LOCAL -+PF_INET = AF_INET -+PF_IMPLINK = AF_IMPLINK -+PF_PUP = AF_PUP -+PF_CHAOS = AF_CHAOS -+PF_NS = AF_NS -+PF_ISO = AF_ISO -+PF_OSI = AF_ISO -+PF_ECMA = AF_ECMA -+PF_DATAKIT = AF_DATAKIT -+PF_CCITT = AF_CCITT -+PF_SNA = AF_SNA -+PF_DECnet = AF_DECnet -+PF_DLI = AF_DLI -+PF_LAT = AF_LAT -+PF_HYLINK = AF_HYLINK -+PF_APPLETALK = AF_APPLETALK -+PF_ROUTE = AF_ROUTE -+PF_LINK = AF_LINK -+PF_XTP = pseudo_AF_XTP -+PF_COIP = AF_COIP -+PF_CNT = AF_CNT -+PF_SIP = AF_SIP -+PF_IPX = AF_IPX -+PF_RTIP = pseudo_AF_RTIP -+PF_PIP = pseudo_AF_PIP -+PF_NDRV = AF_NDRV -+PF_ISDN = AF_ISDN -+PF_KEY = pseudo_AF_KEY -+PF_INET6 = AF_INET6 -+PF_NATM = AF_NATM -+PF_SYSTEM = AF_SYSTEM -+PF_NETBIOS = AF_NETBIOS -+PF_PPP = AF_PPP -+PF_RESERVED_36 = AF_RESERVED_36 -+PF_UTUN = AF_UTUN -+PF_MAX = AF_MAX -+NET_MAXID = AF_MAX -+NET_RT_DUMP = 1 -+NET_RT_FLAGS = 2 -+NET_RT_IFLIST = 3 -+NET_RT_STAT = 4 -+NET_RT_TRASH = 5 -+NET_RT_IFLIST2 = 6 -+NET_RT_DUMP2 = 7 -+NET_RT_MAXID = 10 -+SOMAXCONN = 128 -+MSG_OOB = 0x1 -+MSG_PEEK = 0x2 -+MSG_DONTROUTE = 0x4 -+MSG_EOR = 0x8 -+MSG_TRUNC = 0x10 -+MSG_CTRUNC = 0x20 -+MSG_WAITALL = 0x40 -+MSG_DONTWAIT = 0x80 -+MSG_EOF = 0x100 -+MSG_WAITSTREAM = 0x200 -+MSG_FLUSH = 0x400 -+MSG_HOLD = 0x800 -+MSG_SEND = 0x1000 -+MSG_HAVEMORE = 0x2000 -+MSG_RCVMORE = 0x4000 -+MSG_NEEDSA = 0x10000 -+CMGROUP_MAX = 16 -+def CMSG_FIRSTHDR(mhdr): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+SCM_RIGHTS = 0x01 -+SCM_TIMESTAMP = 0x02 -+SCM_CREDS = 0x03 -+SCM_TIMESTAMP_MONOTONIC = 0x04 -+SHUT_RD = 0 -+SHUT_WR = 1 -+SHUT_RDWR = 2 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+# Included from sys/_endian.h -+def ntohl(x): return ((__uint32_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def ntohs(x): return ((__uint16_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def htonl(x): return ((__uint32_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def htons(x): return ((__uint16_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def ntohll(x): return ((__uint64_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def htonll(x): return ((__uint64_t)(x)) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def NTOHL(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def NTOHS(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def NTOHLL(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def HTONL(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def HTONS(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def HTONLL(x): return (x) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+# Included from libkern/_OSByteOrder.h -+def __DARWIN_OSSwapConstInt16(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def __DARWIN_OSSwapConstInt32(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+def __DARWIN_OSSwapConstInt64(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_3 + -+# Included from libkern/arm/OSByteOrder.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+# Included from arm/arch.h ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+# Included from sys/_types/_os_inline.h -+def __DARWIN_OSSwapInt16(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __DARWIN_OSSwapInt32(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __DARWIN_OSSwapInt64(x): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __DARWIN_OSSwapInt16(x): return _OSSwapInt16(x) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __DARWIN_OSSwapInt32(x): return _OSSwapInt32(x) ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def __DARWIN_OSSwapInt64(x): return _OSSwapInt64(x) ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def ntohs(x): return __DARWIN_OSSwapInt16(x) ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def htons(x): return __DARWIN_OSSwapInt16(x) ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def ntohl(x): return __DARWIN_OSSwapInt32(x) ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def htonl(x): return __DARWIN_OSSwapInt32(x) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def ntohll(x): return __DARWIN_OSSwapInt64(x) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def htonll(x): return __DARWIN_OSSwapInt64(x) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+IPPROTO_IP = 0 -+IPPROTO_HOPOPTS = 0 -+IPPROTO_ICMP = 1 -+IPPROTO_IGMP = 2 -+IPPROTO_GGP = 3 -+IPPROTO_IPV4 = 4 -+IPPROTO_IPIP = IPPROTO_IPV4 -+IPPROTO_TCP = 6 -+IPPROTO_ST = 7 -+IPPROTO_EGP = 8 -+IPPROTO_PIGP = 9 -+IPPROTO_RCCMON = 10 -+IPPROTO_NVPII = 11 -+IPPROTO_PUP = 12 -+IPPROTO_ARGUS = 13 -+IPPROTO_EMCON = 14 -+IPPROTO_XNET = 15 -+IPPROTO_CHAOS = 16 -+IPPROTO_UDP = 17 -+IPPROTO_MUX = 18 -+IPPROTO_MEAS = 19 -+IPPROTO_HMP = 20 -+IPPROTO_PRM = 21 -+IPPROTO_IDP = 22 -+IPPROTO_TRUNK1 = 23 -+IPPROTO_TRUNK2 = 24 -+IPPROTO_LEAF1 = 25 -+IPPROTO_LEAF2 = 26 -+IPPROTO_RDP = 27 -+IPPROTO_IRTP = 28 -+IPPROTO_TP = 29 -+IPPROTO_BLT = 30 -+IPPROTO_NSP = 31 -+IPPROTO_INP = 32 -+IPPROTO_SEP = 33 -+IPPROTO_3PC = 34 -+IPPROTO_IDPR = 35 -+IPPROTO_XTP = 36 -+IPPROTO_DDP = 37 -+IPPROTO_CMTP = 38 -+IPPROTO_TPXX = 39 -+IPPROTO_IL = 40 -+IPPROTO_IPV6 = 41 -+IPPROTO_SDRP = 42 -+IPPROTO_ROUTING = 43 -+IPPROTO_FRAGMENT = 44 -+IPPROTO_IDRP = 45 -+IPPROTO_RSVP = 46 -+IPPROTO_GRE = 47 -+IPPROTO_MHRP = 48 -+IPPROTO_BHA = 49 -+IPPROTO_ESP = 50 -+IPPROTO_AH = 51 -+IPPROTO_INLSP = 52 -+IPPROTO_SWIPE = 53 -+IPPROTO_NHRP = 54 -+IPPROTO_ICMPV6 = 58 -+IPPROTO_NONE = 59 -+IPPROTO_DSTOPTS = 60 -+IPPROTO_AHIP = 61 -+IPPROTO_CFTP = 62 -+IPPROTO_HELLO = 63 -+IPPROTO_SATEXPAK = 64 -+IPPROTO_KRYPTOLAN = 65 -+IPPROTO_RVD = 66 -+IPPROTO_IPPC = 67 -+IPPROTO_ADFS = 68 -+IPPROTO_SATMON = 69 -+IPPROTO_VISA = 70 -+IPPROTO_IPCV = 71 -+IPPROTO_CPNX = 72 -+IPPROTO_CPHB = 73 -+IPPROTO_WSN = 74 -+IPPROTO_PVP = 75 -+IPPROTO_BRSATMON = 76 -+IPPROTO_ND = 77 -+IPPROTO_WBMON = 78 -+IPPROTO_WBEXPAK = 79 -+IPPROTO_EON = 80 -+IPPROTO_VMTP = 81 -+IPPROTO_SVMTP = 82 -+IPPROTO_VINES = 83 -+IPPROTO_TTP = 84 -+IPPROTO_IGP = 85 -+IPPROTO_DGP = 86 -+IPPROTO_TCF = 87 -+IPPROTO_IGRP = 88 -+IPPROTO_OSPFIGP = 89 -+IPPROTO_SRPC = 90 -+IPPROTO_LARP = 91 -+IPPROTO_MTP = 92 -+IPPROTO_AX25 = 93 -+IPPROTO_IPEIP = 94 -+IPPROTO_MICP = 95 -+IPPROTO_SCCSP = 96 -+IPPROTO_ETHERIP = 97 -+IPPROTO_ENCAP = 98 -+IPPROTO_APES = 99 -+IPPROTO_GMTP = 100 -+IPPROTO_PIM = 103 -+IPPROTO_IPCOMP = 108 -+IPPROTO_PGM = 113 -+IPPROTO_SCTP = 132 -+IPPROTO_DIVERT = 254 -+IPPROTO_RAW = 255 -+IPPROTO_MAX = 256 -+IPPROTO_DONE = 257 -+__DARWIN_IPPORT_RESERVED = 1024 -+IPPORT_RESERVED = __DARWIN_IPPORT_RESERVED -+IPPORT_USERRESERVED = 5000 -+IPPORT_HIFIRSTAUTO = 49152 -+IPPORT_HILASTAUTO = 65535 -+IPPORT_RESERVEDSTART = 600 -+def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+IN_CLASSA_NET = 0xff000000 -+IN_CLASSA_NSHIFT = 24 -+IN_CLASSA_HOST = 0x00ffffff -+IN_CLASSA_MAX = 128 -+def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+IN_CLASSB_NET = 0xffff0000 -+IN_CLASSB_NSHIFT = 16 -+IN_CLASSB_HOST = 0x0000ffff -+IN_CLASSB_MAX = 65536 -+def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+IN_CLASSC_NET = 0xffffff00 -+IN_CLASSC_NSHIFT = 8 -+IN_CLASSC_HOST = 0x000000ff -+def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+IN_CLASSD_NET = 0xf0000000 -+IN_CLASSD_NSHIFT = 28 -+IN_CLASSD_HOST = 0x0fffffff -+def IN_MULTICAST(i): return IN_CLASSD(i) ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 + -+def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+INADDR_NONE = 0xffffffff -+def IN_LINKLOCAL(i): return (((u_int32_t)(i) & IN_CLASSB_NET) == IN_LINKLOCALNETNUM) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+def IN_LOOPBACK(i): return (((u_int32_t)(i) & 0xff000000) == 0x7f000000) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN_ZERONET(i): return (((u_int32_t)(i) & 0xff000000) == 0) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN_LOCAL_GROUP(i): return (((u_int32_t)(i) & 0xffffff00) == 0xe0000000) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+IN_LOOPBACKNET = 127 -+INET_ADDRSTRLEN = 16 -+IP_OPTIONS = 1 -+IP_HDRINCL = 2 -+IP_TOS = 3 -+IP_TTL = 4 -+IP_RECVOPTS = 5 -+IP_RECVRETOPTS = 6 -+IP_RECVDSTADDR = 7 -+IP_RETOPTS = 8 -+IP_MULTICAST_IF = 9 -+IP_MULTICAST_TTL = 10 -+IP_MULTICAST_LOOP = 11 -+IP_ADD_MEMBERSHIP = 12 -+IP_DROP_MEMBERSHIP = 13 -+IP_MULTICAST_VIF = 14 -+IP_RSVP_ON = 15 -+IP_RSVP_OFF = 16 -+IP_RSVP_VIF_ON = 17 -+IP_RSVP_VIF_OFF = 18 -+IP_PORTRANGE = 19 -+IP_RECVIF = 20 -+IP_IPSEC_POLICY = 21 -+IP_FAITH = 22 -+IP_STRIPHDR = 23 -+IP_RECVTTL = 24 -+IP_BOUND_IF = 25 -+IP_PKTINFO = 26 -+IP_RECVPKTINFO = IP_PKTINFO -+IP_FW_ADD = 40 -+IP_FW_DEL = 41 -+IP_FW_FLUSH = 42 -+IP_FW_ZERO = 43 -+IP_FW_GET = 44 -+IP_FW_RESETLOG = 45 -+IP_OLD_FW_ADD = 50 -+IP_OLD_FW_DEL = 51 -+IP_OLD_FW_FLUSH = 52 -+IP_OLD_FW_ZERO = 53 -+IP_OLD_FW_GET = 54 -+IP_NAT__XXX = 55 -+IP_OLD_FW_RESETLOG = 56 -+IP_DUMMYNET_CONFIGURE = 60 -+IP_DUMMYNET_DEL = 61 -+IP_DUMMYNET_FLUSH = 62 -+IP_DUMMYNET_GET = 64 -+IP_TRAFFIC_MGT_BACKGROUND = 65 -+IP_MULTICAST_IFINDEX = 66 -+IP_ADD_SOURCE_MEMBERSHIP = 70 -+IP_DROP_SOURCE_MEMBERSHIP = 71 -+IP_BLOCK_SOURCE = 72 -+IP_UNBLOCK_SOURCE = 73 -+IP_MSFILTER = 74 -+MCAST_JOIN_GROUP = 80 -+MCAST_LEAVE_GROUP = 81 -+MCAST_JOIN_SOURCE_GROUP = 82 -+MCAST_LEAVE_SOURCE_GROUP = 83 -+MCAST_BLOCK_SOURCE = 84 -+MCAST_UNBLOCK_SOURCE = 85 -+IP_DEFAULT_MULTICAST_TTL = 1 -+IP_DEFAULT_MULTICAST_LOOP = 1 -+IP_MIN_MEMBERSHIPS = 31 -+IP_MAX_MEMBERSHIPS = 4095 -+IP_MAX_GROUP_SRC_FILTER = 512 -+IP_MAX_SOCK_SRC_FILTER = 128 -+IP_MAX_SOCK_MUTE_FILTER = 128 -+MCAST_UNDEFINED = 0 -+MCAST_INCLUDE = 1 -+MCAST_EXCLUDE = 2 -+IP_PORTRANGE_DEFAULT = 0 -+IP_PORTRANGE_HIGH = 1 -+IP_PORTRANGE_LOW = 2 -+IPPROTO_MAXID = (IPPROTO_AH + 1) -+IPCTL_FORWARDING = 1 -+IPCTL_SENDREDIRECTS = 2 -+IPCTL_DEFTTL = 3 -+IPCTL_DEFMTU = 4 -+IPCTL_RTEXPIRE = 5 -+IPCTL_RTMINEXPIRE = 6 -+IPCTL_RTMAXCACHE = 7 -+IPCTL_SOURCEROUTE = 8 -+IPCTL_DIRECTEDBROADCAST = 9 -+IPCTL_INTRQMAXLEN = 10 -+IPCTL_INTRQDROPS = 11 -+IPCTL_STATS = 12 -+IPCTL_ACCEPTSOURCEROUTE = 13 -+IPCTL_FASTFORWARDING = 14 -+IPCTL_KEEPFAITH = 15 -+IPCTL_GIF_TTL = 16 -+IPCTL_MAXID = 17 ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+# Included from netinet6/in6.h -+__KAME_VERSION = "2009/apple-darwin" -+IPV6PORT_RESERVED = 1024 -+IPV6PORT_ANONMIN = 49152 -+IPV6PORT_ANONMAX = 65535 -+IPV6PORT_RESERVEDMIN = 600 -+IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) -+INET6_ADDRSTRLEN = 46 -+def IN6_IS_ADDR_UNSPECIFIED(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_LOOPBACK(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_V4COMPAT(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_V4MAPPED(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+__IPV6_ADDR_SCOPE_NODELOCAL = 0x01 -+__IPV6_ADDR_SCOPE_INTFACELOCAL = 0x01 -+__IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 -+__IPV6_ADDR_SCOPE_SITELOCAL = 0x05 -+__IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 -+__IPV6_ADDR_SCOPE_GLOBAL = 0x0e -+def IN6_IS_ADDR_LINKLOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_SITELOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_UNIQUE_LOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_MC_NODELOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_MC_SITELOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+def IN6_IS_ADDR_MC_GLOBAL(a): return \ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+IPV6_OPTIONS = 1 -+IPV6_RECVOPTS = 5 -+IPV6_RECVRETOPTS = 6 -+IPV6_RECVDSTADDR = 7 -+IPV6_RETOPTS = 8 -+IPV6_SOCKOPT_RESERVED1 = 3 -+IPV6_UNICAST_HOPS = 4 -+IPV6_MULTICAST_IF = 9 -+IPV6_MULTICAST_HOPS = 10 -+IPV6_MULTICAST_LOOP = 11 -+IPV6_JOIN_GROUP = 12 -+IPV6_LEAVE_GROUP = 13 -+IPV6_PORTRANGE = 14 -+ICMP6_FILTER = 18 -+IPV6_2292PKTINFO = 19 -+IPV6_2292HOPLIMIT = 20 -+IPV6_2292NEXTHOP = 21 -+IPV6_2292HOPOPTS = 22 -+IPV6_2292DSTOPTS = 23 -+IPV6_2292RTHDR = 24 -+IPV6_2292PKTOPTIONS = 25 -+IPV6_PKTINFO = IPV6_2292PKTINFO -+IPV6_HOPLIMIT = IPV6_2292HOPLIMIT -+IPV6_NEXTHOP = IPV6_2292NEXTHOP -+IPV6_HOPOPTS = IPV6_2292HOPOPTS -+IPV6_DSTOPTS = IPV6_2292DSTOPTS -+IPV6_RTHDR = IPV6_2292RTHDR -+IPV6_PKTOPTIONS = IPV6_2292PKTOPTIONS -+IPV6_CHECKSUM = 26 -+IPV6_V6ONLY = 27 -+IPV6_BINDV6ONLY = IPV6_V6ONLY -+IPV6_IPSEC_POLICY = 28 -+IPV6_FAITH = 29 -+IPV6_FW_ADD = 30 -+IPV6_FW_DEL = 31 -+IPV6_FW_FLUSH = 32 -+IPV6_FW_ZERO = 33 -+IPV6_FW_GET = 34 -+IPV6_RECVTCLASS = 35 -+IPV6_TCLASS = 36 -+IPV6_RTHDRDSTOPTS = 57 -+IPV6_RECVPKTINFO = 61 -+IPV6_RECVHOPLIMIT = 37 -+IPV6_RECVRTHDR = 38 -+IPV6_RECVHOPOPTS = 39 -+IPV6_RECVDSTOPTS = 40 -+IPV6_USE_MIN_MTU = 42 -+IPV6_RECVPATHMTU = 43 -+IPV6_PATHMTU = 44 -+IPV6_REACHCONF = 45 -+IPV6_3542PKTINFO = 46 -+IPV6_3542HOPLIMIT = 47 -+IPV6_3542NEXTHOP = 48 -+IPV6_3542HOPOPTS = 49 -+IPV6_3542DSTOPTS = 50 -+IPV6_3542RTHDR = 51 -+IPV6_PKTINFO = IPV6_3542PKTINFO -+IPV6_HOPLIMIT = IPV6_3542HOPLIMIT -+IPV6_NEXTHOP = IPV6_3542NEXTHOP -+IPV6_HOPOPTS = IPV6_3542HOPOPTS -+IPV6_DSTOPTS = IPV6_3542DSTOPTS -+IPV6_RTHDR = IPV6_3542RTHDR -+IPV6_AUTOFLOWLABEL = 59 -+IPV6_DONTFRAG = 62 -+IPV6_PREFER_TEMPADDR = 63 -+IPV6_MSFILTER = 74 -+IPV6_BOUND_IF = 125 -+IPV6_RTHDR_LOOSE = 0 -+IPV6_RTHDR_STRICT = 1 -+IPV6_RTHDR_TYPE_0 = 0 -+IPV6_DEFAULT_MULTICAST_HOPS = 1 -+IPV6_DEFAULT_MULTICAST_LOOP = 1 -+IPV6_MIN_MEMBERSHIPS = 31 -+IPV6_MAX_MEMBERSHIPS = 4095 -+IPV6_MAX_GROUP_SRC_FILTER = 512 -+IPV6_MAX_SOCK_SRC_FILTER = 128 -+IPV6_PORTRANGE_DEFAULT = 0 -+IPV6_PORTRANGE_HIGH = 1 -+IPV6_PORTRANGE_LOW = 2 -+IPV6PROTO_MAXID = (IPPROTO_PIM + 1) -+IPV6CTL_FORWARDING = 1 -+IPV6CTL_SENDREDIRECTS = 2 -+IPV6CTL_DEFHLIM = 3 -+IPV6CTL_DEFMTU = 4 -+IPV6CTL_FORWSRCRT = 5 -+IPV6CTL_STATS = 6 -+IPV6CTL_MRTSTATS = 7 -+IPV6CTL_MRTPROTO = 8 -+IPV6CTL_MAXFRAGPACKETS = 9 -+IPV6CTL_SOURCECHECK = 10 -+IPV6CTL_SOURCECHECK_LOGINT = 11 -+IPV6CTL_ACCEPT_RTADV = 12 -+IPV6CTL_KEEPFAITH = 13 -+IPV6CTL_LOG_INTERVAL = 14 -+IPV6CTL_HDRNESTLIMIT = 15 -+IPV6CTL_DAD_COUNT = 16 -+IPV6CTL_AUTO_FLOWLABEL = 17 -+IPV6CTL_DEFMCASTHLIM = 18 -+IPV6CTL_GIF_HLIM = 19 -+IPV6CTL_KAME_VERSION = 20 -+IPV6CTL_USE_DEPRECATED = 21 -+IPV6CTL_RR_PRUNE = 22 -+IPV6CTL_MAPPED_ADDR = 23 -+IPV6CTL_V6ONLY = 24 -+IPV6CTL_RTEXPIRE = 25 -+IPV6CTL_RTMINEXPIRE = 26 -+IPV6CTL_RTMAXCACHE = 27 -+IPV6CTL_USETEMPADDR = 32 -+IPV6CTL_TEMPPLTIME = 33 -+IPV6CTL_TEMPVLTIME = 34 -+IPV6CTL_AUTO_LINKLOCAL = 35 -+IPV6CTL_RIP6STATS = 36 -+IPV6CTL_PREFER_TEMPADDR = 37 -+IPV6CTL_ADDRCTLPOLICY = 38 -+IPV6CTL_USE_DEFAULTZONE = 39 -+IPV6CTL_MAXFRAGS = 41 -+IPV6CTL_MCAST_PMTU = 44 -+IPV6CTL_NEIGHBORGCTHRESH = 46 -+IPV6CTL_MAXIFPREFIXES = 47 -+IPV6CTL_MAXIFDEFROUTERS = 48 -+IPV6CTL_MAXDYNROUTES = 49 -+ICMPV6CTL_ND6_ONLINKNSRFC4861 = 50 -+IPV6CTL_MAXID = 51 -diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen ---- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/regen 2015-02-15 08:51:58.000000000 +0800 -@@ -0,0 +1,3 @@ -+#! /bin/sh -+set -v -+include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h -diff -Nru orig/Lib/platform.py modified/Lib/platform.py ---- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 -@@ -841,7 +841,7 @@ - - """ Interface to the system's uname command. - """ -- if sys.platform in ('dos', 'win32', 'win16'): -+ if sys.platform in ('dos', 'win32', 'win16', 'ios'): - # XXX Others too ? - return default - try: -@@ -864,7 +864,7 @@ - default in case the command should fail. - - """ -- if sys.platform in ('dos', 'win32', 'win16'): -+ if sys.platform in ('dos', 'win32', 'win16', 'ios'): - # XXX Others too ? - return default - target = _follow_symlinks(target) -diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py ---- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 -@@ -602,6 +602,57 @@ - register("firefox", None, MacOSXOSAScript('firefox'), -1) - register("MacOSX", None, MacOSXOSAScript('default'), -1) - -+# -+# Platform support for iOS -+# -+if sys.platform == 'ios': -+ class MobileSafari(BaseBrowser): -+ def open(self, url, new=0, autoraise=True): -+ # This code is the equivalent of: -+ # NSURL *nsurl = [NSURL URLWithString:url]; -+ # [[UIApplication sharedApplication] openURL:nsurl]; -+ from ctypes import cdll, c_void_p, c_char_p, c_uint32 -+ from ctypes import util -+ objc = cdll.LoadLibrary(util.find_library(b'objc')) -+ cf = cdll.LoadLibrary(util.find_library(b'CoreFoundation')) -+ objc.objc_getClass.restype = c_void_p -+ objc.objc_getClass.argtypes = [c_char_p] -+ objc.sel_registerName.restype = c_void_p -+ objc.sel_registerName.argtypes = [c_char_p] -+ cf.CFStringCreateWithCString.restype = c_void_p -+ cf.CFStringCreateWithCString.argtypes = [c_void_p, c_char_p, c_uint32] ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+ # Get an NSString describing the URL -+ kCFStringEncodingUTF8 = 0x08000100 -+ url = c_void_p(cf.CFStringCreateWithCString(None, url.encode('utf-8'), kCFStringEncodingUTF8)) -+ autorelease = c_void_p(objc.sel_registerName(b'autorelease')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] -+ objc.objc_msgSend.restype = c_void_p -+ objc.objc_msgSend(url, autorelease) ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 + -+ # Get an NSURL object representing the URL -+ NSURL = c_void_p(objc.objc_getClass(b'NSURL')) -+ urlWithString_ = c_void_p(objc.sel_registerName(b'URLWithString:')) -+ objc.objc_msgSend.restype = c_void_p -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] -+ nsurl = c_void_p(objc.objc_msgSend(NSURL, urlWithString_, url)) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ # Get the shared UIApplication instance -+ UIApplication = c_void_p(objc.objc_getClass(b'UIApplication')) -+ sharedApplication = c_void_p(objc.sel_registerName(b'sharedApplication')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] -+ objc.objc_msgSend.restype = c_void_p -+ shared_app = c_void_p(objc.objc_msgSend(UIApplication, sharedApplication)) ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ # Open the URL on the shared application -+ openURL_ = c_void_p(objc.sel_registerName(b'openURL:')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] -+ objc.objc_msgSend.restype = None -+ objc.objc_msgSend(shared_app, openURL_, nsurl) ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return True ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+ register("mobilesafari", None, MobileSafari(), -1) - - # OK, now that we know what the default preference orders for each - # platform are, allow user to override them with the BROWSER variable. -diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 ---- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-aarch64 2015-02-28 16:58:11.000000000 +0800 -@@ -0,0 +1,118 @@ -+##################################################################### -+# Static compilation instructions for all binary modules. -+##################################################################### ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_bisect _bisectmodule.c -+_codecs_cn cjkcodecs/_codecs_cn.c -+_codecs_hk cjkcodecs/_codecs_hk.c -+_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -+_codecs_jp cjkcodecs/_codecs_jp.c -+_codecs_kr cjkcodecs/_codecs_kr.c -+_codecs_tw cjkcodecs/_codecs_tw.c -+_crypt _cryptmodule.c -+_csv _csv.c -+_datetime _datetimemodule.c -+_elementtree _elementtree.c \ -+ -I$(srcdir)/Modules/expat -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+_heapq _heapqmodule.c -+_json _json.c -+_lsprof _lsprof.o rotatingtree.c -+_md5 md5module.c -+_multibytecodec cjkcodecs/multibytecodec.c -+_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -+_opcode _opcode.c -+_pickle _pickle.c -+_posixsubprocess _posixsubprocess.c -+_random _randommodule.c -+_sha1 sha1module.c -+_sha256 sha256module.c -+_sha512 sha512module.c -+_socket socketmodule.c -+_struct _struct.c -+array arraymodule.c -+audioop audioop.c -+binascii binascii.c -+cmath cmathmodule.c _math.c -+fcntl fcntlmodule.c -+grp grpmodule.c -+math mathmodule.c -+mmap mmapmodule.c -+parser parsermodule.c -+pyexpat expat/xmlparse.c \ -+ expat/xmlrole.c \ -+ expat/xmltok.c \ -+ pyexpat.c \ -+ -I$(srcdir)/Modules/expat \ -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+resource resource.c -+select selectmodule.c -+syslog syslogmodule.c -+termios termios.c -+time timemodule.c -+unicodedata unicodedata.c -+xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 -+zlib zlibmodule.c -I$(prefix)/include -lz ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Testing modules -+##################################################################### -+_ctypes_test _ctypes/_ctypes_test.c -+_testbuffer _testbuffer.c -+_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 -+_testimportmultiple _testimportmultiple.c ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/aarch64/ffi.c \ -+ _ctypes/libffi_ios/aarch64/sysv.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Modules that require additional frameworks -+##################################################################### -+#_bz2 bz2module.c -lbz2 -+#_curses _cursesmodule.c -lcurses -ltermcap -+#_curses_panel _curses_panel.c -lpanel -lncurses -+#_dbm _dbmmodule.c -+#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -+#_lzma -+#_sqlite3 -+#_ssl _ssl.c \ -+# -I$(SSL)/include -I$(SSL)/include/openssl \ -+# -L$(SSL)/lib -lssl -lcrypto -+# -DUSE_SSL -+#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -+#nis nismodule.c -lnsl -+#ossaudiodev -+#readline readline.c -lreadline -ltermcap -+#spwd spwdmodule.c -diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm ---- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-arm 2015-02-28 17:01:14.000000000 +0800 -@@ -0,0 +1,119 @@ -+##################################################################### -+# Static compilation instructions for all binary modules. -+##################################################################### ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_bisect _bisectmodule.c -+_codecs_cn cjkcodecs/_codecs_cn.c -+_codecs_hk cjkcodecs/_codecs_hk.c -+_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -+_codecs_jp cjkcodecs/_codecs_jp.c -+_codecs_kr cjkcodecs/_codecs_kr.c -+_codecs_tw cjkcodecs/_codecs_tw.c -+_crypt _cryptmodule.c -+_csv _csv.c -+_datetime _datetimemodule.c -+_elementtree _elementtree.c \ -+ -I$(srcdir)/Modules/expat -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+_heapq _heapqmodule.c -+_json _json.c -+_lsprof _lsprof.o rotatingtree.c -+_md5 md5module.c -+_multibytecodec cjkcodecs/multibytecodec.c -+_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -+_opcode _opcode.c -+_pickle _pickle.c -+_posixsubprocess _posixsubprocess.c -+_random _randommodule.c -+_sha1 sha1module.c -+_sha256 sha256module.c -+_sha512 sha512module.c -+_socket socketmodule.c -+_struct _struct.c -+array arraymodule.c -+audioop audioop.c -+binascii binascii.c -+cmath cmathmodule.c _math.c -+fcntl fcntlmodule.c -+grp grpmodule.c -+math mathmodule.c -+mmap mmapmodule.c -+parser parsermodule.c -+pyexpat expat/xmlparse.c \ -+ expat/xmlrole.c \ -+ expat/xmltok.c \ -+ pyexpat.c \ -+ -I$(srcdir)/Modules/expat \ -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+resource resource.c -+select selectmodule.c -+syslog syslogmodule.c -+termios termios.c -+time timemodule.c -+unicodedata unicodedata.c -+xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 -+zlib zlibmodule.c -I$(prefix)/include -lz ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Testing modules -+##################################################################### -+_ctypes_test _ctypes/_ctypes_test.c -+_testbuffer _testbuffer.c -+_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 -+_testimportmultiple _testimportmultiple.c ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/arm/ffi.c \ -+ _ctypes/libffi_ios/arm/sysv.S \ -+ _ctypes/libffi_ios/arm/trampoline.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_32=1 -DANSI=1 ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Modules that require additional frameworks -+##################################################################### -+#_bz2 bz2module.c -lbz2 -+#_curses _cursesmodule.c -lcurses -ltermcap -+#_curses_panel _curses_panel.c -lpanel -lncurses -+#_dbm _dbmmodule.c -+#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -+#_lzma -+#_sqlite3 -+#_ssl _ssl.c \ -+# -I$(SSL)/include -I$(SSL)/include/openssl \ -+# -L$(SSL)/lib -lssl -lcrypto -+# -DUSE_SSL -+#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -+#nis nismodule.c -lnsl -+#ossaudiodev -+#readline readline.c -lreadline -ltermcap -+#spwd spwdmodule.c -diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 ---- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-i386 2015-03-12 21:44:02.000000000 +0800 -@@ -0,0 +1,118 @@ -+##################################################################### -+# Static compilation instructions for all binary modules. -+##################################################################### ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_bisect _bisectmodule.c -+_codecs_cn cjkcodecs/_codecs_cn.c -+_codecs_hk cjkcodecs/_codecs_hk.c -+_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -+_codecs_jp cjkcodecs/_codecs_jp.c -+_codecs_kr cjkcodecs/_codecs_kr.c -+_codecs_tw cjkcodecs/_codecs_tw.c -+_crypt _cryptmodule.c -+_csv _csv.c -+_datetime _datetimemodule.c -+_elementtree _elementtree.c \ -+ -I$(srcdir)/Modules/expat -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+_heapq _heapqmodule.c -+_json _json.c -+_lsprof _lsprof.o rotatingtree.c -+_md5 md5module.c -+_multibytecodec cjkcodecs/multibytecodec.c -+_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -+_opcode _opcode.c -+_pickle _pickle.c -+_posixsubprocess _posixsubprocess.c -+_random _randommodule.c -+_sha1 sha1module.c -+_sha256 sha256module.c -+_sha512 sha512module.c -+_socket socketmodule.c -+_struct _struct.c -+array arraymodule.c -+audioop audioop.c -+binascii binascii.c -+cmath cmathmodule.c _math.c -+fcntl fcntlmodule.c -+grp grpmodule.c -+math mathmodule.c -+mmap mmapmodule.c -+parser parsermodule.c -+pyexpat expat/xmlparse.c \ -+ expat/xmlrole.c \ -+ expat/xmltok.c \ -+ pyexpat.c \ -+ -I$(srcdir)/Modules/expat \ -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+resource resource.c -+select selectmodule.c -+syslog syslogmodule.c -+termios termios.c -+time timemodule.c -+unicodedata unicodedata.c -+xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 -+zlib zlibmodule.c -I$(prefix)/include -lz ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Testing modules -+##################################################################### -+_ctypes_test _ctypes/_ctypes_test.c -+_testbuffer _testbuffer.c -+_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 -+_testimportmultiple _testimportmultiple.c ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/x86/ffi.c \ -+ _ctypes/libffi_ios/x86/sysv.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_32=1 -DANSI=1 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+##################################################################### -+# Modules that require additional frameworks -+##################################################################### -+#_bz2 bz2module.c -lbz2 -+#_curses _cursesmodule.c -lcurses -ltermcap -+#_curses_panel _curses_panel.c -lpanel -lncurses -+#_dbm _dbmmodule.c -+#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -+#_lzma -+#_sqlite3 -+#_ssl _ssl.c \ -+# -I$(SSL)/include -I$(SSL)/include/openssl \ -+# -L$(SSL)/lib -lssl -lcrypto -+# -DUSE_SSL -+#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -+#nis nismodule.c -lnsl -+#ossaudiodev -+#readline readline.c -lreadline -ltermcap -+#spwd spwdmodule.c -diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 ---- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-x86_64 2015-03-12 21:40:26.000000000 +0800 -@@ -0,0 +1,118 @@ -+##################################################################### -+# Static compilation instructions for all binary modules. -+##################################################################### ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 + -+_bisect _bisectmodule.c -+_codecs_cn cjkcodecs/_codecs_cn.c -+_codecs_hk cjkcodecs/_codecs_hk.c -+_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -+_codecs_jp cjkcodecs/_codecs_jp.c -+_codecs_kr cjkcodecs/_codecs_kr.c -+_codecs_tw cjkcodecs/_codecs_tw.c -+_crypt _cryptmodule.c -+_csv _csv.c -+_datetime _datetimemodule.c -+_elementtree _elementtree.c \ -+ -I$(srcdir)/Modules/expat -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+_heapq _heapqmodule.c -+_json _json.c -+_lsprof _lsprof.o rotatingtree.c -+_md5 md5module.c -+_multibytecodec cjkcodecs/multibytecodec.c -+_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -+_opcode _opcode.c -+_pickle _pickle.c -+_posixsubprocess _posixsubprocess.c -+_random _randommodule.c -+_sha1 sha1module.c -+_sha256 sha256module.c -+_sha512 sha512module.c -+_socket socketmodule.c -+_struct _struct.c -+array arraymodule.c -+audioop audioop.c -+binascii binascii.c -+cmath cmathmodule.c _math.c -+fcntl fcntlmodule.c -+grp grpmodule.c -+math mathmodule.c -+mmap mmapmodule.c -+parser parsermodule.c -+pyexpat expat/xmlparse.c \ -+ expat/xmlrole.c \ -+ expat/xmltok.c \ -+ pyexpat.c \ -+ -I$(srcdir)/Modules/expat \ -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+resource resource.c -+select selectmodule.c -+syslog syslogmodule.c -+termios termios.c -+time timemodule.c -+unicodedata unicodedata.c -+xxlimited xxlimited.c -DPy_LIMITED_API=0x0304000 -+zlib zlibmodule.c -I$(prefix)/include -lz ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+##################################################################### -+# Testing modules -+##################################################################### -+_ctypes_test _ctypes/_ctypes_test.c -+_testbuffer _testbuffer.c -+_testcapi _testcapimodule.c -I$(srcdir)/Include -DPy_BUILD_CORE=1 -+_testimportmultiple _testimportmultiple.c ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+##################################################################### -+# Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/x86/ffi64.c \ -+ _ctypes/libffi_ios/x86/unix64.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+##################################################################### -+# Modules that require additional frameworks -+##################################################################### -+#_bz2 bz2module.c -lbz2 -+#_curses _cursesmodule.c -lcurses -ltermcap -+#_curses_panel _curses_panel.c -lpanel -lncurses -+#_dbm _dbmmodule.c -+#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -+#_lzma -+#_sqlite3 -+#_ssl _ssl.c \ -+# -I$(SSL)/include -I$(SSL)/include/openssl \ -+# -L$(SSL)/lib -lssl -lcrypto -+# -DUSE_SSL -+#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -+#nis nismodule.c -lnsl -+#ossaudiodev -+#readline readline.c -lreadline -ltermcap -+#spwd spwdmodule.c -diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE ---- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-02-26 10:00:15.000000000 +0800 -@@ -0,0 +1,21 @@ -+libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. -+See source files for details. ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+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: ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+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. -diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README ---- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README 2015-02-26 10:00:00.000000000 +0800 -@@ -0,0 +1,447 @@ -+Status -+====== ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+libffi-3.2.1 was released on November 12, 2014. Check the libffi web -+page for updates: . ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+What is libffi? -+=============== ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+Compilers for high level languages generate code that follow certain -+conventions. These conventions are necessary, in part, for separate -+compilation to work. One such convention is the "calling -+convention". The "calling convention" is essentially a set of -+assumptions made by the compiler about where function arguments will -+be found on entry to a function. A "calling convention" also specifies -+where the return value for a function is found. ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+Some programs may not know at the time of compilation what arguments -+are to be passed to a function. For instance, an interpreter may be -+told at run-time about the number and types of arguments used to call -+a given function. Libffi can be used in such programs to provide a -+bridge from the interpreter program to compiled code. ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+The libffi library provides a portable, high level programming -+interface to various calling conventions. This allows a programmer to -+call any function specified by a call interface description at run -+time. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+FFI stands for Foreign Function Interface. A foreign function -+interface is the popular name for the interface that allows code -+written in one language to call code written in another language. The -+libffi library really only provides the lowest, machine dependent -+layer of a fully featured foreign function interface. A layer must -+exist above libffi that handles type conversions for values passed -+between the two languages. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+Supported Platforms -+=================== ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+Libffi has been ported to many different platforms. -+For specific configuration details and testing status, please -+refer to the wiki page here: ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+At the time of release, the following basic configurations have been -+tested: ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 + -+|-----------------+------------------+-------------------------| -+| Architecture | Operating System | Compiler | -+|-----------------+------------------+-------------------------| -+| AArch64 (ARM64) | iOS | Clang | -+| AArch64 | Linux | GCC | -+| Alpha | Linux | GCC | -+| Alpha | Tru64 | GCC | -+| ARC | Linux | GCC | -+| ARM | Linux | GCC | -+| ARM | iOS | GCC | -+| AVR32 | Linux | GCC | -+| Blackfin | uClinux | GCC | -+| HPPA | HPUX | GCC | -+| IA-64 | Linux | GCC | -+| M68K | FreeMiNT | GCC | -+| M68K | Linux | GCC | -+| M68K | RTEMS | GCC | -+| M88K | OpenBSD/mvme88k | GCC | -+| Meta | Linux | GCC | -+| MicroBlaze | Linux | GCC | -+| MIPS | IRIX | GCC | -+| MIPS | Linux | GCC | -+| MIPS | RTEMS | GCC | -+| MIPS64 | Linux | GCC | -+| Moxie | Bare metal | GCC | -+| Nios II | Linux | GCC | -+| OpenRISC | Linux | GCC | -+| PowerPC 32-bit | AIX | IBM XL C | -+| PowerPC 64-bit | AIX | IBM XL C | -+| PowerPC | AMIGA | GCC | -+| PowerPC | Linux | GCC | -+| PowerPC | Mac OSX | GCC | -+| PowerPC | FreeBSD | GCC | -+| PowerPC 64-bit | FreeBSD | GCC | -+| PowerPC 64-bit | Linux ELFv1 | GCC | -+| PowerPC 64-bit | Linux ELFv2 | GCC | -+| S390 | Linux | GCC | -+| S390X | Linux | GCC | -+| SPARC | Linux | GCC | -+| SPARC | Solaris | GCC | -+| SPARC | Solaris | Oracle Solaris Studio C | -+| SPARC64 | Linux | GCC | -+| SPARC64 | FreeBSD | GCC | -+| SPARC64 | Solaris | Oracle Solaris Studio C | -+| TILE-Gx/TILEPro | Linux | GCC | -+| VAX | OpenBSD/vax | GCC | -+| X86 | FreeBSD | GCC | -+| X86 | GNU HURD | GCC | -+| X86 | Interix | GCC | -+| X86 | kFreeBSD | GCC | -+| X86 | Linux | GCC | -+| X86 | Mac OSX | GCC | -+| X86 | OpenBSD | GCC | -+| X86 | OS/2 | GCC | -+| X86 | Solaris | GCC | -+| X86 | Solaris | Oracle Solaris Studio C | -+| X86 | Windows/Cygwin | GCC | -+| X86 | Windows/MingW | GCC | -+| X86-64 | FreeBSD | GCC | -+| X86-64 | Linux | GCC | -+| X86-64 | Linux/x32 | GCC | -+| X86-64 | OpenBSD | GCC | -+| X86-64 | Solaris | Oracle Solaris Studio C | -+| X86-64 | Windows/Cygwin | GCC | -+| X86-64 | Windows/MingW | GCC | -+| Xtensa | Linux | GCC | -+|-----------------+------------------+-------------------------| ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+Please send additional platform test results to -+libffi-discuss@sourceware.org and feel free to update the wiki page -+above. ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+Installing libffi -+================= ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+First you must configure the distribution for your particular -+system. Go to the directory you wish to build libffi in and run the -+"configure" program found in the root directory of the libffi source -+distribution. ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+If you're building libffi directly from version control, configure won't -+exist yet; run ./autogen.sh first. ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+You may want to tell configure where to install the libffi library and -+header files. To do that, use the --prefix configure switch. Libffi -+will install under /usr/local by default. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+If you want to enable extra run-time debugging checks use the the -+--enable-debug configure switch. This is useful when your program dies -+mysteriously while using libffi. ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+Another useful configure switch is --enable-purify-safety. Using this -+will add some extra code which will suppress certain warnings when you -+are using Purify with libffi. Only use this switch when using -+Purify, as it will slow down the library. ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+It's also possible to build libffi on Windows platforms with -+Microsoft's Visual C++ compiler. In this case, use the msvcc.sh -+wrapper script during configuration like so: ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and -+CXX="path/to/msvcc.sh -m64". You may also need to specify --build -+appropriately. ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+It is also possible to build libffi on Windows platforms with the LLVM -+project's clang-cl compiler, like below: ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+When building with MSVC under a MingW environment, you may need to -+remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' -+command. ('cygpath' is not present in MingW, and is not required when -+using MingW-style paths.) ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+For iOS builds, the 'libffi.xcodeproj' Xcode project is available. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+Configure has many other options. Use "configure --help" to see them all. ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+Once configure has finished, type "make". Note that you must be using -+GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+To ensure that libffi is working as advertised, type "make check". -+This will require that you have DejaGNU installed. ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+To install the library and header files, type "make install". ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 + -+History -+======= ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+See the git log for details at http://github.com/atgreen/libffi. ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+3.2.1 Nov-12-14 -+ Build fix for non-iOS AArch64 targets. ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+3.2 Nov-11-14 -+ Add C99 Complex Type support (currently only supported on -+ s390). -+ Add support for PASCAL and REGISTER calling conventions on x86 -+ Windows/Linux. -+ Add OpenRISC and Cygwin-64 support. -+ Bug fixes. ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+3.1 May-19-14 -+ Add AArch64 (ARM64) iOS support. -+ Add Nios II support. -+ Add m88k and DEC VAX support. -+ Add support for stdcall, thiscall, and fastcall on non-Windows -+ 32-bit x86 targets such as Linux. -+ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi -+ fixes. -+ Make the testsuite more robust: eliminate several spurious -+ failures, and respect the $CC and $CXX environment variables. -+ Archive off the manually maintained ChangeLog in favor of git -+ log. ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+3.0.13 Mar-17-13 -+ Add Meta support. -+ Add missing Moxie bits. -+ Fix stack alignment bug on 32-bit x86. -+ Build fix for m68000 targets. -+ Build fix for soft-float Power targets. -+ Fix the install dir location for some platforms when building -+ with GCC (OS X, Solaris). -+ Fix Cygwin regression. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+3.0.12 Feb-11-13 -+ Add Moxie support. -+ Add AArch64 support. -+ Add Blackfin support. -+ Add TILE-Gx/TILEPro support. -+ Add MicroBlaze support. -+ Add Xtensa support. -+ Add support for PaX enabled kernels with MPROTECT. -+ Add support for native vendor compilers on -+ Solaris and AIX. -+ Work around LLVM/GCC interoperability issue on x86_64. ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.11 Apr-11-12 -+ Lots of build fixes. -+ Add support for variadic functions (ffi_prep_cif_var). -+ Add Linux/x32 support. -+ Add thiscall, fastcall and MSVC cdecl support on Windows. -+ Add Amiga and newer MacOS support. -+ Add m68k FreeMiNT support. -+ Integration with iOS' xcode build tools. -+ Fix Octeon and MC68881 support. -+ Fix code pessimizations. ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.10 Aug-23-11 -+ Add support for Apple's iOS. -+ Add support for ARM VFP ABI. -+ Add RTEMS support for MIPS and M68K. -+ Fix instruction cache clearing problems on -+ ARM and SPARC. -+ Fix the N64 build on mips-sgi-irix6.5. -+ Enable builds with Microsoft's compiler. -+ Enable x86 builds with Oracle's Solaris compiler. -+ Fix support for calling code compiled with Oracle's Sparc -+ Solaris compiler. -+ Testsuite fixes for Tru64 Unix. -+ Additional platform support. ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.9 Dec-31-09 -+ Add AVR32 and win64 ports. Add ARM softfp support. -+ Many fixes for AIX, Solaris, HP-UX, *BSD. -+ Several PowerPC and x86-64 bug fixes. -+ Build DLL for windows. ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.8 Dec-19-08 -+ Add *BSD, BeOS, and PA-Linux support. ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.7 Nov-11-08 -+ Fix for ppc FreeBSD. -+ (thanks to Andreas Tobler) ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.6 Jul-17-08 -+ Fix for closures on sh. -+ Mark the sh/sh64 stack as non-executable. -+ (both thanks to Kaz Kojima) ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.5 Apr-3-08 -+ Fix libffi.pc file. -+ Fix #define ARM for IcedTea users. -+ Fix x86 closure bug. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.4 Feb-24-08 -+ Fix x86 OpenBSD configury. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.3 Feb-22-08 -+ Enable x86 OpenBSD thanks to Thomas Heller, and -+ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. -+ Clean up test instruction in README. ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.2 Feb-21-08 -+ Improved x86 FreeBSD support. -+ Thanks to Björn König. ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.1 Feb-15-08 -+ Fix instruction cache flushing bug on MIPS. -+ Thanks to David Daney. ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+3.0.0 Feb-15-08 -+ Many changes, mostly thanks to the GCC project. -+ Cygnus Solutions is now Red Hat. ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+ [10 years go by...] ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 + -+1.20 Oct-5-98 -+ Raffaele Sena produces ARM port. ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.19 Oct-5-98 -+ Fixed x86 long double and long long return support. -+ m68k bug fixes from Andreas Schwab. -+ Patch for DU assembler compatibility for the Alpha from Richard -+ Henderson. ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.18 Apr-17-98 -+ Bug fixes and MIPS configuration changes. ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.17 Feb-24-98 -+ Bug fixes and m68k port from Andreas Schwab. PowerPC port from -+ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.16 Feb-11-98 -+ Richard Henderson produces Alpha port. ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.15 Dec-4-97 -+ Fixed an n32 ABI bug. New libtool, auto* support. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.14 May-13-97 -+ libtool is now used to generate shared and static libraries. -+ Fixed a minor portability problem reported by Russ McManus -+ . ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+1.13 Dec-2-96 -+ Added --enable-purify-safety to keep Purify from complaining -+ about certain low level code. -+ Sparc fix for calling functions with < 6 args. -+ Linux x86 a.out fix. ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.12 Nov-22-96 -+ Added missing ffi_type_void, needed for supporting void return -+ types. Fixed test case for non MIPS machines. Cygnus Support -+ is now Cygnus Solutions. ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.11 Oct-30-96 -+ Added notes about GNU make. ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.10 Oct-29-96 -+ Added configuration fix for non GNU compilers. ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.09 Oct-29-96 -+ Added --enable-debug configure switch. Clean-ups based on LCLint -+ feedback. ffi_mips.h is always installed. Many configuration -+ fixes. Fixed ffitest.c for sparc builds. ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.08 Oct-15-96 -+ Fixed n32 problem. Many clean-ups. ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.07 Oct-14-96 -+ Gordon Irlam rewrites v8.S again. Bug fixes. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.06 Oct-14-96 -+ Gordon Irlam improved the sparc port. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.05 Oct-14-96 -+ Interface changes based on feedback. ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.04 Oct-11-96 -+ Sparc port complete (modulo struct passing bug). ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.03 Oct-10-96 -+ Passing struct args, and returning struct values works for -+ all architectures/calling conventions. Expanded tests. ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.02 Oct-9-96 -+ Added SGI n32 support. Fixed bugs in both o32 and Linux support. -+ Added "make test". ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.01 Oct-8-96 -+ Fixed float passing bug in mips version. Restructured some -+ of the code. Builds cleanly with SGI tools. ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 + -+1.00 Oct-7-96 -+ First release. No public announcement. ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+Authors & Credits -+================= ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+libffi was originally written by Anthony Green . ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+The developers of the GNU Compiler Collection project have made -+innumerable valuable contributions. See the ChangeLog file for -+details. ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+Some of the ideas behind libffi were inspired by Gianni Mariani's free -+gencall library for Silicon Graphics machines. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+The closure mechanism was designed and implemented by Kresten Krab -+Thorup. ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+Major processor architecture ports were contributed by the following -+developers: ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+aarch64 Marcus Shawcroft, James Greenhalgh -+alpha Richard Henderson -+arm Raffaele Sena -+blackfin Alexandre Keunecke I. de Mendonca -+cris Simon Posnjak, Hans-Peter Nilsson -+frv Anthony Green -+ia64 Hans Boehm -+m32r Kazuhiro Inaoka -+m68k Andreas Schwab -+m88k Miod Vallat -+microblaze Nathan Rossi -+mips Anthony Green, Casey Marshall -+mips64 David Daney -+moxie Anthony Green -+nios ii Sandra Loosemore -+openrisc Sebastian Macke -+pa Randolph Chung, Dave Anglin, Andreas Tobler -+powerpc Geoffrey Keating, Andreas Tobler, -+ David Edelsohn, John Hornkvist -+powerpc64 Jakub Jelinek -+s390 Gerhard Tonn, Ulrich Weigand -+sh Kaz Kojima -+sh64 Kaz Kojima -+sparc Anthony Green, Gordon Irlam -+tile-gx/tilepro Walter Lee -+vax Miod Vallat -+x86 Anthony Green, Jon Beniston -+x86-64 Bo Thorsen -+xtensa Chris Zankel ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+Jesper Skov and Andrew Haley both did more than their fair share of -+stepping through the code and tracking down bugs. ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+Thanks also to Tom Tromey for bug fixes, documentation and -+configuration help. ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+Thanks to Jim Blandy, who provided some useful feedback on the libffi -+interface. ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+Andreas Tobler has done a tremendous amount of work on the testsuite. ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+Alex Oliva solved the executable page problem for SElinux. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+The list above is almost certainly incomplete and inaccurate. I'm -+happy to make corrections or additions upon request. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+If you have a problem, or have found a bug, please send a note to the -+author at green@moxielogic.com, or the project mailing list at -+libffi-discuss@sourceware.org. -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi.c ---- orig/Modules/_ctypes/libffi_ios/aarch64/ffi.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi.c 2015-03-12 21:33:06.000000000 +0800 -@@ -0,0 +1,1152 @@ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+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: ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+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. */ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+#include -+#include -+#include -+#include -+#include -+#include "internal.h" ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 + -+/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; -+ all further uses in this file will refer to the 128-bit type. */ -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+# if FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+#else -+# undef FFI_TYPE_LONGDOUBLE -+# define FFI_TYPE_LONGDOUBLE 4 -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+union _d -+{ -+ UINT64 d; -+ UINT32 s[2]; -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+struct _v -+{ -+ union _d d[2] __attribute__((aligned(16))); -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+struct call_context -+{ -+ struct _v v[N_V_ARG_REG]; -+ UINT64 x[N_X_ARG_REG]; -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if defined (__clang__) && defined (__APPLE__) -+extern void sys_icache_invalidate (void *start, size_t len); -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+static inline void -+ffi_clear_cache (void *start, void *end) -+{ -+#if defined (__clang__) && defined (__APPLE__) -+ sys_icache_invalidate (start, (char *)end - (char *)start); -+#elif defined (__GNUC__) -+ __builtin___clear_cache (start, end); -+#else -+#error "Missing builtin to flush instruction cache" -+#endif -+} ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* A subroutine of is_vfp_type. Given a structure type, return the type code -+ of the first non-structure element. Recurse for structure elements. -+ Return -1 if the structure is in fact empty, i.e. no nested elements. */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+static int -+is_hfa0 (const ffi_type *ty) -+{ -+ ffi_type **elements = ty->elements; -+ int i, ret = -1; ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ ret = elements[i]->type; -+ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) -+ { -+ ret = is_hfa0 (elements[i]); -+ if (ret < 0) -+ continue; -+ } -+ break; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return ret; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+/* A subroutine of is_vfp_type. Given a structure type, return true if all -+ of the non-structure elements are the same as CANDIDATE. */ ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+static int -+is_hfa1 (const ffi_type *ty, int candidate) -+{ -+ ffi_type **elements = ty->elements; -+ int i; ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ return 1; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+/* Determine if TY may be allocated to the FP registers. This is both an -+ fp scalar type as well as an homogenous floating point aggregate (HFA). -+ That is, a structure consisting of 1 to 4 members of all the same type, -+ where that type is an fp scalar. ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* -+ constant for the type. */ ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+static int -+is_vfp_type (const ffi_type *ty) -+{ -+ ffi_type **elements; -+ int candidate, i; -+ size_t size, ele_count; ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ /* Quickest tests first. */ -+ candidate = ty->type; -+ switch (candidate) -+ { -+ default: -+ return 0; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 1; -+ goto done; -+ case FFI_TYPE_COMPLEX: -+ candidate = ty->elements[0]->type; -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 2; -+ goto done; -+ } -+ return 0; -+ case FFI_TYPE_STRUCT: -+ break; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ -+ size = ty->size; -+ if (size < 4 || size > 64) -+ return 0; ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ /* Find the type of the first non-structure member. */ -+ elements = ty->elements; -+ candidate = elements[0]->type; -+ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) -+ { -+ for (i = 0; ; ++i) -+ { -+ candidate = is_hfa0 (elements[i]); -+ if (candidate >= 0) -+ break; -+ } -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 + -+ /* If the first member is not a floating point type, it's not an HFA. -+ Also quickly re-check the size of the structure. */ -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ ele_count = size / sizeof(float); -+ if (size != ele_count * sizeof(float)) -+ return 0; -+ break; -+ case FFI_TYPE_DOUBLE: -+ ele_count = size / sizeof(double); -+ if (size != ele_count * sizeof(double)) -+ return 0; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = size / sizeof(long double); -+ if (size != ele_count * sizeof(long double)) -+ return 0; -+ break; -+ default: -+ return 0; -+ } -+ if (ele_count > 4) -+ return 0; ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Finally, make sure that all scalar elements are the same type. */ -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* All tests succeeded. Encode the result. */ -+ done: -+ return candidate * 4 + (4 - ele_count); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Representation of the procedure call argument marshalling -+ state. ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ The terse state variable names match the names used in the AARCH64 -+ PCS. */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+struct arg_state -+{ -+ unsigned ngrn; /* Next general-purpose register number. */ -+ unsigned nsrn; /* Next vector register number. */ -+ size_t nsaa; /* Next stack offset. */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if defined (__APPLE__) -+ unsigned allocating_variadic; -+#endif -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Initialize a procedure call argument marshalling state. */ -+static void -+arg_init (struct arg_state *state) -+{ -+ state->ngrn = 0; -+ state->nsrn = 0; -+ state->nsaa = 0; -+#if defined (__APPLE__) -+ state->allocating_variadic = 0; -+#endif -+} ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Allocate an aligned slot on the stack and return a pointer to it. */ -+static void * -+allocate_to_stack (struct arg_state *state, void *stack, -+ size_t alignment, size_t size) -+{ -+ size_t nsaa = state->nsaa; ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Round up the NSAA to the larger of 8 or the natural -+ alignment of the argument's type. */ -+#if defined (__APPLE__) -+ if (state->allocating_variadic && alignment < 8) -+ alignment = 8; -+#else -+ if (alignment < 8) -+ alignment = 8; -+#endif -+ -+ nsaa = ALIGN (nsaa, alignment); -+ state->nsaa = nsaa + size; ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return (char *)stack + nsaa; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+static ffi_arg -+extend_integer_type (void *source, int type) -+{ -+ switch (type) -+ { -+ case FFI_TYPE_UINT8: -+ return *(UINT8 *) source; -+ case FFI_TYPE_SINT8: -+ return *(SINT8 *) source; -+ case FFI_TYPE_UINT16: -+ return *(UINT16 *) source; -+ case FFI_TYPE_SINT16: -+ return *(SINT16 *) source; -+ case FFI_TYPE_UINT32: -+ return *(UINT32 *) source; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ return *(SINT32 *) source; -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ return *(UINT64 *) source; -+ break; -+ case FFI_TYPE_POINTER: -+ return *(uintptr_t *) source; -+ default: -+ abort(); -+ } -+} ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+static void -+extend_hfa_type (void *dest, void *src, int h) -+{ -+ int f = h - AARCH64_RET_S4; -+ void *x0; ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+ asm volatile ( -+ "adr %0, 0f\n" -+" add %0, %0, %1\n" -+" br %0\n" -+"0: ldp s16, s17, [%3]\n" /* S4 */ -+" ldp s18, s19, [%3, #8]\n" -+" b 4f\n" -+" ldp s16, s17, [%3]\n" /* S3 */ -+" ldr s18, [%3, #8]\n" -+" b 3f\n" -+" ldp s16, s17, [%3]\n" /* S2 */ -+" b 2f\n" -+" nop\n" -+" ldr s16, [%3]\n" /* S1 */ -+" b 1f\n" -+" nop\n" -+" ldp d16, d17, [%3]\n" /* D4 */ -+" ldp d18, d19, [%3, #16]\n" -+" b 4f\n" -+" ldp d16, d17, [%3]\n" /* D3 */ -+" ldr d18, [%3, #16]\n" -+" b 3f\n" -+" ldp d16, d17, [%3]\n" /* D2 */ -+" b 2f\n" -+" nop\n" -+" ldr d16, [%3]\n" /* D1 */ -+" b 1f\n" -+" nop\n" -+" ldp q16, q17, [%3]\n" /* Q4 */ -+" ldp q18, q19, [%3, #16]\n" -+" b 4f\n" -+" ldp q16, q17, [%3]\n" /* Q3 */ -+" ldr q18, [%3, #16]\n" -+" b 3f\n" -+" ldp q16, q17, [%3]\n" /* Q2 */ -+" b 2f\n" -+" nop\n" -+" ldr q16, [%3]\n" /* Q1 */ -+" b 1f\n" -+"4: str q19, [%2, #48]\n" -+"3: str q18, [%2, #32]\n" -+"2: str q17, [%2, #16]\n" -+"1: str q16, [%2]" -+ : "=&r"(x0) -+ : "r"(f * 12), "r"(dest), "r"(src) -+ : "memory", "v16", "v17", "v18", "v19"); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+static void * -+compress_hfa_type (void *dest, void *reg, int h) -+{ -+ switch (h) -+ { -+ case AARCH64_RET_S1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 12; -+#endif -+ } -+ else -+ *(float *)dest = *(float *)reg; -+ break; -+ case AARCH64_RET_S2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.s, v17.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_S3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.s, v17.s, v18.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_S4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+ case AARCH64_RET_D1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 8; -+#endif -+ } -+ else -+ *(double *)dest = *(double *)reg; -+ break; -+ case AARCH64_RET_D2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.d, v17.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_D3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.d, v17.d, v18.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_D4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+ default: -+ if (dest != reg) -+ return memcpy (dest, reg, 16 * (4 - (h & 3))); -+ break; -+ } -+ return dest; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+/* Either allocate an appropriate register for the argument type, or if -+ none are available, allocate a stack slot and return a pointer -+ to the allocated space. */ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+static void * -+allocate_int_to_reg_or_stack (struct call_context *context, -+ struct arg_state *state, -+ void *stack, size_t size) -+{ -+ if (state->ngrn < N_X_ARG_REG) -+ return &context->x[state->ngrn++]; ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+ state->ngrn = N_X_ARG_REG; -+ return allocate_to_stack (state, stack, size, size); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 + -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ ffi_type *rtype = cif->rtype; -+ size_t bytes = cif->bytes; -+ int flags, i, n; ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ switch (rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = AARCH64_RET_VOID; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = AARCH64_RET_UINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = AARCH64_RET_UINT16; -+ break; -+ case FFI_TYPE_UINT32: -+ flags = AARCH64_RET_UINT32; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = AARCH64_RET_SINT8; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = AARCH64_RET_SINT16; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ flags = AARCH64_RET_SINT32; -+ break; -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = AARCH64_RET_INT64; -+ break; -+ case FFI_TYPE_POINTER: -+ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ flags = is_vfp_type (rtype); -+ if (flags == 0) -+ { -+ size_t s = rtype->size; -+ if (s > 16) -+ { -+ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; -+ bytes += 8; -+ } -+ else if (s == 16) -+ flags = AARCH64_RET_INT128; -+ else if (s == 8) -+ flags = AARCH64_RET_INT64; -+ else -+ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; -+ } -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ default: -+ abort(); -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ if (is_vfp_type (cif->arg_types[i])) -+ { -+ flags |= AARCH64_FLAG_ARG_V; -+ break; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Round the stack up to a multiple of the stack alignment requirement. */ -+ cif->bytes = ALIGN(bytes, 16); -+ cif->flags = flags; -+#if defined (__APPLE__) -+ cif->aarch64_nfixedargs = 0; -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return FFI_OK; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if defined (__APPLE__) -+/* Perform Apple-specific cif processing for variadic calls */ -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs) -+{ -+ ffi_status status = ffi_prep_cif_machdep (cif); -+ cif->aarch64_nfixedargs = nfixedargs; -+ return status; -+} -+#endif /* __APPLE__ */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+extern void ffi_call_SYSV (struct call_context *context, void *frame, -+ void (*fn)(void), void *rvalue, int flags, -+ void *closure) FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Call a function with the provided arguments and capture the return -+ value. */ -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, -+ void **avalue, void *closure) -+{ -+ struct call_context *context; -+ void *stack, *frame, *rvalue; -+ struct arg_state state; -+ size_t stack_bytes, rtype_size, rsize; -+ int i, nargs, flags; -+ ffi_type *rtype; ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ flags = cif->flags; -+ rtype = cif->rtype; -+ rtype_size = rtype->size; -+ stack_bytes = cif->bytes; ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* If the target function returns a structure via hidden pointer, -+ then we cannot allow a null rvalue. Otherwise, mash a null -+ rvalue to void return type. */ -+ rsize = 0; -+ if (flags & AARCH64_RET_IN_MEM) -+ { -+ if (orig_rvalue == NULL) -+ rsize = rtype_size; -+ } -+ else if (orig_rvalue == NULL) -+ flags &= AARCH64_FLAG_ARG_V; -+ else if (flags & AARCH64_RET_NEED_COPY) -+ rsize = 16; ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ /* Allocate consectutive stack for everything we'll need. */ -+ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); -+ stack = context + 1; -+ frame = stack + stack_bytes; -+ rvalue = (rsize ? frame + 32 : orig_rvalue); ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ arg_init (&state); -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ size_t s = ty->size; -+ void *a = avalue[i]; -+ int h, t; ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ t = ty->type; -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ /* If the argument is a basic type the argument is allocated to an -+ appropriate register, or if none are available, to the stack. */ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ do_pointer: -+ { -+ ffi_arg ext = extend_integer_type (a, t); -+ if (state.ngrn < N_X_ARG_REG) -+ context->x[state.ngrn++] = ext; -+ else -+ { -+ void *d = allocate_to_stack (&state, stack, ty->alignment, s); -+ state.ngrn = N_X_ARG_REG; -+ /* Note that the default abi extends each argument -+ to a full 64-bit slot, while the iOS abi allocates -+ only enough space. */ -+#ifdef __APPLE__ -+ memcpy(d, a, s); -+#else -+ *(ffi_arg *)d = ext; -+#endif -+ } -+ } -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ { -+ void *dest; ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ int elems = 4 - (h & 3); -+ if (state.nsrn + elems <= N_V_ARG_REG) -+ { -+ dest = &context->v[state.nsrn]; -+ state.nsrn += elems; -+ extend_hfa_type (dest, a, h); -+ break; -+ } -+ state.nsrn = N_V_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ else if (s > 16) -+ { -+ /* If the argument is a composite type that is larger than 16 -+ bytes, then the argument has been copied to memory, and -+ the argument is replaced by a pointer to the copy. */ -+ a = &avalue[i]; -+ t = FFI_TYPE_POINTER; -+ goto do_pointer; -+ } -+ else -+ { -+ size_t n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ /* If the argument is a composite type and the size in -+ double-words is not more than the number of available -+ X registers, then the argument is copied into -+ consecutive X registers. */ -+ dest = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ /* Otherwise, there are insufficient X registers. Further -+ X register allocations are prevented, the NSAA is -+ adjusted and the argument is copied to memory at the -+ adjusted NSAA. */ -+ state.ngrn = N_X_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ } -+ memcpy (dest, a, s); -+ } -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ default: -+ abort(); -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+#if defined (__APPLE__) -+ if (i + 1 == cif->aarch64_nfixedargs) -+ { -+ state.ngrn = N_X_ARG_REG; -+ state.nsrn = N_V_ARG_REG; -+ state.allocating_variadic = 1; -+ } -+#endif -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 + -+ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (flags & AARCH64_RET_NEED_COPY) -+ memcpy (orig_rvalue, rvalue, rtype_size); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+void -+ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef FFI_GO_CLOSURES -+void -+ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+#endif /* FFI_GO_CLOSURES */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Build a trampoline. */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+extern void ffi_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if FFI_EXEC_TRAMPOLINE_TABLE ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#include -+#include -+#include -+#include ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+extern void *ffi_closure_trampoline_table_page; ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+typedef struct ffi_trampoline_table ffi_trampoline_table; -+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+struct ffi_trampoline_table -+{ -+ /* contiguous writable and executable pages */ -+ vm_address_t config_page; -+ vm_address_t trampoline_page; ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* free list tracking */ -+ uint16_t free_count; -+ ffi_trampoline_table_entry *free_list; -+ ffi_trampoline_table_entry *free_list_pool; ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ ffi_trampoline_table *prev; -+ ffi_trampoline_table *next; -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+struct ffi_trampoline_table_entry -+{ -+ void *(*trampoline) (); -+ ffi_trampoline_table_entry *next; -+}; ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+/* The trampoline configuration is placed a page prior to the trampoline's entry point */ -+#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - PAGE_SIZE)); ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+/* Total number of trampolines that fit in one trampoline table */ -+#define FFI_TRAMPOLINE_COUNT (PAGE_SIZE / FFI_TRAMPOLINE_SIZE) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -+static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+static ffi_trampoline_table * -+ffi_trampoline_table_alloc () -+{ -+ ffi_trampoline_table *table = NULL; ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+ /* Loop until we can allocate two contiguous pages */ -+ while (table == NULL) -+ { -+ vm_address_t config_page = 0x0; -+ kern_return_t kt; ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+ /* Try to allocate two pages */ -+ kt = -+ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, -+ VM_FLAGS_ANYWHERE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 + -+ /* Now drop the second half of the allocation to make room for the trampoline table */ -+ vm_address_t trampoline_page = config_page + PAGE_SIZE; -+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Remap the trampoline table to directly follow the config page */ -+ vm_prot_t cur_prot; -+ vm_prot_t max_prot; ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ kt = -+ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, -+ mach_task_self (), -+ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, -+ &cur_prot, &max_prot, VM_INHERIT_SHARE); ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ -+ if (kt != KERN_SUCCESS) -+ { -+ /* Log unexpected failures */ -+ if (kt != KERN_NO_SPACE) -+ { -+ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); -+ continue; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* We have valid trampoline and config pages */ -+ table = calloc (1, sizeof (ffi_trampoline_table)); -+ table->free_count = FFI_TRAMPOLINE_COUNT; -+ table->config_page = config_page; -+ table->trampoline_page = trampoline_page; ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Create and initialize the free list */ -+ table->free_list_pool = -+ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ uint16_t i; -+ for (i = 0; i < table->free_count; i++) -+ { -+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; -+ entry->trampoline = -+ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (i < table->free_count - 1) -+ entry->next = &table->free_list_pool[i + 1]; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ table->free_list = table->free_list_pool; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return table; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ /* Create the closure */ -+ ffi_closure *closure = malloc (size); -+ if (closure == NULL) -+ return NULL; ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Check for an active trampoline table with available entries. */ -+ ffi_trampoline_table *table = ffi_trampoline_tables; -+ if (table == NULL || table->free_list == NULL) -+ { -+ table = ffi_trampoline_table_alloc (); -+ if (table == NULL) -+ { -+ free (closure); -+ return NULL; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ /* Insert the new table at the top of the list */ -+ table->next = ffi_trampoline_tables; -+ if (table->next != NULL) -+ table->next->prev = table; ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ ffi_trampoline_tables = table; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ /* Claim the free entry */ -+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; -+ ffi_trampoline_tables->free_list = entry->next; -+ ffi_trampoline_tables->free_count--; -+ entry->next = NULL; ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ /* Initialize the return values */ -+ *code = entry->trampoline; -+ closure->trampoline_table = table; -+ closure->trampoline_table_entry = entry; ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+ return closure; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 + -+void -+ffi_closure_free (void *ptr) -+{ -+ ffi_closure *closure = ptr; ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Fetch the table and entry references */ -+ ffi_trampoline_table *table = closure->trampoline_table; -+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Return the entry to the free list */ -+ entry->next = table->free_list; -+ table->free_list = entry; -+ table->free_count++; ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* If all trampolines within this table are free, and at least one other table exists, deallocate -+ * the table */ -+ if (table->free_count == FFI_TRAMPOLINE_COUNT -+ && ffi_trampoline_tables != table) -+ { -+ /* Remove from the list */ -+ if (table->prev != NULL) -+ table->prev->next = table->next; ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (table->next != NULL) -+ table->next->prev = table->prev; ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Deallocate pages */ -+ kern_return_t kt; -+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ kt = -+ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Deallocate free list */ -+ free (table->free_list_pool); -+ free (table); -+ } -+ else if (ffi_trampoline_tables != table) -+ { -+ /* Otherwise, bump this table to the top of the list */ -+ table->prev = NULL; -+ table->next = ffi_trampoline_tables; -+ if (ffi_trampoline_tables != NULL) -+ ffi_trampoline_tables->prev = table; ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ ffi_trampoline_tables = table; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Free the closure */ -+ free (closure); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ffi_status -+ffi_prep_closure_loc (ffi_closure *closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ void (*start)(void); -+ -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_closure_SYSV_V; -+ else -+ start = ffi_closure_SYSV; ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); -+ config[0] = closure; -+ config[1] = start; -+#else -+ static const unsigned char trampoline[16] = { -+ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ -+ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ -+ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ -+ }; -+ char *tramp = closure->tramp; -+ -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ -+ *(UINT64 *)(tramp + 16) = (uintptr_t)start; ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+ return FFI_OK; -+} ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+#ifdef FFI_GO_CLOSURES -+extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 + -+ffi_status -+ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*)) -+{ -+ void (*start)(void); ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_go_closure_SYSV_V; -+ else -+ start = ffi_go_closure_SYSV; ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ closure->tramp = start; -+ closure->cif = cif; -+ closure->fun = fun; ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ return FFI_OK; -+} -+#endif /* FFI_GO_CLOSURES */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Primary handler to setup and invoke a function within a closure. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ A closure when invoked enters via the assembler wrapper -+ ffi_closure_SYSV(). The wrapper allocates a call context on the -+ stack, saves the interesting registers (from the perspective of -+ the calling convention) into the context then passes control to -+ ffi_closure_SYSV_inner() passing the saved context and a pointer to -+ the stack at the point ffi_closure_SYSV() was invoked. ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ On the return path the assembler wrapper will reload call context -+ registers. ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ ffi_closure_SYSV_inner() marshalls the call context into ffi value -+ descriptors, invokes the wrapped function, then marshalls the return -+ value back into the call context. */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+int FFI_HIDDEN -+ffi_closure_SYSV_inner (ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ struct call_context *context, -+ void *stack, void *rvalue, void *struct_rvalue) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ int i, h, nargs, flags; -+ struct arg_state state; ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ arg_init (&state); ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ int t = ty->type; -+ size_t n, s = ty->size; ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ n = 4 - (h & 3); -+ if (state.nsrn + n <= N_V_ARG_REG) -+ { -+ void *reg = &context->v[state.nsrn]; -+ state.nsrn += n; ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Eeek! We need a pointer to the structure, however the -+ homogeneous float elements are being passed in individual -+ registers, therefore for float and double the structure -+ is not represented as a contiguous sequence of bytes in -+ our saved register context. We don't need the original -+ contents of the register storage, so we reformat the -+ structure into the same memory. */ -+ avalue[i] = compress_hfa_type (reg, reg, h); -+ } -+ else -+ { -+ state.nsrn = N_V_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ else if (s > 16) -+ { -+ /* Replace Composite type of size greater than 16 with a -+ pointer. */ -+ avalue[i] = *(void **) -+ allocate_int_to_reg_or_stack (context, &state, stack, -+ sizeof (void *)); -+ } -+ else -+ { -+ n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ avalue[i] = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ state.ngrn = N_X_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+ default: -+ abort(); -+ } -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+ flags = cif->flags; -+ if (flags & AARCH64_RET_IN_MEM) -+ rvalue = struct_rvalue; ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+ fun (cif, rvalue, avalue, user_data); ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+ return flags; -+} -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h modified/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/ffitarget.h 2015-03-12 21:33:06.000000000 +0800 -@@ -0,0 +1,73 @@ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 + -+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: ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+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. */ ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifndef LIBFFI_ASM -+#ifdef __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+typedef unsigned long long ffi_arg; -+typedef signed long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+typedef enum ffi_abi -+ { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+ } ffi_abi; -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* ---- Definitions for closures ----------------------------------------- */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define FFI_CLOSURES 1 -+#if defined (__APPLE__) -+#define FFI_TRAMPOLINE_SIZE 20 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 -+#else -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE -+#endif -+#define FFI_NATIVE_RAW_API 0 ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* ---- Internal ---- */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if defined (__APPLE__) -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs -+#else -+/* iOS reserves x18 for the system. Disable Go closures until -+ a new static chain is chosen. */ -+#define FFI_GO_CLOSURES 1 -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h ---- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-03-12 21:33:06.000000000 +0800 -@@ -0,0 +1,67 @@ -+/* -+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: ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+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. */ ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_RET_VOID 0 -+#define AARCH64_RET_INT64 1 -+#define AARCH64_RET_INT128 2 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_RET_UNUSED3 3 -+#define AARCH64_RET_UNUSED4 4 -+#define AARCH64_RET_UNUSED5 5 -+#define AARCH64_RET_UNUSED6 6 -+#define AARCH64_RET_UNUSED7 7 ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, -+ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ -+#define AARCH64_RET_S4 8 -+#define AARCH64_RET_S3 9 -+#define AARCH64_RET_S2 10 -+#define AARCH64_RET_S1 11 ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+#define AARCH64_RET_D4 12 -+#define AARCH64_RET_D3 13 -+#define AARCH64_RET_D2 14 -+#define AARCH64_RET_D1 15 ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+#define AARCH64_RET_Q4 16 -+#define AARCH64_RET_Q3 17 -+#define AARCH64_RET_Q2 18 -+#define AARCH64_RET_Q1 19 ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 + -+/* Note that each of the sub-64-bit integers gets two entries. */ -+#define AARCH64_RET_UINT8 20 -+#define AARCH64_RET_UINT16 22 -+#define AARCH64_RET_UINT32 24 ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_RET_SINT8 26 -+#define AARCH64_RET_SINT16 28 -+#define AARCH64_RET_SINT32 30 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_RET_MASK 31 ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_RET_IN_MEM (1 << 5) -+#define AARCH64_RET_NEED_COPY (1 << 6) ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define AARCH64_FLAG_ARG_V_BIT 7 -+#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define N_X_ARG_REG 8 -+#define N_V_ARG_REG 8 -+#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv.S ---- orig/Modules/_ctypes/libffi_ios/aarch64/sysv.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv.S 2015-03-12 21:33:06.000000000 +0800 -@@ -0,0 +1,434 @@ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+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: ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+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. */ ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define LIBFFI_ASM -+#include -+#include -+#include -+#include "internal.h" ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef HAVE_MACHINE_ASM_H -+#include -+#else -+#ifdef __USER_LABEL_PREFIX__ -+#define CONCAT1(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Use the right prefix for global labels. */ -+#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -+#else -+#define CNAME(x) x -+#endif -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef __AARCH64EB__ -+# define BE(X) X -+#else -+# define BE(X) 0 -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef __ILP32__ -+#define PTR_REG(n) w##n -+#else -+#define PTR_REG(n) x##n -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef __ILP32__ -+#define PTR_SIZE 4 -+#else -+#define PTR_SIZE 8 -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .text -+ .align 4 ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* ffi_call_SYSV -+ extern void ffi_call_SYSV (void *stack, void *frame, -+ void (*fn)(void), void *rvalue, -+ int flags, void *closure); ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ Therefore on entry we have: ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 + -+ x0 stack -+ x1 frame -+ x2 fn -+ x3 rvalue -+ x4 flags -+ x5 closure -+*/ ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 + -+ cfi_startproc -+CNAME(ffi_call_SYSV): -+ /* Use a stack frame allocated by our caller. */ -+ cfi_def_cfa(x1, 32); -+ stp x29, x30, [x1] -+ mov x29, x1 -+ mov sp, x0 -+ cfi_def_cfa_register(x29) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 + -+ mov x9, x2 /* save fn */ -+ mov x8, x3 /* install structure return */ -+#ifdef FFI_GO_CLOSURES -+ mov x18, x5 /* install static chain */ -+#endif -+ stp x3, x4, [x29, #16] /* save rvalue and flags */ ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Load the vector argument passing registers, if necessary. */ -+ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f -+ ldp q0, q1, [sp, #0] -+ ldp q2, q3, [sp, #32] -+ ldp q4, q5, [sp, #64] -+ ldp q6, q7, [sp, #96] -+1: -+ /* Load the core argument passing registers, including -+ the structure return pointer. */ -+ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] -+ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] -+ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] -+ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Deallocate the context, leaving the stacked arguments. */ -+ add sp, sp, #CALL_CONTEXT_SIZE ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ blr x9 /* call fn */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Partially deconstruct the stack frame. */ -+ mov sp, x29 -+ cfi_def_cfa_register (sp) -+ ldp x29, x30, [x29] ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Save the return value as directed. */ -+ adr x5, 0f -+ and w4, w4, #AARCH64_RET_MASK -+ add x5, x5, x4, lsl #3 -+ br x5 ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Note that each table entry is 2 insns, and thus 8 bytes. -+ For integer data, note that we're storing into ffi_arg -+ and therefore we want to extend to 64 bits; these types -+ have two consecutive entries allocated for them. */ -+ .align 4 -+0: ret /* VOID */ -+ nop -+1: str x0, [x3] /* INT64 */ -+ ret -+2: stp x0, x1, [x3] /* INT128 */ -+ ret -+3: brk #1000 /* UNUSED */ -+ ret -+4: brk #1000 /* UNUSED */ -+ ret -+5: brk #1000 /* UNUSED */ -+ ret -+6: brk #1000 /* UNUSED */ -+ ret -+7: brk #1000 /* UNUSED */ -+ ret -+8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ -+ ret -+9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ -+ ret -+10: stp s0, s1, [x3] /* S2 */ -+ ret -+11: str s0, [x3] /* S1 */ -+ ret -+12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ -+ ret -+13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ -+ ret -+14: stp d0, d1, [x3] /* D2 */ -+ ret -+15: str d0, [x3] /* D1 */ -+ ret -+16: str q3, [x3, #48] /* Q4 */ -+ nop -+17: str q2, [x3, #32] /* Q3 */ -+ nop -+18: stp q0, q1, [x3] /* Q2 */ -+ ret -+19: str q0, [x3] /* Q1 */ -+ ret -+20: uxtb w0, w0 /* UINT8 */ -+ str x0, [x3] -+21: ret /* reserved */ -+ nop -+22: uxth w0, w0 /* UINT16 */ -+ str x0, [x3] -+23: ret /* reserved */ -+ nop -+24: mov w0, w0 /* UINT32 */ -+ str x0, [x3] -+25: ret /* reserved */ -+ nop -+26: sxtb x0, w0 /* SINT8 */ -+ str x0, [x3] -+27: ret /* reserved */ -+ nop -+28: sxth x0, w0 /* SINT16 */ -+ str x0, [x3] -+29: ret /* reserved */ -+ nop -+30: sxtw x0, w0 /* SINT32 */ -+ str x0, [x3] -+31: ret /* reserved */ -+ nop ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ cfi_endproc ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .globl CNAME(ffi_call_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_call_SYSV), #function -+ .hidden CNAME(ffi_call_SYSV) -+ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* ffi_closure_SYSV ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ Closure invocation glue. This is the low level code invoked directly by -+ the closure trampoline to setup and call a closure. ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ On entry x17 points to a struct ffi_closure, x16 has been clobbered -+ all other registers are preserved. ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ We allocate a call context and save the argument passing registers, -+ then invoked the generic C ffi_closure_SYSV_inner() function to do all -+ the real work, on return we load the result passing registers back from -+ the call context. -+*/ ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .align 4 -+CNAME(ffi_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .globl CNAME(ffi_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV_V), #function -+ .hidden CNAME(ffi_closure_SYSV_V) -+ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .align 4 -+ cfi_startproc -+CNAME(ffi_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 + -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 + -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ -+ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ -+.Ldo_closure: -+ add x3, sp, #16 /* load context */ -+ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ -+ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ -+ mov x6, x8 /* load struct_rval */ -+ bl CNAME(ffi_closure_SYSV_inner) ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Load the return value as directed. */ -+ adr x1, 0f -+ and w0, w0, #AARCH64_RET_MASK -+ add x1, x1, x0, lsl #3 -+ add x3, sp, #16+CALL_CONTEXT_SIZE -+ br x1 ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Note that each table entry is 2 insns, and thus 8 bytes. */ -+ .align 4 -+0: b 99f /* VOID */ -+ nop -+1: ldr x0, [x3] /* INT64 */ -+ b 99f -+2: ldp x0, x1, [x3] /* INT128 */ -+ b 99f -+3: brk #1000 /* UNUSED */ -+ nop -+4: brk #1000 /* UNUSED */ -+ nop -+5: brk #1000 /* UNUSED */ -+ nop -+6: brk #1000 /* UNUSED */ -+ nop -+7: brk #1000 /* UNUSED */ -+ nop -+8: ldr s3, [x3, #12] /* S4 */ -+ nop -+9: ldr s2, [x2, #8] /* S3 */ -+ nop -+10: ldp s0, s1, [x3] /* S2 */ -+ b 99f -+11: ldr s0, [x3] /* S1 */ -+ b 99f -+12: ldr d3, [x3, #24] /* D4 */ -+ nop -+13: ldr d2, [x3, #16] /* D3 */ -+ nop -+14: ldp d0, d1, [x3] /* D2 */ -+ b 99f -+15: ldr d0, [x3] /* D1 */ -+ b 99f -+16: ldr q3, [x3, #48] /* Q4 */ -+ nop -+17: ldr q2, [x3, #32] /* Q3 */ -+ nop -+18: ldp q0, q1, [x3] /* Q2 */ -+ b 99f -+19: ldr q0, [x3] /* Q1 */ -+ b 99f -+20: ldrb w0, [x3, #BE(7)] /* UINT8 */ -+ b 99f -+21: brk #1000 /* reserved */ -+ nop -+22: ldrh w0, [x3, #BE(6)] /* UINT16 */ -+ b 99f -+23: brk #1000 /* reserved */ -+ nop -+24: ldr w0, [x3, #BE(4)] /* UINT32 */ -+ b 99f -+25: brk #1000 /* reserved */ -+ nop -+26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ -+ b 99f -+27: brk #1000 /* reserved */ -+ nop -+28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ -+ b 99f -+29: brk #1000 /* reserved */ -+ nop -+30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ -+ nop -+31: /* reserved */ -+99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS -+ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) -+ cfi_restore (x29) -+ cfi_restore (x30) -+ ret -+ cfi_endproc ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .globl CNAME(ffi_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV), #function -+ .hidden CNAME(ffi_closure_SYSV) -+ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ .align 12 -+CNAME(ffi_closure_trampoline_table_page): -+ .rept 16384 / FFI_TRAMPOLINE_SIZE -+ adr x17, -16384 -+ adr x16, -16380 -+ ldr x16, [x16] -+ ldr x17, [x17] -+ br x16 -+ .endr -+ -+ .globl CNAME(ffi_closure_trampoline_table_page) -+ #ifdef __ELF__ -+ .type CNAME(ffi_closure_trampoline_table_page), #function -+ .hidden CNAME(ffi_closure_trampoline_table_page) -+ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) -+ #endif -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#ifdef FFI_GO_CLOSURES -+ .align 4 -+CNAME(ffi_go_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .globl CNAME(ffi_go_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV_V), #function -+ .hidden CNAME(ffi_go_closure_SYSV_V) -+ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .align 4 -+ cfi_startproc -+CNAME(ffi_go_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ -+ mov x2, x18 /* load user_data */ -+ b .Ldo_closure -+ cfi_endproc ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ .globl CNAME(ffi_go_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV), #function -+ .hidden CNAME(ffi_go_closure_SYSV) -+ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) -+#endif -+#endif /* FFI_GO_CLOSURES */ ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits -+#endif ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi.c modified/Modules/_ctypes/libffi_ios/arm/ffi.c ---- orig/Modules/_ctypes/libffi_ios/arm/ffi.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffi.c 2015-03-12 21:33:17.000000000 +0800 -@@ -0,0 +1,1043 @@ -+/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 2011 Timothy Wall -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2011 Free Software Foundation -+ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ ARM Foreign Function Interface ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ 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: ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+ 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. -+ ----------------------------------------------------------------------- */ ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+#include -+#include -+#include -+#include "internal.h" ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR + -+/* Forward declares. */ -+static int vfp_type_p (const ffi_type *); -+static void layout_vfp_args (ffi_cif *); ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_3 + -+static void * -+ffi_align (ffi_type *ty, void *p) -+{ -+ /* Align if necessary */ -+ size_t alignment; -+#ifdef _WIN32_WCE -+ alignment = 4; -+#else -+ alignment = ty->alignment; -+ if (alignment < 4) -+ alignment = 4; -+#endif -+ return (void *) ALIGN (p, alignment); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+static size_t -+ffi_put_arg (ffi_type *ty, void *src, void *dst) -+{ -+ size_t z = ty->size; ++def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ switch (ty->type) -+ { -+ case FFI_TYPE_SINT8: -+ *(UINT32 *)dst = *(SINT8 *)src; -+ break; -+ case FFI_TYPE_UINT8: -+ *(UINT32 *)dst = *(UINT8 *)src; -+ break; -+ case FFI_TYPE_SINT16: -+ *(UINT32 *)dst = *(SINT16 *)src; -+ break; -+ case FFI_TYPE_UINT16: -+ *(UINT32 *)dst = *(UINT16 *)src; -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ case FFI_TYPE_FLOAT: -+ *(UINT32 *)dst = *(UINT32 *)src; -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_DOUBLE: -+ *(UINT64 *)dst = *(UINT64 *)src; -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ memcpy (dst, src, z); -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ default: -+ abort(); -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ return ALIGN (z, 4); -+} ++def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* ffi_prep_args is called once stack space has been allocated -+ for the function's arguments. ++def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ The vfp_space parameter is the load area for VFP regs, the return -+ value is cif->vfp_used (word bitset of VFP regs used for passing -+ arguments). These are only used for the VFP hard-float ABI. -+*/ -+static void -+ffi_prep_args_SYSV (ffi_cif *cif, int flags, void *rvalue, -+ void **avalue, char *argp) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n; ++def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (flags == ARM_TYPE_STRUCT) -+ { -+ *(void **) argp = rvalue; -+ argp += 4; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ argp = ffi_align (ty, argp); -+ argp += ffi_put_arg (ty, avalue[i], argp); -+ } -+} ++def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+static void -+ffi_prep_args_VFP (ffi_cif *cif, int flags, void *rvalue, -+ void **avalue, char *stack, char *vfp_space) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n, vi = 0; -+ char *argp, *regp, *eo_regp; -+ char stack_used = 0; -+ char done_with_regs = 0; ++def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* The first 4 words on the stack are used for values -+ passed in core registers. */ -+ regp = stack; -+ eo_regp = argp = regp + 16; ++def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* If the function returns an FFI_TYPE_STRUCT in memory, -+ that address is passed in r0 to the function. */ -+ if (flags == ARM_TYPE_STRUCT) -+ { -+ *(void **) regp = rvalue; -+ regp += 4; -+ } ++def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ void *a = avalue[i]; -+ int is_vfp_type = vfp_type_p (ty); ++def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* Allocated in VFP registers. */ -+ if (vi < cif->vfp_nargs && is_vfp_type) -+ { -+ char *vfp_slot = vfp_space + cif->vfp_args[vi++] * 4; -+ ffi_put_arg (ty, a, vfp_slot); -+ continue; -+ } -+ /* Try allocating in core registers. */ -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char *tregp = ffi_align (ty, regp); -+ size_t size = ty->size; -+ size = (size < 4) ? 4 : size; // pad -+ /* Check if there is space left in the aligned register -+ area to place the argument. */ -+ if (tregp + size <= eo_regp) -+ { -+ regp = tregp + ffi_put_arg (ty, a, tregp); -+ done_with_regs = (regp == argp); -+ // ensure we did not write into the stack area -+ FFI_ASSERT (regp <= argp); -+ continue; -+ } -+ /* In case there are no arguments in the stack area yet, -+ the argument is passed in the remaining core registers -+ and on the stack. */ -+ else if (!stack_used) -+ { -+ stack_used = 1; -+ done_with_regs = 1; -+ argp = tregp + ffi_put_arg (ty, a, tregp); -+ FFI_ASSERT (eo_regp < argp); -+ continue; -+ } -+ } -+ /* Base case, arguments are passed on the stack */ -+ stack_used = 1; -+ argp = ffi_align (ty, argp); -+ argp += ffi_put_arg (ty, a, argp); -+ } -+} ++def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Perform machine dependent cif processing */ -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int flags = 0, cabi = cif->abi; -+ size_t bytes = cif->bytes; ++def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* Map out the register placements of VFP register args. The VFP -+ hard-float calling conventions are slightly more sophisticated -+ than the base calling conventions, so we do it here instead of -+ in ffi_prep_args(). */ -+ if (cabi == FFI_VFP) -+ layout_vfp_args (cif); ++def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* Set the return type flag */ -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = ARM_TYPE_VOID; -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_POINTER: -+ flags = ARM_TYPE_INT; -+ break; ++def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE + -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = ARM_TYPE_INT64; -+ break; ++__MAC_OS_X_VERSION_MAX_ALLOWED = __MAC_10_10 ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0,message=_msg))) + -+ case FFI_TYPE_FLOAT: -+ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_S : ARM_TYPE_INT); -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_D : ARM_TYPE_INT64); -+ break; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0))) + -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ if (cabi == FFI_VFP) -+ { -+ int h = vfp_type_p (cif->rtype); -+ -+ flags = ARM_TYPE_VFP_N; -+ if (h == 0x100 + FFI_TYPE_FLOAT) -+ flags = ARM_TYPE_VFP_S; -+ if (h == 0x100 + FFI_TYPE_DOUBLE) -+ flags = ARM_TYPE_VFP_D; -+ if (h != 0) -+ break; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1,message=_msg))) + -+ /* A Composite Type not larger than 4 bytes is returned in r0. -+ A Composite Type larger than 4 bytes, or whose size cannot -+ be determined statically ... is stored in memory at an -+ address passed [in r0]. */ -+ if (cif->rtype->size <= 4) -+ flags = ARM_TYPE_INT; -+ else -+ { -+ flags = ARM_TYPE_STRUCT; -+ bytes += 4; -+ } -+ break; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1))) + -+ default: -+ abort(); -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2,message=_msg))) + -+ /* Round the stack up to a multiple of 8 bytes. This isn't needed -+ everywhere, but it is on some platforms, and it doesn't harm anything -+ when it isn't needed. */ -+ bytes = ALIGN (bytes, 8); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2))) + -+ /* Minimum stack space is the 4 register arguments that we pop. */ -+ if (bytes < 4*4) -+ bytes = 4*4; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3,message=_msg))) + -+ cif->bytes = bytes; -+ cif->flags = flags; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3))) + -+ return FFI_OK; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4,message=_msg))) + -+/* Perform machine dependent cif processing for variadic calls */ -+ffi_status -+ffi_prep_cif_machdep_var (ffi_cif * cif, -+ unsigned int nfixedargs, unsigned int ntotalargs) -+{ -+ /* VFP variadic calls actually use the SYSV ABI */ -+ if (cif->abi == FFI_VFP) -+ cif->abi = FFI_SYSV; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4))) + -+ return ffi_prep_cif_machdep (cif); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5,message=_msg))) + -+/* Prototypes for assembly functions, in sysv.S. */ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5))) + -+struct call_frame -+{ -+ void *fp; -+ void *lr; -+ void *rvalue; -+ int flags; -+ void *closure; -+}; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6,message=_msg))) + -+extern void ffi_call_SYSV (void *stack, struct call_frame *, -+ void (*fn) (void)) FFI_HIDDEN; -+extern void ffi_call_VFP (void *vfp_space, struct call_frame *, -+ void (*fn) (void), unsigned vfp_used) FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6))) + -+static void -+ffi_call_int (ffi_cif * cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ int flags = cif->flags; -+ ffi_type *rtype = cif->rtype; -+ size_t bytes, rsize, vfp_size; -+ char *stack, *vfp_space, *new_rvalue; -+ struct call_frame *frame; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7,message=_msg))) + -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ /* If the return value is a struct and we don't have a return -+ value address then we need to make one. Otherwise the return -+ value is in registers and we can ignore them. */ -+ if (flags == ARM_TYPE_STRUCT) -+ rsize = rtype->size; -+ else -+ flags = ARM_TYPE_VOID; -+ } -+ else if (flags == ARM_TYPE_VFP_N) -+ { -+ /* Largest case is double x 4. */ -+ rsize = 32; -+ } -+ else if (flags == ARM_TYPE_INT && rtype->type == FFI_TYPE_STRUCT) -+ rsize = 4; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7))) + -+ /* Largest case. */ -+ vfp_size = (cif->abi == FFI_VFP && cif->vfp_used ? 8*8: 0); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8,message=_msg))) + -+ bytes = cif->bytes; -+ stack = alloca (vfp_size + bytes + sizeof(struct call_frame) + rsize); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8))) + -+ vfp_space = NULL; -+ if (vfp_size) -+ { -+ vfp_space = stack; -+ stack += vfp_size; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9,message=_msg))) + -+ frame = (struct call_frame *)(stack + bytes); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9))) + -+ new_rvalue = rvalue; -+ if (rsize) -+ new_rvalue = (void *)(frame + 1); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10,message=_msg))) + -+ frame->rvalue = new_rvalue; -+ frame->flags = flags; -+ frame->closure = closure; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10))) + -+ if (vfp_space) -+ { -+ ffi_prep_args_VFP (cif, flags, new_rvalue, avalue, stack, vfp_space); -+ ffi_call_VFP (vfp_space, frame, fn, cif->vfp_used); -+ } -+ else -+ { -+ ffi_prep_args_SYSV (cif, flags, new_rvalue, avalue, stack); -+ ffi_call_SYSV (stack, frame, fn); -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0))) + -+ if (rvalue && rvalue != new_rvalue) -+ memcpy (rvalue, new_rvalue, rtype->size); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1,message=_msg))) + -+void -+ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1))) + -+void -+ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2,message=_msg))) + -+static void * -+ffi_prep_incoming_args_SYSV (ffi_cif *cif, void *rvalue, -+ char *argp, void **avalue) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))) + -+ if (cif->flags == ARM_TYPE_STRUCT) -+ { -+ rvalue = *(void **) argp; -+ argp += 4; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,message=_msg))) + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3))) + -+ argp = ffi_align (ty, argp); -+ avalue[i] = (void *) argp; -+ argp += z; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4,message=_msg))) + -+ return rvalue; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4))) + -+static void * -+ffi_prep_incoming_args_VFP (ffi_cif *cif, void *rvalue, char *stack, -+ char *vfp_space, void **avalue) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n, vi = 0; -+ char *argp, *regp, *eo_regp; -+ char done_with_regs = 0; -+ char stack_used = 0; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5,message=_msg))) + -+ regp = stack; -+ eo_regp = argp = regp + 16; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5))) + -+ if (cif->flags == ARM_TYPE_STRUCT) -+ { -+ rvalue = *(void **) regp; -+ regp += 4; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6,message=_msg))) + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ int is_vfp_type = vfp_type_p (ty); -+ size_t z = ty->size; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6))) + -+ if (vi < cif->vfp_nargs && is_vfp_type) -+ { -+ avalue[i] = vfp_space + cif->vfp_args[vi++] * 4; -+ continue; -+ } -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char *tregp = ffi_align (ty, regp); ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7,message=_msg))) + -+ z = (z < 4) ? 4 : z; // pad ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7))) + -+ /* If the arguments either fits into the registers or uses registers -+ and stack, while we haven't read other things from the stack */ -+ if (tregp + z <= eo_regp || !stack_used) -+ { -+ /* Because we're little endian, this is what it turns into. */ -+ avalue[i] = (void *) tregp; -+ regp = tregp + z; -+ -+ /* If we read past the last core register, make sure we -+ have not read from the stack before and continue -+ reading after regp. */ -+ if (regp > eo_regp) -+ { -+ FFI_ASSERT (!stack_used); -+ argp = regp; -+ } -+ if (regp >= eo_regp) -+ { -+ done_with_regs = 1; -+ stack_used = 1; -+ } -+ continue; -+ } -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8,message=_msg))) + -+ stack_used = 1; -+ argp = ffi_align (ty, argp); -+ avalue[i] = (void *) argp; -+ argp += z; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8))) + -+ return rvalue; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9,message=_msg))) + -+struct closure_frame -+{ -+ char vfp_space[8*8] __attribute__((aligned(8))); -+ char result[8*4]; -+ char argp[]; -+}; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9))) + -+int FFI_HIDDEN -+ffi_closure_inner_SYSV (ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, -+ struct closure_frame *frame) -+{ -+ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); -+ void *rvalue = ffi_prep_incoming_args_SYSV (cif, frame->result, -+ frame->argp, avalue); -+ fun (cif, rvalue, avalue, user_data); -+ return cif->flags; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10,message=_msg))) + -+int FFI_HIDDEN -+ffi_closure_inner_VFP (ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, -+ struct closure_frame *frame) -+{ -+ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); -+ void *rvalue = ffi_prep_incoming_args_VFP (cif, frame->result, frame->argp, -+ frame->vfp_space, avalue); -+ fun (cif, rvalue, avalue, user_data); -+ return cif->flags; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10))) + -+void ffi_closure_SYSV (void) FFI_HIDDEN; -+void ffi_closure_VFP (void) FFI_HIDDEN; -+void ffi_go_closure_SYSV (void) FFI_HIDDEN; -+void ffi_go_closure_VFP (void) FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1))) + -+#if FFI_EXEC_TRAMPOLINE_TABLE ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2,message=_msg))) + -+#include -+#include -+#include -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2))) + -+extern void *ffi_closure_trampoline_table_page; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3,message=_msg))) + -+typedef struct ffi_trampoline_table ffi_trampoline_table; -+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3))) + -+struct ffi_trampoline_table -+{ -+ /* contiguous writable and executable pages */ -+ vm_address_t config_page; -+ vm_address_t trampoline_page; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,message=_msg))) + -+ /* free list tracking */ -+ uint16_t free_count; -+ ffi_trampoline_table_entry *free_list; -+ ffi_trampoline_table_entry *free_list_pool; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4))) + -+ ffi_trampoline_table *prev; -+ ffi_trampoline_table *next; -+}; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5,message=_msg))) + -+struct ffi_trampoline_table_entry -+{ -+ void *(*trampoline) (); -+ ffi_trampoline_table_entry *next; -+}; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5))) + -+/* Override the standard architecture trampoline size */ -+// XXX TODO - Fix -+#undef FFI_TRAMPOLINE_SIZE -+#define FFI_TRAMPOLINE_SIZE 12 ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6,message=_msg))) + -+/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ -+#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6))) + -+/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ -+#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7,message=_msg))) + -+/* Total number of trampolines that fit in one trampoline table */ -+#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7))) + -+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -+static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8,message=_msg))) + -+static ffi_trampoline_table * -+ffi_trampoline_table_alloc () -+{ -+ ffi_trampoline_table *table = NULL; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8))) + -+ /* Loop until we can allocate two contiguous pages */ -+ while (table == NULL) -+ { -+ vm_address_t config_page = 0x0; -+ kern_return_t kt; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9,message=_msg))) + -+ /* Try to allocate two pages */ -+ kt = -+ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, -+ VM_FLAGS_ANYWHERE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9))) + -+ /* Now drop the second half of the allocation to make room for the trampoline table */ -+ vm_address_t trampoline_page = config_page + PAGE_SIZE; -+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10,message=_msg))) + -+ /* Remap the trampoline table to directly follow the config page */ -+ vm_prot_t cur_prot; -+ vm_prot_t max_prot; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10))) + -+ kt = -+ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, -+ mach_task_self (), -+ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, -+ &cur_prot, &max_prot, VM_INHERIT_SHARE); ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2))) + -+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ -+ if (kt != KERN_SUCCESS) -+ { -+ /* Log unexpected failures */ -+ if (kt != KERN_NO_SPACE) -+ { -+ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3,message=_msg))) + -+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); -+ continue; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3))) + -+ /* We have valid trampoline and config pages */ -+ table = calloc (1, sizeof (ffi_trampoline_table)); -+ table->free_count = FFI_TRAMPOLINE_COUNT; -+ table->config_page = config_page; -+ table->trampoline_page = trampoline_page; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4,message=_msg))) + -+ /* Create and initialize the free list */ -+ table->free_list_pool = -+ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4))) + -+ uint16_t i; -+ for (i = 0; i < table->free_count; i++) -+ { -+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; -+ entry->trampoline = -+ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5,message=_msg))) + -+ if (i < table->free_count - 1) -+ entry->next = &table->free_list_pool[i + 1]; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5))) + -+ table->free_list = table->free_list_pool; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6,message=_msg))) + -+ return table; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6))) + -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ /* Create the closure */ -+ ffi_closure *closure = malloc (size); -+ if (closure == NULL) -+ return NULL; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7,message=_msg))) + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7))) + -+ /* Check for an active trampoline table with available entries. */ -+ ffi_trampoline_table *table = ffi_trampoline_tables; -+ if (table == NULL || table->free_list == NULL) -+ { -+ table = ffi_trampoline_table_alloc (); -+ if (table == NULL) -+ { -+ free (closure); -+ return NULL; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8,message=_msg))) + -+ /* Insert the new table at the top of the list */ -+ table->next = ffi_trampoline_tables; -+ if (table->next != NULL) -+ table->next->prev = table; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8))) + -+ ffi_trampoline_tables = table; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9,message=_msg))) + -+ /* Claim the free entry */ -+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; -+ ffi_trampoline_tables->free_list = entry->next; -+ ffi_trampoline_tables->free_count--; -+ entry->next = NULL; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9))) + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10,message=_msg))) + -+ /* Initialize the return values */ -+ *code = entry->trampoline; -+ closure->trampoline_table = table; -+ closure->trampoline_table_entry = entry; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10))) + -+ return closure; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3))) + -+void -+ffi_closure_free (void *ptr) -+{ -+ ffi_closure *closure = ptr; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4,message=_msg))) + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4))) + -+ /* Fetch the table and entry references */ -+ ffi_trampoline_table *table = closure->trampoline_table; -+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5,message=_msg))) + -+ /* Return the entry to the free list */ -+ entry->next = table->free_list; -+ table->free_list = entry; -+ table->free_count++; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))) + -+ /* If all trampolines within this table are free, and at least one other table exists, deallocate -+ * the table */ -+ if (table->free_count == FFI_TRAMPOLINE_COUNT -+ && ffi_trampoline_tables != table) -+ { -+ /* Remove from the list */ -+ if (table->prev != NULL) -+ table->prev->next = table->next; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,message=_msg))) + -+ if (table->next != NULL) -+ table->next->prev = table->prev; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6))) + -+ /* Deallocate pages */ -+ kern_return_t kt; -+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7,message=_msg))) + -+ kt = -+ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7))) + -+ /* Deallocate free list */ -+ free (table->free_list_pool); -+ free (table); -+ } -+ else if (ffi_trampoline_tables != table) -+ { -+ /* Otherwise, bump this table to the top of the list */ -+ table->prev = NULL; -+ table->next = ffi_trampoline_tables; -+ if (ffi_trampoline_tables != NULL) -+ ffi_trampoline_tables->prev = table; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8,message=_msg))) + -+ ffi_trampoline_tables = table; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8))) + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9,message=_msg))) + -+ /* Free the closure */ -+ free (closure); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9))) + -+#else ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10,message=_msg))) + -+extern unsigned int ffi_arm_trampoline[2] FFI_HIDDEN; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10))) + -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4))) + -+/* the cif must already be prep'ed */ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5,message=_msg))) + -+ffi_status -+ffi_prep_closure_loc (ffi_closure * closure, -+ ffi_cif * cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, void *codeloc) -+{ -+ void (*closure_func) (void) = ffi_closure_SYSV; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5))) + -+ if (cif->abi == FFI_VFP) -+ { -+ /* We only need take the vfp path if there are vfp arguments. */ -+ if (cif->vfp_used) -+ closure_func = ffi_closure_VFP; -+ } -+ else if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6,message=_msg))) + -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); -+ config[0] = closure; -+ config[1] = closure_func; -+#else -+ memcpy (closure->tramp, ffi_arm_trampoline, 8); -+ __clear_cache(closure->tramp, closure->tramp + 8); /* clear data map */ -+ __clear_cache(codeloc, codeloc + 8); /* clear insn map */ -+ *(void (**)(void))(closure->tramp + 8) = closure_func; -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7,message=_msg))) + -+ return FFI_OK; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7))) + -+ffi_status -+ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *)) -+{ -+ void (*closure_func) (void) = ffi_go_closure_SYSV; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8,message=_msg))) + -+ if (cif->abi == FFI_VFP) -+ { -+ /* We only need take the vfp path if there are vfp arguments. */ -+ if (cif->vfp_used) -+ closure_func = ffi_go_closure_VFP; -+ } -+ else if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8))) + -+ closure->tramp = closure_func; -+ closure->cif = cif; -+ closure->fun = fun; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9,message=_msg))) + -+ return FFI_OK; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9))) + -+/* Below are routines for VFP hard-float support. */ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10,message=_msg))) + -+/* A subroutine of vfp_type_p. Given a structure type, return the type code -+ of the first non-structure element. Recurse for structure elements. -+ Return -1 if the structure is in fact empty, i.e. no nested elements. */ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10))) + -+static int -+is_hfa0 (const ffi_type *ty) -+{ -+ ffi_type **elements = ty->elements; -+ int i, ret = -1; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5))) + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ ret = elements[i]->type; -+ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) -+ { -+ ret = is_hfa0 (elements[i]); -+ if (ret < 0) -+ continue; -+ } -+ break; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6,message=_msg))) + -+ return ret; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6))) + -+/* A subroutine of vfp_type_p. Given a structure type, return true if all -+ of the non-structure elements are the same as CANDIDATE. */ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7,message=_msg))) + -+static int -+is_hfa1 (const ffi_type *ty, int candidate) -+{ -+ ffi_type **elements = ty->elements; -+ int i; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7))) + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8,message=_msg))) + -+ return 1; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8))) + -+/* Determine if TY is an homogenous floating point aggregate (HFA). -+ That is, a structure consisting of 1 to 4 members of all the same type, -+ where that type is a floating point scalar. ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9,message=_msg))) + -+ Returns non-zero iff TY is an HFA. The result is an encoded value where -+ bits 0-7 contain the type code, and bits 8-10 contain the element count. */ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9))) + -+static int -+vfp_type_p (const ffi_type *ty) -+{ -+ ffi_type **elements; -+ int candidate, i; -+ size_t size, ele_count; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10,message=_msg))) + -+ /* Quickest tests first. */ -+ candidate = ty->type; -+ switch (ty->type) -+ { -+ default: -+ return 0; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ ele_count = 1; -+ goto done; -+ case FFI_TYPE_COMPLEX: -+ candidate = ty->elements[0]->type; -+ if (candidate != FFI_TYPE_FLOAT && candidate != FFI_TYPE_DOUBLE) -+ return 0; -+ ele_count = 2; -+ goto done; -+ case FFI_TYPE_STRUCT: -+ break; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10))) + -+ /* No HFA types are smaller than 4 bytes, or larger than 32 bytes. */ -+ size = ty->size; -+ if (size < 4 || size > 32) -+ return 0; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6))) + -+ /* Find the type of the first non-structure member. */ -+ elements = ty->elements; -+ candidate = elements[0]->type; -+ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) -+ { -+ for (i = 0; ; ++i) -+ { -+ candidate = is_hfa0 (elements[i]); -+ if (candidate >= 0) -+ break; -+ } -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7,message=_msg))) + -+ /* If the first member is not a floating point type, it's not an HFA. -+ Also quickly re-check the size of the structure. */ -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ ele_count = size / sizeof(float); -+ if (size != ele_count * sizeof(float)) -+ return 0; -+ break; -+ case FFI_TYPE_DOUBLE: -+ ele_count = size / sizeof(double); -+ if (size != ele_count * sizeof(double)) -+ return 0; -+ break; -+ default: -+ return 0; -+ } -+ if (ele_count > 4) -+ return 0; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7))) + -+ /* Finally, make sure that all scalar elements are the same type. */ -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8,message=_msg))) + -+ /* All tests succeeded. Encode the result. */ -+ done: -+ return (ele_count << 8) | candidate; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))) + -+static int -+place_vfp_arg (ffi_cif *cif, int h) -+{ -+ unsigned short reg = cif->vfp_reg_free; -+ int align = 1, nregs = h >> 8; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9,message=_msg))) + -+ if ((h & 0xff) == FFI_TYPE_DOUBLE) -+ align = 2, nregs *= 2; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9))) + -+ /* Align register number. */ -+ if ((reg & 1) && align == 2) -+ reg++; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10,message=_msg))) + -+ while (reg + nregs <= 16) -+ { -+ int s, new_used = 0; -+ for (s = reg; s < reg + nregs; s++) -+ { -+ new_used |= (1 << s); -+ if (cif->vfp_used & (1 << s)) -+ { -+ reg += align; -+ goto next_reg; -+ } -+ } -+ /* Found regs to allocate. */ -+ cif->vfp_used |= new_used; -+ cif->vfp_args[cif->vfp_nargs++] = reg; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10))) + -+ /* Update vfp_reg_free. */ -+ if (cif->vfp_used & (1 << cif->vfp_reg_free)) -+ { -+ reg += nregs; -+ while (cif->vfp_used & (1 << reg)) -+ reg += 1; -+ cif->vfp_reg_free = reg; -+ } -+ return 0; -+ next_reg:; -+ } -+ // done, mark all regs as used -+ cif->vfp_reg_free = 16; -+ cif->vfp_used = 0xFFFF; -+ return 1; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7))) + -+static void -+layout_vfp_args (ffi_cif * cif) -+{ -+ int i; -+ /* Init VFP fields */ -+ cif->vfp_used = 0; -+ cif->vfp_nargs = 0; -+ cif->vfp_reg_free = 0; -+ memset (cif->vfp_args, -1, 16); /* Init to -1. */ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8,message=_msg))) + -+ for (i = 0; i < cif->nargs; i++) -+ { -+ int h = vfp_type_p (cif->arg_types[i]); -+ if (h && place_vfp_arg (cif, h) == 1) -+ break; -+ } -+} -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffitarget.h modified/Modules/_ctypes/libffi_ios/arm/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/arm/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffitarget.h 2015-03-12 21:33:17.000000000 +0800 -@@ -0,0 +1,69 @@ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012 Anthony Green -+ Copyright (c) 2010 CodeSourcery -+ Copyright (c) 1996-2003 Red Hat, Inc. ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8))) + -+ Target configuration macros for ARM. ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9,message=_msg))) + -+ 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: ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9))) + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10,message=_msg))) + -+ 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. ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10))) + -+ ----------------------------------------------------------------------- */ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8))) + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9,message=_msg))) + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9))) + -+#ifndef LIBFFI_ASM -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10,message=_msg))) + -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_VFP, -+ FFI_LAST_ABI, -+#ifdef __ARM_PCS_VFP -+ FFI_DEFAULT_ABI = FFI_VFP, -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV, -+#endif -+} ffi_abi; -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10))) + -+#define FFI_EXTRA_CIF_FIELDS \ -+ int vfp_used; \ -+ unsigned short vfp_reg_free, vfp_nargs; \ -+ signed char vfp_args[16] \ ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9))) + -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10,message=_msg))) + -+/* ---- Definitions for closures ----------------------------------------- */ ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10))) + -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+#define FFI_TRAMPOLINE_SIZE 12 -+#define FFI_NATIVE_RAW_API 0 ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10))) + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h ---- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-03-12 21:33:17.000000000 +0800 -@@ -0,0 +1,7 @@ -+#define ARM_TYPE_VFP_S 0 -+#define ARM_TYPE_VFP_D 1 -+#define ARM_TYPE_VFP_N 2 -+#define ARM_TYPE_INT64 3 -+#define ARM_TYPE_INT 4 -+#define ARM_TYPE_VOID 5 -+#define ARM_TYPE_STRUCT 6 -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv.S modified/Modules/_ctypes/libffi_ios/arm/sysv.S ---- orig/Modules/_ctypes/libffi_ios/arm/sysv.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/sysv.S 2015-03-12 21:33:17.000000000 +0800 -@@ -0,0 +1,335 @@ -+/* ----------------------------------------------------------------------- -+ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,unavailable))) + -+ ARM Foreign Function Interface ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ 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: ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ 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. -+ ----------------------------------------------------------------------- */ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#define LIBFFI_ASM -+#include -+#include -+#include -+#include "internal.h" ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* GCC 4.8 provides __ARM_ARCH; construct it otherwise. */ -+#ifndef __ARM_ARCH -+# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ -+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ -+ || defined(__ARM_ARCH_7EM__) -+# define __ARM_ARCH 7 -+# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ -+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ -+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ -+ || defined(__ARM_ARCH_6M__) -+# define __ARM_ARCH 6 -+# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ -+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ -+ || defined(__ARM_ARCH_5TEJ__) -+# define __ARM_ARCH 5 -+# else -+# define __ARM_ARCH 4 -+# endif -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Conditionally compile unwinder directives. */ -+.macro UNWIND text:vararg -+#ifdef __ARM_EABI__ -+ \text -+#endif -+.endm -+#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__ARM_EABI__) -+ .cfi_sections .debug_frame -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#define CONCAT(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+#ifdef __USER_LABEL_PREFIX__ -+# define CNAME(X) CONCAT (__USER_LABEL_PREFIX__, X) -+#else -+# define CNAME(X) X -+#endif -+#ifdef __ELF__ -+# define SIZE(X) .size CNAME(X), . - CNAME(X) -+# define TYPE(X, Y) .type CNAME(X), Y -+#else -+# define SIZE(X) -+# define TYPE(X, Y) -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#define ARM_FUNC_START(name, gl) \ -+ .align 3; \ -+ .ifne gl; .globl CNAME(name); FFI_HIDDEN(CNAME(name)); .endif; \ -+ TYPE(name, %function); \ -+ CNAME(name): ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+#define ARM_FUNC_END(name) \ -+ SIZE(name) ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Aid in defining a jump table with 8 bytes between entries. */ -+.macro E index -+ .if . - 0b - 8*\index -+ .error "type table out of sync" -+ .endif -+.endm ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ .text -+ .syntax unified -+ .arm ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* We require interworking on LDM, which implies ARMv5T, -+ which implies the existance of BLX. */ -+ .arch armv5t ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ /* Note that we use STC and LDC to encode VFP instructions, -+ so that we do not need ".fpu vfp", nor get that added to -+ the object file attributes. These will not be executed -+ unless the FFI_VFP abi is used. */ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ @ r0: stack -+ @ r1: frame -+ @ r2: fn -+ @ r3: vfp_used ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+ARM_FUNC_START(ffi_call_VFP, 1) -+ UNWIND .fnstart -+ cfi_startproc ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+ cmp r3, #3 @ load only d0 if possible -+ ldcle p11, cr0, [r0] @ vldrle d0, [sp] -+ ldcgt p11, cr0, [r0], {16} @ vldmgt sp, {d0-d7} -+ add r0, r0, #64 @ discard the vfp register args -+ /* FALLTHRU */ -+ARM_FUNC_END(ffi_call_VFP) -+ -+ARM_FUNC_START(ffi_call_SYSV, 1) -+ stm r1, {fp, lr} -+ mov fp, r1 -+ -+ @ This is a bit of a lie wrt the origin of the unwind info, but -+ @ now we've got the usual frame pointer and two saved registers. -+ UNWIND .save {fp,lr} -+ UNWIND .setfp fp, sp -+ cfi_def_cfa(fp, 8) -+ cfi_rel_offset(fp, 0) -+ cfi_rel_offset(lr, 4) -+ -+ mov sp, r0 @ install the stack pointer -+ mov lr, r2 @ move the fn pointer out of the way -+ ldr ip, [fp, #16] @ install the static chain -+ ldmia sp!, {r0-r3} @ move first 4 parameters in registers. -+ blx lr @ call fn ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ @ Load r2 with the pointer to storage for the return value -+ @ Load r3 with the return type code -+ ldr r2, [fp, #8] -+ ldr r3, [fp, #12] ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ @ Deallocate the stack with the arguments. -+ mov sp, fp -+ cfi_def_cfa_register(sp) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ @ Store values stored in registers. -+ .align 3 -+ add pc, pc, r3, lsl #3 -+ nop -+0: -+E ARM_TYPE_VFP_S -+ stc p10, cr0, [r2] @ vstr s0, [r2] -+ pop {fp,pc} -+E ARM_TYPE_VFP_D -+ stc p11, cr0, [r2] @ vstr d0, [r2] -+ pop {fp,pc} -+E ARM_TYPE_VFP_N -+ stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3} -+ pop {fp,pc} -+E ARM_TYPE_INT64 -+ str r1, [r2, #4] -+ nop -+E ARM_TYPE_INT -+ str r0, [r2] -+ pop {fp,pc} -+E ARM_TYPE_VOID -+ pop {fp,pc} -+ nop -+E ARM_TYPE_STRUCT -+ pop {fp,pc} ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ cfi_endproc -+ UNWIND .fnend -+ARM_FUNC_END(ffi_call_SYSV) ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* -+ int ffi_closure_inner_* (cif, fun, user_data, frame) -+*/ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ARM_FUNC_START(ffi_go_closure_SYSV, 1) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #4] @ load cif -+ ldr r1, [ip, #8] @ load fun -+ mov r2, ip @ load user_data -+ b 0f -+ cfi_endproc -+ARM_FUNC_END(ffi_go_closure_SYSV) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+ARM_FUNC_START(ffi_closure_SYSV, 1) -+ UNWIND .fnstart -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #FFI_TRAMPOLINE_SIZE] @ load cif -+ ldr r1, [ip, #FFI_TRAMPOLINE_SIZE+4] @ load fun -+ ldr r2, [ip, #FFI_TRAMPOLINE_SIZE+8] @ load user_data -+0: -+ add ip, sp, #16 @ compute entry sp -+ sub sp, sp, #64+32 @ allocate frame -+ cfi_adjust_cfa_offset(64+32) -+ stmdb sp!, {ip,lr} -+ -+ /* Remember that EABI unwind info only applies at call sites. -+ We need do nothing except note the save of the stack pointer -+ and the link registers. */ -+ UNWIND .save {sp,lr} -+ cfi_adjust_cfa_offset(8) -+ cfi_rel_offset(lr, 4) -+ -+ add r3, sp, #8 @ load frame -+ bl CNAME(ffi_closure_inner_SYSV) -+ -+ @ Load values returned in registers. -+ add r2, sp, #8+64 @ load result -+ adr r3, CNAME(ffi_closure_ret) -+ add pc, r3, r0, lsl #3 -+ cfi_endproc -+ UNWIND .fnend -+ARM_FUNC_END(ffi_closure_SYSV) ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+ARM_FUNC_START(ffi_go_closure_VFP, 1) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #4] @ load cif -+ ldr r1, [ip, #8] @ load fun -+ mov r2, ip @ load user_data -+ b 0f -+ cfi_endproc -+ARM_FUNC_END(ffi_go_closure_VFP) ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ARM_FUNC_START(ffi_closure_VFP, 1) -+ UNWIND .fnstart -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #FFI_TRAMPOLINE_SIZE] @ load cif -+ ldr r1, [ip, #FFI_TRAMPOLINE_SIZE+4] @ load fun -+ ldr r2, [ip, #FFI_TRAMPOLINE_SIZE+8] @ load user_data -+0: -+ add ip, sp, #16 -+ sub sp, sp, #64+32 @ allocate frame -+ cfi_adjust_cfa_offset(64+32) -+ stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7} -+ stmdb sp!, {ip,lr} -+ -+ /* See above. */ -+ UNWIND .save {sp,lr} -+ cfi_adjust_cfa_offset(8) -+ cfi_rel_offset(lr, 4) -+ -+ add r3, sp, #8 @ load frame -+ bl CNAME(ffi_closure_inner_VFP) -+ -+ @ Load values returned in registers. -+ add r2, sp, #8+64 @ load result -+ adr r3, CNAME(ffi_closure_ret) -+ add pc, r3, r0, lsl #3 -+ cfi_endproc -+ UNWIND .fnend -+ARM_FUNC_END(ffi_closure_VFP) ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+/* Load values returned in registers for both closure entry points. -+ Note that we use LDM with SP in the register set. This is deprecated -+ by ARM, but not yet unpredictable. */ ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ARM_FUNC_START(ffi_closure_ret, 0) -+ cfi_startproc -+ cfi_rel_offset(sp, 0) -+ cfi_rel_offset(lr, 4) -+0: -+E ARM_TYPE_VFP_S -+ ldc p10, cr0, [r2] @ vldr s0, [r2] -+ ldm sp, {sp,pc} -+E ARM_TYPE_VFP_D -+ ldc p11, cr0, [r2] @ vldr d0, [r2] -+ ldm sp, {sp,pc} -+E ARM_TYPE_VFP_N -+ ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3} -+ ldm sp, {sp,pc} -+E ARM_TYPE_INT64 -+ ldr r1, [r2, #4] -+ nop -+E ARM_TYPE_INT -+ ldr r0, [r2] -+ ldm sp, {sp,pc} -+E ARM_TYPE_VOID -+ ldm sp, {sp,pc} -+ nop -+E ARM_TYPE_STRUCT -+ ldm sp, {sp,pc} -+ cfi_endproc -+ARM_FUNC_END(ffi_closure_ret) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if FFI_EXEC_TRAMPOLINE_TABLE ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* ??? The iOS support should be updated. The first insn used to -+ be STMFD, but that's been moved into ffi_closure_SYSV. If the -+ writable page is put after this one we can make use of the -+ pc+8 feature of the architecture. We can also reduce the size -+ of the thunk to 8 and pack more of these into the page. ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ In the meantime, simply replace the STMFD with a NOP so as to -+ keep all the magic numbers the same within ffi.c. */ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ .align 12 -+ARM_FUNC_START(ffi_closure_trampoline_table_page) -+.rept 4096 / 12 -+ nop -+ ldr ip, [pc, #-4092] -+ ldr pc, [pc, #-4092] -+.endr ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#else ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ARM_FUNC_START(ffi_arm_trampoline, 1) -+0: adr ip, 0b -+ ldr pc, 1f -+1: .long 0 -+ARM_FUNC_END(ffi_arm_trampoline) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c ---- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,688 @@ -+/* ----------------------------------------------------------------------- -+ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. -+ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ Code to allocate and deallocate memory for closures. ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+ 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: ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ 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. -+ ----------------------------------------------------------------------- */ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if defined __linux__ && !defined _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#include -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -+# if __gnu_linux__ && !defined(__ANDROID__) -+/* This macro indicates it may be forbidden to map anonymous memory -+ with both write and execute permission. Code compiled when this -+ option is defined will attempt to map such pages once, but if it -+ fails, it falls back to creating a temporary file in a writable and -+ executable filesystem and mapping pages from it into separate -+ locations in the virtual memory space, one location writable and -+ another executable. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# define HAVE_MNTENT 1 -+# endif -+# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -+/* Windows systems may have Data Execution Protection (DEP) enabled, -+ which requires the use of VirtualMalloc/VirtualFree to alloc/free -+ executable memory. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# endif -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -+# ifdef __linux__ -+/* When defined to 1 check for SELinux and if SELinux is active, -+ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that -+ might cause audit messages. */ -+# define FFI_MMAP_EXEC_SELINUX 1 -+# endif -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if FFI_CLOSURES ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+# if FFI_EXEC_TRAMPOLINE_TABLE ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+#define USE_LOCKS 1 -+#define USE_DL_PREFIX 1 -+#ifdef __GNUC__ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 1 -+#endif -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+/* We need to use mmap, not sbrk. */ -+#define HAVE_MORECORE 0 ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -+#define HAVE_MREMAP 0 ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+/* We have no use for this, so save some code and data. */ -+#define NO_MALLINFO 1 ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+/* We need all allocations to be in regular segments, otherwise we -+ lose track of the corresponding code address. */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Don't allocate more than a page unless needed. */ -+#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if FFI_CLOSURE_TEST -+/* Don't release single pages, to avoid a worst-case scenario of -+ continuously allocating and releasing single pages, but release -+ pairs of pages, which should do just as well given that allocations -+ are likely to be small. */ -+#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#include -+#include -+#include -+#include -+#ifndef _MSC_VER -+#include -+#endif -+#include -+#include -+#if !defined(X86_WIN32) && !defined(X86_WIN64) -+#ifdef HAVE_MNTENT -+#include -+#endif /* HAVE_MNTENT */ -+#include -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* We don't want sys/mman.h to be included after we redefine mmap and -+ dlmunmap. */ -+#include -+#define LACKS_SYS_MMAN_H 1 ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if FFI_MMAP_EXEC_SELINUX -+#include -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+static int selinux_enabled = -1; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+static int -+selinux_enabled_check (void) -+{ -+ struct statfs sfs; -+ FILE *f; -+ char *buf = NULL; -+ size_t len = 0; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (statfs ("/selinux", &sfs) >= 0 -+ && (unsigned int) sfs.f_type == 0xf97cff8cU) -+ return 1; -+ f = fopen ("/proc/mounts", "r"); -+ if (f == NULL) -+ return 0; -+ while (getline (&buf, &len, f) >= 0) -+ { -+ char *p = strchr (buf, ' '); -+ if (p == NULL) -+ break; -+ p = strchr (p + 1, ' '); -+ if (p == NULL) -+ break; -+ if (strncmp (p + 1, "selinuxfs ", 10) == 0) -+ { -+ free (buf); -+ fclose (f); -+ return 1; -+ } -+ } -+ free (buf); -+ fclose (f); -+ return 0; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ -+ : (selinux_enabled = selinux_enabled_check ())) ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#else ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+#define is_selinux_enabled() 0 ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+#endif /* !FFI_MMAP_EXEC_SELINUX */ ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ -+#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+static int emutramp_enabled = -1; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+static int -+emutramp_enabled_check (void) -+{ -+ char *buf = NULL; -+ size_t len = 0; -+ FILE *f; -+ int ret; -+ f = fopen ("/proc/self/status", "r"); -+ if (f == NULL) -+ return 0; -+ ret = 0; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 + -+ while (getline (&buf, &len, f) != -1) -+ if (!strncmp (buf, "PaX:", 4)) -+ { -+ char emutramp; -+ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) -+ ret = (emutramp == 'E'); -+ break; -+ } -+ free (buf); -+ fclose (f); -+ return ret; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ -+ : (emutramp_enabled = emutramp_enabled_check ())) -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#elif defined (__CYGWIN__) || defined(__INTERIX) ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#include ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Cygwin is Linux-like, but not quite that Linux-like. */ -+#define is_selinux_enabled() 0 ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#define is_emutramp_enabled() 0 -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Declare all functions defined in dlmalloc.c as static. */ -+static void *dlmalloc(size_t); -+static void dlfree(void*); -+static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -+static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -+static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -+static void *dlvalloc(size_t) MAYBE_UNUSED; -+static int dlmallopt(int, int) MAYBE_UNUSED; -+static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -+static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -+static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -+static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -+static void *dlpvalloc(size_t) MAYBE_UNUSED; -+static int dlmalloc_trim(size_t) MAYBE_UNUSED; -+static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -+static void dlmalloc_stats(void) MAYBE_UNUSED; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+/* Use these for mmap and munmap within dlmalloc.c. */ -+static void *dlmmap(void *, size_t, int, int, int, off_t); -+static int dlmunmap(void *, size_t); -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#define mmap dlmmap -+#define munmap dlmunmap ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+#include "dlmalloc.c" ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#undef mmap -+#undef munmap ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+/* A mutex used to synchronize access to *exec* variables in this file. */ -+static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+/* A file descriptor of a temporary file from which we'll map -+ executable pages. */ -+static int execfd = -1; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+/* The amount of space already allocated from the temporary file. */ -+static size_t execsize = 0; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+/* Open a temporary file name, and immediately unlink it. */ -+static int -+open_temp_exec_file_name (char *name, int flags) -+{ -+ int fd; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 + -+#ifdef HAVE_MKOSTEMP -+ fd = mkostemp (name, flags); -+#else -+ fd = mkstemp (name); -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 + -+ if (fd != -1) -+ unlink (name); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ return fd; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Open a temporary file in the named directory. */ -+static int -+open_temp_exec_file_dir (const char *dir) -+{ -+ static const char suffix[] = "/ffiXXXXXX"; -+ int lendir, flags; -+ char *tempname; -+#ifdef O_TMPFILE -+ int fd; -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#ifdef O_CLOEXEC -+ flags = O_CLOEXEC; -+#else -+ flags = 0; -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+#ifdef O_TMPFILE -+ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); -+ /* If the running system does not support the O_TMPFILE flag then retry without it. */ -+ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { -+ return fd; -+ } else { -+ errno = 0; -+ } -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ lendir = strlen (dir); -+ tempname = __builtin_alloca (lendir + sizeof (suffix)); ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (!tempname) -+ return -1; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ memcpy (tempname, dir, lendir); -+ memcpy (tempname + lendir, suffix, sizeof (suffix)); ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ return open_temp_exec_file_name (tempname, flags); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Open a temporary file in the directory in the named environment -+ variable. */ -+static int -+open_temp_exec_file_env (const char *envvar) -+{ -+ const char *value = getenv (envvar); ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (!value) -+ return -1; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ return open_temp_exec_file_dir (value); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#ifdef HAVE_MNTENT -+/* Open a temporary file in an executable and writable mount point -+ listed in the mounts file. Subsequent calls with the same mounts -+ keep searching for mount points in the same file. Providing NULL -+ as the mounts file closes the file. */ -+static int -+open_temp_exec_file_mnt (const char *mounts) -+{ -+ static const char *last_mounts; -+ static FILE *last_mntent; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+ if (mounts != last_mounts) -+ { -+ if (last_mntent) -+ endmntent (last_mntent); ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ last_mounts = mounts; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+ if (mounts) -+ last_mntent = setmntent (mounts, "r"); -+ else -+ last_mntent = NULL; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+ if (!last_mntent) -+ return -1; ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+ for (;;) -+ { -+ int fd; -+ struct mntent mnt; -+ char buf[MAXPATHLEN * 3]; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 + -+ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) -+ return -1; ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 + -+ if (hasmntopt (&mnt, "ro") -+ || hasmntopt (&mnt, "noexec") -+ || access (mnt.mnt_dir, W_OK)) -+ continue; ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 + -+ fd = open_temp_exec_file_dir (mnt.mnt_dir); ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (fd != -1) -+ return fd; -+ } -+} -+#endif /* HAVE_MNTENT */ ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Instructions to look for a location to hold a temporary file that -+ can be mapped in for execution. */ -+static struct -+{ -+ int (*func)(const char *); -+ const char *arg; -+ int repeat; -+} open_temp_exec_file_opts[] = { -+ { open_temp_exec_file_env, "TMPDIR", 0 }, -+ { open_temp_exec_file_dir, "/tmp", 0 }, -+ { open_temp_exec_file_dir, "/var/tmp", 0 }, -+ { open_temp_exec_file_dir, "/dev/shm", 0 }, -+ { open_temp_exec_file_env, "HOME", 0 }, -+#ifdef HAVE_MNTENT -+ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, -+ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -+#endif /* HAVE_MNTENT */ -+}; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Current index into open_temp_exec_file_opts. */ -+static int open_temp_exec_file_opts_idx = 0; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Reset a current multi-call func, then advances to the next entry. -+ If we're at the last, go back to the first and return nonzero, -+ otherwise return zero. */ -+static int -+open_temp_exec_file_opts_next (void) -+{ -+ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ open_temp_exec_file_opts_idx++; -+ if (open_temp_exec_file_opts_idx -+ == (sizeof (open_temp_exec_file_opts) -+ / sizeof (*open_temp_exec_file_opts))) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ return 1; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ return 0; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Return a file descriptor of a temporary zero-sized file in a -+ writable and executable filesystem. */ -+static int -+open_temp_exec_file (void) -+{ -+ int fd; ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ do -+ { -+ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func -+ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat -+ || fd == -1) -+ { -+ if (open_temp_exec_file_opts_next ()) -+ break; -+ } -+ } -+ while (fd == -1); ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+ return fd; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) + -+/* Map in a chunk of memory from the temporary exec file into separate -+ locations in the virtual memory address space, one writable and one -+ executable. Returns the address of the writable portion, after -+ storing an offset to the corresponding executable portion at the -+ last word of the requested chunk. */ -+static void * -+dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -+{ -+ void *ptr; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ if (execfd == -1) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ retry_open: -+ execfd = open_temp_exec_file (); -+ if (execfd == -1) -+ return MFAIL; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+ offset = execsize; ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+ if (ftruncate (execfd, offset + length)) -+ return MFAIL; ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); -+ flags |= MAP_SHARED; ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, -+ flags, execfd, offset); -+ if (ptr == MFAIL) -+ { -+ if (!offset) -+ { -+ close (execfd); -+ goto retry_open; -+ } -+ ftruncate (execfd, offset); -+ return MFAIL; -+ } -+ else if (!offset -+ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts_next (); ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+ start = mmap (start, length, prot, flags, execfd, offset); ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+ if (start == MFAIL) -+ { -+ munmap (ptr, length); -+ ftruncate (execfd, offset); -+ return start; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 + -+ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 + -+ execsize += length; ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 + -+ return start; -+} ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 + -+/* Map in a writable and executable chunk of memory if possible. -+ Failing that, fall back to dlmmap_locked. */ -+static void * -+dlmmap (void *start, size_t length, int prot, -+ int flags, int fd, off_t offset) -+{ -+ void *ptr; ++def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 + -+ assert (start == NULL && length % malloc_getpagesize == 0 -+ && prot == (PROT_READ | PROT_WRITE) -+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) -+ && fd == -1 && offset == 0); ++def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 + -+#if FFI_CLOSURE_TEST -+ printf ("mapping in %zi\n", length); -+#endif ++def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 + -+ if (execfd == -1 && is_emutramp_enabled ()) -+ { -+ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); -+ return ptr; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 + -+ if (execfd == -1 && !is_selinux_enabled ()) -+ { -+ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); ++def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 + -+ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) -+ /* Cool, no need to mess with separate segments. */ -+ return ptr; ++def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 + -+ /* If MREMAP_DUP is ever introduced and implemented, try mmap -+ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with -+ MREMAP_DUP and prot at this point. */ -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 + -+ if (execsize == 0 || execfd == -1) -+ { -+ pthread_mutex_lock (&open_temp_exec_file_mutex); -+ ptr = dlmmap_locked (start, length, prot, flags, offset); -+ pthread_mutex_unlock (&open_temp_exec_file_mutex); ++def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 + -+ return ptr; -+ } ++def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 + -+ return dlmmap_locked (start, length, prot, flags, offset); -+} ++def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 + -+/* Release memory at the given address, as well as the corresponding -+ executable page if it's separate. */ -+static int -+dlmunmap (void *start, size_t length) -+{ -+ /* We don't bother decreasing execsize or truncating the file, since -+ we can't quite tell whether we're unmapping the end of the file. -+ We don't expect frequent deallocation anyway. If we did, we -+ could locate pages in the file by writing to the pages being -+ deallocated and checking that the file contents change. -+ Yuck. */ -+ msegmentptr seg = segment_holding (gm, start); -+ void *code; ++def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 + -+#if FFI_CLOSURE_TEST -+ printf ("unmapping %zi\n", length); -+#endif ++def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE + -+ if (seg && (code = add_segment_exec_offset (start, seg)) != start) -+ { -+ int ret = munmap (code, length); -+ if (ret) -+ return ret; -+ } ++def __OSX_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(macosx_app_extension,unavailable,_msg) + -+ return munmap (start, length); -+} ++def __IOS_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(ios_app_extension,unavailable,_msg) + -+#if FFI_CLOSURE_FREE_CODE -+/* Return segment holding given code address. */ -+static msegmentptr -+segment_holding_code (mstate m, char* addr) -+{ -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= add_segment_exec_offset (sp->base, sp) -+ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+#endif + -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++# Included from sys/_types/_in_addr_t.h + -+/* Allocate a chunk of memory with the given size. Returns a pointer -+ to the writable address, and sets *CODE to the executable -+ corresponding virtual address. */ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ void *ptr; ++# Included from sys/_types/_in_port_t.h + -+ if (!code) -+ return NULL; ++# Included from sys/socket.h + -+ ptr = dlmalloc (size); ++# Included from sys/types.h + -+ if (ptr) -+ { -+ msegmentptr seg = segment_holding (gm, ptr); ++# Included from machine/types.h + -+ *code = add_segment_exec_offset (ptr, seg); -+ } ++# Included from machine/endian.h + -+ return ptr; -+} ++# Included from sys/_types/_dev_t.h + -+/* Release a chunk of memory allocated with ffi_closure_alloc. If -+ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the -+ writable or the executable address given. Otherwise, only the -+ writable address can be provided here. */ -+void -+ffi_closure_free (void *ptr) -+{ -+#if FFI_CLOSURE_FREE_CODE -+ msegmentptr seg = segment_holding_code (gm, ptr); ++# Included from sys/_types/_blkcnt_t.h + -+ if (seg) -+ ptr = sub_segment_exec_offset (ptr, seg); -+#endif ++# Included from sys/_types/_blksize_t.h + -+ dlfree (ptr); -+} ++# Included from sys/_types/_gid_t.h + ++# Included from sys/_types/_ino_t.h + -+#if FFI_CLOSURE_TEST -+/* Do some internal sanity testing to make sure allocation and -+ deallocation of pages are working as intended. */ -+int main () -+{ -+ void *p[3]; -+#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -+#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) -+ GET (0, malloc_getpagesize / 2); -+ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); -+ PUT (1); -+ GET (1, 2 * malloc_getpagesize); -+ GET (2, malloc_getpagesize / 2); -+ PUT (1); -+ PUT (0); -+ PUT (2); -+ return 0; -+} -+#endif /* FFI_CLOSURE_TEST */ -+# else /* ! FFI_MMAP_EXEC_WRIT */ ++# Included from sys/_types/_ino64_t.h + -+/* On many systems, memory returned by malloc is writable and -+ executable, so just use it. */ ++# Included from sys/_types/_key_t.h + -+#include ++# Included from sys/_types/_mode_t.h + -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ if (!code) -+ return NULL; ++# Included from sys/_types/_nlink_t.h + -+ return *code = malloc (size); -+} ++# Included from sys/_types/_id_t.h + -+void -+ffi_closure_free (void *ptr) -+{ -+ free (ptr); -+} ++# Included from sys/_types/_pid_t.h + -+# endif /* ! FFI_MMAP_EXEC_WRIT */ -+#endif /* FFI_CLOSURES */ -diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c ---- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,64 @@ -+/* ----------------------------------------------------------------------- -+ debug.c - Copyright (c) 1996 Red Hat, Inc. ++# Included from sys/_types/_off_t.h + -+ 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: ++# Included from sys/_types/_uid_t.h ++def major(x): return ((int32_t)(((u_int32_t)(x) >> 24) & 0xff)) + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++def minor(x): return ((int32_t)((x) & 0xffffff)) + -+ 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. -+ ----------------------------------------------------------------------- */ + -+#include -+#include -+#include -+#include ++# Included from sys/_types/_clock_t.h + -+/* General debugging routines */ ++# Included from sys/_types/_size_t.h + -+void ffi_stop_here(void) -+{ -+ /* This function is only useful for debugging purposes. -+ Place a breakpoint on ffi_stop_here to be notified of -+ significant events. */ -+} ++# Included from sys/_types/_ssize_t.h + -+/* This function should only be called via the FFI_ASSERT() macro */ ++# Included from sys/_types/_time_t.h + -+void ffi_assert(char *expr, char *file, int line) -+{ -+ fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); -+ ffi_stop_here(); -+ abort(); -+} ++# Included from sys/_types/_useconds_t.h + -+/* Perform a sanity check on an ffi_type structure */ ++# Included from sys/_types/_suseconds_t.h + -+void ffi_type_test(ffi_type *a, char *file, int line) -+{ -+ FFI_ASSERT_AT(a != NULL, file, line); -+ -+ FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); -+ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); -+ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); -+ FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX) -+ || a->elements != NULL, file, line); -+ FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX -+ || (a->elements != NULL -+ && a->elements[0] != NULL && a->elements[1] == NULL), -+ file, line); ++# Included from sys/_types/_rsize_t.h + -+} -diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c ---- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,5161 @@ -+/* -+ This is a version (aka dlmalloc) of malloc/free/realloc written by -+ Doug Lea and released to the public domain, as explained at -+ http://creativecommons.org/licenses/publicdomain. Send questions, -+ comments, complaints, performance data, etc to dl@cs.oswego.edu ++# Included from sys/_types/_errno_t.h + -+* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) ++# Included from sys/_types/_fd_def.h ++__DARWIN_FD_SETSIZE = 1024 ++__DARWIN_NBBY = 8 ++def __DARWIN_FD_ZERO(p): return __builtin_bzero(p, sizeof(*(p))) + -+ Note: There may be an updated version of this malloc obtainable at -+ ftp://gee.cs.oswego.edu/pub/misc/malloc.c -+ Check before installing! ++def __DARWIN_FD_ZERO(p): return bzero(p, sizeof(*(p))) + -+* Quickstart ++NBBY = __DARWIN_NBBY + -+ This library is all in one file to simplify the most common usage: -+ ftp it, compile it (-O3), and link it into another program. All of -+ the compile-time options default to reasonable values for use on -+ most platforms. You might later want to step through various -+ compile-time and dynamic tuning options. ++# Included from sys/_types/_fd_setsize.h ++FD_SETSIZE = __DARWIN_FD_SETSIZE + -+ For convenience, an include file for code using this malloc is at: -+ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h -+ You don't really need this .h file unless you call functions not -+ defined in your system include files. The .h file contains only the -+ excerpts from this file needed for using this malloc on ANSI C/C++ -+ systems, so long as you haven't changed compile-time options about -+ naming and tuning parameters. If you do, then you can create your -+ own malloc.h that does include all settings by cutting at the point -+ indicated below. Note that you may already by default be using a C -+ library containing a malloc that is based on some version of this -+ malloc (for example in linux). You might still want to use the one -+ in this file to customize settings or to avoid overheads associated -+ with library versions. ++# Included from sys/_types/_fd_set.h + -+* Vital statistics: ++# Included from sys/_types/_fd_clr.h + -+ Supported pointer/size_t representation: 4 or 8 bytes -+ size_t MUST be an unsigned type of the same width as -+ pointers. (If you are using an ancient system that declares -+ size_t as a signed type, or need it to be a different width -+ than pointers, you can use a previous release of this malloc -+ (e.g. 2.7.2) supporting these.) ++# Included from sys/_types/_fd_zero.h ++def FD_ZERO(p): return __DARWIN_FD_ZERO(p) + -+ Alignment: 8 bytes (default) -+ This suffices for nearly all current machines and C compilers. -+ However, you can define MALLOC_ALIGNMENT to be wider than this -+ if necessary (up to 128bytes), at the expense of using more space. + -+ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) -+ 8 or 16 bytes (if 8byte sizes) -+ Each malloced chunk has a hidden word of overhead holding size -+ and status information, and additional cross-check word -+ if FOOTERS is defined. ++# Included from sys/_types/_fd_isset.h + -+ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) -+ 8-byte ptrs: 32 bytes (including overhead) ++# Included from sys/_types/_fd_copy.h + -+ Even a request for zero bytes (i.e., malloc(0)) returns a -+ pointer to something of the minimum allocatable size. -+ The maximum overhead wastage (i.e., number of extra bytes -+ allocated than were requested in malloc) is less than or equal -+ to the minimum size, except for requests >= mmap_threshold that -+ are serviced via mmap(), where the worst case wastage is about -+ 32 bytes plus the remainder from a system page (the minimal -+ mmap unit); typically 4096 or 8192 bytes. ++# Included from sys/_pthread/_pthread_attr_t.h + -+ Security: static-safe; optionally more or less -+ The "security" of malloc refers to the ability of malicious -+ code to accentuate the effects of errors (for example, freeing -+ space that is not currently malloc'ed or overwriting past the -+ ends of chunks) in code that calls malloc. This malloc -+ guarantees not to modify any memory locations below the base of -+ heap, i.e., static variables, even in the presence of usage -+ errors. The routines additionally detect most improper frees -+ and reallocs. All this holds as long as the static bookkeeping -+ for malloc itself is not corrupted by some other means. This -+ is only one aspect of security -- these checks do not, and -+ cannot, detect all possible programming errors. ++# Included from sys/_pthread/_pthread_cond_t.h + -+ If FOOTERS is defined nonzero, then each allocated chunk -+ carries an additional check word to verify that it was malloced -+ from its space. These check words are the same within each -+ execution of a program using malloc, but differ across -+ executions, so externally crafted fake chunks cannot be -+ freed. This improves security by rejecting frees/reallocs that -+ could corrupt heap memory, in addition to the checks preventing -+ writes to statics that are always on. This may further improve -+ security at the expense of time and space overhead. (Note that -+ FOOTERS may also be worth using with MSPACES.) ++# Included from sys/_pthread/_pthread_condattr_t.h + -+ By default detected errors cause the program to abort (calling -+ "abort()"). You can override this to instead proceed past -+ errors by defining PROCEED_ON_ERROR. In this case, a bad free -+ has no effect, and a malloc that encounters a bad address -+ caused by user overwrites will ignore the bad address by -+ dropping pointers and indices to all known memory. This may -+ be appropriate for programs that should continue if at all -+ possible in the face of programming errors, although they may -+ run out of memory because dropped memory is never reclaimed. ++# Included from sys/_pthread/_pthread_mutex_t.h + -+ If you don't like either of these options, you can define -+ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything -+ else. And if if you are sure that your program using malloc has -+ no errors or vulnerabilities, you can define INSECURE to 1, -+ which might (or might not) provide a small performance improvement. ++# Included from sys/_pthread/_pthread_mutexattr_t.h + -+ Thread-safety: NOT thread-safe unless USE_LOCKS defined -+ When USE_LOCKS is defined, each public call to malloc, free, -+ etc is surrounded with either a pthread mutex or a win32 -+ spinlock (depending on WIN32). This is not especially fast, and -+ can be a major bottleneck. It is designed only to provide -+ minimal protection in concurrent environments, and to provide a -+ basis for extensions. If you are using malloc in a concurrent -+ program, consider instead using ptmalloc, which is derived from -+ a version of this malloc. (See http://www.malloc.de). ++# Included from sys/_pthread/_pthread_once_t.h + -+ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP -+ This malloc can use unix sbrk or any emulation (invoked using -+ the CALL_MORECORE macro) and/or mmap/munmap or any emulation -+ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system -+ memory. On most unix systems, it tends to work best if both -+ MORECORE and MMAP are enabled. On Win32, it uses emulations -+ based on VirtualAlloc. It also uses common C library functions -+ like memset. ++# Included from sys/_pthread/_pthread_rwlock_t.h + -+ Compliance: I believe it is compliant with the Single Unix Specification -+ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably -+ others as well. ++# Included from sys/_pthread/_pthread_rwlockattr_t.h + -+* Overview of algorithms ++# Included from sys/_pthread/_pthread_t.h + -+ This is not the fastest, most space-conserving, most portable, or -+ most tunable malloc ever written. However it is among the fastest -+ while also being among the most space-conserving, portable and -+ tunable. Consistent balance across these factors results in a good -+ general-purpose allocator for malloc-intensive programs. ++# Included from sys/_pthread/_pthread_key_t.h + -+ In most ways, this malloc is a best-fit allocator. Generally, it -+ chooses the best-fitting existing chunk for a request, with ties -+ broken in approximately least-recently-used order. (This strategy -+ normally maintains low fragmentation.) However, for requests less -+ than 256bytes, it deviates from best-fit when there is not an -+ exactly fitting available chunk by preferring to use space adjacent -+ to that used for the previous small request, as well as by breaking -+ ties in approximately most-recently-used order. (These enhance -+ locality of series of small allocations.) And for very large requests -+ (>= 256Kb by default), it relies on system memory mapping -+ facilities, if supported. (This helps avoid carrying around and -+ possibly fragmenting memory used only for large chunks.) ++# Included from sys/_types/_fsblkcnt_t.h + -+ All operations (except malloc_stats and mallinfo) have execution -+ times that are bounded by a constant factor of the number of bits in -+ a size_t, not counting any clearing in calloc or copying in realloc, -+ or actions surrounding MORECORE and MMAP that have times -+ proportional to the number of non-contiguous regions returned by -+ system allocation routines, which is often just 1. ++# Included from sys/_types/_fsfilcnt_t.h + -+ The implementation is not very modular and seriously overuses -+ macros. Perhaps someday all C compilers will do as good a job -+ inlining modular code as can now be done by brute-force expansion, -+ but now, enough of them seem not to. ++# Included from machine/_param.h + -+ Some compilers issue a lot of warnings about code that is -+ dead/unreachable only on some platforms, and also about intentional -+ uses of negation on unsigned types. All known cases of each can be -+ ignored. ++# Included from sys/_types/_sa_family_t.h + -+ For a longer but out of date high-level description, see -+ http://gee.cs.oswego.edu/dl/html/malloc.html ++# Included from sys/_types/_socklen_t.h + -+* MSPACES -+ If MSPACES is defined, then in addition to malloc, free, etc., -+ this file also defines mspace_malloc, mspace_free, etc. These -+ are versions of malloc routines that take an "mspace" argument -+ obtained using create_mspace, to control all internal bookkeeping. -+ If ONLY_MSPACES is defined, only these versions are compiled. -+ So if you would like to use this allocator for only some allocations, -+ and your system malloc for others, you can compile with -+ ONLY_MSPACES and then do something like... -+ static mspace mymspace = create_mspace(0,0); // for example -+ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) ++# Included from sys/_types/_iovec_t.h ++SOCK_STREAM = 1 ++SOCK_DGRAM = 2 ++SOCK_RAW = 3 ++SOCK_RDM = 4 ++SOCK_SEQPACKET = 5 ++SO_DEBUG = 0x0001 ++SO_ACCEPTCONN = 0x0002 ++SO_REUSEADDR = 0x0004 ++SO_KEEPALIVE = 0x0008 ++SO_DONTROUTE = 0x0010 ++SO_BROADCAST = 0x0020 ++SO_USELOOPBACK = 0x0040 ++SO_LINGER = 0x0080 ++SO_LINGER = 0x1080 ++SO_OOBINLINE = 0x0100 ++SO_REUSEPORT = 0x0200 ++SO_TIMESTAMP = 0x0400 ++SO_TIMESTAMP_MONOTONIC = 0x0800 ++SO_ACCEPTFILTER = 0x1000 ++SO_DONTTRUNC = 0x2000 ++SO_WANTMORE = 0x4000 ++SO_WANTOOBFLAG = 0x8000 ++SO_SNDBUF = 0x1001 ++SO_RCVBUF = 0x1002 ++SO_SNDLOWAT = 0x1003 ++SO_RCVLOWAT = 0x1004 ++SO_SNDTIMEO = 0x1005 ++SO_RCVTIMEO = 0x1006 ++SO_ERROR = 0x1007 ++SO_TYPE = 0x1008 ++SO_LABEL = 0x1010 ++SO_PEERLABEL = 0x1011 ++SO_NREAD = 0x1020 ++SO_NKE = 0x1021 ++SO_NOSIGPIPE = 0x1022 ++SO_NOADDRERR = 0x1023 ++SO_NWRITE = 0x1024 ++SO_REUSESHAREUID = 0x1025 ++SO_NOTIFYCONFLICT = 0x1026 ++SO_UPCALLCLOSEWAIT = 0x1027 ++SO_LINGER_SEC = 0x1080 ++SO_RANDOMPORT = 0x1082 ++SO_NP_EXTENSIONS = 0x1083 ++SO_NUMRCVPKT = 0x1112 ++SONPX_SETOPTSHUT = 0x000000001 ++SOL_SOCKET = 0xffff ++AF_UNSPEC = 0 ++AF_UNIX = 1 ++AF_LOCAL = AF_UNIX ++AF_INET = 2 ++AF_IMPLINK = 3 ++AF_PUP = 4 ++AF_CHAOS = 5 ++AF_NS = 6 ++AF_ISO = 7 ++AF_OSI = AF_ISO ++AF_ECMA = 8 ++AF_DATAKIT = 9 ++AF_CCITT = 10 ++AF_SNA = 11 ++AF_DECnet = 12 ++AF_DLI = 13 ++AF_LAT = 14 ++AF_HYLINK = 15 ++AF_APPLETALK = 16 ++AF_ROUTE = 17 ++AF_LINK = 18 ++pseudo_AF_XTP = 19 ++AF_COIP = 20 ++AF_CNT = 21 ++pseudo_AF_RTIP = 22 ++AF_IPX = 23 ++AF_SIP = 24 ++pseudo_AF_PIP = 25 ++AF_NDRV = 27 ++AF_ISDN = 28 ++AF_E164 = AF_ISDN ++pseudo_AF_KEY = 29 ++AF_INET6 = 30 ++AF_NATM = 31 ++AF_SYSTEM = 32 ++AF_NETBIOS = 33 ++AF_PPP = 34 ++pseudo_AF_HDRCMPLT = 35 ++AF_RESERVED_36 = 36 ++AF_IEEE80211 = 37 ++AF_UTUN = 38 ++AF_MAX = 40 ++SOCK_MAXADDRLEN = 255 ++_SS_MAXSIZE = 128 ++PF_UNSPEC = AF_UNSPEC ++PF_LOCAL = AF_LOCAL ++PF_UNIX = PF_LOCAL ++PF_INET = AF_INET ++PF_IMPLINK = AF_IMPLINK ++PF_PUP = AF_PUP ++PF_CHAOS = AF_CHAOS ++PF_NS = AF_NS ++PF_ISO = AF_ISO ++PF_OSI = AF_ISO ++PF_ECMA = AF_ECMA ++PF_DATAKIT = AF_DATAKIT ++PF_CCITT = AF_CCITT ++PF_SNA = AF_SNA ++PF_DECnet = AF_DECnet ++PF_DLI = AF_DLI ++PF_LAT = AF_LAT ++PF_HYLINK = AF_HYLINK ++PF_APPLETALK = AF_APPLETALK ++PF_ROUTE = AF_ROUTE ++PF_LINK = AF_LINK ++PF_XTP = pseudo_AF_XTP ++PF_COIP = AF_COIP ++PF_CNT = AF_CNT ++PF_SIP = AF_SIP ++PF_IPX = AF_IPX ++PF_RTIP = pseudo_AF_RTIP ++PF_PIP = pseudo_AF_PIP ++PF_NDRV = AF_NDRV ++PF_ISDN = AF_ISDN ++PF_KEY = pseudo_AF_KEY ++PF_INET6 = AF_INET6 ++PF_NATM = AF_NATM ++PF_SYSTEM = AF_SYSTEM ++PF_NETBIOS = AF_NETBIOS ++PF_PPP = AF_PPP ++PF_RESERVED_36 = AF_RESERVED_36 ++PF_UTUN = AF_UTUN ++PF_MAX = AF_MAX ++NET_MAXID = AF_MAX ++NET_RT_DUMP = 1 ++NET_RT_FLAGS = 2 ++NET_RT_IFLIST = 3 ++NET_RT_STAT = 4 ++NET_RT_TRASH = 5 ++NET_RT_IFLIST2 = 6 ++NET_RT_DUMP2 = 7 ++NET_RT_MAXID = 10 ++SOMAXCONN = 128 ++MSG_OOB = 0x1 ++MSG_PEEK = 0x2 ++MSG_DONTROUTE = 0x4 ++MSG_EOR = 0x8 ++MSG_TRUNC = 0x10 ++MSG_CTRUNC = 0x20 ++MSG_WAITALL = 0x40 ++MSG_DONTWAIT = 0x80 ++MSG_EOF = 0x100 ++MSG_WAITSTREAM = 0x200 ++MSG_FLUSH = 0x400 ++MSG_HOLD = 0x800 ++MSG_SEND = 0x1000 ++MSG_HAVEMORE = 0x2000 ++MSG_RCVMORE = 0x4000 ++MSG_NEEDSA = 0x10000 ++CMGROUP_MAX = 16 ++def CMSG_FIRSTHDR(mhdr): return \ + -+ (Note: If you only need one instance of an mspace, you can instead -+ use "USE_DL_PREFIX" to relabel the global malloc.) ++SCM_RIGHTS = 0x01 ++SCM_TIMESTAMP = 0x02 ++SCM_CREDS = 0x03 ++SCM_TIMESTAMP_MONOTONIC = 0x04 ++SHUT_RD = 0 ++SHUT_WR = 1 ++SHUT_RDWR = 2 + -+ You can similarly create thread-local allocators by storing -+ mspaces as thread-locals. For example: -+ static __thread mspace tlms = 0; -+ void* tlmalloc(size_t bytes) { -+ if (tlms == 0) tlms = create_mspace(0, 0); -+ return mspace_malloc(tlms, bytes); -+ } -+ void tlfree(void* mem) { mspace_free(tlms, mem); } ++# Included from sys/_endian.h ++def ntohl(x): return ((__uint32_t)(x)) + -+ Unless FOOTERS is defined, each mspace is completely independent. -+ You cannot allocate from one and free to another (although -+ conformance is only weakly checked, so usage errors are not always -+ caught). If FOOTERS is defined, then each chunk carries around a tag -+ indicating its originating mspace, and frees are directed to their -+ originating spaces. ++def ntohs(x): return ((__uint16_t)(x)) + -+ ------------------------- Compile-time options --------------------------- ++def htonl(x): return ((__uint32_t)(x)) + -+Be careful in setting #define values for numerical constants of type -+size_t. On some systems, literal values are not automatically extended -+to size_t precision unless they are explicitly casted. ++def htons(x): return ((__uint16_t)(x)) + -+WIN32 default: defined if _WIN32 defined -+ Defining WIN32 sets up defaults for MS environment and compilers. -+ Otherwise defaults are for unix. ++def ntohll(x): return ((__uint64_t)(x)) + -+MALLOC_ALIGNMENT default: (size_t)8 -+ Controls the minimum alignment for malloc'ed chunks. It must be a -+ power of two and at least 8, even on machines for which smaller -+ alignments would suffice. It may be defined as larger than this -+ though. Note however that code and data structures are optimized for -+ the case of 8-byte alignment. ++def htonll(x): return ((__uint64_t)(x)) + -+MSPACES default: 0 (false) -+ If true, compile in support for independent allocation spaces. -+ This is only supported if HAVE_MMAP is true. -+ -+ONLY_MSPACES default: 0 (false) -+ If true, only compile in mspace versions, not regular versions. -+ -+USE_LOCKS default: 0 (false) -+ Causes each call to each public routine to be surrounded with -+ pthread or WIN32 mutex lock/unlock. (If set true, this can be -+ overridden on a per-mspace basis for mspace versions.) -+ -+FOOTERS default: 0 -+ If true, provide extra checking and dispatching by placing -+ information in the footers of allocated chunks. This adds -+ space and time overhead. -+ -+INSECURE default: 0 -+ If true, omit checks for usage errors and heap space overwrites. -+ -+USE_DL_PREFIX default: NOT defined -+ Causes compiler to prefix all public routines with the string 'dl'. -+ This can be useful when you only want to use this malloc in one part -+ of a program, using your regular system malloc elsewhere. -+ -+ABORT default: defined as abort() -+ Defines how to abort on failed checks. On most systems, a failed -+ check cannot die with an "assert" or even print an informative -+ message, because the underlying print routines in turn call malloc, -+ which will fail again. Generally, the best policy is to simply call -+ abort(). It's not very useful to do more than this because many -+ errors due to overwriting will show up as address faults (null, odd -+ addresses etc) rather than malloc-triggered checks, so will also -+ abort. Also, most compilers know that abort() does not return, so -+ can better optimize code conditionally calling it. ++def NTOHL(x): return (x) + -+PROCEED_ON_ERROR default: defined as 0 (false) -+ Controls whether detected bad addresses cause them to bypassed -+ rather than aborting. If set, detected bad arguments to free and -+ realloc are ignored. And all bookkeeping information is zeroed out -+ upon a detected overwrite of freed heap space, thus losing the -+ ability to ever return it from malloc again, but enabling the -+ application to proceed. If PROCEED_ON_ERROR is defined, the -+ static variable malloc_corruption_error_count is compiled in -+ and can be examined to see if errors have occurred. This option -+ generates slower code than the default abort policy. ++def NTOHS(x): return (x) + -+DEBUG default: NOT defined -+ The DEBUG setting is mainly intended for people trying to modify -+ this code or diagnose problems when porting to new platforms. -+ However, it may also be able to better isolate user errors than just -+ using runtime checks. The assertions in the check routines spell -+ out in more detail the assumptions and invariants underlying the -+ algorithms. The checking is fairly extensive, and will slow down -+ execution noticeably. Calling malloc_stats or mallinfo with DEBUG -+ set will attempt to check every non-mmapped allocated and free chunk -+ in the course of computing the summaries. ++def NTOHLL(x): return (x) + -+ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) -+ Debugging assertion failures can be nearly impossible if your -+ version of the assert macro causes malloc to be called, which will -+ lead to a cascade of further failures, blowing the runtime stack. -+ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), -+ which will usually make debugging easier. ++def HTONL(x): return (x) + -+MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 -+ The action to take before "return 0" when malloc fails to be able to -+ return memory because there is none available. ++def HTONS(x): return (x) + -+HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES -+ True if this system supports sbrk or an emulation of it. ++def HTONLL(x): return (x) + -+MORECORE default: sbrk -+ The name of the sbrk-style system routine to call to obtain more -+ memory. See below for guidance on writing custom MORECORE -+ functions. The type of the argument to sbrk/MORECORE varies across -+ systems. It cannot be size_t, because it supports negative -+ arguments, so it is normally the signed type of the same width as -+ size_t (sometimes declared as "intptr_t"). It doesn't much matter -+ though. Internally, we only call it with arguments less than half -+ the max value of a size_t, which should work across all reasonable -+ possibilities, although sometimes generating compiler warnings. See -+ near the end of this file for guidelines for creating a custom -+ version of MORECORE. + -+MORECORE_CONTIGUOUS default: 1 (true) -+ If true, take advantage of fact that consecutive calls to MORECORE -+ with positive arguments always return contiguous increasing -+ addresses. This is true of unix sbrk. It does not hurt too much to -+ set it true anyway, since malloc copes with non-contiguities. -+ Setting it false when definitely non-contiguous saves time -+ and possibly wasted space it would take to discover this though. ++# Included from libkern/_OSByteOrder.h ++def __DARWIN_OSSwapConstInt16(x): return \ + -+MORECORE_CANNOT_TRIM default: NOT defined -+ True if MORECORE cannot release space back to the system when given -+ negative arguments. This is generally necessary only if you are -+ using a hand-crafted MORECORE function that cannot handle negative -+ arguments. ++def __DARWIN_OSSwapConstInt32(x): return \ + -+HAVE_MMAP default: 1 (true) -+ True if this system supports mmap or an emulation of it. If so, and -+ HAVE_MORECORE is not true, MMAP is used for all system -+ allocation. If set and HAVE_MORECORE is true as well, MMAP is -+ primarily used to directly allocate very large blocks. It is also -+ used as a backup strategy in cases where MORECORE fails to provide -+ space from system. Note: A single call to MUNMAP is assumed to be -+ able to unmap memory that may have be allocated using multiple calls -+ to MMAP, so long as they are adjacent. ++def __DARWIN_OSSwapConstInt64(x): return \ + -+HAVE_MREMAP default: 1 on linux, else 0 -+ If true realloc() uses mremap() to re-allocate large blocks and -+ extend or shrink allocation spaces. + -+MMAP_CLEARS default: 1 on unix -+ True if mmap clears memory so calloc doesn't need to. This is true -+ for standard unix mmap using /dev/zero. ++# Included from libkern/arm/OSByteOrder.h + -+USE_BUILTIN_FFS default: 0 (i.e., not used) -+ Causes malloc to use the builtin ffs() function to compute indices. -+ Some compilers may recognize and intrinsify ffs to be faster than the -+ supplied C version. Also, the case of x86 using gcc is special-cased -+ to an asm instruction, so is already as fast as it can be, and so -+ this setting has no effect. (On most x86s, the asm version is only -+ slightly faster than the C version.) ++# Included from arm/arch.h + -+malloc_getpagesize default: derive from system includes, or 4096. -+ The system page size. To the extent possible, this malloc manages -+ memory from the system in page-size units. This may be (and -+ usually is) a function rather than a constant. This is ignored -+ if WIN32, where page size is determined using getSystemInfo during -+ initialization. ++# Included from sys/_types/_os_inline.h ++def __DARWIN_OSSwapInt16(x): return \ + -+USE_DEV_RANDOM default: 0 (i.e., not used) -+ Causes malloc to use /dev/random to initialize secure magic seed for -+ stamping footers. Otherwise, the current time is used. ++def __DARWIN_OSSwapInt32(x): return \ + -+NO_MALLINFO default: 0 -+ If defined, don't compile "mallinfo". This can be a simple way -+ of dealing with mismatches between system declarations and -+ those in this file. ++def __DARWIN_OSSwapInt64(x): return \ + -+MALLINFO_FIELD_TYPE default: size_t -+ The type of the fields in the mallinfo struct. This was originally -+ defined as "int" in SVID etc, but is more usefully defined as -+ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set ++def __DARWIN_OSSwapInt16(x): return _OSSwapInt16(x) + -+REALLOC_ZERO_BYTES_FREES default: not defined -+ This should be set if a call to realloc with zero bytes should -+ be the same as a call to free. Some people think it should. Otherwise, -+ since this malloc returns a unique pointer for malloc(0), so does -+ realloc(p, 0). ++def __DARWIN_OSSwapInt32(x): return _OSSwapInt32(x) + -+LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -+LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -+LACKS_STDLIB_H default: NOT defined unless on WIN32 -+ Define these if your system does not have these header files. -+ You might need to manually insert some of the declarations they provide. ++def __DARWIN_OSSwapInt64(x): return _OSSwapInt64(x) + -+DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, -+ system_info.dwAllocationGranularity in WIN32, -+ otherwise 64K. -+ Also settable using mallopt(M_GRANULARITY, x) -+ The unit for allocating and deallocating memory from the system. On -+ most systems with contiguous MORECORE, there is no reason to -+ make this more than a page. However, systems with MMAP tend to -+ either require or encourage larger granularities. You can increase -+ this value to prevent system allocation functions to be called so -+ often, especially if they are slow. The value must be at least one -+ page and must be a power of two. Setting to 0 causes initialization -+ to either page size or win32 region size. (Note: In previous -+ versions of malloc, the equivalent of this option was called -+ "TOP_PAD") ++def ntohs(x): return __DARWIN_OSSwapInt16(x) + -+DEFAULT_TRIM_THRESHOLD default: 2MB -+ Also settable using mallopt(M_TRIM_THRESHOLD, x) -+ The maximum amount of unused top-most memory to keep before -+ releasing via malloc_trim in free(). Automatic trimming is mainly -+ useful in long-lived programs using contiguous MORECORE. Because -+ trimming via sbrk can be slow on some systems, and can sometimes be -+ wasteful (in cases where programs immediately afterward allocate -+ more large chunks) the value should be high enough so that your -+ overall system performance would improve by releasing this much -+ memory. As a rough guide, you might set to a value close to the -+ average size of a process (program) running on your system. -+ Releasing this much memory would allow such a process to run in -+ memory. Generally, it is worth tuning trim thresholds when a -+ program undergoes phases where several large chunks are allocated -+ and released in ways that can reuse each other's storage, perhaps -+ mixed with phases where there are no such chunks at all. The trim -+ value must be greater than page size to have any useful effect. To -+ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick -+ some people use of mallocing a huge space and then freeing it at -+ program startup, in an attempt to reserve system memory, doesn't -+ have the intended effect under automatic trimming, since that memory -+ will immediately be returned to the system. ++def htons(x): return __DARWIN_OSSwapInt16(x) + -+DEFAULT_MMAP_THRESHOLD default: 256K -+ Also settable using mallopt(M_MMAP_THRESHOLD, x) -+ The request size threshold for using MMAP to directly service a -+ request. Requests of at least this size that cannot be allocated -+ using already-existing space will be serviced via mmap. (If enough -+ normal freed space already exists it is used instead.) Using mmap -+ segregates relatively large chunks of memory so that they can be -+ individually obtained and released from the host system. A request -+ serviced through mmap is never reused by any other request (at least -+ not directly; the system may just so happen to remap successive -+ requests to the same locations). Segregating space in this way has -+ the benefits that: Mmapped space can always be individually released -+ back to the system, which helps keep the system level memory demands -+ of a long-lived program low. Also, mapped memory doesn't become -+ `locked' between other chunks, as can happen with normally allocated -+ chunks, which means that even trimming via malloc_trim would not -+ release them. However, it has the disadvantage that the space -+ cannot be reclaimed, consolidated, and then used to service later -+ requests, as happens with normal chunks. The advantages of mmap -+ nearly always outweigh disadvantages for "large" chunks, but the -+ value of "large" may vary across systems. The default is an -+ empirically derived value that works well in most systems. You can -+ disable mmap by setting to MAX_SIZE_T. ++def ntohl(x): return __DARWIN_OSSwapInt32(x) + -+*/ ++def htonl(x): return __DARWIN_OSSwapInt32(x) + -+#ifndef WIN32 -+#ifdef _WIN32 -+#define WIN32 1 -+#endif /* _WIN32 */ -+#endif /* WIN32 */ -+#ifdef WIN32 -+#define WIN32_LEAN_AND_MEAN -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_UNISTD_H -+#define LACKS_SYS_PARAM_H -+#define LACKS_SYS_MMAN_H -+#define LACKS_STRING_H -+#define LACKS_STRINGS_H -+#define LACKS_SYS_TYPES_H -+#define LACKS_ERRNO_H -+#define MALLOC_FAILURE_ACTION -+#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ -+#endif /* WIN32 */ ++def ntohll(x): return __DARWIN_OSSwapInt64(x) + -+#ifdef __OS2__ -+#define INCL_DOS -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_SYS_MMAN_H -+#endif /* __OS2__ */ ++def htonll(x): return __DARWIN_OSSwapInt64(x) + -+#if defined(DARWIN) || defined(_DARWIN) -+/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -+#ifndef HAVE_MORECORE -+#define HAVE_MORECORE 0 -+#define HAVE_MMAP 1 ++IPPROTO_IP = 0 ++IPPROTO_HOPOPTS = 0 ++IPPROTO_ICMP = 1 ++IPPROTO_IGMP = 2 ++IPPROTO_GGP = 3 ++IPPROTO_IPV4 = 4 ++IPPROTO_IPIP = IPPROTO_IPV4 ++IPPROTO_TCP = 6 ++IPPROTO_ST = 7 ++IPPROTO_EGP = 8 ++IPPROTO_PIGP = 9 ++IPPROTO_RCCMON = 10 ++IPPROTO_NVPII = 11 ++IPPROTO_PUP = 12 ++IPPROTO_ARGUS = 13 ++IPPROTO_EMCON = 14 ++IPPROTO_XNET = 15 ++IPPROTO_CHAOS = 16 ++IPPROTO_UDP = 17 ++IPPROTO_MUX = 18 ++IPPROTO_MEAS = 19 ++IPPROTO_HMP = 20 ++IPPROTO_PRM = 21 ++IPPROTO_IDP = 22 ++IPPROTO_TRUNK1 = 23 ++IPPROTO_TRUNK2 = 24 ++IPPROTO_LEAF1 = 25 ++IPPROTO_LEAF2 = 26 ++IPPROTO_RDP = 27 ++IPPROTO_IRTP = 28 ++IPPROTO_TP = 29 ++IPPROTO_BLT = 30 ++IPPROTO_NSP = 31 ++IPPROTO_INP = 32 ++IPPROTO_SEP = 33 ++IPPROTO_3PC = 34 ++IPPROTO_IDPR = 35 ++IPPROTO_XTP = 36 ++IPPROTO_DDP = 37 ++IPPROTO_CMTP = 38 ++IPPROTO_TPXX = 39 ++IPPROTO_IL = 40 ++IPPROTO_IPV6 = 41 ++IPPROTO_SDRP = 42 ++IPPROTO_ROUTING = 43 ++IPPROTO_FRAGMENT = 44 ++IPPROTO_IDRP = 45 ++IPPROTO_RSVP = 46 ++IPPROTO_GRE = 47 ++IPPROTO_MHRP = 48 ++IPPROTO_BHA = 49 ++IPPROTO_ESP = 50 ++IPPROTO_AH = 51 ++IPPROTO_INLSP = 52 ++IPPROTO_SWIPE = 53 ++IPPROTO_NHRP = 54 ++IPPROTO_ICMPV6 = 58 ++IPPROTO_NONE = 59 ++IPPROTO_DSTOPTS = 60 ++IPPROTO_AHIP = 61 ++IPPROTO_CFTP = 62 ++IPPROTO_HELLO = 63 ++IPPROTO_SATEXPAK = 64 ++IPPROTO_KRYPTOLAN = 65 ++IPPROTO_RVD = 66 ++IPPROTO_IPPC = 67 ++IPPROTO_ADFS = 68 ++IPPROTO_SATMON = 69 ++IPPROTO_VISA = 70 ++IPPROTO_IPCV = 71 ++IPPROTO_CPNX = 72 ++IPPROTO_CPHB = 73 ++IPPROTO_WSN = 74 ++IPPROTO_PVP = 75 ++IPPROTO_BRSATMON = 76 ++IPPROTO_ND = 77 ++IPPROTO_WBMON = 78 ++IPPROTO_WBEXPAK = 79 ++IPPROTO_EON = 80 ++IPPROTO_VMTP = 81 ++IPPROTO_SVMTP = 82 ++IPPROTO_VINES = 83 ++IPPROTO_TTP = 84 ++IPPROTO_IGP = 85 ++IPPROTO_DGP = 86 ++IPPROTO_TCF = 87 ++IPPROTO_IGRP = 88 ++IPPROTO_OSPFIGP = 89 ++IPPROTO_SRPC = 90 ++IPPROTO_LARP = 91 ++IPPROTO_MTP = 92 ++IPPROTO_AX25 = 93 ++IPPROTO_IPEIP = 94 ++IPPROTO_MICP = 95 ++IPPROTO_SCCSP = 96 ++IPPROTO_ETHERIP = 97 ++IPPROTO_ENCAP = 98 ++IPPROTO_APES = 99 ++IPPROTO_GMTP = 100 ++IPPROTO_PIM = 103 ++IPPROTO_IPCOMP = 108 ++IPPROTO_PGM = 113 ++IPPROTO_SCTP = 132 ++IPPROTO_DIVERT = 254 ++IPPROTO_RAW = 255 ++IPPROTO_MAX = 256 ++IPPROTO_DONE = 257 ++__DARWIN_IPPORT_RESERVED = 1024 ++IPPORT_RESERVED = __DARWIN_IPPORT_RESERVED ++IPPORT_USERRESERVED = 5000 ++IPPORT_HIFIRSTAUTO = 49152 ++IPPORT_HILASTAUTO = 65535 ++IPPORT_RESERVEDSTART = 600 ++def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) ++ ++IN_CLASSA_NET = 0xff000000 ++IN_CLASSA_NSHIFT = 24 ++IN_CLASSA_HOST = 0x00ffffff ++IN_CLASSA_MAX = 128 ++def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) ++ ++IN_CLASSB_NET = 0xffff0000 ++IN_CLASSB_NSHIFT = 16 ++IN_CLASSB_HOST = 0x0000ffff ++IN_CLASSB_MAX = 65536 ++def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) ++ ++IN_CLASSC_NET = 0xffffff00 ++IN_CLASSC_NSHIFT = 8 ++IN_CLASSC_HOST = 0x000000ff ++def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) ++ ++IN_CLASSD_NET = 0xf0000000 ++IN_CLASSD_NSHIFT = 28 ++IN_CLASSD_HOST = 0x0fffffff ++def IN_MULTICAST(i): return IN_CLASSD(i) ++ ++def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++ ++def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) ++ ++INADDR_NONE = 0xffffffff ++def IN_LINKLOCAL(i): return (((u_int32_t)(i) & IN_CLASSB_NET) == IN_LINKLOCALNETNUM) ++ ++def IN_LOOPBACK(i): return (((u_int32_t)(i) & 0xff000000) == 0x7f000000) ++ ++def IN_ZERONET(i): return (((u_int32_t)(i) & 0xff000000) == 0) ++ ++def IN_LOCAL_GROUP(i): return (((u_int32_t)(i) & 0xffffff00) == 0xe0000000) ++ ++IN_LOOPBACKNET = 127 ++INET_ADDRSTRLEN = 16 ++IP_OPTIONS = 1 ++IP_HDRINCL = 2 ++IP_TOS = 3 ++IP_TTL = 4 ++IP_RECVOPTS = 5 ++IP_RECVRETOPTS = 6 ++IP_RECVDSTADDR = 7 ++IP_RETOPTS = 8 ++IP_MULTICAST_IF = 9 ++IP_MULTICAST_TTL = 10 ++IP_MULTICAST_LOOP = 11 ++IP_ADD_MEMBERSHIP = 12 ++IP_DROP_MEMBERSHIP = 13 ++IP_MULTICAST_VIF = 14 ++IP_RSVP_ON = 15 ++IP_RSVP_OFF = 16 ++IP_RSVP_VIF_ON = 17 ++IP_RSVP_VIF_OFF = 18 ++IP_PORTRANGE = 19 ++IP_RECVIF = 20 ++IP_IPSEC_POLICY = 21 ++IP_FAITH = 22 ++IP_STRIPHDR = 23 ++IP_RECVTTL = 24 ++IP_BOUND_IF = 25 ++IP_PKTINFO = 26 ++IP_RECVPKTINFO = IP_PKTINFO ++IP_FW_ADD = 40 ++IP_FW_DEL = 41 ++IP_FW_FLUSH = 42 ++IP_FW_ZERO = 43 ++IP_FW_GET = 44 ++IP_FW_RESETLOG = 45 ++IP_OLD_FW_ADD = 50 ++IP_OLD_FW_DEL = 51 ++IP_OLD_FW_FLUSH = 52 ++IP_OLD_FW_ZERO = 53 ++IP_OLD_FW_GET = 54 ++IP_NAT__XXX = 55 ++IP_OLD_FW_RESETLOG = 56 ++IP_DUMMYNET_CONFIGURE = 60 ++IP_DUMMYNET_DEL = 61 ++IP_DUMMYNET_FLUSH = 62 ++IP_DUMMYNET_GET = 64 ++IP_TRAFFIC_MGT_BACKGROUND = 65 ++IP_MULTICAST_IFINDEX = 66 ++IP_ADD_SOURCE_MEMBERSHIP = 70 ++IP_DROP_SOURCE_MEMBERSHIP = 71 ++IP_BLOCK_SOURCE = 72 ++IP_UNBLOCK_SOURCE = 73 ++IP_MSFILTER = 74 ++MCAST_JOIN_GROUP = 80 ++MCAST_LEAVE_GROUP = 81 ++MCAST_JOIN_SOURCE_GROUP = 82 ++MCAST_LEAVE_SOURCE_GROUP = 83 ++MCAST_BLOCK_SOURCE = 84 ++MCAST_UNBLOCK_SOURCE = 85 ++IP_DEFAULT_MULTICAST_TTL = 1 ++IP_DEFAULT_MULTICAST_LOOP = 1 ++IP_MIN_MEMBERSHIPS = 31 ++IP_MAX_MEMBERSHIPS = 4095 ++IP_MAX_GROUP_SRC_FILTER = 512 ++IP_MAX_SOCK_SRC_FILTER = 128 ++IP_MAX_SOCK_MUTE_FILTER = 128 ++MCAST_UNDEFINED = 0 ++MCAST_INCLUDE = 1 ++MCAST_EXCLUDE = 2 ++IP_PORTRANGE_DEFAULT = 0 ++IP_PORTRANGE_HIGH = 1 ++IP_PORTRANGE_LOW = 2 ++IPPROTO_MAXID = (IPPROTO_AH + 1) ++IPCTL_FORWARDING = 1 ++IPCTL_SENDREDIRECTS = 2 ++IPCTL_DEFTTL = 3 ++IPCTL_DEFMTU = 4 ++IPCTL_RTEXPIRE = 5 ++IPCTL_RTMINEXPIRE = 6 ++IPCTL_RTMAXCACHE = 7 ++IPCTL_SOURCEROUTE = 8 ++IPCTL_DIRECTEDBROADCAST = 9 ++IPCTL_INTRQMAXLEN = 10 ++IPCTL_INTRQDROPS = 11 ++IPCTL_STATS = 12 ++IPCTL_ACCEPTSOURCEROUTE = 13 ++IPCTL_FASTFORWARDING = 14 ++IPCTL_KEEPFAITH = 15 ++IPCTL_GIF_TTL = 16 ++IPCTL_MAXID = 17 ++ ++# Included from netinet6/in6.h ++__KAME_VERSION = "2009/apple-darwin" ++IPV6PORT_RESERVED = 1024 ++IPV6PORT_ANONMIN = 49152 ++IPV6PORT_ANONMAX = 65535 ++IPV6PORT_RESERVEDMIN = 600 ++IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) ++INET6_ADDRSTRLEN = 46 ++def IN6_IS_ADDR_UNSPECIFIED(a): return \ ++ ++def IN6_IS_ADDR_LOOPBACK(a): return \ ++ ++def IN6_IS_ADDR_V4COMPAT(a): return \ ++ ++def IN6_IS_ADDR_V4MAPPED(a): return \ ++ ++__IPV6_ADDR_SCOPE_NODELOCAL = 0x01 ++__IPV6_ADDR_SCOPE_INTFACELOCAL = 0x01 ++__IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 ++__IPV6_ADDR_SCOPE_SITELOCAL = 0x05 ++__IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 ++__IPV6_ADDR_SCOPE_GLOBAL = 0x0e ++def IN6_IS_ADDR_LINKLOCAL(a): return \ ++ ++def IN6_IS_ADDR_SITELOCAL(a): return \ ++ ++def IN6_IS_ADDR_UNIQUE_LOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_NODELOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_SITELOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ ++ ++def IN6_IS_ADDR_MC_GLOBAL(a): return \ ++ ++IPV6_OPTIONS = 1 ++IPV6_RECVOPTS = 5 ++IPV6_RECVRETOPTS = 6 ++IPV6_RECVDSTADDR = 7 ++IPV6_RETOPTS = 8 ++IPV6_SOCKOPT_RESERVED1 = 3 ++IPV6_UNICAST_HOPS = 4 ++IPV6_MULTICAST_IF = 9 ++IPV6_MULTICAST_HOPS = 10 ++IPV6_MULTICAST_LOOP = 11 ++IPV6_JOIN_GROUP = 12 ++IPV6_LEAVE_GROUP = 13 ++IPV6_PORTRANGE = 14 ++ICMP6_FILTER = 18 ++IPV6_2292PKTINFO = 19 ++IPV6_2292HOPLIMIT = 20 ++IPV6_2292NEXTHOP = 21 ++IPV6_2292HOPOPTS = 22 ++IPV6_2292DSTOPTS = 23 ++IPV6_2292RTHDR = 24 ++IPV6_2292PKTOPTIONS = 25 ++IPV6_PKTINFO = IPV6_2292PKTINFO ++IPV6_HOPLIMIT = IPV6_2292HOPLIMIT ++IPV6_NEXTHOP = IPV6_2292NEXTHOP ++IPV6_HOPOPTS = IPV6_2292HOPOPTS ++IPV6_DSTOPTS = IPV6_2292DSTOPTS ++IPV6_RTHDR = IPV6_2292RTHDR ++IPV6_PKTOPTIONS = IPV6_2292PKTOPTIONS ++IPV6_CHECKSUM = 26 ++IPV6_V6ONLY = 27 ++IPV6_BINDV6ONLY = IPV6_V6ONLY ++IPV6_IPSEC_POLICY = 28 ++IPV6_FAITH = 29 ++IPV6_FW_ADD = 30 ++IPV6_FW_DEL = 31 ++IPV6_FW_FLUSH = 32 ++IPV6_FW_ZERO = 33 ++IPV6_FW_GET = 34 ++IPV6_RECVTCLASS = 35 ++IPV6_TCLASS = 36 ++IPV6_RTHDRDSTOPTS = 57 ++IPV6_RECVPKTINFO = 61 ++IPV6_RECVHOPLIMIT = 37 ++IPV6_RECVRTHDR = 38 ++IPV6_RECVHOPOPTS = 39 ++IPV6_RECVDSTOPTS = 40 ++IPV6_USE_MIN_MTU = 42 ++IPV6_RECVPATHMTU = 43 ++IPV6_PATHMTU = 44 ++IPV6_REACHCONF = 45 ++IPV6_3542PKTINFO = 46 ++IPV6_3542HOPLIMIT = 47 ++IPV6_3542NEXTHOP = 48 ++IPV6_3542HOPOPTS = 49 ++IPV6_3542DSTOPTS = 50 ++IPV6_3542RTHDR = 51 ++IPV6_PKTINFO = IPV6_3542PKTINFO ++IPV6_HOPLIMIT = IPV6_3542HOPLIMIT ++IPV6_NEXTHOP = IPV6_3542NEXTHOP ++IPV6_HOPOPTS = IPV6_3542HOPOPTS ++IPV6_DSTOPTS = IPV6_3542DSTOPTS ++IPV6_RTHDR = IPV6_3542RTHDR ++IPV6_AUTOFLOWLABEL = 59 ++IPV6_DONTFRAG = 62 ++IPV6_PREFER_TEMPADDR = 63 ++IPV6_MSFILTER = 74 ++IPV6_BOUND_IF = 125 ++IPV6_RTHDR_LOOSE = 0 ++IPV6_RTHDR_STRICT = 1 ++IPV6_RTHDR_TYPE_0 = 0 ++IPV6_DEFAULT_MULTICAST_HOPS = 1 ++IPV6_DEFAULT_MULTICAST_LOOP = 1 ++IPV6_MIN_MEMBERSHIPS = 31 ++IPV6_MAX_MEMBERSHIPS = 4095 ++IPV6_MAX_GROUP_SRC_FILTER = 512 ++IPV6_MAX_SOCK_SRC_FILTER = 128 ++IPV6_PORTRANGE_DEFAULT = 0 ++IPV6_PORTRANGE_HIGH = 1 ++IPV6_PORTRANGE_LOW = 2 ++IPV6PROTO_MAXID = (IPPROTO_PIM + 1) ++IPV6CTL_FORWARDING = 1 ++IPV6CTL_SENDREDIRECTS = 2 ++IPV6CTL_DEFHLIM = 3 ++IPV6CTL_DEFMTU = 4 ++IPV6CTL_FORWSRCRT = 5 ++IPV6CTL_STATS = 6 ++IPV6CTL_MRTSTATS = 7 ++IPV6CTL_MRTPROTO = 8 ++IPV6CTL_MAXFRAGPACKETS = 9 ++IPV6CTL_SOURCECHECK = 10 ++IPV6CTL_SOURCECHECK_LOGINT = 11 ++IPV6CTL_ACCEPT_RTADV = 12 ++IPV6CTL_KEEPFAITH = 13 ++IPV6CTL_LOG_INTERVAL = 14 ++IPV6CTL_HDRNESTLIMIT = 15 ++IPV6CTL_DAD_COUNT = 16 ++IPV6CTL_AUTO_FLOWLABEL = 17 ++IPV6CTL_DEFMCASTHLIM = 18 ++IPV6CTL_GIF_HLIM = 19 ++IPV6CTL_KAME_VERSION = 20 ++IPV6CTL_USE_DEPRECATED = 21 ++IPV6CTL_RR_PRUNE = 22 ++IPV6CTL_MAPPED_ADDR = 23 ++IPV6CTL_V6ONLY = 24 ++IPV6CTL_RTEXPIRE = 25 ++IPV6CTL_RTMINEXPIRE = 26 ++IPV6CTL_RTMAXCACHE = 27 ++IPV6CTL_USETEMPADDR = 32 ++IPV6CTL_TEMPPLTIME = 33 ++IPV6CTL_TEMPVLTIME = 34 ++IPV6CTL_AUTO_LINKLOCAL = 35 ++IPV6CTL_RIP6STATS = 36 ++IPV6CTL_PREFER_TEMPADDR = 37 ++IPV6CTL_ADDRCTLPOLICY = 38 ++IPV6CTL_USE_DEFAULTZONE = 39 ++IPV6CTL_MAXFRAGS = 41 ++IPV6CTL_MCAST_PMTU = 44 ++IPV6CTL_NEIGHBORGCTHRESH = 46 ++IPV6CTL_MAXIFPREFIXES = 47 ++IPV6CTL_MAXIFDEFROUTERS = 48 ++IPV6CTL_MAXDYNROUTES = 49 ++ICMPV6CTL_ND6_ONLINKNSRFC4861 = 50 ++IPV6CTL_MAXID = 51 +diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen +--- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Lib/plat-ios/regen 2015-04-26 09:08:15.000000000 +0800 +@@ -0,0 +1,3 @@ ++#! /bin/sh ++set -v ++include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h +diff -Nru orig/Lib/platform.py modified/Lib/platform.py +--- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 +@@ -841,7 +841,7 @@ + + """ Interface to the system's uname command. + """ +- if sys.platform in ('dos', 'win32', 'win16'): ++ if sys.platform in ('dos', 'win32', 'win16', 'ios'): + # XXX Others too ? + return default + try: +@@ -864,7 +864,7 @@ + default in case the command should fail. + + """ +- if sys.platform in ('dos', 'win32', 'win16'): ++ if sys.platform in ('dos', 'win32', 'win16', 'ios'): + # XXX Others too ? + return default + target = _follow_symlinks(target) +diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py +--- orig/Lib/subprocess.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/subprocess.py 2015-04-30 07:50:40.000000000 +0800 +@@ -423,1268 +423,1269 @@ + else: + _PopenSelector = selectors.SelectSelector + +- +-__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", +- "getoutput", "check_output", "CalledProcessError", "DEVNULL"] +- +-if mswindows: +- from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, +- STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, +- STD_ERROR_HANDLE, SW_HIDE, +- STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) +- +- __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", +- "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", +- "STD_ERROR_HANDLE", "SW_HIDE", +- "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) +- +- class Handle(int): +- closed = False +- +- def Close(self, CloseHandle=_winapi.CloseHandle): +- if not self.closed: +- self.closed = True +- CloseHandle(self) +- +- def Detach(self): +- if not self.closed: +- self.closed = True +- return int(self) +- raise ValueError("already closed") +- +- def __repr__(self): +- return "Handle(%d)" % int(self) +- +- __del__ = Close +- __str__ = __repr__ +- +-try: +- MAXFD = os.sysconf("SC_OPEN_MAX") +-except: +- MAXFD = 256 +- +-# This lists holds Popen instances for which the underlying process had not +-# exited at the time its __del__ method got called: those processes are wait()ed +-# for synchronously from _cleanup() when a new Popen object is created, to avoid +-# zombie processes. +-_active = [] +- +-def _cleanup(): +- for inst in _active[:]: +- res = inst._internal_poll(_deadstate=sys.maxsize) +- if res is not None: +- try: +- _active.remove(inst) +- except ValueError: +- # This can happen if two threads create a new Popen instance. +- # It's harmless that it was already removed, so ignore. +- pass +- + PIPE = -1 + STDOUT = -2 + DEVNULL = -3 + ++if sys.platform == 'ios': ++ # iOS doesn't support subprocesses; however, some modules still import ++ # subprocess, so it's helpful to retain the symbols in the namespace. ++ __all__ = ["PIPE", "STDOUT", "DEVNULL", "CalledProcessError"] ++else: ++ __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", ++ "getoutput", "check_output", "CalledProcessError", "DEVNULL"] + +-def _eintr_retry_call(func, *args): +- while True: +- try: +- return func(*args) +- except InterruptedError: +- continue +- +- +-# XXX This function is only used by multiprocessing and the test suite, +-# but it's here so that it can be imported when Python is compiled without +-# threads. +- +-def _args_from_interpreter_flags(): +- """Return a list of command-line arguments reproducing the current +- settings in sys.flags and sys.warnoptions.""" +- flag_opt_map = { +- 'debug': 'd', +- # 'inspect': 'i', +- # 'interactive': 'i', +- 'optimize': 'O', +- 'dont_write_bytecode': 'B', +- 'no_user_site': 's', +- 'no_site': 'S', +- 'ignore_environment': 'E', +- 'verbose': 'v', +- 'bytes_warning': 'b', +- 'quiet': 'q', +- 'hash_randomization': 'R', +- } +- args = [] +- for flag, opt in flag_opt_map.items(): +- v = getattr(sys.flags, flag) +- if v > 0: +- if flag == 'hash_randomization': +- v = 1 # Handle specification of an exact seed +- args.append('-' + opt * v) +- for opt in sys.warnoptions: +- args.append('-W' + opt) +- return args +- +- +-def call(*popenargs, timeout=None, **kwargs): +- """Run command with arguments. Wait for command to complete or +- timeout, then return the returncode attribute. +- +- The arguments are the same as for the Popen constructor. Example: +- +- retcode = call(["ls", "-l"]) +- """ +- with Popen(*popenargs, **kwargs) as p: +- try: +- return p.wait(timeout=timeout) +- except: +- p.kill() +- p.wait() +- raise +- +- +-def check_call(*popenargs, **kwargs): +- """Run command with arguments. Wait for command to complete. If +- the exit code was zero then return, otherwise raise +- CalledProcessError. The CalledProcessError object will have the +- return code in the returncode attribute. +- +- The arguments are the same as for the call function. Example: +- +- check_call(["ls", "-l"]) +- """ +- retcode = call(*popenargs, **kwargs) +- if retcode: +- cmd = kwargs.get("args") +- if cmd is None: +- cmd = popenargs[0] +- raise CalledProcessError(retcode, cmd) +- return 0 +- +- +-def check_output(*popenargs, timeout=None, **kwargs): +- r"""Run command with arguments and return its output. +- +- If the exit code was non-zero it raises a CalledProcessError. The +- CalledProcessError object will have the return code in the returncode +- attribute and output in the output attribute. +- +- The arguments are the same as for the Popen constructor. Example: +- +- >>> check_output(["ls", "-l", "/dev/null"]) +- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' +- +- The stdout argument is not allowed as it is used internally. +- To capture standard error in the result, use stderr=STDOUT. +- +- >>> check_output(["/bin/sh", "-c", +- ... "ls -l non_existent_file ; exit 0"], +- ... stderr=STDOUT) +- b'ls: non_existent_file: No such file or directory\n' +- +- There is an additional optional argument, "input", allowing you to +- pass a string to the subprocess's stdin. If you use this argument +- you may not also use the Popen constructor's "stdin" argument, as +- it too will be used internally. Example: +- +- >>> check_output(["sed", "-e", "s/foo/bar/"], +- ... input=b"when in the course of fooman events\n") +- b'when in the course of barman events\n' +- +- If universal_newlines=True is passed, the return value will be a +- string rather than bytes. +- """ +- if 'stdout' in kwargs: +- raise ValueError('stdout argument not allowed, it will be overridden.') +- if 'input' in kwargs: +- if 'stdin' in kwargs: +- raise ValueError('stdin and input arguments may not both be used.') +- inputdata = kwargs['input'] +- del kwargs['input'] +- kwargs['stdin'] = PIPE +- else: +- inputdata = None +- with Popen(*popenargs, stdout=PIPE, **kwargs) as process: +- try: +- output, unused_err = process.communicate(inputdata, timeout=timeout) +- except TimeoutExpired: +- process.kill() +- output, unused_err = process.communicate() +- raise TimeoutExpired(process.args, timeout, output=output) +- except: +- process.kill() +- process.wait() +- raise +- retcode = process.poll() +- if retcode: +- raise CalledProcessError(retcode, process.args, output=output) +- return output +- +- +-def list2cmdline(seq): +- """ +- Translate a sequence of arguments into a command line +- string, using the same rules as the MS C runtime: +- +- 1) Arguments are delimited by white space, which is either a +- space or a tab. +- +- 2) A string surrounded by double quotation marks is +- interpreted as a single argument, regardless of white space +- contained within. A quoted string can be embedded in an +- argument. +- +- 3) A double quotation mark preceded by a backslash is +- interpreted as a literal double quotation mark. +- +- 4) Backslashes are interpreted literally, unless they +- immediately precede a double quotation mark. +- +- 5) If backslashes immediately precede a double quotation mark, +- every pair of backslashes is interpreted as a literal +- backslash. If the number of backslashes is odd, the last +- backslash escapes the next double quotation mark as +- described in rule 3. +- """ +- +- # See +- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx +- # or search http://msdn.microsoft.com for +- # "Parsing C++ Command-Line Arguments" +- result = [] +- needquote = False +- for arg in seq: +- bs_buf = [] +- +- # Add a space to separate this argument from the others +- if result: +- result.append(' ') +- +- needquote = (" " in arg) or ("\t" in arg) or not arg +- if needquote: +- result.append('"') +- +- for c in arg: +- if c == '\\': +- # Don't know if we need to double yet. +- bs_buf.append(c) +- elif c == '"': +- # Double backslashes. +- result.append('\\' * len(bs_buf)*2) +- bs_buf = [] +- result.append('\\"') +- else: +- # Normal char +- if bs_buf: +- result.extend(bs_buf) +- bs_buf = [] +- result.append(c) +- +- # Add remaining backslashes, if any. +- if bs_buf: +- result.extend(bs_buf) +- +- if needquote: +- result.extend(bs_buf) +- result.append('"') +- +- return ''.join(result) +- +- +-# Various tools for executing commands and looking at their output and status. +-# +- +-def getstatusoutput(cmd): +- """ Return (status, output) of executing cmd in a shell. ++ if mswindows: ++ from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, ++ STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, ++ STD_ERROR_HANDLE, SW_HIDE, ++ STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) ++ ++ __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", ++ "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", ++ "STD_ERROR_HANDLE", "SW_HIDE", ++ "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) ++ ++ class Handle(int): ++ closed = False ++ ++ def Close(self, CloseHandle=_winapi.CloseHandle): ++ if not self.closed: ++ self.closed = True ++ CloseHandle(self) ++ ++ def Detach(self): ++ if not self.closed: ++ self.closed = True ++ return int(self) ++ raise ValueError("already closed") + +- Execute the string 'cmd' in a shell with 'check_output' and +- return a 2-tuple (status, output). Universal newlines mode is used, +- meaning that the result with be decoded to a string. ++ def __repr__(self): ++ return "Handle(%d)" % int(self) + +- A trailing newline is stripped from the output. +- The exit status for the command can be interpreted +- according to the rules for the function 'wait'. Example: ++ __del__ = Close ++ __str__ = __repr__ + +- >>> import subprocess +- >>> subprocess.getstatusoutput('ls /bin/ls') +- (0, '/bin/ls') +- >>> subprocess.getstatusoutput('cat /bin/junk') +- (256, 'cat: /bin/junk: No such file or directory') +- >>> subprocess.getstatusoutput('/bin/junk') +- (256, 'sh: /bin/junk: not found') +- """ + try: +- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) +- status = 0 +- except CalledProcessError as ex: +- data = ex.output +- status = ex.returncode +- if data[-1:] == '\n': +- data = data[:-1] +- return status, data +- +-def getoutput(cmd): +- """Return output (stdout or stderr) of executing cmd in a shell. +- +- Like getstatusoutput(), except the exit status is ignored and the return +- value is a string containing the command's output. Example: +- +- >>> import subprocess +- >>> subprocess.getoutput('ls /bin/ls') +- '/bin/ls' +- """ +- return getstatusoutput(cmd)[1] +- +- +-_PLATFORM_DEFAULT_CLOSE_FDS = object() +- +- +-class Popen(object): +- +- _child_created = False # Set here since __del__ checks it +- +- def __init__(self, args, bufsize=-1, executable=None, +- stdin=None, stdout=None, stderr=None, +- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, +- shell=False, cwd=None, env=None, universal_newlines=False, +- startupinfo=None, creationflags=0, +- restore_signals=True, start_new_session=False, +- pass_fds=()): +- """Create new Popen instance.""" +- _cleanup() +- # Held while anything is calling waitpid before returncode has been +- # updated to prevent clobbering returncode if wait() or poll() are +- # called from multiple threads at once. After acquiring the lock, +- # code must re-check self.returncode to see if another thread just +- # finished a waitpid() call. +- self._waitpid_lock = threading.Lock() +- +- self._input = None +- self._communication_started = False +- if bufsize is None: +- bufsize = -1 # Restore default +- if not isinstance(bufsize, int): +- raise TypeError("bufsize must be an integer") ++ MAXFD = os.sysconf("SC_OPEN_MAX") ++ except: ++ MAXFD = 256 ++ ++ # This lists holds Popen instances for which the underlying process had not ++ # exited at the time its __del__ method got called: those processes are wait()ed ++ # for synchronously from _cleanup() when a new Popen object is created, to avoid ++ # zombie processes. ++ _active = [] ++ ++ def _cleanup(): ++ for inst in _active[:]: ++ res = inst._internal_poll(_deadstate=sys.maxsize) ++ if res is not None: ++ try: ++ _active.remove(inst) ++ except ValueError: ++ # This can happen if two threads create a new Popen instance. ++ # It's harmless that it was already removed, so ignore. ++ pass + +- if mswindows: +- if preexec_fn is not None: +- raise ValueError("preexec_fn is not supported on Windows " +- "platforms") +- any_stdio_set = (stdin is not None or stdout is not None or +- stderr is not None) +- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: +- if any_stdio_set: +- close_fds = False ++ def _eintr_retry_call(func, *args): ++ while True: ++ try: ++ return func(*args) ++ except InterruptedError: ++ continue ++ ++ ++ # XXX This function is only used by multiprocessing and the test suite, ++ # but it's here so that it can be imported when Python is compiled without ++ # threads. ++ ++ def _args_from_interpreter_flags(): ++ """Return a list of command-line arguments reproducing the current ++ settings in sys.flags and sys.warnoptions.""" ++ flag_opt_map = { ++ 'debug': 'd', ++ # 'inspect': 'i', ++ # 'interactive': 'i', ++ 'optimize': 'O', ++ 'dont_write_bytecode': 'B', ++ 'no_user_site': 's', ++ 'no_site': 'S', ++ 'ignore_environment': 'E', ++ 'verbose': 'v', ++ 'bytes_warning': 'b', ++ 'quiet': 'q', ++ 'hash_randomization': 'R', ++ } ++ args = [] ++ for flag, opt in flag_opt_map.items(): ++ v = getattr(sys.flags, flag) ++ if v > 0: ++ if flag == 'hash_randomization': ++ v = 1 # Handle specification of an exact seed ++ args.append('-' + opt * v) ++ for opt in sys.warnoptions: ++ args.append('-W' + opt) ++ return args ++ ++ ++ def call(*popenargs, timeout=None, **kwargs): ++ """Run command with arguments. Wait for command to complete or ++ timeout, then return the returncode attribute. ++ ++ The arguments are the same as for the Popen constructor. Example: ++ ++ retcode = call(["ls", "-l"]) ++ """ ++ with Popen(*popenargs, **kwargs) as p: ++ try: ++ return p.wait(timeout=timeout) ++ except: ++ p.kill() ++ p.wait() ++ raise ++ ++ ++ def check_call(*popenargs, **kwargs): ++ """Run command with arguments. Wait for command to complete. If ++ the exit code was zero then return, otherwise raise ++ CalledProcessError. The CalledProcessError object will have the ++ return code in the returncode attribute. ++ ++ The arguments are the same as for the call function. Example: ++ ++ check_call(["ls", "-l"]) ++ """ ++ retcode = call(*popenargs, **kwargs) ++ if retcode: ++ cmd = kwargs.get("args") ++ if cmd is None: ++ cmd = popenargs[0] ++ raise CalledProcessError(retcode, cmd) ++ return 0 ++ ++ ++ def check_output(*popenargs, timeout=None, **kwargs): ++ r"""Run command with arguments and return its output. ++ ++ If the exit code was non-zero it raises a CalledProcessError. The ++ CalledProcessError object will have the return code in the returncode ++ attribute and output in the output attribute. ++ ++ The arguments are the same as for the Popen constructor. Example: ++ ++ >>> check_output(["ls", "-l", "/dev/null"]) ++ b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' ++ ++ The stdout argument is not allowed as it is used internally. ++ To capture standard error in the result, use stderr=STDOUT. ++ ++ >>> check_output(["/bin/sh", "-c", ++ ... "ls -l non_existent_file ; exit 0"], ++ ... stderr=STDOUT) ++ b'ls: non_existent_file: No such file or directory\n' ++ ++ There is an additional optional argument, "input", allowing you to ++ pass a string to the subprocess's stdin. If you use this argument ++ you may not also use the Popen constructor's "stdin" argument, as ++ it too will be used internally. Example: ++ ++ >>> check_output(["sed", "-e", "s/foo/bar/"], ++ ... input=b"when in the course of fooman events\n") ++ b'when in the course of barman events\n' ++ ++ If universal_newlines=True is passed, the return value will be a ++ string rather than bytes. ++ """ ++ if 'stdout' in kwargs: ++ raise ValueError('stdout argument not allowed, it will be overridden.') ++ if 'input' in kwargs: ++ if 'stdin' in kwargs: ++ raise ValueError('stdin and input arguments may not both be used.') ++ inputdata = kwargs['input'] ++ del kwargs['input'] ++ kwargs['stdin'] = PIPE ++ else: ++ inputdata = None ++ with Popen(*popenargs, stdout=PIPE, **kwargs) as process: ++ try: ++ output, unused_err = process.communicate(inputdata, timeout=timeout) ++ except TimeoutExpired: ++ process.kill() ++ output, unused_err = process.communicate() ++ raise TimeoutExpired(process.args, timeout, output=output) ++ except: ++ process.kill() ++ process.wait() ++ raise ++ retcode = process.poll() ++ if retcode: ++ raise CalledProcessError(retcode, process.args, output=output) ++ return output ++ ++ ++ def list2cmdline(seq): ++ """ ++ Translate a sequence of arguments into a command line ++ string, using the same rules as the MS C runtime: ++ ++ 1) Arguments are delimited by white space, which is either a ++ space or a tab. ++ ++ 2) A string surrounded by double quotation marks is ++ interpreted as a single argument, regardless of white space ++ contained within. A quoted string can be embedded in an ++ argument. ++ ++ 3) A double quotation mark preceded by a backslash is ++ interpreted as a literal double quotation mark. ++ ++ 4) Backslashes are interpreted literally, unless they ++ immediately precede a double quotation mark. ++ ++ 5) If backslashes immediately precede a double quotation mark, ++ every pair of backslashes is interpreted as a literal ++ backslash. If the number of backslashes is odd, the last ++ backslash escapes the next double quotation mark as ++ described in rule 3. ++ """ ++ ++ # See ++ # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx ++ # or search http://msdn.microsoft.com for ++ # "Parsing C++ Command-Line Arguments" ++ result = [] ++ needquote = False ++ for arg in seq: ++ bs_buf = [] ++ ++ # Add a space to separate this argument from the others ++ if result: ++ result.append(' ') ++ ++ needquote = (" " in arg) or ("\t" in arg) or not arg ++ if needquote: ++ result.append('"') ++ ++ for c in arg: ++ if c == '\\': ++ # Don't know if we need to double yet. ++ bs_buf.append(c) ++ elif c == '"': ++ # Double backslashes. ++ result.append('\\' * len(bs_buf)*2) ++ bs_buf = [] ++ result.append('\\"') + else: ++ # Normal char ++ if bs_buf: ++ result.extend(bs_buf) ++ bs_buf = [] ++ result.append(c) ++ ++ # Add remaining backslashes, if any. ++ if bs_buf: ++ result.extend(bs_buf) ++ ++ if needquote: ++ result.extend(bs_buf) ++ result.append('"') ++ ++ return ''.join(result) ++ ++ ++ # Various tools for executing commands and looking at their output and status. ++ # ++ ++ def getstatusoutput(cmd): ++ """ Return (status, output) of executing cmd in a shell. ++ ++ Execute the string 'cmd' in a shell with 'check_output' and ++ return a 2-tuple (status, output). Universal newlines mode is used, ++ meaning that the result with be decoded to a string. ++ ++ A trailing newline is stripped from the output. ++ The exit status for the command can be interpreted ++ according to the rules for the function 'wait'. Example: ++ ++ >>> import subprocess ++ >>> subprocess.getstatusoutput('ls /bin/ls') ++ (0, '/bin/ls') ++ >>> subprocess.getstatusoutput('cat /bin/junk') ++ (256, 'cat: /bin/junk: No such file or directory') ++ >>> subprocess.getstatusoutput('/bin/junk') ++ (256, 'sh: /bin/junk: not found') ++ """ ++ try: ++ data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) ++ status = 0 ++ except CalledProcessError as ex: ++ data = ex.output ++ status = ex.returncode ++ if data[-1:] == '\n': ++ data = data[:-1] ++ return status, data ++ ++ def getoutput(cmd): ++ """Return output (stdout or stderr) of executing cmd in a shell. ++ ++ Like getstatusoutput(), except the exit status is ignored and the return ++ value is a string containing the command's output. Example: ++ ++ >>> import subprocess ++ >>> subprocess.getoutput('ls /bin/ls') ++ '/bin/ls' ++ """ ++ return getstatusoutput(cmd)[1] ++ ++ _PLATFORM_DEFAULT_CLOSE_FDS = object() ++ ++ class Popen(object): ++ ++ _child_created = False # Set here since __del__ checks it ++ ++ def __init__(self, args, bufsize=-1, executable=None, ++ stdin=None, stdout=None, stderr=None, ++ preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, ++ shell=False, cwd=None, env=None, universal_newlines=False, ++ startupinfo=None, creationflags=0, ++ restore_signals=True, start_new_session=False, ++ pass_fds=()): ++ """Create new Popen instance.""" ++ _cleanup() ++ # Held while anything is calling waitpid before returncode has been ++ # updated to prevent clobbering returncode if wait() or poll() are ++ # called from multiple threads at once. After acquiring the lock, ++ # code must re-check self.returncode to see if another thread just ++ # finished a waitpid() call. ++ self._waitpid_lock = threading.Lock() ++ ++ self._input = None ++ self._communication_started = False ++ if bufsize is None: ++ bufsize = -1 # Restore default ++ if not isinstance(bufsize, int): ++ raise TypeError("bufsize must be an integer") ++ ++ if mswindows: ++ if preexec_fn is not None: ++ raise ValueError("preexec_fn is not supported on Windows " ++ "platforms") ++ any_stdio_set = (stdin is not None or stdout is not None or ++ stderr is not None) ++ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: ++ if any_stdio_set: ++ close_fds = False ++ else: ++ close_fds = True ++ elif close_fds and any_stdio_set: ++ raise ValueError( ++ "close_fds is not supported on Windows platforms" ++ " if you redirect stdin/stdout/stderr") ++ else: ++ # POSIX ++ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: + close_fds = True +- elif close_fds and any_stdio_set: +- raise ValueError( +- "close_fds is not supported on Windows platforms" +- " if you redirect stdin/stdout/stderr") +- else: +- # POSIX +- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: +- close_fds = True +- if pass_fds and not close_fds: +- warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) +- close_fds = True +- if startupinfo is not None: +- raise ValueError("startupinfo is only supported on Windows " +- "platforms") +- if creationflags != 0: +- raise ValueError("creationflags is only supported on Windows " +- "platforms") +- +- self.args = args +- self.stdin = None +- self.stdout = None +- self.stderr = None +- self.pid = None +- self.returncode = None +- self.universal_newlines = universal_newlines +- +- # Input and output objects. The general principle is like +- # this: +- # +- # Parent Child +- # ------ ----- +- # p2cwrite ---stdin---> p2cread +- # c2pread <--stdout--- c2pwrite +- # errread <--stderr--- errwrite +- # +- # On POSIX, the child objects are file descriptors. On +- # Windows, these are Windows file handles. The parent objects +- # are file descriptors on both platforms. The parent objects +- # are -1 when not using PIPEs. The child objects are -1 +- # when not redirecting. +- +- (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) = self._get_handles(stdin, stdout, stderr) +- +- # We wrap OS handles *before* launching the child, otherwise a +- # quickly terminating child could make our fds unwrappable +- # (see #8458). ++ if pass_fds and not close_fds: ++ warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) ++ close_fds = True ++ if startupinfo is not None: ++ raise ValueError("startupinfo is only supported on Windows " ++ "platforms") ++ if creationflags != 0: ++ raise ValueError("creationflags is only supported on Windows " ++ "platforms") ++ ++ self.args = args ++ self.stdin = None ++ self.stdout = None ++ self.stderr = None ++ self.pid = None ++ self.returncode = None ++ self.universal_newlines = universal_newlines ++ ++ # Input and output objects. The general principle is like ++ # this: ++ # ++ # Parent Child ++ # ------ ----- ++ # p2cwrite ---stdin---> p2cread ++ # c2pread <--stdout--- c2pwrite ++ # errread <--stderr--- errwrite ++ # ++ # On POSIX, the child objects are file descriptors. On ++ # Windows, these are Windows file handles. The parent objects ++ # are file descriptors on both platforms. The parent objects ++ # are -1 when not using PIPEs. The child objects are -1 ++ # when not redirecting. ++ ++ (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) = self._get_handles(stdin, stdout, stderr) ++ ++ # We wrap OS handles *before* launching the child, otherwise a ++ # quickly terminating child could make our fds unwrappable ++ # (see #8458). ++ ++ if mswindows: ++ if p2cwrite != -1: ++ p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) ++ if c2pread != -1: ++ c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) ++ if errread != -1: ++ errread = msvcrt.open_osfhandle(errread.Detach(), 0) + +- if mswindows: + if p2cwrite != -1: +- p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) ++ self.stdin = io.open(p2cwrite, 'wb', bufsize) ++ if universal_newlines: ++ self.stdin = io.TextIOWrapper(self.stdin, write_through=True) + if c2pread != -1: +- c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) ++ self.stdout = io.open(c2pread, 'rb', bufsize) ++ if universal_newlines: ++ self.stdout = io.TextIOWrapper(self.stdout) + if errread != -1: +- errread = msvcrt.open_osfhandle(errread.Detach(), 0) +- +- if p2cwrite != -1: +- self.stdin = io.open(p2cwrite, 'wb', bufsize) +- if universal_newlines: +- self.stdin = io.TextIOWrapper(self.stdin, write_through=True) +- if c2pread != -1: +- self.stdout = io.open(c2pread, 'rb', bufsize) +- if universal_newlines: +- self.stdout = io.TextIOWrapper(self.stdout) +- if errread != -1: +- self.stderr = io.open(errread, 'rb', bufsize) +- if universal_newlines: +- self.stderr = io.TextIOWrapper(self.stderr) ++ self.stderr = io.open(errread, 'rb', bufsize) ++ if universal_newlines: ++ self.stderr = io.TextIOWrapper(self.stderr) + +- self._closed_child_pipe_fds = False +- try: +- self._execute_child(args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- restore_signals, start_new_session) +- except: +- # Cleanup if the child failed starting. +- for f in filter(None, (self.stdin, self.stdout, self.stderr)): +- try: +- f.close() +- except OSError: +- pass # Ignore EBADF or other errors. +- +- if not self._closed_child_pipe_fds: +- to_close = [] +- if stdin == PIPE: +- to_close.append(p2cread) +- if stdout == PIPE: +- to_close.append(c2pwrite) +- if stderr == PIPE: +- to_close.append(errwrite) +- if hasattr(self, '_devnull'): +- to_close.append(self._devnull) +- for fd in to_close: ++ self._closed_child_pipe_fds = False ++ try: ++ self._execute_child(args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ restore_signals, start_new_session) ++ except: ++ # Cleanup if the child failed starting. ++ for f in filter(None, (self.stdin, self.stdout, self.stderr)): + try: +- os.close(fd) ++ f.close() + except OSError: +- pass ++ pass # Ignore EBADF or other errors. + +- raise ++ if not self._closed_child_pipe_fds: ++ to_close = [] ++ if stdin == PIPE: ++ to_close.append(p2cread) ++ if stdout == PIPE: ++ to_close.append(c2pwrite) ++ if stderr == PIPE: ++ to_close.append(errwrite) ++ if hasattr(self, '_devnull'): ++ to_close.append(self._devnull) ++ for fd in to_close: ++ try: ++ os.close(fd) ++ except OSError: ++ pass + ++ raise + +- def _translate_newlines(self, data, encoding): +- data = data.decode(encoding) +- return data.replace("\r\n", "\n").replace("\r", "\n") +- +- def __enter__(self): +- return self +- +- def __exit__(self, type, value, traceback): +- if self.stdout: +- self.stdout.close() +- if self.stderr: +- self.stderr.close() +- if self.stdin: +- self.stdin.close() +- # Wait for the process to terminate, to avoid zombies. +- self.wait() +- +- def __del__(self, _maxsize=sys.maxsize): +- if not self._child_created: +- # We didn't get to successfully create a child process. +- return +- # In case the child hasn't been waited on, check if it's done. +- self._internal_poll(_deadstate=_maxsize) +- if self.returncode is None and _active is not None: +- # Child is still running, keep us alive until we can wait on it. +- _active.append(self) +- +- def _get_devnull(self): +- if not hasattr(self, '_devnull'): +- self._devnull = os.open(os.devnull, os.O_RDWR) +- return self._devnull +- +- def communicate(self, input=None, timeout=None): +- """Interact with process: Send data to stdin. Read data from +- stdout and stderr, until end-of-file is reached. Wait for +- process to terminate. The optional input argument should be +- bytes to be sent to the child process, or None, if no data +- should be sent to the child. +- +- communicate() returns a tuple (stdout, stderr).""" +- +- if self._communication_started and input: +- raise ValueError("Cannot send input after starting communication") +- +- # Optimization: If we are not worried about timeouts, we haven't +- # started communicating, and we have one or zero pipes, using select() +- # or threads is unnecessary. +- if (timeout is None and not self._communication_started and +- [self.stdin, self.stdout, self.stderr].count(None) >= 2): +- stdout = None +- stderr = None +- if self.stdin: +- if input: +- try: +- self.stdin.write(input) +- except OSError as e: +- if e.errno != errno.EPIPE and e.errno != errno.EINVAL: +- raise +- self.stdin.close() +- elif self.stdout: +- stdout = _eintr_retry_call(self.stdout.read) +- self.stdout.close() +- elif self.stderr: +- stderr = _eintr_retry_call(self.stderr.read) +- self.stderr.close() +- self.wait() +- else: +- if timeout is not None: +- endtime = _time() + timeout +- else: +- endtime = None + +- try: +- stdout, stderr = self._communicate(input, endtime, timeout) +- finally: +- self._communication_started = True ++ def _translate_newlines(self, data, encoding): ++ data = data.decode(encoding) ++ return data.replace("\r\n", "\n").replace("\r", "\n") + +- sts = self.wait(timeout=self._remaining_time(endtime)) ++ def __enter__(self): ++ return self + +- return (stdout, stderr) ++ def __exit__(self, type, value, traceback): ++ if self.stdout: ++ self.stdout.close() ++ if self.stderr: ++ self.stderr.close() ++ if self.stdin: ++ self.stdin.close() ++ # Wait for the process to terminate, to avoid zombies. ++ self.wait() + ++ def __del__(self, _maxsize=sys.maxsize): ++ if not self._child_created: ++ # We didn't get to successfully create a child process. ++ return ++ # In case the child hasn't been waited on, check if it's done. ++ self._internal_poll(_deadstate=_maxsize) ++ if self.returncode is None and _active is not None: ++ # Child is still running, keep us alive until we can wait on it. ++ _active.append(self) ++ ++ def _get_devnull(self): ++ if not hasattr(self, '_devnull'): ++ self._devnull = os.open(os.devnull, os.O_RDWR) ++ return self._devnull ++ ++ def communicate(self, input=None, timeout=None): ++ """Interact with process: Send data to stdin. Read data from ++ stdout and stderr, until end-of-file is reached. Wait for ++ process to terminate. The optional input argument should be ++ bytes to be sent to the child process, or None, if no data ++ should be sent to the child. ++ ++ communicate() returns a tuple (stdout, stderr).""" ++ ++ if self._communication_started and input: ++ raise ValueError("Cannot send input after starting communication") ++ ++ # Optimization: If we are not worried about timeouts, we haven't ++ # started communicating, and we have one or zero pipes, using select() ++ # or threads is unnecessary. ++ if (timeout is None and not self._communication_started and ++ [self.stdin, self.stdout, self.stderr].count(None) >= 2): ++ stdout = None ++ stderr = None ++ if self.stdin: ++ if input: ++ try: ++ self.stdin.write(input) ++ except OSError as e: ++ if e.errno != errno.EPIPE and e.errno != errno.EINVAL: ++ raise ++ self.stdin.close() ++ elif self.stdout: ++ stdout = _eintr_retry_call(self.stdout.read) ++ self.stdout.close() ++ elif self.stderr: ++ stderr = _eintr_retry_call(self.stderr.read) ++ self.stderr.close() ++ self.wait() ++ else: ++ if timeout is not None: ++ endtime = _time() + timeout ++ else: ++ endtime = None + +- def poll(self): +- return self._internal_poll() ++ try: ++ stdout, stderr = self._communicate(input, endtime, timeout) ++ finally: ++ self._communication_started = True + ++ sts = self.wait(timeout=self._remaining_time(endtime)) + +- def _remaining_time(self, endtime): +- """Convenience for _communicate when computing timeouts.""" +- if endtime is None: +- return None +- else: +- return endtime - _time() ++ return (stdout, stderr) + + +- def _check_timeout(self, endtime, orig_timeout): +- """Convenience for checking if a timeout has expired.""" +- if endtime is None: +- return +- if _time() > endtime: +- raise TimeoutExpired(self.args, orig_timeout) ++ def poll(self): ++ return self._internal_poll() + + +- if mswindows: +- # +- # Windows methods +- # +- def _get_handles(self, stdin, stdout, stderr): +- """Construct and return tuple with IO objects: +- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite +- """ +- if stdin is None and stdout is None and stderr is None: +- return (-1, -1, -1, -1, -1, -1) +- +- p2cread, p2cwrite = -1, -1 +- c2pread, c2pwrite = -1, -1 +- errread, errwrite = -1, -1 +- +- if stdin is None: +- p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) +- if p2cread is None: +- p2cread, _ = _winapi.CreatePipe(None, 0) +- p2cread = Handle(p2cread) +- _winapi.CloseHandle(_) +- elif stdin == PIPE: +- p2cread, p2cwrite = _winapi.CreatePipe(None, 0) +- p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) +- elif stdin == DEVNULL: +- p2cread = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stdin, int): +- p2cread = msvcrt.get_osfhandle(stdin) ++ def _remaining_time(self, endtime): ++ """Convenience for _communicate when computing timeouts.""" ++ if endtime is None: ++ return None + else: +- # Assuming file-like object +- p2cread = msvcrt.get_osfhandle(stdin.fileno()) +- p2cread = self._make_inheritable(p2cread) +- +- if stdout is None: +- c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) +- if c2pwrite is None: +- _, c2pwrite = _winapi.CreatePipe(None, 0) +- c2pwrite = Handle(c2pwrite) +- _winapi.CloseHandle(_) +- elif stdout == PIPE: +- c2pread, c2pwrite = _winapi.CreatePipe(None, 0) +- c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) +- elif stdout == DEVNULL: +- c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stdout, int): +- c2pwrite = msvcrt.get_osfhandle(stdout) +- else: +- # Assuming file-like object +- c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) +- c2pwrite = self._make_inheritable(c2pwrite) +- +- if stderr is None: +- errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) +- if errwrite is None: +- _, errwrite = _winapi.CreatePipe(None, 0) +- errwrite = Handle(errwrite) +- _winapi.CloseHandle(_) +- elif stderr == PIPE: +- errread, errwrite = _winapi.CreatePipe(None, 0) +- errread, errwrite = Handle(errread), Handle(errwrite) +- elif stderr == STDOUT: +- errwrite = c2pwrite +- elif stderr == DEVNULL: +- errwrite = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stderr, int): +- errwrite = msvcrt.get_osfhandle(stderr) +- else: +- # Assuming file-like object +- errwrite = msvcrt.get_osfhandle(stderr.fileno()) +- errwrite = self._make_inheritable(errwrite) +- +- return (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) +- +- +- def _make_inheritable(self, handle): +- """Return a duplicate of handle, which is inheritable""" +- h = _winapi.DuplicateHandle( +- _winapi.GetCurrentProcess(), handle, +- _winapi.GetCurrentProcess(), 0, 1, +- _winapi.DUPLICATE_SAME_ACCESS) +- return Handle(h) +- +- +- def _execute_child(self, args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- unused_restore_signals, unused_start_new_session): +- """Execute program (MS Windows version)""" +- +- assert not pass_fds, "pass_fds not supported on Windows." +- +- if not isinstance(args, str): +- args = list2cmdline(args) +- +- # Process startup details +- if startupinfo is None: +- startupinfo = STARTUPINFO() +- if -1 not in (p2cread, c2pwrite, errwrite): +- startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES +- startupinfo.hStdInput = p2cread +- startupinfo.hStdOutput = c2pwrite +- startupinfo.hStdError = errwrite +- +- if shell: +- startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW +- startupinfo.wShowWindow = _winapi.SW_HIDE +- comspec = os.environ.get("COMSPEC", "cmd.exe") +- args = '{} /c "{}"'.format (comspec, args) ++ return endtime - _time() + +- # Start the process +- try: +- hp, ht, pid, tid = _winapi.CreateProcess(executable, args, +- # no special security +- None, None, +- int(not close_fds), +- creationflags, +- env, +- cwd, +- startupinfo) +- finally: +- # Child is launched. Close the parent's copy of those pipe +- # handles that only the child should have open. You need +- # to make sure that no handles to the write end of the +- # output pipe are maintained in this process or else the +- # pipe will not close when the child process exits and the +- # ReadFile will hang. +- if p2cread != -1: +- p2cread.Close() +- if c2pwrite != -1: +- c2pwrite.Close() +- if errwrite != -1: +- errwrite.Close() +- if hasattr(self, '_devnull'): +- os.close(self._devnull) +- +- # Retain the process handle, but close the thread handle +- self._child_created = True +- self._handle = Handle(hp) +- self.pid = pid +- _winapi.CloseHandle(ht) +- +- def _internal_poll(self, _deadstate=None, +- _WaitForSingleObject=_winapi.WaitForSingleObject, +- _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, +- _GetExitCodeProcess=_winapi.GetExitCodeProcess): +- """Check if child process has terminated. Returns returncode +- attribute. +- +- This method is called by __del__, so it can only refer to objects +- in its local scope. +- +- """ +- if self.returncode is None: +- if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: +- self.returncode = _GetExitCodeProcess(self._handle) +- return self.returncode +- +- +- def wait(self, timeout=None, endtime=None): +- """Wait for child process to terminate. Returns returncode +- attribute.""" +- if endtime is not None: +- timeout = self._remaining_time(endtime) +- if timeout is None: +- timeout_millis = _winapi.INFINITE +- else: +- timeout_millis = int(timeout * 1000) +- if self.returncode is None: +- result = _winapi.WaitForSingleObject(self._handle, +- timeout_millis) +- if result == _winapi.WAIT_TIMEOUT: +- raise TimeoutExpired(self.args, timeout) +- self.returncode = _winapi.GetExitCodeProcess(self._handle) +- return self.returncode +- +- +- def _readerthread(self, fh, buffer): +- buffer.append(fh.read()) +- fh.close() +- +- +- def _communicate(self, input, endtime, orig_timeout): +- # Start reader threads feeding into a list hanging off of this +- # object, unless they've already been started. +- if self.stdout and not hasattr(self, "_stdout_buff"): +- self._stdout_buff = [] +- self.stdout_thread = \ +- threading.Thread(target=self._readerthread, +- args=(self.stdout, self._stdout_buff)) +- self.stdout_thread.daemon = True +- self.stdout_thread.start() +- if self.stderr and not hasattr(self, "_stderr_buff"): +- self._stderr_buff = [] +- self.stderr_thread = \ +- threading.Thread(target=self._readerthread, +- args=(self.stderr, self._stderr_buff)) +- self.stderr_thread.daemon = True +- self.stderr_thread.start() + +- if self.stdin: +- if input is not None: +- try: +- self.stdin.write(input) +- except OSError as e: +- if e.errno == errno.EPIPE: +- # communicate() should ignore pipe full error +- pass +- elif (e.errno == errno.EINVAL +- and self.poll() is not None): +- # Issue #19612: stdin.write() fails with EINVAL +- # if the process already exited before the write +- pass +- else: +- raise +- self.stdin.close() ++ def _check_timeout(self, endtime, orig_timeout): ++ """Convenience for checking if a timeout has expired.""" ++ if endtime is None: ++ return ++ if _time() > endtime: ++ raise TimeoutExpired(self.args, orig_timeout) + +- # Wait for the reader threads, or time out. If we time out, the +- # threads remain reading and the fds left open in case the user +- # calls communicate again. +- if self.stdout is not None: +- self.stdout_thread.join(self._remaining_time(endtime)) +- if self.stdout_thread.is_alive(): +- raise TimeoutExpired(self.args, orig_timeout) +- if self.stderr is not None: +- self.stderr_thread.join(self._remaining_time(endtime)) +- if self.stderr_thread.is_alive(): +- raise TimeoutExpired(self.args, orig_timeout) +- +- # Collect the output from and close both pipes, now that we know +- # both have been read successfully. +- stdout = None +- stderr = None +- if self.stdout: +- stdout = self._stdout_buff +- self.stdout.close() +- if self.stderr: +- stderr = self._stderr_buff +- self.stderr.close() + +- # All data exchanged. Translate lists into strings. +- if stdout is not None: +- stdout = stdout[0] +- if stderr is not None: +- stderr = stderr[0] ++ if mswindows: ++ # ++ # Windows methods ++ # ++ def _get_handles(self, stdin, stdout, stderr): ++ """Construct and return tuple with IO objects: ++ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite ++ """ ++ if stdin is None and stdout is None and stderr is None: ++ return (-1, -1, -1, -1, -1, -1) ++ ++ p2cread, p2cwrite = -1, -1 ++ c2pread, c2pwrite = -1, -1 ++ errread, errwrite = -1, -1 ++ ++ if stdin is None: ++ p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) ++ if p2cread is None: ++ p2cread, _ = _winapi.CreatePipe(None, 0) ++ p2cread = Handle(p2cread) ++ _winapi.CloseHandle(_) ++ elif stdin == PIPE: ++ p2cread, p2cwrite = _winapi.CreatePipe(None, 0) ++ p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) ++ elif stdin == DEVNULL: ++ p2cread = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stdin, int): ++ p2cread = msvcrt.get_osfhandle(stdin) ++ else: ++ # Assuming file-like object ++ p2cread = msvcrt.get_osfhandle(stdin.fileno()) ++ p2cread = self._make_inheritable(p2cread) ++ ++ if stdout is None: ++ c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) ++ if c2pwrite is None: ++ _, c2pwrite = _winapi.CreatePipe(None, 0) ++ c2pwrite = Handle(c2pwrite) ++ _winapi.CloseHandle(_) ++ elif stdout == PIPE: ++ c2pread, c2pwrite = _winapi.CreatePipe(None, 0) ++ c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) ++ elif stdout == DEVNULL: ++ c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stdout, int): ++ c2pwrite = msvcrt.get_osfhandle(stdout) ++ else: ++ # Assuming file-like object ++ c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) ++ c2pwrite = self._make_inheritable(c2pwrite) ++ ++ if stderr is None: ++ errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) ++ if errwrite is None: ++ _, errwrite = _winapi.CreatePipe(None, 0) ++ errwrite = Handle(errwrite) ++ _winapi.CloseHandle(_) ++ elif stderr == PIPE: ++ errread, errwrite = _winapi.CreatePipe(None, 0) ++ errread, errwrite = Handle(errread), Handle(errwrite) ++ elif stderr == STDOUT: ++ errwrite = c2pwrite ++ elif stderr == DEVNULL: ++ errwrite = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stderr, int): ++ errwrite = msvcrt.get_osfhandle(stderr) ++ else: ++ # Assuming file-like object ++ errwrite = msvcrt.get_osfhandle(stderr.fileno()) ++ errwrite = self._make_inheritable(errwrite) ++ ++ return (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) ++ ++ ++ def _make_inheritable(self, handle): ++ """Return a duplicate of handle, which is inheritable""" ++ h = _winapi.DuplicateHandle( ++ _winapi.GetCurrentProcess(), handle, ++ _winapi.GetCurrentProcess(), 0, 1, ++ _winapi.DUPLICATE_SAME_ACCESS) ++ return Handle(h) ++ ++ ++ def _execute_child(self, args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ unused_restore_signals, unused_start_new_session): ++ """Execute program (MS Windows version)""" ++ ++ assert not pass_fds, "pass_fds not supported on Windows." ++ ++ if not isinstance(args, str): ++ args = list2cmdline(args) ++ ++ # Process startup details ++ if startupinfo is None: ++ startupinfo = STARTUPINFO() ++ if -1 not in (p2cread, c2pwrite, errwrite): ++ startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES ++ startupinfo.hStdInput = p2cread ++ startupinfo.hStdOutput = c2pwrite ++ startupinfo.hStdError = errwrite ++ ++ if shell: ++ startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW ++ startupinfo.wShowWindow = _winapi.SW_HIDE ++ comspec = os.environ.get("COMSPEC", "cmd.exe") ++ args = '{} /c "{}"'.format (comspec, args) + +- return (stdout, stderr) ++ # Start the process ++ try: ++ hp, ht, pid, tid = _winapi.CreateProcess(executable, args, ++ # no special security ++ None, None, ++ int(not close_fds), ++ creationflags, ++ env, ++ cwd, ++ startupinfo) ++ finally: ++ # Child is launched. Close the parent's copy of those pipe ++ # handles that only the child should have open. You need ++ # to make sure that no handles to the write end of the ++ # output pipe are maintained in this process or else the ++ # pipe will not close when the child process exits and the ++ # ReadFile will hang. ++ if p2cread != -1: ++ p2cread.Close() ++ if c2pwrite != -1: ++ c2pwrite.Close() ++ if errwrite != -1: ++ errwrite.Close() ++ if hasattr(self, '_devnull'): ++ os.close(self._devnull) ++ ++ # Retain the process handle, but close the thread handle ++ self._child_created = True ++ self._handle = Handle(hp) ++ self.pid = pid ++ _winapi.CloseHandle(ht) ++ ++ def _internal_poll(self, _deadstate=None, ++ _WaitForSingleObject=_winapi.WaitForSingleObject, ++ _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, ++ _GetExitCodeProcess=_winapi.GetExitCodeProcess): ++ """Check if child process has terminated. Returns returncode ++ attribute. ++ ++ This method is called by __del__, so it can only refer to objects ++ in its local scope. ++ ++ """ ++ if self.returncode is None: ++ if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: ++ self.returncode = _GetExitCodeProcess(self._handle) ++ return self.returncode + +- def send_signal(self, sig): +- """Send a signal to the process +- """ +- if sig == signal.SIGTERM: +- self.terminate() +- elif sig == signal.CTRL_C_EVENT: +- os.kill(self.pid, signal.CTRL_C_EVENT) +- elif sig == signal.CTRL_BREAK_EVENT: +- os.kill(self.pid, signal.CTRL_BREAK_EVENT) +- else: +- raise ValueError("Unsupported signal: {}".format(sig)) + +- def terminate(self): +- """Terminates the process +- """ +- try: +- _winapi.TerminateProcess(self._handle, 1) +- except PermissionError: +- # ERROR_ACCESS_DENIED (winerror 5) is received when the +- # process already died. +- rc = _winapi.GetExitCodeProcess(self._handle) +- if rc == _winapi.STILL_ACTIVE: +- raise +- self.returncode = rc ++ def wait(self, timeout=None, endtime=None): ++ """Wait for child process to terminate. Returns returncode ++ attribute.""" ++ if endtime is not None: ++ timeout = self._remaining_time(endtime) ++ if timeout is None: ++ timeout_millis = _winapi.INFINITE ++ else: ++ timeout_millis = int(timeout * 1000) ++ if self.returncode is None: ++ result = _winapi.WaitForSingleObject(self._handle, ++ timeout_millis) ++ if result == _winapi.WAIT_TIMEOUT: ++ raise TimeoutExpired(self.args, timeout) ++ self.returncode = _winapi.GetExitCodeProcess(self._handle) ++ return self.returncode + +- kill = terminate + +- else: +- # +- # POSIX methods +- # +- def _get_handles(self, stdin, stdout, stderr): +- """Construct and return tuple with IO objects: +- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite +- """ +- p2cread, p2cwrite = -1, -1 +- c2pread, c2pwrite = -1, -1 +- errread, errwrite = -1, -1 +- +- if stdin is None: +- pass +- elif stdin == PIPE: +- p2cread, p2cwrite = os.pipe() +- elif stdin == DEVNULL: +- p2cread = self._get_devnull() +- elif isinstance(stdin, int): +- p2cread = stdin +- else: +- # Assuming file-like object +- p2cread = stdin.fileno() ++ def _readerthread(self, fh, buffer): ++ buffer.append(fh.read()) ++ fh.close() ++ ++ ++ def _communicate(self, input, endtime, orig_timeout): ++ # Start reader threads feeding into a list hanging off of this ++ # object, unless they've already been started. ++ if self.stdout and not hasattr(self, "_stdout_buff"): ++ self._stdout_buff = [] ++ self.stdout_thread = \ ++ threading.Thread(target=self._readerthread, ++ args=(self.stdout, self._stdout_buff)) ++ self.stdout_thread.daemon = True ++ self.stdout_thread.start() ++ if self.stderr and not hasattr(self, "_stderr_buff"): ++ self._stderr_buff = [] ++ self.stderr_thread = \ ++ threading.Thread(target=self._readerthread, ++ args=(self.stderr, self._stderr_buff)) ++ self.stderr_thread.daemon = True ++ self.stderr_thread.start() + +- if stdout is None: +- pass +- elif stdout == PIPE: +- c2pread, c2pwrite = os.pipe() +- elif stdout == DEVNULL: +- c2pwrite = self._get_devnull() +- elif isinstance(stdout, int): +- c2pwrite = stdout +- else: +- # Assuming file-like object +- c2pwrite = stdout.fileno() ++ if self.stdin: ++ if input is not None: ++ try: ++ self.stdin.write(input) ++ except OSError as e: ++ if e.errno == errno.EPIPE: ++ # communicate() should ignore pipe full error ++ pass ++ elif (e.errno == errno.EINVAL ++ and self.poll() is not None): ++ # Issue #19612: stdin.write() fails with EINVAL ++ # if the process already exited before the write ++ pass ++ else: ++ raise ++ self.stdin.close() + +- if stderr is None: +- pass +- elif stderr == PIPE: +- errread, errwrite = os.pipe() +- elif stderr == STDOUT: +- errwrite = c2pwrite +- elif stderr == DEVNULL: +- errwrite = self._get_devnull() +- elif isinstance(stderr, int): +- errwrite = stderr +- else: +- # Assuming file-like object +- errwrite = stderr.fileno() ++ # Wait for the reader threads, or time out. If we time out, the ++ # threads remain reading and the fds left open in case the user ++ # calls communicate again. ++ if self.stdout is not None: ++ self.stdout_thread.join(self._remaining_time(endtime)) ++ if self.stdout_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) ++ if self.stderr is not None: ++ self.stderr_thread.join(self._remaining_time(endtime)) ++ if self.stderr_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) + +- return (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) +- +- +- def _close_fds(self, fds_to_keep): +- start_fd = 3 +- for fd in sorted(fds_to_keep): +- if fd >= start_fd: +- os.closerange(start_fd, fd) +- start_fd = fd + 1 +- if start_fd <= MAXFD: +- os.closerange(start_fd, MAXFD) +- +- +- def _execute_child(self, args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- restore_signals, start_new_session): +- """Execute program (POSIX version)""" ++ # Collect the output from and close both pipes, now that we know ++ # both have been read successfully. ++ stdout = None ++ stderr = None ++ if self.stdout: ++ stdout = self._stdout_buff ++ self.stdout.close() ++ if self.stderr: ++ stderr = self._stderr_buff ++ self.stderr.close() + +- if isinstance(args, (str, bytes)): +- args = [args] +- else: +- args = list(args) ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = stdout[0] ++ if stderr is not None: ++ stderr = stderr[0] + +- if shell: +- args = ["/bin/sh", "-c"] + args +- if executable: +- args[0] = executable +- +- if executable is None: +- executable = args[0] +- orig_executable = executable +- +- # For transferring possible exec failure from child to parent. +- # Data format: "exception name:hex errno:description" +- # Pickle is not used; it is complex and involves memory allocation. +- errpipe_read, errpipe_write = os.pipe() +- # errpipe_write must not be in the standard io 0, 1, or 2 fd range. +- low_fds_to_close = [] +- while errpipe_write < 3: +- low_fds_to_close.append(errpipe_write) +- errpipe_write = os.dup(errpipe_write) +- for low_fd in low_fds_to_close: +- os.close(low_fd) +- try: +- try: +- # We must avoid complex work that could involve +- # malloc or free in the child process to avoid +- # potential deadlocks, thus we do all this here. +- # and pass it to fork_exec() +- +- if env is not None: +- env_list = [os.fsencode(k) + b'=' + os.fsencode(v) +- for k, v in env.items()] +- else: +- env_list = None # Use execv instead of execve. +- executable = os.fsencode(executable) +- if os.path.dirname(executable): +- executable_list = (executable,) +- else: +- # This matches the behavior of os._execvpe(). +- executable_list = tuple( +- os.path.join(os.fsencode(dir), executable) +- for dir in os.get_exec_path(env)) +- fds_to_keep = set(pass_fds) +- fds_to_keep.add(errpipe_write) +- self.pid = _posixsubprocess.fork_exec( +- args, executable_list, +- close_fds, sorted(fds_to_keep), cwd, env_list, +- p2cread, p2cwrite, c2pread, c2pwrite, +- errread, errwrite, +- errpipe_read, errpipe_write, +- restore_signals, start_new_session, preexec_fn) +- self._child_created = True +- finally: +- # be sure the FD is closed no matter what +- os.close(errpipe_write) ++ return (stdout, stderr) + +- # self._devnull is not always defined. +- devnull_fd = getattr(self, '_devnull', None) +- if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: +- os.close(p2cread) +- if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: +- os.close(c2pwrite) +- if errwrite != -1 and errread != -1 and errwrite != devnull_fd: +- os.close(errwrite) +- if devnull_fd is not None: +- os.close(devnull_fd) +- # Prevent a double close of these fds from __init__ on error. +- self._closed_child_pipe_fds = True +- +- # Wait for exec to fail or succeed; possibly raising an +- # exception (limited in size) +- errpipe_data = bytearray() +- while True: +- part = _eintr_retry_call(os.read, errpipe_read, 50000) +- errpipe_data += part +- if not part or len(errpipe_data) > 50000: +- break +- finally: +- # be sure the FD is closed no matter what +- os.close(errpipe_read) ++ def send_signal(self, sig): ++ """Send a signal to the process ++ """ ++ if sig == signal.SIGTERM: ++ self.terminate() ++ elif sig == signal.CTRL_C_EVENT: ++ os.kill(self.pid, signal.CTRL_C_EVENT) ++ elif sig == signal.CTRL_BREAK_EVENT: ++ os.kill(self.pid, signal.CTRL_BREAK_EVENT) ++ else: ++ raise ValueError("Unsupported signal: {}".format(sig)) + +- if errpipe_data: ++ def terminate(self): ++ """Terminates the process ++ """ + try: +- _eintr_retry_call(os.waitpid, self.pid, 0) +- except OSError as e: +- if e.errno != errno.ECHILD: ++ _winapi.TerminateProcess(self._handle, 1) ++ except PermissionError: ++ # ERROR_ACCESS_DENIED (winerror 5) is received when the ++ # process already died. ++ rc = _winapi.GetExitCodeProcess(self._handle) ++ if rc == _winapi.STILL_ACTIVE: + raise +- try: +- exception_name, hex_errno, err_msg = ( +- errpipe_data.split(b':', 2)) +- except ValueError: +- exception_name = b'SubprocessError' +- hex_errno = b'0' +- err_msg = (b'Bad exception data from child: ' + +- repr(errpipe_data)) +- child_exception_type = getattr( +- builtins, exception_name.decode('ascii'), +- SubprocessError) +- err_msg = err_msg.decode(errors="surrogatepass") +- if issubclass(child_exception_type, OSError) and hex_errno: +- errno_num = int(hex_errno, 16) +- child_exec_never_called = (err_msg == "noexec") +- if child_exec_never_called: +- err_msg = "" +- if errno_num != 0: +- err_msg = os.strerror(errno_num) +- if errno_num == errno.ENOENT: +- if child_exec_never_called: +- # The error must be from chdir(cwd). +- err_msg += ': ' + repr(cwd) +- else: +- err_msg += ': ' + repr(orig_executable) +- raise child_exception_type(errno_num, err_msg) +- raise child_exception_type(err_msg) ++ self.returncode = rc + ++ kill = terminate + +- def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, +- _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, +- _WEXITSTATUS=os.WEXITSTATUS): +- """All callers to this function MUST hold self._waitpid_lock.""" +- # This method is called (indirectly) by __del__, so it cannot +- # refer to anything outside of its local scope. +- if _WIFSIGNALED(sts): +- self.returncode = -_WTERMSIG(sts) +- elif _WIFEXITED(sts): +- self.returncode = _WEXITSTATUS(sts) +- else: +- # Should never happen +- raise SubprocessError("Unknown child exit status!") ++ else: ++ # ++ # POSIX methods ++ # ++ def _get_handles(self, stdin, stdout, stderr): ++ """Construct and return tuple with IO objects: ++ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite ++ """ ++ p2cread, p2cwrite = -1, -1 ++ c2pread, c2pwrite = -1, -1 ++ errread, errwrite = -1, -1 ++ ++ if stdin is None: ++ pass ++ elif stdin == PIPE: ++ p2cread, p2cwrite = os.pipe() ++ elif stdin == DEVNULL: ++ p2cread = self._get_devnull() ++ elif isinstance(stdin, int): ++ p2cread = stdin ++ else: ++ # Assuming file-like object ++ p2cread = stdin.fileno() ++ ++ if stdout is None: ++ pass ++ elif stdout == PIPE: ++ c2pread, c2pwrite = os.pipe() ++ elif stdout == DEVNULL: ++ c2pwrite = self._get_devnull() ++ elif isinstance(stdout, int): ++ c2pwrite = stdout ++ else: ++ # Assuming file-like object ++ c2pwrite = stdout.fileno() ++ ++ if stderr is None: ++ pass ++ elif stderr == PIPE: ++ errread, errwrite = os.pipe() ++ elif stderr == STDOUT: ++ errwrite = c2pwrite ++ elif stderr == DEVNULL: ++ errwrite = self._get_devnull() ++ elif isinstance(stderr, int): ++ errwrite = stderr ++ else: ++ # Assuming file-like object ++ errwrite = stderr.fileno() + ++ return (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) ++ ++ ++ def _close_fds(self, fds_to_keep): ++ start_fd = 3 ++ for fd in sorted(fds_to_keep): ++ if fd >= start_fd: ++ os.closerange(start_fd, fd) ++ start_fd = fd + 1 ++ if start_fd <= MAXFD: ++ os.closerange(start_fd, MAXFD) ++ ++ ++ def _execute_child(self, args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ restore_signals, start_new_session): ++ """Execute program (POSIX version)""" + +- def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, +- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): +- """Check if child process has terminated. Returns returncode +- attribute. +- +- This method is called by __del__, so it cannot reference anything +- outside of the local scope (nor can any methods it calls). +- +- """ +- if self.returncode is None: +- if not self._waitpid_lock.acquire(False): +- # Something else is busy calling waitpid. Don't allow two +- # at once. We know nothing yet. +- return None ++ if isinstance(args, (str, bytes)): ++ args = [args] ++ else: ++ args = list(args) ++ ++ if shell: ++ args = ["/bin/sh", "-c"] + args ++ if executable: ++ args[0] = executable ++ ++ if executable is None: ++ executable = args[0] ++ orig_executable = executable ++ ++ # For transferring possible exec failure from child to parent. ++ # Data format: "exception name:hex errno:description" ++ # Pickle is not used; it is complex and involves memory allocation. ++ errpipe_read, errpipe_write = os.pipe() ++ # errpipe_write must not be in the standard io 0, 1, or 2 fd range. ++ low_fds_to_close = [] ++ while errpipe_write < 3: ++ low_fds_to_close.append(errpipe_write) ++ errpipe_write = os.dup(errpipe_write) ++ for low_fd in low_fds_to_close: ++ os.close(low_fd) + try: +- if self.returncode is not None: +- return self.returncode # Another thread waited. +- pid, sts = _waitpid(self.pid, _WNOHANG) +- if pid == self.pid: +- self._handle_exitstatus(sts) +- except OSError as e: +- if _deadstate is not None: +- self.returncode = _deadstate +- elif e.errno == _ECHILD: +- # This happens if SIGCLD is set to be ignored or +- # waiting for child processes has otherwise been +- # disabled for our process. This child is dead, we +- # can't get the status. +- # http://bugs.python.org/issue15756 +- self.returncode = 0 ++ try: ++ # We must avoid complex work that could involve ++ # malloc or free in the child process to avoid ++ # potential deadlocks, thus we do all this here. ++ # and pass it to fork_exec() ++ ++ if env is not None: ++ env_list = [os.fsencode(k) + b'=' + os.fsencode(v) ++ for k, v in env.items()] ++ else: ++ env_list = None # Use execv instead of execve. ++ executable = os.fsencode(executable) ++ if os.path.dirname(executable): ++ executable_list = (executable,) ++ else: ++ # This matches the behavior of os._execvpe(). ++ executable_list = tuple( ++ os.path.join(os.fsencode(dir), executable) ++ for dir in os.get_exec_path(env)) ++ fds_to_keep = set(pass_fds) ++ fds_to_keep.add(errpipe_write) ++ self.pid = _posixsubprocess.fork_exec( ++ args, executable_list, ++ close_fds, sorted(fds_to_keep), cwd, env_list, ++ p2cread, p2cwrite, c2pread, c2pwrite, ++ errread, errwrite, ++ errpipe_read, errpipe_write, ++ restore_signals, start_new_session, preexec_fn) ++ self._child_created = True ++ finally: ++ # be sure the FD is closed no matter what ++ os.close(errpipe_write) ++ ++ # self._devnull is not always defined. ++ devnull_fd = getattr(self, '_devnull', None) ++ if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: ++ os.close(p2cread) ++ if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: ++ os.close(c2pwrite) ++ if errwrite != -1 and errread != -1 and errwrite != devnull_fd: ++ os.close(errwrite) ++ if devnull_fd is not None: ++ os.close(devnull_fd) ++ # Prevent a double close of these fds from __init__ on error. ++ self._closed_child_pipe_fds = True ++ ++ # Wait for exec to fail or succeed; possibly raising an ++ # exception (limited in size) ++ errpipe_data = bytearray() ++ while True: ++ part = _eintr_retry_call(os.read, errpipe_read, 50000) ++ errpipe_data += part ++ if not part or len(errpipe_data) > 50000: ++ break + finally: +- self._waitpid_lock.release() +- return self.returncode ++ # be sure the FD is closed no matter what ++ os.close(errpipe_read) ++ ++ if errpipe_data: ++ try: ++ _eintr_retry_call(os.waitpid, self.pid, 0) ++ except OSError as e: ++ if e.errno != errno.ECHILD: ++ raise ++ try: ++ exception_name, hex_errno, err_msg = ( ++ errpipe_data.split(b':', 2)) ++ except ValueError: ++ exception_name = b'SubprocessError' ++ hex_errno = b'0' ++ err_msg = (b'Bad exception data from child: ' + ++ repr(errpipe_data)) ++ child_exception_type = getattr( ++ builtins, exception_name.decode('ascii'), ++ SubprocessError) ++ err_msg = err_msg.decode(errors="surrogatepass") ++ if issubclass(child_exception_type, OSError) and hex_errno: ++ errno_num = int(hex_errno, 16) ++ child_exec_never_called = (err_msg == "noexec") ++ if child_exec_never_called: ++ err_msg = "" ++ if errno_num != 0: ++ err_msg = os.strerror(errno_num) ++ if errno_num == errno.ENOENT: ++ if child_exec_never_called: ++ # The error must be from chdir(cwd). ++ err_msg += ': ' + repr(cwd) ++ else: ++ err_msg += ': ' + repr(orig_executable) ++ raise child_exception_type(errno_num, err_msg) ++ raise child_exception_type(err_msg) + + +- def _try_wait(self, wait_flags): +- """All callers to this function MUST hold self._waitpid_lock.""" +- try: +- (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) +- except OSError as e: +- if e.errno != errno.ECHILD: +- raise +- # This happens if SIGCLD is set to be ignored or waiting +- # for child processes has otherwise been disabled for our +- # process. This child is dead, we can't get the status. +- pid = self.pid +- sts = 0 +- return (pid, sts) +- +- +- def wait(self, timeout=None, endtime=None): +- """Wait for child process to terminate. Returns returncode +- attribute.""" +- if self.returncode is not None: +- return self.returncode ++ def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, ++ _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, ++ _WEXITSTATUS=os.WEXITSTATUS): ++ """All callers to this function MUST hold self._waitpid_lock.""" ++ # This method is called (indirectly) by __del__, so it cannot ++ # refer to anything outside of its local scope. ++ if _WIFSIGNALED(sts): ++ self.returncode = -_WTERMSIG(sts) ++ elif _WIFEXITED(sts): ++ self.returncode = _WEXITSTATUS(sts) ++ else: ++ # Should never happen ++ raise SubprocessError("Unknown child exit status!") + +- # endtime is preferred to timeout. timeout is only used for +- # printing. +- if endtime is not None or timeout is not None: +- if endtime is None: +- endtime = _time() + timeout +- elif timeout is None: +- timeout = self._remaining_time(endtime) + +- if endtime is not None: +- # Enter a busy loop if we have a timeout. This busy loop was +- # cribbed from Lib/threading.py in Thread.wait() at r71065. +- delay = 0.0005 # 500 us -> initial delay of 1 ms +- while True: +- if self._waitpid_lock.acquire(False): +- try: +- if self.returncode is not None: +- break # Another thread waited. +- (pid, sts) = self._try_wait(os.WNOHANG) +- assert pid == self.pid or pid == 0 +- if pid == self.pid: +- self._handle_exitstatus(sts) +- break +- finally: +- self._waitpid_lock.release() +- remaining = self._remaining_time(endtime) +- if remaining <= 0: +- raise TimeoutExpired(self.args, timeout) +- delay = min(delay * 2, remaining, .05) +- time.sleep(delay) +- else: +- while self.returncode is None: +- with self._waitpid_lock: ++ def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, ++ _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): ++ """Check if child process has terminated. Returns returncode ++ attribute. ++ ++ This method is called by __del__, so it cannot reference anything ++ outside of the local scope (nor can any methods it calls). ++ ++ """ ++ if self.returncode is None: ++ if not self._waitpid_lock.acquire(False): ++ # Something else is busy calling waitpid. Don't allow two ++ # at once. We know nothing yet. ++ return None ++ try: + if self.returncode is not None: +- break # Another thread waited. +- (pid, sts) = self._try_wait(0) +- # Check the pid and loop as waitpid has been known to +- # return 0 even without WNOHANG in odd situations. +- # http://bugs.python.org/issue14396. ++ return self.returncode # Another thread waited. ++ pid, sts = _waitpid(self.pid, _WNOHANG) + if pid == self.pid: + self._handle_exitstatus(sts) +- return self.returncode +- +- +- def _communicate(self, input, endtime, orig_timeout): +- if self.stdin and not self._communication_started: +- # Flush stdio buffer. This might block, if the user has +- # been writing to .stdin in an uncontrolled fashion. +- self.stdin.flush() +- if not input: +- self.stdin.close() +- +- stdout = None +- stderr = None ++ except OSError as e: ++ if _deadstate is not None: ++ self.returncode = _deadstate ++ elif e.errno == _ECHILD: ++ # This happens if SIGCLD is set to be ignored or ++ # waiting for child processes has otherwise been ++ # disabled for our process. This child is dead, we ++ # can't get the status. ++ # http://bugs.python.org/issue15756 ++ self.returncode = 0 ++ finally: ++ self._waitpid_lock.release() ++ return self.returncode + +- # Only create this mapping if we haven't already. +- if not self._communication_started: +- self._fileobj2output = {} +- if self.stdout: +- self._fileobj2output[self.stdout] = [] +- if self.stderr: +- self._fileobj2output[self.stderr] = [] + +- if self.stdout: +- stdout = self._fileobj2output[self.stdout] +- if self.stderr: +- stderr = self._fileobj2output[self.stderr] ++ def _try_wait(self, wait_flags): ++ """All callers to this function MUST hold self._waitpid_lock.""" ++ try: ++ (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) ++ except OSError as e: ++ if e.errno != errno.ECHILD: ++ raise ++ # This happens if SIGCLD is set to be ignored or waiting ++ # for child processes has otherwise been disabled for our ++ # process. This child is dead, we can't get the status. ++ pid = self.pid ++ sts = 0 ++ return (pid, sts) ++ ++ ++ def wait(self, timeout=None, endtime=None): ++ """Wait for child process to terminate. Returns returncode ++ attribute.""" ++ if self.returncode is not None: ++ return self.returncode ++ ++ # endtime is preferred to timeout. timeout is only used for ++ # printing. ++ if endtime is not None or timeout is not None: ++ if endtime is None: ++ endtime = _time() + timeout ++ elif timeout is None: ++ timeout = self._remaining_time(endtime) ++ ++ if endtime is not None: ++ # Enter a busy loop if we have a timeout. This busy loop was ++ # cribbed from Lib/threading.py in Thread.wait() at r71065. ++ delay = 0.0005 # 500 us -> initial delay of 1 ms ++ while True: ++ if self._waitpid_lock.acquire(False): ++ try: ++ if self.returncode is not None: ++ break # Another thread waited. ++ (pid, sts) = self._try_wait(os.WNOHANG) ++ assert pid == self.pid or pid == 0 ++ if pid == self.pid: ++ self._handle_exitstatus(sts) ++ break ++ finally: ++ self._waitpid_lock.release() ++ remaining = self._remaining_time(endtime) ++ if remaining <= 0: ++ raise TimeoutExpired(self.args, timeout) ++ delay = min(delay * 2, remaining, .05) ++ time.sleep(delay) ++ else: ++ while self.returncode is None: ++ with self._waitpid_lock: ++ if self.returncode is not None: ++ break # Another thread waited. ++ (pid, sts) = self._try_wait(0) ++ # Check the pid and loop as waitpid has been known to ++ # return 0 even without WNOHANG in odd situations. ++ # http://bugs.python.org/issue14396. ++ if pid == self.pid: ++ self._handle_exitstatus(sts) ++ return self.returncode + +- self._save_input(input) + +- if self._input: +- input_view = memoryview(self._input) ++ def _communicate(self, input, endtime, orig_timeout): ++ if self.stdin and not self._communication_started: ++ # Flush stdio buffer. This might block, if the user has ++ # been writing to .stdin in an uncontrolled fashion. ++ self.stdin.flush() ++ if not input: ++ self.stdin.close() ++ ++ stdout = None ++ stderr = None ++ ++ # Only create this mapping if we haven't already. ++ if not self._communication_started: ++ self._fileobj2output = {} ++ if self.stdout: ++ self._fileobj2output[self.stdout] = [] ++ if self.stderr: ++ self._fileobj2output[self.stderr] = [] + +- with _PopenSelector() as selector: +- if self.stdin and input: +- selector.register(self.stdin, selectors.EVENT_WRITE) + if self.stdout: +- selector.register(self.stdout, selectors.EVENT_READ) ++ stdout = self._fileobj2output[self.stdout] + if self.stderr: +- selector.register(self.stderr, selectors.EVENT_READ) ++ stderr = self._fileobj2output[self.stderr] + +- while selector.get_map(): +- timeout = self._remaining_time(endtime) +- if timeout is not None and timeout < 0: +- raise TimeoutExpired(self.args, orig_timeout) +- +- ready = selector.select(timeout) +- self._check_timeout(endtime, orig_timeout) ++ self._save_input(input) + +- # XXX Rewrite these to use non-blocking I/O on the file +- # objects; they are no longer using C stdio! ++ if self._input: ++ input_view = memoryview(self._input) + +- for key, events in ready: +- if key.fileobj is self.stdin: +- chunk = input_view[self._input_offset : +- self._input_offset + _PIPE_BUF] +- try: +- self._input_offset += os.write(key.fd, chunk) +- except OSError as e: +- if e.errno == errno.EPIPE: +- selector.unregister(key.fileobj) +- key.fileobj.close() ++ with _PopenSelector() as selector: ++ if self.stdin and input: ++ selector.register(self.stdin, selectors.EVENT_WRITE) ++ if self.stdout: ++ selector.register(self.stdout, selectors.EVENT_READ) ++ if self.stderr: ++ selector.register(self.stderr, selectors.EVENT_READ) ++ ++ while selector.get_map(): ++ timeout = self._remaining_time(endtime) ++ if timeout is not None and timeout < 0: ++ raise TimeoutExpired(self.args, orig_timeout) ++ ++ ready = selector.select(timeout) ++ self._check_timeout(endtime, orig_timeout) ++ ++ # XXX Rewrite these to use non-blocking I/O on the file ++ # objects; they are no longer using C stdio! ++ ++ for key, events in ready: ++ if key.fileobj is self.stdin: ++ chunk = input_view[self._input_offset : ++ self._input_offset + _PIPE_BUF] ++ try: ++ self._input_offset += os.write(key.fd, chunk) ++ except OSError as e: ++ if e.errno == errno.EPIPE: ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ else: ++ raise + else: +- raise +- else: +- if self._input_offset >= len(self._input): ++ if self._input_offset >= len(self._input): ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ elif key.fileobj in (self.stdout, self.stderr): ++ data = os.read(key.fd, 32768) ++ if not data: + selector.unregister(key.fileobj) + key.fileobj.close() +- elif key.fileobj in (self.stdout, self.stderr): +- data = os.read(key.fd, 32768) +- if not data: +- selector.unregister(key.fileobj) +- key.fileobj.close() +- self._fileobj2output[key.fileobj].append(data) +- +- self.wait(timeout=self._remaining_time(endtime)) +- +- # All data exchanged. Translate lists into strings. +- if stdout is not None: +- stdout = b''.join(stdout) +- if stderr is not None: +- stderr = b''.join(stderr) +- +- # Translate newlines, if requested. +- # This also turns bytes into strings. +- if self.universal_newlines: +- if stdout is not None: +- stdout = self._translate_newlines(stdout, +- self.stdout.encoding) +- if stderr is not None: +- stderr = self._translate_newlines(stderr, +- self.stderr.encoding) ++ self._fileobj2output[key.fileobj].append(data) + +- return (stdout, stderr) ++ self.wait(timeout=self._remaining_time(endtime)) + ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = b''.join(stdout) ++ if stderr is not None: ++ stderr = b''.join(stderr) + +- def _save_input(self, input): +- # This method is called from the _communicate_with_*() methods +- # so that if we time out while communicating, we can continue +- # sending input if we retry. +- if self.stdin and self._input is None: +- self._input_offset = 0 +- self._input = input +- if self.universal_newlines and input is not None: +- self._input = self._input.encode(self.stdin.encoding) +- +- +- def send_signal(self, sig): +- """Send a signal to the process +- """ +- os.kill(self.pid, sig) +- +- def terminate(self): +- """Terminate the process with SIGTERM +- """ +- self.send_signal(signal.SIGTERM) +- +- def kill(self): +- """Kill the process with SIGKILL +- """ +- self.send_signal(signal.SIGKILL) ++ # Translate newlines, if requested. ++ # This also turns bytes into strings. ++ if self.universal_newlines: ++ if stdout is not None: ++ stdout = self._translate_newlines(stdout, ++ self.stdout.encoding) ++ if stderr is not None: ++ stderr = self._translate_newlines(stderr, ++ self.stderr.encoding) ++ ++ return (stdout, stderr) ++ ++ ++ def _save_input(self, input): ++ # This method is called from the _communicate_with_*() methods ++ # so that if we time out while communicating, we can continue ++ # sending input if we retry. ++ if self.stdin and self._input is None: ++ self._input_offset = 0 ++ self._input = input ++ if self.universal_newlines and input is not None: ++ self._input = self._input.encode(self.stdin.encoding) ++ ++ ++ def send_signal(self, sig): ++ """Send a signal to the process ++ """ ++ os.kill(self.pid, sig) ++ ++ def terminate(self): ++ """Terminate the process with SIGTERM ++ """ ++ self.send_signal(signal.SIGTERM) ++ ++ def kill(self): ++ """Kill the process with SIGKILL ++ """ ++ self.send_signal(signal.SIGKILL) +diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py +--- orig/Lib/test/__main__.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/__main__.py 2015-05-04 07:57:38.000000000 +0800 +@@ -1,3 +1,5 @@ ++import sys + from test import regrtest + +-regrtest.main_in_temp_cwd() ++result = regrtest.main_in_temp_cwd() ++sys.exit(result) +diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py +--- orig/Lib/test/regrtest.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/regrtest.py 2015-05-04 07:58:07.000000000 +0800 +@@ -538,7 +538,7 @@ + sys.stdout.flush() + print() # Force a newline (just in case) + print(json.dumps(result)) +- sys.exit(0) ++ return 0 + + good = [] + bad = [] +@@ -678,7 +678,7 @@ + from threading import Thread + except ImportError: + print("Multiprocess option requires thread support") +- sys.exit(2) ++ return 2 + from queue import Queue + debug_output_pat = re.compile(r"\[\d+ refs, \d+ blocks\]$") + output = Queue() +@@ -840,7 +840,7 @@ + if ns.runleaks: + os.system("leaks %d" % os.getpid()) + +- sys.exit(len(bad) > 0 or interrupted) ++ return (len(bad) > 0 or interrupted) + + + # small set of tests to determine if we have a basically functioning interpreter +@@ -1561,7 +1561,9 @@ + # change the CWD, the original CWD will be used. The original CWD is + # available from support.SAVEDCWD. + with support.temp_cwd(test_cwd, quiet=True): +- main() ++ result = main() ++ ++ return result + + + if __name__ == '__main__': +@@ -1586,4 +1588,5 @@ + # sanity check + assert __file__ == os.path.abspath(sys.argv[0]) + +- main_in_temp_cwd() ++ result = main_in_temp_cwd() ++ sys.exit(retval) +diff -Nru orig/Lib/test/script_helper.py modified/Lib/test/script_helper.py +--- orig/Lib/test/script_helper.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/script_helper.py 2015-05-04 14:42:40.000000000 +0800 +@@ -10,12 +10,15 @@ + import py_compile + import contextlib + import shutil ++import unittest + import zipfile + + from importlib.util import source_from_cache + from test.support import make_legacy_pyc, strip_python_stderr, temp_dir + ++ + # Executing the interpreter in a subprocess ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _assert_python(expected_success, *args, **env_vars): + if '__isolated' in env_vars: + isolated = env_vars.pop('__isolated') +@@ -55,6 +58,7 @@ + "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore'))) + return rc, out, err + ++ + def assert_python_ok(*args, **env_vars): + """ + Assert that running the interpreter with `args` and optional environment +@@ -68,6 +72,7 @@ + """ + return _assert_python(True, *args, **env_vars) + ++ + def assert_python_failure(*args, **env_vars): + """ + Assert that running the interpreter with `args` and optional environment +@@ -78,6 +83,8 @@ + """ + return _assert_python(False, *args, **env_vars) + ++ ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): + """Run a Python subprocess with the given arguments. + +@@ -98,6 +105,7 @@ + stdout=stdout, stderr=stderr, + **kw) + ++ + def kill_python(p): + """Run the given Popen process until completion and return stdout.""" + p.stdin.close() +@@ -109,6 +117,7 @@ + subprocess._cleanup() + return data + ++ + def make_script(script_dir, script_basename, source, omit_suffix=False): + script_filename = script_basename + if not omit_suffix: +@@ -121,6 +130,7 @@ + importlib.invalidate_caches() + return script_name + ++ + def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None): + zip_filename = zip_basename+os.extsep+'zip' + zip_name = os.path.join(zip_dir, zip_filename) +@@ -142,10 +152,12 @@ + # zip_file.close() + return zip_name, os.path.join(zip_name, name_in_zip) + ++ + def make_pkg(pkg_dir, init_source=''): + os.mkdir(pkg_dir) + make_script(pkg_dir, '__init__', init_source) + ++ + def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, + source, depth=1, compiled=False): + unlink = [] +diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.py +--- orig/Lib/test/support/__init__.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/support/__init__.py 2015-05-04 13:16:34.000000000 +0800 +@@ -778,8 +778,8 @@ + + # TESTFN_UNICODE is a non-ascii filename + TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" +-if sys.platform == 'darwin': +- # In Mac OS X's VFS API file names are, by definition, canonically ++if sys.platform in ('darwin', 'ios'): ++ # In iOS and Mac OS X, VFS API file names are, by definition, canonically + # decomposed Unicode, encoded using UTF-8. See QA1173: + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + import unicodedata +@@ -805,8 +805,8 @@ + 'Unicode filename tests may not be effective' + % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) + TESTFN_UNENCODABLE = None +-# Mac OS X denies unencodable filenames (invalid utf-8) +-elif sys.platform != 'darwin': ++# Mac OS X and iOS deny unencodable filenames (invalid utf-8) ++elif sys.platform not in ('darwin', 'ios'): + try: + # ascii and utf-8 cannot encode the byte 0xff + b'\xff'.decode(TESTFN_ENCODING) +diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py +--- orig/Lib/test/test_base64.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_base64.py 2015-05-04 14:42:53.000000000 +0800 +@@ -5,7 +5,6 @@ + import os + import sys + import subprocess +-import struct + from array import array + + +@@ -622,7 +621,7 @@ + self.assertTrue(issubclass(binascii.Error, ValueError)) + + +- ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + class TestMain(unittest.TestCase): + def tearDown(self): + if os.path.exists(support.TESTFN): +@@ -658,7 +657,6 @@ + self.assertEqual(output.rstrip(), b'a\xffb') + + +- + def test_main(): + support.run_unittest(__name__) + +diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py +--- orig/Lib/test/test_capi.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_capi.py 2015-05-04 14:42:39.000000000 +0800 +@@ -44,6 +44,7 @@ + self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") + + @unittest.skipUnless(threading, 'Threading required for this test.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_no_FatalError_infinite_loop(self): + with support.SuppressCrashReport(): + p = subprocess.Popen([sys.executable, "-c", +@@ -433,6 +434,7 @@ + self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, + (), {}, b'', [42]) + ++ + @unittest.skipUnless(threading, 'Threading required for this test.') + class TestThreadState(unittest.TestCase): + +diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py +--- orig/Lib/test/test_cmd_line.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_cmd_line.py 2015-05-04 14:43:14.000000000 +0800 +@@ -56,6 +56,7 @@ + rc, out, err = assert_python_ok('-vv') + self.assertNotIn(b'stack overflow', err) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_xoptions(self): + def get_xoptions(*args): + # use subprocess module directly because test.script_helper adds +@@ -72,6 +73,7 @@ + opts = get_xoptions('-Xa', '-Xb=c,d=e') + self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_showrefcount(self): + def run_python(*args): + # this is similar to assert_python_ok but doesn't strip +@@ -145,6 +147,7 @@ + # arguments as unicode (using wmain() instead of main()). + @unittest.skipIf(sys.platform == 'win32', + 'Windows has a native unicode API') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_undecodable_code(self): + undecodable = b"\xff" + env = os.environ.copy() +@@ -209,6 +212,7 @@ + ) + check_output(text) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_unbuffered_output(self): + # Test expected operation of the '-u' switch + for stream in ('stdout', 'stderr'): +@@ -268,6 +272,7 @@ + # for empty and unset PYTHONPATH + self.assertEqual(out1, out2) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_displayhook_unencodable(self): + for encoding in ('ascii', 'latin-1', 'utf-8'): + env = os.environ.copy() +@@ -286,6 +291,7 @@ + escaped = repr(text).encode(encoding, 'backslashreplace') + self.assertIn(escaped, data) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def check_input(self, code, expected): + with tempfile.NamedTemporaryFile("wb+") as stdin: + sep = os.linesep.encode('ASCII') +@@ -357,6 +363,7 @@ + # Issue #7111: Python should work without standard streams + + @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _test_no_stdio(self, streams): + code = """if 1: + import os, sys +diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py +--- orig/Lib/test/test_doctest.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_doctest.py 2015-04-27 21:32:27.000000000 +0800 +@@ -2657,7 +2657,12 @@ + TestResults(failed=1, attempted=1) + """ + +-def test_CLI(): r""" ++if sys.platform == 'ios': ++ # Mobile platforms can't invoke doctest from the command line, ++ # so skip this test. ++ pass ++else: ++ def test_CLI(): r""" + The doctest module can be used to run doctests against an arbitrary file. + These tests test this CLI functionality. + +diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py +--- orig/Lib/test/test_faulthandler.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_faulthandler.py 2015-05-04 14:45:25.000000000 +0800 +@@ -7,7 +7,6 @@ + import subprocess + import sys + from test import support, script_helper +-from test.script_helper import assert_python_ok + import tempfile + import unittest + from textwrap import dedent +@@ -20,6 +19,7 @@ + + TIMEOUT = 0.5 + ++ + def expected_traceback(lineno1, lineno2, header, min_count=1): + regex = header + regex += ' File "", line %s in func\n' % lineno1 +@@ -29,6 +29,7 @@ + else: + return '^' + regex + '$' + ++ + @contextmanager + def temporary_filename(): + filename = tempfile.mktemp() +@@ -37,6 +38,7 @@ + finally: + support.unlink(filename) + ++ + class FaultHandlerTests(unittest.TestCase): + def get_output(self, code, filename=None): + """ +@@ -247,6 +249,7 @@ + finally: + sys.stderr = orig_stderr + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_disabled_by_default(self): + # By default, the module should be disabled + code = "import faulthandler; print(faulthandler.is_enabled())" +@@ -255,6 +258,7 @@ + output = subprocess.check_output(args) + self.assertEqual(output.rstrip(), b"False") + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_sys_xoptions(self): + # Test python -X faulthandler + code = "import faulthandler; print(faulthandler.is_enabled())" +@@ -263,6 +267,7 @@ + output = subprocess.check_output(args) + self.assertEqual(output.rstrip(), b"True") + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_env_var(self): + # empty env var + code = "import faulthandler; print(faulthandler.is_enabled())" +diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py +--- orig/Lib/test/test_fcntl.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_fcntl.py 2015-04-27 21:44:57.000000000 +0800 +@@ -23,7 +23,7 @@ + start_len = "qq" + + if (sys.platform.startswith(('netbsd', 'freebsd', 'openbsd', 'bsdos')) +- or sys.platform == 'darwin'): ++ or sys.platform in ('darwin', 'ios')): + if struct.calcsize('l') == 8: + off_t = 'l' + pid_t = 'i' +@@ -45,12 +45,15 @@ + + lockdata = get_lockdata() + ++ + class BadFile: + def __init__(self, fn): + self.fn = fn ++ + def fileno(self): + return self.fn + ++ + class TestFcntl(unittest.TestCase): + + def setUp(self): +diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py +--- orig/Lib/test/test_file_eintr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_file_eintr.py 2015-05-04 14:42:38.000000000 +0800 +@@ -68,6 +68,7 @@ + self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % + (why, stdout.decode(), stderr.decode())) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _test_reading(self, data_to_write, read_and_verify_code): + """Generic buffered read method test harness to validate EINTR behavior. + +diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py +--- orig/Lib/test/test_gc.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_gc.py 2015-05-04 14:42:37.000000000 +0800 +@@ -633,6 +633,8 @@ + del x + gc.set_debug(%s) + """ ++ ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def run_command(code): + p = subprocess.Popen([sys.executable, "-Wd", "-c", code], + stdout=subprocess.PIPE, +diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py +--- orig/Lib/test/test_gdb.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_gdb.py 2015-05-03 00:05:45.000000000 +0800 +@@ -28,6 +28,9 @@ + # This is what "no gdb" looks like. There may, however, be other + # errors that manifest this way too. + raise unittest.SkipTest("Couldn't find gdb on the path") ++except AttributeError: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version) + gdb_major_version = int(gdb_version_number.group(1)) + gdb_minor_version = int(gdb_version_number.group(2)) +diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py +--- orig/Lib/test/test_getpass.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_getpass.py 2015-05-02 22:48:44.000000000 +0800 +@@ -1,5 +1,6 @@ + import getpass + import os ++import sys + import unittest + from io import BytesIO, StringIO, TextIOWrapper + from unittest import mock +@@ -14,6 +15,7 @@ + except ImportError: + pwd = None + ++ + @mock.patch('os.environ') + class GetpassGetuserTest(unittest.TestCase): + +diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py +--- orig/Lib/test/test_httpservers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_httpservers.py 2015-04-28 10:16:55.000000000 +0800 +@@ -277,11 +277,11 @@ + with open(os.path.join(self.tempdir, filename), 'wb') as f: + f.write(support.TESTFN_UNDECODABLE) + response = self.request(self.tempdir_name + '/') +- if sys.platform == 'darwin': ++ if sys.platform in ('darwin', 'ios'): + # On Mac OS the HFS+ filesystem replaces bytes that aren't valid + # UTF-8 into a percent-encoded value. + for name in os.listdir(self.tempdir): +- if name != 'test': # Ignore a filename created in setUp(). ++ if name != 'test': # Ignore a filename created in setUp(). + filename = name + break + body = self.check_status_and_reason(response, 200) +@@ -550,6 +550,7 @@ + def log_message(self, format, *args): + pass + ++ + class RejectingSocketlessRequestHandler(SocketlessRequestHandler): + def handle_expect_100(self): + self.send_error(417) +@@ -580,7 +581,7 @@ + + HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK') + +- def setUp (self): ++ def setUp(self): + self.handler = SocketlessRequestHandler() + + def send_typical_request(self, message): +@@ -731,6 +732,7 @@ + self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n') + self.assertFalse(self.handler.get_called) + ++ + class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): + """ Test url parsing """ + def setUp(self): +diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py +--- orig/Lib/test/test_imp.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_imp.py 2015-04-30 10:07:30.000000000 +0800 +@@ -19,7 +19,7 @@ + """Decorator to skip a test if not running under CPython or lacking + imp.load_dynamic().""" + meth = support.cpython_only(meth) +- return unittest.skipIf(not hasattr(imp, 'load_dynamic'), ++ return unittest.skipIf(not getattr(imp, 'load_dynamic'), + 'imp.load_dynamic() required')(meth) + + +diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/test/test_importlib/extension/test_finder.py +--- orig/Lib/test/test_importlib/extension/test_finder.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_finder.py 2015-04-30 22:06:18.000000000 +0800 +@@ -4,11 +4,13 @@ + + machinery = test_util.import_importlib('importlib.machinery') + ++import sys + import unittest + import warnings + + # XXX find_spec tests + ++@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') + class FinderTests(abc.FinderTests): + + """Test the finder for extension modules.""" +diff -Nru orig/Lib/test/test_importlib/extension/test_loader.py modified/Lib/test/test_importlib/extension/test_loader.py +--- orig/Lib/test/test_importlib/extension/test_loader.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_loader.py 2015-04-30 21:52:11.000000000 +0800 +@@ -10,6 +10,7 @@ + import unittest + + ++@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') + class LoaderTests(abc.LoaderTests): + + """Test load_module() for extension modules.""" +diff -Nru orig/Lib/test/test_importlib/source/test_case_sensitivity.py modified/Lib/test/test_importlib/source/test_case_sensitivity.py +--- orig/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-05-02 19:23:40.000000000 +0800 +@@ -63,18 +63,22 @@ + self.assertIsNotNone(insensitive) + self.assertIn(self.name, insensitive.get_filename(self.name)) + ++ + class CaseSensitivityTestPEP302(CaseSensitivityTest): + def find(self, finder): + return finder.find_module(self.name) + ++ + Frozen_CaseSensitivityTestPEP302, Source_CaseSensitivityTestPEP302 = util.test_both( + CaseSensitivityTestPEP302, importlib=importlib, machinery=machinery) + ++ + class CaseSensitivityTestPEP451(CaseSensitivityTest): + def find(self, finder): + found = finder.find_spec(self.name) + return found.loader if found is not None else found + ++ + Frozen_CaseSensitivityTestPEP451, Source_CaseSensitivityTestPEP451 = util.test_both( + CaseSensitivityTestPEP451, importlib=importlib, machinery=machinery) + +diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py +--- orig/Lib/test/test_io.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_io.py 2015-05-04 10:09:23.000000000 +0800 +@@ -420,7 +420,7 @@ + # On Windows and Mac OSX this test comsumes large resources; It takes + # a long time to build the >2GB file and takes >2GB of disk space + # therefore the resource must be enabled to run this test. +- if sys.platform[:3] == 'win' or sys.platform == 'darwin': ++ if sys.platform[:3] == 'win' or sys.platform in ('darwin', 'ios'): + support.requires( + 'largefile', + 'test requires %s bytes and a long time to run' % self.LARGE) +@@ -688,6 +688,7 @@ + support.gc_collect() + self.assertTrue(wr() is None, wr) + ++ + class PyIOTest(IOTest): + pass + +diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py +--- orig/Lib/test/test_json/test_tool.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_json/test_tool.py 2015-05-04 14:42:37.000000000 +0800 +@@ -6,6 +6,7 @@ + from test import support + from test.script_helper import assert_python_ok + ++ + class TestTool(unittest.TestCase): + data = """ + +@@ -37,6 +38,7 @@ + ] + """) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_stdin_stdout(self): + with subprocess.Popen( + (sys.executable, '-m', 'json.tool'), +diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py +--- orig/Lib/test/test_keyword.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_keyword.py 2015-05-04 14:42:36.000000000 +0800 +@@ -46,6 +46,7 @@ + fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) + fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _generate_keywords(self, grammar_file, target_keyword_py_file): + proc = subprocess.Popen([sys.executable, + KEYWORD_FILE, +diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py +--- orig/Lib/test/test_mailcap.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_mailcap.py 2015-05-04 14:35:55.000000000 +0800 +@@ -1,6 +1,7 @@ + import mailcap + import os + import shutil ++import sys + import test.support + import unittest + +@@ -190,7 +191,7 @@ + ] + self._run_cases(cases) + +- @unittest.skipUnless(os.name == "posix", "Requires 'test' command on system") ++ @unittest.skipUnless(os.name == "posix" and sys.platform != 'ios', "Requires 'test' command on system") + def test_test(self): + # findmatch() will automatically check any "test" conditions and skip + # the entry if the check fails. +diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py +--- orig/Lib/test/test_marshal.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_marshal.py 2015-05-04 10:29:33.000000000 +0800 +@@ -190,7 +190,10 @@ + if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'): + MAX_MARSHAL_STACK_DEPTH = 1500 + else: +- MAX_MARSHAL_STACK_DEPTH = 2000 ++ if sys.platform == 'ios': ++ MAX_MARSHAL_STACK_DEPTH = 1500 ++ else: ++ MAX_MARSHAL_STACK_DEPTH = 2000 + for i in range(MAX_MARSHAL_STACK_DEPTH - 2): + last.append([0]) + last = last[-1] +diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py +--- orig/Lib/test/test_mmap.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_mmap.py 2015-05-04 13:15:53.000000000 +0800 +@@ -229,7 +229,7 @@ + with open(TESTFN, "r+b") as f: + self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4) + +- if os.name == "posix": ++ if os.name == "posix" and sys.platform != 'ios': + # Try incompatible flags, prot and access parameters. + with open(TESTFN, "r+b") as f: + self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, +@@ -718,7 +718,7 @@ + unlink(TESTFN) + + def _make_test_file(self, num_zeroes, tail): +- if sys.platform[:3] == 'win' or sys.platform == 'darwin': ++ if sys.platform[:3] == 'win' or sys.platform in ('darwin', 'ios'): + requires('largefile', + 'test requires %s bytes and a long time to run' % str(0x180000000)) + f = open(TESTFN, 'w+b') +diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py +--- orig/Lib/test/test_os.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_os.py 2015-05-04 14:42:36.000000000 +0800 +@@ -555,6 +555,7 @@ + + # Bug 1110478 + @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_update2(self): + os.environ.clear() + os.environ.update(HELLO="World") +@@ -563,6 +564,7 @@ + self.assertEqual(value, "World") + + @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_os_popen_iter(self): + with os.popen( + "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: +@@ -1147,6 +1149,7 @@ + os.execve = orig_execve + os.defpath = orig_defpath + ++@unittest.skipUnless(hasattr(os, 'execv'), "os module doesn't provide execvpe()") + class ExecTests(unittest.TestCase): + @unittest.skipIf(USING_LINUXTHREADS, + "avoid triggering a linuxthreads bug: see issue #4970") +@@ -1398,6 +1401,7 @@ + self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) + + @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_setreuid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). +@@ -1406,6 +1410,7 @@ + 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) + + @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_setregid(self): + if os.getuid() != 0 and not HAVE_WHEEL_GROUP: + self.assertRaises(OSError, os.setregid, 0, 0) +@@ -1413,6 +1418,7 @@ + self.assertRaises(OverflowError, os.setregid, 0, 1<<32) + + @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_setregid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). +@@ -1838,6 +1844,7 @@ + + class PidTests(unittest.TestCase): + @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_getppid(self): + p = subprocess.Popen([sys.executable, '-c', + 'import os; print(os.getppid())'], +@@ -2295,6 +2302,7 @@ + self.assertGreaterEqual(size.columns, 0) + self.assertGreaterEqual(size.lines, 0) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_stty_match(self): + """Check if stty returns the same results + +diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py +--- orig/Lib/test/test_pdb.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pdb.py 2015-05-04 14:42:35.000000000 +0800 +@@ -910,6 +910,7 @@ + + class PdbTestCase(unittest.TestCase): + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def run_pdb(self, script, commands): + """Run 'script' lines with pdb and the pdb 'commands'.""" + filename = 'main.py' +@@ -957,6 +958,7 @@ + ('bar', 4), + ) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_issue7964(self): + # open the file as binary so we can force \r\n newline + with open(support.TESTFN, 'wb') as f: +@@ -1008,6 +1010,7 @@ + any('main.py(5)foo()->None' in l for l in stdout.splitlines()), + 'Fail to step into the caller after a return') + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_issue13210(self): + # invoking "continue" on a non-main thread triggered an exception + # inside signal.signal +diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py +--- orig/Lib/test/test_pep277.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pep277.py 2015-05-04 13:16:06.000000000 +0800 +@@ -27,7 +27,7 @@ + # these normal forms. For example, HFS Plus uses a variant of Normal Form D + # in which U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through + # U+2FAFF are not decomposed." +-if sys.platform != 'darwin': ++if sys.platform not in ('darwin', 'ios'): + filenames.extend([ + # Specific code points: NFC(fn), NFD(fn), NFKC(fn) and NFKD(fn) all differents + '11_\u0385\u03d3\u03d4', +@@ -117,11 +117,11 @@ + os.stat(name) + self._apply_failure(os.listdir, name, self._listdir_failure) + +- # Skip the test on darwin, because darwin does normalize the filename to ++ # Skip the test on darwin/iOS, because darwin does normalize the filename to + # NFD (a variant of Unicode NFD form). Normalize the filename to NFC, NFKC, + # NFKD in Python is useless, because darwin will normalize it later and so + # open(), os.stat(), etc. don't raise any exception. +- @unittest.skipIf(sys.platform == 'darwin', 'irrelevant test on Mac OS X') ++ @unittest.skipIf(sys.platform in ('darwin', 'ios'), 'irrelevant test on Mac OS X') + def test_normalize(self): + files = set(self.files) + others = set() +@@ -136,10 +136,10 @@ + self._apply_failure(os.remove, name) + self._apply_failure(os.listdir, name) + +- # Skip the test on darwin, because darwin uses a normalization different ++ # Skip the test on darwin/iOS, because darwin uses a normalization different + # than Python NFD normalization: filenames are different even if we use + # Python NFD normalization. +- @unittest.skipIf(sys.platform == 'darwin', 'irrelevant test on Mac OS X') ++ @unittest.skipIf(sys.platform in ('darwin', 'ios'), 'irrelevant test on Mac OS X') + def test_listdir(self): + sf0 = set(self.files) + with warnings.catch_warnings(): +diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py +--- orig/Lib/test/test_pipes.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pipes.py 2015-05-02 21:03:07.000000000 +0800 +@@ -1,17 +1,21 @@ + import pipes + import os + import string ++import sys + import unittest + from test.support import TESTFN, run_unittest, unlink, reap_children + + if os.name != 'posix': + raise unittest.SkipTest('pipes module only works on posix') ++if sys.platform == 'ios': ++ raise unittest.SkipTest('pipes tests cannot run on iOS') + + TESTFN2 = TESTFN + "2" + + # tr a-z A-Z is not portable, so make the ranges explicit + s_command = 'tr %s %s' % (string.ascii_lowercase, string.ascii_uppercase) + ++ + class SimplePipeTests(unittest.TestCase): + def tearDown(self): + for f in (TESTFN, TESTFN2): +diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py +--- orig/Lib/test/test_platform.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_platform.py 2015-05-04 14:43:41.000000000 +0800 +@@ -9,11 +9,13 @@ + + from test import support + ++ + class PlatformTest(unittest.TestCase): + def test_architecture(self): + res = platform.architecture() + + @support.skip_unless_symlink ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_architecture_via_symlink(self): # issue3762 + # On Windows, the EXE needs to know where pythonXY.dll is at so we have + # to add the directory to the path. +@@ -187,7 +189,7 @@ + def test_mac_ver(self): + res = platform.mac_ver() + +- if platform.uname().system == 'Darwin': ++ if platform.uname().system == 'Darwin' and sys.platform != 'ios': + # We're on a MacOSX system, check that + # the right version information is returned + fd = os.popen('sw_vers', 'r') +@@ -216,7 +218,6 @@ + else: + self.assertEqual(res[2], 'PowerPC') + +- + @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") + def test_mac_ver_with_fork(self): + # Issue7895: platform.mac_ver() crashes when using fork without exec +@@ -265,6 +266,7 @@ + ): + self.assertEqual(platform._parse_release_file(input), output) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_popen(self): + mswindows = (sys.platform == "win32") + +diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py +--- orig/Lib/test/test_poll.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_poll.py 2015-05-04 14:43:49.000000000 +0800 +@@ -25,6 +25,7 @@ + match.append(fd) + return match + ++ + class PollTests(unittest.TestCase): + + def test_poll1(self): +@@ -121,6 +122,7 @@ + # Another test case for poll(). This is copied from the test case for + # select(), modified to use poll() instead. + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_poll2(self): + cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, +diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py +--- orig/Lib/test/test_popen.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_popen.py 2015-05-04 14:42:34.000000000 +0800 +@@ -5,7 +5,9 @@ + + import unittest + from test import support +-import os, sys ++import os ++import subprocess ++import sys + + # Test that command-lines get down as we expect. + # To do this we execute: +@@ -16,6 +18,8 @@ + if ' ' in python: + python = '"' + python + '"' # quote embedded space for cmdline + ++ ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + class PopenTest(unittest.TestCase): + + def _do_test_commandline(self, cmdline, expected): +@@ -23,7 +27,7 @@ + cmd = cmd % (python, cmdline) + with os.popen(cmd) as p: + data = p.read() +- got = eval(data)[1:] # strip off argv[0] ++ got = eval(data)[1:] # strip off argv[0] + self.assertEqual(got, expected) + + def test_popen(self): +@@ -57,6 +61,7 @@ + with os.popen("echo hello") as f: + self.assertEqual(list(f), ["hello\n"]) + ++ + def test_main(): + support.run_unittest(PopenTest) + +diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py +--- orig/Lib/test/test_posix.py 2015-05-02 23:43:12.000000000 +0800 ++++ modified/Lib/test/test_posix.py 2015-05-04 14:42:33.000000000 +0800 +@@ -12,8 +12,8 @@ + import fcntl + import platform + import pwd +-import shutil + import stat ++import subprocess + import tempfile + import unittest + import warnings +@@ -21,6 +21,7 @@ + _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(), + support.TESTFN + '-dummy-symlink') + ++ + class PosixTester(unittest.TestCase): + + def setUp(self): +@@ -492,9 +493,10 @@ + check_stat(uid, gid) + self.assertRaises(OSError, chown_func, first_param, 0, -1) + check_stat(uid, gid) +- if 0 not in os.getgroups(): +- self.assertRaises(OSError, chown_func, first_param, -1, 0) +- check_stat(uid, gid) ++ if hasattr(os, 'getgroups'): ++ if 0 not in os.getgroups(): ++ self.assertRaises(OSError, chown_func, first_param, -1, 0) ++ check_stat(uid, gid) + # test illegal types + for t in str, float: + self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) +@@ -754,8 +756,8 @@ + group = pwd.getpwuid(os.getuid())[3] + self.assertIn(group, posix.getgrouplist(user, group)) + +- + @unittest.skipUnless(hasattr(os, 'getegid'), "test needs os.getegid()") ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_getgroups(self): + with os.popen('id -G 2>/dev/null') as idg: + groups = idg.read().strip() +diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py +--- orig/Lib/test/test_pty.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pty.py 2015-05-04 14:42:26.000000000 +0800 +@@ -110,7 +110,7 @@ + os.close(slave_fd) + os.close(master_fd) + +- ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") + def test_fork(self): + debug("calling pty.fork()") + pid, master_fd = pty.fork() +diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py +--- orig/Lib/test/test_quopri.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_quopri.py 2015-05-04 14:42:33.000000000 +0800 +@@ -174,6 +174,7 @@ + for p, e in self.HSTRINGS: + self.assertEqual(quopri.decodestring(e, header=True), p) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_scriptencode(self): + (p, e) = self.STRINGS[-1] + process = subprocess.Popen([sys.executable, "-mquopri"], +@@ -190,6 +191,7 @@ + self.assertEqual(cout[i], e[i]) + self.assertEqual(cout, e) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_scriptdecode(self): + (p, e) = self.STRINGS[-1] + process = subprocess.Popen([sys.executable, "-mquopri", "-d"], +diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py +--- orig/Lib/test/test_select.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_select.py 2015-05-04 14:42:32.000000000 +0800 +@@ -1,11 +1,13 @@ + import errno + import os + import select ++import subprocess + import sys + import unittest + from test import support + +-@unittest.skipIf((sys.platform[:3]=='win'), ++ ++@unittest.skipIf((sys.platform[:3] == 'win'), + "can't easily test on this system") + class SelectTestCase(unittest.TestCase): + +@@ -44,6 +46,7 @@ + self.assertIsNot(r, x) + self.assertIsNot(w, x) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_select(self): + cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' + p = os.popen(cmd, 'r') +diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py +--- orig/Lib/test/test_shutil.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2015-05-04 14:44:01.000000000 +0800 +@@ -48,6 +48,7 @@ + except ImportError: + ZIP_SUPPORT = find_executable('zip') + ++ + def _fake_rename(*args, **kwargs): + # Pretend the destination path is on a different filesystem. + raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") +@@ -1741,6 +1742,7 @@ + self.assertEqual(size.lines, 888) + + @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_stty_match(self): + """Check if stty returns the same results ignoring env + +diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py +--- orig/Lib/test/test_signal.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_signal.py 2015-05-04 14:42:31.000000000 +0800 +@@ -135,6 +135,7 @@ + @unittest.skipIf(sys.platform=='freebsd6', + 'inter process signals not reliable (do not mix well with threading) ' + 'on freebsd6') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_main(self): + # This function spawns a child process to insulate the main + # test-running process from all the signals. It then +diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py +--- orig/Lib/test/test_site.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_site.py 2015-05-04 14:44:06.000000000 +0800 +@@ -31,6 +31,7 @@ + os.makedirs(site.USER_SITE) + site.addsitedir(site.USER_SITE) + ++ + class HelperFunctionsTests(unittest.TestCase): + """Tests for helper functions. + """ +@@ -164,6 +165,7 @@ + + @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " + "user-site (site.ENABLE_USER_SITE)") ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_s_option(self): + usersite = site.USER_SITE + self.assertIn(usersite, sys.path) +@@ -322,6 +324,7 @@ + """Restore sys.path""" + sys.path[:] = self.sys_path + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_abs_paths(self): + # Make sure all imported modules have their __file__ and __cached__ + # attributes as absolute paths. Arranging to put the Lib directory on +@@ -432,6 +435,7 @@ + + class StartupImportTests(unittest.TestCase): + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_startup_imports(self): + # This tests checks which modules are loaded by Python when it + # initially starts upon startup. +diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py +--- orig/Lib/test/test_source_encoding.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_source_encoding.py 2015-05-04 14:44:09.000000000 +0800 +@@ -7,6 +7,7 @@ + import sys + import subprocess + ++ + class SourceEncodingTest(unittest.TestCase): + + def test_pep263(self): +@@ -59,6 +60,7 @@ + # two bytes in common with the UTF-8 BOM + self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_20731(self): + sub = subprocess.Popen([sys.executable, + os.path.join(os.path.dirname(__file__), +diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py +--- orig/Lib/test/test_subprocess.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_subprocess.py 2015-05-02 21:04:07.000000000 +0800 +@@ -26,6 +26,9 @@ + + mswindows = (sys.platform == "win32") + ++if not hasattr(subprocess, 'Popen'): ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + # + # Depends on the following external programs: Python + # +diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py +--- orig/Lib/test/test_sundry.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sundry.py 2015-04-30 10:12:55.000000000 +0800 +@@ -20,7 +20,8 @@ + + import distutils.bcppcompiler + import distutils.ccompiler +- import distutils.cygwinccompiler ++ if sys.platform.startswith('win'): ++ import distutils.cygwinccompiler + import distutils.filelist + if sys.platform.startswith('win'): + import distutils.msvccompiler +diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py +--- orig/Lib/test/test_sys.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sys.py 2015-05-04 14:44:19.000000000 +0800 +@@ -20,6 +20,7 @@ + except ImportError: + threading = None + ++ + class SysModuleTest(unittest.TestCase): + + def setUp(self): +@@ -216,6 +217,7 @@ + finally: + sys.setrecursionlimit(oldlimit) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_recursionlimit_fatalerror(self): + # A fatal error occurs if a second recursion limit is hit when recovering + # from a first one. +@@ -542,6 +544,7 @@ + def test_clear_type_cache(self): + sys._clear_type_cache() + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_ioencoding(self): + env = dict(os.environ) + +@@ -587,6 +590,7 @@ + + @unittest.skipUnless(test.support.FS_NONASCII, + 'requires OS support of non-ASCII encodings') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_ioencoding_nonascii(self): + env = dict(os.environ) + +@@ -599,6 +603,7 @@ + + @unittest.skipIf(sys.base_prefix != sys.prefix, + 'Test is not venv-compatible') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_executable(self): + # sys.executable should be absolute + self.assertEqual(os.path.abspath(sys.executable), sys.executable) +diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py +--- orig/Lib/test/test_sysconfig.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2015-05-04 14:44:23.000000000 +0800 +@@ -15,6 +15,7 @@ + get_scheme_names, get_config_var, _main) + import _osx_support + ++ + class TestSysConfig(unittest.TestCase): + + def setUp(self): +@@ -239,6 +240,7 @@ + self.assertEqual(get_scheme_names(), wanted) + + @skip_unless_symlink ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_symlink(self): + # On Windows, the EXE needs to know where pythonXY.dll is at so we have + # to add the directory to the path. +diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py +--- orig/Lib/test/test_thread.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_thread.py 2015-05-04 14:44:49.000000000 +0800 +@@ -14,12 +14,14 @@ + + _print_mutex = thread.allocate_lock() + ++ + def verbose_print(arg): + """Helper function for printing out debugging output.""" + if support.verbose: + with _print_mutex: + print(arg) + ++ + class BasicThreadTest(unittest.TestCase): + + def setUp(self): +@@ -219,6 +221,7 @@ + + @unittest.skipIf(sys.platform.startswith('win'), + "This test is only appropriate for POSIX-like systems.") ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") + @support.reap_threads + def test_forkinthread(self): + def thread1(): +diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py +--- orig/Lib/test/test_threading.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_threading.py 2015-05-02 16:19:47.000000000 +0800 +@@ -825,6 +825,7 @@ + + class SubinterpThreadingTests(BaseTestCase): + ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't have os.pipe") + def test_threads_join(self): + # Non-daemon threads should be joined at subinterpreter shutdown + # (issue #18808) +@@ -848,6 +849,7 @@ + # The thread was joined properly. + self.assertEqual(os.read(r, 1), b"x") + ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't have os.pipe") + def test_threads_join_2(self): + # Same as above, but a delay gets introduced after the thread's + # Python code returned but before the thread state is deleted. +diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py +--- orig/Lib/test/test_traceback.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_traceback.py 2015-05-04 14:42:29.000000000 +0800 +@@ -1,6 +1,7 @@ + """Test cases for traceback module""" + + from io import StringIO ++import subprocess + import sys + import unittest + import re +@@ -101,11 +102,12 @@ + err = traceback.format_exception_only(None, None) + self.assertEqual(err, ['None\n']) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_encoded_file(self): + # Test that tracebacks are correctly printed for encoded source files: + # - correct line number (Issue2384) + # - respect file encoding (Issue3975) +- import tempfile, sys, subprocess, os ++ import tempfile, sys, os + + # The spawned subprocess has its stdout redirected to a PIPE, and its + # encoding may be different from the current interpreter, on Windows +diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py +--- orig/Lib/test/test_unicodedata.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_unicodedata.py 2015-05-04 14:42:28.000000000 +0800 +@@ -222,8 +222,10 @@ + self.assertEqual(eaw('\u2010'), 'A') + self.assertEqual(eaw('\U00020000'), 'W') + ++ + class UnicodeMiscTest(UnicodeDatabaseTest): + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_failed_import_during_compiling(self): + # Issue 4367 + # Decoding \N escapes requires the unicodedata module. If it can't be +diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py +--- orig/Lib/test/test_urllib2net.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_urllib2net.py 2015-05-04 13:16:45.000000000 +0800 +@@ -156,6 +156,7 @@ + + ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) + ++ @unittest.skipIf(ssl is None, 'test requires ssl module') + def test_urlwithfrag(self): + urlwith_frag = "https://docs.python.org/2/glossary.html#glossary" + with support.transient_internet(urlwith_frag): +@@ -164,6 +165,7 @@ + self.assertEqual(res.geturl(), + "https://docs.python.org/2/glossary.html#glossary") + ++ @unittest.skipIf(ssl is None, 'test requires ssl module') + def test_redirect_url_withfrag(self): + redirect_url_with_frag = "http://bit.ly/1iSHToT" + with support.transient_internet(redirect_url_with_frag): +diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py +--- orig/Lib/test/test_uuid.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_uuid.py 2015-05-04 14:44:34.000000000 +0800 +@@ -3,9 +3,11 @@ + import builtins + import io + import os ++import subprocess + import shutil + import uuid + ++ + def importable(name): + try: + __import__(name) +@@ -13,6 +15,7 @@ + except: + return False + ++ + class TestUUID(unittest.TestCase): + last_node = None + source2node = {} +@@ -314,6 +317,7 @@ + TestUUID.last_node = node + + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_ifconfig_getnode(self): + node = uuid._ifconfig_getnode() + if node is not None: +@@ -472,6 +476,7 @@ + equal(str(u), v) + + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") + def testIssue8621(self): + # On at least some versions of OSX uuid.uuid4 generates + # the same sequence of UUIDs in the parent and any +diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py +--- orig/Lib/test/test_venv.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_venv.py 2015-05-04 14:44:42.000000000 +0800 +@@ -15,7 +15,6 @@ + import tempfile + from test.support import (captured_stdout, captured_stderr, run_unittest, + can_symlink, EnvironmentVarGuard) +-import textwrap + import unittest + import venv + +@@ -36,6 +35,7 @@ + def failsOnWindows(f): + return f + ++ + class BaseTest(unittest.TestCase): + """Base class for venv tests.""" + +@@ -112,6 +112,7 @@ + self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) + + @skipInVenv ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_prefixes(self): + """ + Test that the prefix values are as expected. +@@ -250,6 +251,7 @@ + # point to the venv being used to run the test, and we lose the link + # to the source build - so Python can't initialise properly. + @skipInVenv ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_executable(self): + """ + Test that the sys.executable value is as expected. +@@ -264,6 +266,7 @@ + self.assertEqual(out.strip(), envpy.encode()) + + @unittest.skipUnless(can_symlink(), 'Needs symlinks') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_executable_symlinks(self): + """ + Test that the sys.executable value is as expected. +@@ -282,6 +285,7 @@ + @skipInVenv + class EnsurePipTest(BaseTest): + """Test venv module installation of pip.""" ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def assert_pip_not_installed(self): + envpy = os.path.join(os.path.realpath(self.env_dir), + self.bindir, self.exe) +@@ -320,6 +324,7 @@ + + # Requesting pip fails without SSL (http://bugs.python.org/issue19744) + @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_with_pip(self): + shutil.rmtree(self.env_dir) + with EnvironmentVarGuard() as envvars: +diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py +--- orig/Lib/test/test_webbrowser.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_webbrowser.py 2015-04-30 10:04:24.000000000 +0800 +@@ -2,8 +2,11 @@ + import unittest + import subprocess + from unittest import mock ++import sys + from test import support + ++if sys.platform == 'ios': ++ raise unittest.SkipTest("Can't run webbrowser tests on iOS") + + URL = 'http://www.example.com/' + CMD_NAME = 'test' +diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_break.py +--- orig/Lib/unittest/test/test_break.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/unittest/test/test_break.py 2015-04-27 09:20:54.000000000 +0800 +@@ -9,7 +9,7 @@ + + + @unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") +-@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") ++@unittest.skipIf(sys.platform == "win32", "Test cannot run on Windows") + @unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " + "if threads have been used") + class TestBreak(unittest.TestCase): +diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py +--- orig/Lib/unittest/test/test_runner.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/unittest/test/test_runner.py 2015-05-04 14:42:27.000000000 +0800 +@@ -270,6 +270,7 @@ + expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) + self.assertEqual(runner._makeResult(), expectedresult) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_warnings(self): + """ + Check that warnings argument of TextTestRunner correctly affects the +diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py +--- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 +@@ -602,6 +602,57 @@ + register("firefox", None, MacOSXOSAScript('firefox'), -1) + register("MacOSX", None, MacOSXOSAScript('default'), -1) + ++# ++# Platform support for iOS ++# ++if sys.platform == 'ios': ++ class MobileSafari(BaseBrowser): ++ def open(self, url, new=0, autoraise=True): ++ # This code is the equivalent of: ++ # NSURL *nsurl = [NSURL URLWithString:url]; ++ # [[UIApplication sharedApplication] openURL:nsurl]; ++ from ctypes import cdll, c_void_p, c_char_p, c_uint32 ++ from ctypes import util ++ objc = cdll.LoadLibrary(util.find_library(b'objc')) ++ cf = cdll.LoadLibrary(util.find_library(b'CoreFoundation')) ++ objc.objc_getClass.restype = c_void_p ++ objc.objc_getClass.argtypes = [c_char_p] ++ objc.sel_registerName.restype = c_void_p ++ objc.sel_registerName.argtypes = [c_char_p] ++ cf.CFStringCreateWithCString.restype = c_void_p ++ cf.CFStringCreateWithCString.argtypes = [c_void_p, c_char_p, c_uint32] ++ ++ # Get an NSString describing the URL ++ kCFStringEncodingUTF8 = 0x08000100 ++ url = c_void_p(cf.CFStringCreateWithCString(None, url.encode('utf-8'), kCFStringEncodingUTF8)) ++ autorelease = c_void_p(objc.sel_registerName(b'autorelease')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] ++ objc.objc_msgSend.restype = c_void_p ++ objc.objc_msgSend(url, autorelease) ++ ++ # Get an NSURL object representing the URL ++ NSURL = c_void_p(objc.objc_getClass(b'NSURL')) ++ urlWithString_ = c_void_p(objc.sel_registerName(b'URLWithString:')) ++ objc.objc_msgSend.restype = c_void_p ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] ++ nsurl = c_void_p(objc.objc_msgSend(NSURL, urlWithString_, url)) ++ ++ # Get the shared UIApplication instance ++ UIApplication = c_void_p(objc.objc_getClass(b'UIApplication')) ++ sharedApplication = c_void_p(objc.sel_registerName(b'sharedApplication')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] ++ objc.objc_msgSend.restype = c_void_p ++ shared_app = c_void_p(objc.objc_msgSend(UIApplication, sharedApplication)) ++ ++ # Open the URL on the shared application ++ openURL_ = c_void_p(objc.sel_registerName(b'openURL:')) ++ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] ++ objc.objc_msgSend.restype = None ++ objc.objc_msgSend(shared_app, openURL_, nsurl) ++ ++ return True ++ ++ register("mobilesafari", None, MobileSafari(), -1) + + # OK, now that we know what the default preference orders for each + # platform are, allow user to override them with the BROWSER variable. +diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +--- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.embedded 2015-04-27 14:10:46.000000000 +0800 +@@ -0,0 +1,82 @@ ++##################################################################### ++# Static compilation instructions for all binary modules. ++##################################################################### ++ ++_bisect _bisectmodule.c ++_codecs_cn cjkcodecs/_codecs_cn.c ++_codecs_hk cjkcodecs/_codecs_hk.c ++_codecs_iso2022 cjkcodecs/_codecs_iso2022.c ++_codecs_jp cjkcodecs/_codecs_jp.c ++_codecs_kr cjkcodecs/_codecs_kr.c ++_codecs_tw cjkcodecs/_codecs_tw.c ++_crypt _cryptmodule.c ++_csv _csv.c ++_datetime _datetimemodule.c ++_elementtree _elementtree.c \ ++ -I$(srcdir)/Modules/expat ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++_heapq _heapqmodule.c ++_json _json.c ++_lsprof _lsprof.o rotatingtree.c ++_md5 md5module.c ++_multibytecodec cjkcodecs/multibytecodec.c ++_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c ++_opcode _opcode.c ++_pickle _pickle.c ++_posixsubprocess _posixsubprocess.c ++_random _randommodule.c ++_sha1 sha1module.c ++_sha256 sha256module.c ++_sha512 sha512module.c ++_socket socketmodule.c ++_struct _struct.c ++array arraymodule.c ++audioop audioop.c ++binascii binascii.c ++cmath cmathmodule.c _math.c ++fcntl fcntlmodule.c ++grp grpmodule.c ++math mathmodule.c ++mmap mmapmodule.c ++parser parsermodule.c ++pyexpat expat/xmlparse.c \ ++ expat/xmlrole.c \ ++ expat/xmltok.c \ ++ pyexpat.c \ ++ -I$(srcdir)/Modules/expat \ ++ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI ++resource resource.c ++select selectmodule.c ++syslog syslogmodule.c ++termios termios.c ++time timemodule.c ++unicodedata unicodedata.c ++zlib zlibmodule.c -I$(prefix)/include -lz ++ ++##################################################################### ++# Testing modules ++##################################################################### ++_ctypes_test _ctypes/_ctypes_test.c ++_testbuffer _testbuffer.c ++_testcapi _testcapimodule.c ++_testimportmultiple _testimportmultiple.c ++ ++##################################################################### ++# Modules that require additional frameworks ++##################################################################### ++#_bz2 bz2module.c -lbz2 ++#_curses _cursesmodule.c -lcurses -ltermcap ++#_curses_panel _curses_panel.c -lpanel -lncurses ++#_dbm _dbmmodule.c ++#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm ++#_lzma ++#_sqlite3 ++#_ssl _ssl.c \ ++# -I$(SSL)/include -I$(SSL)/include/openssl \ ++# -L$(SSL)/lib -lssl -lcrypto ++# -DUSE_SSL ++#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... ++#nis nismodule.c -lnsl ++#ossaudiodev ++#readline readline.c -lreadline -ltermcap ++#spwd spwdmodule.c +diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 +--- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-aarch64 2015-04-26 11:31:03.000000000 +0800 +@@ -0,0 +1,34 @@ ++ ++##################################################################### ++# iOS ARM64: Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios_aarch64/prep_cif.c \ ++ _ctypes/libffi_ios_aarch64/raw_api.c \ ++ _ctypes/libffi_ios_aarch64/java_raw_api.c \ ++ _ctypes/libffi_ios_aarch64/closures.c \ ++ _ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c \ ++ _ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios_aarch64/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 +diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm +--- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-arm 2015-04-26 11:31:08.000000000 +0800 +@@ -0,0 +1,35 @@ ++ ++##################################################################### ++# iOS ARMv7: Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/arm/ffi_armv7.c \ ++ _ctypes/libffi_ios/arm/sysv_armv7.S \ ++ _ctypes/libffi_ios/arm/trampoline_armv7.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_32=1 -DANSI=1 +diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 +--- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-i386 2015-04-26 11:31:06.000000000 +0800 +@@ -0,0 +1,35 @@ ++ ++##################################################################### ++# iOS i386 Simulator: Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/x86/ffi_i386.c \ ++ _ctypes/libffi_ios/x86/darwin_i386.S \ ++ _ctypes/libffi_ios/x86/win32_i386.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_32=1 -DANSI=1 +diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 +--- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/Setup.ios-x86_64 2015-04-26 11:31:11.000000000 +0800 +@@ -0,0 +1,34 @@ ++ ++##################################################################### ++# iOS x86_64 Simulator: Platform specific configuration ++##################################################################### ++_ctypes _ctypes/_ctypes.c \ ++ _ctypes/callbacks.c \ ++ _ctypes/callproc.c \ ++ _ctypes/stgdict.c \ ++ _ctypes/cfield.c \ ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/x86/ffi64_x86_64.c \ ++ _ctypes/libffi_ios/x86/darwin64_x86_64.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include ++ ++_decimal _decimal/_decimal.c \ ++ _decimal/libmpdec/basearith.c \ ++ _decimal/libmpdec/constants.c \ ++ _decimal/libmpdec/context.c \ ++ _decimal/libmpdec/convolute.c \ ++ _decimal/libmpdec/crt.c \ ++ _decimal/libmpdec/difradix2.c \ ++ _decimal/libmpdec/fnt.c \ ++ _decimal/libmpdec/fourstep.c \ ++ _decimal/libmpdec/io.c \ ++ _decimal/libmpdec/memory.c \ ++ _decimal/libmpdec/mpdecimal.c \ ++ _decimal/libmpdec/numbertheory.c \ ++ _decimal/libmpdec/sixstep.c \ ++ _decimal/libmpdec/transpose.c \ ++ -I$(srcdir)/Modules/_decimal/libmpdec \ ++ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 +diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE +--- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-04-26 07:29:16.000000000 +0800 +@@ -0,0 +1,21 @@ ++libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. ++See source files for details. ++ ++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: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++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. +diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README +--- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README 2015-04-26 07:29:13.000000000 +0800 +@@ -0,0 +1,447 @@ ++Status ++====== ++ ++libffi-3.2.1 was released on November 12, 2014. Check the libffi web ++page for updates: . ++ ++ ++What is libffi? ++=============== ++ ++Compilers for high level languages generate code that follow certain ++conventions. These conventions are necessary, in part, for separate ++compilation to work. One such convention is the "calling ++convention". The "calling convention" is essentially a set of ++assumptions made by the compiler about where function arguments will ++be found on entry to a function. A "calling convention" also specifies ++where the return value for a function is found. ++ ++Some programs may not know at the time of compilation what arguments ++are to be passed to a function. For instance, an interpreter may be ++told at run-time about the number and types of arguments used to call ++a given function. Libffi can be used in such programs to provide a ++bridge from the interpreter program to compiled code. ++ ++The libffi library provides a portable, high level programming ++interface to various calling conventions. This allows a programmer to ++call any function specified by a call interface description at run ++time. ++ ++FFI stands for Foreign Function Interface. A foreign function ++interface is the popular name for the interface that allows code ++written in one language to call code written in another language. The ++libffi library really only provides the lowest, machine dependent ++layer of a fully featured foreign function interface. A layer must ++exist above libffi that handles type conversions for values passed ++between the two languages. ++ ++ ++Supported Platforms ++=================== ++ ++Libffi has been ported to many different platforms. ++For specific configuration details and testing status, please ++refer to the wiki page here: ++ ++ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 ++ ++At the time of release, the following basic configurations have been ++tested: ++ ++|-----------------+------------------+-------------------------| ++| Architecture | Operating System | Compiler | ++|-----------------+------------------+-------------------------| ++| AArch64 (ARM64) | iOS | Clang | ++| AArch64 | Linux | GCC | ++| Alpha | Linux | GCC | ++| Alpha | Tru64 | GCC | ++| ARC | Linux | GCC | ++| ARM | Linux | GCC | ++| ARM | iOS | GCC | ++| AVR32 | Linux | GCC | ++| Blackfin | uClinux | GCC | ++| HPPA | HPUX | GCC | ++| IA-64 | Linux | GCC | ++| M68K | FreeMiNT | GCC | ++| M68K | Linux | GCC | ++| M68K | RTEMS | GCC | ++| M88K | OpenBSD/mvme88k | GCC | ++| Meta | Linux | GCC | ++| MicroBlaze | Linux | GCC | ++| MIPS | IRIX | GCC | ++| MIPS | Linux | GCC | ++| MIPS | RTEMS | GCC | ++| MIPS64 | Linux | GCC | ++| Moxie | Bare metal | GCC | ++| Nios II | Linux | GCC | ++| OpenRISC | Linux | GCC | ++| PowerPC 32-bit | AIX | IBM XL C | ++| PowerPC 64-bit | AIX | IBM XL C | ++| PowerPC | AMIGA | GCC | ++| PowerPC | Linux | GCC | ++| PowerPC | Mac OSX | GCC | ++| PowerPC | FreeBSD | GCC | ++| PowerPC 64-bit | FreeBSD | GCC | ++| PowerPC 64-bit | Linux ELFv1 | GCC | ++| PowerPC 64-bit | Linux ELFv2 | GCC | ++| S390 | Linux | GCC | ++| S390X | Linux | GCC | ++| SPARC | Linux | GCC | ++| SPARC | Solaris | GCC | ++| SPARC | Solaris | Oracle Solaris Studio C | ++| SPARC64 | Linux | GCC | ++| SPARC64 | FreeBSD | GCC | ++| SPARC64 | Solaris | Oracle Solaris Studio C | ++| TILE-Gx/TILEPro | Linux | GCC | ++| VAX | OpenBSD/vax | GCC | ++| X86 | FreeBSD | GCC | ++| X86 | GNU HURD | GCC | ++| X86 | Interix | GCC | ++| X86 | kFreeBSD | GCC | ++| X86 | Linux | GCC | ++| X86 | Mac OSX | GCC | ++| X86 | OpenBSD | GCC | ++| X86 | OS/2 | GCC | ++| X86 | Solaris | GCC | ++| X86 | Solaris | Oracle Solaris Studio C | ++| X86 | Windows/Cygwin | GCC | ++| X86 | Windows/MingW | GCC | ++| X86-64 | FreeBSD | GCC | ++| X86-64 | Linux | GCC | ++| X86-64 | Linux/x32 | GCC | ++| X86-64 | OpenBSD | GCC | ++| X86-64 | Solaris | Oracle Solaris Studio C | ++| X86-64 | Windows/Cygwin | GCC | ++| X86-64 | Windows/MingW | GCC | ++| Xtensa | Linux | GCC | ++|-----------------+------------------+-------------------------| ++ ++Please send additional platform test results to ++libffi-discuss@sourceware.org and feel free to update the wiki page ++above. ++ ++Installing libffi ++================= ++ ++First you must configure the distribution for your particular ++system. Go to the directory you wish to build libffi in and run the ++"configure" program found in the root directory of the libffi source ++distribution. ++ ++If you're building libffi directly from version control, configure won't ++exist yet; run ./autogen.sh first. ++ ++You may want to tell configure where to install the libffi library and ++header files. To do that, use the --prefix configure switch. Libffi ++will install under /usr/local by default. ++ ++If you want to enable extra run-time debugging checks use the the ++--enable-debug configure switch. This is useful when your program dies ++mysteriously while using libffi. ++ ++Another useful configure switch is --enable-purify-safety. Using this ++will add some extra code which will suppress certain warnings when you ++are using Purify with libffi. Only use this switch when using ++Purify, as it will slow down the library. ++ ++It's also possible to build libffi on Windows platforms with ++Microsoft's Visual C++ compiler. In this case, use the msvcc.sh ++wrapper script during configuration like so: ++ ++path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" ++ ++For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and ++CXX="path/to/msvcc.sh -m64". You may also need to specify --build ++appropriately. ++ ++It is also possible to build libffi on Windows platforms with the LLVM ++project's clang-cl compiler, like below: ++ ++path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" ++ ++When building with MSVC under a MingW environment, you may need to ++remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' ++command. ('cygpath' is not present in MingW, and is not required when ++using MingW-style paths.) ++ ++For iOS builds, the 'libffi.xcodeproj' Xcode project is available. ++ ++Configure has many other options. Use "configure --help" to see them all. ++ ++Once configure has finished, type "make". Note that you must be using ++GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . ++ ++To ensure that libffi is working as advertised, type "make check". ++This will require that you have DejaGNU installed. ++ ++To install the library and header files, type "make install". ++ ++ ++History ++======= ++ ++See the git log for details at http://github.com/atgreen/libffi. ++ ++3.2.1 Nov-12-14 ++ Build fix for non-iOS AArch64 targets. ++ ++3.2 Nov-11-14 ++ Add C99 Complex Type support (currently only supported on ++ s390). ++ Add support for PASCAL and REGISTER calling conventions on x86 ++ Windows/Linux. ++ Add OpenRISC and Cygwin-64 support. ++ Bug fixes. ++ ++3.1 May-19-14 ++ Add AArch64 (ARM64) iOS support. ++ Add Nios II support. ++ Add m88k and DEC VAX support. ++ Add support for stdcall, thiscall, and fastcall on non-Windows ++ 32-bit x86 targets such as Linux. ++ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi ++ fixes. ++ Make the testsuite more robust: eliminate several spurious ++ failures, and respect the $CC and $CXX environment variables. ++ Archive off the manually maintained ChangeLog in favor of git ++ log. ++ ++3.0.13 Mar-17-13 ++ Add Meta support. ++ Add missing Moxie bits. ++ Fix stack alignment bug on 32-bit x86. ++ Build fix for m68000 targets. ++ Build fix for soft-float Power targets. ++ Fix the install dir location for some platforms when building ++ with GCC (OS X, Solaris). ++ Fix Cygwin regression. ++ ++3.0.12 Feb-11-13 ++ Add Moxie support. ++ Add AArch64 support. ++ Add Blackfin support. ++ Add TILE-Gx/TILEPro support. ++ Add MicroBlaze support. ++ Add Xtensa support. ++ Add support for PaX enabled kernels with MPROTECT. ++ Add support for native vendor compilers on ++ Solaris and AIX. ++ Work around LLVM/GCC interoperability issue on x86_64. ++ ++3.0.11 Apr-11-12 ++ Lots of build fixes. ++ Add support for variadic functions (ffi_prep_cif_var). ++ Add Linux/x32 support. ++ Add thiscall, fastcall and MSVC cdecl support on Windows. ++ Add Amiga and newer MacOS support. ++ Add m68k FreeMiNT support. ++ Integration with iOS' xcode build tools. ++ Fix Octeon and MC68881 support. ++ Fix code pessimizations. ++ ++3.0.10 Aug-23-11 ++ Add support for Apple's iOS. ++ Add support for ARM VFP ABI. ++ Add RTEMS support for MIPS and M68K. ++ Fix instruction cache clearing problems on ++ ARM and SPARC. ++ Fix the N64 build on mips-sgi-irix6.5. ++ Enable builds with Microsoft's compiler. ++ Enable x86 builds with Oracle's Solaris compiler. ++ Fix support for calling code compiled with Oracle's Sparc ++ Solaris compiler. ++ Testsuite fixes for Tru64 Unix. ++ Additional platform support. ++ ++3.0.9 Dec-31-09 ++ Add AVR32 and win64 ports. Add ARM softfp support. ++ Many fixes for AIX, Solaris, HP-UX, *BSD. ++ Several PowerPC and x86-64 bug fixes. ++ Build DLL for windows. ++ ++3.0.8 Dec-19-08 ++ Add *BSD, BeOS, and PA-Linux support. ++ ++3.0.7 Nov-11-08 ++ Fix for ppc FreeBSD. ++ (thanks to Andreas Tobler) ++ ++3.0.6 Jul-17-08 ++ Fix for closures on sh. ++ Mark the sh/sh64 stack as non-executable. ++ (both thanks to Kaz Kojima) ++ ++3.0.5 Apr-3-08 ++ Fix libffi.pc file. ++ Fix #define ARM for IcedTea users. ++ Fix x86 closure bug. ++ ++3.0.4 Feb-24-08 ++ Fix x86 OpenBSD configury. ++ ++3.0.3 Feb-22-08 ++ Enable x86 OpenBSD thanks to Thomas Heller, and ++ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. ++ Clean up test instruction in README. ++ ++3.0.2 Feb-21-08 ++ Improved x86 FreeBSD support. ++ Thanks to Björn König. ++ ++3.0.1 Feb-15-08 ++ Fix instruction cache flushing bug on MIPS. ++ Thanks to David Daney. ++ ++3.0.0 Feb-15-08 ++ Many changes, mostly thanks to the GCC project. ++ Cygnus Solutions is now Red Hat. ++ ++ [10 years go by...] ++ ++1.20 Oct-5-98 ++ Raffaele Sena produces ARM port. ++ ++1.19 Oct-5-98 ++ Fixed x86 long double and long long return support. ++ m68k bug fixes from Andreas Schwab. ++ Patch for DU assembler compatibility for the Alpha from Richard ++ Henderson. ++ ++1.18 Apr-17-98 ++ Bug fixes and MIPS configuration changes. ++ ++1.17 Feb-24-98 ++ Bug fixes and m68k port from Andreas Schwab. PowerPC port from ++ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. ++ ++1.16 Feb-11-98 ++ Richard Henderson produces Alpha port. ++ ++1.15 Dec-4-97 ++ Fixed an n32 ABI bug. New libtool, auto* support. ++ ++1.14 May-13-97 ++ libtool is now used to generate shared and static libraries. ++ Fixed a minor portability problem reported by Russ McManus ++ . ++ ++1.13 Dec-2-96 ++ Added --enable-purify-safety to keep Purify from complaining ++ about certain low level code. ++ Sparc fix for calling functions with < 6 args. ++ Linux x86 a.out fix. ++ ++1.12 Nov-22-96 ++ Added missing ffi_type_void, needed for supporting void return ++ types. Fixed test case for non MIPS machines. Cygnus Support ++ is now Cygnus Solutions. ++ ++1.11 Oct-30-96 ++ Added notes about GNU make. ++ ++1.10 Oct-29-96 ++ Added configuration fix for non GNU compilers. ++ ++1.09 Oct-29-96 ++ Added --enable-debug configure switch. Clean-ups based on LCLint ++ feedback. ffi_mips.h is always installed. Many configuration ++ fixes. Fixed ffitest.c for sparc builds. ++ ++1.08 Oct-15-96 ++ Fixed n32 problem. Many clean-ups. ++ ++1.07 Oct-14-96 ++ Gordon Irlam rewrites v8.S again. Bug fixes. ++ ++1.06 Oct-14-96 ++ Gordon Irlam improved the sparc port. ++ ++1.05 Oct-14-96 ++ Interface changes based on feedback. ++ ++1.04 Oct-11-96 ++ Sparc port complete (modulo struct passing bug). ++ ++1.03 Oct-10-96 ++ Passing struct args, and returning struct values works for ++ all architectures/calling conventions. Expanded tests. ++ ++1.02 Oct-9-96 ++ Added SGI n32 support. Fixed bugs in both o32 and Linux support. ++ Added "make test". ++ ++1.01 Oct-8-96 ++ Fixed float passing bug in mips version. Restructured some ++ of the code. Builds cleanly with SGI tools. ++ ++1.00 Oct-7-96 ++ First release. No public announcement. ++ ++ ++Authors & Credits ++================= ++ ++libffi was originally written by Anthony Green . ++ ++The developers of the GNU Compiler Collection project have made ++innumerable valuable contributions. See the ChangeLog file for ++details. ++ ++Some of the ideas behind libffi were inspired by Gianni Mariani's free ++gencall library for Silicon Graphics machines. ++ ++The closure mechanism was designed and implemented by Kresten Krab ++Thorup. ++ ++Major processor architecture ports were contributed by the following ++developers: ++ ++aarch64 Marcus Shawcroft, James Greenhalgh ++alpha Richard Henderson ++arm Raffaele Sena ++blackfin Alexandre Keunecke I. de Mendonca ++cris Simon Posnjak, Hans-Peter Nilsson ++frv Anthony Green ++ia64 Hans Boehm ++m32r Kazuhiro Inaoka ++m68k Andreas Schwab ++m88k Miod Vallat ++microblaze Nathan Rossi ++mips Anthony Green, Casey Marshall ++mips64 David Daney ++moxie Anthony Green ++nios ii Sandra Loosemore ++openrisc Sebastian Macke ++pa Randolph Chung, Dave Anglin, Andreas Tobler ++powerpc Geoffrey Keating, Andreas Tobler, ++ David Edelsohn, John Hornkvist ++powerpc64 Jakub Jelinek ++s390 Gerhard Tonn, Ulrich Weigand ++sh Kaz Kojima ++sh64 Kaz Kojima ++sparc Anthony Green, Gordon Irlam ++tile-gx/tilepro Walter Lee ++vax Miod Vallat ++x86 Anthony Green, Jon Beniston ++x86-64 Bo Thorsen ++xtensa Chris Zankel ++ ++Jesper Skov and Andrew Haley both did more than their fair share of ++stepping through the code and tracking down bugs. ++ ++Thanks also to Tom Tromey for bug fixes, documentation and ++configuration help. ++ ++Thanks to Jim Blandy, who provided some useful feedback on the libffi ++interface. ++ ++Andreas Tobler has done a tremendous amount of work on the testsuite. ++ ++Alex Oliva solved the executable page problem for SElinux. ++ ++The list above is almost certainly incomplete and inaccurate. I'm ++happy to make corrections or additions upon request. ++ ++If you have a problem, or have found a bug, please send a note to the ++author at green@moxielogic.com, or the project mailing list at ++libffi-discuss@sourceware.org. +diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes/libffi_ios/README.python +--- orig/Modules/_ctypes/libffi_ios/README.python 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README.python 2015-04-26 09:00:07.000000000 +0800 +@@ -0,0 +1,14 @@ ++This directory contains the generated source code for running libffi ++on iOS platforms (physical and simulator). It contains support for ++ARMv7, i386 and x86_64 platforms. ++ ++libffi requires a code-generation step for Apple platforms. This code ++generation is performed using the `generate-darwin-source-and-headers.py` ++script in the home directory of the libffi project. ++ ++This directory is the combined output of the darwin_common and darwin_ios ++generated code directories. It has been pruned of source files that are ++not needed for ctypes. ++ ++The code in this directory uses the source code from libffi 3.2.1, released ++in November 2014. +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c +--- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,936 @@ ++#ifdef __arm__ ++ ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2011 Timothy Wall ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2011 Free Software Foundation ++ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++ ++ ARM Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#include ++#include ++ ++#include ++ ++/* Forward declares. */ ++static int vfp_type_p (ffi_type *); ++static void layout_vfp_args (ffi_cif *); ++ ++int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space); ++int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space); ++ ++static char* ffi_align(ffi_type **p_arg, char *argp) ++{ ++ /* Align if necessary */ ++ register size_t alignment = (*p_arg)->alignment; ++ if (alignment < 4) ++ { ++ alignment = 4; ++ } ++#ifdef _WIN32_WCE ++ if (alignment > 4) ++ { ++ alignment = 4; ++ } ++#endif ++ if ((alignment - 1) & (unsigned) argp) ++ { ++ argp = (char *) ALIGN(argp, alignment); ++ } ++ ++ if ((*p_arg)->type == FFI_TYPE_STRUCT) ++ { ++ argp = (char *) ALIGN(argp, 4); ++ } ++ return argp; ++} ++ ++static size_t ffi_put_arg(ffi_type **arg_type, void **arg, char *stack) ++{ ++ register char* argp = stack; ++ register ffi_type **p_arg = arg_type; ++ register void **p_argv = arg; ++ register size_t z = (*p_arg)->size; ++ if (z < sizeof(int)) ++ { ++ z = sizeof(int); ++ switch ((*p_arg)->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT8: ++ *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ memcpy(argp, *p_argv, (*p_arg)->size); ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ } ++ } ++ else if (z == sizeof(int)) ++ { ++ if ((*p_arg)->type == FFI_TYPE_FLOAT) ++ *(float *) argp = *(float *)(* p_argv); ++ else ++ *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); ++ } ++ else if (z == sizeof(double) && (*p_arg)->type == FFI_TYPE_DOUBLE) ++ { ++ *(double *) argp = *(double *)(* p_argv); ++ } ++ else ++ { ++ memcpy(argp, *p_argv, z); ++ } ++ return z; ++} ++/* ffi_prep_args is called by the assembly routine once stack space ++ has been allocated for the function's arguments ++ ++ The vfp_space parameter is the load area for VFP regs, the return ++ value is cif->vfp_used (word bitset of VFP regs used for passing ++ arguments). These are only used for the VFP hard-float ABI. ++*/ ++int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space) ++{ ++ register unsigned int i; ++ register void **p_argv; ++ register char *argp; ++ register ffi_type **p_arg; ++ argp = stack; ++ ++ ++ if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { ++ *(void **) argp = ecif->rvalue; ++ argp += 4; ++ } ++ ++ p_argv = ecif->avalue; ++ ++ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; ++ (i != 0); ++ i--, p_arg++, p_argv++) ++ { ++ argp = ffi_align(p_arg, argp); ++ argp += ffi_put_arg(p_arg, p_argv, argp); ++ } ++ ++ return 0; ++} ++ ++int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space) ++{ ++ register unsigned int i, vi = 0; ++ register void **p_argv; ++ register char *argp, *regp, *eo_regp; ++ register ffi_type **p_arg; ++ char stack_used = 0; ++ char done_with_regs = 0; ++ char is_vfp_type; ++ ++ // make sure we are using FFI_VFP ++ FFI_ASSERT(ecif->cif->abi == FFI_VFP); ++ ++ /* the first 4 words on the stack are used for values passed in core ++ * registers. */ ++ regp = stack; ++ eo_regp = argp = regp + 16; ++ ++ ++ /* if the function returns an FFI_TYPE_STRUCT in memory, that address is ++ * passed in r0 to the function */ ++ if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { ++ *(void **) regp = ecif->rvalue; ++ regp += 4; ++ } ++ ++ p_argv = ecif->avalue; ++ ++ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; ++ (i != 0); ++ i--, p_arg++, p_argv++) ++ { ++ is_vfp_type = vfp_type_p (*p_arg); ++ ++ /* Allocated in VFP registers. */ ++ if(vi < ecif->cif->vfp_nargs && is_vfp_type) ++ { ++ char *vfp_slot = (char *)(vfp_space + ecif->cif->vfp_args[vi++]); ++ ffi_put_arg(p_arg, p_argv, vfp_slot); ++ continue; ++ } ++ /* Try allocating in core registers. */ ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char *tregp = ffi_align(p_arg, regp); ++ size_t size = (*p_arg)->size; ++ size = (size < 4)? 4 : size; // pad ++ /* Check if there is space left in the aligned register area to place ++ * the argument */ ++ if(tregp + size <= eo_regp) ++ { ++ regp = tregp + ffi_put_arg(p_arg, p_argv, tregp); ++ done_with_regs = (regp == argp); ++ // ensure we did not write into the stack area ++ FFI_ASSERT(regp <= argp); ++ continue; ++ } ++ /* In case there are no arguments in the stack area yet, ++ the argument is passed in the remaining core registers and on the ++ stack. */ ++ else if (!stack_used) ++ { ++ stack_used = 1; ++ done_with_regs = 1; ++ argp = tregp + ffi_put_arg(p_arg, p_argv, tregp); ++ FFI_ASSERT(eo_regp < argp); ++ continue; ++ } ++ } ++ /* Base case, arguments are passed on the stack */ ++ stack_used = 1; ++ argp = ffi_align(p_arg, argp); ++ argp += ffi_put_arg(p_arg, p_argv, argp); ++ } ++ /* Indicate the VFP registers used. */ ++ return ecif->cif->vfp_used; ++} ++ ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif) ++{ ++ int type_code; ++ /* Round the stack up to a multiple of 8 bytes. This isn't needed ++ everywhere, but it is on some platforms, and it doesn't harm anything ++ when it isn't needed. */ ++ cif->bytes = (cif->bytes + 7) & ~7; ++ ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ cif->flags = (unsigned) cif->rtype->type; ++ break; ++ ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ cif->flags = (unsigned) FFI_TYPE_SINT64; ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ if (cif->abi == FFI_VFP ++ && (type_code = vfp_type_p (cif->rtype)) != 0) ++ { ++ /* A Composite Type passed in VFP registers, either ++ FFI_TYPE_STRUCT_VFP_FLOAT or FFI_TYPE_STRUCT_VFP_DOUBLE. */ ++ cif->flags = (unsigned) type_code; ++ } ++ else if (cif->rtype->size <= 4) ++ /* A Composite Type not larger than 4 bytes is returned in r0. */ ++ cif->flags = (unsigned)FFI_TYPE_INT; ++ else ++ /* A Composite Type larger than 4 bytes, or whose size cannot ++ be determined statically ... is stored in memory at an ++ address passed [in r0]. */ ++ cif->flags = (unsigned)FFI_TYPE_STRUCT; ++ break; ++ ++ default: ++ cif->flags = FFI_TYPE_INT; ++ break; ++ } ++ ++ /* Map out the register placements of VFP register args. ++ The VFP hard-float calling conventions are slightly more sophisticated than ++ the base calling conventions, so we do it here instead of in ffi_prep_args(). */ ++ if (cif->abi == FFI_VFP) ++ layout_vfp_args (cif); ++ ++ return FFI_OK; ++} ++ ++/* Perform machine dependent cif processing for variadic calls */ ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs) ++{ ++ /* VFP variadic calls actually use the SYSV ABI */ ++ if (cif->abi == FFI_VFP) ++ cif->abi = FFI_SYSV; ++ ++ return ffi_prep_cif_machdep(cif); ++} ++ ++/* Prototypes for assembly functions, in sysv.S */ ++extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); ++extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); ++ ++void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ extended_cif ecif; ++ ++ int small_struct = (cif->flags == FFI_TYPE_INT ++ && cif->rtype->type == FFI_TYPE_STRUCT); ++ int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT ++ || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE); ++ ++ unsigned int temp; ++ ++ ecif.cif = cif; ++ ecif.avalue = avalue; ++ ++ /* If the return value is a struct and we don't have a return */ ++ /* value address then we need to make one */ ++ ++ if ((rvalue == NULL) && ++ (cif->flags == FFI_TYPE_STRUCT)) ++ { ++ ecif.rvalue = alloca(cif->rtype->size); ++ } ++ else if (small_struct) ++ ecif.rvalue = &temp; ++ else if (vfp_struct) ++ { ++ /* Largest case is double x 4. */ ++ ecif.rvalue = alloca(32); ++ } ++ else ++ ecif.rvalue = rvalue; ++ ++ switch (cif->abi) ++ { ++ case FFI_SYSV: ++ ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); ++ break; ++ ++ case FFI_VFP: ++#ifdef __ARM_EABI__ ++ ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); ++ break; ++#endif ++ ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++ if (small_struct) ++ { ++ FFI_ASSERT(rvalue != NULL); ++ memcpy (rvalue, &temp, cif->rtype->size); ++ } ++ ++ else if (vfp_struct) ++ { ++ FFI_ASSERT(rvalue != NULL); ++ memcpy (rvalue, ecif.rvalue, cif->rtype->size); ++ } ++ ++} ++ ++/** private members **/ ++ ++static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, ++ void** args, ffi_cif* cif, float *vfp_stack); ++ ++static void ffi_prep_incoming_args_VFP (char *stack, void **ret, ++ void** args, ffi_cif* cif, float *vfp_stack); ++ ++void ffi_closure_SYSV (ffi_closure *); ++ ++void ffi_closure_VFP (ffi_closure *); ++ ++/* This function is jumped to by the trampoline */ ++ ++unsigned int FFI_HIDDEN ++ffi_closure_inner (ffi_closure *closure, ++ void **respp, void *args, void *vfp_args) ++{ ++ // our various things... ++ ffi_cif *cif; ++ void **arg_area; ++ ++ cif = closure->cif; ++ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); ++ ++ /* this call will initialize ARG_AREA, such that each ++ * element in that array points to the corresponding ++ * value on the stack; and if the function returns ++ * a structure, it will re-set RESP to point to the ++ * structure return address. */ ++ if (cif->abi == FFI_VFP) ++ ffi_prep_incoming_args_VFP(args, respp, arg_area, cif, vfp_args); ++ else ++ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args); ++ ++ (closure->fun) (cif, *respp, arg_area, closure->user_data); ++ ++ return cif->flags; ++} ++ ++/*@-exportheader@*/ ++static void ++ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, ++ void **avalue, ffi_cif *cif, ++ /* Used only under VFP hard-float ABI. */ ++ float *vfp_stack) ++/*@=exportheader@*/ ++{ ++ register unsigned int i; ++ register void **p_argv; ++ register char *argp; ++ register ffi_type **p_arg; ++ ++ argp = stack; ++ ++ if ( cif->flags == FFI_TYPE_STRUCT ) { ++ *rvalue = *(void **) argp; ++ argp += 4; ++ } ++ ++ p_argv = avalue; ++ ++ for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) ++ { ++ size_t z; ++ ++ argp = ffi_align(p_arg, argp); ++ ++ z = (*p_arg)->size; ++ ++ /* because we're little endian, this is what it turns into. */ ++ ++ *p_argv = (void*) argp; ++ ++ p_argv++; ++ argp += z; ++ } ++ ++ return; ++} ++ ++/*@-exportheader@*/ ++static void ++ffi_prep_incoming_args_VFP(char *stack, void **rvalue, ++ void **avalue, ffi_cif *cif, ++ /* Used only under VFP hard-float ABI. */ ++ float *vfp_stack) ++/*@=exportheader@*/ ++{ ++ register unsigned int i, vi = 0; ++ register void **p_argv; ++ register char *argp, *regp, *eo_regp; ++ register ffi_type **p_arg; ++ char done_with_regs = 0; ++ char stack_used = 0; ++ char is_vfp_type; ++ ++ FFI_ASSERT(cif->abi == FFI_VFP); ++ regp = stack; ++ eo_regp = argp = regp + 16; ++ ++ if ( cif->flags == FFI_TYPE_STRUCT ) { ++ *rvalue = *(void **) regp; ++ regp += 4; ++ } ++ ++ p_argv = avalue; ++ ++ for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) ++ { ++ size_t z; ++ is_vfp_type = vfp_type_p (*p_arg); ++ ++ if(vi < cif->vfp_nargs && is_vfp_type) ++ { ++ *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]); ++ continue; ++ } ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char* tregp = ffi_align(p_arg, regp); ++ ++ z = (*p_arg)->size; ++ z = (z < 4)? 4 : z; // pad ++ ++ /* if the arguments either fits into the registers or uses registers ++ * and stack, while we haven't read other things from the stack */ ++ if(tregp + z <= eo_regp || !stack_used) ++ { ++ /* because we're little endian, this is what it turns into. */ ++ *p_argv = (void*) tregp; ++ ++ p_argv++; ++ regp = tregp + z; ++ // if we read past the last core register, make sure we have not read ++ // from the stack before and continue reading after regp ++ if(regp > eo_regp) ++ { ++ if(stack_used) ++ { ++ abort(); // we should never read past the end of the register ++ // are if the stack is already in use ++ } ++ argp = regp; ++ } ++ if(regp >= eo_regp) ++ { ++ done_with_regs = 1; ++ stack_used = 1; ++ } ++ continue; ++ } ++ } ++ stack_used = 1; ++ ++ argp = ffi_align(p_arg, argp); ++ ++ z = (*p_arg)->size; ++ ++ /* because we're little endian, this is what it turns into. */ ++ ++ *p_argv = (void*) argp; ++ ++ p_argv++; ++ argp += z; ++ } ++ ++ return; ++} ++ ++/* How to make a trampoline. */ ++ ++extern unsigned int ffi_arm_trampoline[3]; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ++#include ++#include ++#include ++#include ++ ++extern void *ffi_closure_trampoline_table_page; ++ ++typedef struct ffi_trampoline_table ffi_trampoline_table; ++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++ ++struct ffi_trampoline_table { ++ /* contiguous writable and executable pages */ ++ vm_address_t config_page; ++ vm_address_t trampoline_page; ++ ++ /* free list tracking */ ++ uint16_t free_count; ++ ffi_trampoline_table_entry *free_list; ++ ffi_trampoline_table_entry *free_list_pool; ++ ++ ffi_trampoline_table *prev; ++ ffi_trampoline_table *next; ++}; ++ ++struct ffi_trampoline_table_entry { ++ void *(*trampoline)(); ++ ffi_trampoline_table_entry *next; ++}; ++ ++/* Override the standard architecture trampoline size */ ++// XXX TODO - Fix ++#undef FFI_TRAMPOLINE_SIZE ++#define FFI_TRAMPOLINE_SIZE 12 ++ ++/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ ++#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); ++ ++/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ ++#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 ++ ++/* Total number of trampolines that fit in one trampoline table */ ++#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) ++ ++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; ++static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++ ++static ffi_trampoline_table * ++ffi_trampoline_table_alloc () ++{ ++ ffi_trampoline_table *table = NULL; ++ ++ /* Loop until we can allocate two contiguous pages */ ++ while (table == NULL) { ++ vm_address_t config_page = 0x0; ++ kern_return_t kt; ++ ++ /* Try to allocate two pages */ ++ kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE); ++ if (kt != KERN_SUCCESS) { ++ fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Now drop the second half of the allocation to make room for the trampoline table */ ++ vm_address_t trampoline_page = config_page+PAGE_SIZE; ++ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) { ++ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ break; ++ } ++ ++ /* Remap the trampoline table to directly follow the config page */ ++ vm_prot_t cur_prot; ++ vm_prot_t max_prot; ++ ++ kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE); ++ ++ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ ++ if (kt != KERN_SUCCESS) { ++ /* Log unexpected failures */ ++ if (kt != KERN_NO_SPACE) { ++ fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ } ++ ++ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); ++ continue; ++ } ++ ++ /* We have valid trampoline and config pages */ ++ table = calloc (1, sizeof(ffi_trampoline_table)); ++ table->free_count = FFI_TRAMPOLINE_COUNT; ++ table->config_page = config_page; ++ table->trampoline_page = trampoline_page; ++ ++ /* Create and initialize the free list */ ++ table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry)); ++ ++ uint16_t i; ++ for (i = 0; i < table->free_count; i++) { ++ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; ++ entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++ ++ if (i < table->free_count - 1) ++ entry->next = &table->free_list_pool[i+1]; ++ } ++ ++ table->free_list = table->free_list_pool; ++ } ++ ++ return table; ++} ++ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ /* Create the closure */ ++ ffi_closure *closure = malloc(size); ++ if (closure == NULL) ++ return NULL; ++ ++ pthread_mutex_lock(&ffi_trampoline_lock); ++ ++ /* Check for an active trampoline table with available entries. */ ++ ffi_trampoline_table *table = ffi_trampoline_tables; ++ if (table == NULL || table->free_list == NULL) { ++ table = ffi_trampoline_table_alloc (); ++ if (table == NULL) { ++ free(closure); ++ return NULL; ++ } ++ ++ /* Insert the new table at the top of the list */ ++ table->next = ffi_trampoline_tables; ++ if (table->next != NULL) ++ table->next->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ /* Claim the free entry */ ++ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; ++ ffi_trampoline_tables->free_list = entry->next; ++ ffi_trampoline_tables->free_count--; ++ entry->next = NULL; ++ ++ pthread_mutex_unlock(&ffi_trampoline_lock); ++ ++ /* Initialize the return values */ ++ *code = entry->trampoline; ++ closure->trampoline_table = table; ++ closure->trampoline_table_entry = entry; ++ ++ return closure; ++} ++ ++void ++ffi_closure_free (void *ptr) ++{ ++ ffi_closure *closure = ptr; ++ ++ pthread_mutex_lock(&ffi_trampoline_lock); ++ ++ /* Fetch the table and entry references */ ++ ffi_trampoline_table *table = closure->trampoline_table; ++ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++ ++ /* Return the entry to the free list */ ++ entry->next = table->free_list; ++ table->free_list = entry; ++ table->free_count++; ++ ++ /* If all trampolines within this table are free, and at least one other table exists, deallocate ++ * the table */ ++ if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) { ++ /* Remove from the list */ ++ if (table->prev != NULL) ++ table->prev->next = table->next; ++ ++ if (table->next != NULL) ++ table->next->prev = table->prev; ++ ++ /* Deallocate pages */ ++ kern_return_t kt; ++ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ ++ kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ ++ /* Deallocate free list */ ++ free (table->free_list_pool); ++ free (table); ++ } else if (ffi_trampoline_tables != table) { ++ /* Otherwise, bump this table to the top of the list */ ++ table->prev = NULL; ++ table->next = ffi_trampoline_tables; ++ if (ffi_trampoline_tables != NULL) ++ ffi_trampoline_tables->prev = table; ++ ++ ffi_trampoline_tables = table; ++ } ++ ++ pthread_mutex_unlock (&ffi_trampoline_lock); ++ ++ /* Free the closure */ ++ free (closure); ++} ++ ++#else ++ ++#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ++({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ ++ unsigned int __fun = (unsigned int)(FUN); \ ++ unsigned int __ctx = (unsigned int)(CTX); \ ++ unsigned char *insns = (unsigned char *)(CTX); \ ++ memcpy (__tramp, ffi_arm_trampoline, sizeof ffi_arm_trampoline); \ ++ *(unsigned int*) &__tramp[12] = __ctx; \ ++ *(unsigned int*) &__tramp[16] = __fun; \ ++ __clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping. */ \ ++ __clear_cache(insns, insns + 3 * sizeof (unsigned int)); \ ++ /* Clear instruction \ ++ mapping. */ \ ++ }) ++ ++#endif ++ ++/* the cif must already be prep'ed */ ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ void (*closure_func)(ffi_closure*) = NULL; ++ ++ if (cif->abi == FFI_SYSV) ++ closure_func = &ffi_closure_SYSV; ++#ifdef __ARM_EABI__ ++ else if (cif->abi == FFI_VFP) ++ closure_func = &ffi_closure_VFP; ++#endif ++ else ++ return FFI_BAD_ABI; ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc); ++ config[0] = closure; ++ config[1] = closure_func; ++#else ++ FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ ++ closure_func, \ ++ codeloc); ++#endif ++ ++ closure->cif = cif; ++ closure->user_data = user_data; ++ closure->fun = fun; ++ ++ return FFI_OK; ++} ++ ++/* Below are routines for VFP hard-float support. */ ++ ++static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum) ++{ ++ switch (t->type) ++ { ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ *elt = (int) t->type; ++ *elnum = 1; ++ return 1; ++ ++ case FFI_TYPE_STRUCT_VFP_FLOAT: ++ *elt = FFI_TYPE_FLOAT; ++ *elnum = t->size / sizeof (float); ++ return 1; ++ ++ case FFI_TYPE_STRUCT_VFP_DOUBLE: ++ *elt = FFI_TYPE_DOUBLE; ++ *elnum = t->size / sizeof (double); ++ return 1; ++ ++ case FFI_TYPE_STRUCT:; ++ { ++ int base_elt = 0, total_elnum = 0; ++ ffi_type **el = t->elements; ++ while (*el) ++ { ++ int el_elt = 0, el_elnum = 0; ++ if (! rec_vfp_type_p (*el, &el_elt, &el_elnum) ++ || (base_elt && base_elt != el_elt) ++ || total_elnum + el_elnum > 4) ++ return 0; ++ base_elt = el_elt; ++ total_elnum += el_elnum; ++ el++; ++ } ++ *elnum = total_elnum; ++ *elt = base_elt; ++ return 1; ++ } ++ default: ; ++ } ++ return 0; ++} ++ ++static int vfp_type_p (ffi_type *t) ++{ ++ int elt, elnum; ++ if (rec_vfp_type_p (t, &elt, &elnum)) ++ { ++ if (t->type == FFI_TYPE_STRUCT) ++ { ++ if (elnum == 1) ++ t->type = elt; ++ else ++ t->type = (elt == FFI_TYPE_FLOAT ++ ? FFI_TYPE_STRUCT_VFP_FLOAT ++ : FFI_TYPE_STRUCT_VFP_DOUBLE); ++ } ++ return (int) t->type; ++ } ++ return 0; ++} ++ ++static int place_vfp_arg (ffi_cif *cif, ffi_type *t) ++{ ++ short reg = cif->vfp_reg_free; ++ int nregs = t->size / sizeof (float); ++ int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT ++ || t->type == FFI_TYPE_FLOAT) ? 1 : 2); ++ /* Align register number. */ ++ if ((reg & 1) && align == 2) ++ reg++; ++ while (reg + nregs <= 16) ++ { ++ int s, new_used = 0; ++ for (s = reg; s < reg + nregs; s++) ++ { ++ new_used |= (1 << s); ++ if (cif->vfp_used & (1 << s)) ++ { ++ reg += align; ++ goto next_reg; ++ } ++ } ++ /* Found regs to allocate. */ ++ cif->vfp_used |= new_used; ++ cif->vfp_args[cif->vfp_nargs++] = reg; ++ ++ /* Update vfp_reg_free. */ ++ if (cif->vfp_used & (1 << cif->vfp_reg_free)) ++ { ++ reg += nregs; ++ while (cif->vfp_used & (1 << reg)) ++ reg += 1; ++ cif->vfp_reg_free = reg; ++ } ++ return 0; ++ next_reg: ; ++ } ++ // done, mark all regs as used ++ cif->vfp_reg_free = 16; ++ cif->vfp_used = 0xFFFF; ++ return 1; ++} ++ ++static void layout_vfp_args (ffi_cif *cif) ++{ ++ int i; ++ /* Init VFP fields */ ++ cif->vfp_used = 0; ++ cif->vfp_nargs = 0; ++ cif->vfp_reg_free = 0; ++ memset (cif->vfp_args, -1, 16); /* Init to -1. */ ++ ++ for (i = 0; i < cif->nargs; i++) ++ { ++ ffi_type *t = cif->arg_types[i]; ++ if (vfp_type_p (t) && place_vfp_arg (cif, t) == 1) ++ { ++ break; ++ } ++ } ++} ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S +--- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,496 @@ ++#ifdef __arm__ ++ ++/* ----------------------------------------------------------------------- ++ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ ++ ARM Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#define LIBFFI_ASM ++#include ++#include ++#ifdef HAVE_MACHINE_ASM_H ++#include ++#else ++#ifdef __USER_LABEL_PREFIX__ ++#define CONCAT1(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b ++ ++/* Use the right prefix for global labels. */ ++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) ++#else ++#define CNAME(x) x ++#endif ++#ifdef __APPLE__ ++#define ENTRY(x) .globl _##x; _##x: ++#else ++#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): ++#endif /* __APPLE__ */ ++#endif ++ ++#ifdef __ELF__ ++#define LSYM(x) .x ++#else ++#define LSYM(x) x ++#endif ++ ++/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI ++ Function Call Guide */ ++#ifdef __APPLE__ ++#define __SOFTFP__ ++#endif ++ ++/* We need a better way of testing for this, but for now, this is all ++ we can do. */ ++@ This selects the minimum architecture level required. ++#define __ARM_ARCH__ 3 ++ ++#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) ++# undef __ARM_ARCH__ ++# define __ARM_ARCH__ 4 ++#endif ++ ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ ++ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ ++ || defined(__ARM_ARCH_5TEJ__) ++# undef __ARM_ARCH__ ++# define __ARM_ARCH__ 5 ++#endif ++ ++#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ ++ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ ++ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ ++ || defined(__ARM_ARCH_6M__) ++# undef __ARM_ARCH__ ++# define __ARM_ARCH__ 6 ++#endif ++ ++#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ ++ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ ++ || defined(__ARM_ARCH_7EM__) ++# undef __ARM_ARCH__ ++# define __ARM_ARCH__ 7 ++#endif ++ ++#if __ARM_ARCH__ >= 5 ++# define call_reg(x) blx x ++#elif defined (__ARM_ARCH_4T__) ++# define call_reg(x) mov lr, pc ; bx x ++# if defined(__thumb__) || defined(__THUMB_INTERWORK__) ++# define __INTERWORKING__ ++# endif ++#else ++# define call_reg(x) mov lr, pc ; mov pc, x ++#endif ++ ++/* Conditionally compile unwinder directives. */ ++#ifdef __ARM_EABI__ ++#define UNWIND ++#else ++#define UNWIND @ ++#endif ++ ++.syntax unified ++ ++#if defined(__thumb__) && !defined(__THUMB_INTERWORK__) ++#define ARM_FUNC_START(name) \ ++ .text; \ ++ .align 2; \ ++ .thumb; \ ++ .thumb_func; \ ++ ENTRY(name); \ ++ bx pc; \ ++ nop; \ ++ .arm; \ ++ UNWIND .fnstart; \ ++_L__##name: ++#else ++#define ARM_FUNC_START(name) \ ++ .text; \ ++ .align 2; \ ++ .arm; \ ++ ENTRY(name); \ ++ UNWIND .fnstart ++#endif ++ ++.macro RETLDM regs=, cond=, dirn=ia ++#if defined (__INTERWORKING__) ++ .ifc "\regs","" ++ ldr\cond lr, [sp], #4 ++ .else ++ ldm\cond\dirn sp!, {\regs, lr} ++ .endif ++ bx\cond lr ++#else ++ .ifc "\regs","" ++ ldr\cond pc, [sp], #4 ++ .else ++ ldm\cond\dirn sp!, {\regs, pc} ++ .endif ++#endif ++.endm ++ ++ @ r0: ffi_prep_args ++ @ r1: &ecif ++ @ r2: cif->bytes ++ @ r3: fig->flags ++ @ sp+0: ecif.rvalue ++ ++ @ This assumes we are using gas. ++ARM_FUNC_START(ffi_call_SYSV) ++ @ Save registers ++ stmfd sp!, {r0-r3, fp, lr} ++ UNWIND .save {r0-r3, fp, lr} ++ mov fp, sp ++ ++ UNWIND .setfp fp, sp ++ ++ @ Make room for all of the new args. ++ sub sp, fp, r2 ++ ++ @ Place all of the ffi_prep_args in position ++ mov r0, sp ++ @ r1 already set ++ ++ @ Call ffi_prep_args(stack, &ecif) ++ bl CNAME(ffi_prep_args_SYSV) ++ ++ @ move first 4 parameters in registers ++ ldmia sp, {r0-r3} ++ ++ @ and adjust stack ++ sub lr, fp, sp @ cif->bytes == fp - sp ++ ldr ip, [fp] @ load fn() in advance ++ cmp lr, #16 ++ movhs lr, #16 ++ add sp, sp, lr ++ ++ @ call (fn) (...) ++ call_reg(ip) ++ ++ @ Remove the space we pushed for the args ++ mov sp, fp ++ ++ @ Load r2 with the pointer to storage for the return value ++ ldr r2, [sp, #24] ++ ++ @ Load r3 with the return type code ++ ldr r3, [sp, #12] ++ ++ @ If the return value pointer is NULL, assume no return value. ++ cmp r2, #0 ++ beq LSYM(Lepilogue) ++ ++@ return INT ++ cmp r3, #FFI_TYPE_INT ++#if defined(__SOFTFP__) || defined(__ARM_EABI__) ++ cmpne r3, #FFI_TYPE_FLOAT ++#endif ++ streq r0, [r2] ++ beq LSYM(Lepilogue) ++ ++ @ return INT64 ++ cmp r3, #FFI_TYPE_SINT64 ++#if defined(__SOFTFP__) || defined(__ARM_EABI__) ++ cmpne r3, #FFI_TYPE_DOUBLE ++#endif ++ stmiaeq r2, {r0, r1} ++ ++#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) ++ beq LSYM(Lepilogue) ++ ++@ return FLOAT ++ cmp r3, #FFI_TYPE_FLOAT ++ stfeqs f0, [r2] ++ beq LSYM(Lepilogue) ++ ++@ return DOUBLE or LONGDOUBLE ++ cmp r3, #FFI_TYPE_DOUBLE ++ stfeqd f0, [r2] ++#endif ++ ++LSYM(Lepilogue): ++#if defined (__INTERWORKING__) ++ ldmia sp!, {r0-r3,fp, lr} ++ bx lr ++#else ++ ldmia sp!, {r0-r3,fp, pc} ++#endif ++ ++.ffi_call_SYSV_end: ++ UNWIND .fnend ++#ifdef __ELF__ ++ .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) ++#endif ++ ++ ++/* ++ unsigned int FFI_HIDDEN ++ ffi_closure_inner (closure, respp, args) ++ ffi_closure *closure; ++ void **respp; ++ void *args; ++*/ ++ ++ARM_FUNC_START(ffi_closure_SYSV) ++ UNWIND .pad #16 ++ add ip, sp, #16 ++ stmfd sp!, {ip, lr} ++ UNWIND .save {r0, lr} ++ add r2, sp, #8 ++ UNWIND .pad #16 ++ sub sp, sp, #16 ++ str sp, [sp, #8] ++ add r1, sp, #8 ++ bl CNAME(ffi_closure_inner) ++ cmp r0, #FFI_TYPE_INT ++ beq .Lretint ++ ++ cmp r0, #FFI_TYPE_FLOAT ++#if defined(__SOFTFP__) || defined(__ARM_EABI__) ++ beq .Lretint ++#else ++ beq .Lretfloat ++#endif ++ ++ cmp r0, #FFI_TYPE_DOUBLE ++#if defined(__SOFTFP__) || defined(__ARM_EABI__) ++ beq .Lretlonglong ++#else ++ beq .Lretdouble ++#endif ++ ++ cmp r0, #FFI_TYPE_LONGDOUBLE ++#if defined(__SOFTFP__) || defined(__ARM_EABI__) ++ beq .Lretlonglong ++#else ++ beq .Lretlongdouble ++#endif ++ ++ cmp r0, #FFI_TYPE_SINT64 ++ beq .Lretlonglong ++.Lclosure_epilogue: ++ add sp, sp, #16 ++ ldmfd sp, {sp, pc} ++.Lretint: ++ ldr r0, [sp] ++ b .Lclosure_epilogue ++.Lretlonglong: ++ ldr r0, [sp] ++ ldr r1, [sp, #4] ++ b .Lclosure_epilogue ++ ++#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) ++.Lretfloat: ++ ldfs f0, [sp] ++ b .Lclosure_epilogue ++.Lretdouble: ++ ldfd f0, [sp] ++ b .Lclosure_epilogue ++.Lretlongdouble: ++ ldfd f0, [sp] ++ b .Lclosure_epilogue ++#endif ++ ++.ffi_closure_SYSV_end: ++ UNWIND .fnend ++#ifdef __ELF__ ++ .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) ++#endif ++ ++ ++/* Below are VFP hard-float ABI call and closure implementations. ++ Add VFP FPU directive here. This is only compiled into the library ++ under EABI. */ ++#ifdef __ARM_EABI__ ++ .fpu vfp ++ ++ @ r0: fn ++ @ r1: &ecif ++ @ r2: cif->bytes ++ @ r3: fig->flags ++ @ sp+0: ecif.rvalue ++ ++ARM_FUNC_START(ffi_call_VFP) ++ @ Save registers ++ stmfd sp!, {r0-r3, fp, lr} ++ UNWIND .save {r0-r3, fp, lr} ++ mov fp, sp ++ UNWIND .setfp fp, sp ++ ++ @ Make room for all of the new args. ++ sub sp, sp, r2 ++ ++ @ Make room for loading VFP args ++ sub sp, sp, #64 ++ ++ @ Place all of the ffi_prep_args in position ++ mov r0, sp ++ @ r1 already set ++ sub r2, fp, #64 @ VFP scratch space ++ ++ @ Call ffi_prep_args(stack, &ecif, vfp_space) ++ bl CNAME(ffi_prep_args_VFP) ++ ++ @ Load VFP register args if needed ++ cmp r0, #0 ++ mov ip, fp ++ beq LSYM(Lbase_args) ++ ++ @ Load only d0 if possible ++ cmp r0, #3 ++ sub ip, fp, #64 ++ flddle d0, [ip] ++ fldmiadgt ip, {d0-d7} ++ ++LSYM(Lbase_args): ++ @ move first 4 parameters in registers ++ ldmia sp, {r0-r3} ++ ++ @ and adjust stack ++ sub lr, ip, sp @ cif->bytes == (fp - 64) - sp ++ ldr ip, [fp] @ load fn() in advance ++ cmp lr, #16 ++ movhs lr, #16 ++ add sp, sp, lr ++ ++ @ call (fn) (...) ++ call_reg(ip) ++ ++ @ Remove the space we pushed for the args ++ mov sp, fp ++ ++ @ Load r2 with the pointer to storage for ++ @ the return value ++ ldr r2, [sp, #24] ++ ++ @ Load r3 with the return type code ++ ldr r3, [sp, #12] ++ ++ @ If the return value pointer is NULL, ++ @ assume no return value. ++ cmp r2, #0 ++ beq LSYM(Lepilogue_vfp) ++ ++ cmp r3, #FFI_TYPE_INT ++ streq r0, [r2] ++ beq LSYM(Lepilogue_vfp) ++ ++ cmp r3, #FFI_TYPE_SINT64 ++ stmeqia r2, {r0, r1} ++ beq LSYM(Lepilogue_vfp) ++ ++ cmp r3, #FFI_TYPE_FLOAT ++ fstseq s0, [r2] ++ beq LSYM(Lepilogue_vfp) ++ ++ cmp r3, #FFI_TYPE_DOUBLE ++ fstdeq d0, [r2] ++ beq LSYM(Lepilogue_vfp) ++ ++ cmp r3, #FFI_TYPE_STRUCT_VFP_FLOAT ++ cmpne r3, #FFI_TYPE_STRUCT_VFP_DOUBLE ++ fstmiadeq r2, {d0-d3} ++ ++LSYM(Lepilogue_vfp): ++ RETLDM "r0-r3,fp" ++ ++.ffi_call_VFP_end: ++ UNWIND .fnend ++ .size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP) ++ ++ ++ARM_FUNC_START(ffi_closure_VFP) ++ fstmfdd sp!, {d0-d7} ++ @ r0-r3, then d0-d7 ++ UNWIND .pad #80 ++ add ip, sp, #80 ++ stmfd sp!, {ip, lr} ++ UNWIND .save {r0, lr} ++ add r2, sp, #72 ++ add r3, sp, #8 ++ UNWIND .pad #72 ++ sub sp, sp, #72 ++ str sp, [sp, #64] ++ add r1, sp, #64 ++ bl CNAME(ffi_closure_inner) ++ ++ cmp r0, #FFI_TYPE_INT ++ beq .Lretint_vfp ++ ++ cmp r0, #FFI_TYPE_FLOAT ++ beq .Lretfloat_vfp ++ ++ cmp r0, #FFI_TYPE_DOUBLE ++ cmpne r0, #FFI_TYPE_LONGDOUBLE ++ beq .Lretdouble_vfp ++ ++ cmp r0, #FFI_TYPE_SINT64 ++ beq .Lretlonglong_vfp ++ ++ cmp r0, #FFI_TYPE_STRUCT_VFP_FLOAT ++ beq .Lretfloat_struct_vfp ++ ++ cmp r0, #FFI_TYPE_STRUCT_VFP_DOUBLE ++ beq .Lretdouble_struct_vfp ++ ++.Lclosure_epilogue_vfp: ++ add sp, sp, #72 ++ ldmfd sp, {sp, pc} ++ ++.Lretfloat_vfp: ++ flds s0, [sp] ++ b .Lclosure_epilogue_vfp ++.Lretdouble_vfp: ++ fldd d0, [sp] ++ b .Lclosure_epilogue_vfp ++.Lretint_vfp: ++ ldr r0, [sp] ++ b .Lclosure_epilogue_vfp ++.Lretlonglong_vfp: ++ ldmia sp, {r0, r1} ++ b .Lclosure_epilogue_vfp ++.Lretfloat_struct_vfp: ++ fldmiad sp, {d0-d1} ++ b .Lclosure_epilogue_vfp ++.Lretdouble_struct_vfp: ++ fldmiad sp, {d0-d3} ++ b .Lclosure_epilogue_vfp ++ ++.ffi_closure_VFP_end: ++ UNWIND .fnend ++ .size CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP) ++#endif ++ ++ENTRY(ffi_arm_trampoline) ++ stmfd sp!, {r0-r3} ++ ldr r0, [pc] ++ ldr pc, [pc] ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S +--- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,4455 @@ ++#ifdef __arm__ ++ ++# GENERATED CODE - DO NOT EDIT ++# This file was generated by src/arm/gentramp.sh ++ ++# Copyright (c) 2010, Plausible Labs Cooperative, Inc. ++# ++# 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: ++# ++# The above copyright notice and this permission notice shall be included ++# in all copies or substantial portions of the Software. ++# ++# 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. ++# ----------------------------------------------------------------------- ++ ++.text ++.align 12 ++.globl _ffi_closure_trampoline_table_page ++_ffi_closure_trampoline_table_page: ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ // trampoline ++ // Save to stack ++ stmfd sp!, {r0-r3} ++ ++ // Load the context argument from the config page. ++ // This places the first usable config value at _ffi_closure_trampoline_table-4080 ++ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. ++ ldr r0, [pc, #-4092] ++ ++ // Load the jump address from the config page. ++ ldr pc, [pc, #-4092] ++ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c +--- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-04-26 08:17:59.000000000 +0800 +@@ -0,0 +1,688 @@ ++/* ----------------------------------------------------------------------- ++ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. ++ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ ++ Code to allocate and deallocate memory for closures. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- */ ++ ++#if defined __linux__ && !defined _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++ ++#include ++#include ++ ++#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE ++# if __gnu_linux__ && !defined(__ANDROID__) ++/* This macro indicates it may be forbidden to map anonymous memory ++ with both write and execute permission. Code compiled when this ++ option is defined will attempt to map such pages once, but if it ++ fails, it falls back to creating a temporary file in a writable and ++ executable filesystem and mapping pages from it into separate ++ locations in the virtual memory space, one location writable and ++ another executable. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# define HAVE_MNTENT 1 ++# endif ++# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) ++/* Windows systems may have Data Execution Protection (DEP) enabled, ++ which requires the use of VirtualMalloc/VirtualFree to alloc/free ++ executable memory. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# endif ++#endif ++ ++#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX ++# ifdef __linux__ ++/* When defined to 1 check for SELinux and if SELinux is active, ++ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that ++ might cause audit messages. */ ++# define FFI_MMAP_EXEC_SELINUX 1 ++# endif ++#endif ++ ++#if FFI_CLOSURES ++ ++# if FFI_EXEC_TRAMPOLINE_TABLE ++ ++// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. ++ ++# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ ++ ++#define USE_LOCKS 1 ++#define USE_DL_PREFIX 1 ++#ifdef __GNUC__ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 1 ++#endif ++#endif ++ ++/* We need to use mmap, not sbrk. */ ++#define HAVE_MORECORE 0 ++ ++/* We could, in theory, support mremap, but it wouldn't buy us anything. */ ++#define HAVE_MREMAP 0 ++ ++/* We have no use for this, so save some code and data. */ ++#define NO_MALLINFO 1 ++ ++/* We need all allocations to be in regular segments, otherwise we ++ lose track of the corresponding code address. */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++ ++/* Don't allocate more than a page unless needed. */ ++#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) ++ ++#if FFI_CLOSURE_TEST ++/* Don't release single pages, to avoid a worst-case scenario of ++ continuously allocating and releasing single pages, but release ++ pairs of pages, which should do just as well given that allocations ++ are likely to be small. */ ++#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) ++#endif ++ ++#include ++#include ++#include ++#include ++#ifndef _MSC_VER ++#include ++#endif ++#include ++#include ++#if !defined(X86_WIN32) && !defined(X86_WIN64) ++#ifdef HAVE_MNTENT ++#include ++#endif /* HAVE_MNTENT */ ++#include ++#include ++ ++/* We don't want sys/mman.h to be included after we redefine mmap and ++ dlmunmap. */ ++#include ++#define LACKS_SYS_MMAN_H 1 ++ ++#if FFI_MMAP_EXEC_SELINUX ++#include ++#include ++ ++static int selinux_enabled = -1; ++ ++static int ++selinux_enabled_check (void) ++{ ++ struct statfs sfs; ++ FILE *f; ++ char *buf = NULL; ++ size_t len = 0; ++ ++ if (statfs ("/selinux", &sfs) >= 0 ++ && (unsigned int) sfs.f_type == 0xf97cff8cU) ++ return 1; ++ f = fopen ("/proc/mounts", "r"); ++ if (f == NULL) ++ return 0; ++ while (getline (&buf, &len, f) >= 0) ++ { ++ char *p = strchr (buf, ' '); ++ if (p == NULL) ++ break; ++ p = strchr (p + 1, ' '); ++ if (p == NULL) ++ break; ++ if (strncmp (p + 1, "selinuxfs ", 10) == 0) ++ { ++ free (buf); ++ fclose (f); ++ return 1; ++ } ++ } ++ free (buf); ++ fclose (f); ++ return 0; ++} ++ ++#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ ++ : (selinux_enabled = selinux_enabled_check ())) ++ ++#else ++ ++#define is_selinux_enabled() 0 ++ ++#endif /* !FFI_MMAP_EXEC_SELINUX */ ++ ++/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ ++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#include ++ ++static int emutramp_enabled = -1; ++ ++static int ++emutramp_enabled_check (void) ++{ ++ char *buf = NULL; ++ size_t len = 0; ++ FILE *f; ++ int ret; ++ f = fopen ("/proc/self/status", "r"); ++ if (f == NULL) ++ return 0; ++ ret = 0; ++ ++ while (getline (&buf, &len, f) != -1) ++ if (!strncmp (buf, "PaX:", 4)) ++ { ++ char emutramp; ++ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) ++ ret = (emutramp == 'E'); ++ break; ++ } ++ free (buf); ++ fclose (f); ++ return ret; ++} ++ ++#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ ++ : (emutramp_enabled = emutramp_enabled_check ())) ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++#elif defined (__CYGWIN__) || defined(__INTERIX) ++ ++#include ++ ++/* Cygwin is Linux-like, but not quite that Linux-like. */ ++#define is_selinux_enabled() 0 ++ ++#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ ++ ++#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#define is_emutramp_enabled() 0 ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ ++/* Declare all functions defined in dlmalloc.c as static. */ ++static void *dlmalloc(size_t); ++static void dlfree(void*); ++static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; ++static void *dlrealloc(void *, size_t) MAYBE_UNUSED; ++static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; ++static void *dlvalloc(size_t) MAYBE_UNUSED; ++static int dlmallopt(int, int) MAYBE_UNUSED; ++static size_t dlmalloc_footprint(void) MAYBE_UNUSED; ++static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; ++static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; ++static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; ++static void *dlpvalloc(size_t) MAYBE_UNUSED; ++static int dlmalloc_trim(size_t) MAYBE_UNUSED; ++static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; ++static void dlmalloc_stats(void) MAYBE_UNUSED; ++ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++/* Use these for mmap and munmap within dlmalloc.c. */ ++static void *dlmmap(void *, size_t, int, int, int, off_t); ++static int dlmunmap(void *, size_t); ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++ ++#define mmap dlmmap ++#define munmap dlmunmap ++ ++#include "dlmalloc.c" ++ ++#undef mmap ++#undef munmap ++ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++ ++/* A mutex used to synchronize access to *exec* variables in this file. */ ++static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++/* A file descriptor of a temporary file from which we'll map ++ executable pages. */ ++static int execfd = -1; ++ ++/* The amount of space already allocated from the temporary file. */ ++static size_t execsize = 0; ++ ++/* Open a temporary file name, and immediately unlink it. */ ++static int ++open_temp_exec_file_name (char *name, int flags) ++{ ++ int fd; ++ ++#ifdef HAVE_MKOSTEMP ++ fd = mkostemp (name, flags); ++#else ++ fd = mkstemp (name); ++#endif ++ ++ if (fd != -1) ++ unlink (name); ++ ++ return fd; ++} ++ ++/* Open a temporary file in the named directory. */ ++static int ++open_temp_exec_file_dir (const char *dir) ++{ ++ static const char suffix[] = "/ffiXXXXXX"; ++ int lendir, flags; ++ char *tempname; ++#ifdef O_TMPFILE ++ int fd; ++#endif ++ ++#ifdef O_CLOEXEC ++ flags = O_CLOEXEC; ++#else ++ flags = 0; ++#endif ++ ++#ifdef O_TMPFILE ++ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); ++ /* If the running system does not support the O_TMPFILE flag then retry without it. */ ++ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { ++ return fd; ++ } else { ++ errno = 0; ++ } ++#endif ++ ++ lendir = strlen (dir); ++ tempname = __builtin_alloca (lendir + sizeof (suffix)); ++ ++ if (!tempname) ++ return -1; ++ ++ memcpy (tempname, dir, lendir); ++ memcpy (tempname + lendir, suffix, sizeof (suffix)); ++ ++ return open_temp_exec_file_name (tempname, flags); ++} ++ ++/* Open a temporary file in the directory in the named environment ++ variable. */ ++static int ++open_temp_exec_file_env (const char *envvar) ++{ ++ const char *value = getenv (envvar); ++ ++ if (!value) ++ return -1; ++ ++ return open_temp_exec_file_dir (value); ++} ++ ++#ifdef HAVE_MNTENT ++/* Open a temporary file in an executable and writable mount point ++ listed in the mounts file. Subsequent calls with the same mounts ++ keep searching for mount points in the same file. Providing NULL ++ as the mounts file closes the file. */ ++static int ++open_temp_exec_file_mnt (const char *mounts) ++{ ++ static const char *last_mounts; ++ static FILE *last_mntent; ++ ++ if (mounts != last_mounts) ++ { ++ if (last_mntent) ++ endmntent (last_mntent); ++ ++ last_mounts = mounts; ++ ++ if (mounts) ++ last_mntent = setmntent (mounts, "r"); ++ else ++ last_mntent = NULL; ++ } ++ ++ if (!last_mntent) ++ return -1; ++ ++ for (;;) ++ { ++ int fd; ++ struct mntent mnt; ++ char buf[MAXPATHLEN * 3]; ++ ++ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) ++ return -1; ++ ++ if (hasmntopt (&mnt, "ro") ++ || hasmntopt (&mnt, "noexec") ++ || access (mnt.mnt_dir, W_OK)) ++ continue; ++ ++ fd = open_temp_exec_file_dir (mnt.mnt_dir); ++ ++ if (fd != -1) ++ return fd; ++ } ++} ++#endif /* HAVE_MNTENT */ ++ ++/* Instructions to look for a location to hold a temporary file that ++ can be mapped in for execution. */ ++static struct ++{ ++ int (*func)(const char *); ++ const char *arg; ++ int repeat; ++} open_temp_exec_file_opts[] = { ++ { open_temp_exec_file_env, "TMPDIR", 0 }, ++ { open_temp_exec_file_dir, "/tmp", 0 }, ++ { open_temp_exec_file_dir, "/var/tmp", 0 }, ++ { open_temp_exec_file_dir, "/dev/shm", 0 }, ++ { open_temp_exec_file_env, "HOME", 0 }, ++#ifdef HAVE_MNTENT ++ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, ++ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, ++#endif /* HAVE_MNTENT */ ++}; ++ ++/* Current index into open_temp_exec_file_opts. */ ++static int open_temp_exec_file_opts_idx = 0; ++ ++/* Reset a current multi-call func, then advances to the next entry. ++ If we're at the last, go back to the first and return nonzero, ++ otherwise return zero. */ ++static int ++open_temp_exec_file_opts_next (void) ++{ ++ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); ++ ++ open_temp_exec_file_opts_idx++; ++ if (open_temp_exec_file_opts_idx ++ == (sizeof (open_temp_exec_file_opts) ++ / sizeof (*open_temp_exec_file_opts))) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++/* Return a file descriptor of a temporary zero-sized file in a ++ writable and executable filesystem. */ ++static int ++open_temp_exec_file (void) ++{ ++ int fd; ++ ++ do ++ { ++ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func ++ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); ++ ++ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat ++ || fd == -1) ++ { ++ if (open_temp_exec_file_opts_next ()) ++ break; ++ } ++ } ++ while (fd == -1); ++ ++ return fd; ++} ++ ++/* Map in a chunk of memory from the temporary exec file into separate ++ locations in the virtual memory address space, one writable and one ++ executable. Returns the address of the writable portion, after ++ storing an offset to the corresponding executable portion at the ++ last word of the requested chunk. */ ++static void * ++dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) ++{ ++ void *ptr; ++ ++ if (execfd == -1) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ retry_open: ++ execfd = open_temp_exec_file (); ++ if (execfd == -1) ++ return MFAIL; ++ } ++ ++ offset = execsize; ++ ++ if (ftruncate (execfd, offset + length)) ++ return MFAIL; ++ ++ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); ++ flags |= MAP_SHARED; ++ ++ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, ++ flags, execfd, offset); ++ if (ptr == MFAIL) ++ { ++ if (!offset) ++ { ++ close (execfd); ++ goto retry_open; ++ } ++ ftruncate (execfd, offset); ++ return MFAIL; ++ } ++ else if (!offset ++ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts_next (); ++ ++ start = mmap (start, length, prot, flags, execfd, offset); ++ ++ if (start == MFAIL) ++ { ++ munmap (ptr, length); ++ ftruncate (execfd, offset); ++ return start; ++ } ++ ++ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; ++ ++ execsize += length; ++ ++ return start; ++} ++ ++/* Map in a writable and executable chunk of memory if possible. ++ Failing that, fall back to dlmmap_locked. */ ++static void * ++dlmmap (void *start, size_t length, int prot, ++ int flags, int fd, off_t offset) ++{ ++ void *ptr; ++ ++ assert (start == NULL && length % malloc_getpagesize == 0 ++ && prot == (PROT_READ | PROT_WRITE) ++ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) ++ && fd == -1 && offset == 0); ++ ++#if FFI_CLOSURE_TEST ++ printf ("mapping in %zi\n", length); ++#endif ++ ++ if (execfd == -1 && is_emutramp_enabled ()) ++ { ++ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); ++ return ptr; ++ } ++ ++ if (execfd == -1 && !is_selinux_enabled ()) ++ { ++ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); ++ ++ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) ++ /* Cool, no need to mess with separate segments. */ ++ return ptr; ++ ++ /* If MREMAP_DUP is ever introduced and implemented, try mmap ++ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with ++ MREMAP_DUP and prot at this point. */ ++ } ++ ++ if (execsize == 0 || execfd == -1) ++ { ++ pthread_mutex_lock (&open_temp_exec_file_mutex); ++ ptr = dlmmap_locked (start, length, prot, flags, offset); ++ pthread_mutex_unlock (&open_temp_exec_file_mutex); ++ ++ return ptr; ++ } ++ ++ return dlmmap_locked (start, length, prot, flags, offset); ++} ++ ++/* Release memory at the given address, as well as the corresponding ++ executable page if it's separate. */ ++static int ++dlmunmap (void *start, size_t length) ++{ ++ /* We don't bother decreasing execsize or truncating the file, since ++ we can't quite tell whether we're unmapping the end of the file. ++ We don't expect frequent deallocation anyway. If we did, we ++ could locate pages in the file by writing to the pages being ++ deallocated and checking that the file contents change. ++ Yuck. */ ++ msegmentptr seg = segment_holding (gm, start); ++ void *code; ++ ++#if FFI_CLOSURE_TEST ++ printf ("unmapping %zi\n", length); ++#endif ++ ++ if (seg && (code = add_segment_exec_offset (start, seg)) != start) ++ { ++ int ret = munmap (code, length); ++ if (ret) ++ return ret; ++ } ++ ++ return munmap (start, length); ++} ++ ++#if FFI_CLOSURE_FREE_CODE ++/* Return segment holding given code address. */ ++static msegmentptr ++segment_holding_code (mstate m, char* addr) ++{ ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= add_segment_exec_offset (sp->base, sp) ++ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++#endif ++ ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++ ++/* Allocate a chunk of memory with the given size. Returns a pointer ++ to the writable address, and sets *CODE to the executable ++ corresponding virtual address. */ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ void *ptr; ++ ++ if (!code) ++ return NULL; ++ ++ ptr = dlmalloc (size); ++ ++ if (ptr) ++ { ++ msegmentptr seg = segment_holding (gm, ptr); ++ ++ *code = add_segment_exec_offset (ptr, seg); ++ } ++ ++ return ptr; ++} ++ ++/* Release a chunk of memory allocated with ffi_closure_alloc. If ++ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the ++ writable or the executable address given. Otherwise, only the ++ writable address can be provided here. */ ++void ++ffi_closure_free (void *ptr) ++{ ++#if FFI_CLOSURE_FREE_CODE ++ msegmentptr seg = segment_holding_code (gm, ptr); ++ ++ if (seg) ++ ptr = sub_segment_exec_offset (ptr, seg); ++#endif ++ ++ dlfree (ptr); ++} ++ ++ ++#if FFI_CLOSURE_TEST ++/* Do some internal sanity testing to make sure allocation and ++ deallocation of pages are working as intended. */ ++int main () ++{ ++ void *p[3]; ++#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) ++#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) ++ GET (0, malloc_getpagesize / 2); ++ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); ++ PUT (1); ++ GET (1, 2 * malloc_getpagesize); ++ GET (2, malloc_getpagesize / 2); ++ PUT (1); ++ PUT (0); ++ PUT (2); ++ return 0; ++} ++#endif /* FFI_CLOSURE_TEST */ ++# else /* ! FFI_MMAP_EXEC_WRIT */ ++ ++/* On many systems, memory returned by malloc is writable and ++ executable, so just use it. */ ++ ++#include ++ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ if (!code) ++ return NULL; ++ ++ return *code = malloc (size); ++} ++ ++void ++ffi_closure_free (void *ptr) ++{ ++ free (ptr); ++} ++ ++# endif /* ! FFI_MMAP_EXEC_WRIT */ ++#endif /* FFI_CLOSURES */ +diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c +--- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-04-26 09:40:43.000000000 +0800 +@@ -0,0 +1,5161 @@ ++/* ++ This is a version (aka dlmalloc) of malloc/free/realloc written by ++ Doug Lea and released to the public domain, as explained at ++ http://creativecommons.org/licenses/publicdomain. Send questions, ++ comments, complaints, performance data, etc to dl@cs.oswego.edu ++ ++* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) ++ ++ Note: There may be an updated version of this malloc obtainable at ++ ftp://gee.cs.oswego.edu/pub/misc/malloc.c ++ Check before installing! ++ ++* Quickstart ++ ++ This library is all in one file to simplify the most common usage: ++ ftp it, compile it (-O3), and link it into another program. All of ++ the compile-time options default to reasonable values for use on ++ most platforms. You might later want to step through various ++ compile-time and dynamic tuning options. ++ ++ For convenience, an include file for code using this malloc is at: ++ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h ++ You don't really need this .h file unless you call functions not ++ defined in your system include files. The .h file contains only the ++ excerpts from this file needed for using this malloc on ANSI C/C++ ++ systems, so long as you haven't changed compile-time options about ++ naming and tuning parameters. If you do, then you can create your ++ own malloc.h that does include all settings by cutting at the point ++ indicated below. Note that you may already by default be using a C ++ library containing a malloc that is based on some version of this ++ malloc (for example in linux). You might still want to use the one ++ in this file to customize settings or to avoid overheads associated ++ with library versions. ++ ++* Vital statistics: ++ ++ Supported pointer/size_t representation: 4 or 8 bytes ++ size_t MUST be an unsigned type of the same width as ++ pointers. (If you are using an ancient system that declares ++ size_t as a signed type, or need it to be a different width ++ than pointers, you can use a previous release of this malloc ++ (e.g. 2.7.2) supporting these.) ++ ++ Alignment: 8 bytes (default) ++ This suffices for nearly all current machines and C compilers. ++ However, you can define MALLOC_ALIGNMENT to be wider than this ++ if necessary (up to 128bytes), at the expense of using more space. ++ ++ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) ++ 8 or 16 bytes (if 8byte sizes) ++ Each malloced chunk has a hidden word of overhead holding size ++ and status information, and additional cross-check word ++ if FOOTERS is defined. ++ ++ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) ++ 8-byte ptrs: 32 bytes (including overhead) ++ ++ Even a request for zero bytes (i.e., malloc(0)) returns a ++ pointer to something of the minimum allocatable size. ++ The maximum overhead wastage (i.e., number of extra bytes ++ allocated than were requested in malloc) is less than or equal ++ to the minimum size, except for requests >= mmap_threshold that ++ are serviced via mmap(), where the worst case wastage is about ++ 32 bytes plus the remainder from a system page (the minimal ++ mmap unit); typically 4096 or 8192 bytes. ++ ++ Security: static-safe; optionally more or less ++ The "security" of malloc refers to the ability of malicious ++ code to accentuate the effects of errors (for example, freeing ++ space that is not currently malloc'ed or overwriting past the ++ ends of chunks) in code that calls malloc. This malloc ++ guarantees not to modify any memory locations below the base of ++ heap, i.e., static variables, even in the presence of usage ++ errors. The routines additionally detect most improper frees ++ and reallocs. All this holds as long as the static bookkeeping ++ for malloc itself is not corrupted by some other means. This ++ is only one aspect of security -- these checks do not, and ++ cannot, detect all possible programming errors. ++ ++ If FOOTERS is defined nonzero, then each allocated chunk ++ carries an additional check word to verify that it was malloced ++ from its space. These check words are the same within each ++ execution of a program using malloc, but differ across ++ executions, so externally crafted fake chunks cannot be ++ freed. This improves security by rejecting frees/reallocs that ++ could corrupt heap memory, in addition to the checks preventing ++ writes to statics that are always on. This may further improve ++ security at the expense of time and space overhead. (Note that ++ FOOTERS may also be worth using with MSPACES.) ++ ++ By default detected errors cause the program to abort (calling ++ "abort()"). You can override this to instead proceed past ++ errors by defining PROCEED_ON_ERROR. In this case, a bad free ++ has no effect, and a malloc that encounters a bad address ++ caused by user overwrites will ignore the bad address by ++ dropping pointers and indices to all known memory. This may ++ be appropriate for programs that should continue if at all ++ possible in the face of programming errors, although they may ++ run out of memory because dropped memory is never reclaimed. ++ ++ If you don't like either of these options, you can define ++ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything ++ else. And if if you are sure that your program using malloc has ++ no errors or vulnerabilities, you can define INSECURE to 1, ++ which might (or might not) provide a small performance improvement. ++ ++ Thread-safety: NOT thread-safe unless USE_LOCKS defined ++ When USE_LOCKS is defined, each public call to malloc, free, ++ etc is surrounded with either a pthread mutex or a win32 ++ spinlock (depending on WIN32). This is not especially fast, and ++ can be a major bottleneck. It is designed only to provide ++ minimal protection in concurrent environments, and to provide a ++ basis for extensions. If you are using malloc in a concurrent ++ program, consider instead using ptmalloc, which is derived from ++ a version of this malloc. (See http://www.malloc.de). ++ ++ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP ++ This malloc can use unix sbrk or any emulation (invoked using ++ the CALL_MORECORE macro) and/or mmap/munmap or any emulation ++ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system ++ memory. On most unix systems, it tends to work best if both ++ MORECORE and MMAP are enabled. On Win32, it uses emulations ++ based on VirtualAlloc. It also uses common C library functions ++ like memset. ++ ++ Compliance: I believe it is compliant with the Single Unix Specification ++ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably ++ others as well. ++ ++* Overview of algorithms ++ ++ This is not the fastest, most space-conserving, most portable, or ++ most tunable malloc ever written. However it is among the fastest ++ while also being among the most space-conserving, portable and ++ tunable. Consistent balance across these factors results in a good ++ general-purpose allocator for malloc-intensive programs. ++ ++ In most ways, this malloc is a best-fit allocator. Generally, it ++ chooses the best-fitting existing chunk for a request, with ties ++ broken in approximately least-recently-used order. (This strategy ++ normally maintains low fragmentation.) However, for requests less ++ than 256bytes, it deviates from best-fit when there is not an ++ exactly fitting available chunk by preferring to use space adjacent ++ to that used for the previous small request, as well as by breaking ++ ties in approximately most-recently-used order. (These enhance ++ locality of series of small allocations.) And for very large requests ++ (>= 256Kb by default), it relies on system memory mapping ++ facilities, if supported. (This helps avoid carrying around and ++ possibly fragmenting memory used only for large chunks.) ++ ++ All operations (except malloc_stats and mallinfo) have execution ++ times that are bounded by a constant factor of the number of bits in ++ a size_t, not counting any clearing in calloc or copying in realloc, ++ or actions surrounding MORECORE and MMAP that have times ++ proportional to the number of non-contiguous regions returned by ++ system allocation routines, which is often just 1. ++ ++ The implementation is not very modular and seriously overuses ++ macros. Perhaps someday all C compilers will do as good a job ++ inlining modular code as can now be done by brute-force expansion, ++ but now, enough of them seem not to. ++ ++ Some compilers issue a lot of warnings about code that is ++ dead/unreachable only on some platforms, and also about intentional ++ uses of negation on unsigned types. All known cases of each can be ++ ignored. ++ ++ For a longer but out of date high-level description, see ++ http://gee.cs.oswego.edu/dl/html/malloc.html ++ ++* MSPACES ++ If MSPACES is defined, then in addition to malloc, free, etc., ++ this file also defines mspace_malloc, mspace_free, etc. These ++ are versions of malloc routines that take an "mspace" argument ++ obtained using create_mspace, to control all internal bookkeeping. ++ If ONLY_MSPACES is defined, only these versions are compiled. ++ So if you would like to use this allocator for only some allocations, ++ and your system malloc for others, you can compile with ++ ONLY_MSPACES and then do something like... ++ static mspace mymspace = create_mspace(0,0); // for example ++ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) ++ ++ (Note: If you only need one instance of an mspace, you can instead ++ use "USE_DL_PREFIX" to relabel the global malloc.) ++ ++ You can similarly create thread-local allocators by storing ++ mspaces as thread-locals. For example: ++ static __thread mspace tlms = 0; ++ void* tlmalloc(size_t bytes) { ++ if (tlms == 0) tlms = create_mspace(0, 0); ++ return mspace_malloc(tlms, bytes); ++ } ++ void tlfree(void* mem) { mspace_free(tlms, mem); } ++ ++ Unless FOOTERS is defined, each mspace is completely independent. ++ You cannot allocate from one and free to another (although ++ conformance is only weakly checked, so usage errors are not always ++ caught). If FOOTERS is defined, then each chunk carries around a tag ++ indicating its originating mspace, and frees are directed to their ++ originating spaces. ++ ++ ------------------------- Compile-time options --------------------------- ++ ++Be careful in setting #define values for numerical constants of type ++size_t. On some systems, literal values are not automatically extended ++to size_t precision unless they are explicitly casted. ++ ++WIN32 default: defined if _WIN32 defined ++ Defining WIN32 sets up defaults for MS environment and compilers. ++ Otherwise defaults are for unix. ++ ++MALLOC_ALIGNMENT default: (size_t)8 ++ Controls the minimum alignment for malloc'ed chunks. It must be a ++ power of two and at least 8, even on machines for which smaller ++ alignments would suffice. It may be defined as larger than this ++ though. Note however that code and data structures are optimized for ++ the case of 8-byte alignment. ++ ++MSPACES default: 0 (false) ++ If true, compile in support for independent allocation spaces. ++ This is only supported if HAVE_MMAP is true. ++ ++ONLY_MSPACES default: 0 (false) ++ If true, only compile in mspace versions, not regular versions. ++ ++USE_LOCKS default: 0 (false) ++ Causes each call to each public routine to be surrounded with ++ pthread or WIN32 mutex lock/unlock. (If set true, this can be ++ overridden on a per-mspace basis for mspace versions.) ++ ++FOOTERS default: 0 ++ If true, provide extra checking and dispatching by placing ++ information in the footers of allocated chunks. This adds ++ space and time overhead. ++ ++INSECURE default: 0 ++ If true, omit checks for usage errors and heap space overwrites. ++ ++USE_DL_PREFIX default: NOT defined ++ Causes compiler to prefix all public routines with the string 'dl'. ++ This can be useful when you only want to use this malloc in one part ++ of a program, using your regular system malloc elsewhere. ++ ++ABORT default: defined as abort() ++ Defines how to abort on failed checks. On most systems, a failed ++ check cannot die with an "assert" or even print an informative ++ message, because the underlying print routines in turn call malloc, ++ which will fail again. Generally, the best policy is to simply call ++ abort(). It's not very useful to do more than this because many ++ errors due to overwriting will show up as address faults (null, odd ++ addresses etc) rather than malloc-triggered checks, so will also ++ abort. Also, most compilers know that abort() does not return, so ++ can better optimize code conditionally calling it. ++ ++PROCEED_ON_ERROR default: defined as 0 (false) ++ Controls whether detected bad addresses cause them to bypassed ++ rather than aborting. If set, detected bad arguments to free and ++ realloc are ignored. And all bookkeeping information is zeroed out ++ upon a detected overwrite of freed heap space, thus losing the ++ ability to ever return it from malloc again, but enabling the ++ application to proceed. If PROCEED_ON_ERROR is defined, the ++ static variable malloc_corruption_error_count is compiled in ++ and can be examined to see if errors have occurred. This option ++ generates slower code than the default abort policy. ++ ++DEBUG default: NOT defined ++ The DEBUG setting is mainly intended for people trying to modify ++ this code or diagnose problems when porting to new platforms. ++ However, it may also be able to better isolate user errors than just ++ using runtime checks. The assertions in the check routines spell ++ out in more detail the assumptions and invariants underlying the ++ algorithms. The checking is fairly extensive, and will slow down ++ execution noticeably. Calling malloc_stats or mallinfo with DEBUG ++ set will attempt to check every non-mmapped allocated and free chunk ++ in the course of computing the summaries. ++ ++ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) ++ Debugging assertion failures can be nearly impossible if your ++ version of the assert macro causes malloc to be called, which will ++ lead to a cascade of further failures, blowing the runtime stack. ++ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), ++ which will usually make debugging easier. ++ ++MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 ++ The action to take before "return 0" when malloc fails to be able to ++ return memory because there is none available. ++ ++HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES ++ True if this system supports sbrk or an emulation of it. ++ ++MORECORE default: sbrk ++ The name of the sbrk-style system routine to call to obtain more ++ memory. See below for guidance on writing custom MORECORE ++ functions. The type of the argument to sbrk/MORECORE varies across ++ systems. It cannot be size_t, because it supports negative ++ arguments, so it is normally the signed type of the same width as ++ size_t (sometimes declared as "intptr_t"). It doesn't much matter ++ though. Internally, we only call it with arguments less than half ++ the max value of a size_t, which should work across all reasonable ++ possibilities, although sometimes generating compiler warnings. See ++ near the end of this file for guidelines for creating a custom ++ version of MORECORE. ++ ++MORECORE_CONTIGUOUS default: 1 (true) ++ If true, take advantage of fact that consecutive calls to MORECORE ++ with positive arguments always return contiguous increasing ++ addresses. This is true of unix sbrk. It does not hurt too much to ++ set it true anyway, since malloc copes with non-contiguities. ++ Setting it false when definitely non-contiguous saves time ++ and possibly wasted space it would take to discover this though. ++ ++MORECORE_CANNOT_TRIM default: NOT defined ++ True if MORECORE cannot release space back to the system when given ++ negative arguments. This is generally necessary only if you are ++ using a hand-crafted MORECORE function that cannot handle negative ++ arguments. ++ ++HAVE_MMAP default: 1 (true) ++ True if this system supports mmap or an emulation of it. If so, and ++ HAVE_MORECORE is not true, MMAP is used for all system ++ allocation. If set and HAVE_MORECORE is true as well, MMAP is ++ primarily used to directly allocate very large blocks. It is also ++ used as a backup strategy in cases where MORECORE fails to provide ++ space from system. Note: A single call to MUNMAP is assumed to be ++ able to unmap memory that may have be allocated using multiple calls ++ to MMAP, so long as they are adjacent. ++ ++HAVE_MREMAP default: 1 on linux, else 0 ++ If true realloc() uses mremap() to re-allocate large blocks and ++ extend or shrink allocation spaces. ++ ++MMAP_CLEARS default: 1 on unix ++ True if mmap clears memory so calloc doesn't need to. This is true ++ for standard unix mmap using /dev/zero. ++ ++USE_BUILTIN_FFS default: 0 (i.e., not used) ++ Causes malloc to use the builtin ffs() function to compute indices. ++ Some compilers may recognize and intrinsify ffs to be faster than the ++ supplied C version. Also, the case of x86 using gcc is special-cased ++ to an asm instruction, so is already as fast as it can be, and so ++ this setting has no effect. (On most x86s, the asm version is only ++ slightly faster than the C version.) ++ ++malloc_getpagesize default: derive from system includes, or 4096. ++ The system page size. To the extent possible, this malloc manages ++ memory from the system in page-size units. This may be (and ++ usually is) a function rather than a constant. This is ignored ++ if WIN32, where page size is determined using getSystemInfo during ++ initialization. ++ ++USE_DEV_RANDOM default: 0 (i.e., not used) ++ Causes malloc to use /dev/random to initialize secure magic seed for ++ stamping footers. Otherwise, the current time is used. ++ ++NO_MALLINFO default: 0 ++ If defined, don't compile "mallinfo". This can be a simple way ++ of dealing with mismatches between system declarations and ++ those in this file. ++ ++MALLINFO_FIELD_TYPE default: size_t ++ The type of the fields in the mallinfo struct. This was originally ++ defined as "int" in SVID etc, but is more usefully defined as ++ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set ++ ++REALLOC_ZERO_BYTES_FREES default: not defined ++ This should be set if a call to realloc with zero bytes should ++ be the same as a call to free. Some people think it should. Otherwise, ++ since this malloc returns a unique pointer for malloc(0), so does ++ realloc(p, 0). ++ ++LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H ++LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H ++LACKS_STDLIB_H default: NOT defined unless on WIN32 ++ Define these if your system does not have these header files. ++ You might need to manually insert some of the declarations they provide. ++ ++DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, ++ system_info.dwAllocationGranularity in WIN32, ++ otherwise 64K. ++ Also settable using mallopt(M_GRANULARITY, x) ++ The unit for allocating and deallocating memory from the system. On ++ most systems with contiguous MORECORE, there is no reason to ++ make this more than a page. However, systems with MMAP tend to ++ either require or encourage larger granularities. You can increase ++ this value to prevent system allocation functions to be called so ++ often, especially if they are slow. The value must be at least one ++ page and must be a power of two. Setting to 0 causes initialization ++ to either page size or win32 region size. (Note: In previous ++ versions of malloc, the equivalent of this option was called ++ "TOP_PAD") ++ ++DEFAULT_TRIM_THRESHOLD default: 2MB ++ Also settable using mallopt(M_TRIM_THRESHOLD, x) ++ The maximum amount of unused top-most memory to keep before ++ releasing via malloc_trim in free(). Automatic trimming is mainly ++ useful in long-lived programs using contiguous MORECORE. Because ++ trimming via sbrk can be slow on some systems, and can sometimes be ++ wasteful (in cases where programs immediately afterward allocate ++ more large chunks) the value should be high enough so that your ++ overall system performance would improve by releasing this much ++ memory. As a rough guide, you might set to a value close to the ++ average size of a process (program) running on your system. ++ Releasing this much memory would allow such a process to run in ++ memory. Generally, it is worth tuning trim thresholds when a ++ program undergoes phases where several large chunks are allocated ++ and released in ways that can reuse each other's storage, perhaps ++ mixed with phases where there are no such chunks at all. The trim ++ value must be greater than page size to have any useful effect. To ++ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick ++ some people use of mallocing a huge space and then freeing it at ++ program startup, in an attempt to reserve system memory, doesn't ++ have the intended effect under automatic trimming, since that memory ++ will immediately be returned to the system. ++ ++DEFAULT_MMAP_THRESHOLD default: 256K ++ Also settable using mallopt(M_MMAP_THRESHOLD, x) ++ The request size threshold for using MMAP to directly service a ++ request. Requests of at least this size that cannot be allocated ++ using already-existing space will be serviced via mmap. (If enough ++ normal freed space already exists it is used instead.) Using mmap ++ segregates relatively large chunks of memory so that they can be ++ individually obtained and released from the host system. A request ++ serviced through mmap is never reused by any other request (at least ++ not directly; the system may just so happen to remap successive ++ requests to the same locations). Segregating space in this way has ++ the benefits that: Mmapped space can always be individually released ++ back to the system, which helps keep the system level memory demands ++ of a long-lived program low. Also, mapped memory doesn't become ++ `locked' between other chunks, as can happen with normally allocated ++ chunks, which means that even trimming via malloc_trim would not ++ release them. However, it has the disadvantage that the space ++ cannot be reclaimed, consolidated, and then used to service later ++ requests, as happens with normal chunks. The advantages of mmap ++ nearly always outweigh disadvantages for "large" chunks, but the ++ value of "large" may vary across systems. The default is an ++ empirically derived value that works well in most systems. You can ++ disable mmap by setting to MAX_SIZE_T. ++ ++*/ ++ ++#ifndef WIN32 ++#ifdef _WIN32 ++#define WIN32 1 ++#endif /* _WIN32 */ ++#endif /* WIN32 */ ++#ifdef WIN32 ++#define WIN32_LEAN_AND_MEAN ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_UNISTD_H ++#define LACKS_SYS_PARAM_H ++#define LACKS_SYS_MMAN_H ++#define LACKS_STRING_H ++#define LACKS_STRINGS_H ++#define LACKS_SYS_TYPES_H ++#define LACKS_ERRNO_H ++#define MALLOC_FAILURE_ACTION ++#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ ++#endif /* WIN32 */ ++ ++#ifdef __OS2__ ++#define INCL_DOS ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_SYS_MMAN_H ++#endif /* __OS2__ */ ++ ++#if defined(DARWIN) || defined(_DARWIN) ++/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ ++#ifndef HAVE_MORECORE ++#define HAVE_MORECORE 0 ++#define HAVE_MMAP 1 +#endif /* HAVE_MORECORE */ +#endif /* DARWIN */ + -+#ifndef LACKS_SYS_TYPES_H -+#include /* For size_t */ -+#endif /* LACKS_SYS_TYPES_H */ ++#ifndef LACKS_SYS_TYPES_H ++#include /* For size_t */ ++#endif /* LACKS_SYS_TYPES_H */ ++ ++/* The maximum possible size_t value has all bits set */ ++#define MAX_SIZE_T (~(size_t)0) ++ ++#ifndef ONLY_MSPACES ++#define ONLY_MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#ifndef MSPACES ++#if ONLY_MSPACES ++#define MSPACES 1 ++#else /* ONLY_MSPACES */ ++#define MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#endif /* MSPACES */ ++#ifndef MALLOC_ALIGNMENT ++#define MALLOC_ALIGNMENT ((size_t)8U) ++#endif /* MALLOC_ALIGNMENT */ ++#ifndef FOOTERS ++#define FOOTERS 0 ++#endif /* FOOTERS */ ++#ifndef ABORT ++#define ABORT abort() ++#endif /* ABORT */ ++#ifndef ABORT_ON_ASSERT_FAILURE ++#define ABORT_ON_ASSERT_FAILURE 1 ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#ifndef PROCEED_ON_ERROR ++#define PROCEED_ON_ERROR 0 ++#endif /* PROCEED_ON_ERROR */ ++#ifndef USE_LOCKS ++#define USE_LOCKS 0 ++#endif /* USE_LOCKS */ ++#ifndef INSECURE ++#define INSECURE 0 ++#endif /* INSECURE */ ++#ifndef HAVE_MMAP ++#define HAVE_MMAP 1 ++#endif /* HAVE_MMAP */ ++#ifndef MMAP_CLEARS ++#define MMAP_CLEARS 1 ++#endif /* MMAP_CLEARS */ ++#ifndef HAVE_MREMAP ++#ifdef linux ++#define HAVE_MREMAP 1 ++#else /* linux */ ++#define HAVE_MREMAP 0 ++#endif /* linux */ ++#endif /* HAVE_MREMAP */ ++#ifndef MALLOC_FAILURE_ACTION ++#define MALLOC_FAILURE_ACTION errno = ENOMEM; ++#endif /* MALLOC_FAILURE_ACTION */ ++#ifndef HAVE_MORECORE ++#if ONLY_MSPACES ++#define HAVE_MORECORE 0 ++#else /* ONLY_MSPACES */ ++#define HAVE_MORECORE 1 ++#endif /* ONLY_MSPACES */ ++#endif /* HAVE_MORECORE */ ++#if !HAVE_MORECORE ++#define MORECORE_CONTIGUOUS 0 ++#else /* !HAVE_MORECORE */ ++#ifndef MORECORE ++#define MORECORE sbrk ++#endif /* MORECORE */ ++#ifndef MORECORE_CONTIGUOUS ++#define MORECORE_CONTIGUOUS 1 ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* HAVE_MORECORE */ ++#ifndef DEFAULT_GRANULARITY ++#if MORECORE_CONTIGUOUS ++#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ ++#else /* MORECORE_CONTIGUOUS */ ++#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* DEFAULT_GRANULARITY */ ++#ifndef DEFAULT_TRIM_THRESHOLD ++#ifndef MORECORE_CANNOT_TRIM ++#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) ++#else /* MORECORE_CANNOT_TRIM */ ++#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T ++#endif /* MORECORE_CANNOT_TRIM */ ++#endif /* DEFAULT_TRIM_THRESHOLD */ ++#ifndef DEFAULT_MMAP_THRESHOLD ++#if HAVE_MMAP ++#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) ++#else /* HAVE_MMAP */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++#endif /* HAVE_MMAP */ ++#endif /* DEFAULT_MMAP_THRESHOLD */ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 0 ++#endif /* USE_BUILTIN_FFS */ ++#ifndef USE_DEV_RANDOM ++#define USE_DEV_RANDOM 0 ++#endif /* USE_DEV_RANDOM */ ++#ifndef NO_MALLINFO ++#define NO_MALLINFO 0 ++#endif /* NO_MALLINFO */ ++#ifndef MALLINFO_FIELD_TYPE ++#define MALLINFO_FIELD_TYPE size_t ++#endif /* MALLINFO_FIELD_TYPE */ ++ ++/* ++ mallopt tuning options. SVID/XPG defines four standard parameter ++ numbers for mallopt, normally defined in malloc.h. None of these ++ are used in this malloc, so setting them has no effect. But this ++ malloc does support the following options. ++*/ ++ ++#define M_TRIM_THRESHOLD (-1) ++#define M_GRANULARITY (-2) ++#define M_MMAP_THRESHOLD (-3) ++ ++/* ------------------------ Mallinfo declarations ------------------------ */ ++ ++#if !NO_MALLINFO ++/* ++ This version of malloc supports the standard SVID/XPG mallinfo ++ routine that returns a struct containing usage properties and ++ statistics. It should work on any system that has a ++ /usr/include/malloc.h defining struct mallinfo. The main ++ declaration needed is the mallinfo struct that is returned (by-copy) ++ by mallinfo(). The malloinfo struct contains a bunch of fields that ++ are not even meaningful in this version of malloc. These fields are ++ are instead filled by mallinfo() with other numbers that might be of ++ interest. ++ ++ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a ++ /usr/include/malloc.h file that includes a declaration of struct ++ mallinfo. If so, it is included; else a compliant version is ++ declared below. These must be precisely the same for mallinfo() to ++ work. The original SVID version of this struct, defined on most ++ systems with mallinfo, declares all fields as ints. But some others ++ define as unsigned long. If your system defines the fields using a ++ type of different width than listed here, you MUST #include your ++ system version and #define HAVE_USR_INCLUDE_MALLOC_H. ++*/ ++ ++/* #define HAVE_USR_INCLUDE_MALLOC_H */ ++ ++#ifdef HAVE_USR_INCLUDE_MALLOC_H ++#include "/usr/include/malloc.h" ++#else /* HAVE_USR_INCLUDE_MALLOC_H */ ++ ++/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ ++#define _STRUCT_MALLINFO ++ ++struct mallinfo { ++ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ ++ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ ++ MALLINFO_FIELD_TYPE smblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ ++ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ ++ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ ++ MALLINFO_FIELD_TYPE fordblks; /* total free space */ ++ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ ++}; ++ ++#endif /* HAVE_USR_INCLUDE_MALLOC_H */ ++#endif /* NO_MALLINFO */ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#if !ONLY_MSPACES ++ ++/* ------------------- Declarations of public routines ------------------- */ ++ ++#ifndef USE_DL_PREFIX ++#define dlcalloc calloc ++#define dlfree free ++#define dlmalloc malloc ++#define dlmemalign memalign ++#define dlrealloc realloc ++#define dlvalloc valloc ++#define dlpvalloc pvalloc ++#define dlmallinfo mallinfo ++#define dlmallopt mallopt ++#define dlmalloc_trim malloc_trim ++#define dlmalloc_stats malloc_stats ++#define dlmalloc_usable_size malloc_usable_size ++#define dlmalloc_footprint malloc_footprint ++#define dlmalloc_max_footprint malloc_max_footprint ++#define dlindependent_calloc independent_calloc ++#define dlindependent_comalloc independent_comalloc ++#endif /* USE_DL_PREFIX */ ++ ++ ++/* ++ malloc(size_t n) ++ Returns a pointer to a newly allocated chunk of at least n bytes, or ++ null if no space is available, in which case errno is set to ENOMEM ++ on ANSI C systems. ++ ++ If n is zero, malloc returns a minimum-sized chunk. (The minimum ++ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit ++ systems.) Note that size_t is an unsigned type, so calls with ++ arguments that would be negative if signed are interpreted as ++ requests for huge amounts of space, which will often fail. The ++ maximum supported value of n differs across systems, but is in all ++ cases less than the maximum representable value of a size_t. ++*/ ++void* dlmalloc(size_t); ++ ++/* ++ free(void* p) ++ Releases the chunk of memory pointed to by p, that had been previously ++ allocated using malloc or a related routine such as realloc. ++ It has no effect if p is null. If p was not malloced or already ++ freed, free(p) will by default cause the current program to abort. ++*/ ++void dlfree(void*); ++ ++/* ++ calloc(size_t n_elements, size_t element_size); ++ Returns a pointer to n_elements * element_size bytes, with all locations ++ set to zero. ++*/ ++void* dlcalloc(size_t, size_t); ++ ++/* ++ realloc(void* p, size_t n) ++ Returns a pointer to a chunk of size n that contains the same data ++ as does chunk p up to the minimum of (n, p's size) bytes, or null ++ if no space is available. ++ ++ The returned pointer may or may not be the same as p. The algorithm ++ prefers extending p in most cases when possible, otherwise it ++ employs the equivalent of a malloc-copy-free sequence. ++ ++ If p is null, realloc is equivalent to malloc. ++ ++ If space is not available, realloc returns null, errno is set (if on ++ ANSI) and p is NOT freed. ++ ++ if n is for fewer bytes than already held by p, the newly unused ++ space is lopped off and freed if possible. realloc with a size ++ argument of zero (re)allocates a minimum-sized chunk. ++ ++ The old unix realloc convention of allowing the last-free'd chunk ++ to be used as an argument to realloc is not supported. ++*/ ++ ++void* dlrealloc(void*, size_t); ++ ++/* ++ memalign(size_t alignment, size_t n); ++ Returns a pointer to a newly allocated chunk of n bytes, aligned ++ in accord with the alignment argument. ++ ++ The alignment argument should be a power of two. If the argument is ++ not a power of two, the nearest greater power is used. ++ 8-byte alignment is guaranteed by normal malloc calls, so don't ++ bother calling memalign with an argument of 8 or less. ++ ++ Overreliance on memalign is a sure way to fragment space. ++*/ ++void* dlmemalign(size_t, size_t); ++ ++/* ++ valloc(size_t n); ++ Equivalent to memalign(pagesize, n), where pagesize is the page ++ size of the system. If the pagesize is unknown, 4096 is used. ++*/ ++void* dlvalloc(size_t); ++ ++/* ++ mallopt(int parameter_number, int parameter_value) ++ Sets tunable parameters The format is to provide a ++ (parameter-number, parameter-value) pair. mallopt then sets the ++ corresponding parameter to the argument value if it can (i.e., so ++ long as the value is meaningful), and returns 1 if successful else ++ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, ++ normally defined in malloc.h. None of these are use in this malloc, ++ so setting them has no effect. But this malloc also supports other ++ options in mallopt. See below for details. Briefly, supported ++ parameters are as follows (listed defaults are for "typical" ++ configurations). ++ ++ Symbol param # default allowed param values ++ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) ++ M_GRANULARITY -2 page size any power of 2 >= page size ++ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) ++*/ ++int dlmallopt(int, int); ++ ++/* ++ malloc_footprint(); ++ Returns the number of bytes obtained from the system. The total ++ number of bytes allocated by malloc, realloc etc., is less than this ++ value. Unlike mallinfo, this function returns only a precomputed ++ result, so can be called frequently to monitor memory consumption. ++ Even if locks are otherwise defined, this function does not use them, ++ so results might not be up to date. ++*/ ++size_t dlmalloc_footprint(void); ++ ++/* ++ malloc_max_footprint(); ++ Returns the maximum number of bytes obtained from the system. This ++ value will be greater than current footprint if deallocated space ++ has been reclaimed by the system. The peak number of bytes allocated ++ by malloc, realloc etc., is less than this value. Unlike mallinfo, ++ this function returns only a precomputed result, so can be called ++ frequently to monitor memory consumption. Even if locks are ++ otherwise defined, this function does not use them, so results might ++ not be up to date. ++*/ ++size_t dlmalloc_max_footprint(void); ++ ++#if !NO_MALLINFO ++/* ++ mallinfo() ++ Returns (by copy) a struct containing various summary statistics: ++ ++ arena: current total non-mmapped bytes allocated from system ++ ordblks: the number of free chunks ++ smblks: always zero. ++ hblks: current number of mmapped regions ++ hblkhd: total bytes held in mmapped regions ++ usmblks: the maximum total allocated space. This will be greater ++ than current total if trimming has occurred. ++ fsmblks: always zero ++ uordblks: current total allocated space (normal or mmapped) ++ fordblks: total free space ++ keepcost: the maximum number of bytes that could ideally be released ++ back to system via malloc_trim. ("ideally" means that ++ it ignores page restrictions etc.) ++ ++ Because these fields are ints, but internal bookkeeping may ++ be kept as longs, the reported values may wrap around zero and ++ thus be inaccurate. ++*/ ++struct mallinfo dlmallinfo(void); ++#endif /* NO_MALLINFO */ ++ ++/* ++ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); ++ ++ independent_calloc is similar to calloc, but instead of returning a ++ single cleared space, it returns an array of pointers to n_elements ++ independent elements that can hold contents of size elem_size, each ++ of which starts out cleared, and can be independently freed, ++ realloc'ed etc. The elements are guaranteed to be adjacently ++ allocated (this is not guaranteed to occur with multiple callocs or ++ mallocs), which may also improve cache locality in some ++ applications. ++ ++ The "chunks" argument is optional (i.e., may be null, which is ++ probably the most typical usage). If it is null, the returned array ++ is itself dynamically allocated and should also be freed when it is ++ no longer needed. Otherwise, the chunks array must be of at least ++ n_elements in length. It is filled in with the pointers to the ++ chunks. ++ ++ In either case, independent_calloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and "chunks" ++ is null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). ++ ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use regular calloc and assign pointers into this ++ space to represent elements. (In this case though, you cannot ++ independently free elements.) ++ ++ independent_calloc simplifies and speeds up implementations of many ++ kinds of pools. It may also be useful when constructing large data ++ structures that initially have a fixed number of fixed-sized nodes, ++ but the number is not known at compile time, and some of the nodes ++ may later need to be freed. For example: ++ ++ struct Node { int item; struct Node* next; }; ++ ++ struct Node* build_list() { ++ struct Node** pool; ++ int n = read_number_of_nodes_needed(); ++ if (n <= 0) return 0; ++ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); ++ if (pool == 0) die(); ++ // organize into a linked list... ++ struct Node* first = pool[0]; ++ for (i = 0; i < n-1; ++i) ++ pool[i]->next = pool[i+1]; ++ free(pool); // Can now free the array (or not, if it is needed later) ++ return first; ++ } ++*/ ++void** dlindependent_calloc(size_t, size_t, void**); ++ ++/* ++ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); ++ ++ independent_comalloc allocates, all at once, a set of n_elements ++ chunks with sizes indicated in the "sizes" array. It returns ++ an array of pointers to these elements, each of which can be ++ independently freed, realloc'ed etc. The elements are guaranteed to ++ be adjacently allocated (this is not guaranteed to occur with ++ multiple callocs or mallocs), which may also improve cache locality ++ in some applications. ++ ++ The "chunks" argument is optional (i.e., may be null). If it is null ++ the returned array is itself dynamically allocated and should also ++ be freed when it is no longer needed. Otherwise, the chunks array ++ must be of at least n_elements in length. It is filled in with the ++ pointers to the chunks. ++ ++ In either case, independent_comalloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and chunks is ++ null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). ++ ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use a single regular malloc, and assign pointers at ++ particular offsets in the aggregate space. (In this case though, you ++ cannot independently free elements.) ++ ++ independent_comallac differs from independent_calloc in that each ++ element may have a different size, and also that it does not ++ automatically clear elements. ++ ++ independent_comalloc can be used to speed up allocation in cases ++ where several structs or objects must always be allocated at the ++ same time. For example: ++ ++ struct Head { ... } ++ struct Foot { ... } ++ ++ void send_message(char* msg) { ++ int msglen = strlen(msg); ++ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; ++ void* chunks[3]; ++ if (independent_comalloc(3, sizes, chunks) == 0) ++ die(); ++ struct Head* head = (struct Head*)(chunks[0]); ++ char* body = (char*)(chunks[1]); ++ struct Foot* foot = (struct Foot*)(chunks[2]); ++ // ... ++ } ++ ++ In general though, independent_comalloc is worth using only for ++ larger values of n_elements. For small values, you probably won't ++ detect enough difference from series of malloc calls to bother. ++ ++ Overuse of independent_comalloc can increase overall memory usage, ++ since it cannot reuse existing noncontiguous small chunks that ++ might be available for some of the elements. ++*/ ++void** dlindependent_comalloc(size_t, size_t*, void**); ++ ++ ++/* ++ pvalloc(size_t n); ++ Equivalent to valloc(minimum-page-that-holds(n)), that is, ++ round up n to nearest pagesize. ++ */ ++void* dlpvalloc(size_t); ++ ++/* ++ malloc_trim(size_t pad); ++ ++ If possible, gives memory back to the system (via negative arguments ++ to sbrk) if there is unused memory at the `high' end of the malloc ++ pool or in unused MMAP segments. You can call this after freeing ++ large blocks of memory to potentially reduce the system-level memory ++ requirements of a program. However, it cannot guarantee to reduce ++ memory. Under some allocation patterns, some large free blocks of ++ memory will be locked between two used chunks, so they cannot be ++ given back to the system. ++ ++ The `pad' argument to malloc_trim represents the amount of free ++ trailing space to leave untrimmed. If this argument is zero, only ++ the minimum amount of memory to maintain internal data structures ++ will be left. Non-zero arguments can be supplied to maintain enough ++ trailing space to service future expected allocations without having ++ to re-obtain memory from the system. ++ ++ Malloc_trim returns 1 if it actually released any memory, else 0. ++*/ ++int dlmalloc_trim(size_t); ++ ++/* ++ malloc_usable_size(void* p); ++ ++ Returns the number of bytes you can actually use in ++ an allocated chunk, which may be more than you requested (although ++ often not) due to alignment and minimum size constraints. ++ You can use this many bytes without worrying about ++ overwriting other allocated objects. This is not a particularly great ++ programming practice. malloc_usable_size can be more useful in ++ debugging and assertions, for example: ++ ++ p = malloc(n); ++ assert(malloc_usable_size(p) >= 256); ++*/ ++size_t dlmalloc_usable_size(void*); ++ ++/* ++ malloc_stats(); ++ Prints on stderr the amount of space obtained from the system (both ++ via sbrk and mmap), the maximum amount (which may be more than ++ current if malloc_trim and/or munmap got called), and the current ++ number of bytes allocated via malloc (or realloc, etc) but not yet ++ freed. Note that this is the number of bytes allocated, not the ++ number requested. It will be larger than the number requested ++ because of alignment and bookkeeping overhead. Because it includes ++ alignment wastage as being in use, this figure may be greater than ++ zero even when no user-level chunks are allocated. ++ ++ The reported current and maximum system memory can be inaccurate if ++ a program makes other calls to system memory allocation functions ++ (normally sbrk) outside of malloc. ++ ++ malloc_stats prints only the most commonly interesting statistics. ++ More information can be obtained by calling mallinfo. ++*/ ++void dlmalloc_stats(void); ++ ++#endif /* ONLY_MSPACES */ ++ ++#if MSPACES ++ ++/* ++ mspace is an opaque type representing an independent ++ region of space that supports mspace_malloc, etc. ++*/ ++typedef void* mspace; ++ ++/* ++ create_mspace creates and returns a new independent space with the ++ given initial capacity, or, if 0, the default granularity size. It ++ returns null if there is no system memory available to create the ++ space. If argument locked is non-zero, the space uses a separate ++ lock to control access. The capacity of the space will grow ++ dynamically as needed to service mspace_malloc requests. You can ++ control the sizes of incremental increases of this space by ++ compiling with a different DEFAULT_GRANULARITY or dynamically ++ setting with mallopt(M_GRANULARITY, value). ++*/ ++mspace create_mspace(size_t capacity, int locked); ++ ++/* ++ destroy_mspace destroys the given space, and attempts to return all ++ of its memory back to the system, returning the total number of ++ bytes freed. After destruction, the results of access to all memory ++ used by the space become undefined. ++*/ ++size_t destroy_mspace(mspace msp); ++ ++/* ++ create_mspace_with_base uses the memory supplied as the initial base ++ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this ++ space is used for bookkeeping, so the capacity must be at least this ++ large. (Otherwise 0 is returned.) When this initial space is ++ exhausted, additional memory will be obtained from the system. ++ Destroying this space will deallocate all additionally allocated ++ space (if possible) but not the initial base. ++*/ ++mspace create_mspace_with_base(void* base, size_t capacity, int locked); ++ ++/* ++ mspace_malloc behaves as malloc, but operates within ++ the given space. ++*/ ++void* mspace_malloc(mspace msp, size_t bytes); ++ ++/* ++ mspace_free behaves as free, but operates within ++ the given space. ++ ++ If compiled with FOOTERS==1, mspace_free is not actually needed. ++ free may be called instead of mspace_free because freed chunks from ++ any space are handled by their originating spaces. ++*/ ++void mspace_free(mspace msp, void* mem); ++ ++/* ++ mspace_realloc behaves as realloc, but operates within ++ the given space. ++ ++ If compiled with FOOTERS==1, mspace_realloc is not actually ++ needed. realloc may be called instead of mspace_realloc because ++ realloced chunks from any space are handled by their originating ++ spaces. ++*/ ++void* mspace_realloc(mspace msp, void* mem, size_t newsize); ++ ++/* ++ mspace_calloc behaves as calloc, but operates within ++ the given space. ++*/ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); ++ ++/* ++ mspace_memalign behaves as memalign, but operates within ++ the given space. ++*/ ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); ++ ++/* ++ mspace_independent_calloc behaves as independent_calloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]); ++ ++/* ++ mspace_independent_comalloc behaves as independent_comalloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]); ++ ++/* ++ mspace_footprint() returns the number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_footprint(mspace msp); ++ ++/* ++ mspace_max_footprint() returns the peak number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_max_footprint(mspace msp); ++ ++ ++#if !NO_MALLINFO ++/* ++ mspace_mallinfo behaves as mallinfo, but reports properties of ++ the given space. ++*/ ++struct mallinfo mspace_mallinfo(mspace msp); ++#endif /* NO_MALLINFO */ ++ ++/* ++ mspace_malloc_stats behaves as malloc_stats, but reports ++ properties of the given space. ++*/ ++void mspace_malloc_stats(mspace msp); ++ ++/* ++ mspace_trim behaves as malloc_trim, but ++ operates within the given space. ++*/ ++int mspace_trim(mspace msp, size_t pad); ++ ++/* ++ An alias for mallopt. ++*/ ++int mspace_mallopt(int, int); ++ ++#endif /* MSPACES */ ++ ++#ifdef __cplusplus ++}; /* end of extern "C" */ ++#endif /* __cplusplus */ ++ ++/* ++ ======================================================================== ++ To make a fully customizable malloc.h header file, cut everything ++ above this line, put into file malloc.h, edit to suit, and #include it ++ on the next line, as well as in programs that use this malloc. ++ ======================================================================== ++*/ ++ ++/* #include "malloc.h" */ ++ ++/*------------------------------ internal #includes ---------------------- */ ++ ++#ifdef _MSC_VER ++#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ ++#endif /* _MSC_VER */ ++ ++#include /* for printing in malloc_stats */ ++ ++#ifndef LACKS_ERRNO_H ++#include /* for MALLOC_FAILURE_ACTION */ ++#endif /* LACKS_ERRNO_H */ ++#if FOOTERS ++#include /* for magic initialization */ ++#endif /* FOOTERS */ ++#ifndef LACKS_STDLIB_H ++#include /* for abort() */ ++#endif /* LACKS_STDLIB_H */ ++#ifdef DEBUG ++#if ABORT_ON_ASSERT_FAILURE ++#define assert(x) if(!(x)) ABORT ++#else /* ABORT_ON_ASSERT_FAILURE */ ++#include ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#else /* DEBUG */ ++#define assert(x) ++#endif /* DEBUG */ ++#ifndef LACKS_STRING_H ++#include /* for memset etc */ ++#endif /* LACKS_STRING_H */ ++#if USE_BUILTIN_FFS ++#ifndef LACKS_STRINGS_H ++#include /* for ffs */ ++#endif /* LACKS_STRINGS_H */ ++#endif /* USE_BUILTIN_FFS */ ++#if HAVE_MMAP ++#ifndef LACKS_SYS_MMAN_H ++#include /* for mmap */ ++#endif /* LACKS_SYS_MMAN_H */ ++#ifndef LACKS_FCNTL_H ++#include ++#endif /* LACKS_FCNTL_H */ ++#endif /* HAVE_MMAP */ ++#if HAVE_MORECORE ++#ifndef LACKS_UNISTD_H ++#include /* for sbrk */ ++#else /* LACKS_UNISTD_H */ ++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) ++extern void* sbrk(ptrdiff_t); ++#endif /* FreeBSD etc */ ++#endif /* LACKS_UNISTD_H */ ++#endif /* HAVE_MMAP */ ++ ++#ifndef WIN32 ++#ifndef malloc_getpagesize ++# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ ++# ifndef _SC_PAGE_SIZE ++# define _SC_PAGE_SIZE _SC_PAGESIZE ++# endif ++# endif ++# ifdef _SC_PAGE_SIZE ++# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) ++# else ++# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) ++ extern size_t getpagesize(); ++# define malloc_getpagesize getpagesize() ++# else ++# ifdef WIN32 /* use supplied emulation of getpagesize */ ++# define malloc_getpagesize getpagesize() ++# else ++# ifndef LACKS_SYS_PARAM_H ++# include ++# endif ++# ifdef EXEC_PAGESIZE ++# define malloc_getpagesize EXEC_PAGESIZE ++# else ++# ifdef NBPG ++# ifndef CLSIZE ++# define malloc_getpagesize NBPG ++# else ++# define malloc_getpagesize (NBPG * CLSIZE) ++# endif ++# else ++# ifdef NBPC ++# define malloc_getpagesize NBPC ++# else ++# ifdef PAGESIZE ++# define malloc_getpagesize PAGESIZE ++# else /* just guess */ ++# define malloc_getpagesize ((size_t)4096U) ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++#endif ++#endif ++ ++/* ------------------- size_t and alignment properties -------------------- */ ++ ++/* The byte and bit size of a size_t */ ++#define SIZE_T_SIZE (sizeof(size_t)) ++#define SIZE_T_BITSIZE (sizeof(size_t) << 3) ++ ++/* Some constants coerced to size_t */ ++/* Annoying but necessary to avoid errors on some platforms */ ++#define SIZE_T_ZERO ((size_t)0) ++#define SIZE_T_ONE ((size_t)1) ++#define SIZE_T_TWO ((size_t)2) ++#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) ++#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) ++#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) ++#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) ++ ++/* The bit mask value corresponding to MALLOC_ALIGNMENT */ ++#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) ++ ++/* True if address a has acceptable alignment */ ++#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) ++ ++/* the number of bytes to offset an address to align it */ ++#define align_offset(A)\ ++ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ ++ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) ++ ++/* -------------------------- MMAP preliminaries ------------------------- */ ++ ++/* ++ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and ++ checks to fail so compiler optimizer can delete code rather than ++ using so many "#if"s. ++*/ ++ ++ ++/* MORECORE and MMAP must return MFAIL on failure */ ++#define MFAIL ((void*)(MAX_SIZE_T)) ++#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ ++ ++#if !HAVE_MMAP ++#define IS_MMAPPED_BIT (SIZE_T_ZERO) ++#define USE_MMAP_BIT (SIZE_T_ZERO) ++#define CALL_MMAP(s) MFAIL ++#define CALL_MUNMAP(a, s) (-1) ++#define DIRECT_MMAP(s) MFAIL ++ ++#else /* HAVE_MMAP */ ++#define IS_MMAPPED_BIT (SIZE_T_ONE) ++#define USE_MMAP_BIT (SIZE_T_ONE) ++ ++#if !defined(WIN32) && !defined (__OS2__) ++#define CALL_MUNMAP(a, s) munmap((a), (s)) ++#define MMAP_PROT (PROT_READ|PROT_WRITE) ++#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) ++#define MAP_ANONYMOUS MAP_ANON ++#endif /* MAP_ANON */ ++#ifdef MAP_ANONYMOUS ++#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) ++#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) ++#else /* MAP_ANONYMOUS */ ++/* ++ Nearly all versions of mmap support MAP_ANONYMOUS, so the following ++ is unlikely to be needed, but is supplied just in case. ++*/ ++#define MMAP_FLAGS (MAP_PRIVATE) ++static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ ++#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ ++ (dev_zero_fd = open("/dev/zero", O_RDWR), \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) ++#endif /* MAP_ANONYMOUS */ ++ ++#define DIRECT_MMAP(s) CALL_MMAP(s) ++ ++#elif defined(__OS2__) ++ ++/* OS/2 MMAP via DosAllocMem */ ++static void* os2mmap(size_t size) { ++ void* ptr; ++ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && ++ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) ++ return MFAIL; ++ return ptr; ++} ++ ++#define os2direct_mmap(n) os2mmap(n) ++ ++/* This function supports releasing coalesed segments */ ++static int os2munmap(void* ptr, size_t size) { ++ while (size) { ++ ULONG ulSize = size; ++ ULONG ulFlags = 0; ++ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) ++ return -1; ++ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || ++ ulSize > size) ++ return -1; ++ if (DosFreeMem(ptr) != 0) ++ return -1; ++ ptr = ( void * ) ( ( char * ) ptr + ulSize ); ++ size -= ulSize; ++ } ++ return 0; ++} ++ ++#define CALL_MMAP(s) os2mmap(s) ++#define CALL_MUNMAP(a, s) os2munmap((a), (s)) ++#define DIRECT_MMAP(s) os2direct_mmap(s) ++ ++#else /* WIN32 */ ++ ++/* Win32 MMAP via VirtualAlloc */ ++static void* win32mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} ++ ++/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ ++static void* win32direct_mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, ++ PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} ++ ++/* This function supports releasing coalesed segments */ ++static int win32munmap(void* ptr, size_t size) { ++ MEMORY_BASIC_INFORMATION minfo; ++ char* cptr = ptr; ++ while (size) { ++ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) ++ return -1; ++ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || ++ minfo.State != MEM_COMMIT || minfo.RegionSize > size) ++ return -1; ++ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) ++ return -1; ++ cptr += minfo.RegionSize; ++ size -= minfo.RegionSize; ++ } ++ return 0; ++} ++ ++#define CALL_MMAP(s) win32mmap(s) ++#define CALL_MUNMAP(a, s) win32munmap((a), (s)) ++#define DIRECT_MMAP(s) win32direct_mmap(s) ++#endif /* WIN32 */ ++#endif /* HAVE_MMAP */ ++ ++#if HAVE_MMAP && HAVE_MREMAP ++#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) ++#else /* HAVE_MMAP && HAVE_MREMAP */ ++#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL ++#endif /* HAVE_MMAP && HAVE_MREMAP */ ++ ++#if HAVE_MORECORE ++#define CALL_MORECORE(S) MORECORE(S) ++#else /* HAVE_MORECORE */ ++#define CALL_MORECORE(S) MFAIL ++#endif /* HAVE_MORECORE */ ++ ++/* mstate bit set if contiguous morecore disabled or failed */ ++#define USE_NONCONTIGUOUS_BIT (4U) ++ ++/* segment bit set in create_mspace_with_base */ ++#define EXTERN_BIT (8U) ++ ++ ++/* --------------------------- Lock preliminaries ------------------------ */ ++ ++#if USE_LOCKS ++ ++/* ++ When locks are defined, there are up to two global locks: ++ ++ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to ++ MORECORE. In many cases sys_alloc requires two calls, that should ++ not be interleaved with calls by other threads. This does not ++ protect against direct calls to MORECORE by other threads not ++ using this lock, so there is still code to cope the best we can on ++ interference. ++ ++ * magic_init_mutex ensures that mparams.magic and other ++ unique mparams values are initialized only once. ++*/ ++ ++#if !defined(WIN32) && !defined(__OS2__) ++/* By default use posix locks */ ++#include ++#define MLOCK_T pthread_mutex_t ++#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) ++#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) ++#define RELEASE_LOCK(l) pthread_mutex_unlock(l) ++ ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; ++#endif /* HAVE_MORECORE */ ++ ++static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++#elif defined(__OS2__) ++#define MLOCK_T HMTX ++#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) ++#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) ++#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; ++ ++#else /* WIN32 */ ++/* ++ Because lock-protected regions have bounded times, and there ++ are no recursive lock calls, we can use simple spinlocks. ++*/ ++ ++#define MLOCK_T long ++static int win32_acquire_lock (MLOCK_T *sl) { ++ for (;;) { ++#ifdef InterlockedCompareExchangePointer ++ if (!InterlockedCompareExchange(sl, 1, 0)) ++ return 0; ++#else /* Use older void* version */ ++ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) ++ return 0; ++#endif /* InterlockedCompareExchangePointer */ ++ Sleep (0); ++ } ++} ++ ++static void win32_release_lock (MLOCK_T *sl) { ++ InterlockedExchange (sl, 0); ++} ++ ++#define INITIAL_LOCK(l) *(l)=0 ++#define ACQUIRE_LOCK(l) win32_acquire_lock(l) ++#define RELEASE_LOCK(l) win32_release_lock(l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; ++#endif /* WIN32 */ ++ ++#define USE_LOCK_BIT (2U) ++#else /* USE_LOCKS */ ++#define USE_LOCK_BIT (0U) ++#define INITIAL_LOCK(l) ++#endif /* USE_LOCKS */ ++ ++#if USE_LOCKS && HAVE_MORECORE ++#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); ++#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); ++#else /* USE_LOCKS && HAVE_MORECORE */ ++#define ACQUIRE_MORECORE_LOCK() ++#define RELEASE_MORECORE_LOCK() ++#endif /* USE_LOCKS && HAVE_MORECORE */ ++ ++#if USE_LOCKS ++#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); ++#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); ++#else /* USE_LOCKS */ ++#define ACQUIRE_MAGIC_INIT_LOCK() ++#define RELEASE_MAGIC_INIT_LOCK() ++#endif /* USE_LOCKS */ ++ ++ ++/* ----------------------- Chunk representations ------------------------ */ ++ ++/* ++ (The following includes lightly edited explanations by Colin Plumb.) ++ ++ The malloc_chunk declaration below is misleading (but accurate and ++ necessary). It declares a "view" into memory allowing access to ++ necessary fields at known offsets from a given base. ++ ++ Chunks of memory are maintained using a `boundary tag' method as ++ originally described by Knuth. (See the paper by Paul Wilson ++ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such ++ techniques.) Sizes of free chunks are stored both in the front of ++ each chunk and at the end. This makes consolidating fragmented ++ chunks into bigger chunks fast. The head fields also hold bits ++ representing whether chunks are free or in use. ++ ++ Here are some pictures to make it clearer. They are "exploded" to ++ show that the state of a chunk can be thought of as extending from ++ the high 31 bits of the head field of its header through the ++ prev_foot and PINUSE_BIT bit of the following chunk header. ++ ++ A chunk that's in use looks like: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk (if P = 1) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 1| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | | ++ +- -+ ++ | | ++ +- -+ ++ | : ++ +- size - sizeof(size_t) available payload bytes -+ ++ : | ++ chunk-> +- -+ ++ | | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| ++ | Size of next chunk (may or may not be in use) | +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ And if it's free, it looks like this: ++ ++ chunk-> +- -+ ++ | User payload (must be in use, or we would have merged!) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 0| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Next pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Prev pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- size - sizeof(struct chunk) unused bytes -+ ++ : | ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| ++ | Size of next chunk (must be in use, or we would have merged)| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- User payload -+ ++ : | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ |0| ++ +-+ ++ Note that since we always merge adjacent free chunks, the chunks ++ adjacent to a free chunk must be in use. ++ ++ Given a pointer to a chunk (which can be derived trivially from the ++ payload pointer) we can, in O(1) time, find out whether the adjacent ++ chunks are free, and if so, unlink them from the lists that they ++ are on and merge them with the current chunk. ++ ++ Chunks always begin on even word boundaries, so the mem portion ++ (which is returned to the user) is also on an even word boundary, and ++ thus at least double-word aligned. ++ ++ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the ++ chunk size (which is always a multiple of two words), is an in-use ++ bit for the *previous* chunk. If that bit is *clear*, then the ++ word before the current chunk size contains the previous chunk ++ size, and can be used to find the front of the previous chunk. ++ The very first chunk allocated always has this bit set, preventing ++ access to non-existent (or non-owned) memory. If pinuse is set for ++ any given chunk, then you CANNOT determine the size of the ++ previous chunk, and might even get a memory addressing fault when ++ trying to do so. ++ ++ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of ++ the chunk size redundantly records whether the current chunk is ++ inuse. This redundancy enables usage checks within free and realloc, ++ and reduces indirection when freeing and consolidating chunks. ++ ++ Each freshly allocated chunk must have both cinuse and pinuse set. ++ That is, each allocated chunk borders either a previously allocated ++ and still in-use chunk, or the base of its memory arena. This is ++ ensured by making all allocations from the the `lowest' part of any ++ found chunk. Further, no free chunk physically borders another one, ++ so each free chunk is known to be preceded and followed by either ++ inuse chunks or the ends of memory. ++ ++ Note that the `foot' of the current chunk is actually represented ++ as the prev_foot of the NEXT chunk. This makes it easier to ++ deal with alignments etc but can be very confusing when trying ++ to extend or adapt this code. ++ ++ The exceptions to all this are ++ ++ 1. The special chunk `top' is the top-most available chunk (i.e., ++ the one bordering the end of available memory). It is treated ++ specially. Top is never included in any bin, is used only if ++ no other chunk is available, and is released back to the ++ system if it is very large (see M_TRIM_THRESHOLD). In effect, ++ the top chunk is treated as larger (and thus less well ++ fitting) than any other available chunk. The top chunk ++ doesn't update its trailing size field since there is no next ++ contiguous chunk that would have to index off it. However, ++ space is still allocated for it (TOP_FOOT_SIZE) to enable ++ separation or merging when space is extended. ++ ++ 3. Chunks allocated via mmap, which have the lowest-order bit ++ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set ++ PINUSE_BIT in their head fields. Because they are allocated ++ one-by-one, each must carry its own prev_foot field, which is ++ also used to hold the offset this chunk has within its mmapped ++ region, which is needed to preserve alignment. Each mmapped ++ chunk is trailed by the first two fields of a fake next-chunk ++ for sake of usage checks. ++ ++*/ ++ ++struct malloc_chunk { ++ size_t prev_foot; /* Size of previous chunk (if free). */ ++ size_t head; /* Size and inuse bits. */ ++ struct malloc_chunk* fd; /* double links -- used only if free. */ ++ struct malloc_chunk* bk; ++}; ++ ++typedef struct malloc_chunk mchunk; ++typedef struct malloc_chunk* mchunkptr; ++typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ ++typedef size_t bindex_t; /* Described below */ ++typedef unsigned int binmap_t; /* Described below */ ++typedef unsigned int flag_t; /* The type of various bit flag sets */ ++ ++/* ------------------- Chunks sizes and alignments ----------------------- */ ++ ++#define MCHUNK_SIZE (sizeof(mchunk)) ++ ++#if FOOTERS ++#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++#else /* FOOTERS */ ++#define CHUNK_OVERHEAD (SIZE_T_SIZE) ++#endif /* FOOTERS */ ++ ++/* MMapped chunks need a second word of overhead ... */ ++#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++/* ... and additional padding for fake next-chunk at foot */ ++#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) ++ ++/* The smallest size we can malloc is an aligned minimal chunk */ ++#define MIN_CHUNK_SIZE\ ++ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++ ++/* conversion from malloc headers to user pointers, and back */ ++#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) ++#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) ++/* chunk associated with aligned address A */ ++#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) ++ ++/* Bounds on request (not chunk) sizes. */ ++#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) ++#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) ++ ++/* pad request bytes into a usable size */ ++#define pad_request(req) \ ++ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++ ++/* pad request, checking for minimum (but not maximum) */ ++#define request2size(req) \ ++ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) ++ ++ ++/* ------------------ Operations on head and foot fields ----------------- */ ++ ++/* ++ The head field of a chunk is or'ed with PINUSE_BIT when previous ++ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in ++ use. If the chunk was obtained with mmap, the prev_foot field has ++ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the ++ mmapped region to the base of the chunk. ++*/ ++ ++#define PINUSE_BIT (SIZE_T_ONE) ++#define CINUSE_BIT (SIZE_T_TWO) ++#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) ++ ++/* Head value for fenceposts */ ++#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) ++ ++/* extraction of fields from head words */ ++#define cinuse(p) ((p)->head & CINUSE_BIT) ++#define pinuse(p) ((p)->head & PINUSE_BIT) ++#define chunksize(p) ((p)->head & ~(INUSE_BITS)) ++ ++#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) ++#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) ++ ++/* Treat space at ptr +/- offset as a chunk */ ++#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) ++#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) ++ ++/* Ptr to next or previous physical malloc_chunk. */ ++#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) ++#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) ++ ++/* extract next chunk's pinuse bit */ ++#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) ++ ++/* Get/set size at footer */ ++#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) ++#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) ++ ++/* Set size, pinuse bit, and foot */ ++#define set_size_and_pinuse_of_free_chunk(p, s)\ ++ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) ++ ++/* Set size, pinuse bit, foot, and clear next pinuse */ ++#define set_free_with_pinuse(p, s, n)\ ++ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) ++ ++#define is_mmapped(p)\ ++ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) ++ ++/* Get the internal overhead associated with chunk p */ ++#define overhead_for(p)\ ++ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) ++ ++/* Return true if malloced space is not necessarily cleared */ ++#if MMAP_CLEARS ++#define calloc_must_clear(p) (!is_mmapped(p)) ++#else /* MMAP_CLEARS */ ++#define calloc_must_clear(p) (1) ++#endif /* MMAP_CLEARS */ ++ ++/* ---------------------- Overlaid data structures ----------------------- */ ++ ++/* ++ When chunks are not in use, they are treated as nodes of either ++ lists or trees. ++ ++ "Small" chunks are stored in circular doubly-linked lists, and look ++ like this: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space (may be 0 bytes long) . ++ . . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ Larger chunks are kept in a form of bitwise digital trees (aka ++ tries) keyed on chunksizes. Because malloc_tree_chunks are only for ++ free chunks greater than 256 bytes, their size doesn't impose any ++ constraints on user chunk sizes. Each node looks like: ++ ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to left child (child[0]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to right child (child[1]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to parent | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | bin index of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ ++ Each tree holding treenodes is a tree of unique chunk sizes. Chunks ++ of the same size are arranged in a circularly-linked list, with only ++ the oldest chunk (the next to be used, in our FIFO ordering) ++ actually in the tree. (Tree members are distinguished by a non-null ++ parent pointer.) If a chunk with the same size an an existing node ++ is inserted, it is linked off the existing node using pointers that ++ work in the same way as fd/bk pointers of small chunks. ++ ++ Each tree contains a power of 2 sized range of chunk sizes (the ++ smallest is 0x100 <= x < 0x180), which is is divided in half at each ++ tree level, with the chunks in the smaller half of the range (0x100 ++ <= x < 0x140 for the top nose) in the left subtree and the larger ++ half (0x140 <= x < 0x180) in the right subtree. This is, of course, ++ done by inspecting individual bits. ++ ++ Using these rules, each node's left subtree contains all smaller ++ sizes than its right subtree. However, the node at the root of each ++ subtree has no particular ordering relationship to either. (The ++ dividing line between the subtree sizes is based on trie relation.) ++ If we remove the last chunk of a given size from the interior of the ++ tree, we need to replace it with a leaf node. The tree ordering ++ rules permit a node to be replaced by any leaf below it. ++ ++ The smallest chunk in a tree (a common operation in a best-fit ++ allocator) can be found by walking a path to the leftmost leaf in ++ the tree. Unlike a usual binary tree, where we follow left child ++ pointers until we reach a null, here we follow the right child ++ pointer any time the left one is null, until we reach a leaf with ++ both child pointers null. The smallest chunk in the tree will be ++ somewhere along that path. ++ ++ The worst case number of steps to add, find, or remove a node is ++ bounded by the number of bits differentiating chunks within ++ bins. Under current bin calculations, this ranges from 6 up to 21 ++ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case ++ is of course much better. ++*/ ++ ++struct malloc_tree_chunk { ++ /* The first four fields must be compatible with malloc_chunk */ ++ size_t prev_foot; ++ size_t head; ++ struct malloc_tree_chunk* fd; ++ struct malloc_tree_chunk* bk; ++ ++ struct malloc_tree_chunk* child[2]; ++ struct malloc_tree_chunk* parent; ++ bindex_t index; ++}; ++ ++typedef struct malloc_tree_chunk tchunk; ++typedef struct malloc_tree_chunk* tchunkptr; ++typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ ++ ++/* A little helper macro for trees */ ++#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) ++ ++/* ----------------------------- Segments -------------------------------- */ ++ ++/* ++ Each malloc space may include non-contiguous segments, held in a ++ list headed by an embedded malloc_segment record representing the ++ top-most space. Segments also include flags holding properties of ++ the space. Large chunks that are directly allocated by mmap are not ++ included in this list. They are instead independently created and ++ destroyed without otherwise keeping track of them. ++ ++ Segment management mainly comes into play for spaces allocated by ++ MMAP. Any call to MMAP might or might not return memory that is ++ adjacent to an existing segment. MORECORE normally contiguously ++ extends the current space, so this space is almost always adjacent, ++ which is simpler and faster to deal with. (This is why MORECORE is ++ used preferentially to MMAP when both are available -- see ++ sys_alloc.) When allocating using MMAP, we don't use any of the ++ hinting mechanisms (inconsistently) supported in various ++ implementations of unix mmap, or distinguish reserving from ++ committing memory. Instead, we just ask for space, and exploit ++ contiguity when we get it. It is probably possible to do ++ better than this on some systems, but no general scheme seems ++ to be significantly better. ++ ++ Management entails a simpler variant of the consolidation scheme ++ used for chunks to reduce fragmentation -- new adjacent memory is ++ normally prepended or appended to an existing segment. However, ++ there are limitations compared to chunk consolidation that mostly ++ reflect the fact that segment processing is relatively infrequent ++ (occurring only when getting memory from system) and that we ++ don't expect to have huge numbers of segments: ++ ++ * Segments are not indexed, so traversal requires linear scans. (It ++ would be possible to index these, but is not worth the extra ++ overhead and complexity for most programs on most platforms.) ++ * New segments are only appended to old ones when holding top-most ++ memory; if they cannot be prepended to others, they are held in ++ different segments. ++ ++ Except for the top-most segment of an mstate, each segment record ++ is kept at the tail of its segment. Segments are added by pushing ++ segment records onto the list headed by &mstate.seg for the ++ containing mstate. ++ ++ Segment flags control allocation/merge/deallocation policies: ++ * If EXTERN_BIT set, then we did not allocate this segment, ++ and so should not try to deallocate or merge with others. ++ (This currently holds only for the initial segment passed ++ into create_mspace_with_base.) ++ * If IS_MMAPPED_BIT set, the segment may be merged with ++ other surrounding mmapped segments and trimmed/de-allocated ++ using munmap. ++ * If neither bit is set, then the segment was obtained using ++ MORECORE so can be merged with surrounding MORECORE'd segments ++ and deallocated/trimmed using MORECORE with negative arguments. ++*/ ++ ++struct malloc_segment { ++ char* base; /* base address */ ++ size_t size; /* allocated size */ ++ struct malloc_segment* next; /* ptr to next segment */ ++#if FFI_MMAP_EXEC_WRIT ++ /* The mmap magic is supposed to store the address of the executable ++ segment at the very end of the requested block. */ ++ ++# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) ++ ++ /* We can only merge segments if their corresponding executable ++ segments are at identical offsets. */ ++# define check_segment_merge(S,b,s) \ ++ (mmap_exec_offset((b),(s)) == (S)->exec_offset) ++ ++# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) ++# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) ++ ++ /* The removal of sflags only works with HAVE_MORECORE == 0. */ ++ ++# define get_segment_flags(S) (IS_MMAPPED_BIT) ++# define set_segment_flags(S,v) \ ++ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ ++ (((S)->exec_offset = \ ++ mmap_exec_offset((S)->base, (S)->size)), \ ++ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ ++ (S)->exec_offset) ? (ABORT, (v)) : \ ++ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) ++ ++ /* We use an offset here, instead of a pointer, because then, when ++ base changes, we don't have to modify this. On architectures ++ with segmented addresses, this might not work. */ ++ ptrdiff_t exec_offset; ++#else ++ ++# define get_segment_flags(S) ((S)->sflags) ++# define set_segment_flags(S,v) ((S)->sflags = (v)) ++# define check_segment_merge(S,b,s) (1) ++ ++ flag_t sflags; /* mmap and extern flag */ ++#endif ++}; ++ ++#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) ++#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) ++ ++typedef struct malloc_segment msegment; ++typedef struct malloc_segment* msegmentptr; ++ ++/* ---------------------------- malloc_state ----------------------------- */ ++ ++/* ++ A malloc_state holds all of the bookkeeping for a space. ++ The main fields are: ++ ++ Top ++ The topmost chunk of the currently active segment. Its size is ++ cached in topsize. The actual size of topmost space is ++ topsize+TOP_FOOT_SIZE, which includes space reserved for adding ++ fenceposts and segment records if necessary when getting more ++ space from the system. The size at which to autotrim top is ++ cached from mparams in trim_check, except that it is disabled if ++ an autotrim fails. ++ ++ Designated victim (dv) ++ This is the preferred chunk for servicing small requests that ++ don't have exact fits. It is normally the chunk split off most ++ recently to service another small request. Its size is cached in ++ dvsize. The link fields of this chunk are not maintained since it ++ is not kept in a bin. ++ ++ SmallBins ++ An array of bin headers for free chunks. These bins hold chunks ++ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains ++ chunks of all the same size, spaced 8 bytes apart. To simplify ++ use in double-linked lists, each bin header acts as a malloc_chunk ++ pointing to the real first node, if it exists (else pointing to ++ itself). This avoids special-casing for headers. But to avoid ++ waste, we allocate only the fd/bk pointers of bins, and then use ++ repositioning tricks to treat these as the fields of a chunk. ++ ++ TreeBins ++ Treebins are pointers to the roots of trees holding a range of ++ sizes. There are 2 equally spaced treebins for each power of two ++ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything ++ larger. ++ ++ Bin maps ++ There is one bit map for small bins ("smallmap") and one for ++ treebins ("treemap). Each bin sets its bit when non-empty, and ++ clears the bit when empty. Bit operations are then used to avoid ++ bin-by-bin searching -- nearly all "search" is done without ever ++ looking at bins that won't be selected. The bit maps ++ conservatively use 32 bits per map word, even if on 64bit system. ++ For a good description of some of the bit-based techniques used ++ here, see Henry S. Warren Jr's book "Hacker's Delight" (and ++ supplement at http://hackersdelight.org/). Many of these are ++ intended to reduce the branchiness of paths through malloc etc, as ++ well as to reduce the number of memory locations read or written. ++ ++ Segments ++ A list of segments headed by an embedded malloc_segment record ++ representing the initial space. ++ ++ Address check support ++ The least_addr field is the least address ever obtained from ++ MORECORE or MMAP. Attempted frees and reallocs of any address less ++ than this are trapped (unless INSECURE is defined). ++ ++ Magic tag ++ A cross-check field that should always hold same value as mparams.magic. ++ ++ Flags ++ Bits recording whether to use MMAP, locks, or contiguous MORECORE ++ ++ Statistics ++ Each space keeps track of current and maximum system memory ++ obtained via MORECORE or MMAP. ++ ++ Locking ++ If USE_LOCKS is defined, the "mutex" lock is acquired and released ++ around every public call using this mspace. ++*/ ++ ++/* Bin types, widths and sizes */ ++#define NSMALLBINS (32U) ++#define NTREEBINS (32U) ++#define SMALLBIN_SHIFT (3U) ++#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) ++#define TREEBIN_SHIFT (8U) ++#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) ++#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) ++#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) ++ ++struct malloc_state { ++ binmap_t smallmap; ++ binmap_t treemap; ++ size_t dvsize; ++ size_t topsize; ++ char* least_addr; ++ mchunkptr dv; ++ mchunkptr top; ++ size_t trim_check; ++ size_t magic; ++ mchunkptr smallbins[(NSMALLBINS+1)*2]; ++ tbinptr treebins[NTREEBINS]; ++ size_t footprint; ++ size_t max_footprint; ++ flag_t mflags; ++#if USE_LOCKS ++ MLOCK_T mutex; /* locate lock among fields that rarely change */ ++#endif /* USE_LOCKS */ ++ msegment seg; ++}; ++ ++typedef struct malloc_state* mstate; ++ ++/* ------------- Global malloc_state and malloc_params ------------------- */ ++ ++/* ++ malloc_params holds global properties, including those that can be ++ dynamically set using mallopt. There is a single instance, mparams, ++ initialized in init_mparams. ++*/ ++ ++struct malloc_params { ++ size_t magic; ++ size_t page_size; ++ size_t granularity; ++ size_t mmap_threshold; ++ size_t trim_threshold; ++ flag_t default_mflags; ++}; ++ ++static struct malloc_params mparams; ++ ++/* The global malloc_state used for all non-"mspace" calls */ ++static struct malloc_state _gm_; ++#define gm (&_gm_) ++#define is_global(M) ((M) == &_gm_) ++#define is_initialized(M) ((M)->top != 0) ++ ++/* -------------------------- system alloc setup ------------------------- */ ++ ++/* Operations on mflags */ ++ ++#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) ++#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) ++#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) ++ ++#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) ++#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) ++#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) ++ ++#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) ++#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) ++ ++#define set_lock(M,L)\ ++ ((M)->mflags = (L)?\ ++ ((M)->mflags | USE_LOCK_BIT) :\ ++ ((M)->mflags & ~USE_LOCK_BIT)) ++ ++/* page-align a size */ ++#define page_align(S)\ ++ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) ++ ++/* granularity-align a size */ ++#define granularity_align(S)\ ++ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) ++ ++#define is_page_aligned(S)\ ++ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) ++#define is_granularity_aligned(S)\ ++ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) ++ ++/* True if segment S holds address A */ ++#define segment_holds(S, A)\ ++ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) ++ ++/* Return segment holding given address */ ++static msegmentptr segment_holding(mstate m, char* addr) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= sp->base && addr < sp->base + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++ ++/* Return true if segment contains a segment link */ ++static int has_segment_link(mstate m, msegmentptr ss) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) ++ return 1; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++ ++#ifndef MORECORE_CANNOT_TRIM ++#define should_trim(M,s) ((s) > (M)->trim_check) ++#else /* MORECORE_CANNOT_TRIM */ ++#define should_trim(M,s) (0) ++#endif /* MORECORE_CANNOT_TRIM */ ++ ++/* ++ TOP_FOOT_SIZE is padding at the end of a segment, including space ++ that may be needed to place segment records and fenceposts when new ++ noncontiguous segments are added. ++*/ ++#define TOP_FOOT_SIZE\ ++ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) ++ ++ ++/* ------------------------------- Hooks -------------------------------- */ ++ ++/* ++ PREACTION should be defined to return 0 on success, and nonzero on ++ failure. If you are not using locking, you can redefine these to do ++ anything you like. ++*/ ++ ++#if USE_LOCKS ++ ++/* Ensure locks are initialized */ ++#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) ++ ++#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) ++#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } ++#else /* USE_LOCKS */ ++ ++#ifndef PREACTION ++#define PREACTION(M) (0) ++#endif /* PREACTION */ ++ ++#ifndef POSTACTION ++#define POSTACTION(M) ++#endif /* POSTACTION */ ++ ++#endif /* USE_LOCKS */ ++ ++/* ++ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. ++ USAGE_ERROR_ACTION is triggered on detected bad frees and ++ reallocs. The argument p is an address that might have triggered the ++ fault. It is ignored by the two predefined actions, but might be ++ useful in custom actions that try to help diagnose errors. ++*/ ++ ++#if PROCEED_ON_ERROR ++ ++/* A count of the number of corruption errors causing resets */ ++int malloc_corruption_error_count; ++ ++/* default corruption action */ ++static void reset_on_error(mstate m); ++ ++#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) ++#define USAGE_ERROR_ACTION(m, p) ++ ++#else /* PROCEED_ON_ERROR */ ++ ++#ifndef CORRUPTION_ERROR_ACTION ++#define CORRUPTION_ERROR_ACTION(m) ABORT ++#endif /* CORRUPTION_ERROR_ACTION */ ++ ++#ifndef USAGE_ERROR_ACTION ++#define USAGE_ERROR_ACTION(m,p) ABORT ++#endif /* USAGE_ERROR_ACTION */ ++ ++#endif /* PROCEED_ON_ERROR */ ++ ++/* -------------------------- Debugging setup ---------------------------- */ ++ ++#if ! DEBUG ++ ++#define check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) ++#define check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) ++#define check_malloc_state(M) ++#define check_top_chunk(M,P) ++ ++#else /* DEBUG */ ++#define check_free_chunk(M,P) do_check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) ++#define check_top_chunk(M,P) do_check_top_chunk(M,P) ++#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) ++#define check_malloc_state(M) do_check_malloc_state(M) ++ ++static void do_check_any_chunk(mstate m, mchunkptr p); ++static void do_check_top_chunk(mstate m, mchunkptr p); ++static void do_check_mmapped_chunk(mstate m, mchunkptr p); ++static void do_check_inuse_chunk(mstate m, mchunkptr p); ++static void do_check_free_chunk(mstate m, mchunkptr p); ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s); ++static void do_check_tree(mstate m, tchunkptr t); ++static void do_check_treebin(mstate m, bindex_t i); ++static void do_check_smallbin(mstate m, bindex_t i); ++static void do_check_malloc_state(mstate m); ++static int bin_find(mstate m, mchunkptr x); ++static size_t traverse_and_check(mstate m); ++#endif /* DEBUG */ ++ ++/* ---------------------------- Indexing Bins ---------------------------- */ ++ ++#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) ++#define small_index(s) ((s) >> SMALLBIN_SHIFT) ++#define small_index2size(i) ((i) << SMALLBIN_SHIFT) ++#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) ++ ++/* addressing by index. See above about smallbin repositioning */ ++#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) ++#define treebin_at(M,i) (&((M)->treebins[i])) ++ ++/* assign tree index for size S to variable I */ ++#if defined(__GNUC__) && defined(i386) ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int K;\ ++ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ ++ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ ++ }\ ++} ++#else /* GNUC */ ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int Y = (unsigned int)X;\ ++ unsigned int N = ((Y - 0x100) >> 16) & 8;\ ++ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ ++ N += K;\ ++ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ ++ K = 14 - N + ((Y <<= K) >> 15);\ ++ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ ++ }\ ++} ++#endif /* GNUC */ ++ ++/* Bit representing maximum resolved size in a treebin at i */ ++#define bit_for_tree_index(i) \ ++ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) ++ ++/* Shift placing maximum resolved bit in a treebin at i as sign bit */ ++#define leftshift_for_tree_index(i) \ ++ ((i == NTREEBINS-1)? 0 : \ ++ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) ++ ++/* The size of the smallest chunk held in bin with index i */ ++#define minsize_for_tree_index(i) \ ++ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ ++ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) ++ ++ ++/* ------------------------ Operations on bin maps ----------------------- */ ++ ++/* bit corresponding to given index */ ++#define idx2bit(i) ((binmap_t)(1) << (i)) ++ ++/* Mark/Clear bits with given index */ ++#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) ++#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) ++#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) ++ ++#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) ++#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) ++#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) ++ ++/* index corresponding to given bit */ ++ ++#if defined(__GNUC__) && defined(i386) ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int J;\ ++ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ ++ I = (bindex_t)J;\ ++} ++ ++#else /* GNUC */ ++#if USE_BUILTIN_FFS ++#define compute_bit2idx(X, I) I = ffs(X)-1 ++ ++#else /* USE_BUILTIN_FFS */ ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int Y = X - 1;\ ++ unsigned int K = Y >> (16-4) & 16;\ ++ unsigned int N = K; Y >>= K;\ ++ N += K = Y >> (8-3) & 8; Y >>= K;\ ++ N += K = Y >> (4-2) & 4; Y >>= K;\ ++ N += K = Y >> (2-1) & 2; Y >>= K;\ ++ N += K = Y >> (1-0) & 1; Y >>= K;\ ++ I = (bindex_t)(N + Y);\ ++} ++#endif /* USE_BUILTIN_FFS */ ++#endif /* GNUC */ ++ ++/* isolate the least set bit of a bitmap */ ++#define least_bit(x) ((x) & -(x)) ++ ++/* mask with all bits to left of least bit of x on */ ++#define left_bits(x) ((x<<1) | -(x<<1)) ++ ++/* mask with all bits to left of or equal to least bit of x on */ ++#define same_or_left_bits(x) ((x) | -(x)) ++ ++ ++/* ----------------------- Runtime Check Support ------------------------- */ ++ ++/* ++ For security, the main invariant is that malloc/free/etc never ++ writes to a static address other than malloc_state, unless static ++ malloc_state itself has been corrupted, which cannot occur via ++ malloc (because of these checks). In essence this means that we ++ believe all pointers, sizes, maps etc held in malloc_state, but ++ check all of those linked or offsetted from other embedded data ++ structures. These checks are interspersed with main code in a way ++ that tends to minimize their run-time cost. ++ ++ When FOOTERS is defined, in addition to range checking, we also ++ verify footer fields of inuse chunks, which can be used guarantee ++ that the mstate controlling malloc/free is intact. This is a ++ streamlined version of the approach described by William Robertson ++ et al in "Run-time Detection of Heap-based Overflows" LISA'03 ++ http://www.usenix.org/events/lisa03/tech/robertson.html The footer ++ of an inuse chunk holds the xor of its mstate and a random seed, ++ that is checked upon calls to free() and realloc(). This is ++ (probablistically) unguessable from outside the program, but can be ++ computed by any code successfully malloc'ing any chunk, so does not ++ itself provide protection against code that has already broken ++ security through some other means. Unlike Robertson et al, we ++ always dynamically check addresses of all offset chunks (previous, ++ next, etc). This turns out to be cheaper than relying on hashes. ++*/ ++ ++#if !INSECURE ++/* Check if address a is at least as high as any from MORECORE or MMAP */ ++#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) ++/* Check if address of next chunk n is higher than base chunk p */ ++#define ok_next(p, n) ((char*)(p) < (char*)(n)) ++/* Check if p has its cinuse bit on */ ++#define ok_cinuse(p) cinuse(p) ++/* Check if p has its pinuse bit on */ ++#define ok_pinuse(p) pinuse(p) ++ ++#else /* !INSECURE */ ++#define ok_address(M, a) (1) ++#define ok_next(b, n) (1) ++#define ok_cinuse(p) (1) ++#define ok_pinuse(p) (1) ++#endif /* !INSECURE */ ++ ++#if (FOOTERS && !INSECURE) ++/* Check if (alleged) mstate m has expected magic field */ ++#define ok_magic(M) ((M)->magic == mparams.magic) ++#else /* (FOOTERS && !INSECURE) */ ++#define ok_magic(M) (1) ++#endif /* (FOOTERS && !INSECURE) */ ++ ++ ++/* In gcc, use __builtin_expect to minimize impact of checks */ ++#if !INSECURE ++#if defined(__GNUC__) && __GNUC__ >= 3 ++#define RTCHECK(e) __builtin_expect(e, 1) ++#else /* GNUC */ ++#define RTCHECK(e) (e) ++#endif /* GNUC */ ++#else /* !INSECURE */ ++#define RTCHECK(e) (1) ++#endif /* !INSECURE */ ++ ++/* macros to set up inuse chunks with or without footers */ ++ ++#if !FOOTERS ++ ++#define mark_inuse_foot(M,p,s) ++ ++/* Set cinuse bit and pinuse bit of next chunk */ ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++ ++/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++ ++/* Set size, cinuse and pinuse bit of this chunk */ ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) ++ ++#else /* FOOTERS */ ++ ++/* Set foot of inuse chunk to be xor of mstate and seed */ ++#define mark_inuse_foot(M,p,s)\ ++ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) ++ ++#define get_mstate_for(p)\ ++ ((mstate)(((mchunkptr)((char*)(p) +\ ++ (chunksize(p))))->prev_foot ^ mparams.magic)) ++ ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ ++ mark_inuse_foot(M,p,s)) ++ ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ ++ mark_inuse_foot(M,p,s)) ++ ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ mark_inuse_foot(M, p, s)) ++ ++#endif /* !FOOTERS */ ++ ++/* ---------------------------- setting mparams -------------------------- */ ++ ++/* Initialize mparams */ ++static int init_mparams(void) { ++ if (mparams.page_size == 0) { ++ size_t s; ++ ++ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; ++ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; ++#if MORECORE_CONTIGUOUS ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; ++#else /* MORECORE_CONTIGUOUS */ ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; ++#endif /* MORECORE_CONTIGUOUS */ ++ ++#if (FOOTERS && !INSECURE) ++ { ++#if USE_DEV_RANDOM ++ int fd; ++ unsigned char buf[sizeof(size_t)]; ++ /* Try to use /dev/urandom, else fall back on using time */ ++ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && ++ read(fd, buf, sizeof(buf)) == sizeof(buf)) { ++ s = *((size_t *) buf); ++ close(fd); ++ } ++ else ++#endif /* USE_DEV_RANDOM */ ++ s = (size_t)(time(0) ^ (size_t)0x55555555U); ++ ++ s |= (size_t)8U; /* ensure nonzero */ ++ s &= ~(size_t)7U; /* improve chances of fault for bad values */ ++ ++ } ++#else /* (FOOTERS && !INSECURE) */ ++ s = (size_t)0x58585858U; ++#endif /* (FOOTERS && !INSECURE) */ ++ ACQUIRE_MAGIC_INIT_LOCK(); ++ if (mparams.magic == 0) { ++ mparams.magic = s; ++ /* Set up lock for main malloc area */ ++ INITIAL_LOCK(&gm->mutex); ++ gm->mflags = mparams.default_mflags; ++ } ++ RELEASE_MAGIC_INIT_LOCK(); ++ ++#if !defined(WIN32) && !defined(__OS2__) ++ mparams.page_size = malloc_getpagesize; ++ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? ++ DEFAULT_GRANULARITY : mparams.page_size); ++#elif defined (__OS2__) ++ /* if low-memory is used, os2munmap() would break ++ if it were anything other than 64k */ ++ mparams.page_size = 4096u; ++ mparams.granularity = 65536u; ++#else /* WIN32 */ ++ { ++ SYSTEM_INFO system_info; ++ GetSystemInfo(&system_info); ++ mparams.page_size = system_info.dwPageSize; ++ mparams.granularity = system_info.dwAllocationGranularity; ++ } ++#endif /* WIN32 */ ++ ++ /* Sanity-check configuration: ++ size_t must be unsigned and as wide as pointer type. ++ ints must be at least 4 bytes. ++ alignment must be at least 8. ++ Alignment, min chunk size, and page size must all be powers of 2. ++ */ ++ if ((sizeof(size_t) != sizeof(char*)) || ++ (MAX_SIZE_T < MIN_CHUNK_SIZE) || ++ (sizeof(int) < 4) || ++ (MALLOC_ALIGNMENT < (size_t)8U) || ++ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || ++ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || ++ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || ++ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) ++ ABORT; ++ } ++ return 0; ++} ++ ++/* support for mallopt */ ++static int change_mparam(int param_number, int value) { ++ size_t val = (size_t)value; ++ init_mparams(); ++ switch(param_number) { ++ case M_TRIM_THRESHOLD: ++ mparams.trim_threshold = val; ++ return 1; ++ case M_GRANULARITY: ++ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { ++ mparams.granularity = val; ++ return 1; ++ } ++ else ++ return 0; ++ case M_MMAP_THRESHOLD: ++ mparams.mmap_threshold = val; ++ return 1; ++ default: ++ return 0; ++ } ++} ++ ++#if DEBUG ++/* ------------------------- Debugging Support --------------------------- */ ++ ++/* Check properties of any chunk, whether free, inuse, mmapped etc */ ++static void do_check_any_chunk(mstate m, mchunkptr p) { ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++} ++ ++/* Check properties of top chunk */ ++static void do_check_top_chunk(mstate m, mchunkptr p) { ++ msegmentptr sp = segment_holding(m, (char*)p); ++ size_t sz = chunksize(p); ++ assert(sp != 0); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(sz == m->topsize); ++ assert(sz > 0); ++ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); ++ assert(pinuse(p)); ++ assert(!next_pinuse(p)); ++} ++ ++/* Check properties of (inuse) mmapped chunks */ ++static void do_check_mmapped_chunk(mstate m, mchunkptr p) { ++ size_t sz = chunksize(p); ++ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); ++ assert(is_mmapped(p)); ++ assert(use_mmap(m)); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(!is_small(sz)); ++ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); ++ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); ++ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); ++} ++ ++/* Check properties of inuse chunks */ ++static void do_check_inuse_chunk(mstate m, mchunkptr p) { ++ do_check_any_chunk(m, p); ++ assert(cinuse(p)); ++ assert(next_pinuse(p)); ++ /* If not pinuse and not mmapped, previous chunk has OK offset */ ++ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); ++ if (is_mmapped(p)) ++ do_check_mmapped_chunk(m, p); ++} ++ ++/* Check properties of free chunks */ ++static void do_check_free_chunk(mstate m, mchunkptr p) { ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ mchunkptr next = chunk_plus_offset(p, sz); ++ do_check_any_chunk(m, p); ++ assert(!cinuse(p)); ++ assert(!next_pinuse(p)); ++ assert (!is_mmapped(p)); ++ if (p != m->dv && p != m->top) { ++ if (sz >= MIN_CHUNK_SIZE) { ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(is_aligned(chunk2mem(p))); ++ assert(next->prev_foot == sz); ++ assert(pinuse(p)); ++ assert (next == m->top || cinuse(next)); ++ assert(p->fd->bk == p); ++ assert(p->bk->fd == p); ++ } ++ else /* markers are always of size SIZE_T_SIZE */ ++ assert(sz == SIZE_T_SIZE); ++ } ++} ++ ++/* Check properties of malloced chunks at the point they are malloced */ ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ do_check_inuse_chunk(m, p); ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(sz >= MIN_CHUNK_SIZE); ++ assert(sz >= s); ++ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ ++ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); ++ } ++} ++ ++/* Check a tree and its subtrees. */ ++static void do_check_tree(mstate m, tchunkptr t) { ++ tchunkptr head = 0; ++ tchunkptr u = t; ++ bindex_t tindex = t->index; ++ size_t tsize = chunksize(t); ++ bindex_t idx; ++ compute_tree_index(tsize, idx); ++ assert(tindex == idx); ++ assert(tsize >= MIN_LARGE_SIZE); ++ assert(tsize >= minsize_for_tree_index(idx)); ++ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); ++ ++ do { /* traverse through chain of same-sized nodes */ ++ do_check_any_chunk(m, ((mchunkptr)u)); ++ assert(u->index == tindex); ++ assert(chunksize(u) == tsize); ++ assert(!cinuse(u)); ++ assert(!next_pinuse(u)); ++ assert(u->fd->bk == u); ++ assert(u->bk->fd == u); ++ if (u->parent == 0) { ++ assert(u->child[0] == 0); ++ assert(u->child[1] == 0); ++ } ++ else { ++ assert(head == 0); /* only one node on chain has parent */ ++ head = u; ++ assert(u->parent != u); ++ assert (u->parent->child[0] == u || ++ u->parent->child[1] == u || ++ *((tbinptr*)(u->parent)) == u); ++ if (u->child[0] != 0) { ++ assert(u->child[0]->parent == u); ++ assert(u->child[0] != u); ++ do_check_tree(m, u->child[0]); ++ } ++ if (u->child[1] != 0) { ++ assert(u->child[1]->parent == u); ++ assert(u->child[1] != u); ++ do_check_tree(m, u->child[1]); ++ } ++ if (u->child[0] != 0 && u->child[1] != 0) { ++ assert(chunksize(u->child[0]) < chunksize(u->child[1])); ++ } ++ } ++ u = u->fd; ++ } while (u != t); ++ assert(head != 0); ++} ++ ++/* Check all the chunks in a treebin. */ ++static void do_check_treebin(mstate m, bindex_t i) { ++ tbinptr* tb = treebin_at(m, i); ++ tchunkptr t = *tb; ++ int empty = (m->treemap & (1U << i)) == 0; ++ if (t == 0) ++ assert(empty); ++ if (!empty) ++ do_check_tree(m, t); ++} ++ ++/* Check all the chunks in a smallbin. */ ++static void do_check_smallbin(mstate m, bindex_t i) { ++ sbinptr b = smallbin_at(m, i); ++ mchunkptr p = b->bk; ++ unsigned int empty = (m->smallmap & (1U << i)) == 0; ++ if (p == b) ++ assert(empty); ++ if (!empty) { ++ for (; p != b; p = p->bk) { ++ size_t size = chunksize(p); ++ mchunkptr q; ++ /* each chunk claims to be free */ ++ do_check_free_chunk(m, p); ++ /* chunk belongs in bin */ ++ assert(small_index(size) == i); ++ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); ++ /* chunk is followed by an inuse chunk */ ++ q = next_chunk(p); ++ if (q->head != FENCEPOST_HEAD) ++ do_check_inuse_chunk(m, q); ++ } ++ } ++} ++ ++/* Find x in a bin. Used in other check functions. */ ++static int bin_find(mstate m, mchunkptr x) { ++ size_t size = chunksize(x); ++ if (is_small(size)) { ++ bindex_t sidx = small_index(size); ++ sbinptr b = smallbin_at(m, sidx); ++ if (smallmap_is_marked(m, sidx)) { ++ mchunkptr p = b; ++ do { ++ if (p == x) ++ return 1; ++ } while ((p = p->fd) != b); ++ } ++ } ++ else { ++ bindex_t tidx; ++ compute_tree_index(size, tidx); ++ if (treemap_is_marked(m, tidx)) { ++ tchunkptr t = *treebin_at(m, tidx); ++ size_t sizebits = size << leftshift_for_tree_index(tidx); ++ while (t != 0 && chunksize(t) != size) { ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ sizebits <<= 1; ++ } ++ if (t != 0) { ++ tchunkptr u = t; ++ do { ++ if (u == (tchunkptr)x) ++ return 1; ++ } while ((u = u->fd) != t); ++ } ++ } ++ } ++ return 0; ++} ++ ++/* Traverse each chunk and check it; return total */ ++static size_t traverse_and_check(mstate m) { ++ size_t sum = 0; ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ sum += m->topsize + TOP_FOOT_SIZE; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ mchunkptr lastq = 0; ++ assert(pinuse(q)); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ sum += chunksize(q); ++ if (cinuse(q)) { ++ assert(!bin_find(m, q)); ++ do_check_inuse_chunk(m, q); ++ } ++ else { ++ assert(q == m->dv || bin_find(m, q)); ++ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ ++ do_check_free_chunk(m, q); ++ } ++ lastq = q; ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } ++ return sum; ++} ++ ++/* Check all properties of malloc_state. */ ++static void do_check_malloc_state(mstate m) { ++ bindex_t i; ++ size_t total; ++ /* check bins */ ++ for (i = 0; i < NSMALLBINS; ++i) ++ do_check_smallbin(m, i); ++ for (i = 0; i < NTREEBINS; ++i) ++ do_check_treebin(m, i); ++ ++ if (m->dvsize != 0) { /* check dv chunk */ ++ do_check_any_chunk(m, m->dv); ++ assert(m->dvsize == chunksize(m->dv)); ++ assert(m->dvsize >= MIN_CHUNK_SIZE); ++ assert(bin_find(m, m->dv) == 0); ++ } ++ ++ if (m->top != 0) { /* check top chunk */ ++ do_check_top_chunk(m, m->top); ++ assert(m->topsize == chunksize(m->top)); ++ assert(m->topsize > 0); ++ assert(bin_find(m, m->top) == 0); ++ } ++ ++ total = traverse_and_check(m); ++ assert(total <= m->footprint); ++ assert(m->footprint <= m->max_footprint); ++} ++#endif /* DEBUG */ ++ ++/* ----------------------------- statistics ------------------------------ */ ++ ++#if !NO_MALLINFO ++static struct mallinfo internal_mallinfo(mstate m) { ++ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ++ if (!PREACTION(m)) { ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ size_t nfree = SIZE_T_ONE; /* top always free */ ++ size_t mfree = m->topsize + TOP_FOOT_SIZE; ++ size_t sum = mfree; ++ msegmentptr s = &m->seg; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ size_t sz = chunksize(q); ++ sum += sz; ++ if (!cinuse(q)) { ++ mfree += sz; ++ ++nfree; ++ } ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ ++ nm.arena = sum; ++ nm.ordblks = nfree; ++ nm.hblkhd = m->footprint - sum; ++ nm.usmblks = m->max_footprint; ++ nm.uordblks = m->footprint - mfree; ++ nm.fordblks = mfree; ++ nm.keepcost = m->topsize; ++ } ++ ++ POSTACTION(m); ++ } ++ return nm; ++} ++#endif /* !NO_MALLINFO */ ++ ++static void internal_malloc_stats(mstate m) { ++ if (!PREACTION(m)) { ++ size_t maxfp = 0; ++ size_t fp = 0; ++ size_t used = 0; ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ maxfp = m->max_footprint; ++ fp = m->footprint; ++ used = fp - (m->topsize + TOP_FOOT_SIZE); ++ ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ if (!cinuse(q)) ++ used -= chunksize(q); ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } ++ ++ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); ++ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); ++ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); ++ ++ POSTACTION(m); ++ } ++} ++ ++/* ----------------------- Operations on smallbins ----------------------- */ ++ ++/* ++ Various forms of linking and unlinking are defined as macros. Even ++ the ones for trees, which are very long but have very short typical ++ paths. This is ugly but reduces reliance on inlining support of ++ compilers. ++*/ ++ ++/* Link a free chunk into a smallbin */ ++#define insert_small_chunk(M, P, S) {\ ++ bindex_t I = small_index(S);\ ++ mchunkptr B = smallbin_at(M, I);\ ++ mchunkptr F = B;\ ++ assert(S >= MIN_CHUNK_SIZE);\ ++ if (!smallmap_is_marked(M, I))\ ++ mark_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, B->fd)))\ ++ F = B->fd;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ B->fd = P;\ ++ F->bk = P;\ ++ P->fd = F;\ ++ P->bk = B;\ ++} ++ ++/* Unlink a chunk from a smallbin */ ++#define unlink_small_chunk(M, P, S) {\ ++ mchunkptr F = P->fd;\ ++ mchunkptr B = P->bk;\ ++ bindex_t I = small_index(S);\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (F == B)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ ++ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ ++ F->bk = B;\ ++ B->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} ++ ++/* Unlink the first chunk from a smallbin */ ++#define unlink_first_small_chunk(M, B, P, I) {\ ++ mchunkptr F = P->fd;\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (B == F)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, F))) {\ ++ B->fd = F;\ ++ F->bk = B;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} ++ ++/* Replace dv node, binning the old one */ ++/* Used only when dvsize known to be small */ ++#define replace_dv(M, P, S) {\ ++ size_t DVS = M->dvsize;\ ++ if (DVS != 0) {\ ++ mchunkptr DV = M->dv;\ ++ assert(is_small(DVS));\ ++ insert_small_chunk(M, DV, DVS);\ ++ }\ ++ M->dvsize = S;\ ++ M->dv = P;\ ++} ++ ++/* ------------------------- Operations on trees ------------------------- */ ++ ++/* Insert chunk into tree */ ++#define insert_large_chunk(M, X, S) {\ ++ tbinptr* H;\ ++ bindex_t I;\ ++ compute_tree_index(S, I);\ ++ H = treebin_at(M, I);\ ++ X->index = I;\ ++ X->child[0] = X->child[1] = 0;\ ++ if (!treemap_is_marked(M, I)) {\ ++ mark_treemap(M, I);\ ++ *H = X;\ ++ X->parent = (tchunkptr)H;\ ++ X->fd = X->bk = X;\ ++ }\ ++ else {\ ++ tchunkptr T = *H;\ ++ size_t K = S << leftshift_for_tree_index(I);\ ++ for (;;) {\ ++ if (chunksize(T) != S) {\ ++ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ ++ K <<= 1;\ ++ if (*C != 0)\ ++ T = *C;\ ++ else if (RTCHECK(ok_address(M, C))) {\ ++ *C = X;\ ++ X->parent = T;\ ++ X->fd = X->bk = X;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr F = T->fd;\ ++ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ ++ T->fd = F->bk = X;\ ++ X->fd = F;\ ++ X->bk = T;\ ++ X->parent = 0;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ }\ ++ }\ ++} ++ ++/* ++ Unlink steps: ++ ++ 1. If x is a chained node, unlink it from its same-sized fd/bk links ++ and choose its bk node as its replacement. ++ 2. If x was the last node of its size, but not a leaf node, it must ++ be replaced with a leaf node (not merely one with an open left or ++ right), to make sure that lefts and rights of descendants ++ correspond properly to bit masks. We use the rightmost descendant ++ of x. We could use any other leaf, but this is easy to locate and ++ tends to counteract removal of leftmosts elsewhere, and so keeps ++ paths shorter than minimally guaranteed. This doesn't loop much ++ because on average a node in a tree is near the bottom. ++ 3. If x is the base of a chain (i.e., has parent links) relink ++ x's parent and children to x's replacement (or null if none). ++*/ ++ ++#define unlink_large_chunk(M, X) {\ ++ tchunkptr XP = X->parent;\ ++ tchunkptr R;\ ++ if (X->bk != X) {\ ++ tchunkptr F = X->fd;\ ++ R = X->bk;\ ++ if (RTCHECK(ok_address(M, F))) {\ ++ F->bk = R;\ ++ R->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr* RP;\ ++ if (((R = *(RP = &(X->child[1]))) != 0) ||\ ++ ((R = *(RP = &(X->child[0]))) != 0)) {\ ++ tchunkptr* CP;\ ++ while ((*(CP = &(R->child[1])) != 0) ||\ ++ (*(CP = &(R->child[0])) != 0)) {\ ++ R = *(RP = CP);\ ++ }\ ++ if (RTCHECK(ok_address(M, RP)))\ ++ *RP = 0;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ }\ ++ if (XP != 0) {\ ++ tbinptr* H = treebin_at(M, X->index);\ ++ if (X == *H) {\ ++ if ((*H = R) == 0) \ ++ clear_treemap(M, X->index);\ ++ }\ ++ else if (RTCHECK(ok_address(M, XP))) {\ ++ if (XP->child[0] == X) \ ++ XP->child[0] = R;\ ++ else \ ++ XP->child[1] = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ if (R != 0) {\ ++ if (RTCHECK(ok_address(M, R))) {\ ++ tchunkptr C0, C1;\ ++ R->parent = XP;\ ++ if ((C0 = X->child[0]) != 0) {\ ++ if (RTCHECK(ok_address(M, C0))) {\ ++ R->child[0] = C0;\ ++ C0->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ if ((C1 = X->child[1]) != 0) {\ ++ if (RTCHECK(ok_address(M, C1))) {\ ++ R->child[1] = C1;\ ++ C1->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++} ++ ++/* Relays to large vs small bin operations */ ++ ++#define insert_chunk(M, P, S)\ ++ if (is_small(S)) insert_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } ++ ++#define unlink_chunk(M, P, S)\ ++ if (is_small(S)) unlink_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } ++ ++ ++/* Relays to internal calls to malloc/free from realloc, memalign etc */ ++ ++#if ONLY_MSPACES ++#define internal_malloc(m, b) mspace_malloc(m, b) ++#define internal_free(m, mem) mspace_free(m,mem); ++#else /* ONLY_MSPACES */ ++#if MSPACES ++#define internal_malloc(m, b)\ ++ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) ++#define internal_free(m, mem)\ ++ if (m == gm) dlfree(mem); else mspace_free(m,mem); ++#else /* MSPACES */ ++#define internal_malloc(m, b) dlmalloc(b) ++#define internal_free(m, mem) dlfree(mem) ++#endif /* MSPACES */ ++#endif /* ONLY_MSPACES */ ++ ++/* ----------------------- Direct-mmapping chunks ----------------------- */ ++ ++/* ++ Directly mmapped chunks are set up with an offset to the start of ++ the mmapped region stored in the prev_foot field of the chunk. This ++ allows reconstruction of the required argument to MUNMAP when freed, ++ and also allows adjustment of the returned chunk to meet alignment ++ requirements (especially in memalign). There is also enough space ++ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain ++ the PINUSE bit so frees can be checked. ++*/ ++ ++/* Malloc using mmap */ ++static void* mmap_alloc(mstate m, size_t nb) { ++ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ if (mmsize > nb) { /* Check for wrap around 0 */ ++ char* mm = (char*)(DIRECT_MMAP(mmsize)); ++ if (mm != CMFAIL) { ++ size_t offset = align_offset(chunk2mem(mm)); ++ size_t psize = mmsize - offset - MMAP_FOOT_PAD; ++ mchunkptr p = (mchunkptr)(mm + offset); ++ p->prev_foot = offset | IS_MMAPPED_BIT; ++ (p)->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, p, psize); ++ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; ++ ++ if (mm < m->least_addr) ++ m->least_addr = mm; ++ if ((m->footprint += mmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ assert(is_aligned(chunk2mem(p))); ++ check_mmapped_chunk(m, p); ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} ++ ++/* Realloc using mmap */ ++static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { ++ size_t oldsize = chunksize(oldp); ++ if (is_small(nb)) /* Can't shrink mmap regions below small size */ ++ return 0; ++ /* Keep old chunk if big enough but not too big */ ++ if (oldsize >= nb + SIZE_T_SIZE && ++ (oldsize - nb) <= (mparams.granularity << 1)) ++ return oldp; ++ else { ++ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; ++ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; ++ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + ++ CHUNK_ALIGN_MASK); ++ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, ++ oldmmsize, newmmsize, 1); ++ if (cp != CMFAIL) { ++ mchunkptr newp = (mchunkptr)(cp + offset); ++ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; ++ newp->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, newp, psize); ++ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; ++ ++ if (cp < m->least_addr) ++ m->least_addr = cp; ++ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ check_mmapped_chunk(m, newp); ++ return newp; ++ } ++ } ++ return 0; ++} ++ ++/* -------------------------- mspace management -------------------------- */ ++ ++/* Initialize top chunk and its size */ ++static void init_top(mstate m, mchunkptr p, size_t psize) { ++ /* Ensure alignment */ ++ size_t offset = align_offset(chunk2mem(p)); ++ p = (mchunkptr)((char*)p + offset); ++ psize -= offset; ++ ++ m->top = p; ++ m->topsize = psize; ++ p->head = psize | PINUSE_BIT; ++ /* set size of fake trailing chunk holding overhead space only once */ ++ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; ++ m->trim_check = mparams.trim_threshold; /* reset on each update */ ++} ++ ++/* Initialize bins for a new mstate that is otherwise zeroed out */ ++static void init_bins(mstate m) { ++ /* Establish circular links for smallbins */ ++ bindex_t i; ++ for (i = 0; i < NSMALLBINS; ++i) { ++ sbinptr bin = smallbin_at(m,i); ++ bin->fd = bin->bk = bin; ++ } ++} ++ ++#if PROCEED_ON_ERROR ++ ++/* default corruption action */ ++static void reset_on_error(mstate m) { ++ int i; ++ ++malloc_corruption_error_count; ++ /* Reinitialize fields to forget about all memory */ ++ m->smallbins = m->treebins = 0; ++ m->dvsize = m->topsize = 0; ++ m->seg.base = 0; ++ m->seg.size = 0; ++ m->seg.next = 0; ++ m->top = m->dv = 0; ++ for (i = 0; i < NTREEBINS; ++i) ++ *treebin_at(m, i) = 0; ++ init_bins(m); ++} ++#endif /* PROCEED_ON_ERROR */ ++ ++/* Allocate chunk and prepend remainder with chunk in successor base. */ ++static void* prepend_alloc(mstate m, char* newbase, char* oldbase, ++ size_t nb) { ++ mchunkptr p = align_as_chunk(newbase); ++ mchunkptr oldfirst = align_as_chunk(oldbase); ++ size_t psize = (char*)oldfirst - (char*)p; ++ mchunkptr q = chunk_plus_offset(p, nb); ++ size_t qsize = psize - nb; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++ ++ assert((char*)oldfirst > (char*)q); ++ assert(pinuse(oldfirst)); ++ assert(qsize >= MIN_CHUNK_SIZE); ++ ++ /* consolidate remainder with first chunk of old base */ ++ if (oldfirst == m->top) { ++ size_t tsize = m->topsize += qsize; ++ m->top = q; ++ q->head = tsize | PINUSE_BIT; ++ check_top_chunk(m, q); ++ } ++ else if (oldfirst == m->dv) { ++ size_t dsize = m->dvsize += qsize; ++ m->dv = q; ++ set_size_and_pinuse_of_free_chunk(q, dsize); ++ } ++ else { ++ if (!cinuse(oldfirst)) { ++ size_t nsize = chunksize(oldfirst); ++ unlink_chunk(m, oldfirst, nsize); ++ oldfirst = chunk_plus_offset(oldfirst, nsize); ++ qsize += nsize; ++ } ++ set_free_with_pinuse(q, qsize, oldfirst); ++ insert_chunk(m, q, qsize); ++ check_free_chunk(m, q); ++ } ++ ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++} ++ ++ ++/* Add a segment to hold a new noncontiguous region */ ++static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { ++ /* Determine locations and sizes of segment, fenceposts, old top */ ++ char* old_top = (char*)m->top; ++ msegmentptr oldsp = segment_holding(m, old_top); ++ char* old_end = oldsp->base + oldsp->size; ++ size_t ssize = pad_request(sizeof(struct malloc_segment)); ++ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ size_t offset = align_offset(chunk2mem(rawsp)); ++ char* asp = rawsp + offset; ++ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; ++ mchunkptr sp = (mchunkptr)csp; ++ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); ++ mchunkptr tnext = chunk_plus_offset(sp, ssize); ++ mchunkptr p = tnext; ++ int nfences = 0; ++ ++ /* reset top to new space */ ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++ ++ /* Set up segment record */ ++ assert(is_aligned(ss)); ++ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); ++ *ss = m->seg; /* Push current record */ ++ m->seg.base = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmapped); ++ m->seg.next = ss; ++ ++ /* Insert trailing fenceposts */ ++ for (;;) { ++ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); ++ p->head = FENCEPOST_HEAD; ++ ++nfences; ++ if ((char*)(&(nextp->head)) < old_end) ++ p = nextp; ++ else ++ break; ++ } ++ assert(nfences >= 2); ++ ++ /* Insert the rest of old top into a bin as an ordinary free chunk */ ++ if (csp != old_top) { ++ mchunkptr q = (mchunkptr)old_top; ++ size_t psize = csp - old_top; ++ mchunkptr tn = chunk_plus_offset(q, psize); ++ set_free_with_pinuse(q, psize, tn); ++ insert_chunk(m, q, psize); ++ } ++ ++ check_top_chunk(m, m->top); ++} ++ ++/* -------------------------- System allocation -------------------------- */ ++ ++/* Get memory from system using MORECORE or MMAP */ ++static void* sys_alloc(mstate m, size_t nb) { ++ char* tbase = CMFAIL; ++ size_t tsize = 0; ++ flag_t mmap_flag = 0; ++ ++ init_mparams(); ++ ++ /* Directly map large chunks */ ++ if (use_mmap(m) && nb >= mparams.mmap_threshold) { ++ void* mem = mmap_alloc(m, nb); ++ if (mem != 0) ++ return mem; ++ } ++ ++ /* ++ Try getting memory in any of three ways (in most-preferred to ++ least-preferred order): ++ 1. A call to MORECORE that can normally contiguously extend memory. ++ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or ++ or main space is mmapped or a previous contiguous call failed) ++ 2. A call to MMAP new space (disabled if not HAVE_MMAP). ++ Note that under the default settings, if MORECORE is unable to ++ fulfill a request, and HAVE_MMAP is true, then mmap is ++ used as a noncontiguous system allocator. This is a useful backup ++ strategy for systems with holes in address spaces -- in this case ++ sbrk cannot contiguously expand the heap, but mmap may be able to ++ find space. ++ 3. A call to MORECORE that cannot usually contiguously extend memory. ++ (disabled if not HAVE_MORECORE) ++ */ ++ ++ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { ++ char* br = CMFAIL; ++ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); ++ size_t asize = 0; ++ ACQUIRE_MORECORE_LOCK(); ++ ++ if (ss == 0) { /* First time through or recovery */ ++ char* base = (char*)CALL_MORECORE(0); ++ if (base != CMFAIL) { ++ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Adjust to end on a page boundary */ ++ if (!is_page_aligned(base)) ++ asize += (page_align((size_t)base) - (size_t)base); ++ /* Can't call MORECORE if size is negative when treated as signed */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == base) { ++ tbase = base; ++ tsize = asize; ++ } ++ } ++ } ++ else { ++ /* Subtract out existing available top space from MORECORE request. */ ++ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Use mem here only if it did continuously extend old space */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { ++ tbase = br; ++ tsize = asize; ++ } ++ } ++ ++ if (tbase == CMFAIL) { /* Cope with partial failure */ ++ if (br != CMFAIL) { /* Try to use/extend the space we did get */ ++ if (asize < HALF_MAX_SIZE_T && ++ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { ++ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); ++ if (esize < HALF_MAX_SIZE_T) { ++ char* end = (char*)CALL_MORECORE(esize); ++ if (end != CMFAIL) ++ asize += esize; ++ else { /* Can't use; try to release */ ++ (void)CALL_MORECORE(-asize); ++ br = CMFAIL; ++ } ++ } ++ } ++ } ++ if (br != CMFAIL) { /* Use the space we did get */ ++ tbase = br; ++ tsize = asize; ++ } ++ else ++ disable_contiguous(m); /* Don't try contiguous path in the future */ ++ } ++ ++ RELEASE_MORECORE_LOCK(); ++ } ++ ++ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ ++ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; ++ size_t rsize = granularity_align(req); ++ if (rsize > nb) { /* Fail if wraps around zero */ ++ char* mp = (char*)(CALL_MMAP(rsize)); ++ if (mp != CMFAIL) { ++ tbase = mp; ++ tsize = rsize; ++ mmap_flag = IS_MMAPPED_BIT; ++ } ++ } ++ } ++ ++ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ ++ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ if (asize < HALF_MAX_SIZE_T) { ++ char* br = CMFAIL; ++ char* end = CMFAIL; ++ ACQUIRE_MORECORE_LOCK(); ++ br = (char*)(CALL_MORECORE(asize)); ++ end = (char*)(CALL_MORECORE(0)); ++ RELEASE_MORECORE_LOCK(); ++ if (br != CMFAIL && end != CMFAIL && br < end) { ++ size_t ssize = end - br; ++ if (ssize > nb + TOP_FOOT_SIZE) { ++ tbase = br; ++ tsize = ssize; ++ } ++ } ++ } ++ } ++ ++ if (tbase != CMFAIL) { ++ ++ if ((m->footprint += tsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ ++ if (!is_initialized(m)) { /* first-time initialization */ ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmap_flag); ++ m->magic = mparams.magic; ++ init_bins(m); ++ if (is_global(m)) ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++ else { ++ /* Offset top by embedded malloc_state */ ++ mchunkptr mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); ++ } ++ } ++ ++ else { ++ /* Try to merge with an existing segment */ ++ msegmentptr sp = &m->seg; ++ while (sp != 0 && tbase != sp->base + sp->size) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && ++ segment_holds(sp, m->top)) { /* append */ ++ sp->size += tsize; ++ init_top(m, m->top, m->topsize + tsize); ++ } ++ else { ++ if (tbase < m->least_addr) ++ m->least_addr = tbase; ++ sp = &m->seg; ++ while (sp != 0 && sp->base != tbase + tsize) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { ++ char* oldbase = sp->base; ++ sp->base = tbase; ++ sp->size += tsize; ++ return prepend_alloc(m, tbase, oldbase, nb); ++ } ++ else ++ add_segment(m, tbase, tsize, mmap_flag); ++ } ++ } ++ ++ if (nb < m->topsize) { /* Allocate from new or extended top space */ ++ size_t rsize = m->topsize -= nb; ++ mchunkptr p = m->top; ++ mchunkptr r = m->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++ check_top_chunk(m, m->top); ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++ } ++ } ++ ++ MALLOC_FAILURE_ACTION; ++ return 0; ++} ++ ++/* ----------------------- system deallocation -------------------------- */ ++ ++/* Unmap and unlink any mmapped segments that don't contain used chunks */ ++static size_t release_unused_segments(mstate m) { ++ size_t released = 0; ++ msegmentptr pred = &m->seg; ++ msegmentptr sp = pred->next; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ msegmentptr next = sp->next; ++ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { ++ mchunkptr p = align_as_chunk(base); ++ size_t psize = chunksize(p); ++ /* Can unmap if first chunk holds entire segment and not pinned */ ++ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { ++ tchunkptr tp = (tchunkptr)p; ++ assert(segment_holds(sp, (char*)sp)); ++ if (p == m->dv) { ++ m->dv = 0; ++ m->dvsize = 0; ++ } ++ else { ++ unlink_large_chunk(m, tp); ++ } ++ if (CALL_MUNMAP(base, size) == 0) { ++ released += size; ++ m->footprint -= size; ++ /* unlink obsoleted record */ ++ sp = pred; ++ sp->next = next; ++ } ++ else { /* back out if cannot unmap */ ++ insert_large_chunk(m, tp, psize); ++ } ++ } ++ } ++ pred = sp; ++ sp = next; ++ } ++ return released; ++} ++ ++static int sys_trim(mstate m, size_t pad) { ++ size_t released = 0; ++ if (pad < MAX_REQUEST && is_initialized(m)) { ++ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ ++ ++ if (m->topsize > pad) { ++ /* Shrink top space in granularity-size units, keeping at least one */ ++ size_t unit = mparams.granularity; ++ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - ++ SIZE_T_ONE) * unit; ++ msegmentptr sp = segment_holding(m, (char*)m->top); ++ ++ if (!is_extern_segment(sp)) { ++ if (is_mmapped_segment(sp)) { ++ if (HAVE_MMAP && ++ sp->size >= extra && ++ !has_segment_link(m, sp)) { /* can't shrink if pinned */ ++ size_t newsize = sp->size - extra; ++ /* Prefer mremap, fall back to munmap */ ++ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || ++ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { ++ released = extra; ++ } ++ } ++ } ++ else if (HAVE_MORECORE) { ++ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ ++ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; ++ ACQUIRE_MORECORE_LOCK(); ++ { ++ /* Make sure end of memory is where we last set it. */ ++ char* old_br = (char*)(CALL_MORECORE(0)); ++ if (old_br == sp->base + sp->size) { ++ char* rel_br = (char*)(CALL_MORECORE(-extra)); ++ char* new_br = (char*)(CALL_MORECORE(0)); ++ if (rel_br != CMFAIL && new_br < old_br) ++ released = old_br - new_br; ++ } ++ } ++ RELEASE_MORECORE_LOCK(); ++ } ++ } ++ ++ if (released != 0) { ++ sp->size -= released; ++ m->footprint -= released; ++ init_top(m, m->top, m->topsize - released); ++ check_top_chunk(m, m->top); ++ } ++ } ++ ++ /* Unmap any unused mmapped segments */ ++ if (HAVE_MMAP) ++ released += release_unused_segments(m); ++ ++ /* On failure, disable autotrim to avoid repeated failed future calls */ ++ if (released == 0) ++ m->trim_check = MAX_SIZE_T; ++ } ++ ++ return (released != 0)? 1 : 0; ++} ++ ++/* ---------------------------- malloc support --------------------------- */ ++ ++/* allocate a large request from the best fitting chunk in a treebin */ ++static void* tmalloc_large(mstate m, size_t nb) { ++ tchunkptr v = 0; ++ size_t rsize = -nb; /* Unsigned negation */ ++ tchunkptr t; ++ bindex_t idx; ++ compute_tree_index(nb, idx); ++ ++ if ((t = *treebin_at(m, idx)) != 0) { ++ /* Traverse tree for this bin looking for node with size == nb */ ++ size_t sizebits = nb << leftshift_for_tree_index(idx); ++ tchunkptr rst = 0; /* The deepest untaken right subtree */ ++ for (;;) { ++ tchunkptr rt; ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ v = t; ++ if ((rsize = trem) == 0) ++ break; ++ } ++ rt = t->child[1]; ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ if (rt != 0 && rt != t) ++ rst = rt; ++ if (t == 0) { ++ t = rst; /* set t to least subtree holding sizes > nb */ ++ break; ++ } ++ sizebits <<= 1; ++ } ++ } ++ ++ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ ++ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; ++ if (leftbits != 0) { ++ bindex_t i; ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ t = *treebin_at(m, i); ++ } ++ } ++ ++ while (t != 0) { /* find smallest of tree or subtree */ ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ t = leftmost_child(t); ++ } ++ ++ /* If dv is a better fit, return 0 so malloc will use it */ ++ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { ++ if (RTCHECK(ok_address(m, v))) { /* split */ ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ insert_chunk(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } ++ CORRUPTION_ERROR_ACTION(m); ++ } ++ return 0; ++} ++ ++/* allocate a small request from the best fitting chunk in a treebin */ ++static void* tmalloc_small(mstate m, size_t nb) { ++ tchunkptr t, v; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leastbit = least_bit(m->treemap); ++ compute_bit2idx(leastbit, i); ++ ++ v = t = *treebin_at(m, i); ++ rsize = chunksize(t) - nb; ++ ++ while ((t = leftmost_child(t)) != 0) { ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ } ++ ++ if (RTCHECK(ok_address(m, v))) { ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } ++ ++ CORRUPTION_ERROR_ACTION(m); ++ return 0; ++} ++ ++/* --------------------------- realloc support --------------------------- */ ++ ++static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { ++ if (bytes >= MAX_REQUEST) { ++ MALLOC_FAILURE_ACTION; ++ return 0; ++ } ++ if (!PREACTION(m)) { ++ mchunkptr oldp = mem2chunk(oldmem); ++ size_t oldsize = chunksize(oldp); ++ mchunkptr next = chunk_plus_offset(oldp, oldsize); ++ mchunkptr newp = 0; ++ void* extra = 0; ++ ++ /* Try to either shrink or extend into top. Else malloc-copy-free */ ++ ++ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && ++ ok_next(oldp, next) && ok_pinuse(next))) { ++ size_t nb = request2size(bytes); ++ if (is_mmapped(oldp)) ++ newp = mmap_resize(m, oldp, nb); ++ else if (oldsize >= nb) { /* already big enough */ ++ size_t rsize = oldsize - nb; ++ newp = oldp; ++ if (rsize >= MIN_CHUNK_SIZE) { ++ mchunkptr remainder = chunk_plus_offset(newp, nb); ++ set_inuse(m, newp, nb); ++ set_inuse(m, remainder, rsize); ++ extra = chunk2mem(remainder); ++ } ++ } ++ else if (next == m->top && oldsize + m->topsize > nb) { ++ /* Expand into top */ ++ size_t newsize = oldsize + m->topsize; ++ size_t newtopsize = newsize - nb; ++ mchunkptr newtop = chunk_plus_offset(oldp, nb); ++ set_inuse(m, oldp, nb); ++ newtop->head = newtopsize |PINUSE_BIT; ++ m->top = newtop; ++ m->topsize = newtopsize; ++ newp = oldp; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(m, oldmem); ++ POSTACTION(m); ++ return 0; ++ } ++ ++ POSTACTION(m); ++ ++ if (newp != 0) { ++ if (extra != 0) { ++ internal_free(m, extra); ++ } ++ check_inuse_chunk(m, newp); ++ return chunk2mem(newp); ++ } ++ else { ++ void* newmem = internal_malloc(m, bytes); ++ if (newmem != 0) { ++ size_t oc = oldsize - overhead_for(oldp); ++ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); ++ internal_free(m, oldmem); ++ } ++ return newmem; ++ } ++ } ++ return 0; ++} ++ ++/* --------------------------- memalign support -------------------------- */ ++ ++static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { ++ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ ++ return internal_malloc(m, bytes); ++ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ ++ alignment = MIN_CHUNK_SIZE; ++ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ ++ size_t a = MALLOC_ALIGNMENT << 1; ++ while (a < alignment) a <<= 1; ++ alignment = a; ++ } ++ ++ if (bytes >= MAX_REQUEST - alignment) { ++ if (m != 0) { /* Test isn't needed but avoids compiler warning */ ++ MALLOC_FAILURE_ACTION; ++ } ++ } ++ else { ++ size_t nb = request2size(bytes); ++ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; ++ char* mem = (char*)internal_malloc(m, req); ++ if (mem != 0) { ++ void* leader = 0; ++ void* trailer = 0; ++ mchunkptr p = mem2chunk(mem); ++ ++ if (PREACTION(m)) return 0; ++ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ ++ /* ++ Find an aligned spot inside chunk. Since we need to give ++ back leading space in a chunk of at least MIN_CHUNK_SIZE, if ++ the first calculation places us at a spot with less than ++ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. ++ We've allocated enough total room so that this is always ++ possible. ++ */ ++ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + ++ alignment - ++ SIZE_T_ONE)) & ++ -alignment)); ++ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? ++ br : br+alignment; ++ mchunkptr newp = (mchunkptr)pos; ++ size_t leadsize = pos - (char*)(p); ++ size_t newsize = chunksize(p) - leadsize; ++ ++ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ ++ newp->prev_foot = p->prev_foot + leadsize; ++ newp->head = (newsize|CINUSE_BIT); ++ } ++ else { /* Otherwise, give back leader, use the rest */ ++ set_inuse(m, newp, newsize); ++ set_inuse(m, p, leadsize); ++ leader = chunk2mem(p); ++ } ++ p = newp; ++ } ++ ++ /* Give back spare room at the end */ ++ if (!is_mmapped(p)) { ++ size_t size = chunksize(p); ++ if (size > nb + MIN_CHUNK_SIZE) { ++ size_t remainder_size = size - nb; ++ mchunkptr remainder = chunk_plus_offset(p, nb); ++ set_inuse(m, p, nb); ++ set_inuse(m, remainder, remainder_size); ++ trailer = chunk2mem(remainder); ++ } ++ } ++ ++ assert (chunksize(p) >= nb); ++ assert((((size_t)(chunk2mem(p))) % alignment) == 0); ++ check_inuse_chunk(m, p); ++ POSTACTION(m); ++ if (leader != 0) { ++ internal_free(m, leader); ++ } ++ if (trailer != 0) { ++ internal_free(m, trailer); ++ } ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} ++ ++/* ------------------------ comalloc/coalloc support --------------------- */ ++ ++static void** ialloc(mstate m, ++ size_t n_elements, ++ size_t* sizes, ++ int opts, ++ void* chunks[]) { ++ /* ++ This provides common support for independent_X routines, handling ++ all of the combinations that can result. ++ ++ The opts arg has: ++ bit 0 set if all elements are same size (using sizes[0]) ++ bit 1 set if elements should be zeroed ++ */ ++ ++ size_t element_size; /* chunksize of each element, if all same */ ++ size_t contents_size; /* total size of elements */ ++ size_t array_size; /* request size of pointer array */ ++ void* mem; /* malloced aggregate space */ ++ mchunkptr p; /* corresponding chunk */ ++ size_t remainder_size; /* remaining bytes while splitting */ ++ void** marray; /* either "chunks" or malloced ptr array */ ++ mchunkptr array_chunk; /* chunk for malloced ptr array */ ++ flag_t was_enabled; /* to disable mmap */ ++ size_t size; ++ size_t i; ++ ++ /* compute array length, if needed */ ++ if (chunks != 0) { ++ if (n_elements == 0) ++ return chunks; /* nothing to do */ ++ marray = chunks; ++ array_size = 0; ++ } ++ else { ++ /* if empty req, must still return chunk representing empty array */ ++ if (n_elements == 0) ++ return (void**)internal_malloc(m, 0); ++ marray = 0; ++ array_size = request2size(n_elements * (sizeof(void*))); ++ } ++ ++ /* compute total element size */ ++ if (opts & 0x1) { /* all-same-size */ ++ element_size = request2size(*sizes); ++ contents_size = n_elements * element_size; ++ } ++ else { /* add up all the sizes */ ++ element_size = 0; ++ contents_size = 0; ++ for (i = 0; i != n_elements; ++i) ++ contents_size += request2size(sizes[i]); ++ } ++ ++ size = contents_size + array_size; ++ ++ /* ++ Allocate the aggregate chunk. First disable direct-mmapping so ++ malloc won't use it, since we would not be able to later ++ free/realloc space internal to a segregated mmap region. ++ */ ++ was_enabled = use_mmap(m); ++ disable_mmap(m); ++ mem = internal_malloc(m, size - CHUNK_OVERHEAD); ++ if (was_enabled) ++ enable_mmap(m); ++ if (mem == 0) ++ return 0; ++ ++ if (PREACTION(m)) return 0; ++ p = mem2chunk(mem); ++ remainder_size = chunksize(p); ++ ++ assert(!is_mmapped(p)); ++ ++ if (opts & 0x2) { /* optionally clear the elements */ ++ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); ++ } ++ ++ /* If not provided, allocate the pointer array as final part of chunk */ ++ if (marray == 0) { ++ size_t array_chunk_size; ++ array_chunk = chunk_plus_offset(p, contents_size); ++ array_chunk_size = remainder_size - contents_size; ++ marray = (void**) (chunk2mem(array_chunk)); ++ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); ++ remainder_size = contents_size; ++ } ++ ++ /* split out elements */ ++ for (i = 0; ; ++i) { ++ marray[i] = chunk2mem(p); ++ if (i != n_elements-1) { ++ if (element_size != 0) ++ size = element_size; ++ else ++ size = request2size(sizes[i]); ++ remainder_size -= size; ++ set_size_and_pinuse_of_inuse_chunk(m, p, size); ++ p = chunk_plus_offset(p, size); ++ } ++ else { /* the final element absorbs any overallocation slop */ ++ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); ++ break; ++ } ++ } ++ ++#if DEBUG ++ if (marray != chunks) { ++ /* final element must have exactly exhausted chunk */ ++ if (element_size != 0) { ++ assert(remainder_size == element_size); ++ } ++ else { ++ assert(remainder_size == request2size(sizes[i])); ++ } ++ check_inuse_chunk(m, mem2chunk(marray)); ++ } ++ for (i = 0; i != n_elements; ++i) ++ check_inuse_chunk(m, mem2chunk(marray[i])); ++ ++#endif /* DEBUG */ ++ ++ POSTACTION(m); ++ return marray; ++} ++ ++ ++/* -------------------------- public routines ---------------------------- */ ++ ++#if !ONLY_MSPACES ++ ++void* dlmalloc(size_t bytes) { ++ /* ++ Basic algorithm: ++ If a small request (< 256 bytes minus per-chunk overhead): ++ 1. If one exists, use a remainderless chunk in associated smallbin. ++ (Remainderless means that there are too few excess bytes to ++ represent as a chunk.) ++ 2. If it is big enough, use the dv chunk, which is normally the ++ chunk adjacent to the one used for the most recent small request. ++ 3. If one exists, split the smallest available chunk in a bin, ++ saving remainder in dv. ++ 4. If it is big enough, use the top chunk. ++ 5. If available, get memory from system and use it ++ Otherwise, for a large request: ++ 1. Find the smallest available binned chunk that fits, and use it ++ if it is better fitting than dv chunk, splitting if necessary. ++ 2. If better fitting than any binned chunk, use the dv chunk. ++ 3. If it is big enough, use the top chunk. ++ 4. If request size >= mmap threshold, try to directly mmap this chunk. ++ 5. If available, get memory from system and use it ++ ++ The ugly goto's here ensure that postaction occurs along all paths. ++ */ ++ ++ if (!PREACTION(gm)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = gm->smallmap >> idx; ++ ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(gm, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(gm, b, p, idx); ++ set_inuse_and_pinuse(gm, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb > gm->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(gm, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(gm, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(gm, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(gm, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } ++ ++ if (nb <= gm->dvsize) { ++ size_t rsize = gm->dvsize - nb; ++ mchunkptr p = gm->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); ++ gm->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = gm->dvsize; ++ gm->dvsize = 0; ++ gm->dv = 0; ++ set_inuse_and_pinuse(gm, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb < gm->topsize) { /* Split top */ ++ size_t rsize = gm->topsize -= nb; ++ mchunkptr p = gm->top; ++ mchunkptr r = gm->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(gm, gm->top); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ ++ mem = sys_alloc(gm, nb); ++ ++ postaction: ++ POSTACTION(gm); ++ return mem; ++ } ++ ++ return 0; ++} ++ ++void dlfree(void* mem) { ++ /* ++ Consolidate freed chunks with preceding or succeeding bordering ++ free chunks, if they exist, and then place in a bin. Intermixed ++ with special cases for top, dv, mmapped chunks, and usage errors. ++ */ ++ ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++#else /* FOOTERS */ ++#define fm gm ++#endif /* FOOTERS */ ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } ++ ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++#if !FOOTERS ++#undef fm ++#endif /* FOOTERS */ ++} ++ ++void* dlcalloc(size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = dlmalloc(req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} ++ ++void* dlrealloc(void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return dlmalloc(bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ dlfree(oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if ! FOOTERS ++ mstate m = gm; ++#else /* FOOTERS */ ++ mstate m = get_mstate_for(mem2chunk(oldmem)); ++ if (!ok_magic(m)) { ++ USAGE_ERROR_ACTION(m, oldmem); ++ return 0; ++ } ++#endif /* FOOTERS */ ++ return internal_realloc(m, oldmem, bytes); ++ } ++} ++ ++void* dlmemalign(size_t alignment, size_t bytes) { ++ return internal_memalign(gm, alignment, bytes); ++} ++ ++void** dlindependent_calloc(size_t n_elements, size_t elem_size, ++ void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ return ialloc(gm, n_elements, &sz, 3, chunks); ++} ++ ++void** dlindependent_comalloc(size_t n_elements, size_t sizes[], ++ void* chunks[]) { ++ return ialloc(gm, n_elements, sizes, 0, chunks); ++} ++ ++void* dlvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, bytes); ++} ++ ++void* dlpvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); ++} ++ ++int dlmalloc_trim(size_t pad) { ++ int result = 0; ++ if (!PREACTION(gm)) { ++ result = sys_trim(gm, pad); ++ POSTACTION(gm); ++ } ++ return result; ++} ++ ++size_t dlmalloc_footprint(void) { ++ return gm->footprint; ++} ++ ++size_t dlmalloc_max_footprint(void) { ++ return gm->max_footprint; ++} ++ ++#if !NO_MALLINFO ++struct mallinfo dlmallinfo(void) { ++ return internal_mallinfo(gm); ++} ++#endif /* NO_MALLINFO */ ++ ++void dlmalloc_stats() { ++ internal_malloc_stats(gm); ++} ++ ++size_t dlmalloc_usable_size(void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ if (cinuse(p)) ++ return chunksize(p) - overhead_for(p); ++ } ++ return 0; ++} ++ ++int dlmallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} ++ ++#endif /* !ONLY_MSPACES */ ++ ++/* ----------------------------- user mspaces ---------------------------- */ ++ ++#if MSPACES ++ ++static mstate init_user_mstate(char* tbase, size_t tsize) { ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ mchunkptr mn; ++ mchunkptr msp = align_as_chunk(tbase); ++ mstate m = (mstate)(chunk2mem(msp)); ++ memset(m, 0, msize); ++ INITIAL_LOCK(&m->mutex); ++ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = m->footprint = m->max_footprint = tsize; ++ m->magic = mparams.magic; ++ m->mflags = mparams.default_mflags; ++ disable_contiguous(m); ++ init_bins(m); ++ mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); ++ check_top_chunk(m, m->top); ++ return m; ++} ++ ++mspace create_mspace(size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ ++ ++ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ size_t rs = ((capacity == 0)? mparams.granularity : ++ (capacity + TOP_FOOT_SIZE + msize)); ++ size_t tsize = granularity_align(rs); ++ char* tbase = (char*)(CALL_MMAP(tsize)); ++ if (tbase != CMFAIL) { ++ m = init_user_mstate(tbase, tsize); ++ set_segment_flags(&m->seg, IS_MMAPPED_BIT); ++ set_lock(m, locked); ++ } ++ } ++ return (mspace)m; ++} ++ ++mspace create_mspace_with_base(void* base, size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ ++ ++ if (capacity > msize + TOP_FOOT_SIZE && ++ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ m = init_user_mstate((char*)base, capacity); ++ set_segment_flags(&m->seg, EXTERN_BIT); ++ set_lock(m, locked); ++ } ++ return (mspace)m; ++} ++ ++size_t destroy_mspace(mspace msp) { ++ size_t freed = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ msegmentptr sp = &ms->seg; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ flag_t flag = get_segment_flags(sp); ++ sp = sp->next; ++ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && ++ CALL_MUNMAP(base, size) == 0) ++ freed += size; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return freed; ++} ++ ++/* ++ mspace versions of routines are near-clones of the global ++ versions. This is not so nice but better than the alternatives. ++*/ ++ ++ ++void* mspace_malloc(mspace msp, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (!PREACTION(ms)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = ms->smallmap >> idx; ++ ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(ms, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(ms, b, p, idx); ++ set_inuse_and_pinuse(ms, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb > ms->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(ms, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(ms, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(ms, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(ms, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } ++ ++ if (nb <= ms->dvsize) { ++ size_t rsize = ms->dvsize - nb; ++ mchunkptr p = ms->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); ++ ms->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = ms->dvsize; ++ ms->dvsize = 0; ++ ms->dv = 0; ++ set_inuse_and_pinuse(ms, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ else if (nb < ms->topsize) { /* Split top */ ++ size_t rsize = ms->topsize -= nb; ++ mchunkptr p = ms->top; ++ mchunkptr r = ms->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(ms, ms->top); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ ++ mem = sys_alloc(ms, nb); ++ ++ postaction: ++ POSTACTION(ms); ++ return mem; ++ } ++ ++ return 0; ++} ++ ++void mspace_free(mspace msp, void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate fm = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } ++ ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++} ++ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = internal_malloc(ms, req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} ++ ++void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return mspace_malloc(msp, bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ mspace_free(msp, oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if FOOTERS ++ mchunkptr p = mem2chunk(oldmem); ++ mstate ms = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate ms = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_realloc(ms, oldmem, bytes); ++ } ++} ++ ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_memalign(ms, alignment, bytes); ++} ++ ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, &sz, 3, chunks); ++} ++ ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, sizes, 0, chunks); ++} ++ ++int mspace_trim(mspace msp, size_t pad) { ++ int result = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ if (!PREACTION(ms)) { ++ result = sys_trim(ms, pad); ++ POSTACTION(ms); ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return result; ++} ++ ++void mspace_malloc_stats(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ internal_malloc_stats(ms); ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++} ++ ++size_t mspace_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} ++ ++ ++size_t mspace_max_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->max_footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} ++ ++ ++#if !NO_MALLINFO ++struct mallinfo mspace_mallinfo(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return internal_mallinfo(ms); ++} ++#endif /* NO_MALLINFO */ ++ ++int mspace_mallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} ++ ++#endif /* MSPACES */ ++ ++/* -------------------- Alternative MORECORE functions ------------------- */ ++ ++/* ++ Guidelines for creating a custom version of MORECORE: ++ ++ * For best performance, MORECORE should allocate in multiples of pagesize. ++ * MORECORE may allocate more memory than requested. (Or even less, ++ but this will usually result in a malloc failure.) ++ * MORECORE must not allocate memory when given argument zero, but ++ instead return one past the end address of memory from previous ++ nonzero call. ++ * For best performance, consecutive calls to MORECORE with positive ++ arguments should return increasing addresses, indicating that ++ space has been contiguously extended. ++ * Even though consecutive calls to MORECORE need not return contiguous ++ addresses, it must be OK for malloc'ed chunks to span multiple ++ regions in those cases where they do happen to be contiguous. ++ * MORECORE need not handle negative arguments -- it may instead ++ just return MFAIL when given negative arguments. ++ Negative arguments are always multiples of pagesize. MORECORE ++ must not misinterpret negative args as large positive unsigned ++ args. You can suppress all such calls from even occurring by defining ++ MORECORE_CANNOT_TRIM, ++ ++ As an example alternative MORECORE, here is a custom allocator ++ kindly contributed for pre-OSX macOS. It uses virtually but not ++ necessarily physically contiguous non-paged memory (locked in, ++ present and won't get swapped out). You can use it by uncommenting ++ this section, adding some #includes, and setting up the appropriate ++ defines above: ++ ++ #define MORECORE osMoreCore ++ ++ There is also a shutdown routine that should somehow be called for ++ cleanup upon program exit. ++ ++ #define MAX_POOL_ENTRIES 100 ++ #define MINIMUM_MORECORE_SIZE (64 * 1024U) ++ static int next_os_pool; ++ void *our_os_pools[MAX_POOL_ENTRIES]; ++ ++ void *osMoreCore(int size) ++ { ++ void *ptr = 0; ++ static void *sbrk_top = 0; ++ ++ if (size > 0) ++ { ++ if (size < MINIMUM_MORECORE_SIZE) ++ size = MINIMUM_MORECORE_SIZE; ++ if (CurrentExecutionLevel() == kTaskLevel) ++ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); ++ if (ptr == 0) ++ { ++ return (void *) MFAIL; ++ } ++ // save ptrs so they can be freed during cleanup ++ our_os_pools[next_os_pool] = ptr; ++ next_os_pool++; ++ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); ++ sbrk_top = (char *) ptr + size; ++ return ptr; ++ } ++ else if (size < 0) ++ { ++ // we don't currently support shrink behavior ++ return (void *) MFAIL; ++ } ++ else ++ { ++ return sbrk_top; ++ } ++ } ++ ++ // cleanup any allocated memory pools ++ // called as last thing before shutting down driver ++ ++ void osCleanupMem(void) ++ { ++ void **ptr; ++ ++ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) ++ if (*ptr) ++ { ++ PoolDeallocate(*ptr); ++ *ptr = 0; ++ } ++ } ++ ++*/ ++ ++ ++/* ----------------------------------------------------------------------- ++History: ++ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) ++ * Add max_footprint functions ++ * Ensure all appropriate literals are size_t ++ * Fix conditional compilation problem for some #define settings ++ * Avoid concatenating segments with the one provided ++ in create_mspace_with_base ++ * Rename some variables to avoid compiler shadowing warnings ++ * Use explicit lock initialization. ++ * Better handling of sbrk interference. ++ * Simplify and fix segment insertion, trimming and mspace_destroy ++ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x ++ * Thanks especially to Dennis Flanagan for help on these. ++ ++ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) ++ * Fix memalign brace error. ++ ++ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) ++ * Fix improper #endif nesting in C++ ++ * Add explicit casts needed for C++ ++ ++ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) ++ * Use trees for large bins ++ * Support mspaces ++ * Use segments to unify sbrk-based and mmap-based system allocation, ++ removing need for emulation on most platforms without sbrk. ++ * Default safety checks ++ * Optional footer checks. Thanks to William Robertson for the idea. ++ * Internal code refactoring ++ * Incorporate suggestions and platform-specific changes. ++ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, ++ Aaron Bachmann, Emery Berger, and others. ++ * Speed up non-fastbin processing enough to remove fastbins. ++ * Remove useless cfree() to avoid conflicts with other apps. ++ * Remove internal memcpy, memset. Compilers handle builtins better. ++ * Remove some options that no one ever used and rename others. ++ ++ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) ++ * Fix malloc_state bitmap array misdeclaration ++ ++ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) ++ * Allow tuning of FIRST_SORTED_BIN_SIZE ++ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. ++ * Better detection and support for non-contiguousness of MORECORE. ++ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger ++ * Bypass most of malloc if no frees. Thanks To Emery Berger. ++ * Fix freeing of old top non-contiguous chunk im sysmalloc. ++ * Raised default trim and map thresholds to 256K. ++ * Fix mmap-related #defines. Thanks to Lubos Lunak. ++ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. ++ * Branch-free bin calculation ++ * Default trim and mmap thresholds now 256K. ++ ++ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) ++ * Introduce independent_comalloc and independent_calloc. ++ Thanks to Michael Pachos for motivation and help. ++ * Make optional .h file available ++ * Allow > 2GB requests on 32bit systems. ++ * new WIN32 sbrk, mmap, munmap, lock code from . ++ Thanks also to Andreas Mueller , ++ and Anonymous. ++ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for ++ helping test this.) ++ * memalign: check alignment arg ++ * realloc: don't try to shift chunks backwards, since this ++ leads to more fragmentation in some programs and doesn't ++ seem to help in any others. ++ * Collect all cases in malloc requiring system memory into sysmalloc ++ * Use mmap as backup to sbrk ++ * Place all internal state in malloc_state ++ * Introduce fastbins (although similar to 2.5.1) ++ * Many minor tunings and cosmetic improvements ++ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK ++ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS ++ Thanks to Tony E. Bennett and others. ++ * Include errno.h to support default failure action. ++ ++ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) ++ * return null for negative arguments ++ * Added Several WIN32 cleanups from Martin C. Fong ++ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' ++ (e.g. WIN32 platforms) ++ * Cleanup header file inclusion for WIN32 platforms ++ * Cleanup code to avoid Microsoft Visual C++ compiler complaints ++ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing ++ memory allocation routines ++ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) ++ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to ++ usage of 'assert' in non-WIN32 code ++ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to ++ avoid infinite loop ++ * Always call 'fREe()' rather than 'free()' ++ ++ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) ++ * Fixed ordering problem with boundary-stamping ++ ++ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) ++ * Added pvalloc, as recommended by H.J. Liu ++ * Added 64bit pointer support mainly from Wolfram Gloger ++ * Added anonymously donated WIN32 sbrk emulation ++ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen ++ * malloc_extend_top: fix mask error that caused wastage after ++ foreign sbrks ++ * Add linux mremap support code from HJ Liu ++ ++ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) ++ * Integrated most documentation with the code. ++ * Add support for mmap, with help from ++ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Use last_remainder in more cases. ++ * Pack bins using idea from colin@nyx10.cs.du.edu ++ * Use ordered bins instead of best-fit threshold ++ * Eliminate block-local decls to simplify tracing and debugging. ++ * Support another case of realloc via move into top ++ * Fix error occurring when initial sbrk_base not word-aligned. ++ * Rely on page size for units instead of SBRK_UNIT to ++ avoid surprises about sbrk alignment conventions. ++ * Add mallinfo, mallopt. Thanks to Raymond Nijssen ++ (raymond@es.ele.tue.nl) for the suggestion. ++ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. ++ * More precautions for cases where other routines call sbrk, ++ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Added macros etc., allowing use in linux libc from ++ H.J. Lu (hjl@gnu.ai.mit.edu) ++ * Inverted this history list ++ ++ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) ++ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. ++ * Removed all preallocation code since under current scheme ++ the work required to undo bad preallocations exceeds ++ the work saved in good cases for most test programs. ++ * No longer use return list or unconsolidated bins since ++ no scheme using them consistently outperforms those that don't ++ given above changes. ++ * Use best fit for very large chunks to prevent some worst-cases. ++ * Added some support for debugging ++ ++ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) ++ * Removed footers when chunks are in use. Thanks to ++ Paul Wilson (wilson@cs.texas.edu) for the suggestion. ++ ++ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) ++ * Added malloc_trim, with help from Wolfram Gloger ++ (wmglo@Dent.MED.Uni-Muenchen.DE). ++ ++ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) ++ ++ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) ++ * realloc: try to expand in both directions ++ * malloc: swap order of clean-bin strategy; ++ * realloc: only conditionally expand backwards ++ * Try not to scavenge used bins ++ * Use bin counts as a guide to preallocation ++ * Occasionally bin return list chunks in first scan ++ * Add a few optimizations from colin@nyx10.cs.du.edu ++ ++ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) ++ * faster bin computation & slightly different binning ++ * merged all consolidations to one part of malloc proper ++ (eliminating old malloc_find_space & malloc_clean_bin) ++ * Scan 2 returns chunks (not just 1) ++ * Propagate failure in realloc if malloc returns 0 ++ * Add stuff to allow compilation on non-ANSI compilers ++ from kpv@research.att.com ++ ++ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) ++ * removed potential for odd address access in prev_chunk ++ * removed dependency on getpagesize.h ++ * misc cosmetics and a bit more internal documentation ++ * anticosmetics: mangled names in macros to evade debugger strangeness ++ * tested on sparc, hp-700, dec-mips, rs6000 ++ with gcc & native cc (hp, dec only) allowing ++ Detlefs & Zorn comparison study (in SIGPLAN Notices.) ++ ++ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) ++ * Based loosely on libg++-1.2X malloc. (It retains some of the overall ++ structure of old version, but most details differ.) ++ ++*/ +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-04-26 08:17:42.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ ++ ++#include ++ ++ ++#endif ++#ifdef __i386__ ++ ++#include ++ ++ ++#endif ++#ifdef __arm__ ++ ++#include ++ ++ ++#endif ++#ifdef __x86_64__ ++ ++#include ++ ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,492 @@ ++#ifdef __arm64__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ 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. ++ ++ ----------------------------------------------------------------------- */ ++ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. ++ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. ++ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. ++ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef AARCH64 ++#define AARCH64 ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; ++ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif ++ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif ++ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif ++ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif ++ ++ ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); ++ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); ++ ++/* ---- Definitions for closures ----------------------------------------- */ ++ ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif ++ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); ++ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); ++ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; ++ ++} ffi_raw_closure; ++ ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++#endif /* FFI_CLOSURES */ ++ ++/* ---- Public interface definition -------------------------------------- */ ++ ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); ++ ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ ++ ++#endif ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,492 @@ ++#ifdef __arm__ ++ ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + -+/* The maximum possible size_t value has all bits set */ -+#define MAX_SIZE_T (~(size_t)0) ++ 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. + -+#ifndef ONLY_MSPACES -+#define ONLY_MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#ifndef MSPACES -+#if ONLY_MSPACES -+#define MSPACES 1 -+#else /* ONLY_MSPACES */ -+#define MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#endif /* MSPACES */ -+#ifndef MALLOC_ALIGNMENT -+#define MALLOC_ALIGNMENT ((size_t)8U) -+#endif /* MALLOC_ALIGNMENT */ -+#ifndef FOOTERS -+#define FOOTERS 0 -+#endif /* FOOTERS */ -+#ifndef ABORT -+#define ABORT abort() -+#endif /* ABORT */ -+#ifndef ABORT_ON_ASSERT_FAILURE -+#define ABORT_ON_ASSERT_FAILURE 1 -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#ifndef PROCEED_ON_ERROR -+#define PROCEED_ON_ERROR 0 -+#endif /* PROCEED_ON_ERROR */ -+#ifndef USE_LOCKS -+#define USE_LOCKS 0 -+#endif /* USE_LOCKS */ -+#ifndef INSECURE -+#define INSECURE 0 -+#endif /* INSECURE */ -+#ifndef HAVE_MMAP -+#define HAVE_MMAP 1 -+#endif /* HAVE_MMAP */ -+#ifndef MMAP_CLEARS -+#define MMAP_CLEARS 1 -+#endif /* MMAP_CLEARS */ -+#ifndef HAVE_MREMAP -+#ifdef linux -+#define HAVE_MREMAP 1 -+#else /* linux */ -+#define HAVE_MREMAP 0 -+#endif /* linux */ -+#endif /* HAVE_MREMAP */ -+#ifndef MALLOC_FAILURE_ACTION -+#define MALLOC_FAILURE_ACTION errno = ENOMEM; -+#endif /* MALLOC_FAILURE_ACTION */ -+#ifndef HAVE_MORECORE -+#if ONLY_MSPACES -+#define HAVE_MORECORE 0 -+#else /* ONLY_MSPACES */ -+#define HAVE_MORECORE 1 -+#endif /* ONLY_MSPACES */ -+#endif /* HAVE_MORECORE */ -+#if !HAVE_MORECORE -+#define MORECORE_CONTIGUOUS 0 -+#else /* !HAVE_MORECORE */ -+#ifndef MORECORE -+#define MORECORE sbrk -+#endif /* MORECORE */ -+#ifndef MORECORE_CONTIGUOUS -+#define MORECORE_CONTIGUOUS 1 -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* HAVE_MORECORE */ -+#ifndef DEFAULT_GRANULARITY -+#if MORECORE_CONTIGUOUS -+#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -+#else /* MORECORE_CONTIGUOUS */ -+#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* DEFAULT_GRANULARITY */ -+#ifndef DEFAULT_TRIM_THRESHOLD -+#ifndef MORECORE_CANNOT_TRIM -+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -+#else /* MORECORE_CANNOT_TRIM */ -+#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -+#endif /* MORECORE_CANNOT_TRIM */ -+#endif /* DEFAULT_TRIM_THRESHOLD */ -+#ifndef DEFAULT_MMAP_THRESHOLD -+#if HAVE_MMAP -+#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -+#else /* HAVE_MMAP */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+#endif /* HAVE_MMAP */ -+#endif /* DEFAULT_MMAP_THRESHOLD */ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 0 -+#endif /* USE_BUILTIN_FFS */ -+#ifndef USE_DEV_RANDOM -+#define USE_DEV_RANDOM 0 -+#endif /* USE_DEV_RANDOM */ -+#ifndef NO_MALLINFO -+#define NO_MALLINFO 0 -+#endif /* NO_MALLINFO */ -+#ifndef MALLINFO_FIELD_TYPE -+#define MALLINFO_FIELD_TYPE size_t -+#endif /* MALLINFO_FIELD_TYPE */ ++ ----------------------------------------------------------------------- */ + -+/* -+ mallopt tuning options. SVID/XPG defines four standard parameter -+ numbers for mallopt, normally defined in malloc.h. None of these -+ are used in this malloc, so setting them has no effect. But this -+ malloc does support the following options. -+*/ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+#define M_TRIM_THRESHOLD (-1) -+#define M_GRANULARITY (-2) -+#define M_MMAP_THRESHOLD (-3) ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+/* ------------------------ Mallinfo declarations ------------------------ */ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+#if !NO_MALLINFO -+/* -+ This version of malloc supports the standard SVID/XPG mallinfo -+ routine that returns a struct containing usage properties and -+ statistics. It should work on any system that has a -+ /usr/include/malloc.h defining struct mallinfo. The main -+ declaration needed is the mallinfo struct that is returned (by-copy) -+ by mallinfo(). The malloinfo struct contains a bunch of fields that -+ are not even meaningful in this version of malloc. These fields are -+ are instead filled by mallinfo() with other numbers that might be of -+ interest. ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. ++ ++ More details on the raw and cloure API can be found in: ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Specify which architecture libffi is configured for. */ ++#ifndef ARM ++#define ARM ++#endif ++ ++/* ---- System configuration information --------------------------------- */ ++ ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif ++ ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif + -+ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a -+ /usr/include/malloc.h file that includes a declaration of struct -+ mallinfo. If so, it is included; else a compliant version is -+ declared below. These must be precisely the same for mallinfo() to -+ work. The original SVID version of this struct, defined on most -+ systems with mallinfo, declares all fields as ints. But some others -+ define as unsigned long. If your system defines the fields using a -+ type of different width than listed here, you MUST #include your -+ system version and #define HAVE_USR_INCLUDE_MALLOC_H. -+*/ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif + -+/* #define HAVE_USR_INCLUDE_MALLOC_H */ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+#ifdef HAVE_USR_INCLUDE_MALLOC_H -+#include "/usr/include/malloc.h" -+#else /* HAVE_USR_INCLUDE_MALLOC_H */ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ -+#define _STRUCT_MALLINFO ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif + -+struct mallinfo { -+ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ -+ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ -+ MALLINFO_FIELD_TYPE smblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ -+ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ -+ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ -+ MALLINFO_FIELD_TYPE fordblks; /* total free space */ -+ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -+}; ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -+#endif /* NO_MALLINFO */ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ ++typedef unsigned FFI_TYPE; + -+#if !ONLY_MSPACES ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+/* ------------------- Declarations of public routines ------------------- */ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+#ifndef USE_DL_PREFIX -+#define dlcalloc calloc -+#define dlfree free -+#define dlmalloc malloc -+#define dlmemalign memalign -+#define dlrealloc realloc -+#define dlvalloc valloc -+#define dlpvalloc pvalloc -+#define dlmallinfo mallinfo -+#define dlmallopt mallopt -+#define dlmalloc_trim malloc_trim -+#define dlmalloc_stats malloc_stats -+#define dlmalloc_usable_size malloc_usable_size -+#define dlmalloc_footprint malloc_footprint -+#define dlmalloc_max_footprint malloc_max_footprint -+#define dlindependent_calloc independent_calloc -+#define dlindependent_comalloc independent_comalloc -+#endif /* USE_DL_PREFIX */ ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + ++/* ---- Definitions for the raw API -------------------------------------- */ + -+/* -+ malloc(size_t n) -+ Returns a pointer to a newly allocated chunk of at least n bytes, or -+ null if no space is available, in which case errno is set to ENOMEM -+ on ANSI C systems. ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ If n is zero, malloc returns a minimum-sized chunk. (The minimum -+ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit -+ systems.) Note that size_t is an unsigned type, so calls with -+ arguments that would be negative if signed are interpreted as -+ requests for huge amounts of space, which will often fail. The -+ maximum supported value of n differs across systems, but is in all -+ cases less than the maximum representable value of a size_t. -+*/ -+void* dlmalloc(size_t); ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+/* -+ free(void* p) -+ Releases the chunk of memory pointed to by p, that had been previously -+ allocated using malloc or a related routine such as realloc. -+ It has no effect if p is null. If p was not malloced or already -+ freed, free(p) will by default cause the current program to abort. -+*/ -+void dlfree(void*); ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+/* -+ calloc(size_t n_elements, size_t element_size); -+ Returns a pointer to n_elements * element_size bytes, with all locations -+ set to zero. -+*/ -+void* dlcalloc(size_t, size_t); ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+/* -+ realloc(void* p, size_t n) -+ Returns a pointer to a chunk of size n that contains the same data -+ as does chunk p up to the minimum of (n, p's size) bytes, or null -+ if no space is available. + -+ The returned pointer may or may not be the same as p. The algorithm -+ prefers extending p in most cases when possible, otherwise it -+ employs the equivalent of a malloc-copy-free sequence. ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ If p is null, realloc is equivalent to malloc. ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ If space is not available, realloc returns null, errno is set (if on -+ ANSI) and p is NOT freed. ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+ if n is for fewer bytes than already held by p, the newly unused -+ space is lopped off and freed if possible. realloc with a size -+ argument of zero (re)allocates a minimum-sized chunk. ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+ The old unix realloc convention of allowing the last-free'd chunk -+ to be used as an argument to realloc is not supported. -+*/ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+void* dlrealloc(void*, size_t); ++/* ---- Definitions for closures ----------------------------------------- */ + -+/* -+ memalign(size_t alignment, size_t n); -+ Returns a pointer to a newly allocated chunk of n bytes, aligned -+ in accord with the alignment argument. ++#if FFI_CLOSURES ++ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+ The alignment argument should be a power of two. If the argument is -+ not a power of two, the nearest greater power is used. -+ 8-byte alignment is guaranteed by normal malloc calls, so don't -+ bother calling memalign with an argument of 8 or less. ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ Overreliance on memalign is a sure way to fragment space. -+*/ -+void* dlmemalign(size_t, size_t); ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+/* -+ valloc(size_t n); -+ Equivalent to memalign(pagesize, n), where pagesize is the page -+ size of the system. If the pagesize is unknown, 4096 is used. -+*/ -+void* dlvalloc(size_t); ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+/* -+ mallopt(int parameter_number, int parameter_value) -+ Sets tunable parameters The format is to provide a -+ (parameter-number, parameter-value) pair. mallopt then sets the -+ corresponding parameter to the argument value if it can (i.e., so -+ long as the value is meaningful), and returns 1 if successful else -+ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, -+ normally defined in malloc.h. None of these are use in this malloc, -+ so setting them has no effect. But this malloc also supports other -+ options in mallopt. See below for details. Briefly, supported -+ parameters are as follows (listed defaults are for "typical" -+ configurations). ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+ Symbol param # default allowed param values -+ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) -+ M_GRANULARITY -2 page size any power of 2 >= page size -+ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -+*/ -+int dlmallopt(int, int); ++#if !FFI_NATIVE_RAW_API + -+/* -+ malloc_footprint(); -+ Returns the number of bytes obtained from the system. The total -+ number of bytes allocated by malloc, realloc etc., is less than this -+ value. Unlike mallinfo, this function returns only a precomputed -+ result, so can be called frequently to monitor memory consumption. -+ Even if locks are otherwise defined, this function does not use them, -+ so results might not be up to date. -+*/ -+size_t dlmalloc_footprint(void); ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+/* -+ malloc_max_footprint(); -+ Returns the maximum number of bytes obtained from the system. This -+ value will be greater than current footprint if deallocated space -+ has been reclaimed by the system. The peak number of bytes allocated -+ by malloc, realloc etc., is less than this value. Unlike mallinfo, -+ this function returns only a precomputed result, so can be called -+ frequently to monitor memory consumption. Even if locks are -+ otherwise defined, this function does not use them, so results might -+ not be up to date. -+*/ -+size_t dlmalloc_max_footprint(void); ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+#if !NO_MALLINFO -+/* -+ mallinfo() -+ Returns (by copy) a struct containing various summary statistics: ++#endif + -+ arena: current total non-mmapped bytes allocated from system -+ ordblks: the number of free chunks -+ smblks: always zero. -+ hblks: current number of mmapped regions -+ hblkhd: total bytes held in mmapped regions -+ usmblks: the maximum total allocated space. This will be greater -+ than current total if trimming has occurred. -+ fsmblks: always zero -+ uordblks: current total allocated space (normal or mmapped) -+ fordblks: total free space -+ keepcost: the maximum number of bytes that could ideally be released -+ back to system via malloc_trim. ("ideally" means that -+ it ignores page restrictions etc.) ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ Because these fields are ints, but internal bookkeeping may -+ be kept as longs, the reported values may wrap around zero and -+ thus be inaccurate. -+*/ -+struct mallinfo dlmallinfo(void); -+#endif /* NO_MALLINFO */ ++} ffi_raw_closure; + -+/* -+ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+ independent_calloc is similar to calloc, but instead of returning a -+ single cleared space, it returns an array of pointers to n_elements -+ independent elements that can hold contents of size elem_size, each -+ of which starts out cleared, and can be independently freed, -+ realloc'ed etc. The elements are guaranteed to be adjacently -+ allocated (this is not guaranteed to occur with multiple callocs or -+ mallocs), which may also improve cache locality in some -+ applications. ++ ffi_cif *cif; + -+ The "chunks" argument is optional (i.e., may be null, which is -+ probably the most typical usage). If it is null, the returned array -+ is itself dynamically allocated and should also be freed when it is -+ no longer needed. Otherwise, the chunks array must be of at least -+ n_elements in length. It is filled in with the pointers to the -+ chunks. ++#if !FFI_NATIVE_RAW_API + -+ In either case, independent_calloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and "chunks" -+ is null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use regular calloc and assign pointers into this -+ space to represent elements. (In this case though, you cannot -+ independently free elements.) ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ independent_calloc simplifies and speeds up implementations of many -+ kinds of pools. It may also be useful when constructing large data -+ structures that initially have a fixed number of fixed-sized nodes, -+ but the number is not known at compile time, and some of the nodes -+ may later need to be freed. For example: ++#endif + -+ struct Node { int item; struct Node* next; }; ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + -+ struct Node* build_list() { -+ struct Node** pool; -+ int n = read_number_of_nodes_needed(); -+ if (n <= 0) return 0; -+ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); -+ if (pool == 0) die(); -+ // organize into a linked list... -+ struct Node* first = pool[0]; -+ for (i = 0; i < n-1; ++i) -+ pool[i]->next = pool[i+1]; -+ free(pool); // Can now free the array (or not, if it is needed later) -+ return first; -+ } -+*/ -+void** dlindependent_calloc(size_t, size_t, void**); ++} ffi_java_raw_closure; + -+/* -+ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + -+ independent_comalloc allocates, all at once, a set of n_elements -+ chunks with sizes indicated in the "sizes" array. It returns -+ an array of pointers to these elements, each of which can be -+ independently freed, realloc'ed etc. The elements are guaranteed to -+ be adjacently allocated (this is not guaranteed to occur with -+ multiple callocs or mallocs), which may also improve cache locality -+ in some applications. ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ The "chunks" argument is optional (i.e., may be null). If it is null -+ the returned array is itself dynamically allocated and should also -+ be freed when it is no longer needed. Otherwise, the chunks array -+ must be of at least n_elements in length. It is filled in with the -+ pointers to the chunks. ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+ In either case, independent_comalloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and chunks is -+ null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use a single regular malloc, and assign pointers at -+ particular offsets in the aggregate space. (In this case though, you -+ cannot independently free elements.) ++#endif /* FFI_CLOSURES */ + -+ independent_comallac differs from independent_calloc in that each -+ element may have a different size, and also that it does not -+ automatically clear elements. ++/* ---- Public interface definition -------------------------------------- */ + -+ independent_comalloc can be used to speed up allocation in cases -+ where several structs or objects must always be allocated at the -+ same time. For example: ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ struct Head { ... } -+ struct Foot { ... } ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ void send_message(char* msg) { -+ int msglen = strlen(msg); -+ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; -+ void* chunks[3]; -+ if (independent_comalloc(3, sizes, chunks) == 0) -+ die(); -+ struct Head* head = (struct Head*)(chunks[0]); -+ char* body = (char*)(chunks[1]); -+ struct Foot* foot = (struct Foot*)(chunks[2]); -+ // ... -+ } ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+ In general though, independent_comalloc is worth using only for -+ larger values of n_elements. For small values, you probably won't -+ detect enough difference from series of malloc calls to bother. ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+ Overuse of independent_comalloc can increase overall memory usage, -+ since it cannot reuse existing noncontiguous small chunks that -+ might be available for some of the elements. -+*/ -+void** dlindependent_comalloc(size_t, size_t*, void**); ++/* ---- Definitions shared with assembly code ---------------------------- */ + ++#endif + -+/* -+ pvalloc(size_t n); -+ Equivalent to valloc(minimum-page-that-holds(n)), that is, -+ round up n to nearest pagesize. -+ */ -+void* dlpvalloc(size_t); ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+/* -+ malloc_trim(size_t pad); ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ If possible, gives memory back to the system (via negative arguments -+ to sbrk) if there is unused memory at the `high' end of the malloc -+ pool or in unused MMAP segments. You can call this after freeing -+ large blocks of memory to potentially reduce the system-level memory -+ requirements of a program. However, it cannot guarantee to reduce -+ memory. Under some allocation patterns, some large free blocks of -+ memory will be locked between two used chunks, so they cannot be -+ given back to the system. ++#ifdef __cplusplus ++} ++#endif + -+ The `pad' argument to malloc_trim represents the amount of free -+ trailing space to leave untrimmed. If this argument is zero, only -+ the minimum amount of memory to maintain internal data structures -+ will be left. Non-zero arguments can be supplied to maintain enough -+ trailing space to service future expected allocations without having -+ to re-obtain memory from the system. ++#endif + -+ Malloc_trim returns 1 if it actually released any memory, else 0. -+*/ -+int dlmalloc_trim(size_t); + -+/* -+ malloc_usable_size(void* p); ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-04-26 08:17:42.000000000 +0800 +@@ -0,0 +1,132 @@ ++/* ----------------------------------------------------------------------- ++ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green ++ Copyright (C) 2007 Free Software Foundation, Inc ++ Copyright (c) 1996 Red Hat, Inc. ++ ++ Common internal definitions and macros. Only necessary for building ++ libffi. ++ ----------------------------------------------------------------------- */ + -+ Returns the number of bytes you can actually use in -+ an allocated chunk, which may be more than you requested (although -+ often not) due to alignment and minimum size constraints. -+ You can use this many bytes without worrying about -+ overwriting other allocated objects. This is not a particularly great -+ programming practice. malloc_usable_size can be more useful in -+ debugging and assertions, for example: ++#ifndef FFI_COMMON_H ++#define FFI_COMMON_H + -+ p = malloc(n); -+ assert(malloc_usable_size(p) >= 256); -+*/ -+size_t dlmalloc_usable_size(void*); ++#ifdef __cplusplus ++extern "C" { ++#endif + -+/* -+ malloc_stats(); -+ Prints on stderr the amount of space obtained from the system (both -+ via sbrk and mmap), the maximum amount (which may be more than -+ current if malloc_trim and/or munmap got called), and the current -+ number of bytes allocated via malloc (or realloc, etc) but not yet -+ freed. Note that this is the number of bytes allocated, not the -+ number requested. It will be larger than the number requested -+ because of alignment and bookkeeping overhead. Because it includes -+ alignment wastage as being in use, this figure may be greater than -+ zero even when no user-level chunks are allocated. ++#include + -+ The reported current and maximum system memory can be inaccurate if -+ a program makes other calls to system memory allocation functions -+ (normally sbrk) outside of malloc. ++/* Do not move this. Some versions of AIX are very picky about where ++ this is positioned. */ ++#ifdef __GNUC__ ++# if HAVE_ALLOCA_H ++# include ++# else ++ /* mingw64 defines this already in malloc.h. */ ++# ifndef alloca ++# define alloca __builtin_alloca ++# endif ++# endif ++# define MAYBE_UNUSED __attribute__((__unused__)) ++#else ++# define MAYBE_UNUSED ++# if HAVE_ALLOCA_H ++# include ++# else ++# ifdef _AIX ++# pragma alloca ++# else ++# ifndef alloca /* predefined by HP cc +Olibcalls */ ++# ifdef _MSC_VER ++# define alloca _alloca ++# else ++char *alloca (); ++# endif ++# endif ++# endif ++# endif ++#endif + -+ malloc_stats prints only the most commonly interesting statistics. -+ More information can be obtained by calling mallinfo. -+*/ -+void dlmalloc_stats(void); ++/* Check for the existence of memcpy. */ ++#if STDC_HEADERS ++# include ++#else ++# ifndef HAVE_MEMCPY ++# define memcpy(d, s, n) bcopy ((s), (d), (n)) ++# endif ++#endif + -+#endif /* ONLY_MSPACES */ ++#if defined(FFI_DEBUG) ++#include ++#endif + -+#if MSPACES ++#ifdef FFI_DEBUG ++void ffi_assert(char *expr, char *file, int line); ++void ffi_stop_here(void); ++void ffi_type_test(ffi_type *a, char *file, int line); + -+/* -+ mspace is an opaque type representing an independent -+ region of space that supports mspace_malloc, etc. -+*/ -+typedef void* mspace; ++#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) ++#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) ++#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) ++#else ++#define FFI_ASSERT(x) ++#define FFI_ASSERT_AT(x, f, l) ++#define FFI_ASSERT_VALID_TYPE(x) ++#endif + -+/* -+ create_mspace creates and returns a new independent space with the -+ given initial capacity, or, if 0, the default granularity size. It -+ returns null if there is no system memory available to create the -+ space. If argument locked is non-zero, the space uses a separate -+ lock to control access. The capacity of the space will grow -+ dynamically as needed to service mspace_malloc requests. You can -+ control the sizes of incremental increases of this space by -+ compiling with a different DEFAULT_GRANULARITY or dynamically -+ setting with mallopt(M_GRANULARITY, value). -+*/ -+mspace create_mspace(size_t capacity, int locked); ++#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) ++#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) + -+/* -+ destroy_mspace destroys the given space, and attempts to return all -+ of its memory back to the system, returning the total number of -+ bytes freed. After destruction, the results of access to all memory -+ used by the space become undefined. -+*/ -+size_t destroy_mspace(mspace msp); ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif); ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, unsigned int ntotalargs); + -+/* -+ create_mspace_with_base uses the memory supplied as the initial base -+ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this -+ space is used for bookkeeping, so the capacity must be at least this -+ large. (Otherwise 0 is returned.) When this initial space is -+ exhausted, additional memory will be obtained from the system. -+ Destroying this space will deallocate all additionally allocated -+ space (if possible) but not the initial base. -+*/ -+mspace create_mspace_with_base(void* base, size_t capacity, int locked); ++/* Extended cif, used in callback from assembly routine */ ++typedef struct ++{ ++ ffi_cif *cif; ++ void *rvalue; ++ void **avalue; ++} extended_cif; + -+/* -+ mspace_malloc behaves as malloc, but operates within -+ the given space. -+*/ -+void* mspace_malloc(mspace msp, size_t bytes); ++/* Terse sized type definitions. */ ++#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) ++typedef unsigned char UINT8; ++typedef signed char SINT8; ++typedef unsigned short UINT16; ++typedef signed short SINT16; ++typedef unsigned int UINT32; ++typedef signed int SINT32; ++# ifdef _MSC_VER ++typedef unsigned __int64 UINT64; ++typedef signed __int64 SINT64; ++# else ++# include ++typedef uint64_t UINT64; ++typedef int64_t SINT64; ++# endif ++#else ++typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); ++typedef signed int SINT8 __attribute__((__mode__(__QI__))); ++typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); ++typedef signed int SINT16 __attribute__((__mode__(__HI__))); ++typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); ++typedef signed int SINT32 __attribute__((__mode__(__SI__))); ++typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); ++typedef signed int SINT64 __attribute__((__mode__(__DI__))); ++#endif ++ ++typedef float FLOAT32; ++ ++#ifndef __GNUC__ ++#define __builtin_expect(x, expected_value) (x) ++#endif ++#define LIKELY(x) __builtin_expect(!!(x),1) ++#define UNLIKELY(x) __builtin_expect((x)!=0,0) + -+/* -+ mspace_free behaves as free, but operates within -+ the given space. ++#ifdef __cplusplus ++} ++#endif + -+ If compiled with FOOTERS==1, mspace_free is not actually needed. -+ free may be called instead of mspace_free because freed chunks from -+ any space are handled by their originating spaces. -+*/ -+void mspace_free(mspace msp, void* mem); ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,492 @@ ++#ifdef __i386__ + -+/* -+ mspace_realloc behaves as realloc, but operates within -+ the given space. ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ If compiled with FOOTERS==1, mspace_realloc is not actually -+ needed. realloc may be called instead of mspace_realloc because -+ realloced chunks from any space are handled by their originating -+ spaces. -+*/ -+void* mspace_realloc(mspace msp, void* mem, size_t newsize); ++ 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: + -+/* -+ mspace_calloc behaves as calloc, but operates within -+ the given space. -+*/ -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + -+/* -+ mspace_memalign behaves as memalign, but operates within -+ the given space. -+*/ -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); ++ 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. + -+/* -+ mspace_independent_calloc behaves as independent_calloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]); ++ ----------------------------------------------------------------------- */ + -+/* -+ mspace_independent_comalloc behaves as independent_comalloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]); ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+/* -+ mspace_footprint() returns the number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_footprint(mspace msp); ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+/* -+ mspace_max_footprint() returns the peak number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_max_footprint(mspace msp); ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+#if !NO_MALLINFO -+/* -+ mspace_mallinfo behaves as mallinfo, but reports properties of -+ the given space. -+*/ -+struct mallinfo mspace_mallinfo(mspace msp); -+#endif /* NO_MALLINFO */ ++ More details on the raw and cloure API can be found in: + -+/* -+ mspace_malloc_stats behaves as malloc_stats, but reports -+ properties of the given space. -+*/ -+void mspace_malloc_stats(mspace msp); ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+/* -+ mspace_trim behaves as malloc_trim, but -+ operates within the given space. -+*/ -+int mspace_trim(mspace msp, size_t pad); ++ and + -+/* -+ An alias for mallopt. -+*/ -+int mspace_mallopt(int, int); ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+#endif /* MSPACES */ ++#ifndef LIBFFI_H ++#define LIBFFI_H + +#ifdef __cplusplus -+}; /* end of extern "C" */ -+#endif /* __cplusplus */ ++extern "C" { ++#endif + -+/* -+ ======================================================================== -+ To make a fully customizable malloc.h header file, cut everything -+ above this line, put into file malloc.h, edit to suit, and #include it -+ on the next line, as well as in programs that use this malloc. -+ ======================================================================== -+*/ ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_DARWIN ++#define X86_DARWIN ++#endif + -+/* #include "malloc.h" */ ++/* ---- System configuration information --------------------------------- */ + -+/*------------------------------ internal #includes ---------------------- */ ++#include + -+#ifdef _MSC_VER -+#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -+#endif /* _MSC_VER */ ++#ifndef LIBFFI_ASM + -+#include /* for printing in malloc_stats */ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif + -+#ifndef LACKS_ERRNO_H -+#include /* for MALLOC_FAILURE_ACTION */ -+#endif /* LACKS_ERRNO_H */ -+#if FOOTERS -+#include /* for magic initialization */ -+#endif /* FOOTERS */ -+#ifndef LACKS_STDLIB_H -+#include /* for abort() */ -+#endif /* LACKS_STDLIB_H */ -+#ifdef DEBUG -+#if ABORT_ON_ASSERT_FAILURE -+#define assert(x) if(!(x)) ABORT -+#else /* ABORT_ON_ASSERT_FAILURE */ -+#include -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#else /* DEBUG */ -+#define assert(x) -+#endif /* DEBUG */ -+#ifndef LACKS_STRING_H -+#include /* for memset etc */ -+#endif /* LACKS_STRING_H */ -+#if USE_BUILTIN_FFS -+#ifndef LACKS_STRINGS_H -+#include /* for ffs */ -+#endif /* LACKS_STRINGS_H */ -+#endif /* USE_BUILTIN_FFS */ -+#if HAVE_MMAP -+#ifndef LACKS_SYS_MMAN_H -+#include /* for mmap */ -+#endif /* LACKS_SYS_MMAN_H */ -+#ifndef LACKS_FCNTL_H -+#include -+#endif /* LACKS_FCNTL_H */ -+#endif /* HAVE_MMAP */ -+#if HAVE_MORECORE -+#ifndef LACKS_UNISTD_H -+#include /* for sbrk */ -+#else /* LACKS_UNISTD_H */ -+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -+extern void* sbrk(ptrdiff_t); -+#endif /* FreeBSD etc */ -+#endif /* LACKS_UNISTD_H */ -+#endif /* HAVE_MMAP */ ++#include ++#include + -+#ifndef WIN32 -+#ifndef malloc_getpagesize -+# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -+# ifndef _SC_PAGE_SIZE -+# define _SC_PAGE_SIZE _SC_PAGESIZE -+# endif ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ +# endif -+# ifdef _SC_PAGE_SIZE -+# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -+# else -+# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) -+ extern size_t getpagesize(); -+# define malloc_getpagesize getpagesize() -+# else -+# ifdef WIN32 /* use supplied emulation of getpagesize */ -+# define malloc_getpagesize getpagesize() -+# else -+# ifndef LACKS_SYS_PARAM_H -+# include -+# endif -+# ifdef EXEC_PAGESIZE -+# define malloc_getpagesize EXEC_PAGESIZE -+# else -+# ifdef NBPG -+# ifndef CLSIZE -+# define malloc_getpagesize NBPG -+# else -+# define malloc_getpagesize (NBPG * CLSIZE) -+# endif -+# else -+# ifdef NBPC -+# define malloc_getpagesize NBPC -+# else -+# ifdef PAGESIZE -+# define malloc_getpagesize PAGESIZE -+# else /* just guess */ -+# define malloc_getpagesize ((size_t)4096U) -+# endif -+# endif -+# endif -+# endif -+# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX +# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL +# endif ++# endif +#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; ++ ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" +#endif + -+/* ------------------- size_t and alignment properties -------------------- */ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif + -+/* The byte and bit size of a size_t */ -+#define SIZE_T_SIZE (sizeof(size_t)) -+#define SIZE_T_BITSIZE (sizeof(size_t) << 3) ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif + -+/* Some constants coerced to size_t */ -+/* Annoying but necessary to avoid errors on some platforms */ -+#define SIZE_T_ZERO ((size_t)0) -+#define SIZE_T_ONE ((size_t)1) -+#define SIZE_T_TWO ((size_t)2) -+#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -+#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -+#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -+#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif + -+/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -+#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif + -+/* True if address a has acceptable alignment */ -+#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+/* the number of bytes to offset an address to align it */ -+#define align_offset(A)\ -+ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ -+ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+/* -------------------------- MMAP preliminaries ------------------------- */ ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif + -+/* -+ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and -+ checks to fail so compiler optimizer can delete code rather than -+ using so many "#if"s. -+*/ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + ++typedef unsigned FFI_TYPE; + -+/* MORECORE and MMAP must return MFAIL on failure */ -+#define MFAIL ((void*)(MAX_SIZE_T)) -+#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+#if !HAVE_MMAP -+#define IS_MMAPPED_BIT (SIZE_T_ZERO) -+#define USE_MMAP_BIT (SIZE_T_ZERO) -+#define CALL_MMAP(s) MFAIL -+#define CALL_MUNMAP(a, s) (-1) -+#define DIRECT_MMAP(s) MFAIL ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+#else /* HAVE_MMAP */ -+#define IS_MMAPPED_BIT (SIZE_T_ONE) -+#define USE_MMAP_BIT (SIZE_T_ONE) ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#if !defined(WIN32) && !defined (__OS2__) -+#define CALL_MUNMAP(a, s) munmap((a), (s)) -+#define MMAP_PROT (PROT_READ|PROT_WRITE) -+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -+#define MAP_ANONYMOUS MAP_ANON -+#endif /* MAP_ANON */ -+#ifdef MAP_ANONYMOUS -+#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -+#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -+#else /* MAP_ANONYMOUS */ -+/* -+ Nearly all versions of mmap support MAP_ANONYMOUS, so the following -+ is unlikely to be needed, but is supplied just in case. -+*/ -+#define MMAP_FLAGS (MAP_PRIVATE) -+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -+#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ -+ (dev_zero_fd = open("/dev/zero", O_RDWR), \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -+#endif /* MAP_ANONYMOUS */ ++/* ---- Definitions for the raw API -------------------------------------- */ + -+#define DIRECT_MMAP(s) CALL_MMAP(s) ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+#elif defined(__OS2__) ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+/* OS/2 MMAP via DosAllocMem */ -+static void* os2mmap(size_t size) { -+ void* ptr; -+ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && -+ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) -+ return MFAIL; -+ return ptr; -+} ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+#define os2direct_mmap(n) os2mmap(n) ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+/* This function supports releasing coalesed segments */ -+static int os2munmap(void* ptr, size_t size) { -+ while (size) { -+ ULONG ulSize = size; -+ ULONG ulFlags = 0; -+ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) -+ return -1; -+ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || -+ ulSize > size) -+ return -1; -+ if (DosFreeMem(ptr) != 0) -+ return -1; -+ ptr = ( void * ) ( ( char * ) ptr + ulSize ); -+ size -= ulSize; -+ } -+ return 0; -+} + -+#define CALL_MMAP(s) os2mmap(s) -+#define CALL_MUNMAP(a, s) os2munmap((a), (s)) -+#define DIRECT_MMAP(s) os2direct_mmap(s) ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); ++ ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); ++ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+#else /* WIN32 */ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+/* Win32 MMAP via VirtualAlloc */ -+static void* win32mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -+static void* win32direct_mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, -+ PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} ++/* ---- Definitions for closures ----------------------------------------- */ + -+/* This function supports releasing coalesed segments */ -+static int win32munmap(void* ptr, size_t size) { -+ MEMORY_BASIC_INFORMATION minfo; -+ char* cptr = ptr; -+ while (size) { -+ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) -+ return -1; -+ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || -+ minfo.State != MEM_COMMIT || minfo.RegionSize > size) -+ return -1; -+ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) -+ return -1; -+ cptr += minfo.RegionSize; -+ size -= minfo.RegionSize; -+ } -+ return 0; -+} ++#if FFI_CLOSURES + -+#define CALL_MMAP(s) win32mmap(s) -+#define CALL_MUNMAP(a, s) win32munmap((a), (s)) -+#define DIRECT_MMAP(s) win32direct_mmap(s) -+#endif /* WIN32 */ -+#endif /* HAVE_MMAP */ ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+#if HAVE_MMAP && HAVE_MREMAP -+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -+#else /* HAVE_MMAP && HAVE_MREMAP */ -+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -+#endif /* HAVE_MMAP && HAVE_MREMAP */ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+#if HAVE_MORECORE -+#define CALL_MORECORE(S) MORECORE(S) -+#else /* HAVE_MORECORE */ -+#define CALL_MORECORE(S) MFAIL -+#endif /* HAVE_MORECORE */ ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+/* mstate bit set if contiguous morecore disabled or failed */ -+#define USE_NONCONTIGUOUS_BIT (4U) ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+/* segment bit set in create_mspace_with_base */ -+#define EXTERN_BIT (8U) ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + ++#if !FFI_NATIVE_RAW_API + -+/* --------------------------- Lock preliminaries ------------------------ */ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+#if USE_LOCKS ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+/* -+ When locks are defined, there are up to two global locks: ++#endif + -+ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to -+ MORECORE. In many cases sys_alloc requires two calls, that should -+ not be interleaved with calls by other threads. This does not -+ protect against direct calls to MORECORE by other threads not -+ using this lock, so there is still code to cope the best we can on -+ interference. ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ * magic_init_mutex ensures that mparams.magic and other -+ unique mparams values are initialized only once. -+*/ ++} ffi_raw_closure; + -+#if !defined(WIN32) && !defined(__OS2__) -+/* By default use posix locks */ -+#include -+#define MLOCK_T pthread_mutex_t -+#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) -+#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) -+#define RELEASE_LOCK(l) pthread_mutex_unlock(l) ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; -+#endif /* HAVE_MORECORE */ ++ ffi_cif *cif; + -+static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; ++#if !FFI_NATIVE_RAW_API + -+#elif defined(__OS2__) -+#define MLOCK_T HMTX -+#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) -+#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) -+#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+#else /* WIN32 */ -+/* -+ Because lock-protected regions have bounded times, and there -+ are no recursive lock calls, we can use simple spinlocks. -+*/ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+#define MLOCK_T long -+static int win32_acquire_lock (MLOCK_T *sl) { -+ for (;;) { -+#ifdef InterlockedCompareExchangePointer -+ if (!InterlockedCompareExchange(sl, 1, 0)) -+ return 0; -+#else /* Use older void* version */ -+ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) -+ return 0; -+#endif /* InterlockedCompareExchangePointer */ -+ Sleep (0); -+ } -+} ++#endif + -+static void win32_release_lock (MLOCK_T *sl) { -+ InterlockedExchange (sl, 0); -+} ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + -+#define INITIAL_LOCK(l) *(l)=0 -+#define ACQUIRE_LOCK(l) win32_acquire_lock(l) -+#define RELEASE_LOCK(l) win32_release_lock(l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; -+#endif /* WIN32 */ ++} ffi_java_raw_closure; + -+#define USE_LOCK_BIT (2U) -+#else /* USE_LOCKS */ -+#define USE_LOCK_BIT (0U) -+#define INITIAL_LOCK(l) -+#endif /* USE_LOCKS */ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + -+#if USE_LOCKS && HAVE_MORECORE -+#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); -+#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); -+#else /* USE_LOCKS && HAVE_MORECORE */ -+#define ACQUIRE_MORECORE_LOCK() -+#define RELEASE_MORECORE_LOCK() -+#endif /* USE_LOCKS && HAVE_MORECORE */ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+#if USE_LOCKS -+#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); -+#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); -+#else /* USE_LOCKS */ -+#define ACQUIRE_MAGIC_INIT_LOCK() -+#define RELEASE_MAGIC_INIT_LOCK() -+#endif /* USE_LOCKS */ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + ++#endif /* FFI_CLOSURES */ + -+/* ----------------------- Chunk representations ------------------------ */ ++/* ---- Public interface definition -------------------------------------- */ + -+/* -+ (The following includes lightly edited explanations by Colin Plumb.) ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ The malloc_chunk declaration below is misleading (but accurate and -+ necessary). It declares a "view" into memory allowing access to -+ necessary fields at known offsets from a given base. ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ Chunks of memory are maintained using a `boundary tag' method as -+ originally described by Knuth. (See the paper by Paul Wilson -+ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such -+ techniques.) Sizes of free chunks are stored both in the front of -+ each chunk and at the end. This makes consolidating fragmented -+ chunks into bigger chunks fast. The head fields also hold bits -+ representing whether chunks are free or in use. ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+ Here are some pictures to make it clearer. They are "exploded" to -+ show that the state of a chunk can be thought of as extending from -+ the high 31 bits of the head field of its header through the -+ prev_foot and PINUSE_BIT bit of the following chunk header. ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+ A chunk that's in use looks like: ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk (if P = 1) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 1| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | | -+ +- -+ -+ | | -+ +- -+ -+ | : -+ +- size - sizeof(size_t) available payload bytes -+ -+ : | -+ chunk-> +- -+ -+ | | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| -+ | Size of next chunk (may or may not be in use) | +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++#endif + -+ And if it's free, it looks like this: ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+ chunk-> +- -+ -+ | User payload (must be in use, or we would have merged!) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 0| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Next pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Prev pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- size - sizeof(struct chunk) unused bytes -+ -+ : | -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| -+ | Size of next chunk (must be in use, or we would have merged)| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- User payload -+ -+ : | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ |0| -+ +-+ -+ Note that since we always merge adjacent free chunks, the chunks -+ adjacent to a free chunk must be in use. ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ Given a pointer to a chunk (which can be derived trivially from the -+ payload pointer) we can, in O(1) time, find out whether the adjacent -+ chunks are free, and if so, unlink them from the lists that they -+ are on and merge them with the current chunk. ++#ifdef __cplusplus ++} ++#endif + -+ Chunks always begin on even word boundaries, so the mem portion -+ (which is returned to the user) is also on an even word boundary, and -+ thus at least double-word aligned. ++#endif + -+ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the -+ chunk size (which is always a multiple of two words), is an in-use -+ bit for the *previous* chunk. If that bit is *clear*, then the -+ word before the current chunk size contains the previous chunk -+ size, and can be used to find the front of the previous chunk. -+ The very first chunk allocated always has this bit set, preventing -+ access to non-existent (or non-owned) memory. If pinuse is set for -+ any given chunk, then you CANNOT determine the size of the -+ previous chunk, and might even get a memory addressing fault when -+ trying to do so. + -+ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of -+ the chunk size redundantly records whether the current chunk is -+ inuse. This redundancy enables usage checks within free and realloc, -+ and reduces indirection when freeing and consolidating chunks. ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,492 @@ ++#ifdef __x86_64__ + -+ Each freshly allocated chunk must have both cinuse and pinuse set. -+ That is, each allocated chunk borders either a previously allocated -+ and still in-use chunk, or the base of its memory arena. This is -+ ensured by making all allocations from the the `lowest' part of any -+ found chunk. Further, no free chunk physically borders another one, -+ so each free chunk is known to be preceded and followed by either -+ inuse chunks or the ends of memory. ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ Note that the `foot' of the current chunk is actually represented -+ as the prev_foot of the NEXT chunk. This makes it easier to -+ deal with alignments etc but can be very confusing when trying -+ to extend or adapt this code. ++ 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: + -+ The exceptions to all this are ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + -+ 1. The special chunk `top' is the top-most available chunk (i.e., -+ the one bordering the end of available memory). It is treated -+ specially. Top is never included in any bin, is used only if -+ no other chunk is available, and is released back to the -+ system if it is very large (see M_TRIM_THRESHOLD). In effect, -+ the top chunk is treated as larger (and thus less well -+ fitting) than any other available chunk. The top chunk -+ doesn't update its trailing size field since there is no next -+ contiguous chunk that would have to index off it. However, -+ space is still allocated for it (TOP_FOOT_SIZE) to enable -+ separation or merging when space is extended. ++ 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. + -+ 3. Chunks allocated via mmap, which have the lowest-order bit -+ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set -+ PINUSE_BIT in their head fields. Because they are allocated -+ one-by-one, each must carry its own prev_foot field, which is -+ also used to hold the offset this chunk has within its mmapped -+ region, which is needed to preserve alignment. Each mmapped -+ chunk is trailed by the first two fields of a fake next-chunk -+ for sake of usage checks. ++ ----------------------------------------------------------------------- */ + -+*/ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+struct malloc_chunk { -+ size_t prev_foot; /* Size of previous chunk (if free). */ -+ size_t head; /* Size and inuse bits. */ -+ struct malloc_chunk* fd; /* double links -- used only if free. */ -+ struct malloc_chunk* bk; -+}; ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+typedef struct malloc_chunk mchunk; -+typedef struct malloc_chunk* mchunkptr; -+typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -+typedef size_t bindex_t; /* Described below */ -+typedef unsigned int binmap_t; /* Described below */ -+typedef unsigned int flag_t; /* The type of various bit flag sets */ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+/* ------------------- Chunks sizes and alignments ----------------------- */ ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+#define MCHUNK_SIZE (sizeof(mchunk)) ++ More details on the raw and cloure API can be found in: + -+#if FOOTERS -+#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+#else /* FOOTERS */ -+#define CHUNK_OVERHEAD (SIZE_T_SIZE) -+#endif /* FOOTERS */ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+/* MMapped chunks need a second word of overhead ... */ -+#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+/* ... and additional padding for fake next-chunk at foot */ -+#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) ++ and + -+/* The smallest size we can malloc is an aligned minimal chunk */ -+#define MIN_CHUNK_SIZE\ -+ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+/* conversion from malloc headers to user pointers, and back */ -+#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -+#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -+/* chunk associated with aligned address A */ -+#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) ++#ifndef LIBFFI_H ++#define LIBFFI_H + -+/* Bounds on request (not chunk) sizes. */ -+#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -+#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) ++#ifdef __cplusplus ++extern "C" { ++#endif + -+/* pad request bytes into a usable size */ -+#define pad_request(req) \ -+ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_DARWIN ++#define X86_DARWIN ++#endif + -+/* pad request, checking for minimum (but not maximum) */ -+#define request2size(req) \ -+ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) ++/* ---- System configuration information --------------------------------- */ + ++#include + -+/* ------------------ Operations on head and foot fields ----------------- */ ++#ifndef LIBFFI_ASM + -+/* -+ The head field of a chunk is or'ed with PINUSE_BIT when previous -+ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in -+ use. If the chunk was obtained with mmap, the prev_foot field has -+ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the -+ mmapped region to the base of the chunk. -+*/ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif + -+#define PINUSE_BIT (SIZE_T_ONE) -+#define CINUSE_BIT (SIZE_T_TWO) -+#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) ++#include ++#include + -+/* Head value for fenceposts */ -+#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ + -+/* extraction of fields from head words */ -+#define cinuse(p) ((p)->head & CINUSE_BIT) -+#define pinuse(p) ((p)->head & PINUSE_BIT) -+#define chunksize(p) ((p)->head & ~(INUSE_BITS)) ++#define FFI_64_BIT_MAX 9223372036854775807 + -+#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -+#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif + -+/* Treat space at ptr +/- offset as a chunk */ -+#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -+#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ + -+/* Ptr to next or previous physical malloc_chunk. */ -+#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) -+#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+/* extract next chunk's pinuse bit */ -+#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif + -+/* Get/set size at footer */ -+#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -+#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif + -+/* Set size, pinuse bit, and foot */ -+#define set_size_and_pinuse_of_free_chunk(p, s)\ -+ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif + -+/* Set size, pinuse bit, foot, and clear next pinuse */ -+#define set_free_with_pinuse(p, s, n)\ -+ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif + -+#define is_mmapped(p)\ -+ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif + -+/* Get the internal overhead associated with chunk p */ -+#define overhead_for(p)\ -+ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+/* Return true if malloced space is not necessarily cleared */ -+#if MMAP_CLEARS -+#define calloc_must_clear(p) (!is_mmapped(p)) -+#else /* MMAP_CLEARS */ -+#define calloc_must_clear(p) (1) -+#endif /* MMAP_CLEARS */ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+/* ---------------------- Overlaid data structures ----------------------- */ ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif + -+/* -+ When chunks are not in use, they are treated as nodes of either -+ lists or trees. ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+ "Small" chunks are stored in circular doubly-linked lists, and look -+ like this: ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space (may be 0 bytes long) . -+ . . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++typedef unsigned FFI_TYPE; + -+ Larger chunks are kept in a form of bitwise digital trees (aka -+ tries) keyed on chunksizes. Because malloc_tree_chunks are only for -+ free chunks greater than 256 bytes, their size doesn't impose any -+ constraints on user chunk sizes. Each node looks like: ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to left child (child[0]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to right child (child[1]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to parent | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | bin index of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+ Each tree holding treenodes is a tree of unique chunk sizes. Chunks -+ of the same size are arranged in a circularly-linked list, with only -+ the oldest chunk (the next to be used, in our FIFO ordering) -+ actually in the tree. (Tree members are distinguished by a non-null -+ parent pointer.) If a chunk with the same size an an existing node -+ is inserted, it is linked off the existing node using pointers that -+ work in the same way as fd/bk pointers of small chunks. ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); ++ ++/* ---- Definitions for the raw API -------------------------------------- */ ++ ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ Each tree contains a power of 2 sized range of chunk sizes (the -+ smallest is 0x100 <= x < 0x180), which is is divided in half at each -+ tree level, with the chunks in the smaller half of the range (0x100 -+ <= x < 0x140 for the top nose) in the left subtree and the larger -+ half (0x140 <= x < 0x180) in the right subtree. This is, of course, -+ done by inspecting individual bits. ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+ Using these rules, each node's left subtree contains all smaller -+ sizes than its right subtree. However, the node at the root of each -+ subtree has no particular ordering relationship to either. (The -+ dividing line between the subtree sizes is based on trie relation.) -+ If we remove the last chunk of a given size from the interior of the -+ tree, we need to replace it with a leaf node. The tree ordering -+ rules permit a node to be replaced by any leaf below it. ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+ The smallest chunk in a tree (a common operation in a best-fit -+ allocator) can be found by walking a path to the leftmost leaf in -+ the tree. Unlike a usual binary tree, where we follow left child -+ pointers until we reach a null, here we follow the right child -+ pointer any time the left one is null, until we reach a leaf with -+ both child pointers null. The smallest chunk in the tree will be -+ somewhere along that path. ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+ The worst case number of steps to add, find, or remove a node is -+ bounded by the number of bits differentiating chunks within -+ bins. Under current bin calculations, this ranges from 6 up to 21 -+ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case -+ is of course much better. -+*/ + -+struct malloc_tree_chunk { -+ /* The first four fields must be compatible with malloc_chunk */ -+ size_t prev_foot; -+ size_t head; -+ struct malloc_tree_chunk* fd; -+ struct malloc_tree_chunk* bk; ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ struct malloc_tree_chunk* child[2]; -+ struct malloc_tree_chunk* parent; -+ bindex_t index; -+}; ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+typedef struct malloc_tree_chunk tchunk; -+typedef struct malloc_tree_chunk* tchunkptr; -+typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+/* A little helper macro for trees */ -+#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+/* ----------------------------- Segments -------------------------------- */ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+/* -+ Each malloc space may include non-contiguous segments, held in a -+ list headed by an embedded malloc_segment record representing the -+ top-most space. Segments also include flags holding properties of -+ the space. Large chunks that are directly allocated by mmap are not -+ included in this list. They are instead independently created and -+ destroyed without otherwise keeping track of them. ++/* ---- Definitions for closures ----------------------------------------- */ + -+ Segment management mainly comes into play for spaces allocated by -+ MMAP. Any call to MMAP might or might not return memory that is -+ adjacent to an existing segment. MORECORE normally contiguously -+ extends the current space, so this space is almost always adjacent, -+ which is simpler and faster to deal with. (This is why MORECORE is -+ used preferentially to MMAP when both are available -- see -+ sys_alloc.) When allocating using MMAP, we don't use any of the -+ hinting mechanisms (inconsistently) supported in various -+ implementations of unix mmap, or distinguish reserving from -+ committing memory. Instead, we just ask for space, and exploit -+ contiguity when we get it. It is probably possible to do -+ better than this on some systems, but no general scheme seems -+ to be significantly better. ++#if FFI_CLOSURES + -+ Management entails a simpler variant of the consolidation scheme -+ used for chunks to reduce fragmentation -- new adjacent memory is -+ normally prepended or appended to an existing segment. However, -+ there are limitations compared to chunk consolidation that mostly -+ reflect the fact that segment processing is relatively infrequent -+ (occurring only when getting memory from system) and that we -+ don't expect to have huge numbers of segments: ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+ * Segments are not indexed, so traversal requires linear scans. (It -+ would be possible to index these, but is not worth the extra -+ overhead and complexity for most programs on most platforms.) -+ * New segments are only appended to old ones when holding top-most -+ memory; if they cannot be prepended to others, they are held in -+ different segments. ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ Except for the top-most segment of an mstate, each segment record -+ is kept at the tail of its segment. Segments are added by pushing -+ segment records onto the list headed by &mstate.seg for the -+ containing mstate. ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+ Segment flags control allocation/merge/deallocation policies: -+ * If EXTERN_BIT set, then we did not allocate this segment, -+ and so should not try to deallocate or merge with others. -+ (This currently holds only for the initial segment passed -+ into create_mspace_with_base.) -+ * If IS_MMAPPED_BIT set, the segment may be merged with -+ other surrounding mmapped segments and trimmed/de-allocated -+ using munmap. -+ * If neither bit is set, then the segment was obtained using -+ MORECORE so can be merged with surrounding MORECORE'd segments -+ and deallocated/trimmed using MORECORE with negative arguments. -+*/ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+struct malloc_segment { -+ char* base; /* base address */ -+ size_t size; /* allocated size */ -+ struct malloc_segment* next; /* ptr to next segment */ -+#if FFI_MMAP_EXEC_WRIT -+ /* The mmap magic is supposed to store the address of the executable -+ segment at the very end of the requested block. */ ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) ++#if !FFI_NATIVE_RAW_API + -+ /* We can only merge segments if their corresponding executable -+ segments are at identical offsets. */ -+# define check_segment_merge(S,b,s) \ -+ (mmap_exec_offset((b),(s)) == (S)->exec_offset) ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) -+# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ /* The removal of sflags only works with HAVE_MORECORE == 0. */ ++#endif + -+# define get_segment_flags(S) (IS_MMAPPED_BIT) -+# define set_segment_flags(S,v) \ -+ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ -+ (((S)->exec_offset = \ -+ mmap_exec_offset((S)->base, (S)->size)), \ -+ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ -+ (S)->exec_offset) ? (ABORT, (v)) : \ -+ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ /* We use an offset here, instead of a pointer, because then, when -+ base changes, we don't have to modify this. On architectures -+ with segmented addresses, this might not work. */ -+ ptrdiff_t exec_offset; ++} ffi_raw_closure; ++ ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; +#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+# define get_segment_flags(S) ((S)->sflags) -+# define set_segment_flags(S,v) ((S)->sflags = (v)) -+# define check_segment_merge(S,b,s) (1) ++ ffi_cif *cif; ++ ++#if !FFI_NATIVE_RAW_API ++ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ ++ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ flag_t sflags; /* mmap and extern flag */ +#endif -+}; + -+#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) -+#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+typedef struct malloc_segment msegment; -+typedef struct malloc_segment* msegmentptr; ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+/* ---------------------------- malloc_state ----------------------------- */ ++#endif /* FFI_CLOSURES */ + -+/* -+ A malloc_state holds all of the bookkeeping for a space. -+ The main fields are: ++/* ---- Public interface definition -------------------------------------- */ + -+ Top -+ The topmost chunk of the currently active segment. Its size is -+ cached in topsize. The actual size of topmost space is -+ topsize+TOP_FOOT_SIZE, which includes space reserved for adding -+ fenceposts and segment records if necessary when getting more -+ space from the system. The size at which to autotrim top is -+ cached from mparams in trim_check, except that it is disabled if -+ an autotrim fails. ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ Designated victim (dv) -+ This is the preferred chunk for servicing small requests that -+ don't have exact fits. It is normally the chunk split off most -+ recently to service another small request. Its size is cached in -+ dvsize. The link fields of this chunk are not maintained since it -+ is not kept in a bin. ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ SmallBins -+ An array of bin headers for free chunks. These bins hold chunks -+ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains -+ chunks of all the same size, spaced 8 bytes apart. To simplify -+ use in double-linked lists, each bin header acts as a malloc_chunk -+ pointing to the real first node, if it exists (else pointing to -+ itself). This avoids special-casing for headers. But to avoid -+ waste, we allocate only the fd/bk pointers of bins, and then use -+ repositioning tricks to treat these as the fields of a chunk. ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+ TreeBins -+ Treebins are pointers to the roots of trees holding a range of -+ sizes. There are 2 equally spaced treebins for each power of two -+ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything -+ larger. ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+ Bin maps -+ There is one bit map for small bins ("smallmap") and one for -+ treebins ("treemap). Each bin sets its bit when non-empty, and -+ clears the bit when empty. Bit operations are then used to avoid -+ bin-by-bin searching -- nearly all "search" is done without ever -+ looking at bins that won't be selected. The bit maps -+ conservatively use 32 bits per map word, even if on 64bit system. -+ For a good description of some of the bit-based techniques used -+ here, see Henry S. Warren Jr's book "Hacker's Delight" (and -+ supplement at http://hackersdelight.org/). Many of these are -+ intended to reduce the branchiness of paths through malloc etc, as -+ well as to reduce the number of memory locations read or written. ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+ Segments -+ A list of segments headed by an embedded malloc_segment record -+ representing the initial space. ++#endif + -+ Address check support -+ The least_addr field is the least address ever obtained from -+ MORECORE or MMAP. Attempted frees and reallocs of any address less -+ than this are trapped (unless INSECURE is defined). ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+ Magic tag -+ A cross-check field that should always hold same value as mparams.magic. ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ Flags -+ Bits recording whether to use MMAP, locks, or contiguous MORECORE ++#ifdef __cplusplus ++} ++#endif + -+ Statistics -+ Each space keeps track of current and maximum system memory -+ obtained via MORECORE or MMAP. ++#endif + -+ Locking -+ If USE_LOCKS is defined, the "mutex" lock is acquired and released -+ around every public call using this mspace. -+*/ + -+/* Bin types, widths and sizes */ -+#define NSMALLBINS (32U) -+#define NTREEBINS (32U) -+#define SMALLBIN_SHIFT (3U) -+#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -+#define TREEBIN_SHIFT (8U) -+#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -+#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -+#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-04-26 08:17:42.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+struct malloc_state { -+ binmap_t smallmap; -+ binmap_t treemap; -+ size_t dvsize; -+ size_t topsize; -+ char* least_addr; -+ mchunkptr dv; -+ mchunkptr top; -+ size_t trim_check; -+ size_t magic; -+ mchunkptr smallbins[(NSMALLBINS+1)*2]; -+ tbinptr treebins[NTREEBINS]; -+ size_t footprint; -+ size_t max_footprint; -+ flag_t mflags; -+#if USE_LOCKS -+ MLOCK_T mutex; /* locate lock among fields that rarely change */ -+#endif /* USE_LOCKS */ -+ msegment seg; -+}; ++#include + -+typedef struct malloc_state* mstate; + -+/* ------------- Global malloc_state and malloc_params ------------------- */ ++#endif ++#ifdef __i386__ + -+/* -+ malloc_params holds global properties, including those that can be -+ dynamically set using mallopt. There is a single instance, mparams, -+ initialized in init_mparams. -+*/ ++#include + -+struct malloc_params { -+ size_t magic; -+ size_t page_size; -+ size_t granularity; -+ size_t mmap_threshold; -+ size_t trim_threshold; -+ flag_t default_mflags; -+}; + -+static struct malloc_params mparams; ++#endif ++#ifdef __arm__ + -+/* The global malloc_state used for all non-"mspace" calls */ -+static struct malloc_state _gm_; -+#define gm (&_gm_) -+#define is_global(M) ((M) == &_gm_) -+#define is_initialized(M) ((M)->top != 0) ++#include + -+/* -------------------------- system alloc setup ------------------------- */ + -+/* Operations on mflags */ ++#endif ++#ifdef __x86_64__ + -+#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -+#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -+#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) ++#include + -+#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -+#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -+#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) + -+#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -+#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,220 @@ ++#ifdef __arm64__ + -+#define set_lock(M,L)\ -+ ((M)->mflags = (L)?\ -+ ((M)->mflags | USE_LOCK_BIT) :\ -+ ((M)->mflags & ~USE_LOCK_BIT)) ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+/* page-align a size */ -+#define page_align(S)\ -+ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+/* granularity-align a size */ -+#define granularity_align(S)\ -+ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+#define is_page_aligned(S)\ -+ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -+#define is_granularity_aligned(S)\ -+ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+/* True if segment S holds address A */ -+#define segment_holds(S, A)\ -+ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+/* Return segment holding given address */ -+static msegmentptr segment_holding(mstate m, char* addr) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= sp->base && addr < sp->base + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+/* Return true if segment contains a segment link */ -+static int has_segment_link(mstate m, msegmentptr ss) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) -+ return 1; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + -+#ifndef MORECORE_CANNOT_TRIM -+#define should_trim(M,s) ((s) > (M)->trim_check) -+#else /* MORECORE_CANNOT_TRIM */ -+#define should_trim(M,s) (0) -+#endif /* MORECORE_CANNOT_TRIM */ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+/* -+ TOP_FOOT_SIZE is padding at the end of a segment, including space -+ that may be needed to place segment records and fenceposts when new -+ noncontiguous segments are added. -+*/ -+#define TOP_FOOT_SIZE\ -+ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 + ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+/* ------------------------------- Hooks -------------------------------- */ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+/* -+ PREACTION should be defined to return 0 on success, and nonzero on -+ failure. If you are not using locking, you can redefine these to do -+ anything you like. -+*/ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+#if USE_LOCKS ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+/* Ensure locks are initialized */ -+#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) ++/* Define if your assembler supports .ascii. */ ++/* #undef HAVE_AS_ASCII_PSEUDO_OP */ + -+#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -+#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -+#else /* USE_LOCKS */ ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+#ifndef PREACTION -+#define PREACTION(M) (0) -+#endif /* PREACTION */ ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+#ifndef POSTACTION -+#define POSTACTION(M) -+#endif /* POSTACTION */ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+#endif /* USE_LOCKS */ ++/* Define if your assembler supports .string. */ ++/* #undef HAVE_AS_STRING_PSEUDO_OP */ + -+/* -+ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. -+ USAGE_ERROR_ACTION is triggered on detected bad frees and -+ reallocs. The argument p is an address that might have triggered the -+ fault. It is ignored by the two predefined actions, but might be -+ useful in custom actions that try to help diagnose errors. -+*/ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+#if PROCEED_ON_ERROR ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+/* A count of the number of corruption errors causing resets */ -+int malloc_corruption_error_count; ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+/* default corruption action */ -+static void reset_on_error(mstate m); ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -+#define USAGE_ERROR_ACTION(m, p) ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+#else /* PROCEED_ON_ERROR */ ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ + -+#ifndef CORRUPTION_ERROR_ACTION -+#define CORRUPTION_ERROR_ACTION(m) ABORT -+#endif /* CORRUPTION_ERROR_ACTION */ ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+#ifndef USAGE_ERROR_ACTION -+#define USAGE_ERROR_ACTION(m,p) ABORT -+#endif /* USAGE_ERROR_ACTION */ ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+#endif /* PROCEED_ON_ERROR */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+/* -------------------------- Debugging setup ---------------------------- */ ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+#if ! DEBUG ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+#define check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) -+#define check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) -+#define check_malloc_state(M) -+#define check_top_chunk(M,P) ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+#else /* DEBUG */ -+#define check_free_chunk(M,P) do_check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -+#define check_top_chunk(M,P) do_check_top_chunk(M,P) -+#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -+#define check_malloc_state(M) do_check_malloc_state(M) ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+static void do_check_any_chunk(mstate m, mchunkptr p); -+static void do_check_top_chunk(mstate m, mchunkptr p); -+static void do_check_mmapped_chunk(mstate m, mchunkptr p); -+static void do_check_inuse_chunk(mstate m, mchunkptr p); -+static void do_check_free_chunk(mstate m, mchunkptr p); -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -+static void do_check_tree(mstate m, tchunkptr t); -+static void do_check_treebin(mstate m, bindex_t i); -+static void do_check_smallbin(mstate m, bindex_t i); -+static void do_check_malloc_state(mstate m); -+static int bin_find(mstate m, mchunkptr x); -+static size_t traverse_and_check(mstate m); -+#endif /* DEBUG */ ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+/* ---------------------------- Indexing Bins ---------------------------- */ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -+#define small_index(s) ((s) >> SMALLBIN_SHIFT) -+#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -+#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+/* addressing by index. See above about smallbin repositioning */ -+#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -+#define treebin_at(M,i) (&((M)->treebins[i])) ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+/* assign tree index for size S to variable I */ -+#if defined(__GNUC__) && defined(__i386__) -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int K;\ -+ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ -+ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ -+ }\ -+} -+#else /* GNUC */ -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int Y = (unsigned int)X;\ -+ unsigned int N = ((Y - 0x100) >> 16) & 8;\ -+ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ -+ N += K;\ -+ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ -+ K = 14 - N + ((Y <<= K) >> 15);\ -+ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ -+ }\ -+} -+#endif /* GNUC */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+/* Bit representing maximum resolved size in a treebin at i */ -+#define bit_for_tree_index(i) \ -+ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -+#define leftshift_for_tree_index(i) \ -+ ((i == NTREEBINS-1)? 0 : \ -+ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+/* The size of the smallest chunk held in bin with index i */ -+#define minsize_for_tree_index(i) \ -+ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ -+ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+/* ------------------------ Operations on bin maps ----------------------- */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+/* bit corresponding to given index */ -+#define idx2bit(i) ((binmap_t)(1) << (i)) ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+/* Mark/Clear bits with given index */ -+#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -+#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -+#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) ++/* Define to 1 if your C compiler doesn't accept -c and -o together. */ ++/* #undef NO_MINUS_C_MINUS_O */ + -+#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -+#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -+#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) ++/* Name of package */ ++#define PACKAGE "libffi" + -+/* index corresponding to given bit */ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+#if defined(__GNUC__) && defined(__i386__) -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int J;\ -+ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ -+ I = (bindex_t)J;\ -+} ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+#else /* GNUC */ -+#if USE_BUILTIN_FFS -+#define compute_bit2idx(X, I) I = ffs(X)-1 ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.2.1" + -+#else /* USE_BUILTIN_FFS */ -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int Y = X - 1;\ -+ unsigned int K = Y >> (16-4) & 16;\ -+ unsigned int N = K; Y >>= K;\ -+ N += K = Y >> (8-3) & 8; Y >>= K;\ -+ N += K = Y >> (4-2) & 4; Y >>= K;\ -+ N += K = Y >> (2-1) & 2; Y >>= K;\ -+ N += K = Y >> (1-0) & 1; Y >>= K;\ -+ I = (bindex_t)(N + Y);\ -+} -+#endif /* USE_BUILTIN_FFS */ -+#endif /* GNUC */ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+/* isolate the least set bit of a bitmap */ -+#define least_bit(x) ((x) & -(x)) ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.2.1" ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+/* mask with all bits to left of least bit of x on */ -+#define left_bits(x) ((x<<1) | -(x<<1)) ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 + -+/* mask with all bits to left of or equal to least bit of x on */ -+#define same_or_left_bits(x) ((x) | -(x)) ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 + ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+/* ----------------------- Runtime Check Support ------------------------- */ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+/* -+ For security, the main invariant is that malloc/free/etc never -+ writes to a static address other than malloc_state, unless static -+ malloc_state itself has been corrupted, which cannot occur via -+ malloc (because of these checks). In essence this means that we -+ believe all pointers, sizes, maps etc held in malloc_state, but -+ check all of those linked or offsetted from other embedded data -+ structures. These checks are interspersed with main code in a way -+ that tends to minimize their run-time cost. ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+ When FOOTERS is defined, in addition to range checking, we also -+ verify footer fields of inuse chunks, which can be used guarantee -+ that the mstate controlling malloc/free is intact. This is a -+ streamlined version of the approach described by William Robertson -+ et al in "Run-time Detection of Heap-based Overflows" LISA'03 -+ http://www.usenix.org/events/lisa03/tech/robertson.html The footer -+ of an inuse chunk holds the xor of its mstate and a random seed, -+ that is checked upon calls to free() and realloc(). This is -+ (probablistically) unguessable from outside the program, but can be -+ computed by any code successfully malloc'ing any chunk, so does not -+ itself provide protection against code that has already broken -+ security through some other means. Unlike Robertson et al, we -+ always dynamically check addresses of all offset chunks (previous, -+ next, etc). This turns out to be cheaper than relying on hashes. -+*/ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+#if !INSECURE -+/* Check if address a is at least as high as any from MORECORE or MMAP */ -+#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -+/* Check if address of next chunk n is higher than base chunk p */ -+#define ok_next(p, n) ((char*)(p) < (char*)(n)) -+/* Check if p has its cinuse bit on */ -+#define ok_cinuse(p) cinuse(p) -+/* Check if p has its pinuse bit on */ -+#define ok_pinuse(p) pinuse(p) ++/* Version number of package */ ++#define VERSION "3.2.1" + -+#else /* !INSECURE */ -+#define ok_address(M, a) (1) -+#define ok_next(b, n) (1) -+#define ok_cinuse(p) (1) -+#define ok_pinuse(p) (1) -+#endif /* !INSECURE */ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+#if (FOOTERS && !INSECURE) -+/* Check if (alleged) mstate m has expected magic field */ -+#define ok_magic(M) ((M)->magic == mparams.magic) -+#else /* (FOOTERS && !INSECURE) */ -+#define ok_magic(M) (1) -+#endif /* (FOOTERS && !INSECURE) */ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + + -+/* In gcc, use __builtin_expect to minimize impact of checks */ -+#if !INSECURE -+#if defined(__GNUC__) && __GNUC__ >= 3 -+#define RTCHECK(e) __builtin_expect(e, 1) -+#else /* GNUC */ -+#define RTCHECK(e) (e) -+#endif /* GNUC */ -+#else /* !INSECURE */ -+#define RTCHECK(e) (1) -+#endif /* !INSECURE */ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+/* macros to set up inuse chunks with or without footers */ + -+#if !FOOTERS + -+#define mark_inuse_foot(M,p,s) ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,220 @@ ++#ifdef __arm__ + -+/* Set cinuse bit and pinuse bit of next chunk */ -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+/* Set size, cinuse and pinuse bit of this chunk */ -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+#else /* FOOTERS */ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+/* Set foot of inuse chunk to be xor of mstate and seed */ -+#define mark_inuse_foot(M,p,s)\ -+ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+#define get_mstate_for(p)\ -+ ((mstate)(((mchunkptr)((char*)(p) +\ -+ (chunksize(p))))->prev_foot ^ mparams.magic)) ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ -+ mark_inuse_foot(M,p,s)) ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 + -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ -+ mark_inuse_foot(M,p,s)) ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ mark_inuse_foot(M, p, s)) ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ + -+#endif /* !FOOTERS */ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+/* ---------------------------- setting mparams -------------------------- */ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+/* Initialize mparams */ -+static int init_mparams(void) { -+ if (mparams.page_size == 0) { -+ size_t s; ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; -+ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -+#if MORECORE_CONTIGUOUS -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -+#else /* MORECORE_CONTIGUOUS */ -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -+#endif /* MORECORE_CONTIGUOUS */ ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+#if (FOOTERS && !INSECURE) -+ { -+#if USE_DEV_RANDOM -+ int fd; -+ unsigned char buf[sizeof(size_t)]; -+ /* Try to use /dev/urandom, else fall back on using time */ -+ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && -+ read(fd, buf, sizeof(buf)) == sizeof(buf)) { -+ s = *((size_t *) buf); -+ close(fd); -+ } -+ else -+#endif /* USE_DEV_RANDOM */ -+ s = (size_t)(time(0) ^ (size_t)0x55555555U); ++/* Define if your assembler supports .ascii. */ ++/* #undef HAVE_AS_ASCII_PSEUDO_OP */ + -+ s |= (size_t)8U; /* ensure nonzero */ -+ s &= ~(size_t)7U; /* improve chances of fault for bad values */ ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+ } -+#else /* (FOOTERS && !INSECURE) */ -+ s = (size_t)0x58585858U; -+#endif /* (FOOTERS && !INSECURE) */ -+ ACQUIRE_MAGIC_INIT_LOCK(); -+ if (mparams.magic == 0) { -+ mparams.magic = s; -+ /* Set up lock for main malloc area */ -+ INITIAL_LOCK(&gm->mutex); -+ gm->mflags = mparams.default_mflags; -+ } -+ RELEASE_MAGIC_INIT_LOCK(); ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+#if !defined(WIN32) && !defined(__OS2__) -+ mparams.page_size = malloc_getpagesize; -+ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? -+ DEFAULT_GRANULARITY : mparams.page_size); -+#elif defined (__OS2__) -+ /* if low-memory is used, os2munmap() would break -+ if it were anything other than 64k */ -+ mparams.page_size = 4096u; -+ mparams.granularity = 65536u; -+#else /* WIN32 */ -+ { -+ SYSTEM_INFO system_info; -+ GetSystemInfo(&system_info); -+ mparams.page_size = system_info.dwPageSize; -+ mparams.granularity = system_info.dwAllocationGranularity; -+ } -+#endif /* WIN32 */ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+ /* Sanity-check configuration: -+ size_t must be unsigned and as wide as pointer type. -+ ints must be at least 4 bytes. -+ alignment must be at least 8. -+ Alignment, min chunk size, and page size must all be powers of 2. -+ */ -+ if ((sizeof(size_t) != sizeof(char*)) || -+ (MAX_SIZE_T < MIN_CHUNK_SIZE) || -+ (sizeof(int) < 4) || -+ (MALLOC_ALIGNMENT < (size_t)8U) || -+ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || -+ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || -+ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || -+ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) -+ ABORT; -+ } -+ return 0; -+} ++/* Define if your assembler supports .string. */ ++/* #undef HAVE_AS_STRING_PSEUDO_OP */ ++ ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+/* support for mallopt */ -+static int change_mparam(int param_number, int value) { -+ size_t val = (size_t)value; -+ init_mparams(); -+ switch(param_number) { -+ case M_TRIM_THRESHOLD: -+ mparams.trim_threshold = val; -+ return 1; -+ case M_GRANULARITY: -+ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { -+ mparams.granularity = val; -+ return 1; -+ } -+ else -+ return 0; -+ case M_MMAP_THRESHOLD: -+ mparams.mmap_threshold = val; -+ return 1; -+ default: -+ return 0; -+ } -+} ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+#if DEBUG -+/* ------------------------- Debugging Support --------------------------- */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+/* Check properties of any chunk, whether free, inuse, mmapped etc */ -+static void do_check_any_chunk(mstate m, mchunkptr p) { -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+} ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+/* Check properties of top chunk */ -+static void do_check_top_chunk(mstate m, mchunkptr p) { -+ msegmentptr sp = segment_holding(m, (char*)p); -+ size_t sz = chunksize(p); -+ assert(sp != 0); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(sz == m->topsize); -+ assert(sz > 0); -+ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); -+ assert(pinuse(p)); -+ assert(!next_pinuse(p)); -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+/* Check properties of (inuse) mmapped chunks */ -+static void do_check_mmapped_chunk(mstate m, mchunkptr p) { -+ size_t sz = chunksize(p); -+ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); -+ assert(is_mmapped(p)); -+ assert(use_mmap(m)); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(!is_small(sz)); -+ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); -+ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); -+ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -+} ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ + -+/* Check properties of inuse chunks */ -+static void do_check_inuse_chunk(mstate m, mchunkptr p) { -+ do_check_any_chunk(m, p); -+ assert(cinuse(p)); -+ assert(next_pinuse(p)); -+ /* If not pinuse and not mmapped, previous chunk has OK offset */ -+ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); -+ if (is_mmapped(p)) -+ do_check_mmapped_chunk(m, p); -+} ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+/* Check properties of free chunks */ -+static void do_check_free_chunk(mstate m, mchunkptr p) { -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ mchunkptr next = chunk_plus_offset(p, sz); -+ do_check_any_chunk(m, p); -+ assert(!cinuse(p)); -+ assert(!next_pinuse(p)); -+ assert (!is_mmapped(p)); -+ if (p != m->dv && p != m->top) { -+ if (sz >= MIN_CHUNK_SIZE) { -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(is_aligned(chunk2mem(p))); -+ assert(next->prev_foot == sz); -+ assert(pinuse(p)); -+ assert (next == m->top || cinuse(next)); -+ assert(p->fd->bk == p); -+ assert(p->bk->fd == p); -+ } -+ else /* markers are always of size SIZE_T_SIZE */ -+ assert(sz == SIZE_T_SIZE); -+ } -+} ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+/* Check properties of malloced chunks at the point they are malloced */ -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ do_check_inuse_chunk(m, p); -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(sz >= MIN_CHUNK_SIZE); -+ assert(sz >= s); -+ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ -+ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); -+ } -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+/* Check a tree and its subtrees. */ -+static void do_check_tree(mstate m, tchunkptr t) { -+ tchunkptr head = 0; -+ tchunkptr u = t; -+ bindex_t tindex = t->index; -+ size_t tsize = chunksize(t); -+ bindex_t idx; -+ compute_tree_index(tsize, idx); -+ assert(tindex == idx); -+ assert(tsize >= MIN_LARGE_SIZE); -+ assert(tsize >= minsize_for_tree_index(idx)); -+ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+ do { /* traverse through chain of same-sized nodes */ -+ do_check_any_chunk(m, ((mchunkptr)u)); -+ assert(u->index == tindex); -+ assert(chunksize(u) == tsize); -+ assert(!cinuse(u)); -+ assert(!next_pinuse(u)); -+ assert(u->fd->bk == u); -+ assert(u->bk->fd == u); -+ if (u->parent == 0) { -+ assert(u->child[0] == 0); -+ assert(u->child[1] == 0); -+ } -+ else { -+ assert(head == 0); /* only one node on chain has parent */ -+ head = u; -+ assert(u->parent != u); -+ assert (u->parent->child[0] == u || -+ u->parent->child[1] == u || -+ *((tbinptr*)(u->parent)) == u); -+ if (u->child[0] != 0) { -+ assert(u->child[0]->parent == u); -+ assert(u->child[0] != u); -+ do_check_tree(m, u->child[0]); -+ } -+ if (u->child[1] != 0) { -+ assert(u->child[1]->parent == u); -+ assert(u->child[1] != u); -+ do_check_tree(m, u->child[1]); -+ } -+ if (u->child[0] != 0 && u->child[1] != 0) { -+ assert(chunksize(u->child[0]) < chunksize(u->child[1])); -+ } -+ } -+ u = u->fd; -+ } while (u != t); -+ assert(head != 0); -+} ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+/* Check all the chunks in a treebin. */ -+static void do_check_treebin(mstate m, bindex_t i) { -+ tbinptr* tb = treebin_at(m, i); -+ tchunkptr t = *tb; -+ int empty = (m->treemap & (1U << i)) == 0; -+ if (t == 0) -+ assert(empty); -+ if (!empty) -+ do_check_tree(m, t); -+} ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+/* Check all the chunks in a smallbin. */ -+static void do_check_smallbin(mstate m, bindex_t i) { -+ sbinptr b = smallbin_at(m, i); -+ mchunkptr p = b->bk; -+ unsigned int empty = (m->smallmap & (1U << i)) == 0; -+ if (p == b) -+ assert(empty); -+ if (!empty) { -+ for (; p != b; p = p->bk) { -+ size_t size = chunksize(p); -+ mchunkptr q; -+ /* each chunk claims to be free */ -+ do_check_free_chunk(m, p); -+ /* chunk belongs in bin */ -+ assert(small_index(size) == i); -+ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); -+ /* chunk is followed by an inuse chunk */ -+ q = next_chunk(p); -+ if (q->head != FENCEPOST_HEAD) -+ do_check_inuse_chunk(m, q); -+ } -+ } -+} ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+/* Find x in a bin. Used in other check functions. */ -+static int bin_find(mstate m, mchunkptr x) { -+ size_t size = chunksize(x); -+ if (is_small(size)) { -+ bindex_t sidx = small_index(size); -+ sbinptr b = smallbin_at(m, sidx); -+ if (smallmap_is_marked(m, sidx)) { -+ mchunkptr p = b; -+ do { -+ if (p == x) -+ return 1; -+ } while ((p = p->fd) != b); -+ } -+ } -+ else { -+ bindex_t tidx; -+ compute_tree_index(size, tidx); -+ if (treemap_is_marked(m, tidx)) { -+ tchunkptr t = *treebin_at(m, tidx); -+ size_t sizebits = size << leftshift_for_tree_index(tidx); -+ while (t != 0 && chunksize(t) != size) { -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ sizebits <<= 1; -+ } -+ if (t != 0) { -+ tchunkptr u = t; -+ do { -+ if (u == (tchunkptr)x) -+ return 1; -+ } while ((u = u->fd) != t); -+ } -+ } -+ } -+ return 0; -+} ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 ++ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+/* Traverse each chunk and check it; return total */ -+static size_t traverse_and_check(mstate m) { -+ size_t sum = 0; -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ sum += m->topsize + TOP_FOOT_SIZE; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ mchunkptr lastq = 0; -+ assert(pinuse(q)); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ sum += chunksize(q); -+ if (cinuse(q)) { -+ assert(!bin_find(m, q)); -+ do_check_inuse_chunk(m, q); -+ } -+ else { -+ assert(q == m->dv || bin_find(m, q)); -+ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ -+ do_check_free_chunk(m, q); -+ } -+ lastq = q; -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } -+ return sum; -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+/* Check all properties of malloc_state. */ -+static void do_check_malloc_state(mstate m) { -+ bindex_t i; -+ size_t total; -+ /* check bins */ -+ for (i = 0; i < NSMALLBINS; ++i) -+ do_check_smallbin(m, i); -+ for (i = 0; i < NTREEBINS; ++i) -+ do_check_treebin(m, i); ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+ if (m->dvsize != 0) { /* check dv chunk */ -+ do_check_any_chunk(m, m->dv); -+ assert(m->dvsize == chunksize(m->dv)); -+ assert(m->dvsize >= MIN_CHUNK_SIZE); -+ assert(bin_find(m, m->dv) == 0); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+ if (m->top != 0) { /* check top chunk */ -+ do_check_top_chunk(m, m->top); -+ assert(m->topsize == chunksize(m->top)); -+ assert(m->topsize > 0); -+ assert(bin_find(m, m->top) == 0); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+ total = traverse_and_check(m); -+ assert(total <= m->footprint); -+ assert(m->footprint <= m->max_footprint); -+} -+#endif /* DEBUG */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+/* ----------------------------- statistics ------------------------------ */ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+#if !NO_MALLINFO -+static struct mallinfo internal_mallinfo(mstate m) { -+ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -+ if (!PREACTION(m)) { -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ size_t nfree = SIZE_T_ONE; /* top always free */ -+ size_t mfree = m->topsize + TOP_FOOT_SIZE; -+ size_t sum = mfree; -+ msegmentptr s = &m->seg; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ size_t sz = chunksize(q); -+ sum += sz; -+ if (!cinuse(q)) { -+ mfree += sz; -+ ++nfree; -+ } -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } ++/* Define to 1 if your C compiler doesn't accept -c and -o together. */ ++/* #undef NO_MINUS_C_MINUS_O */ + -+ nm.arena = sum; -+ nm.ordblks = nfree; -+ nm.hblkhd = m->footprint - sum; -+ nm.usmblks = m->max_footprint; -+ nm.uordblks = m->footprint - mfree; -+ nm.fordblks = mfree; -+ nm.keepcost = m->topsize; -+ } ++/* Name of package */ ++#define PACKAGE "libffi" + -+ POSTACTION(m); -+ } -+ return nm; -+} -+#endif /* !NO_MALLINFO */ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+static void internal_malloc_stats(mstate m) { -+ if (!PREACTION(m)) { -+ size_t maxfp = 0; -+ size_t fp = 0; -+ size_t used = 0; -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ maxfp = m->max_footprint; -+ fp = m->footprint; -+ used = fp - (m->topsize + TOP_FOOT_SIZE); ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ if (!cinuse(q)) -+ used -= chunksize(q); -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.2.1" + -+ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); -+ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); -+ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+ POSTACTION(m); -+ } -+} ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+/* ----------------------- Operations on smallbins ----------------------- */ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.2.1" + -+/* -+ Various forms of linking and unlinking are defined as macros. Even -+ the ones for trees, which are very long but have very short typical -+ paths. This is ugly but reduces reliance on inlining support of -+ compilers. -+*/ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+/* Link a free chunk into a smallbin */ -+#define insert_small_chunk(M, P, S) {\ -+ bindex_t I = small_index(S);\ -+ mchunkptr B = smallbin_at(M, I);\ -+ mchunkptr F = B;\ -+ assert(S >= MIN_CHUNK_SIZE);\ -+ if (!smallmap_is_marked(M, I))\ -+ mark_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, B->fd)))\ -+ F = B->fd;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ B->fd = P;\ -+ F->bk = P;\ -+ P->fd = F;\ -+ P->bk = B;\ -+} ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 + -+/* Unlink a chunk from a smallbin */ -+#define unlink_small_chunk(M, P, S) {\ -+ mchunkptr F = P->fd;\ -+ mchunkptr B = P->bk;\ -+ bindex_t I = small_index(S);\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (F == B)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ -+ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ -+ F->bk = B;\ -+ B->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 + -+/* Unlink the first chunk from a smallbin */ -+#define unlink_first_small_chunk(M, B, P, I) {\ -+ mchunkptr F = P->fd;\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (B == F)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, F))) {\ -+ B->fd = F;\ -+ F->bk = B;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+/* Replace dv node, binning the old one */ -+/* Used only when dvsize known to be small */ -+#define replace_dv(M, P, S) {\ -+ size_t DVS = M->dvsize;\ -+ if (DVS != 0) {\ -+ mchunkptr DV = M->dv;\ -+ assert(is_small(DVS));\ -+ insert_small_chunk(M, DV, DVS);\ -+ }\ -+ M->dvsize = S;\ -+ M->dv = P;\ -+} ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+/* ------------------------- Operations on trees ------------------------- */ ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.2.1" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+/* Insert chunk into tree */ -+#define insert_large_chunk(M, X, S) {\ -+ tbinptr* H;\ -+ bindex_t I;\ -+ compute_tree_index(S, I);\ -+ H = treebin_at(M, I);\ -+ X->index = I;\ -+ X->child[0] = X->child[1] = 0;\ -+ if (!treemap_is_marked(M, I)) {\ -+ mark_treemap(M, I);\ -+ *H = X;\ -+ X->parent = (tchunkptr)H;\ -+ X->fd = X->bk = X;\ -+ }\ -+ else {\ -+ tchunkptr T = *H;\ -+ size_t K = S << leftshift_for_tree_index(I);\ -+ for (;;) {\ -+ if (chunksize(T) != S) {\ -+ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ -+ K <<= 1;\ -+ if (*C != 0)\ -+ T = *C;\ -+ else if (RTCHECK(ok_address(M, C))) {\ -+ *C = X;\ -+ X->parent = T;\ -+ X->fd = X->bk = X;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr F = T->fd;\ -+ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ -+ T->fd = F->bk = X;\ -+ X->fd = F;\ -+ X->bk = T;\ -+ X->parent = 0;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ }\ -+ }\ -+} + -+/* -+ Unlink steps: ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+ 1. If x is a chained node, unlink it from its same-sized fd/bk links -+ and choose its bk node as its replacement. -+ 2. If x was the last node of its size, but not a leaf node, it must -+ be replaced with a leaf node (not merely one with an open left or -+ right), to make sure that lefts and rights of descendants -+ correspond properly to bit masks. We use the rightmost descendant -+ of x. We could use any other leaf, but this is easy to locate and -+ tends to counteract removal of leftmosts elsewhere, and so keeps -+ paths shorter than minimally guaranteed. This doesn't loop much -+ because on average a node in a tree is near the bottom. -+ 3. If x is the base of a chain (i.e., has parent links) relink -+ x's parent and children to x's replacement (or null if none). -+*/ + -+#define unlink_large_chunk(M, X) {\ -+ tchunkptr XP = X->parent;\ -+ tchunkptr R;\ -+ if (X->bk != X) {\ -+ tchunkptr F = X->fd;\ -+ R = X->bk;\ -+ if (RTCHECK(ok_address(M, F))) {\ -+ F->bk = R;\ -+ R->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr* RP;\ -+ if (((R = *(RP = &(X->child[1]))) != 0) ||\ -+ ((R = *(RP = &(X->child[0]))) != 0)) {\ -+ tchunkptr* CP;\ -+ while ((*(CP = &(R->child[1])) != 0) ||\ -+ (*(CP = &(R->child[0])) != 0)) {\ -+ R = *(RP = CP);\ -+ }\ -+ if (RTCHECK(ok_address(M, RP)))\ -+ *RP = 0;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ }\ -+ if (XP != 0) {\ -+ tbinptr* H = treebin_at(M, X->index);\ -+ if (X == *H) {\ -+ if ((*H = R) == 0) \ -+ clear_treemap(M, X->index);\ -+ }\ -+ else if (RTCHECK(ok_address(M, XP))) {\ -+ if (XP->child[0] == X) \ -+ XP->child[0] = R;\ -+ else \ -+ XP->child[1] = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ if (R != 0) {\ -+ if (RTCHECK(ok_address(M, R))) {\ -+ tchunkptr C0, C1;\ -+ R->parent = XP;\ -+ if ((C0 = X->child[0]) != 0) {\ -+ if (RTCHECK(ok_address(M, C0))) {\ -+ R->child[0] = C0;\ -+ C0->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ if ((C1 = X->child[1]) != 0) {\ -+ if (RTCHECK(ok_address(M, C1))) {\ -+ R->child[1] = C1;\ -+ C1->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+} + -+/* Relays to large vs small bin operations */ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,220 @@ ++#ifdef __i386__ + -+#define insert_chunk(M, P, S)\ -+ if (is_small(S)) insert_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+#define unlink_chunk(M, P, S)\ -+ if (is_small(S)) unlink_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+/* Relays to internal calls to malloc/free from realloc, memalign etc */ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+#if ONLY_MSPACES -+#define internal_malloc(m, b) mspace_malloc(m, b) -+#define internal_free(m, mem) mspace_free(m,mem); -+#else /* ONLY_MSPACES */ -+#if MSPACES -+#define internal_malloc(m, b)\ -+ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -+#define internal_free(m, mem)\ -+ if (m == gm) dlfree(mem); else mspace_free(m,mem); -+#else /* MSPACES */ -+#define internal_malloc(m, b) dlmalloc(b) -+#define internal_free(m, mem) dlfree(mem) -+#endif /* MSPACES */ -+#endif /* ONLY_MSPACES */ ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+/* ----------------------- Direct-mmapping chunks ----------------------- */ ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+/* -+ Directly mmapped chunks are set up with an offset to the start of -+ the mmapped region stored in the prev_foot field of the chunk. This -+ allows reconstruction of the required argument to MUNMAP when freed, -+ and also allows adjustment of the returned chunk to meet alignment -+ requirements (especially in memalign). There is also enough space -+ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain -+ the PINUSE bit so frees can be checked. -+*/ ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + -+/* Malloc using mmap */ -+static void* mmap_alloc(mstate m, size_t nb) { -+ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ if (mmsize > nb) { /* Check for wrap around 0 */ -+ char* mm = (char*)(DIRECT_MMAP(mmsize)); -+ if (mm != CMFAIL) { -+ size_t offset = align_offset(chunk2mem(mm)); -+ size_t psize = mmsize - offset - MMAP_FOOT_PAD; -+ mchunkptr p = (mchunkptr)(mm + offset); -+ p->prev_foot = offset | IS_MMAPPED_BIT; -+ (p)->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, p, psize); -+ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ if (mm < m->least_addr) -+ m->least_addr = mm; -+ if ((m->footprint += mmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ assert(is_aligned(chunk2mem(p))); -+ check_mmapped_chunk(m, p); -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 + -+/* Realloc using mmap */ -+static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { -+ size_t oldsize = chunksize(oldp); -+ if (is_small(nb)) /* Can't shrink mmap regions below small size */ -+ return 0; -+ /* Keep old chunk if big enough but not too big */ -+ if (oldsize >= nb + SIZE_T_SIZE && -+ (oldsize - nb) <= (mparams.granularity << 1)) -+ return oldp; -+ else { -+ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; -+ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; -+ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + -+ CHUNK_ALIGN_MASK); -+ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, -+ oldmmsize, newmmsize, 1); -+ if (cp != CMFAIL) { -+ mchunkptr newp = (mchunkptr)(cp + offset); -+ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; -+ newp->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, newp, psize); -+ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+ if (cp < m->least_addr) -+ m->least_addr = cp; -+ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ check_mmapped_chunk(m, newp); -+ return newp; -+ } -+ } -+ return 0; -+} ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+/* -------------------------- mspace management -------------------------- */ ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+/* Initialize top chunk and its size */ -+static void init_top(mstate m, mchunkptr p, size_t psize) { -+ /* Ensure alignment */ -+ size_t offset = align_offset(chunk2mem(p)); -+ p = (mchunkptr)((char*)p + offset); -+ psize -= offset; ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+ m->top = p; -+ m->topsize = psize; -+ p->head = psize | PINUSE_BIT; -+ /* set size of fake trailing chunk holding overhead space only once */ -+ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; -+ m->trim_check = mparams.trim_threshold; /* reset on each update */ -+} ++/* Define if your assembler supports .ascii. */ ++/* #undef HAVE_AS_ASCII_PSEUDO_OP */ + -+/* Initialize bins for a new mstate that is otherwise zeroed out */ -+static void init_bins(mstate m) { -+ /* Establish circular links for smallbins */ -+ bindex_t i; -+ for (i = 0; i < NSMALLBINS; ++i) { -+ sbinptr bin = smallbin_at(m,i); -+ bin->fd = bin->bk = bin; -+ } -+} ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+#if PROCEED_ON_ERROR ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+/* default corruption action */ -+static void reset_on_error(mstate m) { -+ int i; -+ ++malloc_corruption_error_count; -+ /* Reinitialize fields to forget about all memory */ -+ m->smallbins = m->treebins = 0; -+ m->dvsize = m->topsize = 0; -+ m->seg.base = 0; -+ m->seg.size = 0; -+ m->seg.next = 0; -+ m->top = m->dv = 0; -+ for (i = 0; i < NTREEBINS; ++i) -+ *treebin_at(m, i) = 0; -+ init_bins(m); -+} -+#endif /* PROCEED_ON_ERROR */ ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+/* Allocate chunk and prepend remainder with chunk in successor base. */ -+static void* prepend_alloc(mstate m, char* newbase, char* oldbase, -+ size_t nb) { -+ mchunkptr p = align_as_chunk(newbase); -+ mchunkptr oldfirst = align_as_chunk(oldbase); -+ size_t psize = (char*)oldfirst - (char*)p; -+ mchunkptr q = chunk_plus_offset(p, nb); -+ size_t qsize = psize - nb; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++/* Define if your assembler supports .string. */ ++/* #undef HAVE_AS_STRING_PSEUDO_OP */ + -+ assert((char*)oldfirst > (char*)q); -+ assert(pinuse(oldfirst)); -+ assert(qsize >= MIN_CHUNK_SIZE); ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+ /* consolidate remainder with first chunk of old base */ -+ if (oldfirst == m->top) { -+ size_t tsize = m->topsize += qsize; -+ m->top = q; -+ q->head = tsize | PINUSE_BIT; -+ check_top_chunk(m, q); -+ } -+ else if (oldfirst == m->dv) { -+ size_t dsize = m->dvsize += qsize; -+ m->dv = q; -+ set_size_and_pinuse_of_free_chunk(q, dsize); -+ } -+ else { -+ if (!cinuse(oldfirst)) { -+ size_t nsize = chunksize(oldfirst); -+ unlink_chunk(m, oldfirst, nsize); -+ oldfirst = chunk_plus_offset(oldfirst, nsize); -+ qsize += nsize; -+ } -+ set_free_with_pinuse(q, qsize, oldfirst); -+ insert_chunk(m, q, qsize); -+ check_free_chunk(m, q); -+ } ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+/* Add a segment to hold a new noncontiguous region */ -+static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { -+ /* Determine locations and sizes of segment, fenceposts, old top */ -+ char* old_top = (char*)m->top; -+ msegmentptr oldsp = segment_holding(m, old_top); -+ char* old_end = oldsp->base + oldsp->size; -+ size_t ssize = pad_request(sizeof(struct malloc_segment)); -+ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ size_t offset = align_offset(chunk2mem(rawsp)); -+ char* asp = rawsp + offset; -+ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; -+ mchunkptr sp = (mchunkptr)csp; -+ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); -+ mchunkptr tnext = chunk_plus_offset(sp, ssize); -+ mchunkptr p = tnext; -+ int nfences = 0; ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+ /* reset top to new space */ -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 + -+ /* Set up segment record */ -+ assert(is_aligned(ss)); -+ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); -+ *ss = m->seg; /* Push current record */ -+ m->seg.base = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmapped); -+ m->seg.next = ss; ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+ /* Insert trailing fenceposts */ -+ for (;;) { -+ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); -+ p->head = FENCEPOST_HEAD; -+ ++nfences; -+ if ((char*)(&(nextp->head)) < old_end) -+ p = nextp; -+ else -+ break; -+ } -+ assert(nfences >= 2); ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+ /* Insert the rest of old top into a bin as an ordinary free chunk */ -+ if (csp != old_top) { -+ mchunkptr q = (mchunkptr)old_top; -+ size_t psize = csp - old_top; -+ mchunkptr tn = chunk_plus_offset(q, psize); -+ set_free_with_pinuse(q, psize, tn); -+ insert_chunk(m, q, psize); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+ check_top_chunk(m, m->top); -+} ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+/* -------------------------- System allocation -------------------------- */ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+/* Get memory from system using MORECORE or MMAP */ -+static void* sys_alloc(mstate m, size_t nb) { -+ char* tbase = CMFAIL; -+ size_t tsize = 0; -+ flag_t mmap_flag = 0; ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+ init_mparams(); ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+ /* Directly map large chunks */ -+ if (use_mmap(m) && nb >= mparams.mmap_threshold) { -+ void* mem = mmap_alloc(m, nb); -+ if (mem != 0) -+ return mem; -+ } ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+ /* -+ Try getting memory in any of three ways (in most-preferred to -+ least-preferred order): -+ 1. A call to MORECORE that can normally contiguously extend memory. -+ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or -+ or main space is mmapped or a previous contiguous call failed) -+ 2. A call to MMAP new space (disabled if not HAVE_MMAP). -+ Note that under the default settings, if MORECORE is unable to -+ fulfill a request, and HAVE_MMAP is true, then mmap is -+ used as a noncontiguous system allocator. This is a useful backup -+ strategy for systems with holes in address spaces -- in this case -+ sbrk cannot contiguously expand the heap, but mmap may be able to -+ find space. -+ 3. A call to MORECORE that cannot usually contiguously extend memory. -+ (disabled if not HAVE_MORECORE) -+ */ ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { -+ char* br = CMFAIL; -+ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); -+ size_t asize = 0; -+ ACQUIRE_MORECORE_LOCK(); ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+ if (ss == 0) { /* First time through or recovery */ -+ char* base = (char*)CALL_MORECORE(0); -+ if (base != CMFAIL) { -+ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Adjust to end on a page boundary */ -+ if (!is_page_aligned(base)) -+ asize += (page_align((size_t)base) - (size_t)base); -+ /* Can't call MORECORE if size is negative when treated as signed */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == base) { -+ tbase = base; -+ tsize = asize; -+ } -+ } -+ } -+ else { -+ /* Subtract out existing available top space from MORECORE request. */ -+ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Use mem here only if it did continuously extend old space */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { -+ tbase = br; -+ tsize = asize; -+ } -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+ if (tbase == CMFAIL) { /* Cope with partial failure */ -+ if (br != CMFAIL) { /* Try to use/extend the space we did get */ -+ if (asize < HALF_MAX_SIZE_T && -+ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { -+ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); -+ if (esize < HALF_MAX_SIZE_T) { -+ char* end = (char*)CALL_MORECORE(esize); -+ if (end != CMFAIL) -+ asize += esize; -+ else { /* Can't use; try to release */ -+ (void)CALL_MORECORE(-asize); -+ br = CMFAIL; -+ } -+ } -+ } -+ } -+ if (br != CMFAIL) { /* Use the space we did get */ -+ tbase = br; -+ tsize = asize; -+ } -+ else -+ disable_contiguous(m); /* Don't try contiguous path in the future */ -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+ RELEASE_MORECORE_LOCK(); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ -+ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; -+ size_t rsize = granularity_align(req); -+ if (rsize > nb) { /* Fail if wraps around zero */ -+ char* mp = (char*)(CALL_MMAP(rsize)); -+ if (mp != CMFAIL) { -+ tbase = mp; -+ tsize = rsize; -+ mmap_flag = IS_MMAPPED_BIT; -+ } -+ } -+ } ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ -+ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ if (asize < HALF_MAX_SIZE_T) { -+ char* br = CMFAIL; -+ char* end = CMFAIL; -+ ACQUIRE_MORECORE_LOCK(); -+ br = (char*)(CALL_MORECORE(asize)); -+ end = (char*)(CALL_MORECORE(0)); -+ RELEASE_MORECORE_LOCK(); -+ if (br != CMFAIL && end != CMFAIL && br < end) { -+ size_t ssize = end - br; -+ if (ssize > nb + TOP_FOOT_SIZE) { -+ tbase = br; -+ tsize = ssize; -+ } -+ } -+ } -+ } ++/* Define to 1 if your C compiler doesn't accept -c and -o together. */ ++/* #undef NO_MINUS_C_MINUS_O */ + -+ if (tbase != CMFAIL) { ++/* Name of package */ ++#define PACKAGE "libffi" + -+ if ((m->footprint += tsize) > m->max_footprint) -+ m->max_footprint = m->footprint; ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+ if (!is_initialized(m)) { /* first-time initialization */ -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmap_flag); -+ m->magic = mparams.magic; -+ init_bins(m); -+ if (is_global(m)) -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); -+ else { -+ /* Offset top by embedded malloc_state */ -+ mchunkptr mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); -+ } -+ } ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+ else { -+ /* Try to merge with an existing segment */ -+ msegmentptr sp = &m->seg; -+ while (sp != 0 && tbase != sp->base + sp->size) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && -+ segment_holds(sp, m->top)) { /* append */ -+ sp->size += tsize; -+ init_top(m, m->top, m->topsize + tsize); -+ } -+ else { -+ if (tbase < m->least_addr) -+ m->least_addr = tbase; -+ sp = &m->seg; -+ while (sp != 0 && sp->base != tbase + tsize) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { -+ char* oldbase = sp->base; -+ sp->base = tbase; -+ sp->size += tsize; -+ return prepend_alloc(m, tbase, oldbase, nb); -+ } -+ else -+ add_segment(m, tbase, tsize, mmap_flag); -+ } -+ } ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.2.1" + -+ if (nb < m->topsize) { /* Allocate from new or extended top space */ -+ size_t rsize = m->topsize -= nb; -+ mchunkptr p = m->top; -+ mchunkptr r = m->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); -+ check_top_chunk(m, m->top); -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+ } -+ } ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+ MALLOC_FAILURE_ACTION; -+ return 0; -+} ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+/* ----------------------- system deallocation -------------------------- */ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.2.1" + -+/* Unmap and unlink any mmapped segments that don't contain used chunks */ -+static size_t release_unused_segments(mstate m) { -+ size_t released = 0; -+ msegmentptr pred = &m->seg; -+ msegmentptr sp = pred->next; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ msegmentptr next = sp->next; -+ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { -+ mchunkptr p = align_as_chunk(base); -+ size_t psize = chunksize(p); -+ /* Can unmap if first chunk holds entire segment and not pinned */ -+ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { -+ tchunkptr tp = (tchunkptr)p; -+ assert(segment_holds(sp, (char*)sp)); -+ if (p == m->dv) { -+ m->dv = 0; -+ m->dvsize = 0; -+ } -+ else { -+ unlink_large_chunk(m, tp); -+ } -+ if (CALL_MUNMAP(base, size) == 0) { -+ released += size; -+ m->footprint -= size; -+ /* unlink obsoleted record */ -+ sp = pred; -+ sp->next = next; -+ } -+ else { /* back out if cannot unmap */ -+ insert_large_chunk(m, tp, psize); -+ } -+ } -+ } -+ pred = sp; -+ sp = next; -+ } -+ return released; -+} ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+static int sys_trim(mstate m, size_t pad) { -+ size_t released = 0; -+ if (pad < MAX_REQUEST && is_initialized(m)) { -+ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 + -+ if (m->topsize > pad) { -+ /* Shrink top space in granularity-size units, keeping at least one */ -+ size_t unit = mparams.granularity; -+ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - -+ SIZE_T_ONE) * unit; -+ msegmentptr sp = segment_holding(m, (char*)m->top); ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 + -+ if (!is_extern_segment(sp)) { -+ if (is_mmapped_segment(sp)) { -+ if (HAVE_MMAP && -+ sp->size >= extra && -+ !has_segment_link(m, sp)) { /* can't shrink if pinned */ -+ size_t newsize = sp->size - extra; -+ /* Prefer mremap, fall back to munmap */ -+ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || -+ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { -+ released = extra; -+ } -+ } -+ } -+ else if (HAVE_MORECORE) { -+ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ -+ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; -+ ACQUIRE_MORECORE_LOCK(); -+ { -+ /* Make sure end of memory is where we last set it. */ -+ char* old_br = (char*)(CALL_MORECORE(0)); -+ if (old_br == sp->base + sp->size) { -+ char* rel_br = (char*)(CALL_MORECORE(-extra)); -+ char* new_br = (char*)(CALL_MORECORE(0)); -+ if (rel_br != CMFAIL && new_br < old_br) -+ released = old_br - new_br; -+ } -+ } -+ RELEASE_MORECORE_LOCK(); -+ } -+ } ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+ if (released != 0) { -+ sp->size -= released; -+ m->footprint -= released; -+ init_top(m, m->top, m->topsize - released); -+ check_top_chunk(m, m->top); -+ } -+ } ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+ /* Unmap any unused mmapped segments */ -+ if (HAVE_MMAP) -+ released += release_unused_segments(m); ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 ++ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ ++ ++/* Version number of package */ ++#define VERSION "3.2.1" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+ /* On failure, disable autotrim to avoid repeated failed future calls */ -+ if (released == 0) -+ m->trim_check = MAX_SIZE_T; -+ } ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+ return (released != 0)? 1 : 0; -+} + -+/* ---------------------------- malloc support --------------------------- */ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+/* allocate a large request from the best fitting chunk in a treebin */ -+static void* tmalloc_large(mstate m, size_t nb) { -+ tchunkptr v = 0; -+ size_t rsize = -nb; /* Unsigned negation */ -+ tchunkptr t; -+ bindex_t idx; -+ compute_tree_index(nb, idx); + -+ if ((t = *treebin_at(m, idx)) != 0) { -+ /* Traverse tree for this bin looking for node with size == nb */ -+ size_t sizebits = nb << leftshift_for_tree_index(idx); -+ tchunkptr rst = 0; /* The deepest untaken right subtree */ -+ for (;;) { -+ tchunkptr rt; -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ v = t; -+ if ((rsize = trem) == 0) -+ break; -+ } -+ rt = t->child[1]; -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ if (rt != 0 && rt != t) -+ rst = rt; -+ if (t == 0) { -+ t = rst; /* set t to least subtree holding sizes > nb */ -+ break; -+ } -+ sizebits <<= 1; -+ } -+ } + -+ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ -+ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; -+ if (leftbits != 0) { -+ bindex_t i; -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ t = *treebin_at(m, i); -+ } -+ } ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,220 @@ ++#ifdef __x86_64__ + -+ while (t != 0) { /* find smallest of tree or subtree */ -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ t = leftmost_child(t); -+ } ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+ /* If dv is a better fit, return 0 so malloc will use it */ -+ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { -+ if (RTCHECK(ok_address(m, v))) { /* split */ -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ insert_chunk(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } -+ CORRUPTION_ERROR_ACTION(m); -+ } -+ return 0; -+} ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+/* allocate a small request from the best fitting chunk in a treebin */ -+static void* tmalloc_small(mstate m, size_t nb) { -+ tchunkptr t, v; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leastbit = least_bit(m->treemap); -+ compute_bit2idx(leastbit, i); ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+ v = t = *treebin_at(m, i); -+ rsize = chunksize(t) - nb; ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+ while ((t = leftmost_child(t)) != 0) { -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ } ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+ if (RTCHECK(ok_address(m, v))) { -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+ CORRUPTION_ERROR_ACTION(m); -+ return 0; -+} ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + -+/* --------------------------- realloc support --------------------------- */ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { -+ if (bytes >= MAX_REQUEST) { -+ MALLOC_FAILURE_ACTION; -+ return 0; -+ } -+ if (!PREACTION(m)) { -+ mchunkptr oldp = mem2chunk(oldmem); -+ size_t oldsize = chunksize(oldp); -+ mchunkptr next = chunk_plus_offset(oldp, oldsize); -+ mchunkptr newp = 0; -+ void* extra = 0; ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 + -+ /* Try to either shrink or extend into top. Else malloc-copy-free */ ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && -+ ok_next(oldp, next) && ok_pinuse(next))) { -+ size_t nb = request2size(bytes); -+ if (is_mmapped(oldp)) -+ newp = mmap_resize(m, oldp, nb); -+ else if (oldsize >= nb) { /* already big enough */ -+ size_t rsize = oldsize - nb; -+ newp = oldp; -+ if (rsize >= MIN_CHUNK_SIZE) { -+ mchunkptr remainder = chunk_plus_offset(newp, nb); -+ set_inuse(m, newp, nb); -+ set_inuse(m, remainder, rsize); -+ extra = chunk2mem(remainder); -+ } -+ } -+ else if (next == m->top && oldsize + m->topsize > nb) { -+ /* Expand into top */ -+ size_t newsize = oldsize + m->topsize; -+ size_t newtopsize = newsize - nb; -+ mchunkptr newtop = chunk_plus_offset(oldp, nb); -+ set_inuse(m, oldp, nb); -+ newtop->head = newtopsize |PINUSE_BIT; -+ m->top = newtop; -+ m->topsize = newtopsize; -+ newp = oldp; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(m, oldmem); -+ POSTACTION(m); -+ return 0; -+ } ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+ POSTACTION(m); ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+ if (newp != 0) { -+ if (extra != 0) { -+ internal_free(m, extra); -+ } -+ check_inuse_chunk(m, newp); -+ return chunk2mem(newp); -+ } -+ else { -+ void* newmem = internal_malloc(m, bytes); -+ if (newmem != 0) { -+ size_t oc = oldsize - overhead_for(oldp); -+ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); -+ internal_free(m, oldmem); -+ } -+ return newmem; -+ } -+ } -+ return 0; -+} ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+/* --------------------------- memalign support -------------------------- */ ++/* Define if your assembler supports .ascii. */ ++/* #undef HAVE_AS_ASCII_PSEUDO_OP */ + -+static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { -+ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ -+ return internal_malloc(m, bytes); -+ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ -+ alignment = MIN_CHUNK_SIZE; -+ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ -+ size_t a = MALLOC_ALIGNMENT << 1; -+ while (a < alignment) a <<= 1; -+ alignment = a; -+ } -+ -+ if (bytes >= MAX_REQUEST - alignment) { -+ if (m != 0) { /* Test isn't needed but avoids compiler warning */ -+ MALLOC_FAILURE_ACTION; -+ } -+ } -+ else { -+ size_t nb = request2size(bytes); -+ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; -+ char* mem = (char*)internal_malloc(m, req); -+ if (mem != 0) { -+ void* leader = 0; -+ void* trailer = 0; -+ mchunkptr p = mem2chunk(mem); ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+ if (PREACTION(m)) return 0; -+ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ -+ /* -+ Find an aligned spot inside chunk. Since we need to give -+ back leading space in a chunk of at least MIN_CHUNK_SIZE, if -+ the first calculation places us at a spot with less than -+ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. -+ We've allocated enough total room so that this is always -+ possible. -+ */ -+ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + -+ alignment - -+ SIZE_T_ONE)) & -+ -alignment)); -+ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? -+ br : br+alignment; -+ mchunkptr newp = (mchunkptr)pos; -+ size_t leadsize = pos - (char*)(p); -+ size_t newsize = chunksize(p) - leadsize; ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ -+ newp->prev_foot = p->prev_foot + leadsize; -+ newp->head = (newsize|CINUSE_BIT); -+ } -+ else { /* Otherwise, give back leader, use the rest */ -+ set_inuse(m, newp, newsize); -+ set_inuse(m, p, leadsize); -+ leader = chunk2mem(p); -+ } -+ p = newp; -+ } ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+ /* Give back spare room at the end */ -+ if (!is_mmapped(p)) { -+ size_t size = chunksize(p); -+ if (size > nb + MIN_CHUNK_SIZE) { -+ size_t remainder_size = size - nb; -+ mchunkptr remainder = chunk_plus_offset(p, nb); -+ set_inuse(m, p, nb); -+ set_inuse(m, remainder, remainder_size); -+ trailer = chunk2mem(remainder); -+ } -+ } ++/* Define if your assembler supports .string. */ ++/* #undef HAVE_AS_STRING_PSEUDO_OP */ + -+ assert (chunksize(p) >= nb); -+ assert((((size_t)(chunk2mem(p))) % alignment) == 0); -+ check_inuse_chunk(m, p); -+ POSTACTION(m); -+ if (leader != 0) { -+ internal_free(m, leader); -+ } -+ if (trailer != 0) { -+ internal_free(m, trailer); -+ } -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+/* ------------------------ comalloc/coalloc support --------------------- */ ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+static void** ialloc(mstate m, -+ size_t n_elements, -+ size_t* sizes, -+ int opts, -+ void* chunks[]) { -+ /* -+ This provides common support for independent_X routines, handling -+ all of the combinations that can result. ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+ The opts arg has: -+ bit 0 set if all elements are same size (using sizes[0]) -+ bit 1 set if elements should be zeroed -+ */ ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+ size_t element_size; /* chunksize of each element, if all same */ -+ size_t contents_size; /* total size of elements */ -+ size_t array_size; /* request size of pointer array */ -+ void* mem; /* malloced aggregate space */ -+ mchunkptr p; /* corresponding chunk */ -+ size_t remainder_size; /* remaining bytes while splitting */ -+ void** marray; /* either "chunks" or malloced ptr array */ -+ mchunkptr array_chunk; /* chunk for malloced ptr array */ -+ flag_t was_enabled; /* to disable mmap */ -+ size_t size; -+ size_t i; ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+ /* compute array length, if needed */ -+ if (chunks != 0) { -+ if (n_elements == 0) -+ return chunks; /* nothing to do */ -+ marray = chunks; -+ array_size = 0; -+ } -+ else { -+ /* if empty req, must still return chunk representing empty array */ -+ if (n_elements == 0) -+ return (void**)internal_malloc(m, 0); -+ marray = 0; -+ array_size = request2size(n_elements * (sizeof(void*))); -+ } ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 + -+ /* compute total element size */ -+ if (opts & 0x1) { /* all-same-size */ -+ element_size = request2size(*sizes); -+ contents_size = n_elements * element_size; -+ } -+ else { /* add up all the sizes */ -+ element_size = 0; -+ contents_size = 0; -+ for (i = 0; i != n_elements; ++i) -+ contents_size += request2size(sizes[i]); -+ } ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+ size = contents_size + array_size; ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+ /* -+ Allocate the aggregate chunk. First disable direct-mmapping so -+ malloc won't use it, since we would not be able to later -+ free/realloc space internal to a segregated mmap region. -+ */ -+ was_enabled = use_mmap(m); -+ disable_mmap(m); -+ mem = internal_malloc(m, size - CHUNK_OVERHEAD); -+ if (was_enabled) -+ enable_mmap(m); -+ if (mem == 0) -+ return 0; ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+ if (PREACTION(m)) return 0; -+ p = mem2chunk(mem); -+ remainder_size = chunksize(p); ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+ assert(!is_mmapped(p)); ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+ if (opts & 0x2) { /* optionally clear the elements */ -+ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); -+ } ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+ /* If not provided, allocate the pointer array as final part of chunk */ -+ if (marray == 0) { -+ size_t array_chunk_size; -+ array_chunk = chunk_plus_offset(p, contents_size); -+ array_chunk_size = remainder_size - contents_size; -+ marray = (void**) (chunk2mem(array_chunk)); -+ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); -+ remainder_size = contents_size; -+ } ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+ /* split out elements */ -+ for (i = 0; ; ++i) { -+ marray[i] = chunk2mem(p); -+ if (i != n_elements-1) { -+ if (element_size != 0) -+ size = element_size; -+ else -+ size = request2size(sizes[i]); -+ remainder_size -= size; -+ set_size_and_pinuse_of_inuse_chunk(m, p, size); -+ p = chunk_plus_offset(p, size); -+ } -+ else { /* the final element absorbs any overallocation slop */ -+ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); -+ break; -+ } -+ } ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+#if DEBUG -+ if (marray != chunks) { -+ /* final element must have exactly exhausted chunk */ -+ if (element_size != 0) { -+ assert(remainder_size == element_size); -+ } -+ else { -+ assert(remainder_size == request2size(sizes[i])); -+ } -+ check_inuse_chunk(m, mem2chunk(marray)); -+ } -+ for (i = 0; i != n_elements; ++i) -+ check_inuse_chunk(m, mem2chunk(marray[i])); ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+#endif /* DEBUG */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+ POSTACTION(m); -+ return marray; -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+/* -------------------------- public routines ---------------------------- */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+#if !ONLY_MSPACES ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+void* dlmalloc(size_t bytes) { -+ /* -+ Basic algorithm: -+ If a small request (< 256 bytes minus per-chunk overhead): -+ 1. If one exists, use a remainderless chunk in associated smallbin. -+ (Remainderless means that there are too few excess bytes to -+ represent as a chunk.) -+ 2. If it is big enough, use the dv chunk, which is normally the -+ chunk adjacent to the one used for the most recent small request. -+ 3. If one exists, split the smallest available chunk in a bin, -+ saving remainder in dv. -+ 4. If it is big enough, use the top chunk. -+ 5. If available, get memory from system and use it -+ Otherwise, for a large request: -+ 1. Find the smallest available binned chunk that fits, and use it -+ if it is better fitting than dv chunk, splitting if necessary. -+ 2. If better fitting than any binned chunk, use the dv chunk. -+ 3. If it is big enough, use the top chunk. -+ 4. If request size >= mmap threshold, try to directly mmap this chunk. -+ 5. If available, get memory from system and use it ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" ++ ++/* Define to 1 if your C compiler doesn't accept -c and -o together. */ ++/* #undef NO_MINUS_C_MINUS_O */ ++ ++/* Name of package */ ++#define PACKAGE "libffi" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+ The ugly goto's here ensure that postaction occurs along all paths. -+ */ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.2.1" + -+ if (!PREACTION(gm)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = gm->smallmap >> idx; ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(gm, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(gm, b, p, idx); -+ set_inuse_and_pinuse(gm, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+ else if (nb > gm->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(gm, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(gm, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(gm, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(gm, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.2.1" + -+ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+ if (nb <= gm->dvsize) { -+ size_t rsize = gm->dvsize - nb; -+ mchunkptr p = gm->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); -+ gm->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = gm->dvsize; -+ gm->dvsize = 0; -+ gm->dv = 0; -+ set_inuse_and_pinuse(gm, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 + -+ else if (nb < gm->topsize) { /* Split top */ -+ size_t rsize = gm->topsize -= nb; -+ mchunkptr p = gm->top; -+ mchunkptr r = gm->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(gm, gm->top); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 + -+ mem = sys_alloc(gm, nb); ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+ postaction: -+ POSTACTION(gm); -+ return mem; -+ } ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+ return 0; -+} ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+void dlfree(void* mem) { -+ /* -+ Consolidate freed chunks with preceding or succeeding bordering -+ free chunks, if they exist, and then place in a bin. Intermixed -+ with special cases for top, dv, mmapped chunks, and usage errors. -+ */ ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+#else /* FOOTERS */ -+#define fm gm -+#endif /* FOOTERS */ -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } ++/* Version number of package */ ++#define VERSION "3.2.1" + -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+#if !FOOTERS -+#undef fm -+#endif /* FOOTERS */ -+} ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif ++ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ ++ ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+void* dlcalloc(size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = dlmalloc(req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} + -+void* dlrealloc(void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return dlmalloc(bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ dlfree(oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if ! FOOTERS -+ mstate m = gm; -+#else /* FOOTERS */ -+ mstate m = get_mstate_for(mem2chunk(oldmem)); -+ if (!ok_magic(m)) { -+ USAGE_ERROR_ACTION(m, oldmem); -+ return 0; -+ } -+#endif /* FOOTERS */ -+ return internal_realloc(m, oldmem, bytes); -+ } -+} + -+void* dlmemalign(size_t alignment, size_t bytes) { -+ return internal_memalign(gm, alignment, bytes); -+} ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-04-26 08:17:42.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+void** dlindependent_calloc(size_t n_elements, size_t elem_size, -+ void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ return ialloc(gm, n_elements, &sz, 3, chunks); -+} ++#include + -+void** dlindependent_comalloc(size_t n_elements, size_t sizes[], -+ void* chunks[]) { -+ return ialloc(gm, n_elements, sizes, 0, chunks); -+} + -+void* dlvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, bytes); -+} ++#endif ++#ifdef __i386__ + -+void* dlpvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -+} ++#include + -+int dlmalloc_trim(size_t pad) { -+ int result = 0; -+ if (!PREACTION(gm)) { -+ result = sys_trim(gm, pad); -+ POSTACTION(gm); -+ } -+ return result; -+} + -+size_t dlmalloc_footprint(void) { -+ return gm->footprint; -+} ++#endif ++#ifdef __arm__ + -+size_t dlmalloc_max_footprint(void) { -+ return gm->max_footprint; -+} ++#include + -+#if !NO_MALLINFO -+struct mallinfo dlmallinfo(void) { -+ return internal_mallinfo(gm); -+} -+#endif /* NO_MALLINFO */ + -+void dlmalloc_stats() { -+ internal_malloc_stats(gm); -+} ++#endif ++#ifdef __x86_64__ + -+size_t dlmalloc_usable_size(void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ if (cinuse(p)) -+ return chunksize(p) - overhead_for(p); -+ } -+ return 0; -+} ++#include + -+int dlmallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} + -+#endif /* !ONLY_MSPACES */ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,68 @@ ++#ifdef __arm64__ + -+/* ----------------------------- user mspaces ---------------------------- */ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + -+#if MSPACES ++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: + -+static mstate init_user_mstate(char* tbase, size_t tsize) { -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ mchunkptr mn; -+ mchunkptr msp = align_as_chunk(tbase); -+ mstate m = (mstate)(chunk2mem(msp)); -+ memset(m, 0, msize); -+ INITIAL_LOCK(&m->mutex); -+ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = m->footprint = m->max_footprint = tsize; -+ m->magic = mparams.magic; -+ m->mflags = mparams.default_mflags; -+ disable_contiguous(m); -+ init_bins(m); -+ mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); -+ check_top_chunk(m, m->top); -+ return m; -+} ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+mspace create_mspace(size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ ++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. */ + -+ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ size_t rs = ((capacity == 0)? mparams.granularity : -+ (capacity + TOP_FOOT_SIZE + msize)); -+ size_t tsize = granularity_align(rs); -+ char* tbase = (char*)(CALL_MMAP(tsize)); -+ if (tbase != CMFAIL) { -+ m = init_user_mstate(tbase, tsize); -+ set_segment_flags(&m->seg, IS_MMAPPED_BIT); -+ set_lock(m, locked); -+ } -+ } -+ return (mspace)m; -+} ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+mspace create_mspace_with_base(void* base, size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif + -+ if (capacity > msize + TOP_FOOT_SIZE && -+ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ m = init_user_mstate((char*)base, capacity); -+ set_segment_flags(&m->seg, EXTERN_BIT); -+ set_lock(m, locked); -+ } -+ return (mspace)m; -+} ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; + -+size_t destroy_mspace(mspace msp) { -+ size_t freed = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ msegmentptr sp = &ms->seg; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ flag_t flag = get_segment_flags(sp); -+ sp = sp->next; -+ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && -+ CALL_MUNMAP(base, size) == 0) -+ freed += size; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return freed; -+} ++typedef enum ffi_abi ++ { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++ } ffi_abi; ++#endif + -+/* -+ mspace versions of routines are near-clones of the global -+ versions. This is not so nice but better than the alternatives. -+*/ ++/* ---- Definitions for closures ----------------------------------------- */ + ++#define FFI_CLOSURES 1 ++#define FFI_TRAMPOLINE_SIZE 36 ++#define FFI_NATIVE_RAW_API 0 + -+void* mspace_malloc(mspace msp, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (!PREACTION(ms)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = ms->smallmap >> idx; ++/* ---- Internal ---- */ + -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(ms, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(ms, b, p, idx); -+ set_inuse_and_pinuse(ms, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } ++#if defined (__APPLE__) ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags; unsigned aarch64_nfixedargs ++#else ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags ++#endif + -+ else if (nb > ms->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(ms, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(ms, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(ms, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(ms, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } ++#define AARCH64_FFI_WITH_V_BIT 0 + -+ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } ++#define AARCH64_N_XREG 32 ++#define AARCH64_N_VREG 32 ++#define AARCH64_CALL_CONTEXT_SIZE (AARCH64_N_XREG * 8 + AARCH64_N_VREG * 16) + -+ if (nb <= ms->dvsize) { -+ size_t rsize = ms->dvsize - nb; -+ mchunkptr p = ms->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); -+ ms->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = ms->dvsize; -+ ms->dvsize = 0; -+ ms->dv = 0; -+ set_inuse_and_pinuse(ms, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } ++#endif + -+ else if (nb < ms->topsize) { /* Split top */ -+ size_t rsize = ms->topsize -= nb; -+ mchunkptr p = ms->top; -+ mchunkptr r = ms->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(ms, ms->top); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } + -+ mem = sys_alloc(ms, nb); ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,76 @@ ++#ifdef __arm__ + -+ postaction: -+ POSTACTION(ms); -+ return mem; -+ } ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012 Anthony Green ++ Copyright (c) 2010 CodeSourcery ++ Copyright (c) 1996-2003 Red Hat, Inc. + -+ return 0; -+} ++ Target configuration macros for ARM. + -+void mspace_free(mspace msp, void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate fm = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } ++ 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: + -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+} ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = internal_malloc(ms, req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} ++ 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. + -+void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return mspace_malloc(msp, bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ mspace_free(msp, oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if FOOTERS -+ mchunkptr p = mem2chunk(oldmem); -+ mstate ms = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate ms = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_realloc(ms, oldmem, bytes); -+ } -+} ++ ----------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H ++ ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif ++ ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_VFP, ++ FFI_LAST_ABI, ++#ifdef __ARM_PCS_VFP ++ FFI_DEFAULT_ABI = FFI_VFP, ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV, ++#endif ++} ffi_abi; ++#endif + -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_memalign(ms, alignment, bytes); -+} ++#define FFI_EXTRA_CIF_FIELDS \ ++ int vfp_used; \ ++ short vfp_reg_free, vfp_nargs; \ ++ signed char vfp_args[16] \ + -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, &sz, 3, chunks); -+} ++/* Internally used. */ ++#define FFI_TYPE_STRUCT_VFP_FLOAT (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2) + -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, sizes, 0, chunks); -+} ++#define FFI_TARGET_SPECIFIC_VARIADIC + -+int mspace_trim(mspace msp, size_t pad) { -+ int result = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ if (!PREACTION(ms)) { -+ result = sys_trim(ms, pad); -+ POSTACTION(ms); -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return result; -+} ++/* ---- Definitions for closures ----------------------------------------- */ + -+void mspace_malloc_stats(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ internal_malloc_stats(ms); -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+} ++#define FFI_CLOSURES 1 ++#define FFI_TRAMPOLINE_SIZE 20 ++#define FFI_NATIVE_RAW_API 0 + -+size_t mspace_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} ++#endif + + -+size_t mspace_max_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->max_footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,155 @@ ++#ifdef __i386__ + ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. + -+#if !NO_MALLINFO -+struct mallinfo mspace_mallinfo(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return internal_mallinfo(ms); -+} -+#endif /* NO_MALLINFO */ ++ Target configuration macros for x86 and x86-64. + -+int mspace_mallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} ++ 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: + -+#endif /* MSPACES */ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+/* -------------------- Alternative MORECORE functions ------------------- */ ++ 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. + -+/* -+ Guidelines for creating a custom version of MORECORE: ++ ----------------------------------------------------------------------- */ + -+ * For best performance, MORECORE should allocate in multiples of pagesize. -+ * MORECORE may allocate more memory than requested. (Or even less, -+ but this will usually result in a malloc failure.) -+ * MORECORE must not allocate memory when given argument zero, but -+ instead return one past the end address of memory from previous -+ nonzero call. -+ * For best performance, consecutive calls to MORECORE with positive -+ arguments should return increasing addresses, indicating that -+ space has been contiguously extended. -+ * Even though consecutive calls to MORECORE need not return contiguous -+ addresses, it must be OK for malloc'ed chunks to span multiple -+ regions in those cases where they do happen to be contiguous. -+ * MORECORE need not handle negative arguments -- it may instead -+ just return MFAIL when given negative arguments. -+ Negative arguments are always multiples of pagesize. MORECORE -+ must not misinterpret negative args as large positive unsigned -+ args. You can suppress all such calls from even occurring by defining -+ MORECORE_CANNOT_TRIM, ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+ As an example alternative MORECORE, here is a custom allocator -+ kindly contributed for pre-OSX macOS. It uses virtually but not -+ necessarily physically contiguous non-paged memory (locked in, -+ present and won't get swapped out). You can use it by uncommenting -+ this section, adding some #includes, and setting up the appropriate -+ defines above: ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif + -+ #define MORECORE osMoreCore ++/* ---- System specific configurations ----------------------------------- */ + -+ There is also a shutdown routine that should somehow be called for -+ cleanup upon program exit. ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY + -+ #define MAX_POOL_ENTRIES 100 -+ #define MINIMUM_MORECORE_SIZE (64 * 1024U) -+ static int next_os_pool; -+ void *our_os_pools[MAX_POOL_ENTRIES]; ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif + -+ void *osMoreCore(int size) -+ { -+ void *ptr = 0; -+ static void *sbrk_top = 0; ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif + -+ if (size > 0) -+ { -+ if (size < MINIMUM_MORECORE_SIZE) -+ size = MINIMUM_MORECORE_SIZE; -+ if (CurrentExecutionLevel() == kTaskLevel) -+ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); -+ if (ptr == 0) -+ { -+ return (void *) MFAIL; -+ } -+ // save ptrs so they can be freed during cleanup -+ our_os_pools[next_os_pool] = ptr; -+ next_os_pool++; -+ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); -+ sbrk_top = (char *) ptr + size; -+ return ptr; -+ } -+ else if (size < 0) -+ { -+ // we don't currently support shrink behavior -+ return (void *) MFAIL; -+ } -+ else -+ { -+ return sbrk_top; -+ } -+ } ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#define FFI_TARGET_HAS_COMPLEX_TYPE + -+ // cleanup any allocated memory pools -+ // called as last thing before shutting down driver ++/* ---- Generic type definitions ----------------------------------------- */ ++ ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif ++ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ ++ /* ---- Intel x86 Win32 ---------- */ ++#ifdef X86_WIN32 ++ FFI_SYSV, ++ FFI_STDCALL, ++ FFI_THISCALL, ++ FFI_FASTCALL, ++ FFI_MS_CDECL, ++ FFI_PASCAL, ++ FFI_REGISTER, ++ FFI_LAST_ABI, ++#ifdef _MSC_VER ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++ ++#elif defined(X86_WIN64) ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 ++ ++#else ++ /* ---- Intel x86 and AMD x86-64 - */ ++ FFI_SYSV, ++ FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ ++ FFI_THISCALL, ++ FFI_FASTCALL, ++ FFI_STDCALL, ++ FFI_PASCAL, ++ FFI_REGISTER, ++ FFI_LAST_ABI, ++#if defined(__i386__) || defined(__i386) ++ FFI_DEFAULT_ABI = FFI_SYSV ++#else ++ FFI_DEFAULT_ABI = FFI_UNIX64 ++#endif ++#endif ++} ffi_abi; ++#endif + -+ void osCleanupMem(void) -+ { -+ void **ptr; ++/* ---- Definitions for closures ----------------------------------------- */ + -+ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) -+ if (*ptr) -+ { -+ PoolDeallocate(*ptr); -+ *ptr = 0; -+ } -+ } ++#define FFI_CLOSURES 1 ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) + -+*/ ++#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_NATIVE_RAW_API 0 ++#else ++#ifdef X86_WIN32 ++#define FFI_TRAMPOLINE_SIZE 52 ++#else ++#ifdef X86_WIN64 ++#define FFI_TRAMPOLINE_SIZE 29 ++#define FFI_NATIVE_RAW_API 0 ++#define FFI_NO_RAW_API 1 ++#else ++#define FFI_TRAMPOLINE_SIZE 10 ++#endif ++#endif ++#ifndef X86_WIN64 ++#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif ++#endif + ++#endif + -+/* ----------------------------------------------------------------------- -+History: -+ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) -+ * Add max_footprint functions -+ * Ensure all appropriate literals are size_t -+ * Fix conditional compilation problem for some #define settings -+ * Avoid concatenating segments with the one provided -+ in create_mspace_with_base -+ * Rename some variables to avoid compiler shadowing warnings -+ * Use explicit lock initialization. -+ * Better handling of sbrk interference. -+ * Simplify and fix segment insertion, trimming and mspace_destroy -+ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x -+ * Thanks especially to Dennis Flanagan for help on these. + -+ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) -+ * Fix memalign brace error. + -+ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) -+ * Fix improper #endif nesting in C++ -+ * Add explicit casts needed for C++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-04-26 08:18:27.000000000 +0800 +@@ -0,0 +1,155 @@ ++#ifdef __x86_64__ + -+ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) -+ * Use trees for large bins -+ * Support mspaces -+ * Use segments to unify sbrk-based and mmap-based system allocation, -+ removing need for emulation on most platforms without sbrk. -+ * Default safety checks -+ * Optional footer checks. Thanks to William Robertson for the idea. -+ * Internal code refactoring -+ * Incorporate suggestions and platform-specific changes. -+ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, -+ Aaron Bachmann, Emery Berger, and others. -+ * Speed up non-fastbin processing enough to remove fastbins. -+ * Remove useless cfree() to avoid conflicts with other apps. -+ * Remove internal memcpy, memset. Compilers handle builtins better. -+ * Remove some options that no one ever used and rename others. ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. + -+ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) -+ * Fix malloc_state bitmap array misdeclaration ++ Target configuration macros for x86 and x86-64. + -+ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) -+ * Allow tuning of FIRST_SORTED_BIN_SIZE -+ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. -+ * Better detection and support for non-contiguousness of MORECORE. -+ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger -+ * Bypass most of malloc if no frees. Thanks To Emery Berger. -+ * Fix freeing of old top non-contiguous chunk im sysmalloc. -+ * Raised default trim and map thresholds to 256K. -+ * Fix mmap-related #defines. Thanks to Lubos Lunak. -+ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. -+ * Branch-free bin calculation -+ * Default trim and mmap thresholds now 256K. ++ 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: + -+ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) -+ * Introduce independent_comalloc and independent_calloc. -+ Thanks to Michael Pachos for motivation and help. -+ * Make optional .h file available -+ * Allow > 2GB requests on 32bit systems. -+ * new WIN32 sbrk, mmap, munmap, lock code from . -+ Thanks also to Andreas Mueller , -+ and Anonymous. -+ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for -+ helping test this.) -+ * memalign: check alignment arg -+ * realloc: don't try to shift chunks backwards, since this -+ leads to more fragmentation in some programs and doesn't -+ seem to help in any others. -+ * Collect all cases in malloc requiring system memory into sysmalloc -+ * Use mmap as backup to sbrk -+ * Place all internal state in malloc_state -+ * Introduce fastbins (although similar to 2.5.1) -+ * Many minor tunings and cosmetic improvements -+ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK -+ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS -+ Thanks to Tony E. Bennett and others. -+ * Include errno.h to support default failure action. ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) -+ * return null for negative arguments -+ * Added Several WIN32 cleanups from Martin C. Fong -+ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' -+ (e.g. WIN32 platforms) -+ * Cleanup header file inclusion for WIN32 platforms -+ * Cleanup code to avoid Microsoft Visual C++ compiler complaints -+ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing -+ memory allocation routines -+ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) -+ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to -+ usage of 'assert' in non-WIN32 code -+ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to -+ avoid infinite loop -+ * Always call 'fREe()' rather than 'free()' ++ 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. + -+ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) -+ * Fixed ordering problem with boundary-stamping ++ ----------------------------------------------------------------------- */ + -+ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) -+ * Added pvalloc, as recommended by H.J. Liu -+ * Added 64bit pointer support mainly from Wolfram Gloger -+ * Added anonymously donated WIN32 sbrk emulation -+ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen -+ * malloc_extend_top: fix mask error that caused wastage after -+ foreign sbrks -+ * Add linux mremap support code from HJ Liu ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) -+ * Integrated most documentation with the code. -+ * Add support for mmap, with help from -+ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Use last_remainder in more cases. -+ * Pack bins using idea from colin@nyx10.cs.du.edu -+ * Use ordered bins instead of best-fit threshold -+ * Eliminate block-local decls to simplify tracing and debugging. -+ * Support another case of realloc via move into top -+ * Fix error occurring when initial sbrk_base not word-aligned. -+ * Rely on page size for units instead of SBRK_UNIT to -+ avoid surprises about sbrk alignment conventions. -+ * Add mallinfo, mallopt. Thanks to Raymond Nijssen -+ (raymond@es.ele.tue.nl) for the suggestion. -+ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. -+ * More precautions for cases where other routines call sbrk, -+ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Added macros etc., allowing use in linux libc from -+ H.J. Lu (hjl@gnu.ai.mit.edu) -+ * Inverted this history list ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif + -+ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) -+ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. -+ * Removed all preallocation code since under current scheme -+ the work required to undo bad preallocations exceeds -+ the work saved in good cases for most test programs. -+ * No longer use return list or unconsolidated bins since -+ no scheme using them consistently outperforms those that don't -+ given above changes. -+ * Use best fit for very large chunks to prevent some worst-cases. -+ * Added some support for debugging ++/* ---- System specific configurations ----------------------------------- */ + -+ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) -+ * Removed footers when chunks are in use. Thanks to -+ Paul Wilson (wilson@cs.texas.edu) for the suggestion. ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY + -+ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) -+ * Added malloc_trim, with help from Wolfram Gloger -+ (wmglo@Dent.MED.Uni-Muenchen.DE). ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif + -+ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif + -+ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) -+ * realloc: try to expand in both directions -+ * malloc: swap order of clean-bin strategy; -+ * realloc: only conditionally expand backwards -+ * Try not to scavenge used bins -+ * Use bin counts as a guide to preallocation -+ * Occasionally bin return list chunks in first scan -+ * Add a few optimizations from colin@nyx10.cs.du.edu ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#define FFI_TARGET_HAS_COMPLEX_TYPE + -+ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) -+ * faster bin computation & slightly different binning -+ * merged all consolidations to one part of malloc proper -+ (eliminating old malloc_find_space & malloc_clean_bin) -+ * Scan 2 returns chunks (not just 1) -+ * Propagate failure in realloc if malloc returns 0 -+ * Add stuff to allow compilation on non-ANSI compilers -+ from kpv@research.att.com ++/* ---- Generic type definitions ----------------------------------------- */ + -+ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) -+ * removed potential for odd address access in prev_chunk -+ * removed dependency on getpagesize.h -+ * misc cosmetics and a bit more internal documentation -+ * anticosmetics: mangled names in macros to evade debugger strangeness -+ * tested on sparc, hp-700, dec-mips, rs6000 -+ with gcc & native cc (hp, dec only) allowing -+ Detlefs & Zorn comparison study (in SIGPLAN Notices.) ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif + -+ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) -+ * Based loosely on libg++-1.2X malloc. (It retains some of the overall -+ structure of old version, but most details differ.) -+ -+*/ -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-03-12 21:32:24.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, + -+#include ++ /* ---- Intel x86 Win32 ---------- */ ++#ifdef X86_WIN32 ++ FFI_SYSV, ++ FFI_STDCALL, ++ FFI_THISCALL, ++ FFI_FASTCALL, ++ FFI_MS_CDECL, ++ FFI_PASCAL, ++ FFI_REGISTER, ++ FFI_LAST_ABI, ++#ifdef _MSC_VER ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif + ++#elif defined(X86_WIN64) ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 + ++#else ++ /* ---- Intel x86 and AMD x86-64 - */ ++ FFI_SYSV, ++ FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ ++ FFI_THISCALL, ++ FFI_FASTCALL, ++ FFI_STDCALL, ++ FFI_PASCAL, ++ FFI_REGISTER, ++ FFI_LAST_ABI, ++#if defined(__i386__) || defined(__i386) ++ FFI_DEFAULT_ABI = FFI_SYSV ++#else ++ FFI_DEFAULT_ABI = FFI_UNIX64 ++#endif ++#endif ++} ffi_abi; +#endif -+#ifdef __i386__ + -+#include ++/* ---- Definitions for closures ----------------------------------------- */ + ++#define FFI_CLOSURES 1 ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) + ++#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_NATIVE_RAW_API 0 ++#else ++#ifdef X86_WIN32 ++#define FFI_TRAMPOLINE_SIZE 52 ++#else ++#ifdef X86_WIN64 ++#define FFI_TRAMPOLINE_SIZE 29 ++#define FFI_NATIVE_RAW_API 0 ++#define FFI_NO_RAW_API 1 ++#else ++#define FFI_TRAMPOLINE_SIZE 10 ++#endif ++#endif ++#ifndef X86_WIN64 ++#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif +#endif -+#ifdef __arm__ -+ -+#include -+ + +#endif -+#ifdef __x86_64__ + -+#include + + +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __arm64__ +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c +--- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-04-26 08:17:59.000000000 +0800 +@@ -0,0 +1,374 @@ ++/* ----------------------------------------------------------------------- ++ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. + -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ Cloned from raw_api.c + -+ 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: ++ Raw_api.c author: Kresten Krab Thorup ++ Java_raw_api.c author: Hans-J. Boehm + -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. ++ $Id $ ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -16839,510 +29162,627 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ + 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. -+ + ----------------------------------------------------------------------- */ + -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. ++/* This defines a Java- and 64-bit specific variant of the raw API. */ ++/* It assumes that "raw" argument blocks look like Java stacks on a */ ++/* 64-bit machine. Arguments that can be stored in a single stack */ ++/* stack slots (longs, doubles) occupy 128 bits, but only the first */ ++/* 64 bits are actually used. */ + -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. ++#include ++#include ++#include + -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. ++#if !defined(NO_JAVA_RAW_API) + -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. ++size_t ++ffi_java_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; + -+ More details on the raw and cloure API can be found in: ++ ffi_type **at = cif->arg_types; + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++ switch((*at) -> type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ result += 2 * FFI_SIZEOF_JAVA_RAW; ++ break; ++ case FFI_TYPE_STRUCT: ++ /* No structure parameters in Java. */ ++ abort(); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ result += FFI_SIZEOF_JAVA_RAW; ++ } ++ } + -+ and ++ return result; ++} + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ + -+#ifndef LIBFFI_H -+#define LIBFFI_H ++void ++ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+#ifdef __cplusplus -+extern "C" { -+#endif ++#if WORDS_BIGENDIAN + -+/* Specify which architecture libffi is configured for. */ -+#ifndef AARCH64 -+#define AARCH64 -+#endif ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + 3); ++ break; + -+/* ---- System configuration information --------------------------------- */ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + 2); ++ break; + -+#include ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void *)raw; ++ raw += 2; ++ break; ++#endif + -+#ifndef LIBFFI_ASM ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; + -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); + -+#include -+#include ++ default: ++ *args = raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++ } ++ } + -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ ++#else /* WORDS_BIGENDIAN */ + -+#define FFI_64_BIT_MAX 9223372036854775807 ++#if !PDP + -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ switch((*tp)->type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void*) raw; ++ raw += 2; ++ break; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ *args = (void*) raw++; ++ } ++#else /* FFI_SIZEOF_JAVA_RAW != 8 */ ++ *args = (void*) raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ ++ } + -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ + -+typedef struct _ffi_type ++#endif /* WORDS_BIGENDIAN */ ++} ++ ++void ++ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) +{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT8*) (*args); +#else -+ #error "char size not supported" ++ (raw++)->uint = *(UINT8*) (*args); +#endif ++ break; + -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 ++ case FFI_TYPE_SINT8: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT8*) (*args); +#else -+ #error "short size not supported" ++ (raw++)->sint = *(SINT8*) (*args); +#endif ++ break; + -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 ++ case FFI_TYPE_UINT16: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT16*) (*args); +#else -+ #error "int size not supported" ++ (raw++)->uint = *(UINT16*) (*args); +#endif ++ break; + -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" ++ case FFI_TYPE_SINT16: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT16*) (*args); ++#else ++ (raw++)->sint = *(SINT16*) (*args); +#endif ++ break; + -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 ++ case FFI_TYPE_UINT32: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT32*) (*args); +#else -+ #error "long size not supported" ++ (raw++)->uint = *(UINT32*) (*args); +#endif ++ break; + -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) ++ case FFI_TYPE_SINT32: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT32*) (*args); +#else -+#define FFI_EXTERN extern ++ (raw++)->sint = *(SINT32*) (*args); +#endif ++ break; + -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; ++ case FFI_TYPE_FLOAT: ++ (raw++)->flt = *(FLOAT32*) (*args); ++ break; + -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ raw->uint = *(UINT64*) (*args); ++ raw += 2; ++ break; +#endif + -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; ++ ++ default: ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ FFI_ASSERT(0); /* Should have covered all cases */ +#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); +#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ } ++ } ++} + -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; ++#if !FFI_NATIVE_RAW_API + -+typedef unsigned FFI_TYPE; ++static void ++ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) ++{ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue <<= 32; ++ break; + -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++#if FFI_SIZEOF_JAVA_RAW == 4 ++ case FFI_TYPE_POINTER: +#endif -+} ffi_cif; ++ *(SINT64 *)rvalue <<= 32; ++ break; + -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ break; ++ } +#endif ++} + -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++static void ++ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) ++{ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue >>= 32; ++ break; ++ ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++ *(SINT64 *)rvalue >>= 32; ++ break; ++ ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ break; ++ } ++#endif ++} ++ ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ ++ ++void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ ffi_java_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_java_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++ ffi_java_rvalue_to_raw (cif, rvalue); ++} ++ ++#if FFI_CLOSURES /* base system provides closures */ ++ ++static void ++ffi_java_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ ++ ffi_java_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); ++ ffi_java_raw_to_rvalue (cif, rvalue); ++} + -+/* ---- Definitions for the raw API -------------------------------------- */ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; + -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_java_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif ++ return status; ++} + -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ + -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); ++} + ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ ++#endif /* !NO_JAVA_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c +--- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-04-26 08:17:59.000000000 +0800 +@@ -0,0 +1,253 @@ ++/* ----------------------------------------------------------------------- ++ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green ++ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. + -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); ++ 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: + -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ ++ 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. ++ ----------------------------------------------------------------------- */ + -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); ++#include ++#include ++#include + -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); ++/* Round up to FFI_SIZEOF_ARG. */ + -+/* ---- Definitions for closures ----------------------------------------- */ ++#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + -+#if FFI_CLOSURES ++/* Perform machine independent initialization of aggregate type ++ specifications. */ + -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif ++static ffi_status initialize_aggregate(ffi_type *arg) ++{ ++ ffi_type **ptr; + -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); ++ if (UNLIKELY(arg == NULL || arg->elements == NULL)) ++ return FFI_BAD_TYPEDEF; + -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); ++ arg->size = 0; ++ arg->alignment = 0; + -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); ++ ptr = &(arg->elements[0]); + -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; ++ if (UNLIKELY(ptr == 0)) ++ return FFI_BAD_TYPEDEF; + -+#if !FFI_NATIVE_RAW_API ++ while ((*ptr) != NULL) ++ { ++ if (UNLIKELY(((*ptr)->size == 0) ++ && (initialize_aggregate((*ptr)) != FFI_OK))) ++ return FFI_BAD_TYPEDEF; + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++ /* Perform a sanity check on the argument type */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ arg->size = ALIGN(arg->size, (*ptr)->alignment); ++ arg->size += (*ptr)->size; + -+#endif ++ arg->alignment = (arg->alignment > (*ptr)->alignment) ? ++ arg->alignment : (*ptr)->alignment; + -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; ++ ptr++; ++ } + -+} ffi_raw_closure; ++ /* Structure size includes tail padding. This is important for ++ structures that fit in one register on ABIs like the PowerPC64 ++ Linux ABI that right justify small structs in a register. ++ It's also needed for nested structure layout, for example ++ struct A { long a; char b; }; struct B { struct A x; char y; }; ++ should find y at an offset of 2*sizeof(long) and result in a ++ total size of 3*sizeof(long). */ ++ arg->size = ALIGN (arg->size, arg->alignment); + -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; ++ /* On some targets, the ABI defines that structures have an additional ++ alignment beyond the "natural" one based on their elements. */ ++#ifdef FFI_AGGREGATE_ALIGNMENT ++ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) ++ arg->alignment = FFI_AGGREGATE_ALIGNMENT; +#endif + -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API ++ if (arg->size == 0) ++ return FFI_BAD_TYPEDEF; ++ else ++ return FFI_OK; ++} + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++#ifndef __CRIS__ ++/* The CRIS ABI specifies structure elements to have byte ++ alignment only, so it completely overrides this functions, ++ which assumes "natural" alignment and padding. */ + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++/* Perform machine independent ffi_cif preparation, then call ++ machine dependent routine. */ + -+#endif ++/* For non variadic functions isvariadic should be 0 and ++ nfixedargs==ntotalargs. + -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; ++ For variadic calls, isvariadic should be 1 and nfixedargs ++ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ + -+} ffi_java_raw_closure; + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); ++ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ unsigned bytes = 0; ++ unsigned int i; ++ ffi_type **ptr; + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ FFI_ASSERT(cif != NULL); ++ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); ++ FFI_ASSERT(nfixedargs <= ntotalargs); + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); ++ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) ++ return FFI_BAD_ABI; + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ cif->abi = abi; ++ cif->arg_types = atypes; ++ cif->nargs = ntotalargs; ++ cif->rtype = rtype; + -+#endif /* FFI_CLOSURES */ ++ cif->flags = 0; + -+#if FFI_GO_CLOSURES ++#if HAVE_LONG_DOUBLE_VARIANT ++ ffi_prep_types (abi); ++#endif + -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; ++ /* Initialize the return type if necessary */ ++ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; + -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if (rtype->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the return type */ ++ FFI_ASSERT_VALID_TYPE(cif->rtype); + -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); ++ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ /* Make space for the return structure pointer */ ++ if (cif->rtype->type == FFI_TYPE_STRUCT ++#ifdef SPARC ++ && (cif->abi != FFI_V9 || cif->rtype->size > 32) ++#endif ++#ifdef TILE ++ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) ++#endif ++#ifdef XTENSA ++ && (cif->rtype->size > 16) ++#endif ++#ifdef NIOS2 ++ && (cif->rtype->size > 8) ++#endif ++ ) ++ bytes = STACK_ARG_SIZE(sizeof(void*)); ++#endif + -+#endif /* FFI_GO_CLOSURES */ ++ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) ++ { + -+/* ---- Public interface definition -------------------------------------- */ ++ /* Initialize any uninitialized aggregate type definitions */ ++ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; + -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if ((*ptr)->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the argument type, do this ++ check after the initialization. */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#ifdef SPARC ++ if (((*ptr)->type == FFI_TYPE_STRUCT ++ && ((*ptr)->size > 16 || cif->abi != FFI_V9)) ++ || ((*ptr)->type == FFI_TYPE_LONGDOUBLE ++ && cif->abi != FFI_V9)) ++ bytes += sizeof(void*); ++ else ++#endif ++ { ++ /* Add any padding if necessary */ ++ if (((*ptr)->alignment - 1) & bytes) ++ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); + -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); ++#ifdef TILE ++ if (bytes < 10 * FFI_SIZEOF_ARG && ++ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) ++ { ++ /* An argument is never split between the 10 parameter ++ registers and the stack. */ ++ bytes = 10 * FFI_SIZEOF_ARG; ++ } ++#endif ++#ifdef XTENSA ++ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) ++ bytes = 6*4; ++#endif + -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) ++ bytes += STACK_ARG_SIZE((*ptr)->size); ++ } ++#endif ++ } + -+/* ---- Definitions shared with assembly code ---------------------------- */ ++ cif->bytes = bytes; + ++ /* Perform machine dependent cif processing */ ++#ifdef FFI_TARGET_SPECIFIC_VARIADIC ++ if (isvariadic) ++ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); +#endif + -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 ++ return ffi_prep_cif_machdep(cif); ++} ++#endif /* not __CRIS__ */ + -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); ++} + -+#ifdef __cplusplus ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); +} -+#endif + -+#endif ++#if FFI_CLOSURES + ++ffi_status ++ffi_prep_closure (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data) ++{ ++ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); ++} + +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __arm__ +diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c +--- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-04-26 08:17:59.000000000 +0800 +@@ -0,0 +1,267 @@ ++/* ----------------------------------------------------------------------- ++ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. + -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++ Author: Kresten Krab Thorup + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -17352,705 +29792,1153 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ + 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. -+ + ----------------------------------------------------------------------- */ + -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef ARM -+#define ARM -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM ++/* This file defines generic functions for use with the raw api. */ + -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif ++#include ++#include + -+#include -+#include ++#if !FFI_NO_RAW_API + -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ ++size_t ++ffi_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; + -+#define FFI_64_BIT_MAX 9223372036854775807 ++ ffi_type **at = cif->arg_types; + -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*at)->type == FFI_TYPE_STRUCT) ++ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); ++ else +#endif ++ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); ++ } + -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ ++ return result; ++} + -+typedef struct _ffi_type ++ ++void ++ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) +{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif ++#if WORDS_BIGENDIAN + -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); ++ break; + -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); ++ break; +#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" ++ ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ *args = (raw++)->ptr; ++ break; +#endif + -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif ++ case FFI_TYPE_COMPLEX: ++ *args = (raw++)->ptr; ++ break; + -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ default: ++ *args = raw; ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } + -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; ++#else /* WORDS_BIGENDIAN */ + -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double ++#if !PDP ++ ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*tp)->type == FFI_TYPE_STRUCT) ++ { ++ *args = (raw++)->ptr; ++ } ++ else +#endif ++ if ((*tp)->type == FFI_TYPE_COMPLEX) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++ { ++ *args = (void*) raw; ++ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); ++ } ++ } + -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; +#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++#error "pdp endian not supported" ++#endif /* ! PDP */ + -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; ++#endif /* WORDS_BIGENDIAN */ ++} + -+typedef unsigned FFI_TYPE; ++void ++ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ (raw++)->uint = *(UINT8*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT8: ++ (raw++)->sint = *(SINT8*) (*args); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ (raw++)->uint = *(UINT16*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ (raw++)->sint = *(SINT16*) (*args); ++ break; ++ ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ (raw++)->uint = *(UINT32*) (*args); ++ break; ++ ++ case FFI_TYPE_SINT32: ++ (raw++)->sint = *(SINT32*) (*args); ++ break; +#endif -+} ffi_cif; + -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ (raw++)->ptr = *args; ++ break; +#endif + -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ case FFI_TYPE_COMPLEX: ++ (raw++)->ptr = *args; ++ break; + -+/* ---- Definitions for the raw API -------------------------------------- */ ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; + -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif ++ default: ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } ++} + -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif ++#if !FFI_NATIVE_RAW_API + -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; + -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ + ++void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++} + -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); ++#if FFI_CLOSURES /* base system provides closures */ + -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); ++static void ++ffi_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; + -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ ++ ffi_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, raw, cl->user_data); ++} + -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; + -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+/* ---- Definitions for closures ----------------------------------------- */ ++ return status; ++} + -+#if FFI_CLOSURES ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ + -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif ++#if FFI_CLOSURES + -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ + +ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); ++ffi_prep_raw_closure (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); ++} + -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); ++#endif /* FFI_CLOSURES */ + -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; ++#endif /* !FFI_NO_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S +--- orig/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,421 @@ ++#ifdef __x86_64__ + -+#if !FFI_NATIVE_RAW_API ++/* ----------------------------------------------------------------------- ++ darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. ++ Copyright (c) 2008 Red Hat, Inc. ++ derived from unix64.S + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++ x86-64 Foreign Function Interface for Darwin. + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ 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: + -+#endif ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; ++ 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 AUTHOR 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. ++ ----------------------------------------------------------------------- */ + -+} ffi_raw_closure; ++#ifdef __x86_64__ ++#define LIBFFI_ASM ++#include ++#include + -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif ++ .file "darwin64.S" ++.text + -+ ffi_cif *cif; ++/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void)); + -+#if !FFI_NATIVE_RAW_API ++ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame ++ for this function. This has been allocated by ffi_call. We also ++ deallocate some of the stack that has been alloca'd. */ + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++ .align 3 ++ .globl _ffi_call_unix64 + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++_ffi_call_unix64: ++LUW0: ++ movq (%rsp), %r10 /* Load return address. */ ++ leaq (%rdi, %rsi), %rax /* Find local stack base. */ ++ movq %rdx, (%rax) /* Save flags. */ ++ movq %rcx, 8(%rax) /* Save raddr. */ ++ movq %rbp, 16(%rax) /* Save old frame pointer. */ ++ movq %r10, 24(%rax) /* Relocate return address. */ ++ movq %rax, %rbp /* Finalize local stack frame. */ ++LUW1: ++ movq %rdi, %r10 /* Save a copy of the register area. */ ++ movq %r8, %r11 /* Save a copy of the target fn. */ ++ movl %r9d, %eax /* Set number of SSE registers. */ + -+#endif ++ /* Load up all argument registers. */ ++ movq (%r10), %rdi ++ movq 8(%r10), %rsi ++ movq 16(%r10), %rdx ++ movq 24(%r10), %rcx ++ movq 32(%r10), %r8 ++ movq 40(%r10), %r9 ++ testl %eax, %eax ++ jnz Lload_sse ++Lret_from_load_sse: + -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; ++ /* Deallocate the reg arg area. */ ++ leaq 176(%r10), %rsp ++ ++ /* Call the user function. */ ++ call *%r11 ++ ++ /* Deallocate stack arg area; local stack frame in redzone. */ ++ leaq 24(%rbp), %rsp ++ ++ movq 0(%rbp), %rcx /* Reload flags. */ ++ movq 8(%rbp), %rdi /* Reload raddr. */ ++ movq 16(%rbp), %rbp /* Reload old frame pointer. */ ++LUW2: ++ ++ /* The first byte of the flags contains the FFI_TYPE. */ ++ movzbl %cl, %r10d ++ leaq Lstore_table(%rip), %r11 ++ movslq (%r11, %r10, 4), %r10 ++ addq %r11, %r10 ++ jmp *%r10 ++ ++Lstore_table: ++ .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ ++ .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ ++ .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ ++ .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ ++ .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ ++ .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ ++ .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ ++ .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ ++ .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ ++ .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ ++ .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ ++ .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ ++ .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ ++ .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ ++ .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ + -+} ffi_java_raw_closure; ++ .text ++ .align 3 ++Lst_void: ++ ret ++ .align 3 ++Lst_uint8: ++ movzbq %al, %rax ++ movq %rax, (%rdi) ++ ret ++ .align 3 ++Lst_sint8: ++ movsbq %al, %rax ++ movq %rax, (%rdi) ++ ret ++ .align 3 ++Lst_uint16: ++ movzwq %ax, %rax ++ movq %rax, (%rdi) ++ .align 3 ++Lst_sint16: ++ movswq %ax, %rax ++ movq %rax, (%rdi) ++ ret ++ .align 3 ++Lst_uint32: ++ movl %eax, %eax ++ movq %rax, (%rdi) ++ .align 3 ++Lst_sint32: ++ cltq ++ movq %rax, (%rdi) ++ ret ++ .align 3 ++Lst_int64: ++ movq %rax, (%rdi) ++ ret ++ .align 3 ++Lst_float: ++ movss %xmm0, (%rdi) ++ ret ++ .align 3 ++Lst_double: ++ movsd %xmm0, (%rdi) ++ ret ++Lst_ldouble: ++ fstpt (%rdi) ++ ret ++ .align 3 ++Lst_struct: ++ leaq -20(%rsp), %rsi /* Scratch area in redzone. */ ++ ++ /* We have to locate the values now, and since we don't want to ++ write too much data into the user's return value, we spill the ++ value to a 16 byte scratch area first. Bits 8, 9, and 10 ++ control where the values are located. Only one of the three ++ bits will be set; see ffi_prep_cif_machdep for the pattern. */ ++ movd %xmm0, %r10 ++ movd %xmm1, %r11 ++ testl $0x100, %ecx ++ cmovnz %rax, %rdx ++ cmovnz %r10, %rax ++ testl $0x200, %ecx ++ cmovnz %r10, %rdx ++ testl $0x400, %ecx ++ cmovnz %r10, %rax ++ cmovnz %r11, %rdx ++ movq %rax, (%rsi) ++ movq %rdx, 8(%rsi) + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); ++ /* Bits 12-31 contain the true size of the structure. Copy from ++ the scratch area to the true destination. */ ++ shrl $12, %ecx ++ rep movsb ++ ret + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ /* Many times we can avoid loading any SSE registers at all. ++ It's not worth an indirect jump to load the exact set of ++ SSE registers needed; zero or all is a good compromise. */ ++ .align 3 ++LUW3: ++Lload_sse: ++ movdqa 48(%r10), %xmm0 ++ movdqa 64(%r10), %xmm1 ++ movdqa 80(%r10), %xmm2 ++ movdqa 96(%r10), %xmm3 ++ movdqa 112(%r10), %xmm4 ++ movdqa 128(%r10), %xmm5 ++ movdqa 144(%r10), %xmm6 ++ movdqa 160(%r10), %xmm7 ++ jmp Lret_from_load_sse ++ ++LUW4: ++ .align 3 ++ .globl _ffi_closure_unix64 ++ ++_ffi_closure_unix64: ++LUW5: ++ /* The carry flag is set by the trampoline iff SSE registers ++ are used. Don't clobber it before the branch instruction. */ ++ leaq -200(%rsp), %rsp ++LUW6: ++ movq %rdi, (%rsp) ++ movq %rsi, 8(%rsp) ++ movq %rdx, 16(%rsp) ++ movq %rcx, 24(%rsp) ++ movq %r8, 32(%rsp) ++ movq %r9, 40(%rsp) ++ jc Lsave_sse ++Lret_from_save_sse: ++ ++ movq %r10, %rdi ++ leaq 176(%rsp), %rsi ++ movq %rsp, %rdx ++ leaq 208(%rsp), %rcx ++ call _ffi_closure_unix64_inner + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); ++ /* Deallocate stack frame early; return value is now in redzone. */ ++ addq $200, %rsp ++LUW7: + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ /* The first byte of the return value contains the FFI_TYPE. */ ++ movzbl %al, %r10d ++ leaq Lload_table(%rip), %r11 ++ movslq (%r11, %r10, 4), %r10 ++ addq %r11, %r10 ++ jmp *%r10 + -+#endif /* FFI_CLOSURES */ ++Lload_table: ++ .long Lld_void-Lload_table /* FFI_TYPE_VOID */ ++ .long Lld_int32-Lload_table /* FFI_TYPE_INT */ ++ .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ ++ .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ ++ .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ ++ .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ ++ .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ ++ .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ ++ .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ ++ .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ ++ .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ ++ .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ ++ .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ ++ .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ ++ .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ + -+#if FFI_GO_CLOSURES ++ .text ++ .align 3 ++Lld_void: ++ ret ++ .align 3 ++Lld_int8: ++ movzbl -24(%rsp), %eax ++ ret ++ .align 3 ++Lld_int16: ++ movzwl -24(%rsp), %eax ++ ret ++ .align 3 ++Lld_int32: ++ movl -24(%rsp), %eax ++ ret ++ .align 3 ++Lld_int64: ++ movq -24(%rsp), %rax ++ ret ++ .align 3 ++Lld_float: ++ movss -24(%rsp), %xmm0 ++ ret ++ .align 3 ++Lld_double: ++ movsd -24(%rsp), %xmm0 ++ ret ++ .align 3 ++Lld_ldouble: ++ fldt -24(%rsp) ++ ret ++ .align 3 ++Lld_struct: ++ /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, ++ %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading ++ both rdx and xmm1 with the second word. For the remaining, ++ bit 8 set means xmm0 gets the second word, and bit 9 means ++ that rax gets the second word. */ ++ movq -24(%rsp), %rcx ++ movq -16(%rsp), %rdx ++ movq -16(%rsp), %xmm1 ++ testl $0x100, %eax ++ cmovnz %rdx, %rcx ++ movd %rcx, %xmm0 ++ testl $0x200, %eax ++ movq -24(%rsp), %rax ++ cmovnz %rdx, %rax ++ ret + -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; ++ /* See the comment above Lload_sse; the same logic applies here. */ ++ .align 3 ++LUW8: ++Lsave_sse: ++ movdqa %xmm0, 48(%rsp) ++ movdqa %xmm1, 64(%rsp) ++ movdqa %xmm2, 80(%rsp) ++ movdqa %xmm3, 96(%rsp) ++ movdqa %xmm4, 112(%rsp) ++ movdqa %xmm5, 128(%rsp) ++ movdqa %xmm6, 144(%rsp) ++ movdqa %xmm7, 160(%rsp) ++ jmp Lret_from_save_sse ++ ++LUW9: ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EH_frame1: ++ .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ ++ .long L$set$0 ++LSCIE1: ++ .long 0x0 /* CIE Identifier Tag */ ++ .byte 0x1 /* CIE Version */ ++ .ascii "zR\0" /* CIE Augmentation */ ++ .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ ++ .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ ++ .byte 0x10 /* CIE RA Column */ ++ .byte 0x1 /* uleb128 0x1; Augmentation size */ ++ .byte 0x10 /* FDE Encoding (pcrel sdata4) */ ++ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ ++ .byte 0x7 /* uleb128 0x7 */ ++ .byte 0x8 /* uleb128 0x8 */ ++ .byte 0x90 /* DW_CFA_offset, column 0x10 */ ++ .byte 0x1 ++ .align 3 ++LECIE1: ++ .globl _ffi_call_unix64.eh ++_ffi_call_unix64.eh: ++LSFDE1: ++ .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ ++ .long L$set$1 ++LASFDE1: ++ .long LASFDE1-EH_frame1 /* FDE CIE offset */ ++ .quad LUW0-. /* FDE initial location */ ++ .set L$set$2,LUW4-LUW0 /* FDE address range */ ++ .quad L$set$2 ++ .byte 0x0 /* Augmentation size */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$3,LUW1-LUW0 ++ .long L$set$3 + -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); ++ /* New stack frame based off rbp. This is a itty bit of unwind ++ trickery in that the CFA *has* changed. There is no easy way ++ to describe it correctly on entry to the function. Fortunately, ++ it doesn't matter too much since at all points we can correctly ++ unwind back to ffi_call. Note that the location to which we ++ moved the return address is (the new) CFA-8, so from the ++ perspective of the unwind info, it hasn't moved. */ ++ .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ ++ .byte 0x6 ++ .byte 0x20 ++ .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ ++ .byte 0x2 ++ .byte 0xa /* DW_CFA_remember_state */ + -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$4,LUW2-LUW1 ++ .long L$set$4 ++ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ ++ .byte 0x7 ++ .byte 0x8 ++ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ + -+#endif /* FFI_GO_CLOSURES */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$5,LUW3-LUW2 ++ .long L$set$5 ++ .byte 0xb /* DW_CFA_restore_state */ + -+/* ---- Public interface definition -------------------------------------- */ ++ .align 3 ++LEFDE1: ++ .globl _ffi_closure_unix64.eh ++_ffi_closure_unix64.eh: ++LSFDE3: ++ .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ ++ .long L$set$6 ++LASFDE3: ++ .long LASFDE3-EH_frame1 /* FDE CIE offset */ ++ .quad LUW5-. /* FDE initial location */ ++ .set L$set$7,LUW9-LUW5 /* FDE address range */ ++ .quad L$set$7 ++ .byte 0x0 /* Augmentation size */ ++ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$8,LUW6-LUW5 ++ .long L$set$8 ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte 208,1 /* uleb128 208 */ ++ .byte 0xa /* DW_CFA_remember_state */ + -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$9,LUW7-LUW6 ++ .long L$set$9 ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte 0x8 + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .set L$set$10,LUW8-LUW7 ++ .long L$set$10 ++ .byte 0xb /* DW_CFA_restore_state */ + -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); ++ .align 3 ++LEFDE3: ++ .subsections_via_symbols + -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) ++#endif /* __x86_64__ */ + -+/* ---- Definitions shared with assembly code ---------------------------- */ + +#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/darwin_i386.S modified/Modules/_ctypes/libffi_ios/x86/darwin_i386.S +--- orig/Modules/_ctypes/libffi_ios/x86/darwin_i386.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/darwin_i386.S 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,449 @@ ++#ifdef __i386__ + -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 ++/* ----------------------------------------------------------------------- ++ darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. + -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ X86 Foreign Function Interface + -+#ifdef __cplusplus -+} -+#endif ++ 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: + -+#endif ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + ++ 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. ++ ----------------------------------------------------------------------- ++ */ + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-03-12 21:32:24.000000000 +0800 -@@ -0,0 +1,55 @@ -+/* ----------------------------------------------------------------------- -+ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. ++#ifndef __x86_64__ + -+ Conditionally assemble cfi directives. Only necessary for building libffi. -+ ----------------------------------------------------------------------- */ ++#define LIBFFI_ASM ++#include ++#include + -+#ifndef FFI_CFI_H -+#define FFI_CFI_H ++.text + -+#ifdef HAVE_AS_CFI_PSEUDO_OP ++.globl _ffi_prep_args + -+# define cfi_startproc .cfi_startproc -+# define cfi_endproc .cfi_endproc -+# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off -+# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg -+# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off -+# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off -+# define cfi_offset(reg, off) .cfi_offset reg, off -+# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off -+# define cfi_register(r1, r2) .cfi_register r1, r2 -+# define cfi_return_column(reg) .cfi_return_column reg -+# define cfi_restore(reg) .cfi_restore reg -+# define cfi_same_value(reg) .cfi_same_value reg -+# define cfi_undefined(reg) .cfi_undefined reg -+# define cfi_remember_state .cfi_remember_state -+# define cfi_restore_state .cfi_restore_state -+# define cfi_window_save .cfi_window_save -+# define cfi_personality(enc, exp) .cfi_personality enc, exp -+# define cfi_lsda(enc, exp) .cfi_lsda enc, exp -+# define cfi_escape(...) .cfi_escape __VA_ARGS__ ++ .align 4 ++.globl _ffi_call_SYSV + -+#else ++_ffi_call_SYSV: ++.LFB1: ++ pushl %ebp ++.LCFI0: ++ movl %esp,%ebp ++.LCFI1: ++ subl $8,%esp ++ /* Make room for all of the new args. */ ++ movl 16(%ebp),%ecx ++ subl %ecx,%esp + -+# define cfi_startproc -+# define cfi_endproc -+# define cfi_def_cfa(reg, off) -+# define cfi_def_cfa_register(reg) -+# define cfi_def_cfa_offset(off) -+# define cfi_adjust_cfa_offset(off) -+# define cfi_offset(reg, off) -+# define cfi_rel_offset(reg, off) -+# define cfi_register(r1, r2) -+# define cfi_return_column(reg) -+# define cfi_restore(reg) -+# define cfi_same_value(reg) -+# define cfi_undefined(reg) -+# define cfi_remember_state -+# define cfi_restore_state -+# define cfi_window_save -+# define cfi_personality(enc, exp) -+# define cfi_lsda(enc, exp) -+# define cfi_escape(...) ++ movl %esp,%eax + -+#endif /* HAVE_AS_CFI_PSEUDO_OP */ -+#endif /* FFI_CFI_H */ -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-03-12 21:32:24.000000000 +0800 -@@ -0,0 +1,132 @@ -+/* ----------------------------------------------------------------------- -+ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green -+ Copyright (C) 2007 Free Software Foundation, Inc -+ Copyright (c) 1996 Red Hat, Inc. -+ -+ Common internal definitions and macros. Only necessary for building -+ libffi. -+ ----------------------------------------------------------------------- */ ++ /* Place all of the ffi_prep_args in position */ ++ subl $8,%esp ++ pushl 12(%ebp) ++ pushl %eax ++ call *8(%ebp) ++ ++ /* Return stack to previous state and call the function */ ++ addl $16,%esp + -+#ifndef FFI_COMMON_H -+#define FFI_COMMON_H ++ call *28(%ebp) + -+#ifdef __cplusplus -+extern "C" { -+#endif ++ /* Load %ecx with the return type code */ ++ movl 20(%ebp),%ecx + -+#include ++ /* Protect %esi. We're going to pop it in the epilogue. */ ++ pushl %esi + -+/* Do not move this. Some versions of AIX are very picky about where -+ this is positioned. */ -+#ifdef __GNUC__ -+# if HAVE_ALLOCA_H -+# include -+# else -+ /* mingw64 defines this already in malloc.h. */ -+# ifndef alloca -+# define alloca __builtin_alloca -+# endif -+# endif -+# define MAYBE_UNUSED __attribute__((__unused__)) -+#else -+# define MAYBE_UNUSED -+# if HAVE_ALLOCA_H -+# include -+# else -+# ifdef _AIX -+# pragma alloca -+# else -+# ifndef alloca /* predefined by HP cc +Olibcalls */ -+# ifdef _MSC_VER -+# define alloca _alloca -+# else -+char *alloca (); -+# endif -+# endif -+# endif -+# endif -+#endif ++ /* If the return value pointer is NULL, assume no return value. */ ++ cmpl $0,24(%ebp) ++ jne 0f + -+/* Check for the existence of memcpy. */ -+#if STDC_HEADERS -+# include -+#else -+# ifndef HAVE_MEMCPY -+# define memcpy(d, s, n) bcopy ((s), (d), (n)) -+# endif -+#endif ++ /* Even if there is no space for the return value, we are ++ obliged to handle floating-point values. */ ++ cmpl $FFI_TYPE_FLOAT,%ecx ++ jne noretval ++ fstp %st(0) + -+#if defined(FFI_DEBUG) -+#include -+#endif ++ jmp epilogue ++0: ++ .align 4 ++ call 1f ++.Lstore_table: ++ .long noretval-.Lstore_table /* FFI_TYPE_VOID */ ++ .long retint-.Lstore_table /* FFI_TYPE_INT */ ++ .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ ++ .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ ++ .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ ++ .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ ++ .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ ++ .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ ++ .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ ++ .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ ++ .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ ++ .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ ++ .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ ++ .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ ++ .long retint-.Lstore_table /* FFI_TYPE_POINTER */ ++ .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ ++ .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ ++1: ++ pop %esi ++ add (%esi, %ecx, 4), %esi ++ jmp *%esi + -+#ifdef FFI_DEBUG -+void ffi_assert(char *expr, char *file, int line); -+void ffi_stop_here(void); -+void ffi_type_test(ffi_type *a, char *file, int line); ++ /* Sign/zero extend as appropriate. */ ++retsint8: ++ movsbl %al, %eax ++ jmp retint + -+#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -+#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -+#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -+#else -+#define FFI_ASSERT(x) -+#define FFI_ASSERT_AT(x, f, l) -+#define FFI_ASSERT_VALID_TYPE(x) -+#endif ++retsint16: ++ movswl %ax, %eax ++ jmp retint + -+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -+#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) ++retuint8: ++ movzbl %al, %eax ++ jmp retint + -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif); -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, unsigned int ntotalargs); ++retuint16: ++ movzwl %ax, %eax ++ jmp retint ++ ++retfloat: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ fstps (%ecx) ++ jmp epilogue ++ ++retdouble: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ fstpl (%ecx) ++ jmp epilogue ++ ++retlongdouble: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ fstpt (%ecx) ++ jmp epilogue ++ ++retint64: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ movl %eax,0(%ecx) ++ movl %edx,4(%ecx) ++ jmp epilogue ++ ++retstruct1b: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ movb %al,0(%ecx) ++ jmp epilogue ++ ++retstruct2b: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ movw %ax,0(%ecx) ++ jmp epilogue ++ ++retint: ++ /* Load %ecx with the pointer to storage for the return value */ ++ movl 24(%ebp),%ecx ++ movl %eax,0(%ecx) ++ ++retstruct: ++ /* Nothing to do! */ ++ ++noretval: ++epilogue: ++ popl %esi ++ movl %ebp,%esp ++ popl %ebp ++ ret + -+/* Extended cif, used in callback from assembly routine */ -+typedef struct -+{ -+ ffi_cif *cif; -+ void *rvalue; -+ void **avalue; -+} extended_cif; ++.LFE1: ++.ffi_call_SYSV_end: + -+/* Terse sized type definitions. */ -+#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) -+typedef unsigned char UINT8; -+typedef signed char SINT8; -+typedef unsigned short UINT16; -+typedef signed short SINT16; -+typedef unsigned int UINT32; -+typedef signed int SINT32; -+# ifdef _MSC_VER -+typedef unsigned __int64 UINT64; -+typedef signed __int64 SINT64; -+# else -+# include -+typedef uint64_t UINT64; -+typedef int64_t SINT64; -+# endif -+#else -+typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -+typedef signed int SINT8 __attribute__((__mode__(__QI__))); -+typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -+typedef signed int SINT16 __attribute__((__mode__(__HI__))); -+typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -+typedef signed int SINT32 __attribute__((__mode__(__SI__))); -+typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -+typedef signed int SINT64 __attribute__((__mode__(__DI__))); -+#endif ++ .align 4 ++FFI_HIDDEN (ffi_closure_SYSV) ++.globl _ffi_closure_SYSV ++ ++_ffi_closure_SYSV: ++.LFB2: ++ pushl %ebp ++.LCFI2: ++ movl %esp, %ebp ++.LCFI3: ++ subl $40, %esp ++ leal -24(%ebp), %edx ++ movl %edx, -12(%ebp) /* resp */ ++ leal 8(%ebp), %edx ++ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ ++ leal -12(%ebp), %edx ++ movl %edx, (%esp) /* &resp */ ++ movl %ebx, 8(%esp) ++.LCFI7: ++ call L_ffi_closure_SYSV_inner$stub ++ movl 8(%esp), %ebx ++ movl -12(%ebp), %ecx ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lcls_retint ++ ++ /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, ++ FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ ++ cmpl $FFI_TYPE_UINT64, %eax ++ jge 0f ++ cmpl $FFI_TYPE_UINT8, %eax ++ jge .Lcls_retint ++ ++0: cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lcls_retllong ++ cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax ++ je .Lcls_retstruct1b ++ cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax ++ je .Lcls_retstruct2b ++ cmpl $FFI_TYPE_STRUCT, %eax ++ je .Lcls_retstruct ++.Lcls_epilogue: ++ movl %ebp, %esp ++ popl %ebp ++ ret ++.Lcls_retint: ++ movl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retfloat: ++ flds (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retdouble: ++ fldl (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retldouble: ++ fldt (%ecx) ++ jmp .Lcls_epilogue ++.Lcls_retllong: ++ movl (%ecx), %eax ++ movl 4(%ecx), %edx ++ jmp .Lcls_epilogue ++.Lcls_retstruct1b: ++ movsbl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retstruct2b: ++ movswl (%ecx), %eax ++ jmp .Lcls_epilogue ++.Lcls_retstruct: ++ lea -8(%ebp),%esp ++ movl %ebp, %esp ++ popl %ebp ++ ret $4 ++.LFE2: + -+typedef float FLOAT32; ++#if !FFI_NO_RAW_API + -+#ifndef __GNUC__ -+#define __builtin_expect(x, expected_value) (x) -+#endif -+#define LIKELY(x) __builtin_expect(!!(x),1) -+#define UNLIKELY(x) __builtin_expect((x)!=0,0) ++#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) ++#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) ++#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) ++#define CIF_FLAGS_OFFSET 20 ++ ++ .align 4 ++FFI_HIDDEN (ffi_closure_raw_SYSV) ++.globl _ffi_closure_raw_SYSV ++ ++_ffi_closure_raw_SYSV: ++.LFB3: ++ pushl %ebp ++.LCFI4: ++ movl %esp, %ebp ++.LCFI5: ++ pushl %esi ++.LCFI6: ++ subl $36, %esp ++ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ ++ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ ++ movl %edx, 12(%esp) /* user_data */ ++ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ ++ movl %edx, 8(%esp) /* raw_args */ ++ leal -24(%ebp), %edx ++ movl %edx, 4(%esp) /* &res */ ++ movl %esi, (%esp) /* cif */ ++ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ ++ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ ++ cmpl $FFI_TYPE_INT, %eax ++ je .Lrcls_retint ++ ++ /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, ++ FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ ++ cmpl $FFI_TYPE_UINT64, %eax ++ jge 0f ++ cmpl $FFI_TYPE_UINT8, %eax ++ jge .Lrcls_retint ++0: ++ cmpl $FFI_TYPE_FLOAT, %eax ++ je .Lrcls_retfloat ++ cmpl $FFI_TYPE_DOUBLE, %eax ++ je .Lrcls_retdouble ++ cmpl $FFI_TYPE_LONGDOUBLE, %eax ++ je .Lrcls_retldouble ++ cmpl $FFI_TYPE_SINT64, %eax ++ je .Lrcls_retllong ++.Lrcls_epilogue: ++ addl $36, %esp ++ popl %esi ++ popl %ebp ++ ret ++.Lrcls_retint: ++ movl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++.Lrcls_retfloat: ++ flds -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retdouble: ++ fldl -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retldouble: ++ fldt -24(%ebp) ++ jmp .Lrcls_epilogue ++.Lrcls_retllong: ++ movl -24(%ebp), %eax ++ movl -20(%ebp), %edx ++ jmp .Lrcls_epilogue ++.LFE3: ++#endif ++ ++.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 ++L_ffi_closure_SYSV_inner$stub: ++ .indirect_symbol _ffi_closure_SYSV_inner ++ hlt ; hlt ; hlt ; hlt ; hlt ++ ++ ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EH_frame1: ++ .set L$set$0,LECIE1-LSCIE1 ++ .long L$set$0 ++LSCIE1: ++ .long 0x0 ++ .byte 0x1 ++ .ascii "zR\0" ++ .byte 0x1 ++ .byte 0x7c ++ .byte 0x8 ++ .byte 0x1 ++ .byte 0x10 ++ .byte 0xc ++ .byte 0x5 ++ .byte 0x4 ++ .byte 0x88 ++ .byte 0x1 ++ .align 2 ++LECIE1: ++.globl _ffi_call_SYSV.eh ++_ffi_call_SYSV.eh: ++LSFDE1: ++ .set L$set$1,LEFDE1-LASFDE1 ++ .long L$set$1 ++LASFDE1: ++ .long LASFDE1-EH_frame1 ++ .long .LFB1-. ++ .set L$set$2,.LFE1-.LFB1 ++ .long L$set$2 ++ .byte 0x0 ++ .byte 0x4 ++ .set L$set$3,.LCFI0-.LFB1 ++ .long L$set$3 ++ .byte 0xe ++ .byte 0x8 ++ .byte 0x84 ++ .byte 0x2 ++ .byte 0x4 ++ .set L$set$4,.LCFI1-.LCFI0 ++ .long L$set$4 ++ .byte 0xd ++ .byte 0x4 ++ .align 2 ++LEFDE1: ++.globl _ffi_closure_SYSV.eh ++_ffi_closure_SYSV.eh: ++LSFDE2: ++ .set L$set$5,LEFDE2-LASFDE2 ++ .long L$set$5 ++LASFDE2: ++ .long LASFDE2-EH_frame1 ++ .long .LFB2-. ++ .set L$set$6,.LFE2-.LFB2 ++ .long L$set$6 ++ .byte 0x0 ++ .byte 0x4 ++ .set L$set$7,.LCFI2-.LFB2 ++ .long L$set$7 ++ .byte 0xe ++ .byte 0x8 ++ .byte 0x84 ++ .byte 0x2 ++ .byte 0x4 ++ .set L$set$8,.LCFI3-.LCFI2 ++ .long L$set$8 ++ .byte 0xd ++ .byte 0x4 ++ .align 2 ++LEFDE2: ++ ++#if !FFI_NO_RAW_API ++ ++.globl _ffi_closure_raw_SYSV.eh ++_ffi_closure_raw_SYSV.eh: ++LSFDE3: ++ .set L$set$10,LEFDE3-LASFDE3 ++ .long L$set$10 ++LASFDE3: ++ .long LASFDE3-EH_frame1 ++ .long .LFB3-. ++ .set L$set$11,.LFE3-.LFB3 ++ .long L$set$11 ++ .byte 0x0 ++ .byte 0x4 ++ .set L$set$12,.LCFI4-.LFB3 ++ .long L$set$12 ++ .byte 0xe ++ .byte 0x8 ++ .byte 0x84 ++ .byte 0x2 ++ .byte 0x4 ++ .set L$set$13,.LCFI5-.LCFI4 ++ .long L$set$13 ++ .byte 0xd ++ .byte 0x4 ++ .byte 0x4 ++ .set L$set$14,.LCFI6-.LCFI5 ++ .long L$set$14 ++ .byte 0x85 ++ .byte 0x3 ++ .align 2 ++LEFDE3: + -+#ifdef __cplusplus -+} +#endif + ++#endif /* ifndef __x86_64__ */ ++ ++ +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __i386__ +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,681 @@ ++#ifdef __x86_64__ + -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++/* ----------------------------------------------------------------------- ++ ffi64.c - Copyright (c) 2013 The Written Word, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2008, 2010 Red Hat, Inc. ++ Copyright (c) 2002, 2007 Bo Thorsen + -+ 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: ++ x86-64 Foreign Function Interface + -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -18060,510 +30948,684 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_c + 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. -+ + ----------------------------------------------------------------------- */ + -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. ++#include ++#include + -+ More details on the raw and cloure API can be found in: ++#include ++#include + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++#ifdef __x86_64__ + -+ and ++#define MAX_GPR_REGS 6 ++#define MAX_SSE_REGS 8 + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ ++#if defined(__INTEL_COMPILER) ++#include "xmmintrin.h" ++#define UINT128 __m128 ++#else ++#if defined(__SUNPRO_C) ++#include ++#define UINT128 __m128i ++#else ++#define UINT128 __int128_t ++#endif ++#endif + -+#ifndef LIBFFI_H -+#define LIBFFI_H ++union big_int_union ++{ ++ UINT32 i32; ++ UINT64 i64; ++ UINT128 i128; ++}; + -+#ifdef __cplusplus -+extern "C" { -+#endif ++struct register_args ++{ ++ /* Registers for argument passing. */ ++ UINT64 gpr[MAX_GPR_REGS]; ++ union big_int_union sse[MAX_SSE_REGS]; ++}; + -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_DARWIN -+#define X86_DARWIN -+#endif ++extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void), unsigned ssecount); + -+/* ---- System configuration information --------------------------------- */ ++/* All reference to register classes here is identical to the code in ++ gcc/config/i386/i386.c. Do *not* change one without the other. */ + -+#include ++/* Register class used for passing given 64bit part of the argument. ++ These represent classes as documented by the PS ABI, with the ++ exception of SSESF, SSEDF classes, that are basically SSE class, ++ just gcc will use SF or DFmode move instead of DImode to avoid ++ reformatting penalties. + -+#ifndef LIBFFI_ASM ++ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves ++ whenever possible (upper half does contain padding). */ ++enum x86_64_reg_class ++ { ++ X86_64_NO_CLASS, ++ X86_64_INTEGER_CLASS, ++ X86_64_INTEGERSI_CLASS, ++ X86_64_SSE_CLASS, ++ X86_64_SSESF_CLASS, ++ X86_64_SSEDF_CLASS, ++ X86_64_SSEUP_CLASS, ++ X86_64_X87_CLASS, ++ X86_64_X87UP_CLASS, ++ X86_64_COMPLEX_X87_CLASS, ++ X86_64_MEMORY_CLASS ++ }; + -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif ++#define MAX_CLASSES 4 + -+#include -+#include ++#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ ++/* x86-64 register passing implementation. See x86-64 ABI for details. Goal ++ of this code is to classify each 8bytes of incoming argument by the register ++ class and assign registers accordingly. */ + -+#define FFI_64_BIT_MAX 9223372036854775807 ++/* Return the union class of CLASS1 and CLASS2. ++ See the x86-64 PS ABI for details. */ + -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif ++static enum x86_64_reg_class ++merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) ++{ ++ /* Rule #1: If both classes are equal, this is the resulting class. */ ++ if (class1 == class2) ++ return class1; + -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ ++ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is ++ the other class. */ ++ if (class1 == X86_64_NO_CLASS) ++ return class2; ++ if (class2 == X86_64_NO_CLASS) ++ return class1; + -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; ++ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ ++ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) ++ return X86_64_MEMORY_CLASS; + -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif ++ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ ++ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) ++ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) ++ return X86_64_INTEGERSI_CLASS; ++ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS ++ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) ++ return X86_64_INTEGER_CLASS; + -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif ++ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, ++ MEMORY is used. */ ++ if (class1 == X86_64_X87_CLASS ++ || class1 == X86_64_X87UP_CLASS ++ || class1 == X86_64_COMPLEX_X87_CLASS ++ || class2 == X86_64_X87_CLASS ++ || class2 == X86_64_X87UP_CLASS ++ || class2 == X86_64_COMPLEX_X87_CLASS) ++ return X86_64_MEMORY_CLASS; + -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif ++ /* Rule #6: Otherwise class SSE is used. */ ++ return X86_64_SSE_CLASS; ++} + -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif ++/* Classify the argument of type TYPE and mode MODE. ++ CLASSES will be filled by the register class used to pass each word ++ of the operand. The number of words is returned. In case the parameter ++ should be passed in memory, 0 is returned. As a special case for zero ++ sized containers, classes[0] will be NO_CLASS and 1 is returned. + -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif ++ See the x86-64 PS ABI for details. ++*/ ++static size_t ++classify_argument (ffi_type *type, enum x86_64_reg_class classes[], ++ size_t byte_offset) ++{ ++ switch (type->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ { ++ size_t size = byte_offset + type->size; + -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern ++ if (size <= 4) ++ { ++ classes[0] = X86_64_INTEGERSI_CLASS; ++ return 1; ++ } ++ else if (size <= 8) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ return 1; ++ } ++ else if (size <= 12) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ classes[1] = X86_64_INTEGERSI_CLASS; ++ return 2; ++ } ++ else if (size <= 16) ++ { ++ classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; ++ return 2; ++ } ++ else ++ FFI_ASSERT (0); ++ } ++ case FFI_TYPE_FLOAT: ++ if (!(byte_offset % 8)) ++ classes[0] = X86_64_SSESF_CLASS; ++ else ++ classes[0] = X86_64_SSE_CLASS; ++ return 1; ++ case FFI_TYPE_DOUBLE: ++ classes[0] = X86_64_SSEDF_CLASS; ++ return 1; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ classes[0] = X86_64_X87_CLASS; ++ classes[1] = X86_64_X87UP_CLASS; ++ return 2; +#endif ++ case FFI_TYPE_STRUCT: ++ { ++ const size_t UNITS_PER_WORD = 8; ++ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; ++ ffi_type **ptr; ++ int i; ++ enum x86_64_reg_class subclasses[MAX_CLASSES]; + -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; ++ /* If the struct is larger than 32 bytes, pass it on the stack. */ ++ if (type->size > 32) ++ return 0; + -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif ++ for (i = 0; i < words; i++) ++ classes[i] = X86_64_NO_CLASS; + -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ /* Zero sized arrays or structures are NO_CLASS. We return 0 to ++ signalize memory class, so handle it as special case. */ ++ if (!words) ++ { ++ classes[0] = X86_64_NO_CLASS; ++ return 1; ++ } + -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; ++ /* Merge the fields of structure. */ ++ for (ptr = type->elements; *ptr != NULL; ptr++) ++ { ++ size_t num; + -+typedef unsigned FFI_TYPE; ++ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); + -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; ++ num = classify_argument (*ptr, subclasses, byte_offset % 8); ++ if (num == 0) ++ return 0; ++ for (i = 0; i < num; i++) ++ { ++ size_t pos = byte_offset / 8; ++ classes[i + pos] = ++ merge_classes (subclasses[i], classes[i + pos]); ++ } + -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif ++ byte_offset += (*ptr)->size; ++ } + -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ if (words > 2) ++ { ++ /* When size > 16 bytes, if the first one isn't ++ X86_64_SSE_CLASS or any other ones aren't ++ X86_64_SSEUP_CLASS, everything should be passed in ++ memory. */ ++ if (classes[0] != X86_64_SSE_CLASS) ++ return 0; + -+/* ---- Definitions for the raw API -------------------------------------- */ ++ for (i = 1; i < words; i++) ++ if (classes[i] != X86_64_SSEUP_CLASS) ++ return 0; ++ } + -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif ++ /* Final merger cleanup. */ ++ for (i = 0; i < words; i++) ++ { ++ /* If one class is MEMORY, everything should be passed in ++ memory. */ ++ if (classes[i] == X86_64_MEMORY_CLASS) ++ return 0; + -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif ++ /* The X86_64_SSEUP_CLASS should be always preceded by ++ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ ++ if (classes[i] == X86_64_SSEUP_CLASS ++ && classes[i - 1] != X86_64_SSE_CLASS ++ && classes[i - 1] != X86_64_SSEUP_CLASS) ++ { ++ /* The first one should never be X86_64_SSEUP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ classes[i] = X86_64_SSE_CLASS; ++ } + -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; ++ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, ++ everything should be passed in memory. */ ++ if (classes[i] == X86_64_X87UP_CLASS ++ && (classes[i - 1] != X86_64_X87_CLASS)) ++ { ++ /* The first one should never be X86_64_X87UP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ return 0; ++ } ++ } ++ return words; ++ } + -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif ++ default: ++ FFI_ASSERT(0); ++ } ++ return 0; /* Never reached. */ ++} + ++/* Examine the argument and return set number of register required in each ++ class. Return zero iff parameter should be passed in memory, otherwise ++ the number of registers. */ + -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); ++static size_t ++examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], ++ _Bool in_return, int *pngpr, int *pnsse) ++{ ++ size_t n; ++ int i, ngpr, nsse; + -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); ++ n = classify_argument (type, classes, 0); ++ if (n == 0) ++ return 0; + -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ ++ ngpr = nsse = 0; ++ for (i = 0; i < n; ++i) ++ switch (classes[i]) ++ { ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ ngpr++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSESF_CLASS: ++ case X86_64_SSEDF_CLASS: ++ nsse++; ++ break; ++ case X86_64_NO_CLASS: ++ case X86_64_SSEUP_CLASS: ++ break; ++ case X86_64_X87_CLASS: ++ case X86_64_X87UP_CLASS: ++ case X86_64_COMPLEX_X87_CLASS: ++ return in_return != 0; ++ default: ++ abort (); ++ } + -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); ++ *pngpr = ngpr; ++ *pnsse = nsse; + -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); ++ return n; ++} + -+/* ---- Definitions for closures ----------------------------------------- */ ++/* Perform machine dependent cif processing. */ + -+#if FFI_CLOSURES ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int gprcount, ssecount, i, avn, ngpr, nsse, flags; ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t bytes, n; + -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif ++ gprcount = ssecount = 0; + -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); ++ flags = cif->rtype->type; ++ if (flags != FFI_TYPE_VOID) ++ { ++ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); ++ if (n == 0) ++ { ++ /* The return value is passed in memory. A pointer to that ++ memory is the first argument. Allocate a register for it. */ ++ gprcount++; ++ /* We don't have to do anything in asm for the return. */ ++ flags = FFI_TYPE_VOID; ++ } ++ else if (flags == FFI_TYPE_STRUCT) ++ { ++ /* Mark which registers the result appears in. */ ++ _Bool sse0 = SSE_CLASS_P (classes[0]); ++ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); ++ if (sse0 && !sse1) ++ flags |= 1 << 8; ++ else if (!sse0 && sse1) ++ flags |= 1 << 9; ++ else if (sse0 && sse1) ++ flags |= 1 << 10; ++ /* Mark the true size of the structure. */ ++ flags |= cif->rtype->size << 12; ++ } ++ } + -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); ++ /* Go over all arguments and determine the way they should be passed. ++ If it's in a register and there is space for it, let that be so. If ++ not, add it's size to the stack byte count. */ ++ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) ++ { ++ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = cif->arg_types[i]->alignment; + -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); ++ if (align < 8) ++ align = 8; + -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; ++ bytes = ALIGN (bytes, align); ++ bytes += cif->arg_types[i]->size; ++ } ++ else ++ { ++ gprcount += ngpr; ++ ssecount += nsse; ++ } ++ } ++ if (ssecount) ++ flags |= 1 << 11; ++ cif->flags = flags; ++ cif->bytes = (unsigned)ALIGN (bytes, 8); + -+#if !FFI_NATIVE_RAW_API ++ return FFI_OK; ++} + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++void ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int gprcount, ssecount, ngpr, nsse, i, avn; ++ _Bool ret_in_memory; ++ struct register_args *reg_args; + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ /* Can't call 32-bit mode from 64-bit mode. */ ++ FFI_ASSERT (cif->abi == FFI_UNIX64); + -+#endif ++ /* If the return value is a struct and we don't have a return value ++ address then we need to make one. Note the setting of flags to ++ VOID above in ffi_prep_cif_machdep. */ ++ ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT ++ && (cif->flags & 0xff) == FFI_TYPE_VOID); ++ if (rvalue == NULL && ret_in_memory) ++ rvalue = alloca (cif->rtype->size); + -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; ++ /* Allocate the space for the arguments, plus 4 words of temp space. */ ++ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); ++ reg_args = (struct register_args *) stack; ++ argp = stack + sizeof (struct register_args); + -+} ffi_raw_closure; ++ gprcount = ssecount = 0; + -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif ++ /* If the return value is passed in memory, add the pointer as the ++ first integer argument. */ ++ if (ret_in_memory) ++ reg_args->gpr[gprcount++] = (unsigned long) rvalue; + -+ ffi_cif *cif; ++ avn = cif->nargs; ++ arg_types = cif->arg_types; + -+#if !FFI_NATIVE_RAW_API ++ for (i = 0; i < avn; ++i) ++ { ++ size_t n, size = arg_types[i]->size; + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; + -+#endif ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ memcpy (argp, avalue[i], size); ++ argp += size; ++ } ++ else ++ { ++ /* The argument is passed entirely in registers. */ ++ char *a = (char *) avalue[i]; ++ int j; + -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; ++ for (j = 0; j < n; j++, a += 8, size -= 8) ++ { ++ switch (classes[j]) ++ { ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ /* Sign-extend integer arguments passed in general ++ purpose registers, to cope with the fact that ++ LLVM incorrectly assumes that this will be done ++ (the x86-64 PS ABI does not specify this). */ ++ switch (arg_types[i]->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); ++ break; ++ case FFI_TYPE_SINT16: ++ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); ++ break; ++ case FFI_TYPE_SINT32: ++ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); ++ break; ++ default: ++ reg_args->gpr[gprcount] = 0; ++ memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); ++ } ++ gprcount++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSEDF_CLASS: ++ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; ++ break; ++ case X86_64_SSESF_CLASS: ++ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; ++ break; ++ default: ++ abort(); ++ } ++ } ++ } ++ } + -+} ffi_java_raw_closure; ++ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), ++ cif->flags, rvalue, fn, ssecount); ++} + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); ++extern void ffi_closure_unix64(void); + +ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *codeloc) ++{ ++ volatile unsigned short *tramp; + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ /* Sanity check on the cif ABI. */ ++ { ++ int abi = cif->abi; ++ if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))) ++ return FFI_BAD_ABI; ++ } + -+#endif /* FFI_CLOSURES */ ++ tramp = (volatile unsigned short *) &closure->tramp[0]; + -+#if FFI_GO_CLOSURES ++ tramp[0] = 0xbb49; /* mov , %r11 */ ++ *((unsigned long long * volatile) &tramp[1]) ++ = (unsigned long) ffi_closure_unix64; ++ tramp[5] = 0xba49; /* mov , %r10 */ ++ *((unsigned long long * volatile) &tramp[6]) ++ = (unsigned long) codeloc; + -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; ++ /* Set the carry bit iff the function uses any sse registers. ++ This is clc or stc, together with the first byte of the jmp. */ ++ tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; + -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); ++ tramp[11] = 0xe3ff; /* jmp *%r11 */ + -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; + -+#endif /* FFI_GO_CLOSURES */ ++ return FFI_OK; ++} + -+/* ---- Public interface definition -------------------------------------- */ ++int ++ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue, ++ struct register_args *reg_args, char *argp) ++{ ++ ffi_cif *cif; ++ void **avalue; ++ ffi_type **arg_types; ++ long i, avn; ++ int gprcount, ssecount, ngpr, nsse; ++ int ret; + -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ cif = closure->cif; ++ avalue = alloca(cif->nargs * sizeof(void *)); ++ gprcount = ssecount = 0; + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ ret = cif->rtype->type; ++ if (ret != FFI_TYPE_VOID) ++ { ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); ++ if (n == 0) ++ { ++ /* The return value goes in memory. Arrange for the closure ++ return value to go directly back to the original caller. */ ++ rvalue = (void *) (unsigned long) reg_args->gpr[gprcount++]; ++ /* We don't have to do anything in asm for the return. */ ++ ret = FFI_TYPE_VOID; ++ } ++ else if (ret == FFI_TYPE_STRUCT && n == 2) ++ { ++ /* Mark which register the second word of the structure goes in. */ ++ _Bool sse0 = SSE_CLASS_P (classes[0]); ++ _Bool sse1 = SSE_CLASS_P (classes[1]); ++ if (!sse0 && sse1) ++ ret |= 1 << 8; ++ else if (sse0 && !sse1) ++ ret |= 1 << 9; ++ } ++ } + -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); ++ avn = cif->nargs; ++ arg_types = cif->arg_types; + -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) ++ for (i = 0; i < avn; ++i) ++ { ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t n; + -+/* ---- Definitions shared with assembly code ---------------------------- */ ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; + -+#endif ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; + -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ avalue[i] = argp; ++ argp += arg_types[i]->size; ++ } ++ /* If the argument is in a single register, or two consecutive ++ integer registers, then we can use that address directly. */ ++ else if (n == 1 ++ || (n == 2 && !(SSE_CLASS_P (classes[0]) ++ || SSE_CLASS_P (classes[1])))) ++ { ++ /* The argument is in a single register. */ ++ if (SSE_CLASS_P (classes[0])) ++ { ++ avalue[i] = ®_args->sse[ssecount]; ++ ssecount += n; ++ } ++ else ++ { ++ avalue[i] = ®_args->gpr[gprcount]; ++ gprcount += n; ++ } ++ } ++ /* Otherwise, allocate space to make them consecutive. */ ++ else ++ { ++ char *a = alloca (16); ++ int j; + -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ avalue[i] = a; ++ for (j = 0; j < n; j++, a += 8) ++ { ++ if (SSE_CLASS_P (classes[j])) ++ memcpy (a, ®_args->sse[ssecount++], 8); ++ else ++ memcpy (a, ®_args->gpr[gprcount++], 8); ++ } ++ } ++ } + -+#ifdef __cplusplus ++ /* Invoke the closure. */ ++ closure->fun (cif, rvalue, avalue, closure->user_data); ++ ++ /* Tell assembly how to perform return type promotions. */ ++ return ret; +} -+#endif + -+#endif ++#endif /* __x86_64__ */ + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __x86_64__ +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,936 @@ ++#ifdef __i386__ + -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. ++ Copyright (c) 2002 Ranjit Mathew ++ Copyright (c) 2002 Bo Thorsen ++ Copyright (c) 2002 Roger Sayle ++ Copyright (C) 2008, 2010 Free Software Foundation, Inc. + -+ 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: ++ x86 Foreign Function Interface + -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -18573,1426 +31635,4011 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/ + 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. -+ + ----------------------------------------------------------------------- */ + -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. ++#if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__) + -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. ++#ifdef _WIN64 ++#include ++#endif + -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. ++#include ++#include + -+ More details on the raw and cloure API can be found in: ++#include + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+ and ++/* ffi_prep_args is called by the assembly routine once stack space ++ has been allocated for the function's arguments */ + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ ++unsigned int ffi_prep_args(char *stack, extended_cif *ecif); ++unsigned int ffi_prep_args(char *stack, extended_cif *ecif) ++{ ++ register unsigned int i; ++ register void **p_argv; ++ register char *argp; ++ register ffi_type **p_arg; ++#ifndef X86_WIN64 ++ const int cabi = ecif->cif->abi; ++ const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; ++ unsigned int stack_args_count = 0; ++ void *p_stack_data[3]; ++ char *argp2 = stack; ++#else ++ #define dir 1 ++#endif + -+#ifndef LIBFFI_H -+#define LIBFFI_H ++ argp = stack; + -+#ifdef __cplusplus -+extern "C" { ++ if ((ecif->cif->flags == FFI_TYPE_STRUCT ++ || ecif->cif->flags == FFI_TYPE_MS_STRUCT) ++#ifdef X86_WIN64 ++ && ((ecif->cif->rtype->size & (1 | 2 | 4 | 8)) == 0) +#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_64 -+#define X86_64 ++ ) ++ { ++#ifndef X86_WIN64 ++ /* For fastcall/thiscall/register this is first register-passed ++ argument. */ ++ if (cabi == FFI_THISCALL || cabi == FFI_FASTCALL || cabi == FFI_REGISTER) ++ { ++ p_stack_data[stack_args_count] = argp; ++ ++stack_args_count; ++ } +#endif + -+/* ---- System configuration information --------------------------------- */ ++ *(void **) argp = ecif->rvalue; ++ argp += sizeof(void*); ++ } + -+#include ++ p_arg = ecif->cif->arg_types; ++ p_argv = ecif->avalue; ++ if (dir < 0) ++ { ++ const int nargs = ecif->cif->nargs - 1; ++ if (nargs > 0) ++ { ++ p_arg += nargs; ++ p_argv += nargs; ++ } ++ } + -+#ifndef LIBFFI_ASM ++ for (i = ecif->cif->nargs; ++ i != 0; ++ i--, p_arg += dir, p_argv += dir) ++ { ++ /* Align if necessary */ ++ if ((sizeof(void*) - 1) & (size_t) argp) ++ argp = (char *) ALIGN(argp, sizeof(void*)); + -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif ++ size_t z = (*p_arg)->size; + -+#include -+#include ++#ifdef X86_WIN64 ++ if (z > FFI_SIZEOF_ARG ++ || ((*p_arg)->type == FFI_TYPE_STRUCT ++ && (z & (1 | 2 | 4 | 8)) == 0) ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++ || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) ++#endif ++ ) ++ { ++ z = FFI_SIZEOF_ARG; ++ *(void **)argp = *p_argv; ++ } ++ else if ((*p_arg)->type == FFI_TYPE_FLOAT) ++ { ++ memcpy(argp, *p_argv, z); ++ } ++ else ++#endif ++ if (z < FFI_SIZEOF_ARG) ++ { ++ z = FFI_SIZEOF_ARG; ++ switch ((*p_arg)->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT8: ++ *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_SINT16: ++ *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_SINT32: ++ *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_UINT32: ++ *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); ++ break; ++ ++ case FFI_TYPE_STRUCT: ++ *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); ++ break; ++ ++ default: ++ FFI_ASSERT(0); ++ } ++ } ++ else ++ { ++ memcpy(argp, *p_argv, z); ++ } + -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ ++#ifndef X86_WIN64 ++ /* For thiscall/fastcall/register convention register-passed arguments ++ are the first two none-floating-point arguments with a size ++ smaller or equal to sizeof (void*). */ ++ if ((z == FFI_SIZEOF_ARG) ++ && ((cabi == FFI_REGISTER) ++ || (cabi == FFI_THISCALL && stack_args_count < 1) ++ || (cabi == FFI_FASTCALL && stack_args_count < 2)) ++ && ((*p_arg)->type != FFI_TYPE_FLOAT && (*p_arg)->type != FFI_TYPE_STRUCT) ++ ) ++ { ++ if (dir < 0 && stack_args_count > 2) ++ { ++ /* Iterating arguments backwards, so first register-passed argument ++ will be passed last. Shift temporary values to make place. */ ++ p_stack_data[0] = p_stack_data[1]; ++ p_stack_data[1] = p_stack_data[2]; ++ stack_args_count = 2; ++ } + -+#define FFI_64_BIT_MAX 9223372036854775807 ++ p_stack_data[stack_args_count] = argp; ++ ++stack_args_count; ++ } ++#endif + -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#ifdef X86_WIN64 ++ argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif ++ argp += z; +#endif ++ } + -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ ++#ifndef X86_WIN64 ++ /* We need to move the register-passed arguments for thiscall/fastcall/register ++ on top of stack, so that those can be moved to registers by call-handler. */ ++ if (stack_args_count > 0) ++ { ++ if (dir < 0 && stack_args_count > 1) ++ { ++ /* Reverse order if iterating arguments backwards */ ++ ffi_arg tmp = *(ffi_arg*) p_stack_data[0]; ++ *(ffi_arg*) p_stack_data[0] = *(ffi_arg*) p_stack_data[stack_args_count - 1]; ++ *(ffi_arg*) p_stack_data[stack_args_count - 1] = tmp; ++ } ++ ++ int i; ++ for (i = 0; i < stack_args_count; i++) ++ { ++ if (p_stack_data[i] != argp2) ++ { ++ ffi_arg tmp = *(ffi_arg*) p_stack_data[i]; ++ memmove (argp2 + FFI_SIZEOF_ARG, argp2, (size_t) ((char*) p_stack_data[i] - (char*)argp2)); ++ *(ffi_arg *) argp2 = tmp; ++ } + -+typedef struct _ffi_type ++ argp2 += FFI_SIZEOF_ARG; ++ } ++ } ++ ++ return stack_args_count; ++#endif ++ return 0; ++} ++ ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; ++ unsigned int i; ++ ffi_type **ptr; + -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++#ifdef X86_WIN64 ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++#endif ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++#ifndef X86_WIN64 ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++ case FFI_TYPE_LONGDOUBLE: +#endif ++#endif ++ cif->flags = (unsigned) cif->rtype->type; ++ break; + -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" ++ case FFI_TYPE_UINT64: ++#ifdef X86_WIN64 ++ case FFI_TYPE_POINTER: +#endif ++ cif->flags = FFI_TYPE_SINT64; ++ break; + -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 ++ case FFI_TYPE_STRUCT: ++#ifndef X86 ++ if (cif->rtype->size == 1) ++ { ++ cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ ++ } ++ else if (cif->rtype->size == 2) ++ { ++ cif->flags = FFI_TYPE_SMALL_STRUCT_2B; /* same as short size */ ++ } ++ else if (cif->rtype->size == 4) ++ { ++#ifdef X86_WIN64 ++ cif->flags = FFI_TYPE_SMALL_STRUCT_4B; ++#else ++ cif->flags = FFI_TYPE_INT; /* same as int type */ ++#endif ++ } ++ else if (cif->rtype->size == 8) ++ { ++ cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ ++ } ++ else ++#endif ++ { ++#ifdef X86_WIN32 ++ if (cif->abi == FFI_MS_CDECL) ++ cif->flags = FFI_TYPE_MS_STRUCT; ++ else ++#endif ++ cif->flags = FFI_TYPE_STRUCT; ++ /* allocate space for return value pointer */ ++ cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); ++ } ++ break; ++ ++ default: ++#ifdef X86_WIN64 ++ cif->flags = FFI_TYPE_SINT64; ++ break; ++ case FFI_TYPE_INT: ++ cif->flags = FFI_TYPE_SINT32; +#else -+ #error "int size not supported" ++ cif->flags = FFI_TYPE_INT; +#endif ++ break; ++ } + -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" ++ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) ++ { ++ if (((*ptr)->alignment - 1) & cif->bytes) ++ cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); ++ cif->bytes += (unsigned)ALIGN((*ptr)->size, FFI_SIZEOF_ARG); ++ } ++ ++#ifdef X86_WIN64 ++ /* ensure space for storing four registers */ ++ cif->bytes += 4 * FFI_SIZEOF_ARG; +#endif + -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" ++#ifndef X86_WIN32 ++#ifndef X86_WIN64 ++ if (cif->abi == FFI_SYSV || cif->abi == FFI_UNIX64) ++#endif ++ cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) ++ return FFI_OK; ++} ++ ++#ifdef X86_WIN64 ++extern int ++ffi_call_win64(unsigned int (*)(char *, extended_cif *), extended_cif *, ++ unsigned, unsigned, unsigned *, void (*fn)(void)); +#else -+#define FFI_EXTERN extern ++extern void ++ffi_call_win32(unsigned int (*)(char *, extended_cif *), extended_cif *, ++ unsigned, unsigned, unsigned, unsigned *, void (*fn)(void)); ++extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, ++ unsigned, unsigned, unsigned *, void (*fn)(void)); +#endif + -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; ++void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ extended_cif ecif; + -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; ++ ecif.cif = cif; ++ ecif.avalue = avalue; ++ ++ /* If the return value is a struct and we don't have a return */ ++ /* value address then we need to make one */ ++ ++#ifdef X86_WIN64 ++ if (rvalue == NULL ++ && cif->flags == FFI_TYPE_STRUCT ++ && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0)) ++ { ++ ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); ++ } +#else -+#define ffi_type_longdouble ffi_type_double ++ if (rvalue == NULL ++ && (cif->flags == FFI_TYPE_STRUCT ++ || cif->flags == FFI_TYPE_MS_STRUCT)) ++ { ++ ecif.rvalue = alloca(cif->rtype->size); ++ } +#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++ else ++ ecif.rvalue = rvalue; ++ ++ ++ switch (cif->abi) ++ { ++#ifdef X86_WIN64 ++ case FFI_WIN64: ++ ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, ++ cif->flags, ecif.rvalue, fn); ++ break; +#else -+#define ffi_type_complex_longdouble ffi_type_complex_double ++#ifndef X86_WIN32 ++ case FFI_SYSV: ++ ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, ++ fn); ++ break; ++#else ++ case FFI_SYSV: ++ case FFI_MS_CDECL: +#endif ++ case FFI_STDCALL: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_PASCAL: ++ case FFI_REGISTER: ++ ffi_call_win32(ffi_prep_args, &ecif, cif->abi, cif->bytes, cif->flags, ++ ecif.rvalue, fn); ++ break; +#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++} + -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; + -+typedef unsigned FFI_TYPE; ++/** private members **/ + -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; ++/* The following __attribute__((regparm(1))) decorations will have no effect ++ on MSVC or SUNPRO_C -- standard conventions apply. */ ++static unsigned int ffi_prep_incoming_args (char *stack, void **ret, ++ void** args, ffi_cif* cif); ++void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) ++ __attribute__ ((regparm(1))); ++unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) ++ __attribute__ ((regparm(1))); ++unsigned int FFI_HIDDEN ffi_closure_WIN32_inner (ffi_closure *, void **, void *) ++ __attribute__ ((regparm(1))); ++void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) ++ __attribute__ ((regparm(1))); ++#ifdef X86_WIN32 ++void FFI_HIDDEN ffi_closure_raw_THISCALL (ffi_raw_closure *) ++ __attribute__ ((regparm(1))); ++#endif ++#ifndef X86_WIN64 ++void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *); ++void FFI_HIDDEN ffi_closure_THISCALL (ffi_closure *); ++void FFI_HIDDEN ffi_closure_FASTCALL (ffi_closure *); ++void FFI_HIDDEN ffi_closure_REGISTER (ffi_closure *); ++#else ++void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); +#endif -+} ffi_cif; + -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif ++/* This function is jumped to by the trampoline */ + -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++#ifdef X86_WIN64 ++void * FFI_HIDDEN ++ffi_closure_win64_inner (ffi_closure *closure, void *args) { ++ ffi_cif *cif; ++ void **arg_area; ++ void *result; ++ void *resp = &result; ++ ++ cif = closure->cif; ++ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); ++ ++ /* this call will initialize ARG_AREA, such that each ++ * element in that array points to the corresponding ++ * value on the stack; and if the function returns ++ * a structure, it will change RESP to point to the ++ * structure return address. */ ++ ++ ffi_prep_incoming_args(args, &resp, arg_area, cif); ++ ++ (closure->fun) (cif, resp, arg_area, closure->user_data); + -+/* ---- Definitions for the raw API -------------------------------------- */ ++ /* The result is returned in rax. This does the right thing for ++ result types except for floats; we have to 'mov xmm0, rax' in the ++ caller to correct this. ++ TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! ++ */ ++ return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; ++} + -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif ++#else ++unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) ++ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) ++{ ++ /* our various things... */ ++ ffi_cif *cif; ++ void **arg_area; + -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif ++ cif = closure->cif; ++ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; ++ /* this call will initialize ARG_AREA, such that each ++ * element in that array points to the corresponding ++ * value on the stack; and if the function returns ++ * a structure, it will change RESP to point to the ++ * structure return address. */ + -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif ++ ffi_prep_incoming_args(args, respp, arg_area, cif); + ++ (closure->fun) (cif, *respp, arg_area, closure->user_data); + -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); ++ return cif->flags; ++} + -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); ++unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) ++ffi_closure_WIN32_inner (ffi_closure *closure, void **respp, void *args) ++{ ++ /* our various things... */ ++ ffi_cif *cif; ++ void **arg_area; ++ unsigned int ret; + -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ ++ cif = closure->cif; ++ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); ++ /* this call will initialize ARG_AREA, such that each ++ * element in that array points to the corresponding ++ * value on the stack; and if the function returns ++ * a structure, it will change RESP to point to the ++ * structure return address. */ + -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); ++ ret = ffi_prep_incoming_args(args, respp, arg_area, cif); + -+/* ---- Definitions for closures ----------------------------------------- */ ++ (closure->fun) (cif, *respp, arg_area, closure->user_data); + -+#if FFI_CLOSURES ++ return ret; ++} ++#endif /* !X86_WIN64 */ + -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; ++static unsigned int ++ffi_prep_incoming_args(char *stack, void **rvalue, void **avalue, ++ ffi_cif *cif) ++{ ++ register unsigned int i; ++ register void **p_argv; ++ register char *argp; ++ register ffi_type **p_arg; ++#ifndef X86_WIN64 ++ const int cabi = cif->abi; ++ const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; ++ const unsigned int max_stack_count = (cabi == FFI_THISCALL) ? 1 ++ : (cabi == FFI_FASTCALL) ? 2 ++ : (cabi == FFI_REGISTER) ? 3 ++ : 0; ++ unsigned int passed_regs = 0; ++ void *p_stack_data[3] = { stack - 1 }; +#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; ++ #define dir 1 +#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif ++ ++ argp = stack; ++#ifndef X86_WIN64 ++ argp += max_stack_count * FFI_SIZEOF_ARG; +#endif + -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); ++ if ((cif->flags == FFI_TYPE_STRUCT ++ || cif->flags == FFI_TYPE_MS_STRUCT) ++#ifdef X86_WIN64 ++ && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0) ++#endif ++ ) ++ { ++#ifndef X86_WIN64 ++ if (passed_regs < max_stack_count) ++ { ++ *rvalue = *(void**) (stack + (passed_regs*FFI_SIZEOF_ARG)); ++ ++passed_regs; ++ } ++ else ++#endif ++ { ++ *rvalue = *(void **) argp; ++ argp += sizeof(void *); ++ } ++ } + -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); ++#ifndef X86_WIN64 ++ /* Do register arguments first */ ++ for (i = 0, p_arg = cif->arg_types; ++ i < cif->nargs && passed_regs < max_stack_count; ++ i++, p_arg++) ++ { ++ if ((*p_arg)->type == FFI_TYPE_FLOAT ++ || (*p_arg)->type == FFI_TYPE_STRUCT) ++ continue; + -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); ++ size_t sz = (*p_arg)->size; ++ if(sz == 0 || sz > FFI_SIZEOF_ARG) ++ continue; + -+#ifdef __sgi -+# pragma pack 8 ++ p_stack_data[passed_regs] = avalue + i; ++ avalue[i] = stack + (passed_regs*FFI_SIZEOF_ARG); ++ ++passed_regs; ++ } +#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; ++ ++ p_arg = cif->arg_types; ++ p_argv = avalue; ++ if (dir < 0) ++ { ++ const int nargs = cif->nargs - 1; ++ if (nargs > 0) ++ { ++ p_arg += nargs; ++ p_argv += nargs; ++ } ++ } ++ ++ for (i = cif->nargs; ++ i != 0; ++ i--, p_arg += dir, p_argv += dir) ++ { ++ /* Align if necessary */ ++ if ((sizeof(void*) - 1) & (size_t) argp) ++ argp = (char *) ALIGN(argp, sizeof(void*)); ++ ++ size_t z = (*p_arg)->size; ++ ++#ifdef X86_WIN64 ++ if (z > FFI_SIZEOF_ARG ++ || ((*p_arg)->type == FFI_TYPE_STRUCT ++ && (z & (1 | 2 | 4 | 8)) == 0) ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++ || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) ++#endif ++ ) ++ { ++ z = FFI_SIZEOF_ARG; ++ *p_argv = *(void **)argp; ++ } ++ else ++#else ++ if (passed_regs > 0 ++ && z <= FFI_SIZEOF_ARG ++ && (p_argv == p_stack_data[0] ++ || p_argv == p_stack_data[1] ++ || p_argv == p_stack_data[2])) ++ { ++ /* Already assigned a register value */ ++ continue; ++ } ++ else ++#endif ++ { ++ /* because we're little endian, this is what it turns into. */ ++ *p_argv = (void*) argp; ++ } ++ ++#ifdef X86_WIN64 ++ argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; ++ argp += z; +#endif -+ ffi_cif *cif; ++ } + -+#if !FFI_NATIVE_RAW_API ++ return (size_t)argp - (size_t)stack; ++} + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ ++{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ ++ void* __fun = (void*)(FUN); \ ++ void* __ctx = (void*)(CTX); \ ++ *(unsigned char*) &__tramp[0] = 0x41; \ ++ *(unsigned char*) &__tramp[1] = 0xbb; \ ++ *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ ++ *(unsigned char*) &__tramp[6] = 0x48; \ ++ *(unsigned char*) &__tramp[7] = 0xb8; \ ++ *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ ++ *(unsigned char *) &__tramp[16] = 0x49; \ ++ *(unsigned char *) &__tramp[17] = 0xba; \ ++ *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ ++ *(unsigned char *) &__tramp[26] = 0x41; \ ++ *(unsigned char *) &__tramp[27] = 0xff; \ ++ *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ ++ } ++ ++/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ ++ ++#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ++{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ ++ unsigned int __fun = (unsigned int)(FUN); \ ++ unsigned int __ctx = (unsigned int)(CTX); \ ++ unsigned int __dis = __fun - (__ctx + 10); \ ++ *(unsigned char*) &__tramp[0] = 0xb8; \ ++ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ ++ *(unsigned char*) &__tramp[5] = 0xe9; \ ++ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ ++ } ++ ++#define FFI_INIT_TRAMPOLINE_RAW_THISCALL(TRAMP,FUN,CTX,SIZE) \ ++{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ ++ unsigned int __fun = (unsigned int)(FUN); \ ++ unsigned int __ctx = (unsigned int)(CTX); \ ++ unsigned int __dis = __fun - (__ctx + 49); \ ++ unsigned short __size = (unsigned short)(SIZE); \ ++ *(unsigned int *) &__tramp[0] = 0x8324048b; /* mov (%esp), %eax */ \ ++ *(unsigned int *) &__tramp[4] = 0x4c890cec; /* sub $12, %esp */ \ ++ *(unsigned int *) &__tramp[8] = 0x04890424; /* mov %ecx, 4(%esp) */ \ ++ *(unsigned char*) &__tramp[12] = 0x24; /* mov %eax, (%esp) */ \ ++ *(unsigned char*) &__tramp[13] = 0xb8; \ ++ *(unsigned int *) &__tramp[14] = __size; /* mov __size, %eax */ \ ++ *(unsigned int *) &__tramp[18] = 0x08244c8d; /* lea 8(%esp), %ecx */ \ ++ *(unsigned int *) &__tramp[22] = 0x4802e8c1; /* shr $2, %eax ; dec %eax */ \ ++ *(unsigned short*) &__tramp[26] = 0x0b74; /* jz 1f */ \ ++ *(unsigned int *) &__tramp[28] = 0x8908518b; /* 2b: mov 8(%ecx), %edx */ \ ++ *(unsigned int *) &__tramp[32] = 0x04c18311; /* mov %edx, (%ecx) ; add $4, %ecx */ \ ++ *(unsigned char*) &__tramp[36] = 0x48; /* dec %eax */ \ ++ *(unsigned short*) &__tramp[37] = 0xf575; /* jnz 2b ; 1f: */ \ ++ *(unsigned char*) &__tramp[39] = 0xb8; \ ++ *(unsigned int*) &__tramp[40] = __ctx; /* movl __ctx, %eax */ \ ++ *(unsigned char *) &__tramp[44] = 0xe8; \ ++ *(unsigned int*) &__tramp[45] = __dis; /* call __fun */ \ ++ *(unsigned char*) &__tramp[49] = 0xc2; /* ret */ \ ++ *(unsigned short*) &__tramp[50] = (__size + 8); /* ret (__size + 8) */ \ ++ } ++ ++#define FFI_INIT_TRAMPOLINE_WIN32(TRAMP,FUN,CTX) \ ++{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ ++ unsigned int __fun = (unsigned int)(FUN); \ ++ unsigned int __ctx = (unsigned int)(CTX); \ ++ unsigned int __dis = __fun - (__ctx + 10); \ ++ *(unsigned char*) &__tramp[0] = 0x68; \ ++ *(unsigned int*) &__tramp[1] = __ctx; /* push __ctx */ \ ++ *(unsigned char*) &__tramp[5] = 0xe9; \ ++ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ ++ } + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++/* the cif must already be prep'ed */ + -+#endif ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) ++{ ++#ifdef X86_WIN64 ++#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) ++#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) ++ if (cif->abi == FFI_WIN64) ++ { ++ int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); ++ FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], ++ &ffi_closure_win64, ++ codeloc, mask); ++ /* make sure we can execute here */ ++ } ++#else ++ if (cif->abi == FFI_SYSV) ++ { ++ FFI_INIT_TRAMPOLINE (&closure->tramp[0], ++ &ffi_closure_SYSV, ++ (void*)codeloc); ++ } ++ else if (cif->abi == FFI_REGISTER) ++ { ++ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], ++ &ffi_closure_REGISTER, ++ (void*)codeloc); ++ } ++ else if (cif->abi == FFI_FASTCALL) ++ { ++ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], ++ &ffi_closure_FASTCALL, ++ (void*)codeloc); ++ } ++ else if (cif->abi == FFI_THISCALL) ++ { ++ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], ++ &ffi_closure_THISCALL, ++ (void*)codeloc); ++ } ++ else if (cif->abi == FFI_STDCALL || cif->abi == FFI_PASCAL) ++ { ++ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], ++ &ffi_closure_STDCALL, ++ (void*)codeloc); ++ } ++#ifdef X86_WIN32 ++ else if (cif->abi == FFI_MS_CDECL) ++ { ++ FFI_INIT_TRAMPOLINE (&closure->tramp[0], ++ &ffi_closure_SYSV, ++ (void*)codeloc); ++ } ++#endif /* X86_WIN32 */ ++#endif /* !X86_WIN64 */ ++ else ++ { ++ return FFI_BAD_ABI; ++ } ++ ++ closure->cif = cif; ++ closure->user_data = user_data; ++ closure->fun = fun; + -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; ++ return FFI_OK; ++} + -+} ffi_raw_closure; ++/* ------- Native raw API support -------------------------------- */ + -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; ++#if !FFI_NO_RAW_API ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ int i; ++ ++ if (cif->abi != FFI_SYSV ++#ifdef X86_WIN32 ++ && cif->abi != FFI_THISCALL +#endif ++ ) ++ return FFI_BAD_ABI; + -+ ffi_cif *cif; ++ /* we currently don't support certain kinds of arguments for raw ++ closures. This should be implemented by a separate assembly ++ language routine, since it would require argument processing, ++ something we don't do now for performance. */ + -+#if !FFI_NATIVE_RAW_API ++ for (i = cif->nargs-1; i >= 0; i--) ++ { ++ FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); ++ FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); ++ } ++ ++#ifdef X86_WIN32 ++ if (cif->abi == FFI_SYSV) ++ { ++#endif ++ FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, ++ codeloc); ++#ifdef X86_WIN32 ++ } ++ else if (cif->abi == FFI_THISCALL) ++ { ++ FFI_INIT_TRAMPOLINE_RAW_THISCALL (&closure->tramp[0], &ffi_closure_raw_THISCALL, codeloc, cif->bytes); ++ } ++#endif ++ closure->cif = cif; ++ closure->user_data = user_data; ++ closure->fun = fun; + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++ return FFI_OK; ++} + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++static unsigned int ++ffi_prep_args_raw(char *stack, extended_cif *ecif) ++{ ++ const ffi_cif *cif = ecif->cif; ++ unsigned int i, passed_regs = 0; ++ ++#ifndef X86_WIN64 ++ const unsigned int abi = cif->abi; ++ const unsigned int max_regs = (abi == FFI_THISCALL) ? 1 ++ : (abi == FFI_FASTCALL) ? 2 ++ : (abi == FFI_REGISTER) ? 3 ++ : 0; ++ ++ if (cif->flags == FFI_TYPE_STRUCT) ++ ++passed_regs; ++ ++ for (i = 0; i < cif->nargs && passed_regs <= max_regs; i++) ++ { ++ if (cif->arg_types[i]->type == FFI_TYPE_FLOAT ++ || cif->arg_types[i]->type == FFI_TYPE_STRUCT) ++ continue; ++ ++ size_t sz = cif->arg_types[i]->size; ++ if (sz == 0 || sz > FFI_SIZEOF_ARG) ++ continue; + ++ ++passed_regs; ++ } +#endif + -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; ++ memcpy (stack, ecif->avalue, cif->bytes); ++ return passed_regs; ++} + -+} ffi_java_raw_closure; ++/* we borrow this routine from libffi (it must be changed, though, to ++ * actually call the function passed in the first argument. as of ++ * libffi-1.20, this is not the case.) ++ */ + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); ++void ++ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) ++{ ++ extended_cif ecif; ++ void **avalue = (void **)fake_avalue; + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); ++ ecif.cif = cif; ++ ecif.avalue = avalue; ++ ++ /* If the return value is a struct and we don't have a return */ ++ /* value address then we need to make one */ + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); ++ if (rvalue == NULL ++ && (cif->flags == FFI_TYPE_STRUCT ++ || cif->flags == FFI_TYPE_MS_STRUCT)) ++ { ++ ecif.rvalue = alloca(cif->rtype->size); ++ } ++ else ++ ecif.rvalue = rvalue; ++ ++ ++ switch (cif->abi) ++ { ++#ifndef X86_WIN32 ++ case FFI_SYSV: ++ ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, ++ ecif.rvalue, fn); ++ break; ++#else ++ case FFI_SYSV: ++ case FFI_MS_CDECL: ++#endif ++#ifndef X86_WIN64 ++ case FFI_STDCALL: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_PASCAL: ++ case FFI_REGISTER: ++ ffi_call_win32(ffi_prep_args_raw, &ecif, cif->abi, cif->bytes, cif->flags, ++ ecif.rvalue, fn); ++ break; ++#endif ++ default: ++ FFI_ASSERT(0); ++ break; ++ } ++} + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); ++#endif + -+#endif /* FFI_CLOSURES */ ++#endif /* !__x86_64__ || X86_WIN64 */ + -+#if FFI_GO_CLOSURES + -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; + -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/win32_i386.S modified/Modules/_ctypes/libffi_ios/x86/win32_i386.S +--- orig/Modules/_ctypes/libffi_ios/x86/win32_i386.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/win32_i386.S 2015-04-26 08:18:45.000000000 +0800 +@@ -0,0 +1,1356 @@ ++#ifdef __i386__ + -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); ++/* ----------------------------------------------------------------------- ++ win32.S - Copyright (c) 2014 Anthony Green ++ Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. ++ Copyright (c) 2001 John Beniton ++ Copyright (c) 2002 Ranjit Mathew ++ Copyright (c) 2009 Daniel Witte + -+#endif /* FFI_GO_CLOSURES */ + -+/* ---- Public interface definition -------------------------------------- */ ++ X86 Foreign Function Interface ++ ++ 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: ++ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. ++ ++ 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. ++ ----------------------------------------------------------------------- ++ */ ++ ++#define LIBFFI_ASM ++#include ++#include + -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++#define CIF_BYTES_OFFSET 16 ++#define CIF_FLAGS_OFFSET 20 + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++#ifdef _MSC_VER + -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); ++#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) + -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) ++.386 ++.MODEL FLAT, C + -+/* ---- Definitions shared with assembly code ---------------------------- */ ++EXTRN ffi_closure_SYSV_inner:NEAR ++EXTRN ffi_closure_WIN32_inner:NEAR + -+#endif ++_TEXT SEGMENT + -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 ++ffi_call_win32 PROC NEAR, ++ ffi_prep_args : NEAR PTR DWORD, ++ ecif : NEAR PTR DWORD, ++ cif_abi : DWORD, ++ cif_bytes : DWORD, ++ cif_flags : DWORD, ++ rvalue : NEAR PTR DWORD, ++ fn : NEAR PTR DWORD + -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ;; Make room for all of the new args. ++ mov ecx, cif_bytes ++ sub esp, ecx + -+#ifdef __cplusplus -+} -+#endif ++ mov eax, esp + -+#endif ++ ;; Call ffi_prep_args ++ push ecif ++ push eax ++ call ffi_prep_args ++ add esp, 8 + ++ ;; Prepare registers ++ ;; EAX stores the number of register arguments ++ cmp eax, 0 ++ je fun ++ cmp eax, 3 ++ jl prepr_two_cmp ++ ++ mov ecx, esp ++ add esp, 12 ++ mov eax, DWORD PTR [ecx+8] ++ jmp prepr_two ++prepr_two_cmp: ++ cmp eax, 2 ++ jl prepr_one_prep ++ mov ecx, esp ++ add esp, 8 ++prepr_two: ++ mov edx, DWORD PTR [ecx+4] ++ jmp prepr_one ++prepr_one_prep: ++ mov ecx, esp ++ add esp, 4 ++prepr_one: ++ mov ecx, DWORD PTR [ecx] ++ cmp cif_abi, 7 ;; FFI_REGISTER ++ jne fun ++ ++ xchg ecx, eax ++ ++fun: ++ ;; Call function ++ call fn ++ ++ ;; Load ecx with the return type code ++ mov ecx, cif_flags ++ ++ ;; If the return value pointer is NULL, assume no return value. ++ cmp rvalue, 0 ++ jne ca_jumptable ++ ++ ;; Even if there is no space for the return value, we are ++ ;; obliged to handle floating-point values. ++ cmp ecx, FFI_TYPE_FLOAT ++ jne ca_epilogue ++ fstp st(0) ++ ++ jmp ca_epilogue ++ ++ca_jumptable: ++ jmp [ca_jumpdata + 4 * ecx] ++ca_jumpdata: ++ ;; Do not insert anything here between label and jump table. ++ dd offset ca_epilogue ;; FFI_TYPE_VOID ++ dd offset ca_retint ;; FFI_TYPE_INT ++ dd offset ca_retfloat ;; FFI_TYPE_FLOAT ++ dd offset ca_retdouble ;; FFI_TYPE_DOUBLE ++ dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE ++ dd offset ca_retuint8 ;; FFI_TYPE_UINT8 ++ dd offset ca_retsint8 ;; FFI_TYPE_SINT8 ++ dd offset ca_retuint16 ;; FFI_TYPE_UINT16 ++ dd offset ca_retsint16 ;; FFI_TYPE_SINT16 ++ dd offset ca_retint ;; FFI_TYPE_UINT32 ++ dd offset ca_retint ;; FFI_TYPE_SINT32 ++ dd offset ca_retint64 ;; FFI_TYPE_UINT64 ++ dd offset ca_retint64 ;; FFI_TYPE_SINT64 ++ dd offset ca_epilogue ;; FFI_TYPE_STRUCT ++ dd offset ca_retint ;; FFI_TYPE_POINTER ++ dd offset ca_retstruct1b ;; FFI_TYPE_SMALL_STRUCT_1B ++ dd offset ca_retstruct2b ;; FFI_TYPE_SMALL_STRUCT_2B ++ dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B ++ dd offset ca_epilogue ;; FFI_TYPE_MS_STRUCT ++ ++ /* Sign/zero extend as appropriate. */ ++ca_retuint8: ++ movzx eax, al ++ jmp ca_retint ++ ++ca_retsint8: ++ movsx eax, al ++ jmp ca_retint ++ ++ca_retuint16: ++ movzx eax, ax ++ jmp ca_retint ++ ++ca_retsint16: ++ movsx eax, ax ++ jmp ca_retint ++ ++ca_retint: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ mov [ecx + 0], eax ++ jmp ca_epilogue ++ ++ca_retint64: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ mov [ecx + 0], eax ++ mov [ecx + 4], edx ++ jmp ca_epilogue ++ ++ca_retfloat: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ fstp DWORD PTR [ecx] ++ jmp ca_epilogue ++ ++ca_retdouble: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ fstp QWORD PTR [ecx] ++ jmp ca_epilogue ++ ++ca_retlongdouble: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ fstp TBYTE PTR [ecx] ++ jmp ca_epilogue ++ ++ca_retstruct1b: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ mov [ecx + 0], al ++ jmp ca_epilogue ++ ++ca_retstruct2b: ++ ;; Load %ecx with the pointer to storage for the return value ++ mov ecx, rvalue ++ mov [ecx + 0], ax ++ jmp ca_epilogue ++ ++ca_epilogue: ++ ;; Epilogue code is autogenerated. ++ ret ++ffi_call_win32 ENDP ++ ++ffi_closure_THISCALL PROC NEAR ++ ;; Insert the register argument on the stack as the first argument ++ xchg DWORD PTR [esp+4], ecx ++ xchg DWORD PTR [esp], ecx ++ push ecx ++ jmp ffi_closure_STDCALL ++ffi_closure_THISCALL ENDP ++ ++ffi_closure_FASTCALL PROC NEAR ++ ;; Insert the 2 register arguments on the stack as the first argument ++ xchg DWORD PTR [esp+4], edx ++ xchg DWORD PTR [esp], ecx ++ push edx ++ push ecx ++ jmp ffi_closure_STDCALL ++ffi_closure_FASTCALL ENDP ++ ++ffi_closure_REGISTER PROC NEAR ++ ;; Insert the 3 register arguments on the stack as the first argument ++ push eax ++ xchg DWORD PTR [esp+8], ecx ++ xchg DWORD PTR [esp+4], edx ++ push ecx ++ push edx ++ jmp ffi_closure_STDCALL ++ffi_closure_REGISTER ENDP ++ ++ffi_closure_SYSV PROC NEAR FORCEFRAME ++ ;; the ffi_closure ctx is passed in eax by the trampoline. ++ ++ sub esp, 40 ++ lea edx, [ebp - 24] ++ mov [ebp - 12], edx ;; resp ++ lea edx, [ebp + 8] ++stub:: ++ mov [esp + 8], edx ;; args ++ lea edx, [ebp - 12] ++ mov [esp + 4], edx ;; &resp ++ mov [esp], eax ;; closure ++ call ffi_closure_SYSV_inner ++ mov ecx, [ebp - 12] ++ ++cs_jumptable: ++ jmp [cs_jumpdata + 4 * eax] ++cs_jumpdata: ++ ;; Do not insert anything here between the label and jump table. ++ dd offset cs_epilogue ;; FFI_TYPE_VOID ++ dd offset cs_retint ;; FFI_TYPE_INT ++ dd offset cs_retfloat ;; FFI_TYPE_FLOAT ++ dd offset cs_retdouble ;; FFI_TYPE_DOUBLE ++ dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE ++ dd offset cs_retuint8 ;; FFI_TYPE_UINT8 ++ dd offset cs_retsint8 ;; FFI_TYPE_SINT8 ++ dd offset cs_retuint16 ;; FFI_TYPE_UINT16 ++ dd offset cs_retsint16 ;; FFI_TYPE_SINT16 ++ dd offset cs_retint ;; FFI_TYPE_UINT32 ++ dd offset cs_retint ;; FFI_TYPE_SINT32 ++ dd offset cs_retint64 ;; FFI_TYPE_UINT64 ++ dd offset cs_retint64 ;; FFI_TYPE_SINT64 ++ dd offset cs_retstruct ;; FFI_TYPE_STRUCT ++ dd offset cs_retint ;; FFI_TYPE_POINTER ++ dd offset cs_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B ++ dd offset cs_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B ++ dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B ++ dd offset cs_retmsstruct ;; FFI_TYPE_MS_STRUCT ++ ++cs_retuint8: ++ movzx eax, BYTE PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retsint8: ++ movsx eax, BYTE PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retuint16: ++ movzx eax, WORD PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retsint16: ++ movsx eax, WORD PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retint: ++ mov eax, [ecx] ++ jmp cs_epilogue ++ ++cs_retint64: ++ mov eax, [ecx + 0] ++ mov edx, [ecx + 4] ++ jmp cs_epilogue ++ ++cs_retfloat: ++ fld DWORD PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retdouble: ++ fld QWORD PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retlongdouble: ++ fld TBYTE PTR [ecx] ++ jmp cs_epilogue ++ ++cs_retstruct: ++ ;; Caller expects us to pop struct return value pointer hidden arg. ++ ;; Epilogue code is autogenerated. ++ ret 4 ++ ++cs_retmsstruct: ++ ;; Caller expects us to return a pointer to the real return value. ++ mov eax, ecx ++ ;; Caller doesn't expects us to pop struct return value pointer hidden arg. ++ jmp cs_epilogue ++ ++cs_epilogue: ++ ;; Epilogue code is autogenerated. ++ ret ++ffi_closure_SYSV ENDP + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-03-12 21:32:24.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ ++#if !FFI_NO_RAW_API + -+#include ++#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) ++#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) ++#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) ++ ++ffi_closure_raw_THISCALL PROC NEAR USES esi FORCEFRAME ++ sub esp, 36 ++ mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif ++ mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data ++ mov [esp + 12], edx ++ lea edx, [ebp + 12] ++ jmp stubraw ++ffi_closure_raw_THISCALL ENDP ++ ++ffi_closure_raw_SYSV PROC NEAR USES esi FORCEFRAME ++ ;; the ffi_closure ctx is passed in eax by the trampoline. ++ ++ sub esp, 40 ++ mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif ++ mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data ++ mov [esp + 12], edx ;; user_data ++ lea edx, [ebp + 8] ++stubraw:: ++ mov [esp + 8], edx ;; raw_args ++ lea edx, [ebp - 24] ++ mov [esp + 4], edx ;; &res ++ mov [esp], esi ;; cif ++ call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun ++ mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags ++ lea ecx, [ebp - 24] ++ ++cr_jumptable: ++ jmp [cr_jumpdata + 4 * eax] ++cr_jumpdata: ++ ;; Do not insert anything here between the label and jump table. ++ dd offset cr_epilogue ;; FFI_TYPE_VOID ++ dd offset cr_retint ;; FFI_TYPE_INT ++ dd offset cr_retfloat ;; FFI_TYPE_FLOAT ++ dd offset cr_retdouble ;; FFI_TYPE_DOUBLE ++ dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE ++ dd offset cr_retuint8 ;; FFI_TYPE_UINT8 ++ dd offset cr_retsint8 ;; FFI_TYPE_SINT8 ++ dd offset cr_retuint16 ;; FFI_TYPE_UINT16 ++ dd offset cr_retsint16 ;; FFI_TYPE_SINT16 ++ dd offset cr_retint ;; FFI_TYPE_UINT32 ++ dd offset cr_retint ;; FFI_TYPE_SINT32 ++ dd offset cr_retint64 ;; FFI_TYPE_UINT64 ++ dd offset cr_retint64 ;; FFI_TYPE_SINT64 ++ dd offset cr_epilogue ;; FFI_TYPE_STRUCT ++ dd offset cr_retint ;; FFI_TYPE_POINTER ++ dd offset cr_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B ++ dd offset cr_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B ++ dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B ++ dd offset cr_epilogue ;; FFI_TYPE_MS_STRUCT ++ ++cr_retuint8: ++ movzx eax, BYTE PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retsint8: ++ movsx eax, BYTE PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retuint16: ++ movzx eax, WORD PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retsint16: ++ movsx eax, WORD PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retint: ++ mov eax, [ecx] ++ jmp cr_epilogue ++ ++cr_retint64: ++ mov eax, [ecx + 0] ++ mov edx, [ecx + 4] ++ jmp cr_epilogue ++ ++cr_retfloat: ++ fld DWORD PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retdouble: ++ fld QWORD PTR [ecx] ++ jmp cr_epilogue ++ ++cr_retlongdouble: ++ fld TBYTE PTR [ecx] ++ jmp cr_epilogue ++ ++cr_epilogue: ++ ;; Epilogue code is autogenerated. ++ ret ++ffi_closure_raw_SYSV ENDP + ++#endif /* !FFI_NO_RAW_API */ + -+#endif -+#ifdef __i386__ ++ffi_closure_STDCALL PROC NEAR FORCEFRAME ++ mov eax, [esp] ;; the ffi_closure ctx passed by the trampoline. ++ ++ sub esp, 40 ++ lea edx, [ebp - 24] ++ mov [ebp - 12], edx ;; resp ++ lea edx, [ebp + 12] ;; account for stub return address on stack ++ mov [esp + 8], edx ;; args ++ lea edx, [ebp - 12] ++ mov [esp + 4], edx ;; &resp ++ mov [esp], eax ;; closure ++ call ffi_closure_WIN32_inner ++ mov ecx, [ebp - 12] ++ ++ xchg [ebp + 4], eax ;;xchg size of stack parameters and ffi_closure ctx ++ mov eax, DWORD PTR [eax + CLOSURE_CIF_OFFSET] ++ mov eax, DWORD PTR [eax + CIF_FLAGS_OFFSET] ++ ++cd_jumptable: ++ jmp [cd_jumpdata + 4 * eax] ++cd_jumpdata: ++ ;; Do not insert anything here between the label and jump table. ++ dd offset cd_epilogue ;; FFI_TYPE_VOID ++ dd offset cd_retint ;; FFI_TYPE_INT ++ dd offset cd_retfloat ;; FFI_TYPE_FLOAT ++ dd offset cd_retdouble ;; FFI_TYPE_DOUBLE ++ dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE ++ dd offset cd_retuint8 ;; FFI_TYPE_UINT8 ++ dd offset cd_retsint8 ;; FFI_TYPE_SINT8 ++ dd offset cd_retuint16 ;; FFI_TYPE_UINT16 ++ dd offset cd_retsint16 ;; FFI_TYPE_SINT16 ++ dd offset cd_retint ;; FFI_TYPE_UINT32 ++ dd offset cd_retint ;; FFI_TYPE_SINT32 ++ dd offset cd_retint64 ;; FFI_TYPE_UINT64 ++ dd offset cd_retint64 ;; FFI_TYPE_SINT64 ++ dd offset cd_epilogue ;; FFI_TYPE_STRUCT ++ dd offset cd_retint ;; FFI_TYPE_POINTER ++ dd offset cd_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B ++ dd offset cd_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B ++ dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B ++ ++cd_retuint8: ++ movzx eax, BYTE PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retsint8: ++ movsx eax, BYTE PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retuint16: ++ movzx eax, WORD PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retsint16: ++ movsx eax, WORD PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retint: ++ mov eax, [ecx] ++ jmp cd_epilogue ++ ++cd_retint64: ++ mov eax, [ecx + 0] ++ mov edx, [ecx + 4] ++ jmp cd_epilogue ++ ++cd_retfloat: ++ fld DWORD PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retdouble: ++ fld QWORD PTR [ecx] ++ jmp cd_epilogue ++ ++cd_retlongdouble: ++ fld TBYTE PTR [ecx] ++ jmp cd_epilogue ++ ++cd_epilogue: ++ mov esp, ebp ++ pop ebp ++ mov ecx, [esp + 4] ;; Return address ++ add esp, [esp] ;; Parameters stack size ++ add esp, 8 ++ jmp ecx ++ffi_closure_STDCALL ENDP ++ ++_TEXT ENDS ++END + -+#include ++#else + ++#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) + ++#if defined(SYMBOL_UNDERSCORE) ++#define USCORE_SYMBOL(x) _##x ++#else ++#define USCORE_SYMBOL(x) x +#endif -+#ifdef __arm__ ++ .text ++ ++ # This assumes we are using gas. ++ .balign 16 ++FFI_HIDDEN(ffi_call_win32) ++ .globl USCORE_SYMBOL(ffi_call_win32) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_call_win32; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_call_win32): ++.LFB1: ++ pushl %ebp ++.LCFI0: ++ movl %esp,%ebp ++.LCFI1: ++ # Make room for all of the new args. ++ movl 20(%ebp),%ecx ++ subl %ecx,%esp ++ ++ movl %esp,%eax ++ ++ # Call ffi_prep_args ++ pushl 12(%ebp) ++ pushl %eax ++ call *8(%ebp) ++ addl $8,%esp ++ ++ # Prepare registers ++ # EAX stores the number of register arguments ++ cmpl $0, %eax ++ je .fun ++ cmpl $3, %eax ++ jl .prepr_two_cmp ++ ++ movl %esp, %ecx ++ addl $12, %esp ++ movl 8(%ecx), %eax ++ jmp .prepr_two ++.prepr_two_cmp: ++ cmpl $2, %eax ++ jl .prepr_one_prep ++ movl %esp, %ecx ++ addl $8, %esp ++.prepr_two: ++ movl 4(%ecx), %edx ++ jmp .prepr_one ++.prepr_one_prep: ++ movl %esp, %ecx ++ addl $4, %esp ++.prepr_one: ++ movl (%ecx), %ecx ++ cmpl $7, 16(%ebp) # FFI_REGISTER ++ jne .fun ++ ++ xchgl %eax, %ecx ++ ++.fun: ++ # FIXME: Align the stack to a 128-bit boundary to avoid ++ # potential performance hits. + -+#include ++ # Call function ++ call *32(%ebp) ++ ++ # stdcall functions pop arguments off the stack themselves + ++ # Load %ecx with the return type code ++ movl 24(%ebp),%ecx ++ ++ # If the return value pointer is NULL, assume no return value. ++ cmpl $0,28(%ebp) ++ jne 0f ++ ++ # Even if there is no space for the return value, we are ++ # obliged to handle floating-point values. ++ cmpl $FFI_TYPE_FLOAT,%ecx ++ jne .Lnoretval ++ fstp %st(0) ++ ++ jmp .Lepilogue + ++0: ++ call 1f ++ # Do not insert anything here between the call and the jump table. ++.Lstore_table: ++ .long .Lnoretval-.Lstore_table /* FFI_TYPE_VOID */ ++ .long .Lretint-.Lstore_table /* FFI_TYPE_INT */ ++ .long .Lretfloat-.Lstore_table /* FFI_TYPE_FLOAT */ ++ .long .Lretdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ ++ .long .Lretlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ ++ .long .Lretuint8-.Lstore_table /* FFI_TYPE_UINT8 */ ++ .long .Lretsint8-.Lstore_table /* FFI_TYPE_SINT8 */ ++ .long .Lretuint16-.Lstore_table /* FFI_TYPE_UINT16 */ ++ .long .Lretsint16-.Lstore_table /* FFI_TYPE_SINT16 */ ++ .long .Lretint-.Lstore_table /* FFI_TYPE_UINT32 */ ++ .long .Lretint-.Lstore_table /* FFI_TYPE_SINT32 */ ++ .long .Lretint64-.Lstore_table /* FFI_TYPE_UINT64 */ ++ .long .Lretint64-.Lstore_table /* FFI_TYPE_SINT64 */ ++ .long .Lretstruct-.Lstore_table /* FFI_TYPE_STRUCT */ ++ .long .Lretint-.Lstore_table /* FFI_TYPE_POINTER */ ++ .long .Lretstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ ++ .long .Lretstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ ++ .long .Lretstruct4b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_4B */ ++ .long .Lretstruct-.Lstore_table /* FFI_TYPE_MS_STRUCT */ ++1: ++ shl $2, %ecx ++ add (%esp),%ecx ++ mov (%ecx),%ecx ++ add (%esp),%ecx ++ add $4, %esp ++ jmp *%ecx ++ ++ /* Sign/zero extend as appropriate. */ ++.Lretsint8: ++ movsbl %al, %eax ++ jmp .Lretint ++ ++.Lretsint16: ++ movswl %ax, %eax ++ jmp .Lretint ++ ++.Lretuint8: ++ movzbl %al, %eax ++ jmp .Lretint ++ ++.Lretuint16: ++ movzwl %ax, %eax ++ jmp .Lretint ++ ++.Lretint: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ movl %eax,0(%ecx) ++ jmp .Lepilogue ++ ++.Lretfloat: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ fstps (%ecx) ++ jmp .Lepilogue ++ ++.Lretdouble: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ fstpl (%ecx) ++ jmp .Lepilogue ++ ++.Lretlongdouble: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ fstpt (%ecx) ++ jmp .Lepilogue ++ ++.Lretint64: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ movl %eax,0(%ecx) ++ movl %edx,4(%ecx) ++ jmp .Lepilogue ++ ++.Lretstruct1b: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ movb %al,0(%ecx) ++ jmp .Lepilogue ++ ++.Lretstruct2b: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ movw %ax,0(%ecx) ++ jmp .Lepilogue ++ ++.Lretstruct4b: ++ # Load %ecx with the pointer to storage for the return value ++ movl 28(%ebp),%ecx ++ movl %eax,0(%ecx) ++ jmp .Lepilogue ++ ++.Lretstruct: ++ # Nothing to do! ++ ++.Lnoretval: ++.Lepilogue: ++ movl %ebp,%esp ++ popl %ebp ++ ret ++.ffi_call_win32_end: ++ .balign 16 ++FFI_HIDDEN(ffi_closure_THISCALL) ++ .globl USCORE_SYMBOL(ffi_closure_THISCALL) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_THISCALL; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_THISCALL): ++ /* Insert the register argument on the stack as the first argument */ ++ xchg %ecx, 4(%esp) ++ xchg %ecx, (%esp) ++ push %ecx ++ jmp .ffi_closure_STDCALL_internal ++ ++ .balign 16 ++FFI_HIDDEN(ffi_closure_FASTCALL) ++ .globl USCORE_SYMBOL(ffi_closure_FASTCALL) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_FASTCALL; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_FASTCALL): ++ /* Insert the 2 register arguments on the stack as the first two arguments */ ++ xchg %edx, 4(%esp) ++ xchg %ecx, (%esp) ++ push %edx ++ push %ecx ++ jmp .ffi_closure_STDCALL_internal ++FFI_HIDDEN(ffi_closure_REGISTER) ++ .globl USCORE_SYMBOL(ffi_closure_REGISTER) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_REGISTER; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_REGISTER): ++ /* Insert the 3 register arguments on the stack as the first two arguments */ ++ push %eax ++ xchg %ecx, 8(%esp) ++ xchg %edx, 4(%esp) ++ push %ecx ++ push %edx ++ jmp .ffi_closure_STDCALL_internal ++ ++.LFE1: ++ # This assumes we are using gas. ++ .balign 16 ++FFI_HIDDEN(ffi_closure_SYSV) ++#if defined(X86_WIN32) ++ .globl USCORE_SYMBOL(ffi_closure_SYSV) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_SYSV; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_SYSV): ++#endif ++.LFB3: ++ pushl %ebp ++.LCFI4: ++ movl %esp, %ebp ++.LCFI5: ++ subl $40, %esp ++ leal -24(%ebp), %edx ++ movl %edx, -12(%ebp) /* resp */ ++ leal 8(%ebp), %edx ++ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ ++ leal -12(%ebp), %edx ++ movl %edx, (%esp) /* &resp */ ++#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) ++ call USCORE_SYMBOL(ffi_closure_SYSV_inner) ++#elif defined(X86_DARWIN) ++ calll L_ffi_closure_SYSV_inner$stub ++#else ++ movl %ebx, 8(%esp) ++ call 1f ++1: popl %ebx ++ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx ++ call ffi_closure_SYSV_inner@PLT ++ movl 8(%esp), %ebx +#endif -+#ifdef __x86_64__ -+ -+#include ++ movl -12(%ebp), %ecx + ++0: ++ call 1f ++ # Do not insert anything here between the call and the jump table. ++.Lcls_store_table: ++ .long .Lcls_noretval-.Lcls_store_table /* FFI_TYPE_VOID */ ++ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_INT */ ++ .long .Lcls_retfloat-.Lcls_store_table /* FFI_TYPE_FLOAT */ ++ .long .Lcls_retdouble-.Lcls_store_table /* FFI_TYPE_DOUBLE */ ++ .long .Lcls_retldouble-.Lcls_store_table /* FFI_TYPE_LONGDOUBLE */ ++ .long .Lcls_retuint8-.Lcls_store_table /* FFI_TYPE_UINT8 */ ++ .long .Lcls_retsint8-.Lcls_store_table /* FFI_TYPE_SINT8 */ ++ .long .Lcls_retuint16-.Lcls_store_table /* FFI_TYPE_UINT16 */ ++ .long .Lcls_retsint16-.Lcls_store_table /* FFI_TYPE_SINT16 */ ++ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_UINT32 */ ++ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_SINT32 */ ++ .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_UINT64 */ ++ .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_SINT64 */ ++ .long .Lcls_retstruct-.Lcls_store_table /* FFI_TYPE_STRUCT */ ++ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_POINTER */ ++ .long .Lcls_retstruct1-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ ++ .long .Lcls_retstruct2-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ ++ .long .Lcls_retstruct4-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ ++ .long .Lcls_retmsstruct-.Lcls_store_table /* FFI_TYPE_MS_STRUCT */ + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __arm64__ ++1: ++ shl $2, %eax ++ add (%esp),%eax ++ mov (%eax),%eax ++ add (%esp),%eax ++ add $4, %esp ++ jmp *%eax ++ ++ /* Sign/zero extend as appropriate. */ ++.Lcls_retsint8: ++ movsbl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retsint16: ++ movswl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retuint8: ++ movzbl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retuint16: ++ movzwl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retint: ++ movl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retfloat: ++ flds (%ecx) ++ jmp .Lcls_epilogue ++ ++.Lcls_retdouble: ++ fldl (%ecx) ++ jmp .Lcls_epilogue ++ ++.Lcls_retldouble: ++ fldt (%ecx) ++ jmp .Lcls_epilogue ++ ++.Lcls_retllong: ++ movl (%ecx), %eax ++ movl 4(%ecx), %edx ++ jmp .Lcls_epilogue ++ ++.Lcls_retstruct1: ++ movsbl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retstruct2: ++ movswl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retstruct4: ++ movl (%ecx), %eax ++ jmp .Lcls_epilogue ++ ++.Lcls_retstruct: ++ # Caller expects us to pop struct return value pointer hidden arg. ++ movl %ebp, %esp ++ popl %ebp ++ ret $0x4 ++ ++.Lcls_retmsstruct: ++ # Caller expects us to return a pointer to the real return value. ++ mov %ecx, %eax ++ # Caller doesn't expects us to pop struct return value pointer hidden arg. ++ jmp .Lcls_epilogue ++ ++.Lcls_noretval: ++.Lcls_epilogue: ++ movl %ebp, %esp ++ popl %ebp ++ ret ++.ffi_closure_SYSV_end: ++.LFE3: + -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++#if !FFI_NO_RAW_API + -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) ++#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) ++#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) + -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ ++#ifdef X86_WIN32 ++ .balign 16 ++FFI_HIDDEN(ffi_closure_raw_THISCALL) ++ .globl USCORE_SYMBOL(ffi_closure_raw_THISCALL) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_raw_THISCALL): ++ pushl %ebp ++ movl %esp, %ebp ++ pushl %esi ++ subl $36, %esp ++ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ ++ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ ++ movl %edx, 12(%esp) /* user_data */ ++ leal 12(%ebp), %edx /* __builtin_dwarf_cfa () */ ++ jmp .stubraw ++#endif /* X86_WIN32 */ ++ ++ # This assumes we are using gas. ++ .balign 16 ++#if defined(X86_WIN32) ++ .globl USCORE_SYMBOL(ffi_closure_raw_SYSV) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_raw_SYSV): ++#endif /* defined(X86_WIN32) */ ++.LFB4: ++ pushl %ebp ++.LCFI6: ++ movl %esp, %ebp ++.LCFI7: ++ pushl %esi ++.LCFI8: ++ subl $36, %esp ++ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ ++ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ ++ movl %edx, 12(%esp) /* user_data */ ++ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ ++.stubraw: ++ movl %edx, 8(%esp) /* raw_args */ ++ leal -24(%ebp), %edx ++ movl %edx, 4(%esp) /* &res */ ++ movl %esi, (%esp) /* cif */ ++ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ ++ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ ++0: ++ call 1f ++ # Do not insert anything here between the call and the jump table. ++.Lrcls_store_table: ++ .long .Lrcls_noretval-.Lrcls_store_table /* FFI_TYPE_VOID */ ++ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_INT */ ++ .long .Lrcls_retfloat-.Lrcls_store_table /* FFI_TYPE_FLOAT */ ++ .long .Lrcls_retdouble-.Lrcls_store_table /* FFI_TYPE_DOUBLE */ ++ .long .Lrcls_retldouble-.Lrcls_store_table /* FFI_TYPE_LONGDOUBLE */ ++ .long .Lrcls_retuint8-.Lrcls_store_table /* FFI_TYPE_UINT8 */ ++ .long .Lrcls_retsint8-.Lrcls_store_table /* FFI_TYPE_SINT8 */ ++ .long .Lrcls_retuint16-.Lrcls_store_table /* FFI_TYPE_UINT16 */ ++ .long .Lrcls_retsint16-.Lrcls_store_table /* FFI_TYPE_SINT16 */ ++ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_UINT32 */ ++ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_SINT32 */ ++ .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_UINT64 */ ++ .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_SINT64 */ ++ .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_STRUCT */ ++ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_POINTER */ ++ .long .Lrcls_retstruct1-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ ++ .long .Lrcls_retstruct2-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ ++ .long .Lrcls_retstruct4-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ ++ .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_MS_STRUCT */ ++1: ++ shl $2, %eax ++ add (%esp),%eax ++ mov (%eax),%eax ++ add (%esp),%eax ++ add $4, %esp ++ jmp *%eax ++ ++ /* Sign/zero extend as appropriate. */ ++.Lrcls_retsint8: ++ movsbl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retsint16: ++ movswl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retuint8: ++ movzbl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retuint16: ++ movzwl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retint: ++ movl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retfloat: ++ flds -24(%ebp) ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retdouble: ++ fldl -24(%ebp) ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retldouble: ++ fldt -24(%ebp) ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retllong: ++ movl -24(%ebp), %eax ++ movl -20(%ebp), %edx ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retstruct1: ++ movsbl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retstruct2: ++ movswl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retstruct4: ++ movl -24(%ebp), %eax ++ jmp .Lrcls_epilogue ++ ++.Lrcls_retstruct: ++ # Nothing to do! ++ ++.Lrcls_noretval: ++.Lrcls_epilogue: ++ addl $36, %esp ++ popl %esi ++ popl %ebp ++ ret ++.ffi_closure_raw_SYSV_end: ++.LFE4: + -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ ++#endif /* !FFI_NO_RAW_API */ + -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" ++ # This assumes we are using gas. ++ .balign 16 ++FFI_HIDDEN(ffi_closure_STDCALL) ++ .globl USCORE_SYMBOL(ffi_closure_STDCALL) ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef ++#endif ++USCORE_SYMBOL(ffi_closure_STDCALL): ++.ffi_closure_STDCALL_internal: ++ /* ffi_closure ctx is at top of the stack */ ++ movl (%esp), %eax ++.LFB5: ++ pushl %ebp ++.LCFI9: ++ movl %esp, %ebp ++.LCFI10: ++ subl $40, %esp ++ leal -24(%ebp), %edx ++ movl %edx, -12(%ebp) /* resp */ ++ leal 12(%ebp), %edx /* account for stub return address on stack */ ++ movl %edx, 4(%esp) /* args */ ++ leal -12(%ebp), %edx ++ movl %edx, (%esp) /* &resp */ ++#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) ++ call USCORE_SYMBOL(ffi_closure_WIN32_inner) ++#elif defined(X86_DARWIN) ++ calll L_ffi_closure_WIN32_inner$stub ++#else ++ movl %ebx, 8(%esp) ++ call 1f ++1: popl %ebx ++ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx ++ call ffi_closure_WIN32_inner@PLT ++ movl 8(%esp), %ebx ++#endif ++ movl -12(%ebp), %ecx ++0: ++ xchgl 4(%ebp), %eax /* xchg size of stack parameters and ffi_closure ctx */ ++ movl CLOSURE_CIF_OFFSET(%eax), %eax ++ movl CIF_FLAGS_OFFSET(%eax), %eax ++ ++ call 1f ++ # Do not insert anything here between the call and the jump table. ++.Lscls_store_table: ++ .long .Lscls_noretval-.Lscls_store_table /* FFI_TYPE_VOID */ ++ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_INT */ ++ .long .Lscls_retfloat-.Lscls_store_table /* FFI_TYPE_FLOAT */ ++ .long .Lscls_retdouble-.Lscls_store_table /* FFI_TYPE_DOUBLE */ ++ .long .Lscls_retldouble-.Lscls_store_table /* FFI_TYPE_LONGDOUBLE */ ++ .long .Lscls_retuint8-.Lscls_store_table /* FFI_TYPE_UINT8 */ ++ .long .Lscls_retsint8-.Lscls_store_table /* FFI_TYPE_SINT8 */ ++ .long .Lscls_retuint16-.Lscls_store_table /* FFI_TYPE_UINT16 */ ++ .long .Lscls_retsint16-.Lscls_store_table /* FFI_TYPE_SINT16 */ ++ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_UINT32 */ ++ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_SINT32 */ ++ .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_UINT64 */ ++ .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_SINT64 */ ++ .long .Lscls_retstruct-.Lscls_store_table /* FFI_TYPE_STRUCT */ ++ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_POINTER */ ++ .long .Lscls_retstruct1-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ ++ .long .Lscls_retstruct2-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ ++ .long .Lscls_retstruct4-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ ++1: ++ shl $2, %eax ++ add (%esp),%eax ++ mov (%eax),%eax ++ add (%esp),%eax ++ add $4, %esp ++ jmp *%eax ++ ++ /* Sign/zero extend as appropriate. */ ++.Lscls_retsint8: ++ movsbl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retsint16: ++ movswl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retuint8: ++ movzbl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retuint16: ++ movzwl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retint: ++ movl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retfloat: ++ flds (%ecx) ++ jmp .Lscls_epilogue ++ ++.Lscls_retdouble: ++ fldl (%ecx) ++ jmp .Lscls_epilogue ++ ++.Lscls_retldouble: ++ fldt (%ecx) ++ jmp .Lscls_epilogue ++ ++.Lscls_retllong: ++ movl (%ecx), %eax ++ movl 4(%ecx), %edx ++ jmp .Lscls_epilogue ++ ++.Lscls_retstruct1: ++ movsbl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retstruct2: ++ movswl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retstruct4: ++ movl (%ecx), %eax ++ jmp .Lscls_epilogue ++ ++.Lscls_retstruct: ++ # Nothing to do! ++ ++.Lscls_noretval: ++.Lscls_epilogue: ++ movl %ebp, %esp ++ popl %ebp ++ movl 4(%esp), %ecx /* Return address */ ++ addl (%esp), %esp /* Parameters stack size */ ++ addl $8, %esp ++ jmp *%ecx ++.ffi_closure_STDCALL_end: ++.LFE5: ++ ++#if defined(X86_DARWIN) ++.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 ++L_ffi_closure_SYSV_inner$stub: ++ .indirect_symbol _ffi_closure_SYSV_inner ++ hlt ; hlt ; hlt ; hlt ; hlt ++L_ffi_closure_WIN32_inner$stub: ++ .indirect_symbol _ffi_closure_WIN32_inner ++ hlt ; hlt ; hlt ; hlt ; hlt ++#endif ++ ++#if defined(X86_WIN32) && !defined(__OS2__) ++ .section .eh_frame,"w" ++#endif ++.Lframe1: ++.LSCIE1: ++ .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ ++.LASCIE1: ++ .long 0x0 /* CIE Identifier Tag */ ++ .byte 0x1 /* CIE Version */ ++#ifdef __PIC__ ++ .ascii "zR\0" /* CIE Augmentation */ ++#else ++ .ascii "\0" /* CIE Augmentation */ ++#endif ++ .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ ++ .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ ++ .byte 0x8 /* CIE RA Column */ ++#ifdef __PIC__ ++ .byte 0x1 /* .uleb128 0x1; Augmentation size */ ++ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ ++#endif ++ .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ ++ .byte 0x4 /* .uleb128 0x4 */ ++ .byte 0x4 /* .uleb128 0x4 */ ++ .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ ++ .byte 0x1 /* .uleb128 0x1 */ ++ .align 4 ++.LECIE1: ++ ++.LSFDE1: ++ .long .LEFDE1-.LASFDE1 /* FDE Length */ ++.LASFDE1: ++ .long .LASFDE1-.Lframe1 /* FDE CIE offset */ ++#if defined __PIC__ && defined HAVE_AS_X86_PCREL ++ .long .LFB1-. /* FDE initial location */ ++#else ++ .long .LFB1 ++#endif ++ .long .LFE1-.LFB1 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ /* DW_CFA_xxx CFI instructions go here. */ ++ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI0-.LFB1 ++ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ ++ .byte 0x2 /* .uleb128 0x2 */ ++ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI1-.LCFI0 ++ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ ++ .byte 0x5 /* .uleb128 0x5 */ ++ ++ /* End of DW_CFA_xxx CFI instructions. */ ++ .align 4 ++.LEFDE1: ++ ++.LSFDE3: ++ .long .LEFDE3-.LASFDE3 /* FDE Length */ ++.LASFDE3: ++ .long .LASFDE3-.Lframe1 /* FDE CIE offset */ ++#if defined __PIC__ && defined HAVE_AS_X86_PCREL ++ .long .LFB3-. /* FDE initial location */ ++#else ++ .long .LFB3 ++#endif ++ .long .LFE3-.LFB3 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ /* DW_CFA_xxx CFI instructions go here. */ + -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI4-.LFB3 ++ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ ++ .byte 0x2 /* .uleb128 0x2 */ + -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI5-.LCFI4 ++ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ ++ .byte 0x5 /* .uleb128 0x5 */ + -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ /* End of DW_CFA_xxx CFI instructions. */ ++ .align 4 ++.LEFDE3: + -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ ++#if !FFI_NO_RAW_API + -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ ++.LSFDE4: ++ .long .LEFDE4-.LASFDE4 /* FDE Length */ ++.LASFDE4: ++ .long .LASFDE4-.Lframe1 /* FDE CIE offset */ ++#if defined __PIC__ && defined HAVE_AS_X86_PCREL ++ .long .LFB4-. /* FDE initial location */ ++#else ++ .long .LFB4 ++#endif ++ .long .LFE4-.LFB4 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ /* DW_CFA_xxx CFI instructions go here. */ + -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI6-.LFB4 ++ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ ++ .byte 0x2 /* .uleb128 0x2 */ + -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI7-.LCFI6 ++ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ ++ .byte 0x5 /* .uleb128 0x5 */ + -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI8-.LCFI7 ++ .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ ++ .byte 0x3 /* .uleb128 0x3 */ + -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 ++ /* End of DW_CFA_xxx CFI instructions. */ ++ .align 4 ++.LEFDE4: + -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++#endif /* !FFI_NO_RAW_API */ + -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ ++.LSFDE5: ++ .long .LEFDE5-.LASFDE5 /* FDE Length */ ++.LASFDE5: ++ .long .LASFDE5-.Lframe1 /* FDE CIE offset */ ++#if defined __PIC__ && defined HAVE_AS_X86_PCREL ++ .long .LFB5-. /* FDE initial location */ ++#else ++ .long .LFB5 ++#endif ++ .long .LFE5-.LFB5 /* FDE address range */ ++#ifdef __PIC__ ++ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++#endif ++ /* DW_CFA_xxx CFI instructions go here. */ + -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI9-.LFB5 ++ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ ++ .byte 0x8 /* .uleb128 0x8 */ ++ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ ++ .byte 0x2 /* .uleb128 0x2 */ + -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ .byte 0x4 /* DW_CFA_advance_loc4 */ ++ .long .LCFI10-.LCFI9 ++ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ ++ .byte 0x5 /* .uleb128 0x5 */ + -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ ++ /* End of DW_CFA_xxx CFI instructions. */ ++ .align 4 ++.LEFDE5: + -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 ++#endif /* !_MSC_VER */ + -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif + -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 + -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/LICENSE modified/Modules/_ctypes/libffi_ios_aarch64/LICENSE +--- orig/Modules/_ctypes/libffi_ios_aarch64/LICENSE 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/LICENSE 2015-02-26 10:00:15.000000000 +0800 +@@ -0,0 +1,21 @@ ++libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. ++See source files for details. + -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++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: + -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 ++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. +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/README modified/Modules/_ctypes/libffi_ios_aarch64/README +--- orig/Modules/_ctypes/libffi_ios_aarch64/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/README 2015-04-26 08:51:27.000000000 +0800 +@@ -0,0 +1,450 @@ ++Status ++====== + -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ ++libffi-4?? was released on TBD. Check the libffi web ++page for updates: . + -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 + -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 ++What is libffi? ++=============== + -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ ++Compilers for high level languages generate code that follow certain ++conventions. These conventions are necessary, in part, for separate ++compilation to work. One such convention is the "calling ++convention". The "calling convention" is essentially a set of ++assumptions made by the compiler about where function arguments will ++be found on entry to a function. A "calling convention" also specifies ++where the return value for a function is found. + -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 ++Some programs may not know at the time of compilation what arguments ++are to be passed to a function. For instance, an interpreter may be ++told at run-time about the number and types of arguments used to call ++a given function. Libffi can be used in such programs to provide a ++bridge from the interpreter program to compiled code. + -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ ++The libffi library provides a portable, high level programming ++interface to various calling conventions. This allows a programmer to ++call any function specified by a call interface description at run ++time. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 ++FFI stands for Foreign Function Interface. A foreign function ++interface is the popular name for the interface that allows code ++written in one language to call code written in another language. The ++libffi library really only provides the lowest, machine dependent ++layer of a fully featured foreign function interface. A layer must ++exist above libffi that handles type conversions for values passed ++between the two languages. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 ++Supported Platforms ++=================== + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 ++Libffi has been ported to many different platforms. ++For specific configuration details and testing status, please ++refer to the wiki page here: + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 ++ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 ++At the time of release, the following basic configurations have been ++tested: + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 ++|-----------------+------------------+-------------------------| ++| Architecture | Operating System | Compiler | ++|-----------------+------------------+-------------------------| ++| AArch64 (ARM64) | iOS | Clang | ++| AArch64 | Linux | GCC | ++| Alpha | Linux | GCC | ++| Alpha | Tru64 | GCC | ++| ARC | Linux | GCC | ++| ARM | Linux | GCC | ++| ARM | iOS | GCC | ++| AVR32 | Linux | GCC | ++| Blackfin | uClinux | GCC | ++| HPPA | HPUX | GCC | ++| IA-64 | Linux | GCC | ++| M68K | FreeMiNT | GCC | ++| M68K | Linux | GCC | ++| M68K | RTEMS | GCC | ++| M88K | OpenBSD/mvme88k | GCC | ++| Meta | Linux | GCC | ++| MicroBlaze | Linux | GCC | ++| MIPS | IRIX | GCC | ++| MIPS | Linux | GCC | ++| MIPS | RTEMS | GCC | ++| MIPS64 | Linux | GCC | ++| Moxie | Bare metal | GCC | ++| Nios II | Linux | GCC | ++| OpenRISC | Linux | GCC | ++| PowerPC 32-bit | AIX | IBM XL C | ++| PowerPC 64-bit | AIX | IBM XL C | ++| PowerPC | AMIGA | GCC | ++| PowerPC | Linux | GCC | ++| PowerPC | Mac OSX | GCC | ++| PowerPC | FreeBSD | GCC | ++| PowerPC 64-bit | FreeBSD | GCC | ++| PowerPC 64-bit | Linux ELFv1 | GCC | ++| PowerPC 64-bit | Linux ELFv2 | GCC | ++| S390 | Linux | GCC | ++| S390X | Linux | GCC | ++| SPARC | Linux | GCC | ++| SPARC | Solaris | GCC | ++| SPARC | Solaris | Oracle Solaris Studio C | ++| SPARC64 | Linux | GCC | ++| SPARC64 | FreeBSD | GCC | ++| SPARC64 | Solaris | Oracle Solaris Studio C | ++| TILE-Gx/TILEPro | Linux | GCC | ++| VAX | OpenBSD/vax | GCC | ++| X86 | FreeBSD | GCC | ++| X86 | GNU HURD | GCC | ++| X86 | Interix | GCC | ++| X86 | kFreeBSD | GCC | ++| X86 | Linux | GCC | ++| X86 | Mac OSX | GCC | ++| X86 | OpenBSD | GCC | ++| X86 | OS/2 | GCC | ++| X86 | Solaris | GCC | ++| X86 | Solaris | Oracle Solaris Studio C | ++| X86 | Windows/Cygwin | GCC | ++| X86 | Windows/MingW | GCC | ++| X86-64 | FreeBSD | GCC | ++| X86-64 | Linux | GCC | ++| X86-64 | Linux/x32 | GCC | ++| X86-64 | OpenBSD | GCC | ++| X86-64 | Solaris | Oracle Solaris Studio C | ++| X86-64 | Windows/Cygwin | GCC | ++| X86-64 | Windows/MingW | GCC | ++| Xtensa | Linux | GCC | ++|-----------------+------------------+-------------------------| + -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 ++Please send additional platform test results to ++libffi-discuss@sourceware.org and feel free to update the wiki page ++above. + -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" ++Installing libffi ++================= + -+/* Name of package */ -+#define PACKAGE "libffi" ++First you must configure the distribution for your particular ++system. Go to the directory you wish to build libffi in and run the ++"configure" program found in the root directory of the libffi source ++distribution. + -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++If you're building libffi directly from version control, configure won't ++exist yet; run ./autogen.sh first. + -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" ++You may want to tell configure where to install the libffi library and ++header files. To do that, use the --prefix configure switch. Libffi ++will install under /usr/local by default. + -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" ++If you want to enable extra run-time debugging checks use the the ++--enable-debug configure switch. This is useful when your program dies ++mysteriously while using libffi. + -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" ++Another useful configure switch is --enable-purify-safety. Using this ++will add some extra code which will suppress certain warnings when you ++are using Purify with libffi. Only use this switch when using ++Purify, as it will slow down the library. + -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" ++It's also possible to build libffi on Windows platforms with ++Microsoft's Visual C++ compiler. In this case, use the msvcc.sh ++wrapper script during configuration like so: + -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" ++path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" + -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 ++For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and ++CXX="path/to/msvcc.sh -m64". You may also need to specify --build ++appropriately. + -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 ++It is also possible to build libffi on Windows platforms with the LLVM ++project's clang-cl compiler, like below: + -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 ++path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" + -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ ++When building with MSVC under a MingW environment, you may need to ++remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' ++command. ('cygpath' is not present in MingW, and is not required when ++using MingW-style paths.) + -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 ++For iOS builds, the 'libffi.xcodeproj' Xcode project is available. + -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 ++Configure has many other options. Use "configure --help" to see them all. + -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ ++Once configure has finished, type "make". Note that you must be using ++GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . + -+/* Version number of package */ -+#define VERSION "3.99999" ++To ensure that libffi is working as advertised, type "make check". ++This will require that you have DejaGNU installed. + -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif ++To install the library and header files, type "make install". + -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ + ++History ++======= + -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif ++See the git log for details at http://github.com/atgreen/libffi. + ++4.0 TBD ++ New API in support of GO closures. + ++3.2.1 Nov-12-14 ++ Build fix for non-iOS AArch64 targets. + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __arm__ ++3.2 Nov-11-14 ++ Add C99 Complex Type support (currently only supported on ++ s390). ++ Add support for PASCAL and REGISTER calling conventions on x86 ++ Windows/Linux. ++ Add OpenRISC and Cygwin-64 support. ++ Bug fixes. + -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++3.1 May-19-14 ++ Add AArch64 (ARM64) iOS support. ++ Add Nios II support. ++ Add m88k and DEC VAX support. ++ Add support for stdcall, thiscall, and fastcall on non-Windows ++ 32-bit x86 targets such as Linux. ++ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi ++ fixes. ++ Make the testsuite more robust: eliminate several spurious ++ failures, and respect the $CC and $CXX environment variables. ++ Archive off the manually maintained ChangeLog in favor of git ++ log. + -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++3.0.13 Mar-17-13 ++ Add Meta support. ++ Add missing Moxie bits. ++ Fix stack alignment bug on 32-bit x86. ++ Build fix for m68000 targets. ++ Build fix for soft-float Power targets. ++ Fix the install dir location for some platforms when building ++ with GCC (OS X, Solaris). ++ Fix Cygwin regression. + -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ ++3.0.12 Feb-11-13 ++ Add Moxie support. ++ Add AArch64 support. ++ Add Blackfin support. ++ Add TILE-Gx/TILEPro support. ++ Add MicroBlaze support. ++ Add Xtensa support. ++ Add support for PaX enabled kernels with MPROTECT. ++ Add support for native vendor compilers on ++ Solaris and AIX. ++ Work around LLVM/GCC interoperability issue on x86_64. + -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ ++3.0.11 Apr-11-12 ++ Lots of build fixes. ++ Add support for variadic functions (ffi_prep_cif_var). ++ Add Linux/x32 support. ++ Add thiscall, fastcall and MSVC cdecl support on Windows. ++ Add Amiga and newer MacOS support. ++ Add m68k FreeMiNT support. ++ Integration with iOS' xcode build tools. ++ Fix Octeon and MC68881 support. ++ Fix code pessimizations. + -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" ++3.0.10 Aug-23-11 ++ Add support for Apple's iOS. ++ Add support for ARM VFP ABI. ++ Add RTEMS support for MIPS and M68K. ++ Fix instruction cache clearing problems on ++ ARM and SPARC. ++ Fix the N64 build on mips-sgi-irix6.5. ++ Enable builds with Microsoft's compiler. ++ Enable x86 builds with Oracle's Solaris compiler. ++ Fix support for calling code compiled with Oracle's Sparc ++ Solaris compiler. ++ Testsuite fixes for Tru64 Unix. ++ Additional platform support. + -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ ++3.0.9 Dec-31-09 ++ Add AVR32 and win64 ports. Add ARM softfp support. ++ Many fixes for AIX, Solaris, HP-UX, *BSD. ++ Several PowerPC and x86-64 bug fixes. ++ Build DLL for windows. + -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++3.0.8 Dec-19-08 ++ Add *BSD, BeOS, and PA-Linux support. + -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++3.0.7 Nov-11-08 ++ Fix for ppc FreeBSD. ++ (thanks to Andreas Tobler) + -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ ++3.0.6 Jul-17-08 ++ Fix for closures on sh. ++ Mark the sh/sh64 stack as non-executable. ++ (both thanks to Kaz Kojima) + -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ ++3.0.5 Apr-3-08 ++ Fix libffi.pc file. ++ Fix #define ARM for IcedTea users. ++ Fix x86 closure bug. + -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ ++3.0.4 Feb-24-08 ++ Fix x86 OpenBSD configury. + -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 ++3.0.3 Feb-22-08 ++ Enable x86 OpenBSD thanks to Thomas Heller, and ++ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. ++ Clean up test instruction in README. + -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 ++3.0.2 Feb-21-08 ++ Improved x86 FreeBSD support. ++ Thanks to Björn König. + -+/* Define if your assembler supports .cfi_* directives. */ -+/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++3.0.1 Feb-15-08 ++ Fix instruction cache flushing bug on MIPS. ++ Thanks to David Daney. + -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++3.0.0 Feb-15-08 ++ Many changes, mostly thanks to the GCC project. ++ Cygnus Solutions is now Red Hat. + -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ ++ [10 years go by...] + -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ ++1.20 Oct-5-98 ++ Raffaele Sena produces ARM port. + -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++1.19 Oct-5-98 ++ Fixed x86 long double and long long return support. ++ m68k bug fixes from Andreas Schwab. ++ Patch for DU assembler compatibility for the Alpha from Richard ++ Henderson. + -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ ++1.18 Apr-17-98 ++ Bug fixes and MIPS configuration changes. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 ++1.17 Feb-24-98 ++ Bug fixes and m68k port from Andreas Schwab. PowerPC port from ++ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++1.16 Feb-11-98 ++ Richard Henderson produces Alpha port. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 ++1.15 Dec-4-97 ++ Fixed an n32 ABI bug. New libtool, auto* support. + -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ ++1.14 May-13-97 ++ libtool is now used to generate shared and static libraries. ++ Fixed a minor portability problem reported by Russ McManus ++ . + -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++1.13 Dec-2-96 ++ Added --enable-purify-safety to keep Purify from complaining ++ about certain low level code. ++ Sparc fix for calling functions with < 6 args. ++ Linux x86 a.out fix. + -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 ++1.12 Nov-22-96 ++ Added missing ffi_type_void, needed for supporting void return ++ types. Fixed test case for non MIPS machines. Cygnus Support ++ is now Cygnus Solutions. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 ++1.11 Oct-30-96 ++ Added notes about GNU make. + -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ ++1.10 Oct-29-96 ++ Added configuration fix for non GNU compilers. + -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 ++1.09 Oct-29-96 ++ Added --enable-debug configure switch. Clean-ups based on LCLint ++ feedback. ffi_mips.h is always installed. Many configuration ++ fixes. Fixed ffitest.c for sparc builds. + -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 ++1.08 Oct-15-96 ++ Fixed n32 problem. Many clean-ups. + -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ ++1.07 Oct-14-96 ++ Gordon Irlam rewrites v8.S again. Bug fixes. + -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 ++1.06 Oct-14-96 ++ Gordon Irlam improved the sparc port. + -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ ++1.05 Oct-14-96 ++ Interface changes based on feedback. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 ++1.04 Oct-11-96 ++ Sparc port complete (modulo struct passing bug). + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 ++1.03 Oct-10-96 ++ Passing struct args, and returning struct values works for ++ all architectures/calling conventions. Expanded tests. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 ++1.02 Oct-9-96 ++ Added SGI n32 support. Fixed bugs in both o32 and Linux support. ++ Added "make test". + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 ++1.01 Oct-8-96 ++ Fixed float passing bug in mips version. Restructured some ++ of the code. Builds cleanly with SGI tools. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 ++1.00 Oct-7-96 ++ First release. No public announcement. + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 ++Authors & Credits ++================= + -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 ++libffi was originally written by Anthony Green . + -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" ++The developers of the GNU Compiler Collection project have made ++innumerable valuable contributions. See the ChangeLog file for ++details. + -+/* Name of package */ -+#define PACKAGE "libffi" ++Some of the ideas behind libffi were inspired by Gianni Mariani's free ++gencall library for Silicon Graphics machines. + -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++The closure mechanism was designed and implemented by Kresten Krab ++Thorup. + -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" ++Major processor architecture ports were contributed by the following ++developers: + -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" ++aarch64 Marcus Shawcroft, James Greenhalgh ++alpha Richard Henderson ++arm Raffaele Sena ++blackfin Alexandre Keunecke I. de Mendonca ++cris Simon Posnjak, Hans-Peter Nilsson ++frv Anthony Green ++ia64 Hans Boehm ++m32r Kazuhiro Inaoka ++m68k Andreas Schwab ++m88k Miod Vallat ++microblaze Nathan Rossi ++mips Anthony Green, Casey Marshall ++mips64 David Daney ++moxie Anthony Green ++nios ii Sandra Loosemore ++openrisc Sebastian Macke ++pa Randolph Chung, Dave Anglin, Andreas Tobler ++powerpc Geoffrey Keating, Andreas Tobler, ++ David Edelsohn, John Hornkvist ++powerpc64 Jakub Jelinek ++s390 Gerhard Tonn, Ulrich Weigand ++sh Kaz Kojima ++sh64 Kaz Kojima ++sparc Anthony Green, Gordon Irlam ++tile-gx/tilepro Walter Lee ++vax Miod Vallat ++x86 Anthony Green, Jon Beniston ++x86-64 Bo Thorsen ++xtensa Chris Zankel + -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" ++Jesper Skov and Andrew Haley both did more than their fair share of ++stepping through the code and tracking down bugs. + -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" ++Thanks also to Tom Tromey for bug fixes, documentation and ++configuration help. + -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" ++Thanks to Jim Blandy, who provided some useful feedback on the libffi ++interface. + -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 ++Andreas Tobler has done a tremendous amount of work on the testsuite. + -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 ++Alex Oliva solved the executable page problem for SElinux. + -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 ++The list above is almost certainly incomplete and inaccurate. I'm ++happy to make corrections or additions upon request. + -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ ++If you have a problem, or have found a bug, please send a note to the ++author at green@moxielogic.com, or the project mailing list at ++libffi-discuss@sourceware.org. +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/README.python modified/Modules/_ctypes/libffi_ios_aarch64/README.python +--- orig/Modules/_ctypes/libffi_ios_aarch64/README.python 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/README.python 2015-04-26 08:58:26.000000000 +0800 +@@ -0,0 +1,17 @@ ++This directory contains the generated source code for running libffi ++on iOS platforms (physical and simulator). It contains support for ++ARM64 (referred to as `aarch64` by libffi). ++ ++libffi requires a code-generation step for Apple platforms. This code ++generation is performed using the `generate-darwin-source-and-headers.py` ++script in the home directory of the libffi project. ++ ++This directory is the combined output of the darwin_common and darwin_ios ++generated code directories. It has been pruned of source files that are ++not needed for ctypes. ++ ++The code in this directory comes from a pre-release version of libffi 4.0. ++March 29 2015, Git hash 17ffc3655a531c116e9eb9cc933e50bb1e5c47f8. ++ ++The pre-release version is necessary because the stable 3.2.1 release ++contains bugs on the ARM64 platform. +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c +--- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c 2015-04-26 08:39:44.000000000 +0800 +@@ -0,0 +1,1157 @@ ++#ifdef __arm64__ + -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 ++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: + -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+/* Version number of package */ -+#define VERSION "3.99999" ++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. */ + -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 ++#include ++#include ++#include ++#include ++#include ++#include "internal.h" ++ ++/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; ++ all further uses in this file will refer to the 128-bit type. */ ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++# if FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date +# endif +#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif ++# undef FFI_TYPE_LONGDOUBLE ++# define FFI_TYPE_LONGDOUBLE 4 +#endif + -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ ++union _d ++{ ++ UINT64 d; ++ UINT32 s[2]; ++}; ++ ++struct _v ++{ ++ union _d d[2] __attribute__((aligned(16))); ++}; + ++struct call_context ++{ ++ struct _v v[N_V_ARG_REG]; ++ UINT64 x[N_X_ARG_REG]; ++}; + -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#if defined (__clang__) && defined (__APPLE__) ++extern void sys_icache_invalidate (void *start, size_t len); +#endif ++ ++static inline void ++ffi_clear_cache (void *start, void *end) ++{ ++#if defined (__clang__) && defined (__APPLE__) ++ sys_icache_invalidate (start, (char *)end - (char *)start); ++#elif defined (__GNUC__) ++ __builtin___clear_cache (start, end); +#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif ++#error "Missing builtin to flush instruction cache" +#endif ++} + ++/* A subroutine of is_vfp_type. Given a structure type, return the type code ++ of the first non-structure element. Recurse for structure elements. ++ Return -1 if the structure is in fact empty, i.e. no nested elements. */ + ++static int ++is_hfa0 (const ffi_type *ty) ++{ ++ ffi_type **elements = ty->elements; ++ int i, ret = -1; + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __i386__ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ ret = elements[i]->type; ++ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) ++ { ++ ret = is_hfa0 (elements[i]); ++ if (ret < 0) ++ continue; ++ } ++ break; ++ } + -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ return ret; ++} + -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++/* A subroutine of is_vfp_type. Given a structure type, return true if all ++ of the non-structure elements are the same as CANDIDATE. */ + -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ ++static int ++is_hfa1 (const ffi_type *ty, int candidate) ++{ ++ ffi_type **elements = ty->elements; ++ int i; + -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } + -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" ++ return 1; ++} + -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ ++/* Determine if TY may be allocated to the FP registers. This is both an ++ fp scalar type as well as an homogenous floating point aggregate (HFA). ++ That is, a structure consisting of 1 to 4 members of all the same type, ++ where that type is an fp scalar. + -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ ++ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* ++ constant for the type. */ + -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++static int ++is_vfp_type (const ffi_type *ty) ++{ ++ ffi_type **elements; ++ int candidate, i; ++ size_t size, ele_count; + -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 ++ /* Quickest tests first. */ ++ candidate = ty->type; ++ switch (candidate) ++ { ++ default: ++ return 0; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 1; ++ goto done; ++ case FFI_TYPE_COMPLEX: ++ candidate = ty->elements[0]->type; ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 2; ++ goto done; ++ } ++ return 0; ++ case FFI_TYPE_STRUCT: ++ break; ++ } + -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ ++ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ ++ size = ty->size; ++ if (size < 4 || size > 64) ++ return 0; + -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ ++ /* Find the type of the first non-structure member. */ ++ elements = ty->elements; ++ candidate = elements[0]->type; ++ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) ++ { ++ for (i = 0; ; ++i) ++ { ++ candidate = is_hfa0 (elements[i]); ++ if (candidate >= 0) ++ break; ++ } ++ } + -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 ++ /* If the first member is not a floating point type, it's not an HFA. ++ Also quickly re-check the size of the structure. */ ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ ele_count = size / sizeof(float); ++ if (size != ele_count * sizeof(float)) ++ return 0; ++ break; ++ case FFI_TYPE_DOUBLE: ++ ele_count = size / sizeof(double); ++ if (size != ele_count * sizeof(double)) ++ return 0; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = size / sizeof(long double); ++ if (size != ele_count * sizeof(long double)) ++ return 0; ++ break; ++ default: ++ return 0; ++ } ++ if (ele_count > 4) ++ return 0; + -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 ++ /* Finally, make sure that all scalar elements are the same type. */ ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } + -+/* Define if your assembler supports .cfi_* directives. */ -+/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++ /* All tests succeeded. Encode the result. */ ++ done: ++ return candidate * 4 + (4 - ele_count); ++} + -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++/* Representation of the procedure call argument marshalling ++ state. + -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ ++ The terse state variable names match the names used in the AARCH64 ++ PCS. */ + -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ ++struct arg_state ++{ ++ unsigned ngrn; /* Next general-purpose register number. */ ++ unsigned nsrn; /* Next vector register number. */ ++ size_t nsaa; /* Next stack offset. */ + -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++#if defined (__APPLE__) ++ unsigned allocating_variadic; ++#endif ++}; + -+/* Define if your assembler supports PC relative relocs. */ -+#define HAVE_AS_X86_PCREL 1 ++/* Initialize a procedure call argument marshalling state. */ ++static void ++arg_init (struct arg_state *state) ++{ ++ state->ngrn = 0; ++ state->nsrn = 0; ++ state->nsaa = 0; ++#if defined (__APPLE__) ++ state->allocating_variadic = 0; ++#endif ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 ++/* Allocate an aligned slot on the stack and return a pointer to it. */ ++static void * ++allocate_to_stack (struct arg_state *state, void *stack, ++ size_t alignment, size_t size) ++{ ++ size_t nsaa = state->nsaa; + -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ /* Round up the NSAA to the larger of 8 or the natural ++ alignment of the argument's type. */ ++#if defined (__APPLE__) ++ if (state->allocating_variadic && alignment < 8) ++ alignment = 8; ++#else ++ if (alignment < 8) ++ alignment = 8; ++#endif ++ ++ nsaa = ALIGN (nsaa, alignment); ++ state->nsaa = nsaa + size; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 ++ return (char *)stack + nsaa; ++} + -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 ++static ffi_arg ++extend_integer_type (void *source, int type) ++{ ++ switch (type) ++ { ++ case FFI_TYPE_UINT8: ++ return *(UINT8 *) source; ++ case FFI_TYPE_SINT8: ++ return *(SINT8 *) source; ++ case FFI_TYPE_UINT16: ++ return *(UINT16 *) source; ++ case FFI_TYPE_SINT16: ++ return *(SINT16 *) source; ++ case FFI_TYPE_UINT32: ++ return *(UINT32 *) source; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ return *(SINT32 *) source; ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ return *(UINT64 *) source; ++ break; ++ case FFI_TYPE_POINTER: ++ return *(uintptr_t *) source; ++ default: ++ abort(); ++ } ++} + -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++static void ++extend_hfa_type (void *dest, void *src, int h) ++{ ++ int f = h - AARCH64_RET_S4; ++ void *x0; + -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 ++ asm volatile ( ++ "adr %0, 0f\n" ++" add %0, %0, %1\n" ++" br %0\n" ++"0: ldp s16, s17, [%3]\n" /* S4 */ ++" ldp s18, s19, [%3, #8]\n" ++" b 4f\n" ++" ldp s16, s17, [%3]\n" /* S3 */ ++" ldr s18, [%3, #8]\n" ++" b 3f\n" ++" ldp s16, s17, [%3]\n" /* S2 */ ++" b 2f\n" ++" nop\n" ++" ldr s16, [%3]\n" /* S1 */ ++" b 1f\n" ++" nop\n" ++" ldp d16, d17, [%3]\n" /* D4 */ ++" ldp d18, d19, [%3, #16]\n" ++" b 4f\n" ++" ldp d16, d17, [%3]\n" /* D3 */ ++" ldr d18, [%3, #16]\n" ++" b 3f\n" ++" ldp d16, d17, [%3]\n" /* D2 */ ++" b 2f\n" ++" nop\n" ++" ldr d16, [%3]\n" /* D1 */ ++" b 1f\n" ++" nop\n" ++" ldp q16, q17, [%3]\n" /* Q4 */ ++" ldp q18, q19, [%3, #16]\n" ++" b 4f\n" ++" ldp q16, q17, [%3]\n" /* Q3 */ ++" ldr q18, [%3, #16]\n" ++" b 3f\n" ++" ldp q16, q17, [%3]\n" /* Q2 */ ++" b 2f\n" ++" nop\n" ++" ldr q16, [%3]\n" /* Q1 */ ++" b 1f\n" ++"4: str q19, [%2, #48]\n" ++"3: str q18, [%2, #32]\n" ++"2: str q17, [%2, #16]\n" ++"1: str q16, [%2]" ++ : "=&r"(x0) ++ : "r"(f * 12), "r"(dest), "r"(src) ++ : "memory", "v16", "v17", "v18", "v19"); ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 ++static void * ++compress_hfa_type (void *dest, void *reg, int h) ++{ ++ switch (h) ++ { ++ case AARCH64_RET_S1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 12; ++#endif ++ } ++ else ++ *(float *)dest = *(float *)reg; ++ break; ++ case AARCH64_RET_S2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.s, v17.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_S3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.s, v17.s, v18.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_S4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); ++ break; + -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ ++ case AARCH64_RET_D1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 8; ++#endif ++ } ++ else ++ *(double *)dest = *(double *)reg; ++ break; ++ case AARCH64_RET_D2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.d, v17.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_D3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.d, v17.d, v18.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_D4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); ++ break; + -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 ++ default: ++ if (dest != reg) ++ return memcpy (dest, reg, 16 * (4 - (h & 3))); ++ break; ++ } ++ return dest; ++} + -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 ++/* Either allocate an appropriate register for the argument type, or if ++ none are available, allocate a stack slot and return a pointer ++ to the allocated space. */ + -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ ++static void * ++allocate_int_to_reg_or_stack (struct call_context *context, ++ struct arg_state *state, ++ void *stack, size_t size) ++{ ++ if (state->ngrn < N_X_ARG_REG) ++ return &context->x[state->ngrn++]; + -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 ++ state->ngrn = N_X_ARG_REG; ++ return allocate_to_stack (state, stack, size, size); ++} + -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ ffi_type *rtype = cif->rtype; ++ size_t bytes = cif->bytes; ++ int flags, i, n; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 ++ switch (rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = AARCH64_RET_VOID; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = AARCH64_RET_UINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = AARCH64_RET_UINT16; ++ break; ++ case FFI_TYPE_UINT32: ++ flags = AARCH64_RET_UINT32; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = AARCH64_RET_SINT8; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = AARCH64_RET_SINT16; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ flags = AARCH64_RET_SINT32; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = AARCH64_RET_INT64; ++ break; ++ case FFI_TYPE_POINTER: ++ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); ++ break; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ flags = is_vfp_type (rtype); ++ if (flags == 0) ++ { ++ size_t s = rtype->size; ++ if (s > 16) ++ { ++ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; ++ bytes += 8; ++ } ++ else if (s == 16) ++ flags = AARCH64_RET_INT128; ++ else if (s == 8) ++ flags = AARCH64_RET_INT64; ++ else ++ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; ++ } ++ break; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 ++ default: ++ abort(); ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 ++ for (i = 0, n = cif->nargs; i < n; i++) ++ if (is_vfp_type (cif->arg_types[i])) ++ { ++ flags |= AARCH64_FLAG_ARG_V; ++ break; ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 ++ /* Round the stack up to a multiple of the stack alignment requirement. */ ++ cif->bytes = ALIGN(bytes, 16); ++ cif->flags = flags; ++#if defined (__APPLE__) ++ cif->aarch64_nfixedargs = 0; ++#endif + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 ++ return FFI_OK; ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 ++#if defined (__APPLE__) ++/* Perform Apple-specific cif processing for variadic calls */ ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs) ++{ ++ ffi_status status = ffi_prep_cif_machdep (cif); ++ cif->aarch64_nfixedargs = nfixedargs; ++ return status; ++} ++#endif /* __APPLE__ */ + -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 ++extern void ffi_call_SYSV (struct call_context *context, void *frame, ++ void (*fn)(void), void *rvalue, int flags, ++ void *closure) FFI_HIDDEN; + -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" ++/* Call a function with the provided arguments and capture the return ++ value. */ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, ++ void **avalue, void *closure) ++{ ++ struct call_context *context; ++ void *stack, *frame, *rvalue; ++ struct arg_state state; ++ size_t stack_bytes, rtype_size, rsize; ++ int i, nargs, flags; ++ ffi_type *rtype; + -+/* Name of package */ -+#define PACKAGE "libffi" ++ flags = cif->flags; ++ rtype = cif->rtype; ++ rtype_size = rtype->size; ++ stack_bytes = cif->bytes; + -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ /* If the target function returns a structure via hidden pointer, ++ then we cannot allow a null rvalue. Otherwise, mash a null ++ rvalue to void return type. */ ++ rsize = 0; ++ if (flags & AARCH64_RET_IN_MEM) ++ { ++ if (orig_rvalue == NULL) ++ rsize = rtype_size; ++ } ++ else if (orig_rvalue == NULL) ++ flags &= AARCH64_FLAG_ARG_V; ++ else if (flags & AARCH64_RET_NEED_COPY) ++ rsize = 16; + -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" ++ /* Allocate consectutive stack for everything we'll need. */ ++ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); ++ stack = context + 1; ++ frame = stack + stack_bytes; ++ rvalue = (rsize ? frame + 32 : orig_rvalue); + -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" ++ arg_init (&state); ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) ++ { ++ ffi_type *ty = cif->arg_types[i]; ++ size_t s = ty->size; ++ void *a = avalue[i]; ++ int h, t; + -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" ++ t = ty->type; ++ switch (t) ++ { ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; + -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" ++ /* If the argument is a basic type the argument is allocated to an ++ appropriate register, or if none are available, to the stack. */ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ do_pointer: ++ { ++ ffi_arg ext = extend_integer_type (a, t); ++ if (state.ngrn < N_X_ARG_REG) ++ context->x[state.ngrn++] = ext; ++ else ++ { ++ void *d = allocate_to_stack (&state, stack, ty->alignment, s); ++ state.ngrn = N_X_ARG_REG; ++ /* Note that the default abi extends each argument ++ to a full 64-bit slot, while the iOS abi allocates ++ only enough space. */ ++#ifdef __APPLE__ ++ memcpy(d, a, s); ++#else ++ *(ffi_arg *)d = ext; ++#endif ++ } ++ } ++ break; + -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ { ++ void *dest; + -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 ++ h = is_vfp_type (ty); ++ if (h) ++ { ++ int elems = 4 - (h & 3); ++ if (state.nsrn + elems <= N_V_ARG_REG) ++ { ++ dest = &context->v[state.nsrn]; ++ state.nsrn += elems; ++ extend_hfa_type (dest, a, h); ++ break; ++ } ++ state.nsrn = N_V_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ else if (s > 16) ++ { ++ /* If the argument is a composite type that is larger than 16 ++ bytes, then the argument has been copied to memory, and ++ the argument is replaced by a pointer to the copy. */ ++ a = &avalue[i]; ++ t = FFI_TYPE_POINTER; ++ goto do_pointer; ++ } ++ else ++ { ++ size_t n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ /* If the argument is a composite type and the size in ++ double-words is not more than the number of available ++ X registers, then the argument is copied into ++ consecutive X registers. */ ++ dest = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ /* Otherwise, there are insufficient X registers. Further ++ X register allocations are prevented, the NSAA is ++ adjusted and the argument is copied to memory at the ++ adjusted NSAA. */ ++ state.ngrn = N_X_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ } ++ memcpy (dest, a, s); ++ } ++ break; + -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 ++ default: ++ abort(); ++ } + -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 ++#if defined (__APPLE__) ++ if (i + 1 == cif->aarch64_nfixedargs) ++ { ++ state.ngrn = N_X_ARG_REG; ++ state.nsrn = N_V_ARG_REG; ++ state.allocating_variadic = 1; ++ } ++#endif ++ } + -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ ++ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); + -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 ++ if (flags & AARCH64_RET_NEED_COPY) ++ memcpy (orig_rvalue, rvalue, rtype_size); ++} + -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} + -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ ++#ifdef FFI_GO_CLOSURES ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++#endif /* FFI_GO_CLOSURES */ + -+/* Version number of package */ -+#define VERSION "3.99999" ++/* Build a trampoline. */ + -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif ++extern void ffi_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; + -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ ++#if FFI_EXEC_TRAMPOLINE_TABLE + ++#include ++#include ++#include ++#include + -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif ++extern void *ffi_closure_trampoline_table_page; + ++typedef struct ffi_trampoline_table ffi_trampoline_table; ++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; + ++struct ffi_trampoline_table ++{ ++ /* contiguous writable and executable pages */ ++ vm_address_t config_page; ++ vm_address_t trampoline_page; + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __x86_64__ ++ /* free list tracking */ ++ uint16_t free_count; ++ ffi_trampoline_table_entry *free_list; ++ ffi_trampoline_table_entry *free_list_pool; + -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ ffi_trampoline_table *prev; ++ ffi_trampoline_table *next; ++}; + -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++struct ffi_trampoline_table_entry ++{ ++ void *(*trampoline) (); ++ ffi_trampoline_table_entry *next; ++}; + -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ ++/* The trampoline configuration is placed a page prior to the trampoline's entry point */ ++#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - PAGE_SIZE)); + -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ ++/* Total number of trampolines that fit in one trampoline table */ ++#define FFI_TRAMPOLINE_COUNT (PAGE_SIZE / FFI_TRAMPOLINE_SIZE) + -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" ++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; ++static ffi_trampoline_table *ffi_trampoline_tables = NULL; + -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ ++static ffi_trampoline_table * ++ffi_trampoline_table_alloc () ++{ ++ ffi_trampoline_table *table = NULL; + -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ ++ /* Loop until we can allocate two contiguous pages */ ++ while (table == NULL) ++ { ++ vm_address_t config_page = 0x0; ++ kern_return_t kt; + -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++ /* Try to allocate two pages */ ++ kt = ++ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, ++ VM_FLAGS_ANYWHERE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } + -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 ++ /* Now drop the second half of the allocation to make room for the trampoline table */ ++ vm_address_t trampoline_page = config_page + PAGE_SIZE; ++ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } + -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ ++ /* Remap the trampoline table to directly follow the config page */ ++ vm_prot_t cur_prot; ++ vm_prot_t max_prot; + -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ ++ kt = ++ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, ++ mach_task_self (), ++ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, ++ &cur_prot, &max_prot, VM_INHERIT_SHARE); + -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 ++ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ ++ if (kt != KERN_SUCCESS) ++ { ++ /* Log unexpected failures */ ++ if (kt != KERN_NO_SPACE) ++ { ++ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ } + -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 ++ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); ++ continue; ++ } + -+/* Define if your assembler supports .cfi_* directives. */ -+/* #undef HAVE_AS_CFI_PSEUDO_OP */ ++ /* We have valid trampoline and config pages */ ++ table = calloc (1, sizeof (ffi_trampoline_table)); ++ table->free_count = FFI_TRAMPOLINE_COUNT; ++ table->config_page = config_page; ++ table->trampoline_page = trampoline_page; + -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++ /* Create and initialize the free list */ ++ table->free_list_pool = ++ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); + -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ ++ uint16_t i; ++ for (i = 0; i < table->free_count; i++) ++ { ++ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; ++ entry->trampoline = ++ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); + -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ ++ if (i < table->free_count - 1) ++ entry->next = &table->free_list_pool[i + 1]; ++ } + -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++ table->free_list = table->free_list_pool; ++ } + -+/* Define if your assembler supports PC relative relocs. */ -+#define HAVE_AS_X86_PCREL 1 ++ return table; ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ /* Create the closure */ ++ ffi_closure *closure = malloc (size); ++ if (closure == NULL) ++ return NULL; + -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ pthread_mutex_lock (&ffi_trampoline_lock); + -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 ++ /* Check for an active trampoline table with available entries. */ ++ ffi_trampoline_table *table = ffi_trampoline_tables; ++ if (table == NULL || table->free_list == NULL) ++ { ++ table = ffi_trampoline_table_alloc (); ++ if (table == NULL) ++ { ++ free (closure); ++ return NULL; ++ } + -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 ++ /* Insert the new table at the top of the list */ ++ table->next = ffi_trampoline_tables; ++ if (table->next != NULL) ++ table->next->prev = table; + -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ ffi_trampoline_tables = table; ++ } + -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 ++ /* Claim the free entry */ ++ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; ++ ffi_trampoline_tables->free_list = entry->next; ++ ffi_trampoline_tables->free_count--; ++ entry->next = NULL; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 ++ pthread_mutex_unlock (&ffi_trampoline_lock); + -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ ++ /* Initialize the return values */ ++ *code = entry->trampoline; ++ closure->trampoline_table = table; ++ closure->trampoline_table_entry = entry; + -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 ++ return closure; ++} + -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 ++void ++ffi_closure_free (void *ptr) ++{ ++ ffi_closure *closure = ptr; + -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ ++ pthread_mutex_lock (&ffi_trampoline_lock); + -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 ++ /* Fetch the table and entry references */ ++ ffi_trampoline_table *table = closure->trampoline_table; ++ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; + -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ ++ /* Return the entry to the free list */ ++ entry->next = table->free_list; ++ table->free_list = entry; ++ table->free_count++; ++ ++ /* If all trampolines within this table are free, and at least one other table exists, deallocate ++ * the table */ ++ if (table->free_count == FFI_TRAMPOLINE_COUNT ++ && ffi_trampoline_tables != table) ++ { ++ /* Remove from the list */ ++ if (table->prev != NULL) ++ table->prev->next = table->next; ++ ++ if (table->next != NULL) ++ table->next->prev = table->prev; ++ ++ /* Deallocate pages */ ++ kern_return_t kt; ++ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ ++ kt = ++ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 ++ /* Deallocate free list */ ++ free (table->free_list_pool); ++ free (table); ++ } ++ else if (ffi_trampoline_tables != table) ++ { ++ /* Otherwise, bump this table to the top of the list */ ++ table->prev = NULL; ++ table->next = ffi_trampoline_tables; ++ if (ffi_trampoline_tables != NULL) ++ ffi_trampoline_tables->prev = table; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 ++ ffi_trampoline_tables = table; ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 ++ pthread_mutex_unlock (&ffi_trampoline_lock); + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 ++ /* Free the closure */ ++ free (closure); ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 ++#endif + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 ++ffi_status ++ffi_prep_closure_loc (ffi_closure *closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 ++ void (*start)(void); ++ ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_closure_SYSV_V; ++ else ++ start = ffi_closure_SYSV; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); ++ config[0] = closure; ++ config[1] = start; ++#else ++ static const unsigned char trampoline[16] = { ++ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ ++ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ ++ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ ++ }; ++ char *tramp = closure->tramp; ++ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ ++ *(UINT64 *)(tramp + 16) = (uintptr_t)start; + -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" ++ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); ++#endif + -+/* Name of package */ -+#define PACKAGE "libffi" ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; + -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ return FFI_OK; ++} + -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" ++#ifdef FFI_GO_CLOSURES ++extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; + -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) ++{ ++ void (*start)(void); + -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_go_closure_SYSV_V; ++ else ++ start = ffi_go_closure_SYSV; + -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" ++ closure->tramp = start; ++ closure->cif = cif; ++ closure->fun = fun; + -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 ++ return FFI_OK; ++} ++#endif /* FFI_GO_CLOSURES */ + -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 ++/* Primary handler to setup and invoke a function within a closure. + -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 ++ A closure when invoked enters via the assembler wrapper ++ ffi_closure_SYSV(). The wrapper allocates a call context on the ++ stack, saves the interesting registers (from the perspective of ++ the calling convention) into the context then passes control to ++ ffi_closure_SYSV_inner() passing the saved context and a pointer to ++ the stack at the point ffi_closure_SYSV() was invoked. + -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ ++ On the return path the assembler wrapper will reload call context ++ registers. + -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 ++ ffi_closure_SYSV_inner() marshalls the call context into ffi value ++ descriptors, invokes the wrapped function, then marshalls the return ++ value back into the call context. */ + -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 ++int FFI_HIDDEN ++ffi_closure_SYSV_inner (ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ struct call_context *context, ++ void *stack, void *rvalue, void *struct_rvalue) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ int i, h, nargs, flags; ++ struct arg_state state; + -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ ++ arg_init (&state); + -+/* Version number of package */ -+#define VERSION "3.99999" ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) ++ { ++ ffi_type *ty = cif->arg_types[i]; ++ int t = ty->type; ++ size_t n, s = ty->size; + -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif ++ switch (t) ++ { ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; + -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); ++ break; + ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ h = is_vfp_type (ty); ++ if (h) ++ { ++ n = 4 - (h & 3); ++ if (state.nsrn + n <= N_V_ARG_REG) ++ { ++ void *reg = &context->v[state.nsrn]; ++ state.nsrn += n; + -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif ++ /* Eeek! We need a pointer to the structure, however the ++ homogeneous float elements are being passed in individual ++ registers, therefore for float and double the structure ++ is not represented as a contiguous sequence of bytes in ++ our saved register context. We don't need the original ++ contents of the register storage, so we reformat the ++ structure into the same memory. */ ++ avalue[i] = compress_hfa_type (reg, reg, h); ++ } ++ else ++ { ++ state.nsrn = N_V_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } ++ } ++ else if (s > 16) ++ { ++ /* Replace Composite type of size greater than 16 with a ++ pointer. */ ++ avalue[i] = *(void **) ++ allocate_int_to_reg_or_stack (context, &state, stack, ++ sizeof (void *)); ++ } ++ else ++ { ++ n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ avalue[i] = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ state.ngrn = N_X_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } ++ } ++ break; ++ ++ default: ++ abort(); ++ } ++ } ++ ++ flags = cif->flags; ++ if (flags & AARCH64_RET_IN_MEM) ++ rvalue = struct_rvalue; ++ ++ fun (cif, rvalue, avalue, user_data); + ++ return flags; ++} + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-03-12 21:32:24.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h 2015-04-26 09:49:15.000000000 +0800 +@@ -0,0 +1,67 @@ ++/* ++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: + -+#include ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + ++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. */ + -+#endif -+#ifdef __i386__ ++#define AARCH64_RET_VOID 0 ++#define AARCH64_RET_INT64 1 ++#define AARCH64_RET_INT128 2 + -+#include ++#define AARCH64_RET_UNUSED3 3 ++#define AARCH64_RET_UNUSED4 4 ++#define AARCH64_RET_UNUSED5 5 ++#define AARCH64_RET_UNUSED6 6 ++#define AARCH64_RET_UNUSED7 7 + ++/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, ++ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ ++#define AARCH64_RET_S4 8 ++#define AARCH64_RET_S3 9 ++#define AARCH64_RET_S2 10 ++#define AARCH64_RET_S1 11 + -+#endif -+#ifdef __arm__ ++#define AARCH64_RET_D4 12 ++#define AARCH64_RET_D3 13 ++#define AARCH64_RET_D2 14 ++#define AARCH64_RET_D1 15 + -+#include ++#define AARCH64_RET_Q4 16 ++#define AARCH64_RET_Q3 17 ++#define AARCH64_RET_Q2 18 ++#define AARCH64_RET_Q1 19 + ++/* Note that each of the sub-64-bit integers gets two entries. */ ++#define AARCH64_RET_UINT8 20 ++#define AARCH64_RET_UINT16 22 ++#define AARCH64_RET_UINT32 24 + -+#endif -+#ifdef __x86_64__ ++#define AARCH64_RET_SINT8 26 ++#define AARCH64_RET_SINT16 28 ++#define AARCH64_RET_SINT32 30 + -+#include ++#define AARCH64_RET_MASK 31 + ++#define AARCH64_RET_IN_MEM (1 << 5) ++#define AARCH64_RET_NEED_COPY (1 << 6) + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,78 @@ ++#define AARCH64_FLAG_ARG_V_BIT 7 ++#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) ++ ++#define N_X_ARG_REG 8 ++#define N_V_ARG_REG 8 ++#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S +--- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S 2015-04-26 08:39:44.000000000 +0800 +@@ -0,0 +1,439 @@ +#ifdef __arm64__ + +/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. @@ -20016,153 +35663,433 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Mod +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++#define LIBFFI_ASM ++#include ++#include ++#include ++#include "internal.h" + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#ifdef HAVE_MACHINE_ASM_H ++#include ++#else ++#ifdef __USER_LABEL_PREFIX__ ++#define CONCAT1(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b ++ ++/* Use the right prefix for global labels. */ ++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) ++#else ++#define CNAME(x) x ++#endif ++#endif ++ ++#ifdef __AARCH64EB__ ++# define BE(X) X ++#else ++# define BE(X) 0 ++#endif ++ ++#ifdef __ILP32__ ++#define PTR_REG(n) w##n ++#else ++#define PTR_REG(n) x##n ++#endif ++ ++#ifdef __ILP32__ ++#define PTR_SIZE 4 ++#else ++#define PTR_SIZE 8 +#endif + -+#ifndef LIBFFI_ASM -+#ifdef __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+typedef unsigned long long ffi_arg; -+typedef signed long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif ++ .text ++ .align 4 ++ ++/* ffi_call_SYSV ++ extern void ffi_call_SYSV (void *stack, void *frame, ++ void (*fn)(void), void *rvalue, ++ int flags, void *closure); ++ ++ Therefore on entry we have: ++ ++ x0 stack ++ x1 frame ++ x2 fn ++ x3 rvalue ++ x4 flags ++ x5 closure ++*/ ++ ++ cfi_startproc ++CNAME(ffi_call_SYSV): ++ /* Use a stack frame allocated by our caller. */ ++ cfi_def_cfa(x1, 32); ++ stp x29, x30, [x1] ++ mov x29, x1 ++ mov sp, x0 ++ cfi_def_cfa_register(x29) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ mov x9, x2 /* save fn */ ++ mov x8, x3 /* install structure return */ ++#ifdef FFI_GO_CLOSURES ++ mov x18, x5 /* install static chain */ ++#endif ++ stp x3, x4, [x29, #16] /* save rvalue and flags */ ++ ++ /* Load the vector argument passing registers, if necessary. */ ++ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f ++ ldp q0, q1, [sp, #0] ++ ldp q2, q3, [sp, #32] ++ ldp q4, q5, [sp, #64] ++ ldp q6, q7, [sp, #96] ++1: ++ /* Load the core argument passing registers, including ++ the structure return pointer. */ ++ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] ++ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] ++ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] ++ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] ++ ++ /* Deallocate the context, leaving the stacked arguments. */ ++ add sp, sp, #CALL_CONTEXT_SIZE ++ ++ blr x9 /* call fn */ ++ ++ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ ++ ++ /* Partially deconstruct the stack frame. */ ++ mov sp, x29 ++ cfi_def_cfa_register (sp) ++ ldp x29, x30, [x29] ++ ++ /* Save the return value as directed. */ ++ adr x5, 0f ++ and w4, w4, #AARCH64_RET_MASK ++ add x5, x5, x4, lsl #3 ++ br x5 ++ ++ /* Note that each table entry is 2 insns, and thus 8 bytes. ++ For integer data, note that we're storing into ffi_arg ++ and therefore we want to extend to 64 bits; these types ++ have two consecutive entries allocated for them. */ ++ .align 4 ++0: ret /* VOID */ ++ nop ++1: str x0, [x3] /* INT64 */ ++ ret ++2: stp x0, x1, [x3] /* INT128 */ ++ ret ++3: brk #1000 /* UNUSED */ ++ ret ++4: brk #1000 /* UNUSED */ ++ ret ++5: brk #1000 /* UNUSED */ ++ ret ++6: brk #1000 /* UNUSED */ ++ ret ++7: brk #1000 /* UNUSED */ ++ ret ++8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ ++ ret ++9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ ++ ret ++10: stp s0, s1, [x3] /* S2 */ ++ ret ++11: str s0, [x3] /* S1 */ ++ ret ++12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ ++ ret ++13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ ++ ret ++14: stp d0, d1, [x3] /* D2 */ ++ ret ++15: str d0, [x3] /* D1 */ ++ ret ++16: str q3, [x3, #48] /* Q4 */ ++ nop ++17: str q2, [x3, #32] /* Q3 */ ++ nop ++18: stp q0, q1, [x3] /* Q2 */ ++ ret ++19: str q0, [x3] /* Q1 */ ++ ret ++20: uxtb w0, w0 /* UINT8 */ ++ str x0, [x3] ++21: ret /* reserved */ ++ nop ++22: uxth w0, w0 /* UINT16 */ ++ str x0, [x3] ++23: ret /* reserved */ ++ nop ++24: mov w0, w0 /* UINT32 */ ++ str x0, [x3] ++25: ret /* reserved */ ++ nop ++26: sxtb x0, w0 /* SINT8 */ ++ str x0, [x3] ++27: ret /* reserved */ ++ nop ++28: sxth x0, w0 /* SINT16 */ ++ str x0, [x3] ++29: ret /* reserved */ ++ nop ++30: sxtw x0, w0 /* SINT32 */ ++ str x0, [x3] ++31: ret /* reserved */ ++ nop ++ ++ cfi_endproc + -+typedef enum ffi_abi -+ { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+ } ffi_abi; ++ .globl CNAME(ffi_call_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_call_SYSV), #function ++ .hidden CNAME(ffi_call_SYSV) ++ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) +#endif + -+/* ---- Definitions for closures ----------------------------------------- */ ++/* ffi_closure_SYSV + -+#define FFI_CLOSURES 1 -+#if defined (__APPLE__) -+#define FFI_TRAMPOLINE_SIZE 20 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 -+#else -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE -+#endif -+#define FFI_NATIVE_RAW_API 0 ++ Closure invocation glue. This is the low level code invoked directly by ++ the closure trampoline to setup and call a closure. + -+/* ---- Internal ---- */ ++ On entry x17 points to a struct ffi_closure, x16 has been clobbered ++ all other registers are preserved. + -+#if defined (__APPLE__) -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs -+#else -+/* iOS reserves x18 for the system. Disable Go closures until -+ a new static chain is chosen. */ -+#define FFI_GO_CLOSURES 1 -+#endif ++ We allocate a call context and save the argument passing registers, ++ then invoked the generic C ffi_closure_SYSV_inner() function to do all ++ the real work, on return we load the result passing registers back from ++ the call context. ++*/ + -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) + -+#endif ++ .align 4 ++CNAME(ffi_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc + ++ .globl CNAME(ffi_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV_V), #function ++ .hidden CNAME(ffi_closure_SYSV_V) ++ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,74 @@ -+#ifdef __arm__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012 Anthony Green -+ Copyright (c) 2010 CodeSourcery -+ Copyright (c) 1996-2003 Red Hat, Inc. + -+ Target configuration macros for ARM. ++ .align 4 ++ cfi_startproc ++CNAME(ffi_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp + -+ 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: ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ ++ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ ++.Ldo_closure: ++ add x3, sp, #16 /* load context */ ++ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ ++ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ ++ mov x6, x8 /* load struct_rval */ ++ bl CNAME(ffi_closure_SYSV_inner) + -+ 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. ++ /* Load the return value as directed. */ ++ adr x1, 0f ++ and w0, w0, #AARCH64_RET_MASK ++ add x1, x1, x0, lsl #3 ++ add x3, sp, #16+CALL_CONTEXT_SIZE ++ br x1 + -+ ----------------------------------------------------------------------- */ ++ /* Note that each table entry is 2 insns, and thus 8 bytes. */ ++ .align 4 ++0: b 99f /* VOID */ ++ nop ++1: ldr x0, [x3] /* INT64 */ ++ b 99f ++2: ldp x0, x1, [x3] /* INT128 */ ++ b 99f ++3: brk #1000 /* UNUSED */ ++ nop ++4: brk #1000 /* UNUSED */ ++ nop ++5: brk #1000 /* UNUSED */ ++ nop ++6: brk #1000 /* UNUSED */ ++ nop ++7: brk #1000 /* UNUSED */ ++ nop ++8: ldr s3, [x3, #12] /* S4 */ ++ nop ++9: ldr s2, [x2, #8] /* S3 */ ++ nop ++10: ldp s0, s1, [x3] /* S2 */ ++ b 99f ++11: ldr s0, [x3] /* S1 */ ++ b 99f ++12: ldr d3, [x3, #24] /* D4 */ ++ nop ++13: ldr d2, [x3, #16] /* D3 */ ++ nop ++14: ldp d0, d1, [x3] /* D2 */ ++ b 99f ++15: ldr d0, [x3] /* D1 */ ++ b 99f ++16: ldr q3, [x3, #48] /* Q4 */ ++ nop ++17: ldr q2, [x3, #32] /* Q3 */ ++ nop ++18: ldp q0, q1, [x3] /* Q2 */ ++ b 99f ++19: ldr q0, [x3] /* Q1 */ ++ b 99f ++20: ldrb w0, [x3, #BE(7)] /* UINT8 */ ++ b 99f ++21: brk #1000 /* reserved */ ++ nop ++22: ldrh w0, [x3, #BE(6)] /* UINT16 */ ++ b 99f ++23: brk #1000 /* reserved */ ++ nop ++24: ldr w0, [x3, #BE(4)] /* UINT32 */ ++ b 99f ++25: brk #1000 /* reserved */ ++ nop ++26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ ++ b 99f ++27: brk #1000 /* reserved */ ++ nop ++28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ ++ b 99f ++29: brk #1000 /* reserved */ ++ nop ++30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ ++ nop ++31: /* reserved */ ++99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS ++ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) ++ cfi_restore (x29) ++ cfi_restore (x30) ++ ret ++ cfi_endproc + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++ .globl CNAME(ffi_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV), #function ++ .hidden CNAME(ffi_closure_SYSV) ++ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) ++#endif + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ .align 12 ++CNAME(ffi_closure_trampoline_table_page): ++ .rept 16384 / FFI_TRAMPOLINE_SIZE ++ adr x17, -16384 ++ adr x16, -16380 ++ ldr x16, [x16] ++ ldr x17, [x17] ++ br x16 ++ .endr ++ ++ .globl CNAME(ffi_closure_trampoline_table_page) ++ #ifdef __ELF__ ++ .type CNAME(ffi_closure_trampoline_table_page), #function ++ .hidden CNAME(ffi_closure_trampoline_table_page) ++ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) ++ #endif +#endif + -+#ifndef LIBFFI_ASM -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; ++#ifdef FFI_GO_CLOSURES ++ .align 4 ++CNAME(ffi_go_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc + -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_VFP, -+ FFI_LAST_ABI, -+#ifdef __ARM_PCS_VFP -+ FFI_DEFAULT_ABI = FFI_VFP, -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV, -+#endif -+} ffi_abi; ++ .globl CNAME(ffi_go_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV_V), #function ++ .hidden CNAME(ffi_go_closure_SYSV_V) ++ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) +#endif + -+#define FFI_EXTRA_CIF_FIELDS \ -+ int vfp_used; \ -+ unsigned short vfp_reg_free, vfp_nargs; \ -+ signed char vfp_args[16] \ ++ .align 4 ++ cfi_startproc ++CNAME(ffi_go_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp + -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] + -+/* ---- Definitions for closures ----------------------------------------- */ ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ ++ mov x2, x18 /* load user_data */ ++ b .Ldo_closure ++ cfi_endproc + -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+#define FFI_TRAMPOLINE_SIZE 12 -+#define FFI_NATIVE_RAW_API 0 ++ .globl CNAME(ffi_go_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV), #function ++ .hidden CNAME(ffi_go_closure_SYSV) ++ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) ++#endif ++#endif /* FFI_GO_CLOSURES */ + ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits +#endif + + ++ +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,144 @@ -+#ifdef __i386__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/closures.c modified/Modules/_ctypes/libffi_ios_aarch64/closures.c +--- orig/Modules/_ctypes/libffi_ios_aarch64/closures.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/closures.c 2015-04-26 08:39:05.000000000 +0800 +@@ -0,0 +1,688 @@ ++/* ----------------------------------------------------------------------- ++ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. ++ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. + -+ Target configuration macros for x86 and x86-64. ++ Code to allocate and deallocate memory for closures. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -20183,915 +36110,716 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modu + 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. -+ + ----------------------------------------------------------------------- */ + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#if defined __linux__ && !defined _GNU_SOURCE ++#define _GNU_SOURCE 1 +#endif + -+/* ---- System specific configurations ----------------------------------- */ -+ -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY -+ -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif ++#include ++#include + -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE ++# if __gnu_linux__ && !defined(__ANDROID__) ++/* This macro indicates it may be forbidden to map anonymous memory ++ with both write and execute permission. Code compiled when this ++ option is defined will attempt to map such pages once, but if it ++ fails, it falls back to creating a temporary file in a writable and ++ executable filesystem and mapping pages from it into separate ++ locations in the virtual memory space, one location writable and ++ another executable. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# define HAVE_MNTENT 1 ++# endif ++# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) ++/* Windows systems may have Data Execution Protection (DEP) enabled, ++ which requires the use of VirtualMalloc/VirtualFree to alloc/free ++ executable memory. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# endif +#endif + -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifndef _MSC_VER -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX ++# ifdef __linux__ ++/* When defined to 1 check for SELinux and if SELinux is active, ++ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that ++ might cause audit messages. */ ++# define FFI_MMAP_EXEC_SELINUX 1 ++# endif +#endif + -+/* ---- Generic type definitions ----------------------------------------- */ ++#if FFI_CLOSURES + -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif ++# if FFI_EXEC_TRAMPOLINE_TABLE + -+typedef enum ffi_abi { -+#if defined(X86_WIN64) -+ FFI_FIRST_ABI = 0, -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 ++// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. + -+#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+ FFI_FIRST_ABI = 1, -+ FFI_UNIX64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_UNIX64 ++# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ + -+#elif defined(X86_WIN32) -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_STDCALL = 2, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_MS_CDECL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_STDCALL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_MS_CDECL = 8, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV ++#define USE_LOCKS 1 ++#define USE_DL_PREFIX 1 ++#ifdef __GNUC__ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 1 +#endif -+} ffi_abi; +#endif + -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+ -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++/* We need to use mmap, not sbrk. */ ++#define HAVE_MORECORE 0 + -+#if defined (X86_64) || defined(X86_WIN64) \ -+ || (defined (__x86_64__) && defined (X86_DARWIN)) -+# define FFI_TRAMPOLINE_SIZE 24 -+# define FFI_NATIVE_RAW_API 0 -+#else -+# define FFI_TRAMPOLINE_SIZE 12 -+# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif ++/* We could, in theory, support mremap, but it wouldn't buy us anything. */ ++#define HAVE_MREMAP 0 + -+#endif ++/* We have no use for this, so save some code and data. */ ++#define NO_MALLINFO 1 + ++/* We need all allocations to be in regular segments, otherwise we ++ lose track of the corresponding code address. */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T + ++/* Don't allocate more than a page unless needed. */ ++#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) + ++#if FFI_CLOSURE_TEST ++/* Don't release single pages, to avoid a worst-case scenario of ++ continuously allocating and releasing single pages, but release ++ pairs of pages, which should do just as well given that allocations ++ are likely to be small. */ ++#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-03-12 21:32:31.000000000 +0800 -@@ -0,0 +1,144 @@ -+#ifdef __x86_64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. -+ -+ Target configuration macros for x86 and x86-64. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#include ++#include ++#include ++#include ++#ifndef _MSC_VER ++#include +#endif ++#include ++#include ++#if !defined(X86_WIN32) && !defined(X86_WIN64) ++#ifdef HAVE_MNTENT ++#include ++#endif /* HAVE_MNTENT */ ++#include ++#include + -+/* ---- System specific configurations ----------------------------------- */ ++/* We don't want sys/mman.h to be included after we redefine mmap and ++ dlmunmap. */ ++#include ++#define LACKS_SYS_MMAN_H 1 + -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY ++#if FFI_MMAP_EXEC_SELINUX ++#include ++#include + -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif ++static int selinux_enabled = -1; + -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif ++static int ++selinux_enabled_check (void) ++{ ++ struct statfs sfs; ++ FILE *f; ++ char *buf = NULL; ++ size_t len = 0; + -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifndef _MSC_VER -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+#endif ++ if (statfs ("/selinux", &sfs) >= 0 ++ && (unsigned int) sfs.f_type == 0xf97cff8cU) ++ return 1; ++ f = fopen ("/proc/mounts", "r"); ++ if (f == NULL) ++ return 0; ++ while (getline (&buf, &len, f) >= 0) ++ { ++ char *p = strchr (buf, ' '); ++ if (p == NULL) ++ break; ++ p = strchr (p + 1, ' '); ++ if (p == NULL) ++ break; ++ if (strncmp (p + 1, "selinuxfs ", 10) == 0) ++ { ++ free (buf); ++ fclose (f); ++ return 1; ++ } ++ } ++ free (buf); ++ fclose (f); ++ return 0; ++} + -+/* ---- Generic type definitions ----------------------------------------- */ ++#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ ++ : (selinux_enabled = selinux_enabled_check ())) + -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; +#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif + -+typedef enum ffi_abi { -+#if defined(X86_WIN64) -+ FFI_FIRST_ABI = 0, -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 ++#define is_selinux_enabled() 0 + -+#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+ FFI_FIRST_ABI = 1, -+ FFI_UNIX64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_UNIX64 ++#endif /* !FFI_MMAP_EXEC_SELINUX */ + -+#elif defined(X86_WIN32) -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_STDCALL = 2, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_MS_CDECL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_STDCALL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_MS_CDECL = 8, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif -+} ffi_abi; -+#endif ++/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ ++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#include + -+/* ---- Definitions for closures ----------------------------------------- */ ++static int emutramp_enabled = -1; + -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 ++static int ++emutramp_enabled_check (void) ++{ ++ char *buf = NULL; ++ size_t len = 0; ++ FILE *f; ++ int ret; ++ f = fopen ("/proc/self/status", "r"); ++ if (f == NULL) ++ return 0; ++ ret = 0; + -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ while (getline (&buf, &len, f) != -1) ++ if (!strncmp (buf, "PaX:", 4)) ++ { ++ char emutramp; ++ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) ++ ret = (emutramp == 'E'); ++ break; ++ } ++ free (buf); ++ fclose (f); ++ return ret; ++} + -+#if defined (X86_64) || defined(X86_WIN64) \ -+ || (defined (__x86_64__) && defined (X86_DARWIN)) -+# define FFI_TRAMPOLINE_SIZE 24 -+# define FFI_NATIVE_RAW_API 0 -+#else -+# define FFI_TRAMPOLINE_SIZE 12 -+# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif ++#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ ++ : (emutramp_enabled = emutramp_enabled_check ())) ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+#endif ++#elif defined (__CYGWIN__) || defined(__INTERIX) + ++#include + ++/* Cygwin is Linux-like, but not quite that Linux-like. */ ++#define is_selinux_enabled() 0 + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c ---- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,374 @@ -+/* ----------------------------------------------------------------------- -+ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. ++#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ + -+ Cloned from raw_api.c ++#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#define is_emutramp_enabled() 0 ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ Raw_api.c author: Kresten Krab Thorup -+ Java_raw_api.c author: Hans-J. Boehm ++/* Declare all functions defined in dlmalloc.c as static. */ ++static void *dlmalloc(size_t); ++static void dlfree(void*); ++static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; ++static void *dlrealloc(void *, size_t) MAYBE_UNUSED; ++static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; ++static void *dlvalloc(size_t) MAYBE_UNUSED; ++static int dlmallopt(int, int) MAYBE_UNUSED; ++static size_t dlmalloc_footprint(void) MAYBE_UNUSED; ++static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; ++static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; ++static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; ++static void *dlpvalloc(size_t) MAYBE_UNUSED; ++static int dlmalloc_trim(size_t) MAYBE_UNUSED; ++static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; ++static void dlmalloc_stats(void) MAYBE_UNUSED; + -+ $Id $ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++/* Use these for mmap and munmap within dlmalloc.c. */ ++static void *dlmmap(void *, size_t, int, int, int, off_t); ++static int dlmunmap(void *, size_t); ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ + -+ 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: ++#define mmap dlmmap ++#define munmap dlmunmap + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++#include "dlmalloc.c" + -+ 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. -+ ----------------------------------------------------------------------- */ ++#undef mmap ++#undef munmap + -+/* This defines a Java- and 64-bit specific variant of the raw API. */ -+/* It assumes that "raw" argument blocks look like Java stacks on a */ -+/* 64-bit machine. Arguments that can be stored in a single stack */ -+/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -+/* 64 bits are actually used. */ ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) + -+#include -+#include -+#include ++/* A mutex used to synchronize access to *exec* variables in this file. */ ++static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; + -+#if !defined(NO_JAVA_RAW_API) ++/* A file descriptor of a temporary file from which we'll map ++ executable pages. */ ++static int execfd = -1; + -+size_t -+ffi_java_raw_size (ffi_cif *cif) ++/* The amount of space already allocated from the temporary file. */ ++static size_t execsize = 0; ++ ++/* Open a temporary file name, and immediately unlink it. */ ++static int ++open_temp_exec_file_name (char *name, int flags) +{ -+ size_t result = 0; -+ int i; ++ int fd; + -+ ffi_type **at = cif->arg_types; ++#ifdef HAVE_MKOSTEMP ++ fd = mkostemp (name, flags); ++#else ++ fd = mkstemp (name); ++#endif + -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+ switch((*at) -> type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ result += 2 * FFI_SIZEOF_JAVA_RAW; -+ break; -+ case FFI_TYPE_STRUCT: -+ /* No structure parameters in Java. */ -+ abort(); -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ result += FFI_SIZEOF_JAVA_RAW; -+ } -+ } ++ if (fd != -1) ++ unlink (name); ++ ++ return fd; ++} ++ ++/* Open a temporary file in the named directory. */ ++static int ++open_temp_exec_file_dir (const char *dir) ++{ ++ static const char suffix[] = "/ffiXXXXXX"; ++ int lendir, flags; ++ char *tempname; ++#ifdef O_TMPFILE ++ int fd; ++#endif + -+ return result; -+} ++#ifdef O_CLOEXEC ++ flags = O_CLOEXEC; ++#else ++ flags = 0; ++#endif + ++#ifdef O_TMPFILE ++ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); ++ /* If the running system does not support the O_TMPFILE flag then retry without it. */ ++ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { ++ return fd; ++ } else { ++ errno = 0; ++ } ++#endif + -+void -+ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ lendir = strlen (dir); ++ tempname = __builtin_alloca (lendir + sizeof (suffix)); + -+#if WORDS_BIGENDIAN ++ if (!tempname) ++ return -1; + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + 3); -+ break; ++ memcpy (tempname, dir, lendir); ++ memcpy (tempname + lendir, suffix, sizeof (suffix)); + -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + 2); -+ break; ++ return open_temp_exec_file_name (tempname, flags); ++} + -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void *)raw; -+ raw += 2; -+ break; -+#endif ++/* Open a temporary file in the directory in the named environment ++ variable. */ ++static int ++open_temp_exec_file_env (const char *envvar) ++{ ++ const char *value = getenv (envvar); + -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; ++ if (!value) ++ return -1; + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++ return open_temp_exec_file_dir (value); ++} + -+ default: -+ *args = raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+ } -+ } ++#ifdef HAVE_MNTENT ++/* Open a temporary file in an executable and writable mount point ++ listed in the mounts file. Subsequent calls with the same mounts ++ keep searching for mount points in the same file. Providing NULL ++ as the mounts file closes the file. */ ++static int ++open_temp_exec_file_mnt (const char *mounts) ++{ ++ static const char *last_mounts; ++ static FILE *last_mntent; + -+#else /* WORDS_BIGENDIAN */ ++ if (mounts != last_mounts) ++ { ++ if (last_mntent) ++ endmntent (last_mntent); + -+#if !PDP ++ last_mounts = mounts; + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ switch((*tp)->type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void*) raw; -+ raw += 2; -+ break; -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ *args = (void*) raw++; -+ } -+#else /* FFI_SIZEOF_JAVA_RAW != 8 */ -+ *args = (void*) raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ ++ if (mounts) ++ last_mntent = setmntent (mounts, "r"); ++ else ++ last_mntent = NULL; + } + -+#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++ if (!last_mntent) ++ return -1; + -+#endif /* WORDS_BIGENDIAN */ -+} ++ for (;;) ++ { ++ int fd; ++ struct mntent mnt; ++ char buf[MAXPATHLEN * 3]; + -+void -+ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) ++ return -1; + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT8*) (*args); -+#else -+ (raw++)->uint = *(UINT8*) (*args); -+#endif -+ break; ++ if (hasmntopt (&mnt, "ro") ++ || hasmntopt (&mnt, "noexec") ++ || access (mnt.mnt_dir, W_OK)) ++ continue; + -+ case FFI_TYPE_SINT8: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT8*) (*args); -+#else -+ (raw++)->sint = *(SINT8*) (*args); -+#endif -+ break; ++ fd = open_temp_exec_file_dir (mnt.mnt_dir); + -+ case FFI_TYPE_UINT16: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT16*) (*args); -+#else -+ (raw++)->uint = *(UINT16*) (*args); -+#endif -+ break; ++ if (fd != -1) ++ return fd; ++ } ++} ++#endif /* HAVE_MNTENT */ + -+ case FFI_TYPE_SINT16: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT16*) (*args); -+#else -+ (raw++)->sint = *(SINT16*) (*args); -+#endif -+ break; ++/* Instructions to look for a location to hold a temporary file that ++ can be mapped in for execution. */ ++static struct ++{ ++ int (*func)(const char *); ++ const char *arg; ++ int repeat; ++} open_temp_exec_file_opts[] = { ++ { open_temp_exec_file_env, "TMPDIR", 0 }, ++ { open_temp_exec_file_dir, "/tmp", 0 }, ++ { open_temp_exec_file_dir, "/var/tmp", 0 }, ++ { open_temp_exec_file_dir, "/dev/shm", 0 }, ++ { open_temp_exec_file_env, "HOME", 0 }, ++#ifdef HAVE_MNTENT ++ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, ++ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, ++#endif /* HAVE_MNTENT */ ++}; + -+ case FFI_TYPE_UINT32: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT32*) (*args); -+#else -+ (raw++)->uint = *(UINT32*) (*args); -+#endif -+ break; ++/* Current index into open_temp_exec_file_opts. */ ++static int open_temp_exec_file_opts_idx = 0; + -+ case FFI_TYPE_SINT32: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT32*) (*args); -+#else -+ (raw++)->sint = *(SINT32*) (*args); -+#endif -+ break; ++/* Reset a current multi-call func, then advances to the next entry. ++ If we're at the last, go back to the first and return nonzero, ++ otherwise return zero. */ ++static int ++open_temp_exec_file_opts_next (void) ++{ ++ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); + -+ case FFI_TYPE_FLOAT: -+ (raw++)->flt = *(FLOAT32*) (*args); -+ break; ++ open_temp_exec_file_opts_idx++; ++ if (open_temp_exec_file_opts_idx ++ == (sizeof (open_temp_exec_file_opts) ++ / sizeof (*open_temp_exec_file_opts))) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ return 1; ++ } + -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ raw->uint = *(UINT64*) (*args); -+ raw += 2; -+ break; -+#endif ++ return 0; ++} + -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++/* Return a file descriptor of a temporary zero-sized file in a ++ writable and executable filesystem. */ ++static int ++open_temp_exec_file (void) ++{ ++ int fd; + -+ default: -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ FFI_ASSERT(0); /* Should have covered all cases */ -+#else -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif ++ do ++ { ++ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func ++ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); ++ ++ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat ++ || fd == -1) ++ { ++ if (open_temp_exec_file_opts_next ()) ++ break; + } + } -+} ++ while (fd == -1); + -+#if !FFI_NATIVE_RAW_API ++ return fd; ++} + -+static void -+ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) ++/* Map in a chunk of memory from the temporary exec file into separate ++ locations in the virtual memory address space, one writable and one ++ executable. Returns the address of the writable portion, after ++ storing an offset to the corresponding executable portion at the ++ last word of the requested chunk. */ ++static void * ++dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) +{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) ++ void *ptr; ++ ++ if (execfd == -1) + { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue <<= 32; -+ break; ++ open_temp_exec_file_opts_idx = 0; ++ retry_open: ++ execfd = open_temp_exec_file (); ++ if (execfd == -1) ++ return MFAIL; ++ } + -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+#if FFI_SIZEOF_JAVA_RAW == 4 -+ case FFI_TYPE_POINTER: -+#endif -+ *(SINT64 *)rvalue <<= 32; -+ break; ++ offset = execsize; + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++ if (ftruncate (execfd, offset + length)) ++ return MFAIL; + -+ default: -+ break; -+ } -+#endif -+} ++ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); ++ flags |= MAP_SHARED; + -+static void -+ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) -+{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) ++ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, ++ flags, execfd, offset); ++ if (ptr == MFAIL) + { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue >>= 32; -+ break; -+ -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+ *(SINT64 *)rvalue >>= 32; -+ break; ++ if (!offset) ++ { ++ close (execfd); ++ goto retry_open; ++ } ++ ftruncate (execfd, offset); ++ return MFAIL; ++ } ++ else if (!offset ++ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts_next (); + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++ start = mmap (start, length, prot, flags, execfd, offset); + -+ default: -+ break; ++ if (start == MFAIL) ++ { ++ munmap (ptr, length); ++ ftruncate (execfd, offset); ++ return start; + } -+#endif -+} + -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ ++ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; + -+void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ ffi_java_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_java_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+ ffi_java_rvalue_to_raw (cif, rvalue); -+} ++ execsize += length; + -+#if FFI_CLOSURES /* base system provides closures */ ++ return start; ++} + -+static void -+ffi_java_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) ++/* Map in a writable and executable chunk of memory if possible. ++ Failing that, fall back to dlmmap_locked. */ ++static void * ++dlmmap (void *start, size_t length, int prot, ++ int flags, int fd, off_t offset) +{ -+ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ void *ptr; + -+ ffi_java_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); -+ ffi_java_raw_to_rvalue (cif, rvalue); -+} ++ assert (start == NULL && length % malloc_getpagesize == 0 ++ && prot == (PROT_READ | PROT_WRITE) ++ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) ++ && fd == -1 && offset == 0); + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; ++#if FFI_CLOSURE_TEST ++ printf ("mapping in %zi\n", length); ++#endif + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_java_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) ++ if (execfd == -1 && is_emutramp_enabled ()) + { -+ cl->fun = fun; -+ cl->user_data = user_data; ++ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); ++ return ptr; + } + -+ return status; -+} -+ -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++ if (execfd == -1 && !is_selinux_enabled ()) ++ { ++ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); -+} ++ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) ++ /* Cool, no need to mess with separate segments. */ ++ return ptr; + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ -+#endif /* !NO_JAVA_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c ---- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,242 @@ -+/* ----------------------------------------------------------------------- -+ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green -+ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. ++ /* If MREMAP_DUP is ever introduced and implemented, try mmap ++ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with ++ MREMAP_DUP and prot at this point. */ ++ } + -+ 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: ++ if (execsize == 0 || execfd == -1) ++ { ++ pthread_mutex_lock (&open_temp_exec_file_mutex); ++ ptr = dlmmap_locked (start, length, prot, flags, offset); ++ pthread_mutex_unlock (&open_temp_exec_file_mutex); + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ return ptr; ++ } + -+ 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. -+ ----------------------------------------------------------------------- */ ++ return dlmmap_locked (start, length, prot, flags, offset); ++} + -+#include -+#include -+#include ++/* Release memory at the given address, as well as the corresponding ++ executable page if it's separate. */ ++static int ++dlmunmap (void *start, size_t length) ++{ ++ /* We don't bother decreasing execsize or truncating the file, since ++ we can't quite tell whether we're unmapping the end of the file. ++ We don't expect frequent deallocation anyway. If we did, we ++ could locate pages in the file by writing to the pages being ++ deallocated and checking that the file contents change. ++ Yuck. */ ++ msegmentptr seg = segment_holding (gm, start); ++ void *code; + -+/* Round up to FFI_SIZEOF_ARG. */ ++#if FFI_CLOSURE_TEST ++ printf ("unmapping %zi\n", length); ++#endif + -+#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) ++ if (seg && (code = add_segment_exec_offset (start, seg)) != start) ++ { ++ int ret = munmap (code, length); ++ if (ret) ++ return ret; ++ } + -+/* Perform machine independent initialization of aggregate type -+ specifications. */ ++ return munmap (start, length); ++} + -+static ffi_status initialize_aggregate(ffi_type *arg) ++#if FFI_CLOSURE_FREE_CODE ++/* Return segment holding given code address. */ ++static msegmentptr ++segment_holding_code (mstate m, char* addr) +{ -+ ffi_type **ptr; ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= add_segment_exec_offset (sp->base, sp) ++ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++#endif + -+ if (UNLIKELY(arg == NULL || arg->elements == NULL)) -+ return FFI_BAD_TYPEDEF; ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ + -+ arg->size = 0; -+ arg->alignment = 0; ++/* Allocate a chunk of memory with the given size. Returns a pointer ++ to the writable address, and sets *CODE to the executable ++ corresponding virtual address. */ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ void *ptr; + -+ ptr = &(arg->elements[0]); ++ if (!code) ++ return NULL; + -+ if (UNLIKELY(ptr == 0)) -+ return FFI_BAD_TYPEDEF; ++ ptr = dlmalloc (size); + -+ while ((*ptr) != NULL) ++ if (ptr) + { -+ if (UNLIKELY(((*ptr)->size == 0) -+ && (initialize_aggregate((*ptr)) != FFI_OK))) -+ return FFI_BAD_TYPEDEF; -+ -+ /* Perform a sanity check on the argument type */ -+ FFI_ASSERT_VALID_TYPE(*ptr); -+ -+ arg->size = ALIGN(arg->size, (*ptr)->alignment); -+ arg->size += (*ptr)->size; -+ -+ arg->alignment = (arg->alignment > (*ptr)->alignment) ? -+ arg->alignment : (*ptr)->alignment; ++ msegmentptr seg = segment_holding (gm, ptr); + -+ ptr++; ++ *code = add_segment_exec_offset (ptr, seg); + } + -+ /* Structure size includes tail padding. This is important for -+ structures that fit in one register on ABIs like the PowerPC64 -+ Linux ABI that right justify small structs in a register. -+ It's also needed for nested structure layout, for example -+ struct A { long a; char b; }; struct B { struct A x; char y; }; -+ should find y at an offset of 2*sizeof(long) and result in a -+ total size of 3*sizeof(long). */ -+ arg->size = ALIGN (arg->size, arg->alignment); ++ return ptr; ++} + -+ /* On some targets, the ABI defines that structures have an additional -+ alignment beyond the "natural" one based on their elements. */ -+#ifdef FFI_AGGREGATE_ALIGNMENT -+ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) -+ arg->alignment = FFI_AGGREGATE_ALIGNMENT; ++/* Release a chunk of memory allocated with ffi_closure_alloc. If ++ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the ++ writable or the executable address given. Otherwise, only the ++ writable address can be provided here. */ ++void ++ffi_closure_free (void *ptr) ++{ ++#if FFI_CLOSURE_FREE_CODE ++ msegmentptr seg = segment_holding_code (gm, ptr); ++ ++ if (seg) ++ ptr = sub_segment_exec_offset (ptr, seg); +#endif + -+ if (arg->size == 0) -+ return FFI_BAD_TYPEDEF; -+ else -+ return FFI_OK; ++ dlfree (ptr); +} + -+#ifndef __CRIS__ -+/* The CRIS ABI specifies structure elements to have byte -+ alignment only, so it completely overrides this functions, -+ which assumes "natural" alignment and padding. */ -+ -+/* Perform machine independent ffi_cif preparation, then call -+ machine dependent routine. */ + -+/* For non variadic functions isvariadic should be 0 and -+ nfixedargs==ntotalargs. ++#if FFI_CLOSURE_TEST ++/* Do some internal sanity testing to make sure allocation and ++ deallocation of pages are working as intended. */ ++int main () ++{ ++ void *p[3]; ++#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) ++#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) ++ GET (0, malloc_getpagesize / 2); ++ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); ++ PUT (1); ++ GET (1, 2 * malloc_getpagesize); ++ GET (2, malloc_getpagesize / 2); ++ PUT (1); ++ PUT (0); ++ PUT (2); ++ return 0; ++} ++#endif /* FFI_CLOSURE_TEST */ ++# else /* ! FFI_MMAP_EXEC_WRIT */ + -+ For variadic calls, isvariadic should be 1 and nfixedargs -+ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ ++/* On many systems, memory returned by malloc is writable and ++ executable, so just use it. */ + ++#include + -+ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, ffi_type **atypes) ++void * ++ffi_closure_alloc (size_t size, void **code) +{ -+ unsigned bytes = 0; -+ unsigned int i; -+ ffi_type **ptr; -+ -+ FFI_ASSERT(cif != NULL); -+ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); -+ FFI_ASSERT(nfixedargs <= ntotalargs); -+ -+ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) -+ return FFI_BAD_ABI; ++ if (!code) ++ return NULL; + -+ cif->abi = abi; -+ cif->arg_types = atypes; -+ cif->nargs = ntotalargs; -+ cif->rtype = rtype; ++ return *code = malloc (size); ++} + -+ cif->flags = 0; ++void ++ffi_closure_free (void *ptr) ++{ ++ free (ptr); ++} + -+#if HAVE_LONG_DOUBLE_VARIANT -+ ffi_prep_types (abi); -+#endif ++# endif /* ! FFI_MMAP_EXEC_WRIT */ ++#endif /* FFI_CLOSURES */ +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h 2015-04-26 08:38:36.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+ /* Initialize the return type if necessary */ -+ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; ++#include + -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if (rtype->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the return type */ -+ FFI_ASSERT_VALID_TYPE(cif->rtype); + -+ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ /* Make space for the return structure pointer */ -+ if (cif->rtype->type == FFI_TYPE_STRUCT -+#ifdef TILE -+ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) -+#endif -+#ifdef XTENSA -+ && (cif->rtype->size > 16) -+#endif -+#ifdef NIOS2 -+ && (cif->rtype->size > 8) -+#endif -+ ) -+ bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif ++#ifdef __i386__ + -+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) -+ { -+ -+ /* Initialize any uninitialized aggregate type definitions */ -+ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; -+ -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if ((*ptr)->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the argument type, do this -+ check after the initialization. */ -+ FFI_ASSERT_VALID_TYPE(*ptr); ++#include + -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ { -+ /* Add any padding if necessary */ -+ if (((*ptr)->alignment - 1) & bytes) -+ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); + -+#ifdef TILE -+ if (bytes < 10 * FFI_SIZEOF_ARG && -+ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) -+ { -+ /* An argument is never split between the 10 parameter -+ registers and the stack. */ -+ bytes = 10 * FFI_SIZEOF_ARG; -+ } -+#endif -+#ifdef XTENSA -+ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) -+ bytes = 6*4; +#endif ++#ifdef __arm__ + -+ bytes += STACK_ARG_SIZE((*ptr)->size); -+ } -+#endif -+ } ++#include + -+ cif->bytes = bytes; + -+ /* Perform machine dependent cif processing */ -+#ifdef FFI_TARGET_SPECIFIC_VARIADIC -+ if (isvariadic) -+ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); +#endif ++#ifdef __x86_64__ + -+ return ffi_prep_cif_machdep(cif); -+} -+#endif /* not __CRIS__ */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); -+} -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); -+} -+ -+#if FFI_CLOSURES ++#include + -+ffi_status -+ffi_prep_closure (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data) -+{ -+ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -+} + +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c ---- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,267 @@ -+/* ----------------------------------------------------------------------- -+ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h 2015-04-26 08:38:46.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __arm64__ + -+ Author: Kresten Krab Thorup ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -21101,1930 +36829,1428 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/lib + 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. ++ + ----------------------------------------------------------------------- */ + -+/* This file defines generic functions for use with the raw api. */ ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+#include -+#include ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+#if !FFI_NO_RAW_API ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+size_t -+ffi_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+ ffi_type **at = cif->arg_types; ++ More details on the raw and cloure API can be found in: + -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*at)->type == FFI_TYPE_STRUCT) -+ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); -+ else ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ ++ and ++ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ ++ ++#ifndef LIBFFI_H ++#define LIBFFI_H ++ ++#ifdef __cplusplus ++extern "C" { +#endif -+ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); -+ } + -+ return result; -+} ++/* Specify which architecture libffi is configured for. */ ++#ifndef AARCH64 ++#define AARCH64 ++#endif + ++/* ---- System configuration information --------------------------------- */ + -+void -+ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) ++#include ++ ++#ifndef LIBFFI_ASM ++ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif ++ ++#include ++#include ++ ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ ++ ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif ++ ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ ++ ++typedef struct _ffi_type +{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+#if WORDS_BIGENDIAN ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); -+ break; ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif + -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); -+ break; ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" +#endif -+ -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ *args = (raw++)->ptr; -+ break; ++ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif ++ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif ++ ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif ++ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; ++ ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ ++ ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; ++ ++typedef unsigned FFI_TYPE; ++ ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; +#endif ++} ffi_cif; + -+ case FFI_TYPE_COMPLEX: -+ *args = (raw++)->ptr; -+ break; ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; -+ -+ default: -+ *args = raw; -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#else /* WORDS_BIGENDIAN */ ++/* ---- Definitions for the raw API -------------------------------------- */ + -+#if !PDP ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*tp)->type == FFI_TYPE_STRUCT) -+ { -+ *args = (raw++)->ptr; -+ } -+ else ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG +#endif -+ if ((*tp)->type == FFI_TYPE_COMPLEX) -+ { -+ *args = (raw++)->ptr; -+ } -+ else -+ { -+ *args = (void*) raw; -+ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); -+ } -+ } + ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; ++ ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; +#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++typedef ffi_raw ffi_java_raw; ++#endif + -+#endif /* WORDS_BIGENDIAN */ -+} + -+void -+ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ (raw++)->uint = *(UINT8*) (*args); -+ break; ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ case FFI_TYPE_SINT8: -+ (raw++)->sint = *(SINT8*) (*args); -+ break; ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+ case FFI_TYPE_UINT16: -+ (raw++)->uint = *(UINT16*) (*args); -+ break; ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+ case FFI_TYPE_SINT16: -+ (raw++)->sint = *(SINT16*) (*args); -+ break; ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ (raw++)->uint = *(UINT32*) (*args); -+ break; ++/* ---- Definitions for closures ----------------------------------------- */ + -+ case FFI_TYPE_SINT32: -+ (raw++)->sint = *(SINT32*) (*args); -+ break; -+#endif ++#if FFI_CLOSURES + -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ (raw++)->ptr = *args; -+ break; ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif +#endif + -+ case FFI_TYPE_COMPLEX: -+ (raw++)->ptr = *args; -+ break; -+ -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ default: -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+} ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+#if !FFI_NATIVE_RAW_API ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ ++#if !FFI_NATIVE_RAW_API + -+void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+} ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+#if FFI_CLOSURES /* base system provides closures */ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+static void -+ffi_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++#endif + -+ ffi_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, raw, cl->user_data); -+} ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; ++} ffi_raw_closure; + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+ return status; -+} ++ ffi_cif *cif; + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ ++#if !FFI_NATIVE_RAW_API + -+#if FFI_CLOSURES ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; ++ ++#endif ++ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; ++ ++} ffi_java_raw_closure; + +ffi_status -+ffi_prep_raw_closure (ffi_raw_closure* cl, ++ffi_prep_raw_closure (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -+} ++ void *user_data); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); ++ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); ++ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + +#endif /* FFI_CLOSURES */ + -+#endif /* !FFI_NO_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c ---- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/types.c 2015-03-12 21:34:00.000000000 +0800 -@@ -0,0 +1,106 @@ -+/* ----------------------------------------------------------------------- -+ types.c - Copyright (c) 1996, 1998 Red Hat, Inc. -+ -+ Predefined ffi_types needed by libffi. ++#if FFI_GO_CLOSURES + -+ 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: ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); + -+ 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. -+ ----------------------------------------------------------------------- */ ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); + -+/* Hide the basic type definitions from the header file, so that we -+ can redefine them here as "const". */ -+#define LIBFFI_HIDE_BASIC_TYPES ++#endif /* FFI_GO_CLOSURES */ + -+#include -+#include ++/* ---- Public interface definition -------------------------------------- */ + -+/* Type definitions */ -+ -+#define FFI_TYPEDEF(name, type, id, maybe_const)\ -+struct struct_align_##name { \ -+ char c; \ -+ type x; \ -+}; \ -+maybe_const ffi_type ffi_type_##name = { \ -+ sizeof(type), \ -+ offsetof(struct struct_align_##name, x), \ -+ id, NULL \ -+} ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ -+static ffi_type *ffi_elements_complex_##name [2] = { \ -+ (ffi_type *)(&ffi_type_##name), NULL \ -+}; \ -+struct struct_align_complex_##name { \ -+ char c; \ -+ _Complex type x; \ -+}; \ -+maybe_const ffi_type ffi_type_complex_##name = { \ -+ sizeof(_Complex type), \ -+ offsetof(struct struct_align_complex_##name, x), \ -+ FFI_TYPE_COMPLEX, \ -+ (ffi_type **)ffi_elements_complex_##name \ -+} ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+/* Size and alignment are fake here. They must not be 0. */ -+const ffi_type ffi_type_void = { -+ 1, 1, FFI_TYPE_VOID, NULL -+}; ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); -+FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); -+FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); -+FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); -+FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); -+FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); -+FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); -+FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); -+FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); ++#endif + -+#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ -+#define FFI_LDBL_CONST const ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 +#else -+#define FFI_LDBL_CONST ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+#ifdef __alpha__ -+/* Even if we're not configured to default to 128-bit long double, -+ maintain binary compatibility, as -mlong-double-128 can be used -+ at any time. */ -+/* Validate the hard-coded number below. */ -+# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -+#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} +#endif + -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_COMPLEX_TYPEDEF(float, float, const); -+FFI_COMPLEX_TYPEDEF(double, double, const); -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); +#endif ++ ++ +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi.c modified/Modules/_ctypes/libffi_ios/x86/ffi.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi.c 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,729 @@ +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h 2015-04-26 08:38:36.000000000 +0800 +@@ -0,0 +1,55 @@ +/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. -+ Copyright (c) 2002 Ranjit Mathew -+ Copyright (c) 2002 Bo Thorsen -+ Copyright (c) 2002 Roger Sayle -+ Copyright (C) 2008, 2010 Free Software Foundation, Inc. ++ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. + -+ x86 Foreign Function Interface ++ Conditionally assemble cfi directives. Only necessary for building libffi. ++ ----------------------------------------------------------------------- */ + -+ 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: ++#ifndef FFI_CFI_H ++#define FFI_CFI_H + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++#ifdef HAVE_AS_CFI_PSEUDO_OP + -+ 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. ++# define cfi_startproc .cfi_startproc ++# define cfi_endproc .cfi_endproc ++# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off ++# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg ++# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off ++# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off ++# define cfi_offset(reg, off) .cfi_offset reg, off ++# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off ++# define cfi_register(r1, r2) .cfi_register r1, r2 ++# define cfi_return_column(reg) .cfi_return_column reg ++# define cfi_restore(reg) .cfi_restore reg ++# define cfi_same_value(reg) .cfi_same_value reg ++# define cfi_undefined(reg) .cfi_undefined reg ++# define cfi_remember_state .cfi_remember_state ++# define cfi_restore_state .cfi_restore_state ++# define cfi_window_save .cfi_window_save ++# define cfi_personality(enc, exp) .cfi_personality enc, exp ++# define cfi_lsda(enc, exp) .cfi_lsda enc, exp ++# define cfi_escape(...) .cfi_escape __VA_ARGS__ ++ ++#else ++ ++# define cfi_startproc ++# define cfi_endproc ++# define cfi_def_cfa(reg, off) ++# define cfi_def_cfa_register(reg) ++# define cfi_def_cfa_offset(off) ++# define cfi_adjust_cfa_offset(off) ++# define cfi_offset(reg, off) ++# define cfi_rel_offset(reg, off) ++# define cfi_register(r1, r2) ++# define cfi_return_column(reg) ++# define cfi_restore(reg) ++# define cfi_same_value(reg) ++# define cfi_undefined(reg) ++# define cfi_remember_state ++# define cfi_restore_state ++# define cfi_window_save ++# define cfi_personality(enc, exp) ++# define cfi_lsda(enc, exp) ++# define cfi_escape(...) ++ ++#endif /* HAVE_AS_CFI_PSEUDO_OP */ ++#endif /* FFI_CFI_H */ +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h 2015-04-26 08:38:36.000000000 +0800 +@@ -0,0 +1,132 @@ ++/* ----------------------------------------------------------------------- ++ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green ++ Copyright (C) 2007 Free Software Foundation, Inc ++ Copyright (c) 1996 Red Hat, Inc. ++ ++ Common internal definitions and macros. Only necessary for building ++ libffi. + ----------------------------------------------------------------------- */ + -+#ifndef __x86_64__ -+#include -+#include -+#include -+#include "internal.h" ++#ifndef FFI_COMMON_H ++#define FFI_COMMON_H + -+/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; -+ all further uses in this file will refer to the 80-bit type. */ -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+# if FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#include ++ ++/* Do not move this. Some versions of AIX are very picky about where ++ this is positioned. */ ++#ifdef __GNUC__ ++# if HAVE_ALLOCA_H ++# include ++# else ++ /* mingw64 defines this already in malloc.h. */ ++# ifndef alloca ++# define alloca __builtin_alloca ++# endif ++# endif ++# define MAYBE_UNUSED __attribute__((__unused__)) ++#else ++# define MAYBE_UNUSED ++# if HAVE_ALLOCA_H ++# include ++# else ++# ifdef _AIX ++# pragma alloca ++# else ++# ifndef alloca /* predefined by HP cc +Olibcalls */ ++# ifdef _MSC_VER ++# define alloca _alloca ++# else ++char *alloca (); ++# endif ++# endif ++# endif +# endif -+#else -+# undef FFI_TYPE_LONGDOUBLE -+# define FFI_TYPE_LONGDOUBLE 4 +#endif + -+#if defined(__GNUC__) && !defined(__declspec) -+# define __declspec(x) __attribute__((x)) ++/* Check for the existence of memcpy. */ ++#if STDC_HEADERS ++# include ++#else ++# ifndef HAVE_MEMCPY ++# define memcpy(d, s, n) bcopy ((s), (d), (n)) ++# endif +#endif + -+/* Perform machine dependent cif processing. */ -+ffi_status FFI_HIDDEN -+ffi_prep_cif_machdep(ffi_cif *cif) -+{ -+ size_t bytes = 0; -+ int i, n, flags, cabi = cif->abi; -+ -+ switch (cabi) -+ { -+ case FFI_SYSV: -+ case FFI_STDCALL: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_MS_CDECL: -+ case FFI_PASCAL: -+ case FFI_REGISTER: -+ break; -+ default: -+ return FFI_BAD_ABI; -+ } -+ -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = X86_RET_VOID; -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = X86_RET_FLOAT; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = X86_RET_DOUBLE; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ flags = X86_RET_LDOUBLE; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = X86_RET_UINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = X86_RET_UINT16; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = X86_RET_SINT8; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = X86_RET_SINT16; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ flags = X86_RET_INT32; -+ break; -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = X86_RET_INT64; -+ break; -+ case FFI_TYPE_STRUCT: -+#ifndef X86 -+ /* ??? This should be a different ABI rather than an ifdef. */ -+ if (cif->rtype->size == 1) -+ flags = X86_RET_STRUCT_1B; -+ else if (cif->rtype->size == 2) -+ flags = X86_RET_STRUCT_2B; -+ else if (cif->rtype->size == 4) -+ flags = X86_RET_INT32; -+ else if (cif->rtype->size == 8) -+ flags = X86_RET_INT64; -+ else ++#if defined(FFI_DEBUG) ++#include +#endif -+ { -+ do_struct: -+ switch (cabi) -+ { -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_STDCALL: -+ case FFI_MS_CDECL: -+ flags = X86_RET_STRUCTARG; -+ break; -+ default: -+ flags = X86_RET_STRUCTPOP; -+ break; -+ } -+ /* Allocate space for return value pointer. */ -+ bytes += ALIGN (sizeof(void*), FFI_SIZEOF_ARG); -+ } -+ break; -+ case FFI_TYPE_COMPLEX: -+ switch (cif->rtype->elements[0]->type) -+ { -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ goto do_struct; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ flags = X86_RET_INT64; -+ break; -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT16: -+ flags = X86_RET_INT32; -+ break; -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT8: -+ flags = X86_RET_STRUCT_2B; -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ cif->flags = flags; -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *t = cif->arg_types[i]; + -+ bytes = ALIGN (bytes, t->alignment); -+ bytes += ALIGN (t->size, FFI_SIZEOF_ARG); -+ } -+ cif->bytes = ALIGN (bytes, 16); -+ -+ return FFI_OK; -+} -+ -+static ffi_arg -+extend_basic_type(void *arg, int type) -+{ -+ switch (type) -+ { -+ case FFI_TYPE_SINT8: -+ return *(SINT8 *)arg; -+ case FFI_TYPE_UINT8: -+ return *(UINT8 *)arg; -+ case FFI_TYPE_SINT16: -+ return *(SINT16 *)arg; -+ case FFI_TYPE_UINT16: -+ return *(UINT16 *)arg; ++#ifdef FFI_DEBUG ++void ffi_assert(char *expr, char *file, int line); ++void ffi_stop_here(void); ++void ffi_type_test(ffi_type *a, char *file, int line); + -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ case FFI_TYPE_FLOAT: -+ return *(UINT32 *)arg; ++#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) ++#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) ++#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) ++#else ++#define FFI_ASSERT(x) ++#define FFI_ASSERT_AT(x, f, l) ++#define FFI_ASSERT_VALID_TYPE(x) ++#endif + -+ default: -+ abort(); -+ } -+} ++#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) ++#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) + -+struct call_frame -+{ -+ void *ebp; /* 0 */ -+ void *retaddr; /* 4 */ -+ void (*fn)(void); /* 8 */ -+ int flags; /* 12 */ -+ void *rvalue; /* 16 */ -+ unsigned regs[3]; /* 20-28 */ -+}; ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif); ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, unsigned int ntotalargs); + -+struct abi_params ++/* Extended cif, used in callback from assembly routine */ ++typedef struct +{ -+ int dir; /* parameter growth direction */ -+ int static_chain; /* the static chain register used by gcc */ -+ int nregs; /* number of register parameters */ -+ int regs[3]; -+}; -+ -+static const struct abi_params abi_params[FFI_LAST_ABI] = { -+ [FFI_SYSV] = { 1, R_ECX, 0 }, -+ [FFI_THISCALL] = { 1, R_EAX, 1, { R_ECX } }, -+ [FFI_FASTCALL] = { 1, R_EAX, 2, { R_ECX, R_EDX } }, -+ [FFI_STDCALL] = { 1, R_ECX, 0 }, -+ [FFI_PASCAL] = { -1, R_ECX, 0 }, -+ /* ??? No defined static chain; gcc does not support REGISTER. */ -+ [FFI_REGISTER] = { -1, R_ECX, 3, { R_EAX, R_EDX, R_ECX } }, -+ [FFI_MS_CDECL] = { 1, R_ECX, 0 } -+}; ++ ffi_cif *cif; ++ void *rvalue; ++ void **avalue; ++} extended_cif; + -+extern void ffi_call_i386(struct call_frame *, char *) -+#if HAVE_FASTCALL -+ __declspec(fastcall) ++/* Terse sized type definitions. */ ++#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) ++typedef unsigned char UINT8; ++typedef signed char SINT8; ++typedef unsigned short UINT16; ++typedef signed short SINT16; ++typedef unsigned int UINT32; ++typedef signed int SINT32; ++# ifdef _MSC_VER ++typedef unsigned __int64 UINT64; ++typedef signed __int64 SINT64; ++# else ++# include ++typedef uint64_t UINT64; ++typedef int64_t SINT64; ++# endif ++#else ++typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); ++typedef signed int SINT8 __attribute__((__mode__(__QI__))); ++typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); ++typedef signed int SINT16 __attribute__((__mode__(__HI__))); ++typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); ++typedef signed int SINT32 __attribute__((__mode__(__SI__))); ++typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); ++typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif -+ FFI_HIDDEN; + -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ size_t rsize, bytes; -+ struct call_frame *frame; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int flags, cabi, i, n, dir, narg_reg; -+ const struct abi_params *pabi; ++typedef float FLOAT32; + -+ flags = cif->flags; -+ cabi = cif->abi; -+ pabi = &abi_params[cabi]; -+ dir = pabi->dir; ++#ifndef __GNUC__ ++#define __builtin_expect(x, expected_value) (x) ++#endif ++#define LIKELY(x) __builtin_expect(!!(x),1) ++#define UNLIKELY(x) __builtin_expect((x)!=0,0) + -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ switch (flags) -+ { -+ case X86_RET_FLOAT: -+ case X86_RET_DOUBLE: -+ case X86_RET_LDOUBLE: -+ case X86_RET_STRUCTPOP: -+ case X86_RET_STRUCTARG: -+ /* The float cases need to pop the 387 stack. -+ The struct cases need to pass a valid pointer to the callee. */ -+ rsize = cif->rtype->size; -+ break; -+ default: -+ /* We can pretend that the callee returns nothing. */ -+ flags = X86_RET_VOID; -+ break; -+ } -+ } ++#ifdef __cplusplus ++} ++#endif + -+ bytes = cif->bytes; -+ stack = alloca(bytes + sizeof(*frame) + rsize); -+ argp = (dir < 0 ? stack + bytes : stack); -+ frame = (struct call_frame *)(stack + bytes); -+ if (rsize) -+ rvalue = frame + 1; ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h 2015-04-26 08:38:36.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+ frame->fn = fn; -+ frame->flags = flags; -+ frame->rvalue = rvalue; -+ frame->regs[pabi->static_chain] = (unsigned)closure; ++#include + -+ narg_reg = 0; -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ /* The pointer is passed as the first argument. */ -+ if (pabi->nregs > 0) -+ { -+ frame->regs[pabi->regs[0]] = (unsigned)rvalue; -+ narg_reg = 1; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ *(void **)argp = rvalue; -+ argp += sizeof(void *); -+ break; -+ } + -+ arg_types = cif->arg_types; -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ void *valp = avalue[i]; -+ size_t z = ty->size; -+ int t = ty->type; ++#endif ++#ifdef __i386__ + -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) -+ { -+ ffi_arg val = extend_basic_type (valp, t); ++#include + -+ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) -+ frame->regs[pabi->regs[narg_reg++]] = val; -+ else if (dir < 0) -+ { -+ argp -= 4; -+ *(ffi_arg *)argp = val; -+ } -+ else -+ { -+ *(ffi_arg *)argp = val; -+ argp += 4; -+ } -+ } -+ else -+ { -+ size_t za = ALIGN (z, FFI_SIZEOF_ARG); -+ size_t align = FFI_SIZEOF_ARG; -+ -+ /* Alignment rules for arguments are quite complex. Vectors and -+ structures with 16 byte alignment get it. Note that long double -+ on Darwin does have 16 byte alignment, and does not get this -+ alignment if passed directly; a structure with a long double -+ inside, however, would get 16 byte alignment. Since libffi does -+ not support vectors, we need non concern ourselves with other -+ cases. */ -+ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) -+ align = 16; -+ -+ if (dir < 0) -+ { -+ /* ??? These reverse argument ABIs are probably too old -+ to have cared about alignment. Someone should check. */ -+ argp -= za; -+ memcpy (argp, valp, z); -+ } -+ else -+ { -+ argp = (char *)ALIGN (argp, align); -+ memcpy (argp, valp, z); -+ argp += za; -+ } -+ } -+ } -+ FFI_ASSERT (dir > 0 || argp == stack); + -+ ffi_call_i386 (frame, stack); -+} ++#endif ++#ifdef __arm__ + -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} ++#include + -+void -+ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} + -+/** private members **/ ++#endif ++#ifdef __x86_64__ + -+void FFI_HIDDEN ffi_closure_i386(void); -+void FFI_HIDDEN ffi_closure_STDCALL(void); -+void FFI_HIDDEN ffi_closure_REGISTER(void); ++#include + -+struct closure_frame -+{ -+ unsigned rettemp[4]; /* 0 */ -+ unsigned regs[3]; /* 16-24 */ -+ ffi_cif *cif; /* 28 */ -+ void (*fun)(ffi_cif*,void*,void**,void*); /* 32 */ -+ void *user_data; /* 36 */ -+}; + -+int FFI_HIDDEN -+#if HAVE_FASTCALL -+__declspec(fastcall) +#endif -+ffi_closure_inner (struct closure_frame *frame, char *stack) -+{ -+ ffi_cif *cif = frame->cif; -+ int cabi, i, n, flags, dir, narg_reg; -+ const struct abi_params *pabi; -+ ffi_type **arg_types; -+ char *argp; -+ void *rvalue; -+ void **avalue; +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h 2015-04-26 08:38:46.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __arm64__ + -+ cabi = cif->abi; -+ flags = cif->flags; -+ narg_reg = 0; -+ rvalue = frame->rettemp; -+ pabi = &abi_params[cabi]; -+ dir = pabi->dir; -+ argp = (dir < 0 ? stack + cif->bytes : stack); ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ if (pabi->nregs > 0) -+ { -+ rvalue = (void *)frame->regs[pabi->regs[0]]; -+ narg_reg = 1; -+ frame->rettemp[0] = (unsigned)rvalue; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ rvalue = *(void **)argp; -+ argp += sizeof(void *); -+ frame->rettemp[0] = (unsigned)rvalue; -+ break; -+ } ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+ n = cif->nargs; -+ avalue = alloca(sizeof(void *) * n); ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+ arg_types = cif->arg_types; -+ for (i = 0; i < n; ++i) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; -+ int t = ty->type; -+ void *valp; ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) -+ { -+ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) -+ valp = &frame->regs[pabi->regs[narg_reg++]]; -+ else if (dir < 0) -+ { -+ argp -= 4; -+ valp = argp; -+ } -+ else -+ { -+ valp = argp; -+ argp += 4; -+ } -+ } -+ else -+ { -+ size_t za = ALIGN (z, FFI_SIZEOF_ARG); -+ size_t align = FFI_SIZEOF_ARG; ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+ /* See the comment in ffi_call_int. */ -+ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) -+ align = 16; ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+ if (dir < 0) -+ { -+ /* ??? These reverse argument ABIs are probably too old -+ to have cared about alignment. Someone should check. */ -+ argp -= za; -+ valp = argp; -+ } -+ else -+ { -+ argp = (char *)ALIGN (argp, align); -+ valp = argp; -+ argp += za; -+ } -+ } ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 + -+ avalue[i] = valp; -+ } ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ frame->fun (cif, rvalue, avalue, frame->user_data); ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ + -+ if (cabi == FFI_STDCALL) -+ return flags + (cif->bytes << X86_RET_POP_SHIFT); -+ else -+ return flags; -+} ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ char *tramp = closure->tramp; -+ void (*dest)(void); -+ int op = 0xb8; /* movl imm, %eax */ ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+ switch (cif->abi) -+ { -+ case FFI_SYSV: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_MS_CDECL: -+ dest = ffi_closure_i386; -+ break; -+ case FFI_STDCALL: -+ case FFI_PASCAL: -+ dest = ffi_closure_STDCALL; -+ break; -+ case FFI_REGISTER: -+ dest = ffi_closure_REGISTER; -+ op = 0x68; /* pushl imm */ -+ default: -+ return FFI_BAD_ABI; -+ } ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+ /* movl or pushl immediate. */ -+ tramp[0] = op; -+ *(void **)(tramp + 1) = codeloc; ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+ /* jmp dest */ -+ tramp[5] = 0xe9; -+ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+ return FFI_OK; -+} ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ + -+void FFI_HIDDEN ffi_go_closure_EAX(void); -+void FFI_HIDDEN ffi_go_closure_ECX(void); -+void FFI_HIDDEN ffi_go_closure_STDCALL(void); ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+ffi_status -+ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*)) -+{ -+ void (*dest)(void); ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+ switch (cif->abi) -+ { -+ case FFI_SYSV: -+ case FFI_MS_CDECL: -+ dest = ffi_go_closure_ECX; -+ break; -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ dest = ffi_go_closure_EAX; -+ break; -+ case FFI_STDCALL: -+ case FFI_PASCAL: -+ dest = ffi_go_closure_STDCALL; -+ break; -+ case FFI_REGISTER: -+ default: -+ return FFI_BAD_ABI; -+ } ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+ closure->tramp = dest; -+ closure->cif = cif; -+ closure->fun = fun; ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+ return FFI_OK; -+} ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+/* ------- Native raw API support -------------------------------- */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+#if !FFI_NO_RAW_API ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ + -+void FFI_HIDDEN ffi_closure_raw_SYSV(void); -+void FFI_HIDDEN ffi_closure_raw_THISCALL(void); ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure *closure, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ char *tramp = closure->tramp; -+ void (*dest)(void); -+ int i; ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+ /* We currently don't support certain kinds of arguments for raw -+ closures. This should be implemented by a separate assembly -+ language routine, since it would require argument processing, -+ something we don't do now for performance. */ -+ for (i = cif->nargs-1; i >= 0; i--) -+ switch (cif->arg_types[i]->type) -+ { -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_LONGDOUBLE: -+ return FFI_BAD_TYPEDEF; -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+ switch (cif->abi) -+ { -+ case FFI_THISCALL: -+ dest = ffi_closure_raw_THISCALL; -+ break; -+ case FFI_SYSV: -+ dest = ffi_closure_raw_SYSV; -+ break; -+ default: -+ return FFI_BAD_ABI; -+ } ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+ /* movl imm, %eax. */ -+ tramp[0] = 0xb8; -+ *(void **)(tramp + 1) = codeloc; ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+ /* jmp dest */ -+ tramp[5] = 0xe9; -+ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+ return FFI_OK; -+} ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+void -+ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *avalue) -+{ -+ size_t rsize, bytes; -+ struct call_frame *frame; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int flags, cabi, i, n, narg_reg; -+ const struct abi_params *pabi; ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+ flags = cif->flags; -+ cabi = cif->abi; -+ pabi = &abi_params[cabi]; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ switch (flags) -+ { -+ case X86_RET_FLOAT: -+ case X86_RET_DOUBLE: -+ case X86_RET_LDOUBLE: -+ case X86_RET_STRUCTPOP: -+ case X86_RET_STRUCTARG: -+ /* The float cases need to pop the 387 stack. -+ The struct cases need to pass a valid pointer to the callee. */ -+ rsize = cif->rtype->size; -+ break; -+ default: -+ /* We can pretend that the callee returns nothing. */ -+ flags = X86_RET_VOID; -+ break; -+ } -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+ bytes = cif->bytes; -+ argp = stack = alloca(bytes + sizeof(*frame) + rsize); -+ frame = (struct call_frame *)(stack + bytes); -+ if (rsize) -+ rvalue = frame + 1; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+ frame->fn = fn; -+ frame->flags = flags; -+ frame->rvalue = rvalue; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+ narg_reg = 0; -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ /* The pointer is passed as the first argument. */ -+ if (pabi->nregs > 0) -+ { -+ frame->regs[pabi->regs[0]] = (unsigned)rvalue; -+ narg_reg = 1; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ *(void **)argp = rvalue; -+ argp += sizeof(void *); -+ bytes -= sizeof(void *); -+ break; -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+ arg_types = cif->arg_types; -+ for (i = 0, n = cif->nargs; narg_reg < pabi->nregs && i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; -+ int t = ty->type; ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT && t != FFI_TYPE_FLOAT) -+ { -+ ffi_arg val = extend_basic_type (avalue, t); -+ frame->regs[pabi->regs[narg_reg++]] = val; -+ z = FFI_SIZEOF_ARG; -+ } -+ else -+ { -+ memcpy (argp, avalue, z); -+ z = ALIGN (z, FFI_SIZEOF_ARG); -+ argp += z; -+ } -+ avalue += z; -+ bytes -= z; -+ } -+ if (i < n) -+ memcpy (argp, avalue, bytes); ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+ ffi_call_i386 (frame, stack); -+} -+#endif /* !FFI_NO_RAW_API */ -+#endif /* !__x86_64__ */ -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi64.c 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,824 @@ -+/* ----------------------------------------------------------------------- -+ ffi64.c - Copyright (c) 2013 The Written Word, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2008, 2010 Red Hat, Inc. -+ Copyright (c) 2002, 2007 Bo Thorsen ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+ x86-64 Foreign Function Interface ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+ 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: ++/* Name of package */ ++#define PACKAGE "libffi" + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+ 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. -+ ----------------------------------------------------------------------- */ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+#include -+#include ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" + -+#include -+#include -+#include -+#include "internal64.h" ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+#ifdef __x86_64__ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+#define MAX_GPR_REGS 6 -+#define MAX_SSE_REGS 8 ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" + -+#if defined(__INTEL_COMPILER) -+#include "xmmintrin.h" -+#define UINT128 __m128 -+#else -+#if defined(__SUNPRO_C) -+#include -+#define UINT128 __m128i -+#else -+#define UINT128 __int128_t -+#endif -+#endif ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+union big_int_union -+{ -+ UINT32 i32; -+ UINT64 i64; -+ UINT128 i128; -+}; ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 + -+struct register_args -+{ -+ /* Registers for argument passing. */ -+ UINT64 gpr[MAX_GPR_REGS]; -+ union big_int_union sse[MAX_SSE_REGS]; -+ UINT64 rax; /* ssecount */ -+ UINT64 r10; /* static chain */ -+}; ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 + -+extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void)) FFI_HIDDEN; ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+/* All reference to register classes here is identical to the code in -+ gcc/config/i386/i386.c. Do *not* change one without the other. */ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+/* Register class used for passing given 64bit part of the argument. -+ These represent classes as documented by the PS ABI, with the -+ exception of SSESF, SSEDF classes, that are basically SSE class, -+ just gcc will use SF or DFmode move instead of DImode to avoid -+ reformatting penalties. ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves -+ whenever possible (upper half does contain padding). */ -+enum x86_64_reg_class -+ { -+ X86_64_NO_CLASS, -+ X86_64_INTEGER_CLASS, -+ X86_64_INTEGERSI_CLASS, -+ X86_64_SSE_CLASS, -+ X86_64_SSESF_CLASS, -+ X86_64_SSEDF_CLASS, -+ X86_64_SSEUP_CLASS, -+ X86_64_X87_CLASS, -+ X86_64_X87UP_CLASS, -+ X86_64_COMPLEX_X87_CLASS, -+ X86_64_MEMORY_CLASS -+ }; ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+#define MAX_CLASSES 4 ++/* Version number of package */ ++#define VERSION "3.99999" + -+#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+/* x86-64 register passing implementation. See x86-64 ABI for details. Goal -+ of this code is to classify each 8bytes of incoming argument by the register -+ class and assign registers accordingly. */ ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+/* Return the union class of CLASS1 and CLASS2. -+ See the x86-64 PS ABI for details. */ + -+static enum x86_64_reg_class -+merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) -+{ -+ /* Rule #1: If both classes are equal, this is the resulting class. */ -+ if (class1 == class2) -+ return class1; ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is -+ the other class. */ -+ if (class1 == X86_64_NO_CLASS) -+ return class2; -+ if (class2 == X86_64_NO_CLASS) -+ return class1; + -+ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ -+ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) -+ return X86_64_MEMORY_CLASS; + -+ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ -+ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) -+ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) -+ return X86_64_INTEGERSI_CLASS; -+ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS -+ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) -+ return X86_64_INTEGER_CLASS; ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h 2015-04-26 08:38:36.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, -+ MEMORY is used. */ -+ if (class1 == X86_64_X87_CLASS -+ || class1 == X86_64_X87UP_CLASS -+ || class1 == X86_64_COMPLEX_X87_CLASS -+ || class2 == X86_64_X87_CLASS -+ || class2 == X86_64_X87UP_CLASS -+ || class2 == X86_64_COMPLEX_X87_CLASS) -+ return X86_64_MEMORY_CLASS; ++#include + -+ /* Rule #6: Otherwise class SSE is used. */ -+ return X86_64_SSE_CLASS; -+} + -+/* Classify the argument of type TYPE and mode MODE. -+ CLASSES will be filled by the register class used to pass each word -+ of the operand. The number of words is returned. In case the parameter -+ should be passed in memory, 0 is returned. As a special case for zero -+ sized containers, classes[0] will be NO_CLASS and 1 is returned. ++#endif ++#ifdef __i386__ ++ ++#include + -+ See the x86-64 PS ABI for details. -+*/ -+static size_t -+classify_argument (ffi_type *type, enum x86_64_reg_class classes[], -+ size_t byte_offset) -+{ -+ switch (type->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ do_integer: -+ { -+ size_t size = byte_offset + type->size; + -+ if (size <= 4) -+ { -+ classes[0] = X86_64_INTEGERSI_CLASS; -+ return 1; -+ } -+ else if (size <= 8) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ return 1; -+ } -+ else if (size <= 12) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ classes[1] = X86_64_INTEGERSI_CLASS; -+ return 2; -+ } -+ else if (size <= 16) -+ { -+ classes[0] = classes[1] = X86_64_INTEGER_CLASS; -+ return 2; -+ } -+ else -+ FFI_ASSERT (0); -+ } -+ case FFI_TYPE_FLOAT: -+ if (!(byte_offset % 8)) -+ classes[0] = X86_64_SSESF_CLASS; -+ else -+ classes[0] = X86_64_SSE_CLASS; -+ return 1; -+ case FFI_TYPE_DOUBLE: -+ classes[0] = X86_64_SSEDF_CLASS; -+ return 1; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ classes[0] = X86_64_X87_CLASS; -+ classes[1] = X86_64_X87UP_CLASS; -+ return 2; +#endif -+ case FFI_TYPE_STRUCT: -+ { -+ const size_t UNITS_PER_WORD = 8; -+ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; -+ ffi_type **ptr; -+ int i; -+ enum x86_64_reg_class subclasses[MAX_CLASSES]; ++#ifdef __arm__ + -+ /* If the struct is larger than 32 bytes, pass it on the stack. */ -+ if (type->size > 32) -+ return 0; ++#include + -+ for (i = 0; i < words; i++) -+ classes[i] = X86_64_NO_CLASS; + -+ /* Zero sized arrays or structures are NO_CLASS. We return 0 to -+ signalize memory class, so handle it as special case. */ -+ if (!words) -+ { -+ case FFI_TYPE_VOID: -+ classes[0] = X86_64_NO_CLASS; -+ return 1; -+ } ++#endif ++#ifdef __x86_64__ + -+ /* Merge the fields of structure. */ -+ for (ptr = type->elements; *ptr != NULL; ptr++) -+ { -+ size_t num; ++#include + -+ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); + -+ num = classify_argument (*ptr, subclasses, byte_offset % 8); -+ if (num == 0) -+ return 0; -+ for (i = 0; i < num; i++) -+ { -+ size_t pos = byte_offset / 8; -+ classes[i + pos] = -+ merge_classes (subclasses[i], classes[i + pos]); -+ } ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h +--- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h 2015-04-26 08:38:46.000000000 +0800 +@@ -0,0 +1,78 @@ ++#ifdef __arm64__ ++ ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + -+ byte_offset += (*ptr)->size; -+ } ++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: + -+ if (words > 2) -+ { -+ /* When size > 16 bytes, if the first one isn't -+ X86_64_SSE_CLASS or any other ones aren't -+ X86_64_SSEUP_CLASS, everything should be passed in -+ memory. */ -+ if (classes[0] != X86_64_SSE_CLASS) -+ return 0; ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+ for (i = 1; i < words; i++) -+ if (classes[i] != X86_64_SSEUP_CLASS) -+ return 0; -+ } ++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. */ + -+ /* Final merger cleanup. */ -+ for (i = 0; i < words; i++) -+ { -+ /* If one class is MEMORY, everything should be passed in -+ memory. */ -+ if (classes[i] == X86_64_MEMORY_CLASS) -+ return 0; ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+ /* The X86_64_SSEUP_CLASS should be always preceded by -+ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ -+ if (classes[i] == X86_64_SSEUP_CLASS -+ && classes[i - 1] != X86_64_SSE_CLASS -+ && classes[i - 1] != X86_64_SSEUP_CLASS) -+ { -+ /* The first one should never be X86_64_SSEUP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ classes[i] = X86_64_SSE_CLASS; -+ } ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif + -+ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, -+ everything should be passed in memory. */ -+ if (classes[i] == X86_64_X87UP_CLASS -+ && (classes[i - 1] != X86_64_X87_CLASS)) -+ { -+ /* The first one should never be X86_64_X87UP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ return 0; -+ } -+ } -+ return words; -+ } -+ case FFI_TYPE_COMPLEX: -+ { -+ ffi_type *inner = type->elements[0]; -+ switch (inner->type) -+ { -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ goto do_integer; -+ -+ case FFI_TYPE_FLOAT: -+ classes[0] = X86_64_SSE_CLASS; -+ if (byte_offset % 8) -+ { -+ classes[1] = X86_64_SSESF_CLASS; -+ return 2; -+ } -+ return 1; -+ case FFI_TYPE_DOUBLE: -+ classes[0] = classes[1] = X86_64_SSEDF_CLASS; -+ return 2; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ classes[0] = X86_64_COMPLEX_X87_CLASS; -+ return 1; ++#ifndef LIBFFI_ASM ++#ifdef __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++typedef unsigned long long ffi_arg; ++typedef signed long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; +#endif -+ } -+ } -+ } -+ abort(); -+} + -+/* Examine the argument and return set number of register required in each -+ class. Return zero iff parameter should be passed in memory, otherwise -+ the number of registers. */ ++typedef enum ffi_abi ++ { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++ } ffi_abi; ++#endif + -+static size_t -+examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], -+ _Bool in_return, int *pngpr, int *pnsse) -+{ -+ size_t n; -+ int i, ngpr, nsse; ++/* ---- Definitions for closures ----------------------------------------- */ + -+ n = classify_argument (type, classes, 0); -+ if (n == 0) -+ return 0; ++#define FFI_CLOSURES 1 ++#if defined (__APPLE__) ++#define FFI_TRAMPOLINE_SIZE 20 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 ++#else ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE ++#endif ++#define FFI_NATIVE_RAW_API 0 + -+ ngpr = nsse = 0; -+ for (i = 0; i < n; ++i) -+ switch (classes[i]) -+ { -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ ngpr++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSESF_CLASS: -+ case X86_64_SSEDF_CLASS: -+ nsse++; -+ break; -+ case X86_64_NO_CLASS: -+ case X86_64_SSEUP_CLASS: -+ break; -+ case X86_64_X87_CLASS: -+ case X86_64_X87UP_CLASS: -+ case X86_64_COMPLEX_X87_CLASS: -+ return in_return != 0; -+ default: -+ abort (); -+ } ++/* ---- Internal ---- */ + -+ *pngpr = ngpr; -+ *pnsse = nsse; ++#if defined (__APPLE__) ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs ++#else ++/* iOS reserves x18 for the system. Disable Go closures until ++ a new static chain is chosen. */ ++#define FFI_GO_CLOSURES 1 ++#endif + -+ return n; -+} ++#define FFI_TARGET_HAS_COMPLEX_TYPE + -+/* Perform machine dependent cif processing. */ ++#endif + -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int gprcount, ssecount, i, avn, ngpr, nsse, flags; -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t bytes, n, rtype_size; -+ ffi_type *rtype; + -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c modified/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c +--- orig/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c 2015-04-26 08:39:05.000000000 +0800 +@@ -0,0 +1,374 @@ ++/* ----------------------------------------------------------------------- ++ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. + -+ gprcount = ssecount = 0; ++ Cloned from raw_api.c + -+ rtype = cif->rtype; -+ rtype_size = rtype->size; -+ switch (rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = UNIX64_RET_VOID; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = UNIX64_RET_UINT8; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = UNIX64_RET_SINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = UNIX64_RET_UINT16; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = UNIX64_RET_SINT16; -+ break; -+ case FFI_TYPE_UINT32: -+ flags = UNIX64_RET_UINT32; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ flags = UNIX64_RET_SINT32; -+ break; -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ flags = UNIX64_RET_INT64; -+ break; -+ case FFI_TYPE_POINTER: -+ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = UNIX64_RET_XMM32; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = UNIX64_RET_XMM64; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ flags = UNIX64_RET_X87; -+ break; -+ case FFI_TYPE_STRUCT: -+ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); -+ if (n == 0) -+ { -+ /* The return value is passed in memory. A pointer to that -+ memory is the first argument. Allocate a register for it. */ -+ gprcount++; -+ /* We don't have to do anything in asm for the return. */ -+ flags = UNIX64_RET_VOID | UNIX64_FLAG_RET_IN_MEM; -+ } -+ else -+ { -+ _Bool sse0 = SSE_CLASS_P (classes[0]); ++ Raw_api.c author: Kresten Krab Thorup ++ Java_raw_api.c author: Hans-J. Boehm + -+ if (rtype_size == 4 && sse0) -+ flags = UNIX64_RET_XMM32; -+ else if (rtype_size == 8) -+ flags = sse0 ? UNIX64_RET_XMM64 : UNIX64_RET_INT64; -+ else -+ { -+ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); -+ if (sse0 && sse1) -+ flags = UNIX64_RET_ST_XMM0_XMM1; -+ else if (sse0) -+ flags = UNIX64_RET_ST_XMM0_RAX; -+ else if (sse1) -+ flags = UNIX64_RET_ST_RAX_XMM0; -+ else -+ flags = UNIX64_RET_ST_RAX_RDX; -+ flags |= rtype_size << UNIX64_SIZE_SHIFT; -+ } -+ } -+ break; -+ case FFI_TYPE_COMPLEX: -+ switch (rtype->elements[0]->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ flags = UNIX64_RET_ST_RAX_RDX | (rtype_size << UNIX64_SIZE_SHIFT); -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = UNIX64_RET_XMM64; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = UNIX64_RET_ST_XMM0_XMM1 | (16 << UNIX64_SIZE_SHIFT); -+ break; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ flags = UNIX64_RET_X87_2; -+ break; -+#endif -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } ++ $Id $ + -+ /* Go over all arguments and determine the way they should be passed. -+ If it's in a register and there is space for it, let that be so. If -+ not, add it's size to the stack byte count. */ -+ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) -+ { -+ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = cif->arg_types[i]->alignment; ++ 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: + -+ if (align < 8) -+ align = 8; ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ bytes = ALIGN (bytes, align); -+ bytes += cif->arg_types[i]->size; -+ } -+ else -+ { -+ gprcount += ngpr; -+ ssecount += nsse; -+ } -+ } -+ if (ssecount) -+ flags |= UNIX64_FLAG_XMM_ARGS; ++ 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. ++ ----------------------------------------------------------------------- */ + -+ cif->flags = flags; -+ cif->bytes = ALIGN (bytes, 8); ++/* This defines a Java- and 64-bit specific variant of the raw API. */ ++/* It assumes that "raw" argument blocks look like Java stacks on a */ ++/* 64-bit machine. Arguments that can be stored in a single stack */ ++/* stack slots (longs, doubles) occupy 128 bits, but only the first */ ++/* 64 bits are actually used. */ + -+ return FFI_OK; -+} ++#include ++#include ++#include + -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) ++#if !defined(NO_JAVA_RAW_API) ++ ++size_t ++ffi_java_raw_size (ffi_cif *cif) +{ -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int gprcount, ssecount, ngpr, nsse, i, avn, flags; -+ struct register_args *reg_args; ++ size_t result = 0; ++ int i; + -+ /* Can't call 32-bit mode from 64-bit mode. */ -+ FFI_ASSERT (cif->abi == FFI_UNIX64); ++ ffi_type **at = cif->arg_types; + -+ /* If the return value is a struct and we don't have a return value -+ address then we need to make one. Otherwise we can ignore it. */ -+ flags = cif->flags; -+ if (rvalue == NULL) ++ for (i = cif->nargs-1; i >= 0; i--, at++) + { -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ rvalue = alloca (cif->rtype->size); -+ else -+ flags = UNIX64_RET_VOID; ++ switch((*at) -> type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ result += 2 * FFI_SIZEOF_JAVA_RAW; ++ break; ++ case FFI_TYPE_STRUCT: ++ /* No structure parameters in Java. */ ++ abort(); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ result += FFI_SIZEOF_JAVA_RAW; ++ } + } + -+ /* Allocate the space for the arguments, plus 4 words of temp space. */ -+ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); -+ reg_args = (struct register_args *) stack; -+ argp = stack + sizeof (struct register_args); -+ -+ reg_args->r10 = (uintptr_t) closure; ++ return result; ++} + -+ gprcount = ssecount = 0; + -+ /* If the return value is passed in memory, add the pointer as the -+ first integer argument. */ -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ reg_args->gpr[gprcount++] = (unsigned long) rvalue; ++void ++ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+ avn = cif->nargs; -+ arg_types = cif->arg_types; ++#if WORDS_BIGENDIAN + -+ for (i = 0; i < avn; ++i) ++ for (i = 0; i < cif->nargs; i++, tp++, args++) + { -+ size_t n, size = arg_types[i]->size; -+ -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) ++ switch ((*tp)->type) + { -+ long align = arg_types[i]->alignment; ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + 3); ++ break; + -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + 2); ++ break; + -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ memcpy (argp, avalue[i], size); -+ argp += size; -+ } -+ else -+ { -+ /* The argument is passed entirely in registers. */ -+ char *a = (char *) avalue[i]; -+ int j; ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void *)raw; ++ raw += 2; ++ break; ++#endif + -+ for (j = 0; j < n; j++, a += 8, size -= 8) -+ { -+ switch (classes[j]) -+ { -+ case X86_64_NO_CLASS: -+ case X86_64_SSEUP_CLASS: -+ break; -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ /* Sign-extend integer arguments passed in general -+ purpose registers, to cope with the fact that -+ LLVM incorrectly assumes that this will be done -+ (the x86-64 PS ABI does not specify this). */ -+ switch (arg_types[i]->type) -+ { -+ case FFI_TYPE_SINT8: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); -+ break; -+ case FFI_TYPE_SINT16: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); -+ break; -+ case FFI_TYPE_SINT32: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); -+ break; -+ default: -+ reg_args->gpr[gprcount] = 0; -+ memcpy (®_args->gpr[gprcount], a, size); -+ } -+ gprcount++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSEDF_CLASS: -+ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; -+ break; -+ case X86_64_SSESF_CLASS: -+ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; -+ break; -+ default: -+ abort(); -+ } -+ } ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ *args = raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); + } + } -+ reg_args->rax = ssecount; + -+ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), -+ flags, rvalue, fn); -+} ++#else /* WORDS_BIGENDIAN */ + -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++#if !PDP ++ ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ switch((*tp)->type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void*) raw; ++ raw += 2; ++ break; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ *args = (void*) raw++; ++ } ++#else /* FFI_SIZEOF_JAVA_RAW != 8 */ ++ *args = (void*) raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ ++ } ++ ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ ++ ++#endif /* WORDS_BIGENDIAN */ +} + +void -+ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) ++ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) +{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT8*) (*args); ++#else ++ (raw++)->uint = *(UINT8*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_SINT8: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT8*) (*args); ++#else ++ (raw++)->sint = *(SINT8*) (*args); ++#endif ++ break; ++ ++ case FFI_TYPE_UINT16: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT16*) (*args); ++#else ++ (raw++)->uint = *(UINT16*) (*args); ++#endif ++ break; + -+extern void ffi_closure_unix64(void) FFI_HIDDEN; -+extern void ffi_closure_unix64_sse(void) FFI_HIDDEN; ++ case FFI_TYPE_SINT16: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT16*) (*args); ++#else ++ (raw++)->sint = *(SINT16*) (*args); ++#endif ++ break; + -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *codeloc) -+{ -+ static const unsigned char trampoline[16] = { -+ /* leaq -0x7(%rip),%r10 # 0x0 */ -+ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, -+ /* jmpq *0x3(%rip) # 0x10 */ -+ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, -+ /* nopl (%rax) */ -+ 0x0f, 0x1f, 0x00 -+ }; -+ void (*dest)(void); -+ char *tramp = closure->tramp; ++ case FFI_TYPE_UINT32: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT32*) (*args); ++#else ++ (raw++)->uint = *(UINT32*) (*args); ++#endif ++ break; + -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; ++ case FFI_TYPE_SINT32: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT32*) (*args); ++#else ++ (raw++)->sint = *(SINT32*) (*args); ++#endif ++ break; + -+ if (cif->flags & UNIX64_FLAG_XMM_ARGS) -+ dest = ffi_closure_unix64_sse; -+ else -+ dest = ffi_closure_unix64; ++ case FFI_TYPE_FLOAT: ++ (raw++)->flt = *(FLOAT32*) (*args); ++ break; + -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ *(UINT64 *)(tramp + 16) = (uintptr_t)dest; ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ raw->uint = *(UINT64*) (*args); ++ raw += 2; ++ break; ++#endif + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; + -+ return FFI_OK; ++ default: ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ FFI_ASSERT(0); /* Should have covered all cases */ ++#else ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif ++ } ++ } +} + -+int FFI_HIDDEN -+ffi_closure_unix64_inner(ffi_cif *cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *rvalue, -+ struct register_args *reg_args, -+ char *argp) ++#if !FFI_NATIVE_RAW_API ++ ++static void ++ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) +{ -+ void **avalue; -+ ffi_type **arg_types; -+ long i, avn; -+ int gprcount, ssecount, ngpr, nsse; -+ int flags; ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue <<= 32; ++ break; + -+ avn = cif->nargs; -+ flags = cif->flags; -+ avalue = alloca(avn * sizeof(void *)); -+ gprcount = ssecount = 0; ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++#if FFI_SIZEOF_JAVA_RAW == 4 ++ case FFI_TYPE_POINTER: ++#endif ++ *(SINT64 *)rvalue <<= 32; ++ break; + -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ { -+ /* On return, %rax will contain the address that was passed -+ by the caller in %rdi. */ -+ void *r = (void *)(uintptr_t)reg_args->gpr[gprcount++]; -+ *(void **)rvalue = r; -+ rvalue = r; -+ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ ++ default: ++ break; + } ++#endif ++} + -+ arg_types = cif->arg_types; -+ for (i = 0; i < avn; ++i) ++static void ++ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) ++{ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) + { -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t n; -+ -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = arg_types[i]->alignment; ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue >>= 32; ++ break; + -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++ *(SINT64 *)rvalue >>= 32; ++ break; + -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ avalue[i] = argp; -+ argp += arg_types[i]->size; -+ } -+ /* If the argument is in a single register, or two consecutive -+ integer registers, then we can use that address directly. */ -+ else if (n == 1 -+ || (n == 2 && !(SSE_CLASS_P (classes[0]) -+ || SSE_CLASS_P (classes[1])))) -+ { -+ /* The argument is in a single register. */ -+ if (SSE_CLASS_P (classes[0])) -+ { -+ avalue[i] = ®_args->sse[ssecount]; -+ ssecount += n; -+ } -+ else -+ { -+ avalue[i] = ®_args->gpr[gprcount]; -+ gprcount += n; -+ } -+ } -+ /* Otherwise, allocate space to make them consecutive. */ -+ else -+ { -+ char *a = alloca (16); -+ int j; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); + -+ avalue[i] = a; -+ for (j = 0; j < n; j++, a += 8) -+ { -+ if (SSE_CLASS_P (classes[j])) -+ memcpy (a, ®_args->sse[ssecount++], 8); -+ else -+ memcpy (a, ®_args->gpr[gprcount++], 8); -+ } -+ } ++ default: ++ break; + } ++#endif ++} + -+ /* Invoke the closure. */ -+ fun (cif, rvalue, avalue, user_data); ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ + -+ /* Tell assembly how to perform return type promotions. */ -+ return flags; ++void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ ffi_java_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_java_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++ ffi_java_rvalue_to_raw (cif, rvalue); +} + -+extern void ffi_go_closure_unix64(void) FFI_HIDDEN; -+extern void ffi_go_closure_unix64_sse(void) FFI_HIDDEN; ++#if FFI_CLOSURES /* base system provides closures */ ++ ++static void ++ffi_java_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ ++ ffi_java_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); ++ ffi_java_raw_to_rvalue (cif, rvalue); ++} + +ffi_status -+ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*)) ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc) +{ -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; ++ ffi_status status; + -+ closure->tramp = (cif->flags & UNIX64_FLAG_XMM_ARGS -+ ? ffi_go_closure_unix64_sse -+ : ffi_go_closure_unix64); -+ closure->cif = cif; -+ closure->fun = fun; ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_java_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+ return FFI_OK; ++ return status; +} + -+#endif /* __x86_64__ */ -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffitarget.h modified/Modules/_ctypes/libffi_ios/x86/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/x86/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffitarget.h 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,139 @@ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ + -+ Target configuration macros for x86 and x86-64. ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); ++} ++ ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ ++#endif /* !NO_JAVA_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c modified/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c +--- orig/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c 2015-04-26 08:39:05.000000000 +0800 +@@ -0,0 +1,242 @@ ++/* ----------------------------------------------------------------------- ++ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green ++ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -23045,472 +38271,233 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffitarget.h modified/Modules/_ctyp + 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. -+ + ----------------------------------------------------------------------- */ + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif ++#include ++#include ++#include + -+/* ---- System specific configurations ----------------------------------- */ ++/* Round up to FFI_SIZEOF_ARG. */ + -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY ++#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif ++/* Perform machine independent initialization of aggregate type ++ specifications. */ + -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif ++static ffi_status initialize_aggregate(ffi_type *arg) ++{ ++ ffi_type **ptr; + -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifndef _MSC_VER -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+#endif ++ if (UNLIKELY(arg == NULL || arg->elements == NULL)) ++ return FFI_BAD_TYPEDEF; + -+/* ---- Generic type definitions ----------------------------------------- */ ++ arg->size = 0; ++ arg->alignment = 0; + -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif ++ ptr = &(arg->elements[0]); + -+typedef enum ffi_abi { -+#if defined(X86_WIN64) -+ FFI_FIRST_ABI = 0, -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 ++ if (UNLIKELY(ptr == 0)) ++ return FFI_BAD_TYPEDEF; + -+#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+ FFI_FIRST_ABI = 1, -+ FFI_UNIX64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_UNIX64 ++ while ((*ptr) != NULL) ++ { ++ if (UNLIKELY(((*ptr)->size == 0) ++ && (initialize_aggregate((*ptr)) != FFI_OK))) ++ return FFI_BAD_TYPEDEF; + -+#elif defined(X86_WIN32) -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_STDCALL = 2, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_MS_CDECL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_STDCALL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_MS_CDECL = 8, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif -+} ffi_abi; -+#endif ++ /* Perform a sanity check on the argument type */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+/* ---- Definitions for closures ----------------------------------------- */ ++ arg->size = ALIGN(arg->size, (*ptr)->alignment); ++ arg->size += (*ptr)->size; + -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 ++ arg->alignment = (arg->alignment > (*ptr)->alignment) ? ++ arg->alignment : (*ptr)->alignment; + -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ ptr++; ++ } + -+#if defined (X86_64) || defined(X86_WIN64) \ -+ || (defined (__x86_64__) && defined (X86_DARWIN)) -+# define FFI_TRAMPOLINE_SIZE 24 -+# define FFI_NATIVE_RAW_API 0 -+#else -+# define FFI_TRAMPOLINE_SIZE 12 -+# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif ++ /* Structure size includes tail padding. This is important for ++ structures that fit in one register on ABIs like the PowerPC64 ++ Linux ABI that right justify small structs in a register. ++ It's also needed for nested structure layout, for example ++ struct A { long a; char b; }; struct B { struct A x; char y; }; ++ should find y at an offset of 2*sizeof(long) and result in a ++ total size of 3*sizeof(long). */ ++ arg->size = ALIGN (arg->size, arg->alignment); + ++ /* On some targets, the ABI defines that structures have an additional ++ alignment beyond the "natural" one based on their elements. */ ++#ifdef FFI_AGGREGATE_ALIGNMENT ++ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) ++ arg->alignment = FFI_AGGREGATE_ALIGNMENT; +#endif + -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffiw64.c modified/Modules/_ctypes/libffi_ios/x86/ffiw64.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffiw64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffiw64.c 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,281 @@ -+/* ----------------------------------------------------------------------- -+ ffiw64.c - Copyright (c) 2014 Red Hat, Inc. -+ -+ x86 win64 Foreign Function Interface ++ if (arg->size == 0) ++ return FFI_BAD_TYPEDEF; ++ else ++ return FFI_OK; ++} + -+ 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: ++#ifndef __CRIS__ ++/* The CRIS ABI specifies structure elements to have byte ++ alignment only, so it completely overrides this functions, ++ which assumes "natural" alignment and padding. */ + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++/* Perform machine independent ffi_cif preparation, then call ++ machine dependent routine. */ + -+ 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. -+ ----------------------------------------------------------------------- */ ++/* For non variadic functions isvariadic should be 0 and ++ nfixedargs==ntotalargs. + -+#include -+#include -+#include -+#include ++ For variadic calls, isvariadic should be 1 and nfixedargs ++ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ + -+#ifdef X86_WIN64 + -+struct win64_call_frame ++ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ffi_type **atypes) +{ -+ UINT64 rbp; /* 0 */ -+ UINT64 retaddr; /* 8 */ -+ UINT64 fn; /* 16 */ -+ UINT64 flags; /* 24 */ -+ UINT64 rvalue; /* 32 */ -+}; -+ -+extern void ffi_call_win64 (void *stack, struct win64_call_frame *, -+ void *closure) FFI_HIDDEN; ++ unsigned bytes = 0; ++ unsigned int i; ++ ffi_type **ptr; + -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int flags, n; ++ FFI_ASSERT(cif != NULL); ++ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); ++ FFI_ASSERT(nfixedargs <= ntotalargs); + -+ if (cif->abi != FFI_WIN64) ++ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) + return FFI_BAD_ABI; + -+ flags = cif->rtype->type; -+ switch (flags) -+ { -+ default: -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ flags = FFI_TYPE_STRUCT; -+ break; -+ case FFI_TYPE_COMPLEX: -+ flags = FFI_TYPE_STRUCT; -+ /* FALLTHRU */ -+ case FFI_TYPE_STRUCT: -+ switch (cif->rtype->size) -+ { -+ case 8: -+ flags = FFI_TYPE_UINT64; -+ break; -+ case 4: -+ flags = FFI_TYPE_SMALL_STRUCT_4B; -+ break; -+ case 2: -+ flags = FFI_TYPE_SMALL_STRUCT_2B; -+ break; -+ case 1: -+ flags = FFI_TYPE_SMALL_STRUCT_1B; -+ break; -+ } -+ break; -+ } -+ cif->flags = flags; ++ cif->abi = abi; ++ cif->arg_types = atypes; ++ cif->nargs = ntotalargs; ++ cif->rtype = rtype; + -+ /* Each argument either fits in a register, an 8 byte slot, or is -+ passed by reference with the pointer in the 8 byte slot. */ -+ n = cif->nargs; -+ n += (flags == FFI_TYPE_STRUCT); -+ if (n < 4) -+ n = 4; -+ cif->bytes = n * 8; ++ cif->flags = 0; + -+ return FFI_OK; -+} ++#if HAVE_LONG_DOUBLE_VARIANT ++ ffi_prep_types (abi); ++#endif + -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ int i, j, n, flags; -+ UINT64 *stack; -+ size_t rsize; -+ struct win64_call_frame *frame; ++ /* Initialize the return type if necessary */ ++ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; + -+ FFI_ASSERT(cif->abi == FFI_WIN64); ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if (rtype->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the return type */ ++ FFI_ASSERT_VALID_TYPE(cif->rtype); + -+ flags = cif->flags; -+ rsize = 0; ++ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ /* Make space for the return structure pointer */ ++ if (cif->rtype->type == FFI_TYPE_STRUCT ++#ifdef TILE ++ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) ++#endif ++#ifdef XTENSA ++ && (cif->rtype->size > 16) ++#endif ++#ifdef NIOS2 ++ && (cif->rtype->size > 8) ++#endif ++ ) ++ bytes = STACK_ARG_SIZE(sizeof(void*)); ++#endif + -+ /* If we have no return value for a structure, we need to create one. -+ Otherwise we can ignore the return type entirely. */ -+ if (rvalue == NULL) ++ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { -+ if (flags == FFI_TYPE_STRUCT) -+ rsize = cif->rtype->size; -+ else -+ flags = FFI_TYPE_VOID; -+ } + -+ stack = alloca(cif->bytes + sizeof(struct win64_call_frame) + rsize); -+ frame = (struct win64_call_frame *)((char *)stack + cif->bytes); -+ if (rsize) -+ rvalue = frame + 1; ++ /* Initialize any uninitialized aggregate type definitions */ ++ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; ++ ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if ((*ptr)->type == FFI_TYPE_COMPLEX) ++ abort(); ++#endif ++ /* Perform a sanity check on the argument type, do this ++ check after the initialization. */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+ frame->fn = (uintptr_t)fn; -+ frame->flags = flags; -+ frame->rvalue = (uintptr_t)rvalue; ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ { ++ /* Add any padding if necessary */ ++ if (((*ptr)->alignment - 1) & bytes) ++ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); + -+ j = 0; -+ if (flags == FFI_TYPE_STRUCT) -+ { -+ stack[0] = (uintptr_t)rvalue; -+ j = 1; -+ } ++#ifdef TILE ++ if (bytes < 10 * FFI_SIZEOF_ARG && ++ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) ++ { ++ /* An argument is never split between the 10 parameter ++ registers and the stack. */ ++ bytes = 10 * FFI_SIZEOF_ARG; ++ } ++#endif ++#ifdef XTENSA ++ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) ++ bytes = 6*4; ++#endif + -+ for (i = 0, n = cif->nargs; i < n; ++i, ++j) -+ { -+ switch (cif->arg_types[i]->size) -+ { -+ case 8: -+ stack[j] = *(UINT64 *)avalue[i]; -+ break; -+ case 4: -+ stack[j] = *(UINT32 *)avalue[i]; -+ break; -+ case 2: -+ stack[j] = *(UINT16 *)avalue[i]; -+ break; -+ case 1: -+ stack[j] = *(UINT8 *)avalue[i]; -+ break; -+ default: -+ stack[j] = (uintptr_t)avalue[i]; -+ break; ++ bytes += STACK_ARG_SIZE((*ptr)->size); + } ++#endif + } + -+ ffi_call_win64 (stack, frame, closure); -+} ++ cif->bytes = bytes; + -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} ++ /* Perform machine dependent cif processing */ ++#ifdef FFI_TARGET_SPECIFIC_VARIADIC ++ if (isvariadic) ++ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); ++#endif + -+void -+ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); ++ return ffi_prep_cif_machdep(cif); +} ++#endif /* not __CRIS__ */ + -+ -+extern void ffi_closure_win64(void) FFI_HIDDEN; -+extern void ffi_go_closure_win64(void) FFI_HIDDEN; -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *codeloc) ++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, ++ ffi_type *rtype, ffi_type **atypes) +{ -+ static const unsigned char trampoline[16] = { -+ /* leaq -0x7(%rip),%r10 # 0x0 */ -+ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, -+ /* jmpq *0x3(%rip) # 0x10 */ -+ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, -+ /* nopl (%rax) */ -+ 0x0f, 0x1f, 0x00 -+ }; -+ unsigned char *tramp = closure->tramp; -+ -+ if (cif->abi != FFI_WIN64) -+ return FFI_BAD_ABI; -+ -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ *(UINT64 *)(tramp + 16) = (uintptr_t)ffi_closure_win64; -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; ++ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); +} + -+ffi_status -+ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*)) ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes) +{ -+ if (cif->abi != FFI_WIN64) -+ return FFI_BAD_ABI; -+ -+ closure->tramp = ffi_go_closure_win64; -+ closure->cif = cif; -+ closure->fun = fun; -+ -+ return FFI_OK; ++ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); +} + -+struct win64_closure_frame -+{ -+ UINT64 rvalue[2]; -+ UINT64 fargs[4]; -+ UINT64 retaddr; -+ UINT64 args[]; -+}; ++#if FFI_CLOSURES + -+int FFI_HIDDEN -+ffi_closure_win64_inner(ffi_cif *cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ struct win64_closure_frame *frame) ++ffi_status ++ffi_prep_closure (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data) +{ -+ void **avalue; -+ void *rvalue; -+ int i, n, nreg, flags; -+ -+ avalue = alloca(cif->nargs * sizeof(void *)); -+ rvalue = frame->rvalue; -+ nreg = 0; -+ -+ /* When returning a structure, the address is in the first argument. -+ We must also be prepared to return the same address in eax, so -+ install that address in the frame and pretend we return a pointer. */ -+ flags = cif->flags; -+ if (flags == FFI_TYPE_STRUCT) -+ { -+ rvalue = (void *)(uintptr_t)frame->args[0]; -+ frame->rvalue[0] = frame->args[0]; -+ nreg = 1; -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; ++i, ++nreg) -+ { -+ size_t size = cif->arg_types[i]->size; -+ size_t type = cif->arg_types[i]->type; -+ void *a; -+ -+ if (type == FFI_TYPE_DOUBLE || type == FFI_TYPE_FLOAT) -+ { -+ if (nreg < 4) -+ a = &frame->fargs[nreg]; -+ else -+ a = &frame->args[nreg]; -+ } -+ else if (size == 1 || size == 2 || size == 4 || size == 8) -+ a = &frame->args[nreg]; -+ else -+ a = (void *)(uintptr_t)frame->args[nreg]; -+ -+ avalue[i] = a; -+ } -+ -+ /* Invoke the closure. */ -+ fun (cif, rvalue, avalue, user_data); -+ return flags; ++ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); +} + -+#endif /* X86_WIN64 */ -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h ---- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,29 @@ -+#define X86_RET_FLOAT 0 -+#define X86_RET_DOUBLE 1 -+#define X86_RET_LDOUBLE 2 -+#define X86_RET_SINT8 3 -+#define X86_RET_SINT16 4 -+#define X86_RET_UINT8 5 -+#define X86_RET_UINT16 6 -+#define X86_RET_INT64 7 -+#define X86_RET_INT32 8 -+#define X86_RET_VOID 9 -+#define X86_RET_STRUCTPOP 10 -+#define X86_RET_STRUCTARG 11 -+#define X86_RET_STRUCT_1B 12 -+#define X86_RET_STRUCT_2B 13 -+#define X86_RET_UNUSED14 14 -+#define X86_RET_UNUSED15 15 -+ -+#define X86_RET_TYPE_MASK 15 -+#define X86_RET_POP_SHIFT 4 -+ -+#define R_EAX 0 -+#define R_EDX 1 -+#define R_ECX 2 -+ -+#ifdef __PCC__ -+# define HAVE_FASTCALL 0 -+#else -+# define HAVE_FASTCALL 1 -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h ---- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,22 @@ -+#define UNIX64_RET_VOID 0 -+#define UNIX64_RET_UINT8 1 -+#define UNIX64_RET_UINT16 2 -+#define UNIX64_RET_UINT32 3 -+#define UNIX64_RET_SINT8 4 -+#define UNIX64_RET_SINT16 5 -+#define UNIX64_RET_SINT32 6 -+#define UNIX64_RET_INT64 7 -+#define UNIX64_RET_XMM32 8 -+#define UNIX64_RET_XMM64 9 -+#define UNIX64_RET_X87 10 -+#define UNIX64_RET_X87_2 11 -+#define UNIX64_RET_ST_XMM0_RAX 12 -+#define UNIX64_RET_ST_RAX_XMM0 13 -+#define UNIX64_RET_ST_XMM0_XMM1 14 -+#define UNIX64_RET_ST_RAX_RDX 15 -+ -+#define UNIX64_RET_LAST 15 -+ -+#define UNIX64_FLAG_RET_IN_MEM (1 << 10) -+#define UNIX64_FLAG_XMM_ARGS (1 << 11) -+#define UNIX64_SIZE_SHIFT 12 -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv.S modified/Modules/_ctypes/libffi_ios/x86/sysv.S ---- orig/Modules/_ctypes/libffi_ios/x86/sysv.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/sysv.S 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,1040 @@ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c modified/Modules/_ctypes/libffi_ios_aarch64/raw_api.c +--- orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios_aarch64/raw_api.c 2015-04-26 08:39:05.000000000 +0800 +@@ -0,0 +1,267 @@ +/* ----------------------------------------------------------------------- -+ sysv.S - Copyright (c) 2013 The Written Word, Inc. -+ - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc. -+ -+ X86 Foreign Function Interface ++ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. ++ ++ Author: Kresten Krab Thorup + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -23533,1820 +38520,9841 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv.S modified/Modules/_ctypes/li + DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + -+#ifndef __x86_64__ ++/* This file defines generic functions for use with the raw api. */ + -+#define LIBFFI_ASM -+#include +#include -+#include "internal.h" -+ -+#define C2(X, Y) X ## Y -+#define C1(X, Y) C2(X, Y) -+#ifdef __USER_LABEL_PREFIX__ -+# define C(X) C1(__USER_LABEL_PREFIX__, X) -+#else -+# define C(X) X -+#endif -+ -+#ifdef X86_DARWIN -+# define L(X) C1(L, X) -+#else -+# define L(X) C1(.L, X) -+#endif -+ -+#ifdef __ELF__ -+# define ENDF(X) .type X,@function; .size X, . - X -+#else -+# define ENDF(X) -+#endif -+ -+/* Handle win32 fastcall name mangling. */ -+#ifdef X86_WIN32 -+# define ffi_call_i386 @ffi_call_i386@8 -+# define ffi_closure_inner @ffi_closure_inner@8 -+#else -+# define ffi_call_i386 C(ffi_call_i386) -+# define ffi_closure_inner C(ffi_closure_inner) -+#endif -+ -+/* This macro allows the safe creation of jump tables without an -+ actual table. The entry points into the table are all 8 bytes. -+ The use of ORG asserts that we're at the correct location. */ -+/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ -+#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) -+# define E(BASE, X) .balign 8 -+#else -+# define E(BASE, X) .balign 8; .org BASE + X * 8 -+#endif -+ -+ .text -+ .balign 16 -+ .globl ffi_call_i386 -+ FFI_HIDDEN(ffi_call_i386) -+ -+/* This is declared as -+ -+ void ffi_call_i386(struct call_frame *frame, char *argp) -+ __attribute__((fastcall)); -+ -+ Thus the arguments are present in -+ -+ ecx: frame -+ edx: argp -+*/ -+ -+ffi_call_i386: -+L(UW0): -+ # cfi_startproc -+#if !HAVE_FASTCALL -+ movl 4(%esp), %ecx -+ movl 8(%esp), %edx -+#endif -+ movl (%esp), %eax /* move the return address */ -+ movl %ebp, (%ecx) /* store %ebp into local frame */ -+ movl %eax, 4(%ecx) /* store retaddr into local frame */ -+ -+ /* New stack frame based off ebp. This is a itty bit of unwind -+ trickery in that the CFA *has* changed. There is no easy way -+ to describe it correctly on entry to the function. Fortunately, -+ it doesn't matter too much since at all points we can correctly -+ unwind back to ffi_call. Note that the location to which we -+ moved the return address is (the new) CFA-4, so from the -+ perspective of the unwind info, it hasn't moved. */ -+ movl %ecx, %ebp -+L(UW1): -+ # cfi_def_cfa(%ebp, 8) -+ # cfi_rel_offset(%ebp, 0) -+ -+ movl %edx, %esp /* set outgoing argument stack */ -+ movl 20+R_EAX*4(%ebp), %eax /* set register arguments */ -+ movl 20+R_EDX*4(%ebp), %edx -+ movl 20+R_ECX*4(%ebp), %ecx -+ -+ call *8(%ebp) -+ -+ movl 12(%ebp), %ecx /* load return type code */ -+ movl %ebx, 8(%ebp) /* preserve %ebx */ -+L(UW2): -+ # cfi_rel_offset(%ebx, 8) -+ -+ andl $X86_RET_TYPE_MASK, %ecx -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc1): -+ leal L(store_table)-L(pc1)(%ebx, %ecx, 8), %ebx -+#else -+ leal L(store_table)(,%ecx, 8), %ebx -+#endif -+ movl 16(%ebp), %ecx /* load result address */ -+ jmp *%ebx -+ -+ .balign 8 -+L(store_table): -+E(L(store_table), X86_RET_FLOAT) -+ fstps (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_DOUBLE) -+ fstpl (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_LDOUBLE) -+ fstpt (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_SINT8) -+ movsbl %al, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_SINT16) -+ movswl %ax, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_UINT8) -+ movzbl %al, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_UINT16) -+ movzwl %ax, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_INT64) -+ movl %edx, 4(%ecx) -+ /* fallthru */ -+E(L(store_table), X86_RET_INT32) -+ movl %eax, (%ecx) -+ /* fallthru */ -+E(L(store_table), X86_RET_VOID) -+L(e1): -+ movl 8(%ebp), %ebx -+ movl %ebp, %esp -+ popl %ebp -+L(UW3): -+ # cfi_remember_state -+ # cfi_def_cfa(%esp, 4) -+ # cfi_restore(%ebx) -+ # cfi_restore(%ebp) -+ ret -+L(UW4): -+ # cfi_restore_state -+ -+E(L(store_table), X86_RET_STRUCTPOP) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCTARG) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCT_1B) -+ movb %al, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCT_2B) -+ movw %ax, (%ecx) -+ jmp L(e1) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(store_table), X86_RET_UNUSED14) -+ ud2 -+E(L(store_table), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW5): -+ # cfi_endproc -+ENDF(ffi_call_i386) -+ -+/* The inner helper is declared as -+ -+ void ffi_closure_inner(struct closure_frame *frame, char *argp) -+ __attribute_((fastcall)) -+ -+ Thus the arguments are placed in -+ -+ ecx: frame -+ edx: argp -+*/ -+ -+/* Macros to help setting up the closure_data structure. */ -+ -+#if HAVE_FASTCALL -+# define closure_FS (40 + 4) -+# define closure_CF 0 -+#else -+# define closure_FS (8 + 40 + 12) -+# define closure_CF 8 -+#endif -+ -+#define FFI_CLOSURE_SAVE_REGS \ -+ movl %eax, closure_CF+16+R_EAX*4(%esp); \ -+ movl %edx, closure_CF+16+R_EDX*4(%esp); \ -+ movl %ecx, closure_CF+16+R_ECX*4(%esp) -+ -+#define FFI_CLOSURE_COPY_TRAMP_DATA \ -+ movl FFI_TRAMPOLINE_SIZE(%eax), %edx; /* copy cif */ \ -+ movl FFI_TRAMPOLINE_SIZE+4(%eax), %ecx; /* copy fun */ \ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %eax; /* copy user_data */ \ -+ movl %edx, closure_CF+28(%esp); \ -+ movl %ecx, closure_CF+32(%esp); \ -+ movl %eax, closure_CF+36(%esp) -+ -+#if HAVE_FASTCALL -+# define FFI_CLOSURE_PREP_CALL \ -+ movl %esp, %ecx; /* load closure_data */ \ -+ leal closure_FS+4(%esp), %edx; /* load incoming stack */ -+#else -+# define FFI_CLOSURE_PREP_CALL \ -+ leal closure_CF(%esp), %ecx; /* load closure_data */ \ -+ leal closure_FS+4(%esp), %edx; /* load incoming stack */ \ -+ movl %ecx, (%esp); \ -+ movl %edx, 4(%esp) -+#endif -+ -+#define FFI_CLOSURE_CALL_INNER(UWN) \ -+ call ffi_closure_inner -+ -+#define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ leal L(C1(load_table,N))(, %eax, 8), %edx; \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+ -+#ifdef __PIC__ -+# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+# undef FFI_CLOSURE_MASK_AND_JUMP -+# define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ call C(__x86.get_pc_thunk.dx); \ -+L(C1(pc,N)): \ -+ leal L(C1(load_table,N))-L(C1(pc,N))(%edx, %eax, 8), %edx; \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+# else -+# define FFI_CLOSURE_CALL_INNER_SAVE_EBX -+# undef FFI_CLOSURE_CALL_INNER -+# define FFI_CLOSURE_CALL_INNER(UWN) \ -+ movl %ebx, 40(%esp); /* save ebx */ \ -+L(C1(UW,UWN)): \ -+ # cfi_rel_offset(%ebx, 40); \ -+ call C(__x86.get_pc_thunk.bx); /* load got register */ \ -+ addl $C(_GLOBAL_OFFSET_TABLE_), %ebx; \ -+ call ffi_closure_inner@PLT -+# undef FFI_CLOSURE_MASK_AND_JUMP -+# define FFI_CLOSURE_MASK_AND_JUMP(N, UWN) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ leal L(C1(load_table,N))@GOTOFF(%ebx, %eax, 8), %edx; \ -+ movl 40(%esp), %ebx; /* restore ebx */ \ -+L(C1(UW,UWN)): \ -+ # cfi_restore(%ebx); \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+# endif /* DARWIN || HIDDEN */ -+#endif /* __PIC__ */ -+ -+ .balign 16 -+ .globl C(ffi_go_closure_EAX) -+ FFI_HIDDEN(C(ffi_go_closure_EAX)) -+C(ffi_go_closure_EAX): -+L(UW6): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW7): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%eax), %edx /* copy cif */ -+ movl 8(%eax), %ecx /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %ecx, closure_CF+32(%esp) -+ movl %eax, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_i386) -+L(UW8): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_EAX)) -+ -+ .balign 16 -+ .globl C(ffi_go_closure_ECX) -+ FFI_HIDDEN(C(ffi_go_closure_ECX)) -+C(ffi_go_closure_ECX): -+L(UW9): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW10): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%ecx), %edx /* copy cif */ -+ movl 8(%ecx), %eax /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %eax, closure_CF+32(%esp) -+ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_i386) -+L(UW11): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_ECX)) -+ -+/* The closure entry points are reached from the ffi_closure trampoline. -+ On entry, %eax contains the address of the ffi_closure. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_i386) -+ FFI_HIDDEN(C(ffi_closure_i386)) -+ -+C(ffi_closure_i386): -+L(UW12): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW13): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ -+ FFI_CLOSURE_SAVE_REGS -+ FFI_CLOSURE_COPY_TRAMP_DATA -+ -+ /* Entry point from preceeding Go closures. */ -+L(do_closure_i386): -+ -+ FFI_CLOSURE_PREP_CALL -+ FFI_CLOSURE_CALL_INNER(14) -+ FFI_CLOSURE_MASK_AND_JUMP(2, 15) -+ -+ .balign 8 -+L(load_table2): -+E(L(load_table2), X86_RET_FLOAT) -+ flds closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_DOUBLE) -+ fldl closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_LDOUBLE) -+ fldt closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_INT64) -+ movl closure_CF+4(%esp), %edx -+ jmp L(e2) -+E(L(load_table2), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table2), X86_RET_VOID) -+L(e2): -+ addl $closure_FS, %esp -+L(UW16): -+ # cfi_adjust_cfa_offset(-closure_FS) -+ ret -+L(UW17): -+ # cfi_adjust_cfa_offset(closure_FS) -+E(L(load_table2), X86_RET_STRUCTPOP) -+ addl $closure_FS, %esp -+L(UW18): -+ # cfi_adjust_cfa_offset(-closure_FS) -+ ret $4 -+L(UW19): -+ # cfi_adjust_cfa_offset(closure_FS) -+E(L(load_table2), X86_RET_STRUCTARG) -+ jmp L(e2) -+E(L(load_table2), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e2) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table2), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table2), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW20): -+ # cfi_endproc -+ENDF(C(ffi_closure_i386)) -+ -+ .balign 16 -+ .globl C(ffi_go_closure_STDCALL) -+ FFI_HIDDEN(C(ffi_go_closure_STDCALL)) -+C(ffi_go_closure_STDCALL): -+L(UW21): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW22): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%ecx), %edx /* copy cif */ -+ movl 8(%ecx), %eax /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %eax, closure_CF+32(%esp) -+ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_STDCALL) -+L(UW23): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_STDCALL)) -+ -+/* For REGISTER, we have no available parameter registers, and so we -+ enter here having pushed the closure onto the stack. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_REGISTER) -+ FFI_HIDDEN(C(ffi_closure_REGISTER)) -+C(ffi_closure_REGISTER): -+L(UW24): -+ # cfi_startproc -+ # cfi_def_cfa(%esp, 8) -+ # cfi_offset(%eip, -8) -+ subl $closure_FS-4, %esp -+L(UW25): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl closure_FS-4(%esp), %ecx /* load retaddr */ -+ movl closure_FS(%esp), %eax /* load closure */ -+ movl %ecx, closure_FS(%esp) /* move retaddr */ -+ jmp L(do_closure_REGISTER) -+L(UW26): -+ # cfi_endproc -+ENDF(C(ffi_closure_REGISTER)) -+ -+/* For STDCALL (and others), we need to pop N bytes of arguments off -+ the stack following the closure. The amount needing to be popped -+ is returned to us from ffi_closure_inner. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_STDCALL) -+ FFI_HIDDEN(C(ffi_closure_STDCALL)) -+C(ffi_closure_STDCALL): -+L(UW27): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW28): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ -+ FFI_CLOSURE_SAVE_REGS -+ -+ /* Entry point from ffi_closure_REGISTER. */ -+L(do_closure_REGISTER): -+ -+ FFI_CLOSURE_COPY_TRAMP_DATA -+ -+ /* Entry point from preceeding Go closure. */ -+L(do_closure_STDCALL): -+ -+ FFI_CLOSURE_PREP_CALL -+ FFI_CLOSURE_CALL_INNER(29) -+ -+ movl %eax, %ecx -+ shrl $X86_RET_POP_SHIFT, %ecx /* isolate pop count */ -+ leal closure_FS(%esp, %ecx), %ecx /* compute popped esp */ -+ movl closure_FS(%esp), %edx /* move return address */ -+ movl %edx, (%ecx) -+ -+ /* From this point on, the value of %esp upon return is %ecx+4, -+ and we've copied the return address to %ecx to make return easy. -+ There's no point in representing this in the unwind info, as -+ there is always a window between the mov and the ret which -+ will be wrong from one point of view or another. */ -+ -+ FFI_CLOSURE_MASK_AND_JUMP(3, 30) -+ -+ .balign 8 -+L(load_table3): -+E(L(load_table3), X86_RET_FLOAT) -+ flds closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_DOUBLE) -+ fldl closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_LDOUBLE) -+ fldt closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_SINT8) -+ movsbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_SINT16) -+ movswl %ax, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_UINT8) -+ movzbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_UINT16) -+ movzwl %ax, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_INT64) -+ movl closure_CF+4(%esp), %edx -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_INT32) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_VOID) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCTPOP) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCTARG) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ movl %ecx, %esp -+ ret -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table3), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table3), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW31): -+ # cfi_endproc -+ENDF(C(ffi_closure_STDCALL)) ++#include + +#if !FFI_NO_RAW_API + -+#define raw_closure_S_FS (16+16+12) -+ -+ .balign 16 -+ .globl C(ffi_closure_raw_SYSV) -+ FFI_HIDDEN(C(ffi_closure_raw_SYSV)) -+C(ffi_closure_raw_SYSV): -+L(UW32): -+ # cfi_startproc -+ subl $raw_closure_S_FS, %esp -+L(UW33): -+ # cfi_def_cfa_offset(raw_closure_S_FS + 4) -+ movl %ebx, raw_closure_S_FS-4(%esp) -+L(UW34): -+ # cfi_rel_offset(%ebx, raw_closure_S_FS-4) -+ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ -+ movl %edx, 12(%esp) -+ leal raw_closure_S_FS+4(%esp), %edx /* load raw_args */ -+ movl %edx, 8(%esp) -+ leal 16(%esp), %edx /* load &res */ -+ movl %edx, 4(%esp) -+ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ -+ movl %ebx, (%esp) -+ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ -+ -+ movl 20(%ebx), %eax /* load cif->flags */ -+ andl $X86_RET_TYPE_MASK, %eax -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc4): -+ leal L(load_table4)-L(pc4)(%ebx, %eax, 8), %ecx -+#else -+ leal L(load_table4)(,%eax, 8), %ecx -+#endif -+ movl raw_closure_S_FS-4(%esp), %ebx -+L(UW35): -+ # cfi_restore(%ebx) -+ movl 16(%esp), %eax /* Optimistic load */ -+ jmp *%ecx -+ -+ .balign 8 -+L(load_table4): -+E(L(load_table4), X86_RET_FLOAT) -+ flds 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_DOUBLE) -+ fldl 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_LDOUBLE) -+ fldt 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_INT64) -+ movl 16+4(%esp), %edx -+ jmp L(e4) -+E(L(load_table4), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table4), X86_RET_VOID) -+L(e4): -+ addl $raw_closure_S_FS, %esp -+L(UW36): -+ # cfi_adjust_cfa_offset(-raw_closure_S_FS) -+ ret -+L(UW37): -+ # cfi_adjust_cfa_offset(raw_closure_S_FS) -+E(L(load_table4), X86_RET_STRUCTPOP) -+ addl $raw_closure_S_FS, %esp -+L(UW38): -+ # cfi_adjust_cfa_offset(-raw_closure_S_FS) -+ ret $4 -+L(UW39): -+ # cfi_adjust_cfa_offset(raw_closure_S_FS) -+E(L(load_table4), X86_RET_STRUCTARG) -+ jmp L(e4) -+E(L(load_table4), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e4) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table4), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table4), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW40): -+ # cfi_endproc -+ENDF(C(ffi_closure_raw_SYSV)) -+ -+#define raw_closure_T_FS (16+16+8) -+ -+ .balign 16 -+ .globl C(ffi_closure_raw_THISCALL) -+ FFI_HIDDEN(C(ffi_closure_raw_THISCALL)) -+C(ffi_closure_raw_THISCALL): -+L(UW41): -+ # cfi_startproc -+ /* Rearrange the stack such that %ecx is the first argument. -+ This means moving the return address. */ -+ popl %edx -+L(UW42): -+ # cfi_def_cfa_offset(0) -+ # cfi_register(%eip, %edx) -+ pushl %ecx -+L(UW43): -+ # cfi_adjust_cfa_offset(4) -+ pushl %edx -+L(UW44): -+ # cfi_adjust_cfa_offset(4) -+ # cfi_rel_offset(%eip, 0) -+ subl $raw_closure_T_FS, %esp -+L(UW45): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+ movl %ebx, raw_closure_T_FS-4(%esp) -+L(UW46): -+ # cfi_rel_offset(%ebx, raw_closure_T_FS-4) -+ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ -+ movl %edx, 12(%esp) -+ leal raw_closure_T_FS+4(%esp), %edx /* load raw_args */ -+ movl %edx, 8(%esp) -+ leal 16(%esp), %edx /* load &res */ -+ movl %edx, 4(%esp) -+ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ -+ movl %ebx, (%esp) -+ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ -+ -+ movl 20(%ebx), %eax /* load cif->flags */ -+ andl $X86_RET_TYPE_MASK, %eax -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc5): -+ leal L(load_table5)-L(pc5)(%ebx, %eax, 8), %ecx -+#else -+ leal L(load_table5)(,%eax, 8), %ecx -+#endif -+ movl raw_closure_T_FS-4(%esp), %ebx -+L(UW47): -+ # cfi_restore(%ebx) -+ movl 16(%esp), %eax /* Optimistic load */ -+ jmp *%ecx -+ -+ .balign 8 -+L(load_table5): -+E(L(load_table5), X86_RET_FLOAT) -+ flds 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_DOUBLE) -+ fldl 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_LDOUBLE) -+ fldt 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_INT64) -+ movl 16+4(%esp), %edx -+ jmp L(e5) -+E(L(load_table5), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table5), X86_RET_VOID) -+L(e5): -+ addl $raw_closure_T_FS, %esp -+L(UW48): -+ # cfi_adjust_cfa_offset(-raw_closure_T_FS) -+ /* Remove the extra %ecx argument we pushed. */ -+ ret $4 -+L(UW49): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+E(L(load_table5), X86_RET_STRUCTPOP) -+ addl $raw_closure_T_FS, %esp -+L(UW50): -+ # cfi_adjust_cfa_offset(-raw_closure_T_FS) -+ ret $8 -+L(UW51): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+E(L(load_table5), X86_RET_STRUCTARG) -+ jmp L(e5) -+E(L(load_table5), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e5) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table5), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table5), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW52): -+ # cfi_endproc -+ENDF(C(ffi_closure_raw_THISCALL)) ++size_t ++ffi_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; + -+#endif /* !FFI_NO_RAW_API */ ++ ffi_type **at = cif->arg_types; + -+#ifdef X86_DARWIN -+# define COMDAT(X) \ -+ .section __TEXT,__textcoal_nt,coalesced,pure_instructions; \ -+ .weak_definition X; \ -+ .private_extern X -+#elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__)) -+# define COMDAT(X) \ -+ .section .text.X,"axG",@progbits,X,comdat; \ -+ .globl X; \ -+ FFI_HIDDEN(X) -+#else -+# define COMDAT(X) ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*at)->type == FFI_TYPE_STRUCT) ++ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); ++ else +#endif ++ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); ++ } + -+#if defined(__PIC__) -+ COMDAT(C(__x86.get_pc_thunk.bx)) -+C(__x86.get_pc_thunk.bx): -+ movl (%esp), %ebx -+ ret -+ENDF(C(__x86.get_pc_thunk.bx)) -+# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+ COMDAT(C(__x86.get_pc_thunk.dx)) -+C(__x86.get_pc_thunk.dx): -+ movl (%esp), %edx -+ ret -+ENDF(C(__x86.get_pc_thunk.dx)) -+#endif /* DARWIN || HIDDEN */ -+#endif /* __PIC__ */ -+ -+/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ ++ return result; ++} + -+#ifdef __APPLE__ -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EHFrame0: -+#elif defined(X86_WIN32) -+.section .eh_frame,"r" -+#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) -+.section .eh_frame,EH_FRAME_FLAGS,@unwind -+#else -+.section .eh_frame,EH_FRAME_FLAGS,@progbits -+#endif + -+#ifdef HAVE_AS_X86_PCREL -+# define PCREL(X) X - . -+#else -+# define PCREL(X) X@rel -+#endif -+ -+/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ -+#define ADV(N, P) .byte 2, L(N)-L(P) -+ -+ .balign 4 -+L(CIE): -+ .set L(set0),L(ECIE)-L(SCIE) -+ .long L(set0) /* CIE Length */ -+L(SCIE): -+ .long 0 /* CIE Identifier Tag */ -+ .byte 1 /* CIE Version */ -+ .ascii "zR\0" /* CIE Augmentation */ -+ .byte 1 /* CIE Code Alignment Factor */ -+ .byte 0x7c /* CIE Data Alignment Factor */ -+ .byte 0x8 /* CIE RA Column */ -+ .byte 1 /* Augmentation size */ -+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */ -+ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */ -+ .balign 4 -+L(ECIE): -+ -+ .set L(set1),L(EFDE1)-L(SFDE1) -+ .long L(set1) /* FDE Length */ -+L(SFDE1): -+ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW0)) /* Initial location */ -+ .long L(UW5)-L(UW0) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW1, UW0) -+ .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */ -+ .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */ -+ ADV(UW2, UW1) -+ .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */ -+ ADV(UW3, UW2) -+ .byte 0xa /* DW_CFA_remember_state */ -+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */ -+ .byte 0xc0+3 /* DW_CFA_restore, %ebx */ -+ .byte 0xc0+5 /* DW_CFA_restore, %ebp */ -+ ADV(UW4, UW3) -+ .byte 0xb /* DW_CFA_restore_state */ -+ .balign 4 -+L(EFDE1): -+ -+ .set L(set2),L(EFDE2)-L(SFDE2) -+ .long L(set2) /* FDE Length */ -+L(SFDE2): -+ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW6)) /* Initial location */ -+ .long L(UW8)-L(UW6) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW7, UW6) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE2): -+ -+ .set L(set3),L(EFDE3)-L(SFDE3) -+ .long L(set3) /* FDE Length */ -+L(SFDE3): -+ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW9)) /* Initial location */ -+ .long L(UW11)-L(UW9) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW10, UW9) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE3): -+ -+ .set L(set4),L(EFDE4)-L(SFDE4) -+ .long L(set4) /* FDE Length */ -+L(SFDE4): -+ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW12)) /* Initial location */ -+ .long L(UW20)-L(UW12) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW13, UW12) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX -+ ADV(UW14, UW13) -+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ -+ ADV(UW15, UW14) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW16, UW15) -+#else -+ ADV(UW16, UW13) -+#endif -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW17, UW16) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW18, UW17) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW19, UW18) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE4): -+ -+ .set L(set5),L(EFDE5)-L(SFDE5) -+ .long L(set5) /* FDE Length */ -+L(SFDE5): -+ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW21)) /* Initial location */ -+ .long L(UW23)-L(UW21) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW22, UW21) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE5): -+ -+ .set L(set6),L(EFDE6)-L(SFDE6) -+ .long L(set6) /* FDE Length */ -+L(SFDE6): -+ .long L(SFDE6)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW24)) /* Initial location */ -+ .long L(UW26)-L(UW24) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */ -+ ADV(UW25, UW24) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE6): -+ -+ .set L(set7),L(EFDE7)-L(SFDE7) -+ .long L(set7) /* FDE Length */ -+L(SFDE7): -+ .long L(SFDE7)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW27)) /* Initial location */ -+ .long L(UW31)-L(UW27) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW28, UW27) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX -+ ADV(UW29, UW28) -+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ -+ ADV(UW30, UW29) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+#endif -+ .balign 4 -+L(EFDE7): ++void ++ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+#if !FFI_NO_RAW_API -+ .set L(set8),L(EFDE8)-L(SFDE8) -+ .long L(set8) /* FDE Length */ -+L(SFDE8): -+ .long L(SFDE8)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW32)) /* Initial location */ -+ .long L(UW40)-L(UW32) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW33, UW32) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW34, UW33) -+ .byte 0x80+3, 2 /* DW_CFA_offset %ebx 2*-4 */ -+ ADV(UW35, UW34) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW36, UW35) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW37, UW36) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW38, UW37) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW39, UW38) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE8): -+ -+ .set L(set9),L(EFDE9)-L(SFDE9) -+ .long L(set9) /* FDE Length */ -+L(SFDE9): -+ .long L(SFDE9)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW41)) /* Initial location */ -+ .long L(UW52)-L(UW41) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW42, UW41) -+ .byte 0xe, 0 /* DW_CFA_def_cfa_offset */ -+ .byte 0x9, 8, 2 /* DW_CFA_register %eip, %edx */ -+ ADV(UW43, UW42) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW44, UW43) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ .byte 0x80+8, 2 /* DW_CFA_offset %eip 2*-4 */ -+ ADV(UW45, UW44) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW46, UW45) -+ .byte 0x80+3, 3 /* DW_CFA_offset %ebx 3*-4 */ -+ ADV(UW47, UW46) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW48, UW47) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW49, UW48) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW50, UW49) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW51, UW50) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE9): -+#endif /* !FFI_NO_RAW_API */ ++#if WORDS_BIGENDIAN + -+#endif /* ifndef __x86_64__ */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); ++ break; + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",@progbits ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); ++ break; ++#endif ++ ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ *args = (raw++)->ptr; ++ break; +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64.S modified/Modules/_ctypes/libffi_ios/x86/unix64.S ---- orig/Modules/_ctypes/libffi_ios/x86/unix64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/unix64.S 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,546 @@ -+/* ----------------------------------------------------------------------- -+ unix64.S - Copyright (c) 2013 The Written Word, Inc. -+ - Copyright (c) 2008 Red Hat, Inc -+ - Copyright (c) 2002 Bo Thorsen -+ -+ x86-64 Foreign Function Interface -+ -+ 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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ case FFI_TYPE_COMPLEX: ++ *args = (raw++)->ptr; ++ break; + -+ 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. -+ ----------------------------------------------------------------------- */ ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ default: ++ *args = raw; ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } + -+#ifdef __x86_64__ -+#define LIBFFI_ASM -+#include -+#include -+#include "internal64.h" ++#else /* WORDS_BIGENDIAN */ + -+ .text ++#if !PDP + -+#define C2(X, Y) X ## Y -+#define C1(X, Y) C2(X, Y) -+#ifdef __USER_LABEL_PREFIX__ -+# define C(X) C1(__USER_LABEL_PREFIX__, X) -+#else -+# define C(X) X ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*tp)->type == FFI_TYPE_STRUCT) ++ { ++ *args = (raw++)->ptr; ++ } ++ else +#endif ++ if ((*tp)->type == FFI_TYPE_COMPLEX) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++ { ++ *args = (void*) raw; ++ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); ++ } ++ } + -+#ifdef __APPLE__ -+# define L(X) C1(L, X) +#else -+# define L(X) C1(.L, X) -+#endif ++#error "pdp endian not supported" ++#endif /* ! PDP */ + -+#ifdef __ELF__ -+# define PLT(X) X@PLT -+# define ENDF(X) .type X,@function; .size X, . - X -+#else -+# define PLT(X) X -+# define ENDF(X) -+#endif ++#endif /* WORDS_BIGENDIAN */ ++} + -+/* This macro allows the safe creation of jump tables without an -+ actual table. The entry points into the table are all 8 bytes. -+ The use of ORG asserts that we're at the correct location. */ -+/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ -+#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) -+# define E(BASE, X) .balign 8 -+#else -+# define E(BASE, X) .balign 8; .org BASE + X * 8 -+#endif ++void ++ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void)); ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ (raw++)->uint = *(UINT8*) (*args); ++ break; + -+ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame -+ for this function. This has been allocated by ffi_call. We also -+ deallocate some of the stack that has been alloca'd. */ ++ case FFI_TYPE_SINT8: ++ (raw++)->sint = *(SINT8*) (*args); ++ break; + -+ .balign 8 -+ .globl C(ffi_call_unix64) -+ FFI_HIDDEN(C(ffi_call_unix64)) ++ case FFI_TYPE_UINT16: ++ (raw++)->uint = *(UINT16*) (*args); ++ break; + -+C(ffi_call_unix64): -+L(UW0): -+ movq (%rsp), %r10 /* Load return address. */ -+ leaq (%rdi, %rsi), %rax /* Find local stack base. */ -+ movq %rdx, (%rax) /* Save flags. */ -+ movq %rcx, 8(%rax) /* Save raddr. */ -+ movq %rbp, 16(%rax) /* Save old frame pointer. */ -+ movq %r10, 24(%rax) /* Relocate return address. */ -+ movq %rax, %rbp /* Finalize local stack frame. */ ++ case FFI_TYPE_SINT16: ++ (raw++)->sint = *(SINT16*) (*args); ++ break; + -+ /* New stack frame based off rbp. This is a itty bit of unwind -+ trickery in that the CFA *has* changed. There is no easy way -+ to describe it correctly on entry to the function. Fortunately, -+ it doesn't matter too much since at all points we can correctly -+ unwind back to ffi_call. Note that the location to which we -+ moved the return address is (the new) CFA-8, so from the -+ perspective of the unwind info, it hasn't moved. */ -+L(UW1): -+ /* cfi_def_cfa(%rbp, 32) */ -+ /* cfi_rel_offset(%rbp, 16) */ ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ (raw++)->uint = *(UINT32*) (*args); ++ break; + -+ movq %rdi, %r10 /* Save a copy of the register area. */ -+ movq %r8, %r11 /* Save a copy of the target fn. */ -+ movl %r9d, %eax /* Set number of SSE registers. */ ++ case FFI_TYPE_SINT32: ++ (raw++)->sint = *(SINT32*) (*args); ++ break; ++#endif + -+ /* Load up all argument registers. */ -+ movq (%r10), %rdi -+ movq 0x08(%r10), %rsi -+ movq 0x10(%r10), %rdx -+ movq 0x18(%r10), %rcx -+ movq 0x20(%r10), %r8 -+ movq 0x28(%r10), %r9 -+ movl 0xb0(%r10), %eax -+ testl %eax, %eax -+ jnz L(load_sse) -+L(ret_from_load_sse): ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ (raw++)->ptr = *args; ++ break; ++#endif + -+ /* Deallocate the reg arg area, except for r10, then load via pop. */ -+ leaq 0xb8(%r10), %rsp -+ popq %r10 ++ case FFI_TYPE_COMPLEX: ++ (raw++)->ptr = *args; ++ break; + -+ /* Call the user function. */ -+ call *%r11 ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; + -+ /* Deallocate stack arg area; local stack frame in redzone. */ -+ leaq 24(%rbp), %rsp ++ default: ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } ++} + -+ movq 0(%rbp), %rcx /* Reload flags. */ -+ movq 8(%rbp), %rdi /* Reload raddr. */ -+ movq 16(%rbp), %rbp /* Reload old frame pointer. */ -+L(UW2): -+ /* cfi_remember_state */ -+ /* cfi_def_cfa(%rsp, 8) */ -+ /* cfi_restore(%rbp) */ ++#if !FFI_NATIVE_RAW_API + -+ /* The first byte of the flags contains the FFI_TYPE. */ -+ cmpb $UNIX64_RET_LAST, %cl -+ movzbl %cl, %r10d -+ leaq L(store_table)(%rip), %r11 -+ ja L(sa) -+ leaq (%r11, %r10, 8), %r10 + -+ /* Prep for the structure cases: scratch area in redzone. */ -+ leaq -20(%rsp), %rsi -+ jmp *%r10 ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ + -+ .balign 8 -+L(store_table): -+E(L(store_table), UNIX64_RET_VOID) -+ ret -+E(L(store_table), UNIX64_RET_UINT8) -+ movzbl %al, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_UINT16) -+ movzwl %ax, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_UINT32) -+ movl %eax, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT8) -+ movsbq %al, %rax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT16) -+ movswq %ax, %rax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT32) -+ cltq -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_INT64) -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_XMM32) -+ movd %xmm0, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_XMM64) -+ movq %xmm0, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_X87) -+ fstpt (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_X87_2) -+ fstpt (%rdi) -+ fstpt 16(%rdi) -+ ret -+E(L(store_table), UNIX64_RET_ST_XMM0_RAX) -+ movq %rax, 8(%rsi) -+ jmp L(s3) -+E(L(store_table), UNIX64_RET_ST_RAX_XMM0) -+ movq %xmm0, 8(%rsi) -+ jmp L(s2) -+E(L(store_table), UNIX64_RET_ST_XMM0_XMM1) -+ movq %xmm1, 8(%rsi) -+ jmp L(s3) -+E(L(store_table), UNIX64_RET_ST_RAX_RDX) -+ movq %rdx, 8(%rsi) -+L(s2): -+ movq %rax, (%rsi) -+ shrl $UNIX64_SIZE_SHIFT, %ecx -+ rep movsb -+ ret -+ .balign 8 -+L(s3): -+ movq %xmm0, (%rsi) -+ shrl $UNIX64_SIZE_SHIFT, %ecx -+ rep movsb -+ ret ++void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++} + -+L(sa): call PLT(C(abort)) ++#if FFI_CLOSURES /* base system provides closures */ + -+ /* Many times we can avoid loading any SSE registers at all. -+ It's not worth an indirect jump to load the exact set of -+ SSE registers needed; zero or all is a good compromise. */ -+ .balign 2 -+L(UW3): -+ /* cfi_restore_state */ -+L(load_sse): -+ movdqa 0x30(%r10), %xmm0 -+ movdqa 0x40(%r10), %xmm1 -+ movdqa 0x50(%r10), %xmm2 -+ movdqa 0x60(%r10), %xmm3 -+ movdqa 0x70(%r10), %xmm4 -+ movdqa 0x80(%r10), %xmm5 -+ movdqa 0x90(%r10), %xmm6 -+ movdqa 0xa0(%r10), %xmm7 -+ jmp L(ret_from_load_sse) -+ -+L(UW4): -+ENDF(C(ffi_call_unix64)) -+ -+/* 6 general registers, 8 vector registers, -+ 32 bytes of rvalue, 8 bytes of alignment. */ -+#define ffi_closure_OFS_G 0 -+#define ffi_closure_OFS_V (6*8) -+#define ffi_closure_OFS_RVALUE (ffi_closure_OFS_V + 8*16) -+#define ffi_closure_FS (ffi_closure_OFS_RVALUE + 32 + 8) -+ -+/* The location of rvalue within the red zone after deallocating the frame. */ -+#define ffi_closure_RED_RVALUE (ffi_closure_OFS_RVALUE - ffi_closure_FS) -+ -+ .balign 2 -+ .globl C(ffi_closure_unix64_sse) -+ FFI_HIDDEN(C(ffi_closure_unix64_sse)) -+ -+C(ffi_closure_unix64_sse): -+L(UW5): -+ subq $ffi_closure_FS, %rsp -+L(UW6): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+ -+ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) -+ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) -+ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) -+ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) -+ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) -+ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) -+ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) -+ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) -+ jmp L(sse_entry1) -+ -+L(UW7): -+ENDF(C(ffi_closure_unix64_sse)) -+ -+ .balign 2 -+ .globl C(ffi_closure_unix64) -+ FFI_HIDDEN(C(ffi_closure_unix64)) -+ -+C(ffi_closure_unix64): -+L(UW8): -+ subq $ffi_closure_FS, %rsp -+L(UW9): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+L(sse_entry1): -+ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) -+ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) -+ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) -+ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) -+ movq %r8, ffi_closure_OFS_G+0x20(%rsp) -+ movq %r9, ffi_closure_OFS_G+0x28(%rsp) ++static void ++ffi_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; + -+#ifdef __ILP32__ -+ movl FFI_TRAMPOLINE_SIZE(%r10), %edi /* Load cif */ -+ movl FFI_TRAMPOLINE_SIZE+4(%r10), %esi /* Load fun */ -+ movl FFI_TRAMPOLINE_SIZE+8(%r10), %edx /* Load user_data */ -+#else -+ movq FFI_TRAMPOLINE_SIZE(%r10), %rdi /* Load cif */ -+ movq FFI_TRAMPOLINE_SIZE+8(%r10), %rsi /* Load fun */ -+ movq FFI_TRAMPOLINE_SIZE+16(%r10), %rdx /* Load user_data */ -+#endif -+L(do_closure): -+ leaq ffi_closure_OFS_RVALUE(%rsp), %rcx /* Load rvalue */ -+ movq %rsp, %r8 /* Load reg_args */ -+ leaq ffi_closure_FS+8(%rsp), %r9 /* Load argp */ -+ call C(ffi_closure_unix64_inner) ++ ffi_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, raw, cl->user_data); ++} + -+ /* Deallocate stack frame early; return value is now in redzone. */ -+ addq $ffi_closure_FS, %rsp -+L(UW10): -+ /* cfi_adjust_cfa_offset(-ffi_closure_FS) */ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; + -+ /* The first byte of the return value contains the FFI_TYPE. */ -+ cmpb $UNIX64_RET_LAST, %al -+ movzbl %al, %r10d -+ leaq L(load_table)(%rip), %r11 -+ ja L(la) -+ leaq (%r11, %r10, 8), %r10 -+ leaq ffi_closure_RED_RVALUE(%rsp), %rsi -+ jmp *%r10 ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+ .balign 8 -+L(load_table): -+E(L(load_table), UNIX64_RET_VOID) -+ ret -+E(L(load_table), UNIX64_RET_UINT8) -+ movzbl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_UINT16) -+ movzwl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_UINT32) -+ movl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT8) -+ movsbl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT16) -+ movswl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT32) -+ movl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_INT64) -+ movq (%rsi), %rax -+ ret -+E(L(load_table), UNIX64_RET_XMM32) -+ movd (%rsi), %xmm0 -+ ret -+E(L(load_table), UNIX64_RET_XMM64) -+ movq (%rsi), %xmm0 -+ ret -+E(L(load_table), UNIX64_RET_X87) -+ fldt (%rsi) -+ ret -+E(L(load_table), UNIX64_RET_X87_2) -+ fldt 16(%rsi) -+ fldt (%rsi) -+ ret -+E(L(load_table), UNIX64_RET_ST_XMM0_RAX) -+ movq 8(%rsi), %rax -+ jmp L(l3) -+E(L(load_table), UNIX64_RET_ST_RAX_XMM0) -+ movq 8(%rsi), %xmm0 -+ jmp L(l2) -+E(L(load_table), UNIX64_RET_ST_XMM0_XMM1) -+ movq 8(%rsi), %xmm1 -+ jmp L(l3) -+E(L(load_table), UNIX64_RET_ST_RAX_RDX) -+ movq 8(%rsi), %rdx -+L(l2): -+ movq (%rsi), %rax -+ ret -+ .balign 8 -+L(l3): -+ movq (%rsi), %xmm0 -+ ret ++ return status; ++} ++ ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ + -+L(la): call PLT(C(abort)) -+ -+L(UW11): -+ENDF(C(ffi_closure_unix64)) -+ -+ .balign 2 -+ .globl C(ffi_go_closure_unix64_sse) -+ FFI_HIDDEN(C(ffi_go_closure_unix64_sse)) -+ -+C(ffi_go_closure_unix64_sse): -+L(UW12): -+ subq $ffi_closure_FS, %rsp -+L(UW13): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+ -+ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) -+ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) -+ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) -+ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) -+ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) -+ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) -+ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) -+ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) -+ jmp L(sse_entry2) -+ -+L(UW14): -+ENDF(C(ffi_go_closure_unix64_sse)) -+ -+ .balign 2 -+ .globl C(ffi_go_closure_unix64) -+ FFI_HIDDEN(C(ffi_go_closure_unix64)) -+ -+C(ffi_go_closure_unix64): -+L(UW15): -+ subq $ffi_closure_FS, %rsp -+L(UW16): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+L(sse_entry2): -+ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) -+ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) -+ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) -+ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) -+ movq %r8, ffi_closure_OFS_G+0x20(%rsp) -+ movq %r9, ffi_closure_OFS_G+0x28(%rsp) ++#if FFI_CLOSURES + -+#ifdef __ILP32__ -+ movl 4(%r10), %edi /* Load cif */ -+ movl 8(%r10), %esi /* Load fun */ -+ movl %r10d, %edx /* Load closure (user_data) */ -+#else -+ movq 8(%r10), %rdi /* Load cif */ -+ movq 16(%r10), %rsi /* Load fun */ -+ movq %r10, %rdx /* Load closure (user_data) */ -+#endif -+ jmp L(do_closure) ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ ++ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); ++} + -+L(UW17): -+ENDF(C(ffi_go_closure_unix64)) ++#endif /* FFI_CLOSURES */ + -+/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ ++#endif /* !FFI_NO_RAW_API */ +diff -Nru orig/Modules/makesetup modified/Modules/makesetup +--- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/makesetup 2015-04-27 13:32:33.000000000 +0800 +@@ -128,7 +128,7 @@ + + # Output DEFS in reverse order so first definition overrides + case $line in +- *=*) DEFS="$line$NL$DEFS"; continue;; ++ [A-Z]*=*) DEFS="$line$NL$DEFS"; continue;; + 'include '*) DEFS="$line$NL$DEFS"; continue;; + '*noobjects*') + case $noobjects in +@@ -176,6 +176,7 @@ + *.c++) srcs="$srcs $arg";; + *.cxx) srcs="$srcs $arg";; + *.cpp) srcs="$srcs $arg";; ++ *.S) srcs="$srcs $arg";; + \$*) libs="$libs $arg" + cpps="$cpps $arg";; + *.*) echo 1>&2 "bad word $arg in $line" +@@ -205,6 +206,7 @@ + *.C) obj=`basename $src .C`.o; cc='$(CXX)';; + *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; + *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; ++ *.S) obj=`basename $src .S`.o; cc='$(CC)';; # Assembly + *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C + *) continue;; + esac +@@ -266,7 +268,7 @@ + *) sed -e " + 1i$NL/* Generated automatically from $config by makesetup. */ + /MARKER 1/i$NL$EXTDECLS +- + + /MARKER 2/i$NL$INITBITS + + " $config >config.c +diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c +--- orig/Modules/mathmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/mathmodule.c 2015-05-04 13:53:01.000000000 +0800 +@@ -55,6 +55,10 @@ + #include "Python.h" + #include "_math.h" + +#ifdef __APPLE__ -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EHFrame0: -+#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) -+.section .eh_frame,"a",@unwind -+#else -+.section .eh_frame,"a",@progbits -+#endif ++# include "TargetConditionals.h" ++#endif /* __APPLE__ */ + -+#ifdef HAVE_AS_X86_PCREL -+# define PCREL(X) X - . -+#else -+# define PCREL(X) X@rel -+#endif -+ -+/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ -+#define ADV(N, P) .byte 2, L(N)-L(P) -+ -+ .balign 8 -+L(CIE): -+ .set L(set0),L(ECIE)-L(SCIE) -+ .long L(set0) /* CIE Length */ -+L(SCIE): -+ .long 0 /* CIE Identifier Tag */ -+ .byte 1 /* CIE Version */ -+ .ascii "zR\0" /* CIE Augmentation */ -+ .byte 1 /* CIE Code Alignment Factor */ -+ .byte 0x78 /* CIE Data Alignment Factor */ -+ .byte 0x10 /* CIE RA Column */ -+ .byte 1 /* Augmentation size */ -+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -+ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp offset 8 */ -+ .byte 0x80+16, 1 /* DW_CFA_offset, %rip offset 1*-8 */ -+ .balign 8 -+L(ECIE): -+ -+ .set L(set1),L(EFDE1)-L(SFDE1) -+ .long L(set1) /* FDE Length */ -+L(SFDE1): -+ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW0)) /* Initial location */ -+ .long L(UW4)-L(UW0) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW1, UW0) -+ .byte 0xc, 6, 32 /* DW_CFA_def_cfa, %rbp 32 */ -+ .byte 0x80+6, 2 /* DW_CFA_offset, %rbp 2*-8 */ -+ ADV(UW2, UW1) -+ .byte 0xa /* DW_CFA_remember_state */ -+ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp 8 */ -+ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ -+ ADV(UW3, UW2) -+ .byte 0xb /* DW_CFA_restore_state */ -+ .balign 8 -+L(EFDE1): -+ -+ .set L(set2),L(EFDE2)-L(SFDE2) -+ .long L(set2) /* FDE Length */ -+L(SFDE2): -+ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW5)) /* Initial location */ -+ .long L(UW7)-L(UW5) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW6, UW5) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE2): -+ -+ .set L(set3),L(EFDE3)-L(SFDE3) -+ .long L(set3) /* FDE Length */ -+L(SFDE3): -+ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW8)) /* Initial location */ -+ .long L(UW11)-L(UW8) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW9, UW8) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ ADV(UW10, UW9) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset 8 */ -+L(EFDE3): -+ -+ .set L(set4),L(EFDE4)-L(SFDE4) -+ .long L(set4) /* FDE Length */ -+L(SFDE4): -+ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW12)) /* Initial location */ -+ .long L(UW14)-L(UW12) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW13, UW12) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE4): -+ -+ .set L(set5),L(EFDE5)-L(SFDE5) -+ .long L(set5) /* FDE Length */ -+L(SFDE5): -+ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW15)) /* Initial location */ -+ .long L(UW17)-L(UW15) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW16, UW15) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE5): + /* + sin(pi*x), giving accurate results for all finite x (especially x + integral or close to an integer). This is here for use in the +@@ -1746,6 +1750,16 @@ + return PyFloat_FromDouble(fabs(x)); + if (Py_IS_INFINITY(y)) + return PyFloat_FromDouble(fabs(y)); ++#if TARGET_OS_IPHONE ++ /* hypot(x, +/-NaN) returns NaN. ++ Most libc implementations get this right, but for some reason, ++ the iOS device implementation doesn't. ++ */ ++ if (Py_IS_NAN(x)) ++ return PyFloat_FromDouble(fabs(x)); ++ if (Py_IS_NAN(y)) ++ return PyFloat_FromDouble(fabs(y)); ++#endif + errno = 0; + PyFPE_START_PROTECT("in math_hypot", return 0); + r = hypot(x, y); +diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c +--- orig/Modules/posixmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/posixmodule.c 2015-05-04 12:44:34.000000000 +0800 +@@ -20,6 +20,8 @@ + # pragma weak statvfs + # pragma weak fstatvfs + ++# include "TargetConditionals.h" ++ + #endif /* __APPLE__ */ + + #define PY_SSIZE_T_CLEAN +@@ -180,6 +182,23 @@ + #endif /* __BORLANDC__ */ + #endif /* ! __WATCOMC__ || __QNX__ */ + ++// iOS *defines* a number of POSIX functions, but you can't use them ++// because iOS isn't a conventional multiprocess environment. ++#if TARGET_OS_IPHONE ++# undef HAVE_EXECV ++# undef HAVE_FORK ++# undef HAVE_FORK1 ++# undef HAVE_FORKPTY ++# undef HAVE_GETGROUPS ++# undef HAVE_SCHED_H ++# undef HAVE_SENDFILE ++# undef HAVE_SETPRIORITY ++# undef HAVE_SPAWNV ++# undef HAVE_WAIT ++# undef HAVE_WAIT3 ++# undef HAVE_WAIT4 ++# undef HAVE_WAITPID ++#endif /* TARGET_OS_IPHONE */ + + /*[clinic input] + module os +diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c +--- orig/Modules/pwdmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/pwdmodule.c 2015-05-02 23:37:06.000000000 +0800 +@@ -1,6 +1,10 @@ + + /* UNIX password file access module */ + +#ifdef __APPLE__ -+ .subsections_via_symbols -+#endif ++# include "TargetConditionals.h" ++#endif /* __APPLE__ */ + -+#endif /* __x86_64__ */ -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",@progbits + #include "Python.h" + #include "posixmodule.h" + +@@ -105,6 +109,21 @@ + return NULL; + } + if ((p = getpwuid(uid)) == NULL) { ++// iPhone has a "user" with UID 501, username "mobile"; but the simulator ++// doesn't reflect this. Generate a simulated response. ++#if TARGET_IPHONE_SIMULATOR ++ if (uid == 501) { ++ struct passwd mp; ++ mp.pw_name = "mobile"; ++ mp.pw_passwd = "/smx7MYTQIi2M"; ++ mp.pw_uid = 501; ++ mp.pw_gid = 501; ++ mp.pw_gecos = "Mobile User"; ++ mp.pw_dir = "/var/mobile"; ++ mp.pw_shell = "/bin/sh"; ++ return mkpwent(&mp); ++ } +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/win64.S modified/Modules/_ctypes/libffi_ios/x86/win64.S ---- orig/Modules/_ctypes/libffi_ios/x86/win64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/win64.S 2015-03-12 21:33:31.000000000 +0800 -@@ -0,0 +1,219 @@ -+#define LIBFFI_ASM -+#include -+#include -+#include + PyObject *uid_obj = _PyLong_FromUid(uid); + if (uid_obj == NULL) + return NULL; +@@ -136,6 +155,22 @@ + if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) + goto out; + if ((p = getpwnam(name)) == NULL) { ++// iPhone has a "user" with UID 501, username "mobile"; but the simulator ++// doesn't reflect this. Generate a simulated response. ++#if TARGET_IPHONE_SIMULATOR ++ if (strcmp(name, "mobile") == 0) { ++ struct passwd mp; ++ mp.pw_name = "mobile"; ++ mp.pw_passwd = "/smx7MYTQIi2M"; ++ mp.pw_uid = 501; ++ mp.pw_gid = 501; ++ mp.pw_gecos = "Mobile User"; ++ mp.pw_dir = "/var/mobile"; ++ mp.pw_shell = "/bin/sh"; ++ retval = mkpwent(&mp); ++ goto out; ++ } ++#endif + PyErr_Format(PyExc_KeyError, + "getpwnam(): name not found: %s", name); + goto out; +@@ -176,6 +211,7 @@ + } + #endif + ++ + static PyMethodDef pwd_methods[] = { + {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, + {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, +diff -Nru orig/Python/importlib.h modified/Python/importlib.h +--- orig/Python/importlib.h 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Python/importlib.h 2015-05-02 11:58:42.000000000 +0800 +@@ -2,84 +2,84 @@ + const unsigned char _Py_M__importlib[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, + 0,64,0,0,0,115,228,4,0,0,100,0,0,90,0,0, +- 100,163,0,90,1,0,100,4,0,100,5,0,132,0,0,90, +- 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, +- 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, +- 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, +- 6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16, +- 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, +- 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, +- 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, +- 0,100,25,0,100,26,0,132,0,0,90,12,0,100,27,0, +- 100,28,0,132,0,0,90,13,0,101,14,0,101,12,0,106, +- 15,0,131,1,0,90,16,0,71,100,29,0,100,30,0,132, +- 0,0,100,30,0,131,2,0,90,17,0,105,0,0,90,18, +- 0,105,0,0,90,19,0,71,100,31,0,100,32,0,132,0, +- 0,100,32,0,101,20,0,131,3,0,90,21,0,71,100,33, +- 0,100,34,0,132,0,0,100,34,0,131,2,0,90,22,0, +- 71,100,35,0,100,36,0,132,0,0,100,36,0,131,2,0, +- 90,23,0,71,100,37,0,100,38,0,132,0,0,100,38,0, +- 131,2,0,90,24,0,100,39,0,100,40,0,132,0,0,90, +- 25,0,100,41,0,100,42,0,132,0,0,90,26,0,100,43, +- 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, +- 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, +- 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, +- 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, +- 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, +- 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, +- 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, +- 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, +- 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, +- 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, +- 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, +- 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, +- 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, +- 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, +- 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, +- 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, +- 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, +- 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, +- 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, +- 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, +- 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, +- 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, ++ 100,164,0,90,1,0,100,5,0,100,6,0,132,0,0,90, ++ 2,0,100,7,0,100,8,0,132,0,0,90,3,0,100,9, ++ 0,100,10,0,132,0,0,90,4,0,100,11,0,100,12,0, ++ 132,0,0,90,5,0,100,13,0,100,14,0,132,0,0,90, ++ 6,0,100,15,0,100,16,0,132,0,0,90,7,0,100,17, ++ 0,100,18,0,132,0,0,90,8,0,100,19,0,100,20,0, ++ 132,0,0,90,9,0,100,21,0,100,22,0,132,0,0,90, ++ 10,0,100,23,0,100,24,0,100,25,0,132,1,0,90,11, ++ 0,100,26,0,100,27,0,132,0,0,90,12,0,100,28,0, ++ 100,29,0,132,0,0,90,13,0,101,14,0,101,12,0,106, ++ 15,0,131,1,0,90,16,0,71,100,30,0,100,31,0,132, ++ 0,0,100,31,0,131,2,0,90,17,0,105,0,0,90,18, ++ 0,105,0,0,90,19,0,71,100,32,0,100,33,0,132,0, ++ 0,100,33,0,101,20,0,131,3,0,90,21,0,71,100,34, ++ 0,100,35,0,132,0,0,100,35,0,131,2,0,90,22,0, ++ 71,100,36,0,100,37,0,132,0,0,100,37,0,131,2,0, ++ 90,23,0,71,100,38,0,100,39,0,132,0,0,100,39,0, ++ 131,2,0,90,24,0,100,40,0,100,41,0,132,0,0,90, ++ 25,0,100,42,0,100,43,0,132,0,0,90,26,0,100,44, ++ 0,100,45,0,132,0,0,90,27,0,100,46,0,106,28,0, ++ 100,47,0,100,48,0,131,2,0,100,49,0,23,90,29,0, ++ 101,30,0,106,31,0,101,29,0,100,48,0,131,2,0,90, ++ 32,0,100,50,0,90,33,0,100,51,0,103,1,0,90,34, ++ 0,100,52,0,103,1,0,90,35,0,100,53,0,103,1,0, ++ 90,36,0,100,54,0,100,55,0,100,56,0,132,1,0,90, ++ 37,0,100,57,0,100,58,0,132,0,0,90,38,0,100,59, ++ 0,100,60,0,132,0,0,90,39,0,100,61,0,100,62,0, ++ 132,0,0,90,40,0,100,63,0,100,64,0,100,65,0,100, ++ 66,0,132,0,1,90,41,0,100,67,0,100,68,0,132,0, ++ 0,90,42,0,100,69,0,100,70,0,132,0,0,90,43,0, ++ 100,71,0,100,72,0,132,0,0,90,44,0,100,73,0,100, ++ 74,0,132,0,0,90,45,0,100,75,0,100,76,0,132,0, ++ 0,90,46,0,100,54,0,100,54,0,100,54,0,100,77,0, ++ 100,78,0,132,3,0,90,47,0,100,54,0,100,54,0,100, ++ 54,0,100,79,0,100,80,0,132,3,0,90,48,0,100,81, ++ 0,100,81,0,100,82,0,100,83,0,132,2,0,90,49,0, ++ 100,84,0,100,85,0,132,0,0,90,50,0,100,86,0,100, ++ 87,0,132,0,0,90,51,0,71,100,88,0,100,89,0,132, ++ 0,0,100,89,0,131,2,0,90,52,0,71,100,90,0,100, ++ 91,0,132,0,0,100,91,0,131,2,0,90,53,0,100,92, ++ 0,100,54,0,100,93,0,100,54,0,100,94,0,100,95,0, + 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, +- 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, +- 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, +- 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, +- 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,100, +- 53,0,100,103,0,100,104,0,132,1,0,90,60,0,71,100, +- 105,0,100,106,0,132,0,0,100,106,0,131,2,0,90,61, +- 0,71,100,107,0,100,108,0,132,0,0,100,108,0,131,2, +- 0,90,62,0,71,100,109,0,100,110,0,132,0,0,100,110, +- 0,131,2,0,90,63,0,71,100,111,0,100,112,0,132,0, +- 0,100,112,0,131,2,0,90,64,0,71,100,113,0,100,114, +- 0,132,0,0,100,114,0,101,64,0,131,3,0,90,65,0, +- 71,100,115,0,100,116,0,132,0,0,100,116,0,131,2,0, +- 90,66,0,71,100,117,0,100,118,0,132,0,0,100,118,0, +- 101,66,0,101,65,0,131,4,0,90,67,0,71,100,119,0, +- 100,120,0,132,0,0,100,120,0,101,66,0,101,64,0,131, +- 4,0,90,68,0,103,0,0,90,69,0,71,100,121,0,100, +- 122,0,132,0,0,100,122,0,131,2,0,90,70,0,71,100, +- 123,0,100,124,0,132,0,0,100,124,0,131,2,0,90,71, +- 0,71,100,125,0,100,126,0,132,0,0,100,126,0,131,2, +- 0,90,72,0,71,100,127,0,100,128,0,132,0,0,100,128, +- 0,131,2,0,90,73,0,71,100,129,0,100,130,0,132,0, +- 0,100,130,0,131,2,0,90,74,0,71,100,131,0,100,132, +- 0,132,0,0,100,132,0,131,2,0,90,75,0,100,133,0, +- 100,134,0,132,0,0,90,76,0,100,135,0,100,136,0,132, +- 0,0,90,77,0,100,53,0,100,137,0,100,138,0,132,1, +- 0,90,78,0,100,139,0,100,140,0,132,0,0,90,79,0, +- 100,141,0,90,80,0,101,80,0,100,142,0,23,90,81,0, +- 100,143,0,100,144,0,132,0,0,90,82,0,100,145,0,100, +- 146,0,132,0,0,90,83,0,100,53,0,100,80,0,100,147, +- 0,100,148,0,132,2,0,90,84,0,100,149,0,100,150,0, +- 132,0,0,90,85,0,100,151,0,100,152,0,132,0,0,90, +- 86,0,100,153,0,100,154,0,132,0,0,90,87,0,100,53, +- 0,100,53,0,102,0,0,100,80,0,100,155,0,100,156,0, +- 132,4,0,90,88,0,100,157,0,100,158,0,132,0,0,90, +- 89,0,100,159,0,100,160,0,132,0,0,90,90,0,100,161, +- 0,100,162,0,132,0,0,90,91,0,100,53,0,83,41,164, ++ 54,0,100,96,0,100,54,0,100,97,0,101,56,0,100,98, ++ 0,100,99,0,132,1,2,90,57,0,100,54,0,100,54,0, ++ 100,100,0,100,101,0,132,2,0,90,58,0,71,100,102,0, ++ 100,103,0,132,0,0,100,103,0,131,2,0,90,59,0,100, ++ 54,0,100,104,0,100,105,0,132,1,0,90,60,0,71,100, ++ 106,0,100,107,0,132,0,0,100,107,0,131,2,0,90,61, ++ 0,71,100,108,0,100,109,0,132,0,0,100,109,0,131,2, ++ 0,90,62,0,71,100,110,0,100,111,0,132,0,0,100,111, ++ 0,131,2,0,90,63,0,71,100,112,0,100,113,0,132,0, ++ 0,100,113,0,131,2,0,90,64,0,71,100,114,0,100,115, ++ 0,132,0,0,100,115,0,101,64,0,131,3,0,90,65,0, ++ 71,100,116,0,100,117,0,132,0,0,100,117,0,131,2,0, ++ 90,66,0,71,100,118,0,100,119,0,132,0,0,100,119,0, ++ 101,66,0,101,65,0,131,4,0,90,67,0,71,100,120,0, ++ 100,121,0,132,0,0,100,121,0,101,66,0,101,64,0,131, ++ 4,0,90,68,0,103,0,0,90,69,0,71,100,122,0,100, ++ 123,0,132,0,0,100,123,0,131,2,0,90,70,0,71,100, ++ 124,0,100,125,0,132,0,0,100,125,0,131,2,0,90,71, ++ 0,71,100,126,0,100,127,0,132,0,0,100,127,0,131,2, ++ 0,90,72,0,71,100,128,0,100,129,0,132,0,0,100,129, ++ 0,131,2,0,90,73,0,71,100,130,0,100,131,0,132,0, ++ 0,100,131,0,131,2,0,90,74,0,71,100,132,0,100,133, ++ 0,132,0,0,100,133,0,131,2,0,90,75,0,100,134,0, ++ 100,135,0,132,0,0,90,76,0,100,136,0,100,137,0,132, ++ 0,0,90,77,0,100,54,0,100,138,0,100,139,0,132,1, ++ 0,90,78,0,100,140,0,100,141,0,132,0,0,90,79,0, ++ 100,142,0,90,80,0,101,80,0,100,143,0,23,90,81,0, ++ 100,144,0,100,145,0,132,0,0,90,82,0,100,146,0,100, ++ 147,0,132,0,0,90,83,0,100,54,0,100,81,0,100,148, ++ 0,100,149,0,132,2,0,90,84,0,100,150,0,100,151,0, ++ 132,0,0,90,85,0,100,152,0,100,153,0,132,0,0,90, ++ 86,0,100,154,0,100,155,0,132,0,0,90,87,0,100,54, ++ 0,100,54,0,102,0,0,100,81,0,100,156,0,100,157,0, ++ 132,4,0,90,88,0,100,158,0,100,159,0,132,0,0,90, ++ 89,0,100,160,0,100,161,0,132,0,0,90,90,0,100,162, ++ 0,100,163,0,132,0,0,90,91,0,100,54,0,83,41,165, + 97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, + 114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101, +@@ -102,2102 +102,3127 @@ + 32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118, + 101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109, + 111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99, +- 121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0, +- 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, +- 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, +- 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, +- 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, +- 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, +- 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, +- 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, +- 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, +- 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, +- 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, +- 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, +- 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4, +- 0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101, +- 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, +- 116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95, +- 99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122, +- 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, +- 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, +- 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, +- 100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32, +- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, +- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, +- 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0, +- 115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8, +- 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, +- 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, +- 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, +- 83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114, +- 101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0, +- 0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99, +- 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, +- 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131, +- 1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131, +- 2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97, +- 32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32, +- 116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110, +- 46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0, +- 0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116, +- 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7, +- 95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0, +- 0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0, +- 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, +- 0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0, +- 83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, +- 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, +- 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, +- 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, +- 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, +- 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, +- 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, +- 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, +- 0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1, +- 0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1, +- 0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101, +- 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, +- 46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0, +- 0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1, +- 0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0, +- 145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6, +- 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, +- 97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112, +- 97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0, +- 0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104, +- 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, +- 108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116, +- 104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112, +- 97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95, +- 106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15, +- 1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, +- 0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0, +- 116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114, +- 52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3, +- 0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0, +- 102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0, +- 68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0, +- 114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100, +- 1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1, +- 0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124, +- 0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99, +- 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, +- 104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90, +- 8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108, +- 101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116, +- 105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115, +- 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, +- 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, +- 105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112, +- 108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1, +- 24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0, +- 0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, +- 0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1, +- 0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116, +- 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, +- 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, +- 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, +- 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, +- 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, +- 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, +- 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, +- 116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0, +- 0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95, +- 112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0, +- 0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0, +- 0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58, +- 0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125, +- 2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0, +- 1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106, +- 2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122, +- 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, +- 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, +- 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, +- 101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218, +- 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100, +- 101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9, +- 115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95, +- 105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0, +- 115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114, +- 43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, +- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82, +- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, +- 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, +- 128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,12,95,112,97,116,104,95,105,115,102,105,108,101,87,0, +- 0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1, +- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, +- 0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0, +- 0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0, +- 124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101, +- 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, +- 46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0, +- 0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100, +- 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, +- 116,104,95,105,115,100,105,114,92,0,0,0,115,6,0,0, +- 0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0, +- 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, +- 0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0, +- 0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0, +- 125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106, +- 4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66, +- 124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0, +- 116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143, +- 20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1, +- 0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3, +- 0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0, +- 107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106, +- 12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11, +- 0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130, +- 0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66, +- 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, +- 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, +- 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, +- 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, +- 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, +- 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, +- 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, +- 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, +- 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, +- 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, +- 46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119, +- 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, +- 114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69, +- 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, +- 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, +- 101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108, +- 97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107, +- 41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0, +- 0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100, +- 218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116, +- 111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24, +- 1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3, +- 1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0, +- 0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0, +- 0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100, +- 3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116, +- 0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1, +- 0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0, +- 131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0, +- 0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0, +- 1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32, +- 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, +- 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, +- 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, +- 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, +- 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, +- 100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116, +- 114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97, +- 116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117, +- 112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108, +- 100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,5,95,119,114,97,112,121,0,0,0, +- 115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0, +- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,116, +- 1,0,131,1,0,124,0,0,131,1,0,83,41,1,78,41, +- 2,218,4,116,121,112,101,114,7,0,0,0,41,1,218,4, +- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, +- 129,0,0,0,115,2,0,0,0,0,1,114,68,0,0,0, ++ 121,103,119,105,110,218,6,100,97,114,119,105,110,218,3,105, ++ 111,115,99,0,0,0,0,0,0,0,0,1,0,0,0,2, ++ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, ++ 1,0,106,2,0,116,3,0,131,1,0,114,33,0,100,1, ++ 0,100,2,0,132,0,0,125,0,0,110,12,0,100,3,0, ++ 100,2,0,132,0,0,125,0,0,124,0,0,83,41,4,78, + 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,58,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, +- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, +- 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, +- 100,8,0,83,41,9,218,13,95,77,97,110,97,103,101,82, +- 101,108,111,97,100,122,63,77,97,110,97,103,101,115,32,116, +- 104,101,32,112,111,115,115,105,98,108,101,32,99,108,101,97, +- 110,45,117,112,32,111,102,32,115,121,115,46,109,111,100,117, +- 108,101,115,32,102,111,114,32,108,111,97,100,95,109,111,100, +- 117,108,101,40,41,46,99,2,0,0,0,0,0,0,0,2, ++ 0,83,0,0,0,115,13,0,0,0,100,1,0,116,0,0, ++ 106,1,0,107,6,0,83,41,2,122,53,84,114,117,101,32, ++ 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, ++ 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, ++ 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, ++ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, ++ 75,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, ++ 110,169,0,114,5,0,0,0,114,5,0,0,0,250,29,60, ++ 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, ++ 46,95,98,111,111,116,115,116,114,97,112,62,218,11,95,114, ++ 101,108,97,120,95,99,97,115,101,30,0,0,0,115,2,0, ++ 0,0,0,2,122,37,95,109,97,107,101,95,114,101,108,97, ++ 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, ++ 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, ++ 115,4,0,0,0,100,1,0,83,41,2,122,53,84,114,117, ++ 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, ++ 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, ++ 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, ++ 121,46,70,114,5,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,7,0,0, ++ 0,34,0,0,0,115,2,0,0,0,0,2,41,4,218,3, ++ 115,121,115,218,8,112,108,97,116,102,111,114,109,218,10,115, ++ 116,97,114,116,115,119,105,116,104,218,27,95,67,65,83,69, ++ 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, ++ 84,70,79,82,77,83,41,1,114,7,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,16,95,109, ++ 97,107,101,95,114,101,108,97,120,95,99,97,115,101,28,0, ++ 0,0,115,8,0,0,0,0,1,18,1,15,4,12,3,114, ++ 12,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, ++ 0,3,0,0,0,67,0,0,0,115,26,0,0,0,116,0, ++ 0,124,0,0,131,1,0,100,1,0,64,106,1,0,100,2, ++ 0,100,3,0,131,2,0,83,41,4,122,42,67,111,110,118, ++ 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, ++ 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, ++ 110,100,105,97,110,46,108,3,0,0,0,255,127,255,127,3, ++ 0,233,4,0,0,0,218,6,108,105,116,116,108,101,41,2, ++ 218,3,105,110,116,218,8,116,111,95,98,121,116,101,115,41, ++ 1,218,1,120,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,7,95,119,95,108,111,110,103,40,0,0,0, ++ 115,2,0,0,0,0,2,114,18,0,0,0,99,1,0,0, ++ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, ++ 0,115,16,0,0,0,116,0,0,106,1,0,124,0,0,100, ++ 1,0,131,2,0,83,41,2,122,47,67,111,110,118,101,114, ++ 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, ++ 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, ++ 32,105,110,116,101,103,101,114,46,114,14,0,0,0,41,2, ++ 114,15,0,0,0,218,10,102,114,111,109,95,98,121,116,101, ++ 115,41,1,90,9,105,110,116,95,98,121,116,101,115,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,7,95, ++ 114,95,108,111,110,103,45,0,0,0,115,2,0,0,0,0, ++ 2,114,20,0,0,0,99,0,0,0,0,0,0,0,0,1, ++ 0,0,0,3,0,0,0,71,0,0,0,115,26,0,0,0, ++ 116,0,0,106,1,0,100,1,0,100,2,0,132,0,0,124, ++ 0,0,68,131,1,0,131,1,0,83,41,3,122,31,82,101, ++ 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, ++ 46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, ++ 0,0,115,37,0,0,0,103,0,0,124,0,0,93,27,0, ++ 125,1,0,124,1,0,114,6,0,124,1,0,106,0,0,116, ++ 1,0,131,1,0,145,2,0,113,6,0,83,114,5,0,0, ++ 0,41,2,218,6,114,115,116,114,105,112,218,15,112,97,116, ++ 104,95,115,101,112,97,114,97,116,111,114,115,41,2,218,2, ++ 46,48,218,4,112,97,114,116,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,250,10,60,108,105,115,116,99,111, ++ 109,112,62,52,0,0,0,115,2,0,0,0,9,1,122,30, ++ 95,112,97,116,104,95,106,111,105,110,46,60,108,111,99,97, ++ 108,115,62,46,60,108,105,115,116,99,111,109,112,62,41,2, ++ 218,8,112,97,116,104,95,115,101,112,218,4,106,111,105,110, ++ 41,1,218,10,112,97,116,104,95,112,97,114,116,115,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, ++ 112,97,116,104,95,106,111,105,110,50,0,0,0,115,4,0, ++ 0,0,0,2,15,1,114,29,0,0,0,99,1,0,0,0, ++ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, ++ 115,134,0,0,0,116,0,0,116,1,0,131,1,0,100,1, ++ 0,107,2,0,114,52,0,124,0,0,106,2,0,116,3,0, ++ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, ++ 1,0,124,3,0,102,2,0,83,120,69,0,116,4,0,124, ++ 0,0,131,1,0,68,93,55,0,125,4,0,124,4,0,116, ++ 1,0,107,6,0,114,65,0,124,0,0,106,5,0,124,4, ++ 0,100,2,0,100,1,0,131,1,1,92,2,0,125,1,0, ++ 125,3,0,124,1,0,124,3,0,102,2,0,83,113,65,0, ++ 87,100,3,0,124,0,0,102,2,0,83,41,4,122,32,82, ++ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, ++ 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, ++ 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, ++ 41,6,218,3,108,101,110,114,22,0,0,0,218,10,114,112, ++ 97,114,116,105,116,105,111,110,114,26,0,0,0,218,8,114, ++ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, ++ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, ++ 95,218,4,116,97,105,108,114,17,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,11,95,112,97, ++ 116,104,95,115,112,108,105,116,56,0,0,0,115,16,0,0, ++ 0,0,2,18,1,24,1,10,1,19,1,12,1,27,1,14, ++ 1,114,39,0,0,0,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, +- 124,1,0,124,0,0,95,0,0,100,0,0,83,41,1,78, +- 41,1,218,5,95,110,97,109,101,41,2,218,4,115,101,108, +- 102,114,67,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,8,95,95,105,110,105,116,95,95,141, +- 0,0,0,115,2,0,0,0,0,1,122,22,95,77,97,110, +- 97,103,101,82,101,108,111,97,100,46,95,95,105,110,105,116, +- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,25,0,0,0,124,0,0,106, +- 0,0,116,1,0,106,2,0,107,6,0,124,0,0,95,3, +- 0,100,0,0,83,41,1,78,41,4,114,70,0,0,0,114, +- 7,0,0,0,218,7,109,111,100,117,108,101,115,218,10,95, +- 105,115,95,114,101,108,111,97,100,41,1,114,71,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 9,95,95,101,110,116,101,114,95,95,144,0,0,0,115,2, +- 0,0,0,0,1,122,23,95,77,97,110,97,103,101,82,101, +- 108,111,97,100,46,95,95,101,110,116,101,114,95,95,99,1, +- 0,0,0,0,0,0,0,2,0,0,0,12,0,0,0,71, +- 0,0,0,115,80,0,0,0,116,0,0,100,1,0,100,2, +- 0,132,0,0,124,1,0,68,131,1,0,131,1,0,114,76, +- 0,124,0,0,106,1,0,12,114,76,0,121,17,0,116,2, +- 0,106,3,0,124,0,0,106,4,0,61,87,113,76,0,4, +- 116,5,0,107,10,0,114,72,0,1,1,1,89,113,76,0, +- 88,110,0,0,100,0,0,83,41,3,78,99,1,0,0,0, +- 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, +- 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, +- 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, +- 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,218, +- 3,97,114,103,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,250,9,60,103,101,110,101,120,112,114,62,148,0, +- 0,0,115,2,0,0,0,6,0,122,41,95,77,97,110,97, +- 103,101,82,101,108,111,97,100,46,95,95,101,120,105,116,95, +- 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, +- 120,112,114,62,41,6,218,3,97,110,121,114,74,0,0,0, +- 114,7,0,0,0,114,73,0,0,0,114,70,0,0,0,218, +- 8,75,101,121,69,114,114,111,114,41,2,114,71,0,0,0, +- 218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,8,95,95,101,120,105,116,95,95,147, +- 0,0,0,115,10,0,0,0,0,1,35,1,3,1,17,1, +- 13,1,122,22,95,77,97,110,97,103,101,82,101,108,111,97, +- 100,46,95,95,101,120,105,116,95,95,78,41,7,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,114,72,0,0,0,114,75,0,0,0,114,81,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,69,0,0,0,137,0,0,0,115,8,0, +- 0,0,12,2,6,2,12,3,12,3,114,69,0,0,0,99, +- 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +- 64,0,0,0,115,16,0,0,0,101,0,0,90,1,0,100, +- 0,0,90,2,0,100,1,0,83,41,2,218,14,95,68,101, +- 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,57, +- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,82,0,0,0,162,0,0,0,115,2,0,0,0,12, +- 1,114,82,0,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,64,0,0,0,115,82,0,0,0, +- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, +- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, +- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, +- 132,0,0,90,6,0,100,8,0,100,9,0,132,0,0,90, +- 7,0,100,10,0,100,11,0,132,0,0,90,8,0,100,12, +- 0,83,41,13,218,11,95,77,111,100,117,108,101,76,111,99, +- 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, +- 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, +- 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, +- 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, +- 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, +- 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, +- 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, +- 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, +- 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, +- 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, +- 0,115,70,0,0,0,116,0,0,106,1,0,131,0,0,124, +- 0,0,95,2,0,116,0,0,106,1,0,131,0,0,124,0, +- 0,95,3,0,124,1,0,124,0,0,95,4,0,100,0,0, +- 124,0,0,95,5,0,100,1,0,124,0,0,95,6,0,100, +- 1,0,124,0,0,95,7,0,100,0,0,83,41,2,78,233, +- 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, +- 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, +- 108,111,99,107,218,6,119,97,107,101,117,112,114,67,0,0, +- 0,218,5,111,119,110,101,114,218,5,99,111,117,110,116,218, +- 7,119,97,105,116,101,114,115,41,2,114,71,0,0,0,114, +- 67,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,172,0,0,0,115,12,0,0, +- 0,0,1,15,1,15,1,9,1,9,1,9,1,122,20,95, +- 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, +- 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, +- 2,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, +- 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,125, +- 2,0,120,59,0,116,3,0,106,4,0,124,2,0,131,1, +- 0,125,3,0,124,3,0,100,0,0,107,8,0,114,55,0, +- 100,1,0,83,124,3,0,106,2,0,125,2,0,124,2,0, +- 124,1,0,107,2,0,114,24,0,100,2,0,83,113,24,0, +- 100,0,0,83,41,3,78,70,84,41,5,114,85,0,0,0, +- 218,9,103,101,116,95,105,100,101,110,116,114,88,0,0,0, +- 218,12,95,98,108,111,99,107,105,110,103,95,111,110,218,3, +- 103,101,116,41,4,114,71,0,0,0,218,2,109,101,218,3, +- 116,105,100,114,86,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,12,104,97,115,95,100,101,97, +- 100,108,111,99,107,180,0,0,0,115,18,0,0,0,0,2, +- 12,1,9,1,3,1,15,1,12,1,4,1,9,1,12,1, +- 122,24,95,77,111,100,117,108,101,76,111,99,107,46,104,97, +- 115,95,100,101,97,100,108,111,99,107,99,1,0,0,0,0, +- 0,0,0,2,0,0,0,17,0,0,0,67,0,0,0,115, +- 214,0,0,0,116,0,0,106,1,0,131,0,0,125,1,0, +- 124,0,0,116,2,0,124,1,0,60,122,177,0,120,170,0, +- 124,0,0,106,3,0,143,130,0,1,124,0,0,106,4,0, +- 100,1,0,107,2,0,115,68,0,124,0,0,106,5,0,124, +- 1,0,107,2,0,114,96,0,124,1,0,124,0,0,95,5, +- 0,124,0,0,4,106,4,0,100,2,0,55,2,95,4,0, +- 100,3,0,83,124,0,0,106,6,0,131,0,0,114,127,0, +- 116,7,0,100,4,0,124,0,0,22,131,1,0,130,1,0, +- 110,0,0,124,0,0,106,8,0,106,9,0,100,5,0,131, +- 1,0,114,163,0,124,0,0,4,106,10,0,100,2,0,55, +- 2,95,10,0,110,0,0,87,100,6,0,81,88,124,0,0, +- 106,8,0,106,9,0,131,0,0,1,124,0,0,106,8,0, +- 106,11,0,131,0,0,1,113,28,0,87,100,6,0,116,2, +- 0,124,1,0,61,88,100,6,0,83,41,7,122,185,10,32, +- 32,32,32,32,32,32,32,65,99,113,117,105,114,101,32,116, +- 104,101,32,109,111,100,117,108,101,32,108,111,99,107,46,32, +- 32,73,102,32,97,32,112,111,116,101,110,116,105,97,108,32, +- 100,101,97,100,108,111,99,107,32,105,115,32,100,101,116,101, +- 99,116,101,100,44,10,32,32,32,32,32,32,32,32,97,32, +- 95,68,101,97,100,108,111,99,107,69,114,114,111,114,32,105, +- 115,32,114,97,105,115,101,100,46,10,32,32,32,32,32,32, +- 32,32,79,116,104,101,114,119,105,115,101,44,32,116,104,101, +- 32,108,111,99,107,32,105,115,32,97,108,119,97,121,115,32, +- 97,99,113,117,105,114,101,100,32,97,110,100,32,84,114,117, +- 101,32,105,115,32,114,101,116,117,114,110,101,100,46,10,32, +- 32,32,32,32,32,32,32,114,84,0,0,0,114,29,0,0, +- 0,84,122,23,100,101,97,100,108,111,99,107,32,100,101,116, +- 101,99,116,101,100,32,98,121,32,37,114,70,78,41,12,114, +- 85,0,0,0,114,91,0,0,0,114,92,0,0,0,114,86, +- 0,0,0,114,89,0,0,0,114,88,0,0,0,114,96,0, +- 0,0,114,82,0,0,0,114,87,0,0,0,218,7,97,99, +- 113,117,105,114,101,114,90,0,0,0,218,7,114,101,108,101, +- 97,115,101,41,2,114,71,0,0,0,114,95,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,97, +- 0,0,0,192,0,0,0,115,32,0,0,0,0,6,12,1, +- 10,1,3,1,3,1,10,1,30,1,9,1,15,1,4,1, +- 12,1,19,1,18,1,24,2,13,1,20,2,122,19,95,77, +- 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, +- 101,99,1,0,0,0,0,0,0,0,2,0,0,0,10,0, +- 0,0,67,0,0,0,115,165,0,0,0,116,0,0,106,1, +- 0,131,0,0,125,1,0,124,0,0,106,2,0,143,138,0, +- 1,124,0,0,106,3,0,124,1,0,107,3,0,114,52,0, +- 116,4,0,100,1,0,131,1,0,130,1,0,110,0,0,124, +- 0,0,106,5,0,100,2,0,107,4,0,115,73,0,116,6, +- 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, +- 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, +- 155,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, +- 0,114,155,0,124,0,0,4,106,7,0,100,3,0,56,2, +- 95,7,0,124,0,0,106,8,0,106,9,0,131,0,0,1, +- 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, +- 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, +- 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, +- 108,111,99,107,114,84,0,0,0,114,29,0,0,0,41,10, +- 114,85,0,0,0,114,91,0,0,0,114,86,0,0,0,114, +- 88,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, +- 111,114,114,89,0,0,0,218,14,65,115,115,101,114,116,105, +- 111,110,69,114,114,111,114,114,90,0,0,0,114,87,0,0, +- 0,114,98,0,0,0,41,2,114,71,0,0,0,114,95,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,98,0,0,0,217,0,0,0,115,22,0,0,0,0, +- 1,12,1,10,1,15,1,15,1,21,1,15,1,15,1,9, +- 1,9,1,15,1,122,19,95,77,111,100,117,108,101,76,111, +- 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, +- 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, +- 25,0,0,0,100,1,0,106,0,0,124,0,0,106,1,0, +- 116,2,0,124,0,0,131,1,0,131,2,0,83,41,2,78, +- 122,23,95,77,111,100,117,108,101,76,111,99,107,40,123,33, +- 114,125,41,32,97,116,32,123,125,41,3,114,47,0,0,0, +- 114,67,0,0,0,114,48,0,0,0,41,1,114,71,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,8,95,95,114,101,112,114,95,95,230,0,0,0,115,2, +- 0,0,0,0,1,122,20,95,77,111,100,117,108,101,76,111, +- 99,107,46,95,95,114,101,112,114,95,95,78,41,9,114,57, +- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, +- 0,0,114,72,0,0,0,114,96,0,0,0,114,97,0,0, +- 0,114,98,0,0,0,114,101,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 83,0,0,0,166,0,0,0,115,12,0,0,0,12,4,6, +- 2,12,8,12,12,12,25,12,13,114,83,0,0,0,99,0, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, +- 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, +- 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, +- 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, +- 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, +- 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, +- 218,16,95,68,117,109,109,121,77,111,100,117,108,101,76,111, +- 99,107,122,86,65,32,115,105,109,112,108,101,32,95,77,111, +- 100,117,108,101,76,111,99,107,32,101,113,117,105,118,97,108, +- 101,110,116,32,102,111,114,32,80,121,116,104,111,110,32,98, +- 117,105,108,100,115,32,119,105,116,104,111,117,116,10,32,32, +- 32,32,109,117,108,116,105,45,116,104,114,101,97,100,105,110, +- 103,32,115,117,112,112,111,114,116,46,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, +- 22,0,0,0,124,1,0,124,0,0,95,0,0,100,1,0, +- 124,0,0,95,1,0,100,0,0,83,41,2,78,114,84,0, +- 0,0,41,2,114,67,0,0,0,114,89,0,0,0,41,2, +- 114,71,0,0,0,114,67,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,72,0,0,0,238,0, +- 0,0,115,4,0,0,0,0,1,9,1,122,25,95,68,117, +- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, +- 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1, +- 0,0,0,3,0,0,0,67,0,0,0,115,19,0,0,0, +- 124,0,0,4,106,0,0,100,1,0,55,2,95,0,0,100, +- 2,0,83,41,3,78,114,29,0,0,0,84,41,1,114,89, +- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,97,0,0,0,242,0, +- 0,0,115,4,0,0,0,0,1,15,1,122,24,95,68,117, +- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,99, +- 113,117,105,114,101,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,67,0,0,0,115,49,0,0,0,124, +- 0,0,106,0,0,100,1,0,107,2,0,114,30,0,116,1, +- 0,100,2,0,131,1,0,130,1,0,110,0,0,124,0,0, +- 4,106,0,0,100,3,0,56,2,95,0,0,100,0,0,83, +- 41,4,78,114,84,0,0,0,122,31,99,97,110,110,111,116, ++ 116,0,0,106,1,0,124,0,0,131,1,0,83,41,1,122, ++ 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, ++ 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, ++ 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, ++ 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, ++ 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, ++ 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, ++ 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, ++ 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,41, ++ 2,114,4,0,0,0,90,4,115,116,97,116,41,1,114,36, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,10,95,112,97,116,104,95,115,116,97,116,68,0, ++ 0,0,115,2,0,0,0,0,7,114,40,0,0,0,99,2, ++ 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,67, ++ 0,0,0,115,58,0,0,0,121,16,0,116,0,0,124,0, ++ 0,131,1,0,125,2,0,87,110,22,0,4,116,1,0,107, ++ 10,0,114,40,0,1,1,1,100,1,0,83,89,110,1,0, ++ 88,124,2,0,106,2,0,100,2,0,64,124,1,0,107,2, ++ 0,83,41,3,122,49,84,101,115,116,32,119,104,101,116,104, ++ 101,114,32,116,104,101,32,112,97,116,104,32,105,115,32,116, ++ 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, ++ 101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,114, ++ 40,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, ++ 116,95,109,111,100,101,41,3,114,36,0,0,0,218,4,109, ++ 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,18,95, ++ 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, ++ 101,78,0,0,0,115,10,0,0,0,0,2,3,1,16,1, ++ 13,1,9,1,114,44,0,0,0,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,13, ++ 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,83, ++ 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, ++ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, ++ 108,101,46,105,0,128,0,0,41,1,114,44,0,0,0,41, ++ 1,114,36,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102, ++ 105,108,101,87,0,0,0,115,2,0,0,0,0,2,114,45, ++ 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, ++ 3,0,0,0,67,0,0,0,115,34,0,0,0,124,0,0, ++ 115,21,0,116,0,0,106,1,0,131,0,0,125,0,0,110, ++ 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, ++ 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, ++ 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, ++ 46,105,0,64,0,0,41,3,114,4,0,0,0,218,6,103, ++ 101,116,99,119,100,114,44,0,0,0,41,1,114,36,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,11,95,112,97,116,104,95,105,115,100,105,114,92,0,0, ++ 0,115,6,0,0,0,0,2,6,1,15,1,114,47,0,0, ++ 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, ++ 0,0,0,17,0,0,0,67,0,0,0,115,192,0,0,0, ++ 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, ++ 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, ++ 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, ++ 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, ++ 4,0,121,60,0,116,7,0,106,8,0,124,4,0,100,3, ++ 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, ++ 124,1,0,131,1,0,1,87,100,4,0,81,88,116,2,0, ++ 106,10,0,124,3,0,124,0,0,131,2,0,1,87,110,59, ++ 0,4,116,11,0,107,10,0,114,187,0,1,1,1,121,17, ++ 0,116,2,0,106,12,0,124,3,0,131,1,0,1,87,110, ++ 18,0,4,116,11,0,107,10,0,114,179,0,1,1,1,89, ++ 110,1,0,88,130,0,0,89,110,1,0,88,100,4,0,83, ++ 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, ++ 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, ++ 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, ++ 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, ++ 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, ++ 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, ++ 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, ++ 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, ++ 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, ++ 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, ++ 109,112,116,101,100,46,122,5,123,125,46,123,125,105,182,1, ++ 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, ++ 116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110, ++ 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, ++ 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, ++ 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, ++ 7,114,101,112,108,97,99,101,114,41,0,0,0,90,6,117, ++ 110,108,105,110,107,41,6,114,36,0,0,0,218,4,100,97, ++ 116,97,114,43,0,0,0,90,8,112,97,116,104,95,116,109, ++ 112,90,2,102,100,218,4,102,105,108,101,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,13,95,119,114,105, ++ 116,101,95,97,116,111,109,105,99,99,0,0,0,115,26,0, ++ 0,0,0,5,24,1,9,1,33,1,3,3,21,1,19,1, ++ 20,1,13,1,3,1,17,1,13,1,5,1,114,56,0,0, ++ 0,99,2,0,0,0,0,0,0,0,3,0,0,0,7,0, ++ 0,0,67,0,0,0,115,95,0,0,0,120,69,0,100,1, ++ 0,100,2,0,100,3,0,100,4,0,103,4,0,68,93,49, ++ 0,125,2,0,116,0,0,124,1,0,124,2,0,131,2,0, ++ 114,19,0,116,1,0,124,0,0,124,2,0,116,2,0,124, ++ 1,0,124,2,0,131,2,0,131,3,0,1,113,19,0,113, ++ 19,0,87,124,0,0,106,3,0,106,4,0,124,1,0,106, ++ 3,0,131,1,0,1,100,5,0,83,41,6,122,47,83,105, ++ 109,112,108,101,32,115,117,98,115,116,105,116,117,116,101,32, ++ 102,111,114,32,102,117,110,99,116,111,111,108,115,46,117,112, ++ 100,97,116,101,95,119,114,97,112,112,101,114,46,218,10,95, ++ 95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109, ++ 101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95, ++ 95,218,7,95,95,100,111,99,95,95,78,41,5,218,7,104, ++ 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, ++ 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, ++ 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, ++ 119,90,3,111,108,100,114,53,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,5,95,119,114,97, ++ 112,121,0,0,0,115,8,0,0,0,0,2,25,1,15,1, ++ 32,1,114,66,0,0,0,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, ++ 0,116,0,0,116,1,0,131,1,0,124,0,0,131,1,0, ++ 83,41,1,78,41,2,218,4,116,121,112,101,114,8,0,0, ++ 0,41,1,218,4,110,97,109,101,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,11,95,110,101,119,95,109, ++ 111,100,117,108,101,129,0,0,0,115,2,0,0,0,0,1, ++ 114,69,0,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,58,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, ++ 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132, ++ 0,0,90,6,0,100,8,0,83,41,9,218,13,95,77,97, ++ 110,97,103,101,82,101,108,111,97,100,122,63,77,97,110,97, ++ 103,101,115,32,116,104,101,32,112,111,115,115,105,98,108,101, ++ 32,99,108,101,97,110,45,117,112,32,111,102,32,115,121,115, ++ 46,109,111,100,117,108,101,115,32,102,111,114,32,108,111,97, ++ 100,95,109,111,100,117,108,101,40,41,46,99,2,0,0,0, ++ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, ++ 115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0, ++ 0,83,41,1,78,41,1,218,5,95,110,97,109,101,41,2, ++ 218,4,115,101,108,102,114,68,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,105,110, ++ 105,116,95,95,141,0,0,0,115,2,0,0,0,0,1,122, ++ 22,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, ++ 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,25,0,0, ++ 0,124,0,0,106,0,0,116,1,0,106,2,0,107,6,0, ++ 124,0,0,95,3,0,100,0,0,83,41,1,78,41,4,114, ++ 71,0,0,0,114,8,0,0,0,218,7,109,111,100,117,108, ++ 101,115,218,10,95,105,115,95,114,101,108,111,97,100,41,1, ++ 114,72,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,9,95,95,101,110,116,101,114,95,95,144, ++ 0,0,0,115,2,0,0,0,0,1,122,23,95,77,97,110, ++ 97,103,101,82,101,108,111,97,100,46,95,95,101,110,116,101, ++ 114,95,95,99,1,0,0,0,0,0,0,0,2,0,0,0, ++ 11,0,0,0,71,0,0,0,115,80,0,0,0,116,0,0, ++ 100,1,0,100,2,0,132,0,0,124,1,0,68,131,1,0, ++ 131,1,0,114,76,0,124,0,0,106,1,0,12,114,76,0, ++ 121,17,0,116,2,0,106,3,0,124,0,0,106,4,0,61, ++ 87,113,76,0,4,116,5,0,107,10,0,114,72,0,1,1, ++ 1,89,113,76,0,88,110,0,0,100,0,0,83,41,3,78, ++ 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,115,0,0,0,115,27,0,0,0,124,0,0,93,17,0, ++ 125,1,0,124,1,0,100,0,0,107,9,0,86,1,113,3, ++ 0,100,0,0,83,41,1,78,114,5,0,0,0,41,2,114, ++ 23,0,0,0,218,3,97,114,103,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,250,9,60,103,101,110,101,120, ++ 112,114,62,148,0,0,0,115,2,0,0,0,6,0,122,41, ++ 95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,95, ++ 101,120,105,116,95,95,46,60,108,111,99,97,108,115,62,46, ++ 60,103,101,110,101,120,112,114,62,41,6,218,3,97,110,121, ++ 114,75,0,0,0,114,8,0,0,0,114,74,0,0,0,114, ++ 71,0,0,0,218,8,75,101,121,69,114,114,111,114,41,2, ++ 114,72,0,0,0,218,4,97,114,103,115,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,101,120, ++ 105,116,95,95,147,0,0,0,115,10,0,0,0,0,1,35, ++ 1,3,1,17,1,13,1,122,22,95,77,97,110,97,103,101, ++ 82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78, ++ 41,7,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,114,73,0,0,0,114,76,0,0,0, ++ 114,82,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,70,0,0,0,137,0, ++ 0,0,115,8,0,0,0,12,2,6,2,12,3,12,3,114, ++ 70,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, ++ 0,1,0,0,0,64,0,0,0,115,16,0,0,0,101,0, ++ 0,90,1,0,100,0,0,90,2,0,100,1,0,83,41,2, ++ 218,14,95,68,101,97,100,108,111,99,107,69,114,114,111,114, ++ 78,41,3,114,58,0,0,0,114,57,0,0,0,114,59,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,83,0,0,0,162,0,0,0,115, ++ 2,0,0,0,12,1,114,83,0,0,0,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, ++ 115,82,0,0,0,101,0,0,90,1,0,100,0,0,90,2, ++ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, ++ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, ++ 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, ++ 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, ++ 90,8,0,100,12,0,83,41,13,218,11,95,77,111,100,117, ++ 108,101,76,111,99,107,122,169,65,32,114,101,99,117,114,115, ++ 105,118,101,32,108,111,99,107,32,105,109,112,108,101,109,101, ++ 110,116,97,116,105,111,110,32,119,104,105,99,104,32,105,115, ++ 32,97,98,108,101,32,116,111,32,100,101,116,101,99,116,32, ++ 100,101,97,100,108,111,99,107,115,10,32,32,32,32,40,101, ++ 46,103,46,32,116,104,114,101,97,100,32,49,32,116,114,121, ++ 105,110,103,32,116,111,32,116,97,107,101,32,108,111,99,107, ++ 115,32,65,32,116,104,101,110,32,66,44,32,97,110,100,32, ++ 116,104,114,101,97,100,32,50,32,116,114,121,105,110,103,32, ++ 116,111,10,32,32,32,32,116,97,107,101,32,108,111,99,107, ++ 115,32,66,32,116,104,101,110,32,65,41,46,10,32,32,32, ++ 32,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,70,0,0,0,116,0,0,106,1, ++ 0,131,0,0,124,0,0,95,2,0,116,0,0,106,1,0, ++ 131,0,0,124,0,0,95,3,0,124,1,0,124,0,0,95, ++ 4,0,100,0,0,124,0,0,95,5,0,100,1,0,124,0, ++ 0,95,6,0,100,1,0,124,0,0,95,7,0,100,0,0, ++ 83,41,2,78,233,0,0,0,0,41,8,218,7,95,116,104, ++ 114,101,97,100,90,13,97,108,108,111,99,97,116,101,95,108, ++ 111,99,107,218,4,108,111,99,107,218,6,119,97,107,101,117, ++ 112,114,68,0,0,0,218,5,111,119,110,101,114,218,5,99, ++ 111,117,110,116,218,7,119,97,105,116,101,114,115,41,2,114, ++ 72,0,0,0,114,68,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,172,0,0, ++ 0,115,12,0,0,0,0,1,15,1,15,1,9,1,9,1, ++ 9,1,122,20,95,77,111,100,117,108,101,76,111,99,107,46, ++ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, ++ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,87,0, ++ 0,0,116,0,0,106,1,0,131,0,0,125,1,0,124,0, ++ 0,106,2,0,125,2,0,120,59,0,116,3,0,106,4,0, ++ 124,2,0,131,1,0,125,3,0,124,3,0,100,0,0,107, ++ 8,0,114,55,0,100,1,0,83,124,3,0,106,2,0,125, ++ 2,0,124,2,0,124,1,0,107,2,0,114,24,0,100,2, ++ 0,83,113,24,0,100,0,0,83,41,3,78,70,84,41,5, ++ 114,86,0,0,0,218,9,103,101,116,95,105,100,101,110,116, ++ 114,89,0,0,0,218,12,95,98,108,111,99,107,105,110,103, ++ 95,111,110,218,3,103,101,116,41,4,114,72,0,0,0,218, ++ 2,109,101,218,3,116,105,100,114,87,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,12,104,97, ++ 115,95,100,101,97,100,108,111,99,107,180,0,0,0,115,18, ++ 0,0,0,0,2,12,1,9,1,3,1,15,1,12,1,4, ++ 1,9,1,12,1,122,24,95,77,111,100,117,108,101,76,111, ++ 99,107,46,104,97,115,95,100,101,97,100,108,111,99,107,99, ++ 1,0,0,0,0,0,0,0,2,0,0,0,16,0,0,0, ++ 67,0,0,0,115,214,0,0,0,116,0,0,106,1,0,131, ++ 0,0,125,1,0,124,0,0,116,2,0,124,1,0,60,122, ++ 177,0,120,170,0,124,0,0,106,3,0,143,130,0,1,124, ++ 0,0,106,4,0,100,1,0,107,2,0,115,68,0,124,0, ++ 0,106,5,0,124,1,0,107,2,0,114,96,0,124,1,0, ++ 124,0,0,95,5,0,124,0,0,4,106,4,0,100,2,0, ++ 55,2,95,4,0,100,3,0,83,124,0,0,106,6,0,131, ++ 0,0,114,127,0,116,7,0,100,4,0,124,0,0,22,131, ++ 1,0,130,1,0,110,0,0,124,0,0,106,8,0,106,9, ++ 0,100,5,0,131,1,0,114,163,0,124,0,0,4,106,10, ++ 0,100,2,0,55,2,95,10,0,110,0,0,87,100,6,0, ++ 81,88,124,0,0,106,8,0,106,9,0,131,0,0,1,124, ++ 0,0,106,8,0,106,11,0,131,0,0,1,113,28,0,87, ++ 100,6,0,116,2,0,124,1,0,61,88,100,6,0,83,41, ++ 7,122,185,10,32,32,32,32,32,32,32,32,65,99,113,117, ++ 105,114,101,32,116,104,101,32,109,111,100,117,108,101,32,108, ++ 111,99,107,46,32,32,73,102,32,97,32,112,111,116,101,110, ++ 116,105,97,108,32,100,101,97,100,108,111,99,107,32,105,115, ++ 32,100,101,116,101,99,116,101,100,44,10,32,32,32,32,32, ++ 32,32,32,97,32,95,68,101,97,100,108,111,99,107,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,32, ++ 32,32,32,32,32,32,32,79,116,104,101,114,119,105,115,101, ++ 44,32,116,104,101,32,108,111,99,107,32,105,115,32,97,108, ++ 119,97,121,115,32,97,99,113,117,105,114,101,100,32,97,110, ++ 100,32,84,114,117,101,32,105,115,32,114,101,116,117,114,110, ++ 101,100,46,10,32,32,32,32,32,32,32,32,114,85,0,0, ++ 0,114,30,0,0,0,84,122,23,100,101,97,100,108,111,99, ++ 107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114, ++ 70,78,41,12,114,86,0,0,0,114,92,0,0,0,114,93, ++ 0,0,0,114,87,0,0,0,114,90,0,0,0,114,89,0, ++ 0,0,114,97,0,0,0,114,83,0,0,0,114,88,0,0, ++ 0,218,7,97,99,113,117,105,114,101,114,91,0,0,0,218, ++ 7,114,101,108,101,97,115,101,41,2,114,72,0,0,0,114, ++ 96,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,98,0,0,0,192,0,0,0,115,32,0,0, ++ 0,0,6,12,1,10,1,3,1,3,1,10,1,30,1,9, ++ 1,15,1,4,1,12,1,19,1,18,1,24,2,13,1,20, ++ 2,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97, ++ 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,10,0,0,0,67,0,0,0,115,165,0,0,0, ++ 116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,106, ++ 2,0,143,138,0,1,124,0,0,106,3,0,124,1,0,107, ++ 3,0,114,52,0,116,4,0,100,1,0,131,1,0,130,1, ++ 0,110,0,0,124,0,0,106,5,0,100,2,0,107,4,0, ++ 115,73,0,116,6,0,130,1,0,124,0,0,4,106,5,0, ++ 100,3,0,56,2,95,5,0,124,0,0,106,5,0,100,2, ++ 0,107,2,0,114,155,0,100,0,0,124,0,0,95,3,0, ++ 124,0,0,106,7,0,114,155,0,124,0,0,4,106,7,0, ++ 100,3,0,56,2,95,7,0,124,0,0,106,8,0,106,9, ++ 0,131,0,0,1,113,155,0,110,0,0,87,100,0,0,81, ++ 88,100,0,0,83,41,4,78,122,31,99,97,110,110,111,116, + 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, +- 105,114,101,100,32,108,111,99,107,114,29,0,0,0,41,2, +- 114,89,0,0,0,114,99,0,0,0,41,1,114,71,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,98,0,0,0,246,0,0,0,115,6,0,0,0,0,1, +- 15,1,15,1,122,24,95,68,117,109,109,121,77,111,100,117, +- 108,101,76,111,99,107,46,114,101,108,101,97,115,101,99,1, +- 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, +- 0,0,0,115,25,0,0,0,100,1,0,106,0,0,124,0, +- 0,106,1,0,116,2,0,124,0,0,131,1,0,131,2,0, +- 83,41,2,78,122,28,95,68,117,109,109,121,77,111,100,117, +- 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, +- 123,125,41,3,114,47,0,0,0,114,67,0,0,0,114,48, +- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,101,0,0,0,251,0, +- 0,0,115,2,0,0,0,0,1,122,25,95,68,117,109,109, +- 121,77,111,100,117,108,101,76,111,99,107,46,95,95,114,101, +- 112,114,95,95,78,41,8,114,57,0,0,0,114,56,0,0, +- 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, +- 114,97,0,0,0,114,98,0,0,0,114,101,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,102,0,0,0,234,0,0,0,115,10,0,0, +- 0,12,2,6,2,12,4,12,4,12,5,114,102,0,0,0, +- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,52,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, +- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, +- 0,100,6,0,132,0,0,90,5,0,100,7,0,83,41,8, +- 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, +- 97,103,101,114,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1, +- 0,124,0,0,95,0,0,100,0,0,124,0,0,95,1,0, +- 100,0,0,83,41,1,78,41,2,114,70,0,0,0,218,5, +- 95,108,111,99,107,41,2,114,71,0,0,0,114,67,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,72,0,0,0,1,1,0,0,115,4,0,0,0,0,1, +- 9,1,122,27,95,77,111,100,117,108,101,76,111,99,107,77, +- 97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,99, +- 1,0,0,0,0,0,0,0,1,0,0,0,10,0,0,0, +- 67,0,0,0,115,53,0,0,0,122,22,0,116,0,0,124, +- 0,0,106,1,0,131,1,0,124,0,0,95,2,0,87,100, +- 0,0,116,3,0,106,4,0,131,0,0,1,88,124,0,0, +- 106,2,0,106,5,0,131,0,0,1,100,0,0,83,41,1, +- 78,41,6,218,16,95,103,101,116,95,109,111,100,117,108,101, +- 95,108,111,99,107,114,70,0,0,0,114,104,0,0,0,218, +- 4,95,105,109,112,218,12,114,101,108,101,97,115,101,95,108, +- 111,99,107,114,97,0,0,0,41,1,114,71,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,75, +- 0,0,0,5,1,0,0,115,8,0,0,0,0,1,3,1, +- 22,2,11,1,122,28,95,77,111,100,117,108,101,76,111,99, +- 107,77,97,110,97,103,101,114,46,95,95,101,110,116,101,114, +- 95,95,99,1,0,0,0,0,0,0,0,3,0,0,0,1, +- 0,0,0,79,0,0,0,115,17,0,0,0,124,0,0,106, +- 0,0,106,1,0,131,0,0,1,100,0,0,83,41,1,78, +- 41,2,114,104,0,0,0,114,98,0,0,0,41,3,114,71, +- 0,0,0,114,80,0,0,0,218,6,107,119,97,114,103,115, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 81,0,0,0,12,1,0,0,115,2,0,0,0,0,1,122, +- 27,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, +- 103,101,114,46,95,95,101,120,105,116,95,95,78,41,6,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, +- 0,0,0,114,75,0,0,0,114,81,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,103,0,0,0,255,0,0,0,115,6,0,0,0,12, +- 2,12,4,12,7,114,103,0,0,0,99,1,0,0,0,0, +- 0,0,0,3,0,0,0,11,0,0,0,3,0,0,0,115, +- 142,0,0,0,100,1,0,125,1,0,121,17,0,116,0,0, +- 136,0,0,25,131,0,0,125,1,0,87,110,18,0,4,116, +- 1,0,107,10,0,114,43,0,1,1,1,89,110,1,0,88, +- 124,1,0,100,1,0,107,8,0,114,138,0,116,2,0,100, +- 1,0,107,8,0,114,83,0,116,3,0,136,0,0,131,1, +- 0,125,1,0,110,12,0,116,4,0,136,0,0,131,1,0, +- 125,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, +- 0,0,125,2,0,116,5,0,106,6,0,124,1,0,124,2, +- 0,131,2,0,116,0,0,136,0,0,60,110,0,0,124,1, +- 0,83,41,4,122,109,71,101,116,32,111,114,32,99,114,101, +- 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, ++ 105,114,101,100,32,108,111,99,107,114,85,0,0,0,114,30, ++ 0,0,0,41,10,114,86,0,0,0,114,92,0,0,0,114, ++ 87,0,0,0,114,89,0,0,0,218,12,82,117,110,116,105, ++ 109,101,69,114,114,111,114,114,90,0,0,0,218,14,65,115, ++ 115,101,114,116,105,111,110,69,114,114,111,114,114,91,0,0, ++ 0,114,88,0,0,0,114,99,0,0,0,41,2,114,72,0, ++ 0,0,114,96,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,99,0,0,0,217,0,0,0,115, ++ 22,0,0,0,0,1,12,1,10,1,15,1,15,1,21,1, ++ 15,1,15,1,9,1,9,1,15,1,122,19,95,77,111,100, ++ 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, ++ 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, ++ 67,0,0,0,115,25,0,0,0,100,1,0,106,0,0,124, ++ 0,0,106,1,0,116,2,0,124,0,0,131,1,0,131,2, ++ 0,83,41,2,78,122,23,95,77,111,100,117,108,101,76,111, ++ 99,107,40,123,33,114,125,41,32,97,116,32,123,125,41,3, ++ 114,48,0,0,0,114,68,0,0,0,114,49,0,0,0,41, ++ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,8,95,95,114,101,112,114,95,95,230, ++ 0,0,0,115,2,0,0,0,0,1,122,20,95,77,111,100, ++ 117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,95, ++ 78,41,9,114,58,0,0,0,114,57,0,0,0,114,59,0, ++ 0,0,114,60,0,0,0,114,73,0,0,0,114,97,0,0, ++ 0,114,98,0,0,0,114,99,0,0,0,114,102,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,84,0,0,0,166,0,0,0,115,12,0, ++ 0,0,12,4,6,2,12,8,12,12,12,25,12,13,114,84, ++ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 2,0,0,0,64,0,0,0,115,70,0,0,0,101,0,0, ++ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, ++ 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, ++ 0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,0, ++ 90,6,0,100,8,0,100,9,0,132,0,0,90,7,0,100, ++ 10,0,83,41,11,218,16,95,68,117,109,109,121,77,111,100, ++ 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, ++ 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, ++ 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, ++ 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, ++ 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, ++ 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,22,0,0,0,124,1,0,124,0,0,95, ++ 0,0,100,1,0,124,0,0,95,1,0,100,0,0,83,41, ++ 2,78,114,85,0,0,0,41,2,114,68,0,0,0,114,90, ++ 0,0,0,41,2,114,72,0,0,0,114,68,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,73, ++ 0,0,0,238,0,0,0,115,4,0,0,0,0,1,9,1, ++ 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, ++ 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, ++ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, ++ 115,19,0,0,0,124,0,0,4,106,0,0,100,1,0,55, ++ 2,95,0,0,100,2,0,83,41,3,78,114,30,0,0,0, ++ 84,41,1,114,90,0,0,0,41,1,114,72,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,98, ++ 0,0,0,242,0,0,0,115,4,0,0,0,0,1,15,1, ++ 122,24,95,68,117,109,109,121,77,111,100,117,108,101,76,111, ++ 99,107,46,97,99,113,117,105,114,101,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 49,0,0,0,124,0,0,106,0,0,100,1,0,107,2,0, ++ 114,30,0,116,1,0,100,2,0,131,1,0,130,1,0,110, ++ 0,0,124,0,0,4,106,0,0,100,3,0,56,2,95,0, ++ 0,100,0,0,83,41,4,78,114,85,0,0,0,122,31,99, ++ 97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110, ++ 45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,30, ++ 0,0,0,41,2,114,90,0,0,0,114,100,0,0,0,41, ++ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,99,0,0,0,246,0,0,0,115,6, ++ 0,0,0,0,1,15,1,15,1,122,24,95,68,117,109,109, ++ 121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101, ++ 97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,0, ++ 4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,0, ++ 106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,131, ++ 1,0,131,2,0,83,41,2,78,122,28,95,68,117,109,109, ++ 121,77,111,100,117,108,101,76,111,99,107,40,123,33,114,125, ++ 41,32,97,116,32,123,125,41,3,114,48,0,0,0,114,68, ++ 0,0,0,114,49,0,0,0,41,1,114,72,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,102, ++ 0,0,0,251,0,0,0,115,2,0,0,0,0,1,122,25, ++ 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, ++ 46,95,95,114,101,112,114,95,95,78,41,8,114,58,0,0, ++ 0,114,57,0,0,0,114,59,0,0,0,114,60,0,0,0, ++ 114,73,0,0,0,114,98,0,0,0,114,99,0,0,0,114, ++ 102,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,103,0,0,0,234,0,0, ++ 0,115,10,0,0,0,12,2,6,2,12,4,12,4,12,5, ++ 114,103,0,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, ++ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, ++ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, ++ 7,0,83,41,8,218,18,95,77,111,100,117,108,101,76,111, ++ 99,107,77,97,110,97,103,101,114,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,22, ++ 0,0,0,124,1,0,124,0,0,95,0,0,100,0,0,124, ++ 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,71, ++ 0,0,0,218,5,95,108,111,99,107,41,2,114,72,0,0, ++ 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,73,0,0,0,1,1,0,0,115,4, ++ 0,0,0,0,1,9,1,122,27,95,77,111,100,117,108,101, ++ 76,111,99,107,77,97,110,97,103,101,114,46,95,95,105,110, ++ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, ++ 0,10,0,0,0,67,0,0,0,115,53,0,0,0,122,22, ++ 0,116,0,0,124,0,0,106,1,0,131,1,0,124,0,0, ++ 95,2,0,87,100,0,0,116,3,0,106,4,0,131,0,0, ++ 1,88,124,0,0,106,2,0,106,5,0,131,0,0,1,100, ++ 0,0,83,41,1,78,41,6,218,16,95,103,101,116,95,109, ++ 111,100,117,108,101,95,108,111,99,107,114,71,0,0,0,114, ++ 105,0,0,0,218,4,95,105,109,112,218,12,114,101,108,101, ++ 97,115,101,95,108,111,99,107,114,98,0,0,0,41,1,114, ++ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,76,0,0,0,5,1,0,0,115,8,0,0, ++ 0,0,1,3,1,22,2,11,1,122,28,95,77,111,100,117, ++ 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, ++ 101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0, ++ 3,0,0,0,1,0,0,0,79,0,0,0,115,17,0,0, ++ 0,124,0,0,106,0,0,106,1,0,131,0,0,1,100,0, ++ 0,83,41,1,78,41,2,114,105,0,0,0,114,99,0,0, ++ 0,41,3,114,72,0,0,0,114,81,0,0,0,218,6,107, ++ 119,97,114,103,115,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,82,0,0,0,12,1,0,0,115,2,0, ++ 0,0,0,1,122,27,95,77,111,100,117,108,101,76,111,99, ++ 107,77,97,110,97,103,101,114,46,95,95,101,120,105,116,95, ++ 95,78,41,6,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,73,0,0,0,114,76,0,0,0,114,82,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,104,0,0,0,255,0,0,0,115, ++ 6,0,0,0,12,2,12,4,12,7,114,104,0,0,0,99, ++ 1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, ++ 3,0,0,0,115,142,0,0,0,100,1,0,125,1,0,121, ++ 17,0,116,0,0,136,0,0,25,131,0,0,125,1,0,87, ++ 110,18,0,4,116,1,0,107,10,0,114,43,0,1,1,1, ++ 89,110,1,0,88,124,1,0,100,1,0,107,8,0,114,138, ++ 0,116,2,0,100,1,0,107,8,0,114,83,0,116,3,0, ++ 136,0,0,131,1,0,125,1,0,110,12,0,116,4,0,136, ++ 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,2, ++ 0,100,3,0,134,0,0,125,2,0,116,5,0,106,6,0, ++ 124,1,0,124,2,0,131,2,0,116,0,0,136,0,0,60, ++ 110,0,0,124,1,0,83,41,4,122,109,71,101,116,32,111, ++ 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, ++ 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, ++ 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, ++ 46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110, ++ 108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116, ++ 104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, ++ 107,32,116,97,107,101,110,46,78,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,2,0,0,0,19,0,0,0,115,11, ++ 0,0,0,116,0,0,136,0,0,61,100,0,0,83,41,1, ++ 78,41,1,218,13,95,109,111,100,117,108,101,95,108,111,99, ++ 107,115,41,1,114,37,0,0,0,41,1,114,68,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,2,99,98,32,1, ++ 0,0,115,2,0,0,0,0,1,122,28,95,103,101,116,95, ++ 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99, ++ 97,108,115,62,46,99,98,41,7,114,110,0,0,0,114,80, ++ 0,0,0,114,86,0,0,0,114,103,0,0,0,114,84,0, ++ 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, ++ 102,41,3,114,68,0,0,0,114,87,0,0,0,114,111,0, ++ 0,0,114,5,0,0,0,41,1,114,68,0,0,0,114,6, ++ 0,0,0,114,106,0,0,0,18,1,0,0,115,24,0,0, ++ 0,0,4,6,1,3,1,17,1,13,1,5,1,12,1,12, ++ 1,15,2,12,1,18,2,25,1,114,106,0,0,0,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, ++ 0,0,0,115,71,0,0,0,116,0,0,124,0,0,131,1, ++ 0,125,1,0,116,1,0,106,2,0,131,0,0,1,121,14, ++ 0,124,1,0,106,3,0,131,0,0,1,87,110,18,0,4, ++ 116,4,0,107,10,0,114,56,0,1,1,1,89,110,11,0, ++ 88,124,1,0,106,5,0,131,0,0,1,100,1,0,83,41, ++ 2,97,21,1,0,0,82,101,108,101,97,115,101,32,116,104, ++ 101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,32, ++ 108,111,99,107,44,32,97,110,100,32,97,99,113,117,105,114, ++ 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,32, ++ 116,104,101,10,32,32,32,32,109,111,100,117,108,101,32,108, + 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, +- 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, +- 32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101, +- 32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101, +- 32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107, +- 101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,2,0,0,0,19,0,0,0,115,11,0,0,0,116,0, +- 0,136,0,0,61,100,0,0,83,41,1,78,41,1,218,13, +- 95,109,111,100,117,108,101,95,108,111,99,107,115,41,1,114, +- 36,0,0,0,41,1,114,67,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,2,99,98,32,1,0,0,115,2,0, +- 0,0,0,1,122,28,95,103,101,116,95,109,111,100,117,108, +- 101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46, +- 99,98,41,7,114,109,0,0,0,114,79,0,0,0,114,85, +- 0,0,0,114,102,0,0,0,114,83,0,0,0,218,8,95, +- 119,101,97,107,114,101,102,90,3,114,101,102,41,3,114,67, +- 0,0,0,114,86,0,0,0,114,110,0,0,0,114,4,0, +- 0,0,41,1,114,67,0,0,0,114,5,0,0,0,114,105, +- 0,0,0,18,1,0,0,115,24,0,0,0,0,4,6,1, +- 3,1,17,1,13,1,5,1,12,1,12,1,15,2,12,1, +- 18,2,25,1,114,105,0,0,0,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,71, +- 0,0,0,116,0,0,124,0,0,131,1,0,125,1,0,116, +- 1,0,106,2,0,131,0,0,1,121,14,0,124,1,0,106, +- 3,0,131,0,0,1,87,110,18,0,4,116,4,0,107,10, +- 0,114,56,0,1,1,1,89,110,11,0,88,124,1,0,106, +- 5,0,131,0,0,1,100,1,0,83,41,2,97,21,1,0, +- 0,82,101,108,101,97,115,101,32,116,104,101,32,103,108,111, +- 98,97,108,32,105,109,112,111,114,116,32,108,111,99,107,44, +- 32,97,110,100,32,97,99,113,117,105,114,101,115,32,116,104, +- 101,110,32,114,101,108,101,97,115,101,32,116,104,101,10,32, +- 32,32,32,109,111,100,117,108,101,32,108,111,99,107,32,102, +- 111,114,32,97,32,103,105,118,101,110,32,109,111,100,117,108, +- 101,32,110,97,109,101,46,10,32,32,32,32,84,104,105,115, +- 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, +- 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, +- 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, +- 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, +- 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, +- 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, +- 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, +- 10,32,32,32,32,83,104,111,117,108,100,32,111,110,108,121, +- 32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,32, +- 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,32, +- 116,97,107,101,110,46,78,41,6,114,105,0,0,0,114,106, +- 0,0,0,114,107,0,0,0,114,97,0,0,0,114,82,0, +- 0,0,114,98,0,0,0,41,2,114,67,0,0,0,114,86, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, +- 95,109,111,100,117,108,101,37,1,0,0,115,14,0,0,0, +- 0,7,12,1,10,1,3,1,14,1,13,3,5,2,114,112, +- 0,0,0,99,1,0,0,0,0,0,0,0,3,0,0,0, +- 3,0,0,0,79,0,0,0,115,13,0,0,0,124,0,0, +- 124,1,0,124,2,0,142,0,0,83,41,1,97,46,1,0, +- 0,114,101,109,111,118,101,95,105,109,112,111,114,116,108,105, +- 98,95,102,114,97,109,101,115,32,105,110,32,105,109,112,111, +- 114,116,46,99,32,119,105,108,108,32,97,108,119,97,121,115, +- 32,114,101,109,111,118,101,32,115,101,113,117,101,110,99,101, +- 115,10,32,32,32,32,111,102,32,105,109,112,111,114,116,108, +- 105,98,32,102,114,97,109,101,115,32,116,104,97,116,32,101, +- 110,100,32,119,105,116,104,32,97,32,99,97,108,108,32,116, +- 111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,10, +- 10,32,32,32,32,85,115,101,32,105,116,32,105,110,115,116, +- 101,97,100,32,111,102,32,97,32,110,111,114,109,97,108,32, +- 99,97,108,108,32,105,110,32,112,108,97,99,101,115,32,119, +- 104,101,114,101,32,105,110,99,108,117,100,105,110,103,32,116, +- 104,101,32,105,109,112,111,114,116,108,105,98,10,32,32,32, +- 32,102,114,97,109,101,115,32,105,110,116,114,111,100,117,99, +- 101,115,32,117,110,119,97,110,116,101,100,32,110,111,105,115, +- 101,32,105,110,116,111,32,116,104,101,32,116,114,97,99,101, +- 98,97,99,107,32,40,101,46,103,46,32,119,104,101,110,32, +- 101,120,101,99,117,116,105,110,103,10,32,32,32,32,109,111, +- 100,117,108,101,32,99,111,100,101,41,10,32,32,32,32,114, +- 4,0,0,0,41,3,218,1,102,114,80,0,0,0,90,4, +- 107,119,100,115,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, +- 102,114,97,109,101,115,95,114,101,109,111,118,101,100,57,1, +- 0,0,115,2,0,0,0,0,8,114,114,0,0,0,105,238, +- 12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, +- 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, +- 95,122,3,46,112,121,122,4,46,112,121,99,122,4,46,112, +- 121,111,78,99,2,0,0,0,0,0,0,0,11,0,0,0, +- 6,0,0,0,67,0,0,0,115,180,0,0,0,124,1,0, +- 100,1,0,107,8,0,114,25,0,116,0,0,106,1,0,106, +- 2,0,12,110,3,0,124,1,0,125,2,0,124,2,0,114, +- 46,0,116,3,0,125,3,0,110,6,0,116,4,0,125,3, +- 0,116,5,0,124,0,0,131,1,0,92,2,0,125,4,0, +- 125,5,0,124,5,0,106,6,0,100,2,0,131,1,0,92, +- 3,0,125,6,0,125,7,0,125,8,0,116,0,0,106,7, +- 0,106,8,0,125,9,0,124,9,0,100,1,0,107,8,0, +- 114,133,0,116,9,0,100,3,0,131,1,0,130,1,0,110, +- 0,0,100,4,0,106,10,0,124,6,0,124,7,0,124,9, +- 0,124,3,0,100,5,0,25,103,4,0,131,1,0,125,10, +- 0,116,11,0,124,4,0,116,12,0,124,10,0,131,3,0, +- 83,41,6,97,244,1,0,0,71,105,118,101,110,32,116,104, +- 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,32, +- 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, +- 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, +- 99,47,46,112,121,111,32,102,105,108,101,46,10,10,32,32, +- 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, +- 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, +- 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, +- 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, +- 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, +- 112,121,99,47,46,112,121,111,32,102,105,108,101,32,99,97, +- 108,99,117,108,97,116,101,100,32,97,115,32,105,102,32,116, +- 104,101,32,46,112,121,32,102,105,108,101,32,119,101,114,101, +- 32,105,109,112,111,114,116,101,100,46,32,32,84,104,101,32, +- 101,120,116,101,110,115,105,111,110,10,32,32,32,32,119,105, +- 108,108,32,98,101,32,46,112,121,99,32,117,110,108,101,115, +- 115,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, +- 109,105,122,101,32,105,115,32,110,111,110,45,122,101,114,111, +- 44,32,116,104,101,110,32,105,116,32,119,105,108,108,32,98, +- 101,32,46,112,121,111,46,10,10,32,32,32,32,73,102,32, +- 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105, +- 115,32,110,111,116,32,78,111,110,101,44,32,116,104,101,110, +- 32,105,116,32,109,117,115,116,32,98,101,32,97,32,98,111, +- 111,108,101,97,110,32,97,110,100,32,105,115,32,117,115,101, +- 100,32,105,110,10,32,32,32,32,112,108,97,99,101,32,111, +- 102,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, +- 109,105,122,101,46,10,10,32,32,32,32,73,102,32,115,121, +- 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, +- 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, +- 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, +- 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, +- 97,105,115,101,100,46,10,10,32,32,32,32,78,218,1,46, +- 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, +- 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, +- 115,32,78,111,110,101,114,30,0,0,0,114,84,0,0,0, +- 41,13,114,7,0,0,0,218,5,102,108,97,103,115,218,8, +- 111,112,116,105,109,105,122,101,218,23,68,69,66,85,71,95, +- 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, +- 83,218,27,79,80,84,73,77,73,90,69,68,95,66,89,84, +- 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,38, +- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,218,14, +- 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, +- 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, +- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,26, +- 0,0,0,114,28,0,0,0,218,8,95,80,89,67,65,67, +- 72,69,41,11,114,35,0,0,0,90,14,100,101,98,117,103, +- 95,111,118,101,114,114,105,100,101,218,5,100,101,98,117,103, +- 218,8,115,117,102,102,105,120,101,115,218,4,104,101,97,100, +- 114,37,0,0,0,218,13,98,97,115,101,95,102,105,108,101, +- 110,97,109,101,218,3,115,101,112,114,36,0,0,0,90,3, +- 116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,97, +- 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,181, +- 1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,2, +- 6,1,18,1,24,1,12,1,12,1,15,1,31,1,114,132, ++ 109,111,100,117,108,101,32,110,97,109,101,46,10,32,32,32, ++ 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111, ++ 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101, ++ 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105, ++ 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116, ++ 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32, ++ 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101, ++ 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114, ++ 101,97,100,46,10,10,32,32,32,32,83,104,111,117,108,100, ++ 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, ++ 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, ++ 108,111,99,107,32,116,97,107,101,110,46,78,41,6,114,106, ++ 0,0,0,114,107,0,0,0,114,108,0,0,0,114,98,0, ++ 0,0,114,83,0,0,0,114,99,0,0,0,41,2,114,68, ++ 0,0,0,114,87,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,19,95,108,111,99,107,95,117, ++ 110,108,111,99,107,95,109,111,100,117,108,101,37,1,0,0, ++ 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, ++ 3,5,2,114,113,0,0,0,99,1,0,0,0,0,0,0, ++ 0,3,0,0,0,3,0,0,0,79,0,0,0,115,13,0, ++ 0,0,124,0,0,124,1,0,124,2,0,142,0,0,83,41, ++ 1,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, ++ 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, ++ 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, ++ 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, ++ 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, ++ 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, ++ 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, ++ 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, ++ 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, ++ 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, ++ 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, ++ 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, ++ 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, ++ 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, ++ 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, ++ 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, ++ 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, ++ 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, ++ 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, ++ 32,32,32,32,114,5,0,0,0,41,3,218,1,102,114,81, ++ 0,0,0,90,4,107,119,100,115,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,25,95,99,97,108,108,95, ++ 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, ++ 118,101,100,57,1,0,0,115,2,0,0,0,0,8,114,115, ++ 0,0,0,105,238,12,0,0,233,2,0,0,0,114,14,0, ++ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, ++ 97,99,104,101,95,95,122,3,46,112,121,122,4,46,112,121, ++ 99,122,4,46,112,121,111,78,99,2,0,0,0,0,0,0, ++ 0,11,0,0,0,6,0,0,0,67,0,0,0,115,180,0, ++ 0,0,124,1,0,100,1,0,107,8,0,114,25,0,116,0, ++ 0,106,1,0,106,2,0,12,110,3,0,124,1,0,125,2, ++ 0,124,2,0,114,46,0,116,3,0,125,3,0,110,6,0, ++ 116,4,0,125,3,0,116,5,0,124,0,0,131,1,0,92, ++ 2,0,125,4,0,125,5,0,124,5,0,106,6,0,100,2, ++ 0,131,1,0,92,3,0,125,6,0,125,7,0,125,8,0, ++ 116,0,0,106,7,0,106,8,0,125,9,0,124,9,0,100, ++ 1,0,107,8,0,114,133,0,116,9,0,100,3,0,131,1, ++ 0,130,1,0,110,0,0,100,4,0,106,10,0,124,6,0, ++ 124,7,0,124,9,0,124,3,0,100,5,0,25,103,4,0, ++ 131,1,0,125,10,0,116,11,0,124,4,0,116,12,0,124, ++ 10,0,131,3,0,83,41,6,97,244,1,0,0,71,105,118, ++ 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, ++ 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, ++ 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, ++ 115,32,46,112,121,99,47,46,112,121,111,32,102,105,108,101, ++ 46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,102, ++ 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, ++ 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, ++ 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, ++ 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,10, ++ 32,32,32,32,46,112,121,99,47,46,112,121,111,32,102,105, ++ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115, ++ 32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101, ++ 32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,32, ++ 32,84,104,101,32,101,120,116,101,110,115,105,111,110,10,32, ++ 32,32,32,119,105,108,108,32,98,101,32,46,112,121,99,32, ++ 117,110,108,101,115,115,32,115,121,115,46,102,108,97,103,115, ++ 46,111,112,116,105,109,105,122,101,32,105,115,32,110,111,110, ++ 45,122,101,114,111,44,32,116,104,101,110,32,105,116,32,119, ++ 105,108,108,32,98,101,32,46,112,121,111,46,10,10,32,32, ++ 32,32,73,102,32,100,101,98,117,103,95,111,118,101,114,114, ++ 105,100,101,32,105,115,32,110,111,116,32,78,111,110,101,44, ++ 32,116,104,101,110,32,105,116,32,109,117,115,116,32,98,101, ++ 32,97,32,98,111,111,108,101,97,110,32,97,110,100,32,105, ++ 115,32,117,115,101,100,32,105,110,10,32,32,32,32,112,108, ++ 97,99,101,32,111,102,32,115,121,115,46,102,108,97,103,115, ++ 46,111,112,116,105,109,105,122,101,46,10,10,32,32,32,32, ++ 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, ++ 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, ++ 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, ++ 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, ++ 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, ++ 32,78,218,1,46,122,36,115,121,115,46,105,109,112,108,101, ++ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, ++ 116,97,103,32,105,115,32,78,111,110,101,114,31,0,0,0, ++ 114,85,0,0,0,41,13,114,8,0,0,0,218,5,102,108, ++ 97,103,115,218,8,111,112,116,105,109,105,122,101,218,23,68, ++ 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, ++ 70,70,73,88,69,83,218,27,79,80,84,73,77,73,90,69, ++ 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, ++ 88,69,83,114,39,0,0,0,218,9,112,97,114,116,105,116, ++ 105,111,110,218,14,105,109,112,108,101,109,101,110,116,97,116, ++ 105,111,110,218,9,99,97,99,104,101,95,116,97,103,218,19, ++ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, ++ 114,111,114,114,27,0,0,0,114,29,0,0,0,218,8,95, ++ 80,89,67,65,67,72,69,41,11,114,36,0,0,0,90,14, ++ 100,101,98,117,103,95,111,118,101,114,114,105,100,101,218,5, ++ 100,101,98,117,103,218,8,115,117,102,102,105,120,101,115,218, ++ 4,104,101,97,100,114,38,0,0,0,218,13,98,97,115,101, ++ 95,102,105,108,101,110,97,109,101,218,3,115,101,112,114,37, ++ 0,0,0,90,3,116,97,103,218,8,102,105,108,101,110,97, ++ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, ++ 117,114,99,101,181,1,0,0,115,22,0,0,0,0,13,31, ++ 1,6,1,9,2,6,1,18,1,24,1,12,1,12,1,15, ++ 1,31,1,114,133,0,0,0,99,1,0,0,0,0,0,0, ++ 0,5,0,0,0,5,0,0,0,67,0,0,0,115,193,0, ++ 0,0,116,0,0,106,1,0,106,2,0,100,1,0,107,8, ++ 0,114,33,0,116,3,0,100,2,0,131,1,0,130,1,0, ++ 110,0,0,116,4,0,124,0,0,131,1,0,92,2,0,125, ++ 1,0,125,2,0,116,4,0,124,1,0,131,1,0,92,2, ++ 0,125,1,0,125,3,0,124,3,0,116,5,0,107,3,0, ++ 114,108,0,116,6,0,100,3,0,106,7,0,116,5,0,124, ++ 0,0,131,2,0,131,1,0,130,1,0,110,0,0,124,2, ++ 0,106,8,0,100,4,0,131,1,0,100,5,0,107,3,0, ++ 114,153,0,116,6,0,100,6,0,106,7,0,124,2,0,131, ++ 1,0,131,1,0,130,1,0,110,0,0,124,2,0,106,9, ++ 0,100,4,0,131,1,0,100,7,0,25,125,4,0,116,10, ++ 0,124,1,0,124,4,0,116,11,0,100,7,0,25,23,131, ++ 2,0,83,41,8,97,121,1,0,0,71,105,118,101,110,32, ++ 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, ++ 121,99,46,47,46,112,121,111,32,102,105,108,101,44,32,114, ++ 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, ++ 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10, ++ 10,32,32,32,32,84,104,101,32,46,112,121,99,47,46,112, ++ 121,111,32,102,105,108,101,32,100,111,101,115,32,110,111,116, ++ 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, ++ 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, ++ 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, ++ 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, ++ 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, ++ 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, ++ 32,46,112,121,99,47,46,112,121,111,32,102,105,108,101,46, ++ 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, ++ 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, ++ 111,32,80,69,80,32,51,49,52,55,32,102,111,114,109,97, ++ 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, ++ 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, ++ 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, ++ 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, ++ 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, ++ 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, ++ 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, ++ 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, ++ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, ++ 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, ++ 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, ++ 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, ++ 125,114,117,0,0,0,114,116,0,0,0,122,28,101,120,112, ++ 101,99,116,101,100,32,111,110,108,121,32,50,32,100,111,116, ++ 115,32,105,110,32,123,33,114,125,114,85,0,0,0,41,12, ++ 114,8,0,0,0,114,123,0,0,0,114,124,0,0,0,114, ++ 125,0,0,0,114,39,0,0,0,114,126,0,0,0,218,10, ++ 86,97,108,117,101,69,114,114,111,114,114,48,0,0,0,114, ++ 90,0,0,0,114,122,0,0,0,114,29,0,0,0,218,15, ++ 83,79,85,82,67,69,95,83,85,70,70,73,88,69,83,41, ++ 5,114,36,0,0,0,114,129,0,0,0,90,16,112,121,99, ++ 97,99,104,101,95,102,105,108,101,110,97,109,101,90,7,112, ++ 121,99,97,99,104,101,114,130,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,17,115,111,117,114, ++ 99,101,95,102,114,111,109,95,99,97,99,104,101,208,1,0, ++ 0,115,24,0,0,0,0,9,18,1,15,1,18,1,18,1, ++ 12,1,3,1,24,1,21,1,3,1,21,1,19,1,114,136, + 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, +- 5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,0, +- 106,1,0,106,2,0,100,1,0,107,8,0,114,33,0,116, +- 3,0,100,2,0,131,1,0,130,1,0,110,0,0,116,4, +- 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, +- 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, +- 3,0,124,3,0,116,5,0,107,3,0,114,108,0,116,6, +- 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, +- 131,1,0,130,1,0,110,0,0,124,2,0,106,8,0,100, +- 4,0,131,1,0,100,5,0,107,3,0,114,153,0,116,6, +- 0,100,6,0,106,7,0,124,2,0,131,1,0,131,1,0, +- 130,1,0,110,0,0,124,2,0,106,9,0,100,4,0,131, +- 1,0,100,7,0,25,125,4,0,116,10,0,124,1,0,124, +- 4,0,116,11,0,100,7,0,25,23,131,2,0,83,41,8, +- 97,121,1,0,0,71,105,118,101,110,32,116,104,101,32,112, +- 97,116,104,32,116,111,32,97,32,46,112,121,99,46,47,46, +- 112,121,111,32,102,105,108,101,44,32,114,101,116,117,114,110, +- 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, +- 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, +- 84,104,101,32,46,112,121,99,47,46,112,121,111,32,102,105, +- 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, +- 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, +- 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, +- 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, +- 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, +- 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, +- 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, +- 47,46,112,121,111,32,102,105,108,101,46,32,32,73,102,32, +- 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, +- 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, +- 32,51,49,52,55,32,102,111,114,109,97,116,44,32,86,97, +- 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, +- 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, +- 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, +- 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, +- 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, +- 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, +- 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, +- 32,78,111,110,101,122,37,123,125,32,110,111,116,32,98,111, +- 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, +- 116,111,114,121,32,105,110,32,123,33,114,125,114,116,0,0, +- 0,114,115,0,0,0,122,28,101,120,112,101,99,116,101,100, +- 32,111,110,108,121,32,50,32,100,111,116,115,32,105,110,32, +- 123,33,114,125,114,84,0,0,0,41,12,114,7,0,0,0, +- 114,122,0,0,0,114,123,0,0,0,114,124,0,0,0,114, +- 38,0,0,0,114,125,0,0,0,218,10,86,97,108,117,101, +- 69,114,114,111,114,114,47,0,0,0,114,89,0,0,0,114, +- 121,0,0,0,114,28,0,0,0,218,15,83,79,85,82,67, +- 69,95,83,85,70,70,73,88,69,83,41,5,114,35,0,0, +- 0,114,128,0,0,0,90,16,112,121,99,97,99,104,101,95, +- 102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,104, +- 101,114,129,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,114, +- 111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,0, +- 0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24, +- 1,21,1,3,1,21,1,19,1,114,135,0,0,0,99,1, +- 0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67, +- 0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1, +- 0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0, +- 0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0, +- 125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0, +- 106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25, +- 100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0, +- 116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0, +- 4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0, +- 1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25, +- 125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1, +- 0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188, +- 67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111, +- 100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32, +- 97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105, +- 102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32, +- 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, +- 101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111, +- 114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112, +- 97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32, +- 32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67, +- 111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108, +- 101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32, +- 67,32,65,80,73,46,10,10,32,32,32,32,114,84,0,0, +- 0,78,114,116,0,0,0,233,3,0,0,0,114,29,0,0, +- 0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114, +- 138,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0, +- 218,5,108,111,119,101,114,114,135,0,0,0,114,124,0,0, +- 0,114,133,0,0,0,114,44,0,0,0,41,5,218,13,98, +- 121,116,101,99,111,100,101,95,112,97,116,104,90,4,114,101, +- 115,116,114,36,0,0,0,90,9,101,120,116,101,110,115,105, +- 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15, +- 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,231, +- 1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1, +- 35,1,4,1,3,1,16,1,19,1,21,1,114,142,0,0, +- 0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, +- 0,0,67,0,0,0,115,60,0,0,0,121,19,0,116,0, +- 0,124,0,0,131,1,0,106,1,0,125,1,0,87,110,24, +- 0,4,116,2,0,107,10,0,114,45,0,1,1,1,100,1, +- 0,125,1,0,89,110,1,0,88,124,1,0,100,2,0,79, +- 125,1,0,124,1,0,83,41,3,122,51,67,97,108,99,117, +- 108,97,116,101,32,116,104,101,32,109,111,100,101,32,112,101, +- 114,109,105,115,115,105,111,110,115,32,102,111,114,32,97,32, +- 98,121,116,101,99,111,100,101,32,102,105,108,101,46,105,182, +- 1,0,0,233,128,0,0,0,41,3,114,39,0,0,0,114, +- 41,0,0,0,114,40,0,0,0,41,2,114,35,0,0,0, +- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, +- 250,1,0,0,115,12,0,0,0,0,2,3,1,19,1,13, +- 1,11,3,10,1,114,144,0,0,0,218,9,118,101,114,98, +- 111,115,105,116,121,114,29,0,0,0,99,1,0,0,0,1, +- 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, +- 81,0,0,0,116,0,0,106,1,0,106,2,0,124,1,0, +- 107,5,0,114,77,0,124,0,0,106,3,0,100,6,0,131, +- 1,0,115,46,0,100,3,0,124,0,0,23,125,0,0,110, +- 0,0,116,4,0,124,0,0,106,5,0,124,2,0,140,0, +- 0,100,4,0,116,0,0,106,6,0,131,1,1,1,110,0, +- 0,100,5,0,83,41,7,122,61,80,114,105,110,116,32,116, +- 104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,116, +- 100,101,114,114,32,105,102,32,45,118,47,80,89,84,72,79, +- 78,86,69,82,66,79,83,69,32,105,115,32,116,117,114,110, +- 101,100,32,111,110,46,250,1,35,250,7,105,109,112,111,114, +- 116,32,122,2,35,32,114,54,0,0,0,78,41,2,114,146, +- 0,0,0,114,147,0,0,0,41,7,114,7,0,0,0,114, +- 117,0,0,0,218,7,118,101,114,98,111,115,101,114,9,0, +- 0,0,218,5,112,114,105,110,116,114,47,0,0,0,218,6, +- 115,116,100,101,114,114,41,3,218,7,109,101,115,115,97,103, +- 101,114,145,0,0,0,114,80,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,16,95,118,101,114, +- 98,111,115,101,95,109,101,115,115,97,103,101,6,2,0,0, +- 115,8,0,0,0,0,2,18,1,15,1,13,1,114,152,0, +- 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,4, +- 0,0,0,3,0,0,0,115,38,0,0,0,100,1,0,135, +- 0,0,102,1,0,100,2,0,100,3,0,134,1,0,125,1, +- 0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,1, +- 0,83,41,4,122,252,68,101,99,111,114,97,116,111,114,32, +- 116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116, +- 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, +- 114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,101, +- 115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,32, +- 32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,110, +- 100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,105, +- 114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,101, +- 108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,32, +- 95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,32, +- 115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32, +- 105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,32, +- 97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,32, +- 99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,115, +- 32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,111, +- 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, +- 32,32,78,99,2,0,0,0,0,0,0,0,4,0,0,0, +- 5,0,0,0,31,0,0,0,115,83,0,0,0,124,1,0, +- 100,0,0,107,8,0,114,24,0,124,0,0,106,0,0,125, +- 1,0,110,40,0,124,0,0,106,0,0,124,1,0,107,3, +- 0,114,64,0,116,1,0,100,1,0,124,1,0,22,100,2, +- 0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0, +- 124,0,0,124,1,0,124,2,0,124,3,0,142,2,0,83, +- 41,3,78,122,23,108,111,97,100,101,114,32,99,97,110,110, +- 111,116,32,104,97,110,100,108,101,32,37,115,114,67,0,0, +- 0,41,2,114,67,0,0,0,218,11,73,109,112,111,114,116, +- 69,114,114,111,114,41,4,114,71,0,0,0,114,67,0,0, +- 0,114,80,0,0,0,114,108,0,0,0,41,1,218,6,109, +- 101,116,104,111,100,114,4,0,0,0,114,5,0,0,0,218, +- 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, +- 112,112,101,114,22,2,0,0,115,10,0,0,0,0,1,12, +- 1,12,1,15,1,25,1,122,40,95,99,104,101,99,107,95, +- 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,99, +- 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, +- 114,41,1,114,65,0,0,0,41,2,114,154,0,0,0,114, +- 155,0,0,0,114,4,0,0,0,41,1,114,154,0,0,0, +- 114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,97, +- 109,101,14,2,0,0,115,6,0,0,0,0,8,21,6,13, +- 1,114,156,0,0,0,99,1,0,0,0,0,0,0,0,2, +- 0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0, +- 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125, +- 1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124, +- 1,0,83,41,3,122,49,68,101,99,111,114,97,116,111,114, +- 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, +- 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, +- 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,19,0,0,0,115,58,0, +- 0,0,124,1,0,116,0,0,106,1,0,107,7,0,114,45, +- 0,116,2,0,100,1,0,106,3,0,124,1,0,131,1,0, +- 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,136, +- 0,0,124,0,0,124,1,0,131,2,0,83,41,3,78,122, +- 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, +- 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,67, +- 0,0,0,41,4,114,7,0,0,0,218,20,98,117,105,108, +- 116,105,110,95,109,111,100,117,108,101,95,110,97,109,101,115, +- 114,153,0,0,0,114,47,0,0,0,41,2,114,71,0,0, +- 0,218,8,102,117,108,108,110,97,109,101,41,1,218,3,102, +- 120,110,114,4,0,0,0,114,5,0,0,0,218,25,95,114, +- 101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,95, +- 119,114,97,112,112,101,114,34,2,0,0,115,8,0,0,0, +- 0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,105, +- 114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99, +- 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98, +- 117,105,108,116,105,110,95,119,114,97,112,112,101,114,41,1, +- 114,65,0,0,0,41,2,114,159,0,0,0,114,160,0,0, +- 0,114,4,0,0,0,41,1,114,159,0,0,0,114,5,0, +- 0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,117, +- 105,108,116,105,110,32,2,0,0,115,6,0,0,0,0,2, +- 18,5,13,1,114,161,0,0,0,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35, +- 0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, +- 0,0,125,1,0,116,0,0,124,1,0,136,0,0,131,2, +- 0,1,124,1,0,83,41,3,122,47,68,101,99,111,114,97, +- 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, +- 101,32,110,97,109,101,100,32,109,111,100,117,108,101,32,105, +- 115,32,102,114,111,122,101,110,46,99,2,0,0,0,0,0, +- 0,0,2,0,0,0,4,0,0,0,19,0,0,0,115,58, +- 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,115, +- 45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,1, +- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, +- 136,0,0,124,0,0,124,1,0,131,2,0,83,41,3,78, +- 122,27,123,33,114,125,32,105,115,32,110,111,116,32,97,32, +- 102,114,111,122,101,110,32,109,111,100,117,108,101,114,67,0, +- 0,0,41,4,114,106,0,0,0,218,9,105,115,95,102,114, +- 111,122,101,110,114,153,0,0,0,114,47,0,0,0,41,2, +- 114,71,0,0,0,114,158,0,0,0,41,1,114,159,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,24,95,114,101, +- 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, +- 97,112,112,101,114,45,2,0,0,115,8,0,0,0,0,1, +- 15,1,18,1,12,1,122,50,95,114,101,113,117,105,114,101, +- 115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,115, +- 62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,122, +- 101,110,95,119,114,97,112,112,101,114,41,1,114,65,0,0, +- 0,41,2,114,159,0,0,0,114,163,0,0,0,114,4,0, +- 0,0,41,1,114,159,0,0,0,114,5,0,0,0,218,16, +- 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, +- 43,2,0,0,115,6,0,0,0,0,2,18,5,13,1,114, +- 164,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, +- 0,5,0,0,0,67,0,0,0,115,87,0,0,0,124,0, +- 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, +- 125,3,0,124,2,0,100,1,0,107,8,0,114,83,0,116, +- 1,0,124,3,0,131,1,0,114,83,0,100,2,0,125,4, +- 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, +- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,110,0, +- 0,124,2,0,83,41,4,122,155,84,114,121,32,116,111,32, +- 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, +- 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, +- 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, +- 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, +- 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, +- 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, +- 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, +- 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, +- 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, +- 32,32,32,32,78,122,44,78,111,116,32,105,109,112,111,114, +- 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, +- 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, +- 116,95,95,114,84,0,0,0,41,6,218,11,102,105,110,100, +- 95,108,111,97,100,101,114,114,31,0,0,0,218,9,95,119, +- 97,114,110,105,110,103,115,218,4,119,97,114,110,114,47,0, +- 0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,110, +- 103,41,5,114,71,0,0,0,114,158,0,0,0,218,6,108, +- 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, +- 3,109,115,103,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, +- 101,95,115,104,105,109,54,2,0,0,115,10,0,0,0,0, +- 10,21,1,24,1,6,1,32,1,114,172,0,0,0,99,2, +- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, +- 0,0,0,115,93,0,0,0,116,0,0,124,1,0,124,0, +- 0,131,2,0,125,2,0,116,1,0,124,2,0,131,1,0, +- 125,3,0,124,1,0,116,2,0,106,3,0,107,6,0,114, +- 79,0,116,2,0,106,3,0,124,1,0,25,125,4,0,124, +- 3,0,106,4,0,124,4,0,131,1,0,1,116,2,0,106, +- 3,0,124,1,0,25,83,124,3,0,106,5,0,131,0,0, +- 83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,104, +- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, +- 108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117, +- 108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105, +- 116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101, +- 120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,112, +- 101,99,95,102,114,111,109,95,108,111,97,100,101,114,218,12, +- 95,83,112,101,99,77,101,116,104,111,100,115,114,7,0,0, +- 0,114,73,0,0,0,218,4,101,120,101,99,218,4,108,111, +- 97,100,41,5,114,71,0,0,0,114,158,0,0,0,218,4, +- 115,112,101,99,218,7,109,101,116,104,111,100,115,218,6,109, +- 111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, +- 108,101,95,115,104,105,109,71,2,0,0,115,14,0,0,0, +- 0,6,15,1,12,1,15,1,13,1,13,1,11,2,114,180, +- 0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,0, +- 19,0,0,0,67,0,0,0,115,243,1,0,0,105,0,0, +- 125,4,0,124,2,0,100,1,0,107,9,0,114,31,0,124, +- 2,0,124,4,0,100,2,0,60,110,6,0,100,3,0,125, +- 2,0,124,3,0,100,1,0,107,9,0,114,62,0,124,3, +- 0,124,4,0,100,4,0,60,110,0,0,124,0,0,100,1, +- 0,100,5,0,133,2,0,25,125,5,0,124,0,0,100,5, +- 0,100,6,0,133,2,0,25,125,6,0,124,0,0,100,6, +- 0,100,7,0,133,2,0,25,125,7,0,124,5,0,116,0, +- 0,107,3,0,114,168,0,100,8,0,106,1,0,124,2,0, +- 124,5,0,131,2,0,125,8,0,116,2,0,124,8,0,131, +- 1,0,1,116,3,0,124,8,0,124,4,0,141,1,0,130, +- 1,0,110,116,0,116,4,0,124,6,0,131,1,0,100,5, +- 0,107,3,0,114,226,0,100,9,0,106,1,0,124,2,0, +- 131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1, +- 116,5,0,124,8,0,131,1,0,130,1,0,110,58,0,116, +- 4,0,124,7,0,131,1,0,100,5,0,107,3,0,114,28, +- 1,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, +- 116,2,0,124,8,0,131,1,0,1,116,5,0,124,8,0, +- 131,1,0,130,1,0,110,0,0,124,1,0,100,1,0,107, +- 9,0,114,229,1,121,20,0,116,6,0,124,1,0,100,11, +- 0,25,131,1,0,125,9,0,87,110,18,0,4,116,7,0, +- 107,10,0,114,80,1,1,1,1,89,110,62,0,88,116,8, +- 0,124,6,0,131,1,0,124,9,0,107,3,0,114,142,1, +- 100,12,0,106,1,0,124,2,0,131,1,0,125,8,0,116, +- 2,0,124,8,0,131,1,0,1,116,3,0,124,8,0,124, +- 4,0,141,1,0,130,1,0,110,0,0,121,18,0,124,1, +- 0,100,13,0,25,100,14,0,64,125,10,0,87,110,18,0, +- 4,116,7,0,107,10,0,114,180,1,1,1,1,89,113,229, +- 1,88,116,8,0,124,7,0,131,1,0,124,10,0,107,3, +- 0,114,229,1,116,3,0,100,12,0,106,1,0,124,2,0, +- 131,1,0,124,4,0,141,1,0,130,1,0,113,229,1,110, +- 0,0,124,0,0,100,7,0,100,1,0,133,2,0,25,83, +- 41,15,97,122,1,0,0,86,97,108,105,100,97,116,101,32, +- 116,104,101,32,104,101,97,100,101,114,32,111,102,32,116,104, +- 101,32,112,97,115,115,101,100,45,105,110,32,98,121,116,101, +- 99,111,100,101,32,97,103,97,105,110,115,116,32,115,111,117, +- 114,99,101,95,115,116,97,116,115,32,40,105,102,10,32,32, +- 32,32,103,105,118,101,110,41,32,97,110,100,32,114,101,116, +- 117,114,110,105,110,103,32,116,104,101,32,98,121,116,101,99, +- 111,100,101,32,116,104,97,116,32,99,97,110,32,98,101,32, +- 99,111,109,112,105,108,101,100,32,98,121,32,99,111,109,112, +- 105,108,101,40,41,46,10,10,32,32,32,32,65,108,108,32, +- 111,116,104,101,114,32,97,114,103,117,109,101,110,116,115,32, +- 97,114,101,32,117,115,101,100,32,116,111,32,101,110,104,97, +- 110,99,101,32,101,114,114,111,114,32,114,101,112,111,114,116, +- 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, +- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, +- 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, +- 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, +- 99,116,32,111,114,32,116,104,101,32,98,121,116,101,99,111, +- 100,101,32,105,115,10,32,32,32,32,102,111,117,110,100,32, +- 116,111,32,98,101,32,115,116,97,108,101,46,32,69,79,70, +- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, +- 119,104,101,110,32,116,104,101,32,100,97,116,97,32,105,115, +- 32,102,111,117,110,100,32,116,111,32,98,101,10,32,32,32, +- 32,116,114,117,110,99,97,116,101,100,46,10,10,32,32,32, +- 32,78,114,67,0,0,0,122,10,60,98,121,116,101,99,111, +- 100,101,62,114,35,0,0,0,114,12,0,0,0,233,8,0, +- 0,0,233,12,0,0,0,122,30,98,97,100,32,109,97,103, +- 105,99,32,110,117,109,98,101,114,32,105,110,32,123,33,114, +- 125,58,32,123,33,114,125,122,43,114,101,97,99,104,101,100, +- 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, +- 110,103,32,116,105,109,101,115,116,97,109,112,32,105,110,32, +- 123,33,114,125,122,48,114,101,97,99,104,101,100,32,69,79, +- 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, +- 115,105,122,101,32,111,102,32,115,111,117,114,99,101,32,105, +- 110,32,123,33,114,125,218,5,109,116,105,109,101,122,26,98, +- 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, +- 32,102,111,114,32,123,33,114,125,218,4,115,105,122,101,108, +- 3,0,0,0,255,127,255,127,3,0,41,9,218,12,77,65, +- 71,73,67,95,78,85,77,66,69,82,114,47,0,0,0,114, +- 152,0,0,0,114,153,0,0,0,114,31,0,0,0,218,8, +- 69,79,70,69,114,114,111,114,114,14,0,0,0,114,79,0, +- 0,0,114,19,0,0,0,41,11,114,53,0,0,0,218,12, +- 115,111,117,114,99,101,95,115,116,97,116,115,114,67,0,0, +- 0,114,35,0,0,0,90,11,101,120,99,95,100,101,116,97, +- 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, +- 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, +- 105,122,101,114,151,0,0,0,218,12,115,111,117,114,99,101, +- 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, +- 105,122,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, +- 116,101,99,111,100,101,95,104,101,97,100,101,114,87,2,0, +- 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, +- 12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1, +- 18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1, +- 15,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, +- 10,1,18,1,3,1,18,1,13,1,5,2,18,1,15,1, +- 15,1,114,190,0,0,0,99,4,0,0,0,0,0,0,0, +- 5,0,0,0,6,0,0,0,67,0,0,0,115,115,0,0, +- 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, +- 116,2,0,124,4,0,116,3,0,131,2,0,114,78,0,116, +- 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, +- 2,0,107,9,0,114,74,0,116,5,0,106,6,0,124,4, +- 0,124,3,0,131,2,0,1,110,0,0,124,4,0,83,116, +- 7,0,100,3,0,106,8,0,124,2,0,131,1,0,100,4, +- 0,124,1,0,100,5,0,124,2,0,131,1,2,130,1,0, +- 100,2,0,83,41,6,122,60,67,111,109,112,105,108,101,32, +- 98,121,116,101,99,111,100,101,32,97,115,32,114,101,116,117, +- 114,110,101,100,32,98,121,32,95,118,97,108,105,100,97,116, +- 101,95,98,121,116,101,99,111,100,101,95,104,101,97,100,101, +- 114,40,41,46,122,21,99,111,100,101,32,111,98,106,101,99, +- 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, +- 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, +- 32,123,33,114,125,114,67,0,0,0,114,35,0,0,0,41, +- 9,218,7,109,97,114,115,104,97,108,90,5,108,111,97,100, +- 115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,95, +- 99,111,100,101,95,116,121,112,101,114,152,0,0,0,114,106, +- 0,0,0,90,16,95,102,105,120,95,99,111,95,102,105,108, +- 101,110,97,109,101,114,153,0,0,0,114,47,0,0,0,41, +- 5,114,53,0,0,0,114,67,0,0,0,114,140,0,0,0, +- 114,141,0,0,0,218,4,99,111,100,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,109, +- 112,105,108,101,95,98,121,116,101,99,111,100,101,142,2,0, +- 0,115,16,0,0,0,0,2,15,1,15,1,13,1,12,1, +- 19,1,4,2,18,1,114,195,0,0,0,114,84,0,0,0, +- 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, +- 0,67,0,0,0,115,76,0,0,0,116,0,0,116,1,0, +- 131,1,0,125,3,0,124,3,0,106,2,0,116,3,0,124, +- 1,0,131,1,0,131,1,0,1,124,3,0,106,2,0,116, +- 3,0,124,2,0,131,1,0,131,1,0,1,124,3,0,106, +- 2,0,116,4,0,106,5,0,124,0,0,131,1,0,131,1, +- 0,1,124,3,0,83,41,1,122,80,67,111,109,112,105,108, +- 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,32, +- 105,110,116,111,32,98,121,116,101,99,111,100,101,32,102,111, +- 114,32,119,114,105,116,105,110,103,32,111,117,116,32,116,111, +- 32,97,32,98,121,116,101,45,99,111,109,112,105,108,101,100, +- 10,32,32,32,32,102,105,108,101,46,41,6,218,9,98,121, +- 116,101,97,114,114,97,121,114,185,0,0,0,218,6,101,120, +- 116,101,110,100,114,17,0,0,0,114,191,0,0,0,90,5, +- 100,117,109,112,115,41,4,114,194,0,0,0,114,183,0,0, +- 0,114,189,0,0,0,114,53,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,100, +- 101,95,116,111,95,98,121,116,101,99,111,100,101,154,2,0, +- 0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,1, +- 114,198,0,0,0,99,1,0,0,0,0,0,0,0,5,0, +- 0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,100, +- 1,0,100,2,0,108,0,0,125,1,0,116,1,0,106,2, +- 0,124,0,0,131,1,0,106,3,0,125,2,0,124,1,0, +- 106,4,0,124,2,0,131,1,0,125,3,0,116,1,0,106, +- 5,0,100,2,0,100,3,0,131,2,0,125,4,0,124,4, +- 0,106,6,0,124,0,0,106,6,0,124,3,0,100,1,0, +- 25,131,1,0,131,1,0,83,41,4,122,121,68,101,99,111, +- 100,101,32,98,121,116,101,115,32,114,101,112,114,101,115,101, +- 110,116,105,110,103,32,115,111,117,114,99,101,32,99,111,100, +- 101,32,97,110,100,32,114,101,116,117,114,110,32,116,104,101, +- 32,115,116,114,105,110,103,46,10,10,32,32,32,32,85,110, +- 105,118,101,114,115,97,108,32,110,101,119,108,105,110,101,32, +- 115,117,112,112,111,114,116,32,105,115,32,117,115,101,100,32, +- 105,110,32,116,104,101,32,100,101,99,111,100,105,110,103,46, +- 10,32,32,32,32,114,84,0,0,0,78,84,41,7,218,8, +- 116,111,107,101,110,105,122,101,114,49,0,0,0,90,7,66, +- 121,116,101,115,73,79,90,8,114,101,97,100,108,105,110,101, +- 90,15,100,101,116,101,99,116,95,101,110,99,111,100,105,110, +- 103,90,25,73,110,99,114,101,109,101,110,116,97,108,78,101, +- 119,108,105,110,101,68,101,99,111,100,101,114,218,6,100,101, +- 99,111,100,101,41,5,218,12,115,111,117,114,99,101,95,98, +- 121,116,101,115,114,199,0,0,0,90,21,115,111,117,114,99, +- 101,95,98,121,116,101,115,95,114,101,97,100,108,105,110,101, +- 218,8,101,110,99,111,100,105,110,103,90,15,110,101,119,108, +- 105,110,101,95,100,101,99,111,100,101,114,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,111, +- 100,101,95,115,111,117,114,99,101,164,2,0,0,115,10,0, +- 0,0,0,5,12,1,18,1,15,1,18,1,114,203,0,0, +- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,0, +- 0,0,67,0,0,0,115,15,1,0,0,116,0,0,124,0, +- 0,100,1,0,100,0,0,131,3,0,125,1,0,116,1,0, +- 124,1,0,100,2,0,131,2,0,114,74,0,121,17,0,124, +- 1,0,106,2,0,124,0,0,131,1,0,83,87,113,74,0, +- 4,116,3,0,107,10,0,114,70,0,1,1,1,89,113,74, +- 0,88,110,0,0,121,13,0,124,0,0,106,4,0,125,2, +- 0,87,110,18,0,4,116,5,0,107,10,0,114,107,0,1, +- 1,1,89,110,29,0,88,124,2,0,100,0,0,107,9,0, +- 114,136,0,116,6,0,124,2,0,131,1,0,106,2,0,131, +- 0,0,83,121,13,0,124,0,0,106,7,0,125,3,0,87, +- 110,24,0,4,116,5,0,107,10,0,114,175,0,1,1,1, +- 100,3,0,125,3,0,89,110,1,0,88,121,13,0,124,0, +- 0,106,8,0,125,4,0,87,110,59,0,4,116,5,0,107, +- 10,0,114,250,0,1,1,1,124,1,0,100,0,0,107,8, +- 0,114,230,0,100,4,0,106,9,0,124,3,0,131,1,0, +- 83,100,5,0,106,9,0,124,3,0,124,1,0,131,2,0, +- 83,89,110,17,0,88,100,6,0,106,9,0,124,3,0,124, +- 4,0,131,2,0,83,100,0,0,83,41,7,78,218,10,95, +- 95,108,111,97,100,101,114,95,95,218,11,109,111,100,117,108, +- 101,95,114,101,112,114,250,1,63,122,13,60,109,111,100,117, +- 108,101,32,123,33,114,125,62,122,20,60,109,111,100,117,108, +- 101,32,123,33,114,125,32,40,123,33,114,125,41,62,122,23, +- 60,109,111,100,117,108,101,32,123,33,114,125,32,102,114,111, +- 109,32,123,33,114,125,62,41,10,114,62,0,0,0,114,60, +- 0,0,0,114,205,0,0,0,218,9,69,120,99,101,112,116, +- 105,111,110,218,8,95,95,115,112,101,99,95,95,218,14,65, +- 116,116,114,105,98,117,116,101,69,114,114,111,114,114,174,0, +- 0,0,114,57,0,0,0,218,8,95,95,102,105,108,101,95, +- 95,114,47,0,0,0,41,5,114,179,0,0,0,114,169,0, +- 0,0,114,177,0,0,0,114,67,0,0,0,114,131,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,12,95,109,111,100,117,108,101,95,114,101,112,114,178,2, +- 0,0,115,46,0,0,0,0,2,18,1,15,4,3,1,17, +- 1,13,1,8,1,3,1,13,1,13,1,5,2,12,1,16, +- 4,3,1,13,1,13,1,11,1,3,1,13,1,13,1,12, +- 1,13,2,21,2,114,211,0,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, +- 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, +- 0,90,5,0,100,7,0,83,41,8,218,17,95,105,110,115, +- 116,97,108,108,101,100,95,115,97,102,101,108,121,99,2,0, +- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, +- 0,0,115,25,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,1,0,106,1,0,124,0,0,95,2,0,100,0,0,83, +- 41,1,78,41,3,218,7,95,109,111,100,117,108,101,114,208, +- 0,0,0,218,5,95,115,112,101,99,41,2,114,71,0,0, +- 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,72,0,0,0,216,2,0,0,115,4, +- 0,0,0,0,1,9,1,122,26,95,105,110,115,116,97,108, +- 108,101,100,95,115,97,102,101,108,121,46,95,95,105,110,105, +- 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, +- 3,0,0,0,67,0,0,0,115,38,0,0,0,100,1,0, +- 124,0,0,106,0,0,95,1,0,124,0,0,106,2,0,116, +- 3,0,106,4,0,124,0,0,106,0,0,106,5,0,60,100, +- 0,0,83,41,2,78,84,41,6,114,214,0,0,0,218,13, +- 95,105,110,105,116,105,97,108,105,122,105,110,103,114,213,0, +- 0,0,114,7,0,0,0,114,73,0,0,0,114,67,0,0, +- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,75,0,0,0,220,2,0,0, +- 115,4,0,0,0,0,4,12,1,122,27,95,105,110,115,116, ++ 12,0,0,0,67,0,0,0,115,164,0,0,0,116,0,0, ++ 124,0,0,131,1,0,100,1,0,107,2,0,114,22,0,100, ++ 2,0,83,124,0,0,106,1,0,100,3,0,131,1,0,92, ++ 3,0,125,1,0,125,2,0,125,3,0,124,1,0,12,115, ++ 81,0,124,3,0,106,2,0,131,0,0,100,7,0,100,8, ++ 0,133,2,0,25,100,6,0,107,3,0,114,85,0,124,0, ++ 0,83,121,16,0,116,3,0,124,0,0,131,1,0,125,4, ++ 0,87,110,40,0,4,116,4,0,116,5,0,102,2,0,107, ++ 10,0,114,143,0,1,1,1,124,0,0,100,2,0,100,9, ++ 0,133,2,0,25,125,4,0,89,110,1,0,88,116,6,0, ++ 124,4,0,131,1,0,114,160,0,124,4,0,83,124,0,0, ++ 83,41,10,122,188,67,111,110,118,101,114,116,32,97,32,98, ++ 121,116,101,99,111,100,101,32,102,105,108,101,32,112,97,116, ++ 104,32,116,111,32,97,32,115,111,117,114,99,101,32,112,97, ++ 116,104,32,40,105,102,32,112,111,115,115,105,98,108,101,41, ++ 46,10,10,32,32,32,32,84,104,105,115,32,102,117,110,99, ++ 116,105,111,110,32,101,120,105,115,116,115,32,112,117,114,101, ++ 108,121,32,102,111,114,32,98,97,99,107,119,97,114,100,115, ++ 45,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102, ++ 111,114,10,32,32,32,32,80,121,73,109,112,111,114,116,95, ++ 69,120,101,99,67,111,100,101,77,111,100,117,108,101,87,105, ++ 116,104,70,105,108,101,110,97,109,101,115,40,41,32,105,110, ++ 32,116,104,101,32,67,32,65,80,73,46,10,10,32,32,32, ++ 32,114,85,0,0,0,78,114,117,0,0,0,233,3,0,0, ++ 0,114,30,0,0,0,90,2,112,121,233,253,255,255,255,233, ++ 255,255,255,255,114,139,0,0,0,41,7,114,32,0,0,0, ++ 114,33,0,0,0,218,5,108,111,119,101,114,114,136,0,0, ++ 0,114,125,0,0,0,114,134,0,0,0,114,45,0,0,0, ++ 41,5,218,13,98,121,116,101,99,111,100,101,95,112,97,116, ++ 104,90,4,114,101,115,116,114,37,0,0,0,90,9,101,120, ++ 116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95, ++ 112,97,116,104,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,15,95,103,101,116,95,115,111,117,114,99,101, ++ 102,105,108,101,231,1,0,0,115,20,0,0,0,0,7,18, ++ 1,4,1,24,1,35,1,4,1,3,1,16,1,19,1,21, ++ 1,114,143,0,0,0,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,0, ++ 121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,125, ++ 1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,0, ++ 1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,1, ++ 0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,51, ++ 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, ++ 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, ++ 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, ++ 108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,114, ++ 40,0,0,0,114,42,0,0,0,114,41,0,0,0,41,2, ++ 114,36,0,0,0,114,43,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,10,95,99,97,108,99, ++ 95,109,111,100,101,250,1,0,0,115,12,0,0,0,0,2, ++ 3,1,19,1,13,1,11,3,10,1,114,145,0,0,0,218, ++ 9,118,101,114,98,111,115,105,116,121,114,30,0,0,0,99, ++ 1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0, ++ 71,0,0,0,115,81,0,0,0,116,0,0,106,1,0,106, ++ 2,0,124,1,0,107,5,0,114,77,0,124,0,0,106,3, ++ 0,100,6,0,131,1,0,115,46,0,100,3,0,124,0,0, ++ 23,125,0,0,110,0,0,116,4,0,124,0,0,106,5,0, ++ 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, ++ 1,1,1,110,0,0,100,5,0,83,41,7,122,61,80,114, ++ 105,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32, ++ 116,111,32,115,116,100,101,114,114,32,105,102,32,45,118,47, ++ 80,89,84,72,79,78,86,69,82,66,79,83,69,32,105,115, ++ 32,116,117,114,110,101,100,32,111,110,46,250,1,35,250,7, ++ 105,109,112,111,114,116,32,122,2,35,32,114,55,0,0,0, ++ 78,41,2,114,147,0,0,0,114,148,0,0,0,41,7,114, ++ 8,0,0,0,114,118,0,0,0,218,7,118,101,114,98,111, ++ 115,101,114,10,0,0,0,218,5,112,114,105,110,116,114,48, ++ 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, ++ 101,115,115,97,103,101,114,146,0,0,0,114,81,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, ++ 101,6,2,0,0,115,8,0,0,0,0,2,18,1,15,1, ++ 13,1,114,153,0,0,0,99,1,0,0,0,0,0,0,0, ++ 2,0,0,0,4,0,0,0,3,0,0,0,115,38,0,0, ++ 0,100,1,0,135,0,0,102,1,0,100,2,0,100,3,0, ++ 134,1,0,125,1,0,116,0,0,124,1,0,136,0,0,131, ++ 2,0,1,124,1,0,83,41,4,122,252,68,101,99,111,114, ++ 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, ++ 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, ++ 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, ++ 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, ++ 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, ++ 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, ++ 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, ++ 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, ++ 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, ++ 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, ++ 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, ++ 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, ++ 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, ++ 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, ++ 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, ++ 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, ++ 0,4,0,0,0,5,0,0,0,31,0,0,0,115,83,0, ++ 0,0,124,1,0,100,0,0,107,8,0,114,24,0,124,0, ++ 0,106,0,0,125,1,0,110,40,0,124,0,0,106,0,0, ++ 124,1,0,107,3,0,114,64,0,116,1,0,100,1,0,124, ++ 1,0,22,100,2,0,124,1,0,131,1,1,130,1,0,110, ++ 0,0,136,0,0,124,0,0,124,1,0,124,2,0,124,3, ++ 0,142,2,0,83,41,3,78,122,23,108,111,97,100,101,114, ++ 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, ++ 115,114,68,0,0,0,41,2,114,68,0,0,0,218,11,73, ++ 109,112,111,114,116,69,114,114,111,114,41,4,114,72,0,0, ++ 0,114,68,0,0,0,114,81,0,0,0,114,109,0,0,0, ++ 41,1,218,6,109,101,116,104,111,100,114,5,0,0,0,114, ++ 6,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, ++ 101,95,119,114,97,112,112,101,114,22,2,0,0,115,10,0, ++ 0,0,0,1,12,1,12,1,15,1,25,1,122,40,95,99, ++ 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, ++ 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, ++ 114,97,112,112,101,114,41,1,114,66,0,0,0,41,2,114, ++ 155,0,0,0,114,156,0,0,0,114,5,0,0,0,41,1, ++ 114,155,0,0,0,114,6,0,0,0,218,11,95,99,104,101, ++ 99,107,95,110,97,109,101,14,2,0,0,115,6,0,0,0, ++ 0,8,21,6,13,1,114,157,0,0,0,99,1,0,0,0, ++ 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, ++ 115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,2, ++ 0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,0, ++ 131,2,0,1,124,1,0,83,41,3,122,49,68,101,99,111, ++ 114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,32, ++ 116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,101, ++ 32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,0, ++ 0,0,115,58,0,0,0,124,1,0,116,0,0,106,1,0, ++ 107,7,0,114,45,0,116,2,0,100,1,0,106,3,0,124, ++ 1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,1, ++ 0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,0, ++ 83,41,3,78,122,29,123,33,114,125,32,105,115,32,110,111, ++ 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, ++ 117,108,101,114,68,0,0,0,41,4,114,8,0,0,0,218, ++ 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, ++ 110,97,109,101,115,114,154,0,0,0,114,48,0,0,0,41, ++ 2,114,72,0,0,0,218,8,102,117,108,108,110,97,109,101, ++ 41,1,218,3,102,120,110,114,5,0,0,0,114,6,0,0, ++ 0,218,25,95,114,101,113,117,105,114,101,115,95,98,117,105, ++ 108,116,105,110,95,119,114,97,112,112,101,114,34,2,0,0, ++ 115,8,0,0,0,0,1,15,1,18,1,12,1,122,52,95, ++ 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, ++ 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, ++ 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, ++ 112,101,114,41,1,114,66,0,0,0,41,2,114,160,0,0, ++ 0,114,161,0,0,0,114,5,0,0,0,41,1,114,160,0, ++ 0,0,114,6,0,0,0,218,17,95,114,101,113,117,105,114, ++ 101,115,95,98,117,105,108,116,105,110,32,2,0,0,115,6, ++ 0,0,0,0,2,18,5,13,1,114,162,0,0,0,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, ++ 0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,1, ++ 0,100,2,0,134,0,0,125,1,0,116,0,0,124,1,0, ++ 136,0,0,131,2,0,1,124,1,0,83,41,3,122,47,68, ++ 101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105, ++ 102,121,32,116,104,101,32,110,97,109,101,100,32,109,111,100, ++ 117,108,101,32,105,115,32,102,114,111,122,101,110,46,99,2, ++ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19, ++ 0,0,0,115,58,0,0,0,116,0,0,106,1,0,124,1, ++ 0,131,1,0,115,45,0,116,2,0,100,1,0,106,3,0, ++ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, ++ 1,0,110,0,0,136,0,0,124,0,0,124,1,0,131,2, ++ 0,83,41,3,78,122,27,123,33,114,125,32,105,115,32,110, ++ 111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117, ++ 108,101,114,68,0,0,0,41,4,114,107,0,0,0,218,9, ++ 105,115,95,102,114,111,122,101,110,114,154,0,0,0,114,48, ++ 0,0,0,41,2,114,72,0,0,0,114,159,0,0,0,41, ++ 1,114,160,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, ++ 101,110,95,119,114,97,112,112,101,114,45,2,0,0,115,8, ++ 0,0,0,0,1,15,1,18,1,12,1,122,50,95,114,101, ++ 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, ++ 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, ++ 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,41, ++ 1,114,66,0,0,0,41,2,114,160,0,0,0,114,164,0, ++ 0,0,114,5,0,0,0,41,1,114,160,0,0,0,114,6, ++ 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, ++ 114,111,122,101,110,43,2,0,0,115,6,0,0,0,0,2, ++ 18,5,13,1,114,165,0,0,0,99,2,0,0,0,0,0, ++ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,87, ++ 0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,92, ++ 2,0,125,2,0,125,3,0,124,2,0,100,1,0,107,8, ++ 0,114,83,0,116,1,0,124,3,0,131,1,0,114,83,0, ++ 100,2,0,125,4,0,116,2,0,106,3,0,124,4,0,106, ++ 4,0,124,3,0,100,3,0,25,131,1,0,116,5,0,131, ++ 2,0,1,110,0,0,124,2,0,83,41,4,122,155,84,114, ++ 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100, ++ 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105, ++ 102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100, ++ 101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32, ++ 32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101, ++ 114,40,41,46,10,10,32,32,32,32,84,104,105,115,32,109, ++ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, ++ 116,101,100,32,105,110,32,102,97,118,111,114,32,111,102,32, ++ 102,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, ++ 40,41,46,10,10,32,32,32,32,78,122,44,78,111,116,32, ++ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116, ++ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32, ++ 95,95,105,110,105,116,95,95,114,85,0,0,0,41,6,218, ++ 11,102,105,110,100,95,108,111,97,100,101,114,114,32,0,0, ++ 0,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, ++ 114,110,114,48,0,0,0,218,13,73,109,112,111,114,116,87, ++ 97,114,110,105,110,103,41,5,114,72,0,0,0,114,159,0, ++ 0,0,218,6,108,111,97,100,101,114,218,8,112,111,114,116, ++ 105,111,110,115,218,3,109,115,103,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, ++ 109,111,100,117,108,101,95,115,104,105,109,54,2,0,0,115, ++ 10,0,0,0,0,10,21,1,24,1,6,1,32,1,114,173, ++ 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, ++ 3,0,0,0,67,0,0,0,115,93,0,0,0,116,0,0, ++ 124,1,0,124,0,0,131,2,0,125,2,0,116,1,0,124, ++ 2,0,131,1,0,125,3,0,124,1,0,116,2,0,106,3, ++ 0,107,6,0,114,79,0,116,2,0,106,3,0,124,1,0, ++ 25,125,4,0,124,3,0,106,4,0,124,4,0,131,1,0, ++ 1,116,2,0,106,3,0,124,1,0,25,83,124,3,0,106, ++ 5,0,131,0,0,83,100,1,0,83,41,2,122,128,76,111, ++ 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, ++ 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, ++ 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, ++ 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, ++ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, ++ 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, ++ 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41, ++ 6,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, ++ 100,101,114,218,12,95,83,112,101,99,77,101,116,104,111,100, ++ 115,114,8,0,0,0,114,74,0,0,0,218,4,101,120,101, ++ 99,218,4,108,111,97,100,41,5,114,72,0,0,0,114,159, ++ 0,0,0,218,4,115,112,101,99,218,7,109,101,116,104,111, ++ 100,115,218,6,109,111,100,117,108,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,108,111,97,100, ++ 95,109,111,100,117,108,101,95,115,104,105,109,71,2,0,0, ++ 115,14,0,0,0,0,6,15,1,12,1,15,1,13,1,13, ++ 1,11,2,114,181,0,0,0,99,4,0,0,0,0,0,0, ++ 0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,1, ++ 0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,9, ++ 0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,6, ++ 0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,0, ++ 114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,0, ++ 124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0, ++ 124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0, ++ 124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0, ++ 124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,106, ++ 1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2, ++ 0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4, ++ 0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,0, ++ 131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,106, ++ 1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8, ++ 0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1, ++ 0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,0, ++ 107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,131, ++ 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, ++ 5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,1, ++ 0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,0, ++ 124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,18, ++ 0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,110, ++ 62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,107, ++ 3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,1, ++ 0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,3, ++ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,0, ++ 121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,10, ++ 0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,1, ++ 1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,0, ++ 124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,106, ++ 1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,1, ++ 0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,0, ++ 133,2,0,25,83,41,15,97,122,1,0,0,86,97,108,105, ++ 100,97,116,101,32,116,104,101,32,104,101,97,100,101,114,32, ++ 111,102,32,116,104,101,32,112,97,115,115,101,100,45,105,110, ++ 32,98,121,116,101,99,111,100,101,32,97,103,97,105,110,115, ++ 116,32,115,111,117,114,99,101,95,115,116,97,116,115,32,40, ++ 105,102,10,32,32,32,32,103,105,118,101,110,41,32,97,110, ++ 100,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32, ++ 98,121,116,101,99,111,100,101,32,116,104,97,116,32,99,97, ++ 110,32,98,101,32,99,111,109,112,105,108,101,100,32,98,121, ++ 32,99,111,109,112,105,108,101,40,41,46,10,10,32,32,32, ++ 32,65,108,108,32,111,116,104,101,114,32,97,114,103,117,109, ++ 101,110,116,115,32,97,114,101,32,117,115,101,100,32,116,111, ++ 32,101,110,104,97,110,99,101,32,101,114,114,111,114,32,114, ++ 101,112,111,114,116,105,110,103,46,10,10,32,32,32,32,73, ++ 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, ++ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97, ++ 103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110, ++ 99,111,114,114,101,99,116,32,111,114,32,116,104,101,32,98, ++ 121,116,101,99,111,100,101,32,105,115,10,32,32,32,32,102, ++ 111,117,110,100,32,116,111,32,98,101,32,115,116,97,108,101, ++ 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, ++ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, ++ 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, ++ 101,10,32,32,32,32,116,114,117,110,99,97,116,101,100,46, ++ 10,10,32,32,32,32,78,114,68,0,0,0,122,10,60,98, ++ 121,116,101,99,111,100,101,62,114,36,0,0,0,114,13,0, ++ 0,0,233,8,0,0,0,233,12,0,0,0,122,30,98,97, ++ 100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105, ++ 110,32,123,33,114,125,58,32,123,33,114,125,122,43,114,101, ++ 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, ++ 114,101,97,100,105,110,103,32,116,105,109,101,115,116,97,109, ++ 112,32,105,110,32,123,33,114,125,122,48,114,101,97,99,104, ++ 101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97, ++ 100,105,110,103,32,115,105,122,101,32,111,102,32,115,111,117, ++ 114,99,101,32,105,110,32,123,33,114,125,218,5,109,116,105, ++ 109,101,122,26,98,121,116,101,99,111,100,101,32,105,115,32, ++ 115,116,97,108,101,32,102,111,114,32,123,33,114,125,218,4, ++ 115,105,122,101,108,3,0,0,0,255,127,255,127,3,0,41, ++ 9,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, ++ 48,0,0,0,114,153,0,0,0,114,154,0,0,0,114,32, ++ 0,0,0,218,8,69,79,70,69,114,114,111,114,114,15,0, ++ 0,0,114,80,0,0,0,114,20,0,0,0,41,11,114,54, ++ 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, ++ 115,114,68,0,0,0,114,36,0,0,0,90,11,101,120,99, ++ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90, ++ 13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8, ++ 114,97,119,95,115,105,122,101,114,152,0,0,0,218,12,115, ++ 111,117,114,99,101,95,109,116,105,109,101,218,11,115,111,117, ++ 114,99,101,95,115,105,122,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,25,95,118,97,108,105,100,97, ++ 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, ++ 101,114,87,2,0,0,115,76,0,0,0,0,11,6,1,12, ++ 1,13,3,6,1,12,1,13,1,16,1,16,1,16,1,12, ++ 1,18,1,10,1,18,1,18,1,15,1,10,1,15,1,18, ++ 1,15,1,10,1,15,1,12,1,3,1,20,1,13,1,5, ++ 2,18,1,15,1,10,1,18,1,3,1,18,1,13,1,5, ++ 2,18,1,15,1,15,1,114,191,0,0,0,99,4,0,0, ++ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, ++ 0,115,115,0,0,0,116,0,0,106,1,0,124,0,0,131, ++ 1,0,125,4,0,116,2,0,124,4,0,116,3,0,131,2, ++ 0,114,78,0,116,4,0,100,1,0,124,2,0,131,2,0, ++ 1,124,3,0,100,2,0,107,9,0,114,74,0,116,5,0, ++ 106,6,0,124,4,0,124,3,0,131,2,0,1,110,0,0, ++ 124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0, ++ 131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131, ++ 1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109, ++ 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, ++ 32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97, ++ 108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95, ++ 104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32, ++ 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, ++ 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, ++ 99,116,32,105,110,32,123,33,114,125,114,68,0,0,0,114, ++ 36,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90, ++ 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, ++ 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,153, ++ 0,0,0,114,107,0,0,0,90,16,95,102,105,120,95,99, ++ 111,95,102,105,108,101,110,97,109,101,114,154,0,0,0,114, ++ 48,0,0,0,41,5,114,54,0,0,0,114,68,0,0,0, ++ 114,141,0,0,0,114,142,0,0,0,218,4,99,111,100,101, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, ++ 100,101,142,2,0,0,115,16,0,0,0,0,2,15,1,15, ++ 1,13,1,12,1,19,1,4,2,18,1,114,196,0,0,0, ++ 114,85,0,0,0,99,3,0,0,0,0,0,0,0,4,0, ++ 0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,116, ++ 0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,2, ++ 0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,3, ++ 0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,0, ++ 1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,0, ++ 131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,67, ++ 111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,98, ++ 106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,111, ++ 100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,111, ++ 117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,109, ++ 112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,41, ++ 6,218,9,98,121,116,101,97,114,114,97,121,114,186,0,0, ++ 0,218,6,101,120,116,101,110,100,114,18,0,0,0,114,192, ++ 0,0,0,90,5,100,117,109,112,115,41,4,114,195,0,0, ++ 0,114,184,0,0,0,114,190,0,0,0,114,54,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,111, ++ 100,101,154,2,0,0,115,10,0,0,0,0,3,12,1,19, ++ 1,19,1,22,1,114,199,0,0,0,99,1,0,0,0,0, ++ 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, ++ 89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,0, ++ 116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,125, ++ 2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,3, ++ 0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,0, ++ 125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,124, ++ 3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,122, ++ 121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,101, ++ 112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,99, ++ 101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,114, ++ 110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,32, ++ 32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,119, ++ 108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,32, ++ 117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,111, ++ 100,105,110,103,46,10,32,32,32,32,114,85,0,0,0,78, ++ 84,41,7,218,8,116,111,107,101,110,105,122,101,114,50,0, ++ 0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,97, ++ 100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,110, ++ 99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,110, ++ 116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,101, ++ 114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,117, ++ 114,99,101,95,98,121,116,101,115,114,200,0,0,0,90,21, ++ 115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97, ++ 100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,90, ++ 15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,114, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 13,100,101,99,111,100,101,95,115,111,117,114,99,101,164,2, ++ 0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,18, ++ 1,114,204,0,0,0,99,1,0,0,0,0,0,0,0,5, ++ 0,0,0,35,0,0,0,67,0,0,0,115,15,1,0,0, ++ 116,0,0,124,0,0,100,1,0,100,0,0,131,3,0,125, ++ 1,0,116,1,0,124,1,0,100,2,0,131,2,0,114,74, ++ 0,121,17,0,124,1,0,106,2,0,124,0,0,131,1,0, ++ 83,87,113,74,0,4,116,3,0,107,10,0,114,70,0,1, ++ 1,1,89,113,74,0,88,110,0,0,121,13,0,124,0,0, ++ 106,4,0,125,2,0,87,110,18,0,4,116,5,0,107,10, ++ 0,114,107,0,1,1,1,89,110,29,0,88,124,2,0,100, ++ 0,0,107,9,0,114,136,0,116,6,0,124,2,0,131,1, ++ 0,106,2,0,131,0,0,83,121,13,0,124,0,0,106,7, ++ 0,125,3,0,87,110,24,0,4,116,5,0,107,10,0,114, ++ 175,0,1,1,1,100,3,0,125,3,0,89,110,1,0,88, ++ 121,13,0,124,0,0,106,8,0,125,4,0,87,110,59,0, ++ 4,116,5,0,107,10,0,114,250,0,1,1,1,124,1,0, ++ 100,0,0,107,8,0,114,230,0,100,4,0,106,9,0,124, ++ 3,0,131,1,0,83,100,5,0,106,9,0,124,3,0,124, ++ 1,0,131,2,0,83,89,110,17,0,88,100,6,0,106,9, ++ 0,124,3,0,124,4,0,131,2,0,83,100,0,0,83,41, ++ 7,78,218,10,95,95,108,111,97,100,101,114,95,95,218,11, ++ 109,111,100,117,108,101,95,114,101,112,114,250,1,63,122,13, ++ 60,109,111,100,117,108,101,32,123,33,114,125,62,122,20,60, ++ 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114, ++ 125,41,62,122,23,60,109,111,100,117,108,101,32,123,33,114, ++ 125,32,102,114,111,109,32,123,33,114,125,62,41,10,114,63, ++ 0,0,0,114,61,0,0,0,114,206,0,0,0,218,9,69, ++ 120,99,101,112,116,105,111,110,218,8,95,95,115,112,101,99, ++ 95,95,218,14,65,116,116,114,105,98,117,116,101,69,114,114, ++ 111,114,114,175,0,0,0,114,58,0,0,0,218,8,95,95, ++ 102,105,108,101,95,95,114,48,0,0,0,41,5,114,180,0, ++ 0,0,114,170,0,0,0,114,178,0,0,0,114,68,0,0, ++ 0,114,132,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,12,95,109,111,100,117,108,101,95,114, ++ 101,112,114,178,2,0,0,115,46,0,0,0,0,2,18,1, ++ 15,4,3,1,17,1,13,1,8,1,3,1,13,1,13,1, ++ 5,2,12,1,16,4,3,1,13,1,13,1,11,1,3,1, ++ 13,1,13,1,12,1,13,2,21,2,114,212,0,0,0,99, ++ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, ++ 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, ++ 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, ++ 100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218, ++ 17,95,105,110,115,116,97,108,108,101,100,95,115,97,102,101, ++ 108,121,99,2,0,0,0,0,0,0,0,2,0,0,0,2, ++ 0,0,0,67,0,0,0,115,25,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,1,0,106,1,0,124,0,0,95,2, ++ 0,100,0,0,83,41,1,78,41,3,218,7,95,109,111,100, ++ 117,108,101,114,209,0,0,0,218,5,95,115,112,101,99,41, ++ 2,114,72,0,0,0,114,180,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,73,0,0,0,216, ++ 2,0,0,115,4,0,0,0,0,1,9,1,122,26,95,105, ++ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, ++ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, ++ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,38,0, ++ 0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0, ++ 0,106,2,0,116,3,0,106,4,0,124,0,0,106,0,0, ++ 106,5,0,60,100,0,0,83,41,2,78,84,41,6,114,215, ++ 0,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, ++ 110,103,114,214,0,0,0,114,8,0,0,0,114,74,0,0, ++ 0,114,68,0,0,0,41,1,114,72,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,76,0,0, ++ 0,220,2,0,0,115,4,0,0,0,0,4,12,1,122,27, ++ 95,105,110,115,116,97,108,108,101,100,95,115,97,102,101,108, ++ 121,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, ++ 0,0,0,0,3,0,0,0,17,0,0,0,71,0,0,0, ++ 115,121,0,0,0,122,101,0,124,0,0,106,0,0,125,2, ++ 0,116,1,0,100,1,0,100,2,0,132,0,0,124,1,0, ++ 68,131,1,0,131,1,0,114,78,0,121,17,0,116,2,0, ++ 106,3,0,124,2,0,106,4,0,61,87,113,100,0,4,116, ++ 5,0,107,10,0,114,74,0,1,1,1,89,113,100,0,88, ++ 110,22,0,116,6,0,100,3,0,124,2,0,106,4,0,124, ++ 2,0,106,7,0,131,3,0,1,87,100,0,0,100,4,0, ++ 124,0,0,106,0,0,95,8,0,88,100,0,0,83,41,5, ++ 78,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, ++ 0,0,115,0,0,0,115,27,0,0,0,124,0,0,93,17, ++ 0,125,1,0,124,1,0,100,0,0,107,9,0,86,1,113, ++ 3,0,100,0,0,83,41,1,78,114,5,0,0,0,41,2, ++ 114,23,0,0,0,114,77,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,78,0,0,0,230,2, ++ 0,0,115,2,0,0,0,6,0,122,45,95,105,110,115,116, + 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, +- 110,116,101,114,95,95,99,1,0,0,0,0,0,0,0,3, +- 0,0,0,17,0,0,0,71,0,0,0,115,121,0,0,0, +- 122,101,0,124,0,0,106,0,0,125,2,0,116,1,0,100, +- 1,0,100,2,0,132,0,0,124,1,0,68,131,1,0,131, +- 1,0,114,78,0,121,17,0,116,2,0,106,3,0,124,2, +- 0,106,4,0,61,87,113,100,0,4,116,5,0,107,10,0, +- 114,74,0,1,1,1,89,113,100,0,88,110,22,0,116,6, +- 0,100,3,0,124,2,0,106,4,0,124,2,0,106,7,0, +- 131,3,0,1,87,100,0,0,100,4,0,124,0,0,106,0, +- 0,95,8,0,88,100,0,0,83,41,5,78,99,1,0,0, +- 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, +- 0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124, +- 1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,0, +- 83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0, +- 114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,77,0,0,0,230,2,0,0,115,2,0, +- 0,0,6,0,122,45,95,105,110,115,116,97,108,108,101,100, +- 95,115,97,102,101,108,121,46,95,95,101,120,105,116,95,95, +- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, +- 112,114,62,122,18,105,109,112,111,114,116,32,123,33,114,125, +- 32,35,32,123,33,114,125,70,41,9,114,214,0,0,0,114, +- 78,0,0,0,114,7,0,0,0,114,73,0,0,0,114,67, +- 0,0,0,114,79,0,0,0,114,152,0,0,0,114,169,0, +- 0,0,114,215,0,0,0,41,3,114,71,0,0,0,114,80, +- 0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,81,0,0,0,227,2,0,0, +- 115,18,0,0,0,0,1,3,1,9,1,25,1,3,1,17, +- 1,13,1,8,2,26,2,122,26,95,105,110,115,116,97,108, +- 108,101,100,95,115,97,102,101,108,121,46,95,95,101,120,105, +- 116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,72,0,0,0,114,75,0,0,0,114, +- 81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,212,0,0,0,214,2,0, +- 0,115,6,0,0,0,12,2,12,4,12,7,114,212,0,0, +- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,8,0, +- 0,0,64,0,0,0,115,172,0,0,0,101,0,0,90,1, +- 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, +- 100,3,0,100,4,0,100,3,0,100,5,0,100,3,0,100, +- 6,0,100,7,0,132,0,3,90,4,0,100,8,0,100,9, +- 0,132,0,0,90,5,0,100,10,0,100,11,0,132,0,0, +- 90,6,0,101,7,0,100,12,0,100,13,0,132,0,0,131, +- 1,0,90,8,0,101,8,0,106,9,0,100,14,0,100,13, +- 0,132,0,0,131,1,0,90,8,0,101,7,0,100,15,0, +- 100,16,0,132,0,0,131,1,0,90,10,0,101,7,0,100, +- 17,0,100,18,0,132,0,0,131,1,0,90,11,0,101,11, +- 0,106,9,0,100,19,0,100,18,0,132,0,0,131,1,0, +- 90,11,0,100,3,0,83,41,20,218,10,77,111,100,117,108, +- 101,83,112,101,99,97,208,5,0,0,84,104,101,32,115,112, +- 101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32, +- 97,32,109,111,100,117,108,101,44,32,117,115,101,100,32,102, +- 111,114,32,108,111,97,100,105,110,103,46,10,10,32,32,32, +- 32,65,32,109,111,100,117,108,101,39,115,32,115,112,101,99, +- 32,105,115,32,116,104,101,32,115,111,117,114,99,101,32,102, +- 111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97, +- 98,111,117,116,32,116,104,101,32,109,111,100,117,108,101,46, +- 32,32,70,111,114,10,32,32,32,32,100,97,116,97,32,97, +- 115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116, +- 104,101,32,109,111,100,117,108,101,44,32,105,110,99,108,117, +- 100,105,110,103,32,115,111,117,114,99,101,44,32,117,115,101, +- 32,116,104,101,32,115,112,101,99,39,115,10,32,32,32,32, +- 108,111,97,100,101,114,46,10,10,32,32,32,32,96,110,97, +- 109,101,96,32,105,115,32,116,104,101,32,97,98,115,111,108, +- 117,116,101,32,110,97,109,101,32,111,102,32,116,104,101,32, +- 109,111,100,117,108,101,46,32,32,96,108,111,97,100,101,114, +- 96,32,105,115,32,116,104,101,32,108,111,97,100,101,114,10, +- 32,32,32,32,116,111,32,117,115,101,32,119,104,101,110,32, +- 108,111,97,100,105,110,103,32,116,104,101,32,109,111,100,117, +- 108,101,46,32,32,96,112,97,114,101,110,116,96,32,105,115, +- 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, +- 10,32,32,32,32,112,97,99,107,97,103,101,32,116,104,101, +- 32,109,111,100,117,108,101,32,105,115,32,105,110,46,32,32, +- 84,104,101,32,112,97,114,101,110,116,32,105,115,32,100,101, +- 114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,110, +- 97,109,101,46,10,10,32,32,32,32,96,105,115,95,112,97, +- 99,107,97,103,101,96,32,100,101,116,101,114,109,105,110,101, +- 115,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32, +- 105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32, +- 112,97,99,107,97,103,101,32,111,114,10,32,32,32,32,110, +- 111,116,46,32,32,79,110,32,109,111,100,117,108,101,115,32, +- 116,104,105,115,32,105,115,32,114,101,102,108,101,99,116,101, +- 100,32,98,121,32,116,104,101,32,96,95,95,112,97,116,104, +- 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, +- 32,32,32,32,96,111,114,105,103,105,110,96,32,105,115,32, +- 116,104,101,32,115,112,101,99,105,102,105,99,32,108,111,99, +- 97,116,105,111,110,32,117,115,101,100,32,98,121,32,116,104, +- 101,32,108,111,97,100,101,114,32,102,114,111,109,32,119,104, +- 105,99,104,32,116,111,10,32,32,32,32,108,111,97,100,32, +- 116,104,101,32,109,111,100,117,108,101,44,32,105,102,32,116, +- 104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32, +- 105,115,32,97,118,97,105,108,97,98,108,101,46,32,32,87, +- 104,101,110,32,102,105,108,101,110,97,109,101,32,105,115,10, +- 32,32,32,32,115,101,116,44,32,111,114,105,103,105,110,32, +- 119,105,108,108,32,109,97,116,99,104,46,10,10,32,32,32, +- 32,96,104,97,115,95,108,111,99,97,116,105,111,110,96,32, +- 105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,97, +- 32,115,112,101,99,39,115,32,34,111,114,105,103,105,110,34, +- 32,114,101,102,108,101,99,116,115,32,97,32,108,111,99,97, +- 116,105,111,110,46,10,32,32,32,32,87,104,101,110,32,116, +- 104,105,115,32,105,115,32,84,114,117,101,44,32,96,95,95, +- 102,105,108,101,95,95,96,32,97,116,116,114,105,98,117,116, +- 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, +- 105,115,32,115,101,116,46,10,10,32,32,32,32,96,99,97, +- 99,104,101,100,96,32,105,115,32,116,104,101,32,108,111,99, +- 97,116,105,111,110,32,111,102,32,116,104,101,32,99,97,99, +- 104,101,100,32,98,121,116,101,99,111,100,101,32,102,105,108, +- 101,44,32,105,102,32,97,110,121,46,32,32,73,116,10,32, +- 32,32,32,99,111,114,114,101,115,112,111,110,100,115,32,116, +- 111,32,116,104,101,32,96,95,95,99,97,99,104,101,100,95, +- 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, +- 32,32,32,96,115,117,98,109,111,100,117,108,101,95,115,101, +- 97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,32, +- 105,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32, +- 111,102,32,112,97,116,104,32,101,110,116,114,105,101,115,32, +- 116,111,10,32,32,32,32,115,101,97,114,99,104,32,119,104, +- 101,110,32,105,109,112,111,114,116,105,110,103,32,115,117,98, +- 109,111,100,117,108,101,115,46,32,32,73,102,32,115,101,116, +- 44,32,105,115,95,112,97,99,107,97,103,101,32,115,104,111, +- 117,108,100,32,98,101,10,32,32,32,32,84,114,117,101,45, +- 45,97,110,100,32,70,97,108,115,101,32,111,116,104,101,114, +- 119,105,115,101,46,10,10,32,32,32,32,80,97,99,107,97, +- 103,101,115,32,97,114,101,32,115,105,109,112,108,121,32,109, +- 111,100,117,108,101,115,32,116,104,97,116,32,40,109,97,121, +- 41,32,104,97,118,101,32,115,117,98,109,111,100,117,108,101, +- 115,46,32,32,73,102,32,97,32,115,112,101,99,10,32,32, +- 32,32,104,97,115,32,97,32,110,111,110,45,78,111,110,101, +- 32,118,97,108,117,101,32,105,110,32,96,115,117,98,109,111, +- 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, +- 116,105,111,110,115,96,44,32,116,104,101,32,105,109,112,111, +- 114,116,10,32,32,32,32,115,121,115,116,101,109,32,119,105, +- 108,108,32,99,111,110,115,105,100,101,114,32,109,111,100,117, +- 108,101,115,32,108,111,97,100,101,100,32,102,114,111,109,32, +- 116,104,101,32,115,112,101,99,32,97,115,32,112,97,99,107, +- 97,103,101,115,46,10,10,32,32,32,32,79,110,108,121,32, +- 102,105,110,100,101,114,115,32,40,115,101,101,32,105,109,112, +- 111,114,116,108,105,98,46,97,98,99,46,77,101,116,97,80, +- 97,116,104,70,105,110,100,101,114,32,97,110,100,10,32,32, +- 32,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, +- 80,97,116,104,69,110,116,114,121,70,105,110,100,101,114,41, +- 32,115,104,111,117,108,100,32,109,111,100,105,102,121,32,77, +- 111,100,117,108,101,83,112,101,99,32,105,110,115,116,97,110, +- 99,101,115,46,10,10,32,32,32,32,218,6,111,114,105,103, +- 105,110,78,218,12,108,111,97,100,101,114,95,115,116,97,116, +- 101,218,10,105,115,95,112,97,99,107,97,103,101,99,3,0, +- 0,0,3,0,0,0,6,0,0,0,2,0,0,0,67,0, +- 0,0,115,79,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,2,0,124,0,0,95,1,0,124,3,0,124,0,0,95, +- 2,0,124,4,0,124,0,0,95,3,0,124,5,0,114,48, +- 0,103,0,0,110,3,0,100,0,0,124,0,0,95,4,0, +- 100,1,0,124,0,0,95,5,0,100,0,0,124,0,0,95, +- 6,0,100,0,0,83,41,2,78,70,41,7,114,67,0,0, +- 0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0, +- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, +- 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, +- 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, +- 99,104,101,100,41,6,114,71,0,0,0,114,67,0,0,0, +- 114,169,0,0,0,114,217,0,0,0,114,218,0,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,22,3,0,0,115,14,0,0, +- 0,0,2,9,1,9,1,9,1,9,1,21,3,9,1,122, +- 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, +- 105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,0, +- 0,4,0,0,0,67,0,0,0,115,153,0,0,0,100,1, +- 0,106,0,0,124,0,0,106,1,0,131,1,0,100,2,0, +- 106,0,0,124,0,0,106,2,0,131,1,0,103,2,0,125, +- 1,0,124,0,0,106,3,0,100,0,0,107,9,0,114,79, +- 0,124,1,0,106,4,0,100,3,0,106,0,0,124,0,0, +- 106,3,0,131,1,0,131,1,0,1,110,0,0,124,0,0, +- 106,5,0,100,0,0,107,9,0,114,122,0,124,1,0,106, +- 4,0,100,4,0,106,0,0,124,0,0,106,5,0,131,1, +- 0,131,1,0,1,110,0,0,100,5,0,106,0,0,124,0, +- 0,106,6,0,106,7,0,100,6,0,106,8,0,124,1,0, +- 131,1,0,131,2,0,83,41,7,78,122,9,110,97,109,101, +- 61,123,33,114,125,122,11,108,111,97,100,101,114,61,123,33, +- 114,125,122,11,111,114,105,103,105,110,61,123,33,114,125,122, +- 29,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, +- 104,95,108,111,99,97,116,105,111,110,115,61,123,125,122,6, +- 123,125,40,123,125,41,122,2,44,32,41,9,114,47,0,0, +- 0,114,67,0,0,0,114,169,0,0,0,114,217,0,0,0, +- 218,6,97,112,112,101,110,100,114,220,0,0,0,218,9,95, +- 95,99,108,97,115,115,95,95,114,57,0,0,0,114,26,0, +- 0,0,41,2,114,71,0,0,0,114,80,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,0, +- 0,0,34,3,0,0,115,16,0,0,0,0,1,15,1,21, +- 1,15,1,28,1,15,1,6,1,22,1,122,19,77,111,100, +- 117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95, +- 99,2,0,0,0,0,0,0,0,3,0,0,0,13,0,0, +- 0,67,0,0,0,115,145,0,0,0,124,0,0,106,0,0, +- 125,2,0,121,107,0,124,0,0,106,1,0,124,1,0,106, +- 1,0,107,2,0,111,114,0,124,0,0,106,2,0,124,1, +- 0,106,2,0,107,2,0,111,114,0,124,0,0,106,3,0, +- 124,1,0,106,3,0,107,2,0,111,114,0,124,2,0,124, +- 1,0,106,0,0,107,2,0,111,114,0,124,0,0,106,4, +- 0,124,1,0,106,4,0,107,2,0,111,114,0,124,0,0, +- 106,5,0,124,1,0,106,5,0,107,2,0,83,87,110,22, +- 0,4,116,6,0,107,10,0,114,140,0,1,1,1,100,1, +- 0,83,89,110,1,0,88,100,0,0,83,41,2,78,70,41, +- 7,114,220,0,0,0,114,67,0,0,0,114,169,0,0,0, +- 114,217,0,0,0,218,6,99,97,99,104,101,100,218,12,104, +- 97,115,95,108,111,99,97,116,105,111,110,114,209,0,0,0, +- 41,3,114,71,0,0,0,218,5,111,116,104,101,114,218,4, +- 115,109,115,108,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,6,95,95,101,113,95,95,44,3,0,0,115, +- 20,0,0,0,0,1,9,1,3,1,18,1,18,1,18,1, +- 15,1,18,1,20,1,13,1,122,17,77,111,100,117,108,101, +- 83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,0, +- 0,0,0,0,2,0,0,0,12,0,0,0,67,0,0,0, +- 115,158,0,0,0,124,0,0,106,0,0,100,0,0,107,8, +- 0,114,151,0,124,0,0,106,1,0,100,0,0,107,9,0, +- 114,151,0,124,0,0,106,2,0,114,151,0,124,0,0,106, +- 1,0,125,1,0,124,1,0,106,3,0,116,4,0,116,5, +- 0,131,1,0,131,1,0,114,112,0,121,19,0,116,6,0, +- 124,1,0,131,1,0,124,0,0,95,0,0,87,113,145,0, +- 4,116,7,0,107,10,0,114,108,0,1,1,1,89,113,145, +- 0,88,113,148,0,124,1,0,106,3,0,116,4,0,116,8, +- 0,131,1,0,131,1,0,114,148,0,124,1,0,124,0,0, +- 95,0,0,113,148,0,113,151,0,110,0,0,124,0,0,106, +- 0,0,83,41,1,78,41,9,114,222,0,0,0,114,217,0, +- 0,0,114,221,0,0,0,218,8,101,110,100,115,119,105,116, +- 104,218,5,116,117,112,108,101,114,134,0,0,0,114,132,0, +- 0,0,114,124,0,0,0,218,17,66,89,84,69,67,79,68, +- 69,95,83,85,70,70,73,88,69,83,41,2,114,71,0,0, +- 0,114,131,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,225,0,0,0,56,3,0,0,115,22, +- 0,0,0,0,2,15,1,24,1,9,1,21,1,3,1,19, +- 1,13,1,8,1,21,1,18,1,122,17,77,111,100,117,108, +- 101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, +- 0,115,13,0,0,0,124,1,0,124,0,0,95,0,0,100, +- 0,0,83,41,1,78,41,1,114,222,0,0,0,41,2,114, +- 71,0,0,0,114,225,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,225,0,0,0,70,3,0, +- 0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,0, +- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,46,0, +- 0,0,124,0,0,106,0,0,100,1,0,107,8,0,114,35, +- 0,124,0,0,106,1,0,106,2,0,100,2,0,131,1,0, +- 100,3,0,25,83,124,0,0,106,1,0,83,100,1,0,83, +- 41,4,122,32,84,104,101,32,110,97,109,101,32,111,102,32, +- 116,104,101,32,109,111,100,117,108,101,39,115,32,112,97,114, +- 101,110,116,46,78,114,116,0,0,0,114,84,0,0,0,41, +- 3,114,220,0,0,0,114,67,0,0,0,114,32,0,0,0, +- 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,6,112,97,114,101,110,116,74,3, +- 0,0,115,6,0,0,0,0,3,15,1,20,2,122,17,77, +- 111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,116, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0, +- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, +- 83,41,1,78,41,1,114,221,0,0,0,41,1,114,71,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,226,0,0,0,82,3,0,0,115,2,0,0,0,0, +- 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97, +- 115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, +- 19,0,0,0,116,0,0,124,1,0,131,1,0,124,0,0, +- 95,1,0,100,0,0,83,41,1,78,41,2,218,4,98,111, +- 111,108,114,221,0,0,0,41,2,114,71,0,0,0,218,5, +- 118,97,108,117,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,226,0,0,0,86,3,0,0,115,2,0, +- 0,0,0,2,41,12,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, +- 101,0,0,0,114,229,0,0,0,218,8,112,114,111,112,101, +- 114,116,121,114,225,0,0,0,218,6,115,101,116,116,101,114, +- 114,233,0,0,0,114,226,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,216, +- 0,0,0,241,2,0,0,115,20,0,0,0,12,35,6,2, +- 15,1,15,11,12,10,12,12,18,14,21,4,18,8,18,4, +- 114,216,0,0,0,114,217,0,0,0,114,219,0,0,0,99, +- 2,0,0,0,2,0,0,0,5,0,0,0,15,0,0,0, +- 67,0,0,0,115,193,0,0,0,116,0,0,124,1,0,100, +- 1,0,131,2,0,114,83,0,124,3,0,100,2,0,107,8, +- 0,114,43,0,116,1,0,124,0,0,100,3,0,124,1,0, +- 131,1,1,83,124,3,0,114,55,0,103,0,0,110,3,0, +- 100,2,0,125,4,0,116,1,0,124,0,0,100,3,0,124, +- 1,0,100,4,0,124,4,0,131,1,2,83,124,3,0,100, +- 2,0,107,8,0,114,168,0,116,0,0,124,1,0,100,5, +- 0,131,2,0,114,159,0,121,19,0,124,1,0,106,2,0, +- 124,0,0,131,1,0,125,3,0,87,113,165,0,4,116,3, +- 0,107,10,0,114,155,0,1,1,1,100,2,0,125,3,0, +- 89,113,165,0,88,113,168,0,100,6,0,125,3,0,110,0, +- 0,116,4,0,124,0,0,124,1,0,100,7,0,124,2,0, +- 100,5,0,124,3,0,131,2,2,83,41,8,122,53,82,101, +- 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, +- 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105, +- 111,117,115,32,108,111,97,100,101,114,32,109,101,116,104,111, +- 100,115,46,218,12,103,101,116,95,102,105,108,101,110,97,109, +- 101,78,114,169,0,0,0,114,220,0,0,0,114,219,0,0, +- 0,70,114,217,0,0,0,41,5,114,60,0,0,0,218,23, +- 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, +- 111,99,97,116,105,111,110,114,219,0,0,0,114,153,0,0, +- 0,114,216,0,0,0,41,5,114,67,0,0,0,114,169,0, +- 0,0,114,217,0,0,0,114,219,0,0,0,90,6,115,101, +- 97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,173,0,0,0,91,3,0,0,115,28,0,0, +- 0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,12, +- 1,15,1,3,1,19,1,13,1,14,3,9,2,114,173,0, +- 0,0,114,169,0,0,0,114,220,0,0,0,99,2,0,0, +- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, +- 0,115,110,1,0,0,124,1,0,100,1,0,107,8,0,114, +- 79,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, +- 0,131,2,0,114,79,0,121,19,0,124,2,0,106,1,0, +- 124,0,0,131,1,0,125,1,0,87,113,76,0,4,116,2, +- 0,107,10,0,114,72,0,1,1,1,89,113,76,0,88,113, +- 79,0,110,0,0,116,3,0,124,0,0,124,2,0,100,4, +- 0,124,1,0,131,2,1,125,4,0,100,5,0,124,4,0, +- 95,4,0,124,2,0,100,1,0,107,8,0,114,203,0,120, +- 79,0,116,5,0,131,0,0,68,93,61,0,92,2,0,125, +- 5,0,125,6,0,124,1,0,106,6,0,116,7,0,124,6, +- 0,131,1,0,131,1,0,114,131,0,124,5,0,124,0,0, +- 124,1,0,131,2,0,125,2,0,124,2,0,124,4,0,95, +- 8,0,80,113,131,0,113,131,0,87,100,1,0,83,110,0, +- 0,124,3,0,116,9,0,107,8,0,114,38,1,116,0,0, +- 124,2,0,100,6,0,131,2,0,114,47,1,121,19,0,124, +- 2,0,106,10,0,124,0,0,131,1,0,125,7,0,87,110, +- 18,0,4,116,2,0,107,10,0,114,13,1,1,1,1,89, +- 113,35,1,88,124,7,0,114,35,1,103,0,0,124,4,0, +- 95,11,0,113,35,1,113,47,1,110,9,0,124,3,0,124, +- 4,0,95,11,0,124,4,0,106,11,0,103,0,0,107,2, +- 0,114,106,1,124,1,0,114,106,1,116,12,0,124,1,0, +- 131,1,0,100,7,0,25,125,8,0,124,4,0,106,11,0, +- 106,13,0,124,8,0,131,1,0,1,113,106,1,110,0,0, +- 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, +- 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, +- 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, +- 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, +- 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, +- 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, +- 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, +- 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, +- 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, +- 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, +- 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, +- 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, +- 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, +- 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, +- 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, +- 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, +- 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, +- 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, +- 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, +- 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, +- 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, +- 111,119,110,62,114,238,0,0,0,114,217,0,0,0,84,114, +- 219,0,0,0,114,84,0,0,0,41,14,114,60,0,0,0, +- 114,238,0,0,0,114,153,0,0,0,114,216,0,0,0,114, +- 221,0,0,0,218,27,95,103,101,116,95,115,117,112,112,111, +- 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114, +- 115,114,230,0,0,0,114,231,0,0,0,114,169,0,0,0, +- 218,9,95,80,79,80,85,76,65,84,69,114,219,0,0,0, +- 114,220,0,0,0,114,38,0,0,0,114,223,0,0,0,41, +- 9,114,67,0,0,0,218,8,108,111,99,97,116,105,111,110, +- 114,169,0,0,0,114,220,0,0,0,114,177,0,0,0,218, +- 12,108,111,97,100,101,114,95,99,108,97,115,115,114,127,0, +- 0,0,114,219,0,0,0,90,7,100,105,114,110,97,109,101, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 239,0,0,0,116,3,0,0,115,60,0,0,0,0,12,12, +- 4,6,1,15,2,3,1,19,1,13,1,11,8,21,1,9, +- 3,12,1,22,1,21,1,15,1,9,1,8,2,7,3,12, +- 2,15,1,3,1,19,1,13,1,5,2,6,1,18,2,9, +- 1,15,1,6,1,16,1,22,2,114,239,0,0,0,99,3, +- 0,0,0,0,0,0,0,8,0,0,0,53,0,0,0,67, +- 0,0,0,115,124,1,0,0,121,13,0,124,0,0,106,0, +- 0,125,3,0,87,110,18,0,4,116,1,0,107,10,0,114, +- 33,0,1,1,1,89,110,17,0,88,124,3,0,100,0,0, +- 107,9,0,114,50,0,124,3,0,83,124,0,0,106,2,0, +- 125,4,0,124,1,0,100,0,0,107,8,0,114,108,0,121, +- 13,0,124,0,0,106,3,0,125,1,0,87,113,108,0,4, +- 116,1,0,107,10,0,114,104,0,1,1,1,89,113,108,0, +- 88,110,0,0,121,13,0,124,0,0,106,4,0,125,5,0, +- 87,110,24,0,4,116,1,0,107,10,0,114,147,0,1,1, +- 1,100,0,0,125,5,0,89,110,1,0,88,124,2,0,100, +- 0,0,107,8,0,114,224,0,124,5,0,100,0,0,107,8, +- 0,114,215,0,121,13,0,124,1,0,106,5,0,125,2,0, +- 87,113,221,0,4,116,1,0,107,10,0,114,211,0,1,1, +- 1,100,0,0,125,2,0,89,113,221,0,88,113,224,0,124, +- 5,0,125,2,0,110,0,0,121,13,0,124,0,0,106,6, +- 0,125,6,0,87,110,24,0,4,116,1,0,107,10,0,114, +- 7,1,1,1,1,100,0,0,125,6,0,89,110,1,0,88, +- 121,19,0,116,7,0,124,0,0,106,8,0,131,1,0,125, +- 7,0,87,110,24,0,4,116,1,0,107,10,0,114,53,1, +- 1,1,1,100,0,0,125,7,0,89,110,1,0,88,116,9, +- 0,124,4,0,124,1,0,100,1,0,124,2,0,131,2,1, +- 125,3,0,124,5,0,100,0,0,107,8,0,114,93,1,100, +- 2,0,110,3,0,100,3,0,124,3,0,95,10,0,124,6, +- 0,124,3,0,95,11,0,124,7,0,124,3,0,95,12,0, +- 124,3,0,83,41,4,78,114,217,0,0,0,70,84,41,13, +- 114,208,0,0,0,114,209,0,0,0,114,57,0,0,0,114, +- 204,0,0,0,114,210,0,0,0,90,7,95,79,82,73,71, +- 73,78,218,10,95,95,99,97,99,104,101,100,95,95,218,4, +- 108,105,115,116,218,8,95,95,112,97,116,104,95,95,114,216, +- 0,0,0,114,221,0,0,0,114,225,0,0,0,114,220,0, +- 0,0,41,8,114,179,0,0,0,114,169,0,0,0,114,217, +- 0,0,0,114,177,0,0,0,114,67,0,0,0,114,242,0, +- 0,0,114,225,0,0,0,114,220,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,17,95,115,112, +- 101,99,95,102,114,111,109,95,109,111,100,117,108,101,180,3, +- 0,0,115,72,0,0,0,0,2,3,1,13,1,13,1,5, +- 2,12,1,4,2,9,1,12,1,3,1,13,1,13,2,8, +- 1,3,1,13,1,13,1,11,1,12,1,12,1,3,1,13, +- 1,13,1,14,2,9,1,3,1,13,1,13,1,11,1,3, +- 1,19,1,13,1,11,2,21,1,27,1,9,1,9,1,114, +- 247,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,6,0,0,0,64,0,0,0,115,142,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, +- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, +- 5,0,132,0,0,90,5,0,100,6,0,100,7,0,100,8, +- 0,100,9,0,100,10,0,100,11,0,132,0,2,90,6,0, +- 100,12,0,100,13,0,132,0,0,90,7,0,100,14,0,100, +- 15,0,132,0,0,90,8,0,100,16,0,100,17,0,132,0, +- 0,90,9,0,100,18,0,100,19,0,132,0,0,90,10,0, +- 100,20,0,100,21,0,132,0,0,90,11,0,100,22,0,100, +- 23,0,132,0,0,90,12,0,100,24,0,83,41,25,114,174, +- 0,0,0,122,77,67,111,110,118,101,110,105,101,110,99,101, +- 32,119,114,97,112,112,101,114,32,97,114,111,117,110,100,32, +- 115,112,101,99,32,111,98,106,101,99,116,115,32,116,111,32, +- 112,114,111,118,105,100,101,32,115,112,101,99,45,115,112,101, +- 99,105,102,105,99,10,32,32,32,32,109,101,116,104,111,100, +- 115,46,99,2,0,0,0,0,0,0,0,2,0,0,0,2, +- 0,0,0,67,0,0,0,115,13,0,0,0,124,1,0,124, +- 0,0,95,0,0,100,0,0,83,41,1,78,41,1,114,177, +- 0,0,0,41,2,114,71,0,0,0,114,177,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, +- 0,0,0,232,3,0,0,115,2,0,0,0,0,1,122,21, +- 95,83,112,101,99,77,101,116,104,111,100,115,46,95,95,105, +- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,67,0,0,0,115,158,0,0,0,124, +- 0,0,106,0,0,125,1,0,124,1,0,106,1,0,100,1, +- 0,107,8,0,114,30,0,100,2,0,110,6,0,124,1,0, +- 106,1,0,125,2,0,124,1,0,106,2,0,100,1,0,107, +- 8,0,114,104,0,124,1,0,106,3,0,100,1,0,107,8, +- 0,114,82,0,100,3,0,106,4,0,124,2,0,131,1,0, +- 83,100,4,0,106,4,0,124,2,0,124,1,0,106,3,0, +- 131,2,0,83,110,50,0,124,1,0,106,5,0,114,132,0, +- 100,5,0,106,4,0,124,2,0,124,1,0,106,2,0,131, +- 2,0,83,100,6,0,106,4,0,124,1,0,106,1,0,124, +- 1,0,106,2,0,131,2,0,83,100,1,0,83,41,7,122, +- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, +- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, +- 109,111,100,117,108,101,46,78,114,206,0,0,0,122,13,60, +- 109,111,100,117,108,101,32,123,33,114,125,62,122,20,60,109, +- 111,100,117,108,101,32,123,33,114,125,32,40,123,33,114,125, +- 41,62,122,23,60,109,111,100,117,108,101,32,123,33,114,125, +- 32,102,114,111,109,32,123,33,114,125,62,122,18,60,109,111, +- 100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,41, +- 6,114,177,0,0,0,114,67,0,0,0,114,217,0,0,0, +- 114,169,0,0,0,114,47,0,0,0,114,226,0,0,0,41, +- 3,114,71,0,0,0,114,177,0,0,0,114,67,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 205,0,0,0,235,3,0,0,115,18,0,0,0,0,3,9, +- 1,30,1,15,1,15,1,13,2,22,2,9,1,19,2,122, +- 24,95,83,112,101,99,77,101,116,104,111,100,115,46,109,111, +- 100,117,108,101,95,114,101,112,114,218,9,95,111,118,101,114, +- 114,105,100,101,70,218,11,95,102,111,114,99,101,95,110,97, +- 109,101,84,99,2,0,0,0,2,0,0,0,6,0,0,0, +- 66,0,0,0,67,0,0,0,115,75,2,0,0,124,0,0, +- 106,0,0,125,4,0,124,2,0,115,45,0,124,3,0,115, +- 45,0,116,1,0,124,1,0,100,1,0,100,2,0,131,3, +- 0,100,2,0,107,8,0,114,85,0,121,16,0,124,4,0, +- 106,2,0,124,1,0,95,3,0,87,113,85,0,4,116,4, +- 0,107,10,0,114,81,0,1,1,1,89,113,85,0,88,110, +- 0,0,124,2,0,115,115,0,116,1,0,124,1,0,100,3, +- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,221,0, +- 124,4,0,106,5,0,125,5,0,124,5,0,100,2,0,107, +- 8,0,114,184,0,124,4,0,106,6,0,100,2,0,107,9, +- 0,114,184,0,116,7,0,106,8,0,116,7,0,131,1,0, +- 125,5,0,124,4,0,106,6,0,124,5,0,95,9,0,113, +- 184,0,110,0,0,121,13,0,124,5,0,124,1,0,95,10, +- 0,87,113,221,0,4,116,4,0,107,10,0,114,217,0,1, +- 1,1,89,113,221,0,88,110,0,0,124,2,0,115,251,0, +- 116,1,0,124,1,0,100,4,0,100,2,0,131,3,0,100, +- 2,0,107,8,0,114,35,1,121,16,0,124,4,0,106,11, +- 0,124,1,0,95,12,0,87,113,35,1,4,116,4,0,107, +- 10,0,114,31,1,1,1,1,89,113,35,1,88,110,0,0, +- 121,13,0,124,4,0,124,1,0,95,13,0,87,110,18,0, +- 4,116,4,0,107,10,0,114,68,1,1,1,1,89,110,1, +- 0,88,124,2,0,115,99,1,116,1,0,124,1,0,100,5, +- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,157,1, +- 124,4,0,106,6,0,100,2,0,107,9,0,114,157,1,121, +- 16,0,124,4,0,106,6,0,124,1,0,95,14,0,87,113, +- 154,1,4,116,4,0,107,10,0,114,150,1,1,1,1,89, +- 113,154,1,88,113,157,1,110,0,0,124,4,0,106,15,0, +- 114,71,2,124,2,0,115,196,1,116,1,0,124,1,0,100, +- 6,0,100,2,0,131,3,0,100,2,0,107,8,0,114,236, +- 1,121,16,0,124,4,0,106,16,0,124,1,0,95,17,0, +- 87,113,236,1,4,116,4,0,107,10,0,114,232,1,1,1, +- 1,89,113,236,1,88,110,0,0,124,2,0,115,10,2,116, +- 1,0,124,1,0,100,7,0,100,2,0,131,3,0,100,2, +- 0,107,8,0,114,71,2,124,4,0,106,18,0,100,2,0, +- 107,9,0,114,68,2,121,16,0,124,4,0,106,18,0,124, +- 1,0,95,19,0,87,113,65,2,4,116,4,0,107,10,0, +- 114,61,2,1,1,1,89,113,65,2,88,113,68,2,113,71, +- 2,110,0,0,100,2,0,83,41,8,97,29,2,0,0,83, +- 101,116,32,116,104,101,32,109,111,100,117,108,101,39,115,32, +- 97,116,116,114,105,98,117,116,101,115,46,10,10,32,32,32, +- 32,32,32,32,32,65,108,108,32,109,105,115,115,105,110,103, +- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, +- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, +- 115,32,119,105,108,108,32,98,101,32,115,101,116,46,32,32, +- 72,101,114,101,10,32,32,32,32,32,32,32,32,105,115,32, +- 104,111,119,32,116,104,101,32,115,112,101,99,32,97,116,116, +- 114,105,98,117,116,101,115,32,109,97,112,32,111,110,116,111, +- 32,116,104,101,32,109,111,100,117,108,101,58,10,10,32,32, +- 32,32,32,32,32,32,115,112,101,99,46,110,97,109,101,32, +- 45,62,32,109,111,100,117,108,101,46,95,95,110,97,109,101, +- 95,95,10,32,32,32,32,32,32,32,32,115,112,101,99,46, +- 108,111,97,100,101,114,32,45,62,32,109,111,100,117,108,101, +- 46,95,95,108,111,97,100,101,114,95,95,10,32,32,32,32, +- 32,32,32,32,115,112,101,99,46,112,97,114,101,110,116,32, +- 45,62,32,109,111,100,117,108,101,46,95,95,112,97,99,107, +- 97,103,101,95,95,10,32,32,32,32,32,32,32,32,115,112, +- 101,99,32,45,62,32,109,111,100,117,108,101,46,95,95,115, +- 112,101,99,95,95,10,10,32,32,32,32,32,32,32,32,79, +- 112,116,105,111,110,97,108,58,10,32,32,32,32,32,32,32, +- 32,115,112,101,99,46,111,114,105,103,105,110,32,45,62,32, +- 109,111,100,117,108,101,46,95,95,102,105,108,101,95,95,32, +- 40,105,102,32,115,112,101,99,46,115,101,116,95,102,105,108, +- 101,97,116,116,114,32,105,115,32,116,114,117,101,41,10,32, +- 32,32,32,32,32,32,32,115,112,101,99,46,99,97,99,104, +- 101,100,32,45,62,32,109,111,100,117,108,101,46,95,95,99, +- 97,99,104,101,100,95,95,32,40,105,102,32,95,95,102,105, +- 108,101,95,95,32,97,108,115,111,32,115,101,116,41,10,32, +- 32,32,32,32,32,32,32,115,112,101,99,46,115,117,98,109, +- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, +- 97,116,105,111,110,115,32,45,62,32,109,111,100,117,108,101, +- 46,95,95,112,97,116,104,95,95,32,40,105,102,32,115,101, +- 116,41,10,10,32,32,32,32,32,32,32,32,114,57,0,0, +- 0,78,114,204,0,0,0,218,11,95,95,112,97,99,107,97, +- 103,101,95,95,114,246,0,0,0,114,210,0,0,0,114,244, +- 0,0,0,41,20,114,177,0,0,0,114,62,0,0,0,114, +- 67,0,0,0,114,57,0,0,0,114,209,0,0,0,114,169, +- 0,0,0,114,220,0,0,0,218,16,95,78,97,109,101,115, +- 112,97,99,101,76,111,97,100,101,114,218,7,95,95,110,101, +- 119,95,95,218,5,95,112,97,116,104,114,204,0,0,0,114, +- 233,0,0,0,114,250,0,0,0,114,208,0,0,0,114,246, +- 0,0,0,114,226,0,0,0,114,217,0,0,0,114,210,0, +- 0,0,114,225,0,0,0,114,244,0,0,0,41,6,114,71, +- 0,0,0,114,179,0,0,0,114,248,0,0,0,114,249,0, +- 0,0,114,177,0,0,0,114,169,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,17,105,110,105, +- 116,95,109,111,100,117,108,101,95,97,116,116,114,115,251,3, +- 0,0,115,88,0,0,0,0,17,9,6,12,1,24,1,3, +- 1,16,1,13,1,8,3,30,1,9,1,12,2,15,1,15, +- 1,18,1,3,1,13,1,13,1,8,3,30,1,3,1,16, +- 1,13,1,8,3,3,1,13,1,13,1,5,3,30,1,15, +- 1,3,1,16,1,13,1,11,2,9,2,30,1,3,1,16, +- 1,13,1,8,3,30,1,15,1,3,1,16,1,13,1,122, +- 30,95,83,112,101,99,77,101,116,104,111,100,115,46,105,110, +- 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, +- 67,0,0,0,115,101,0,0,0,124,0,0,106,0,0,125, +- 1,0,116,1,0,124,1,0,106,2,0,100,1,0,131,2, +- 0,114,48,0,124,1,0,106,2,0,106,3,0,124,1,0, +- 131,1,0,125,2,0,110,6,0,100,2,0,125,2,0,124, +- 2,0,100,2,0,107,8,0,114,84,0,116,4,0,124,1, +- 0,106,5,0,131,1,0,125,2,0,110,0,0,124,0,0, +- 106,6,0,124,2,0,131,1,0,1,124,2,0,83,41,3, +- 122,153,82,101,116,117,114,110,32,97,32,110,101,119,32,109, +- 111,100,117,108,101,32,116,111,32,98,101,32,108,111,97,100, +- 101,100,46,10,10,32,32,32,32,32,32,32,32,84,104,101, +- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, +- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, +- 115,32,97,114,101,32,97,108,115,111,32,115,101,116,32,119, +- 105,116,104,32,116,104,101,10,32,32,32,32,32,32,32,32, +- 97,112,112,114,111,112,114,105,97,116,101,32,118,97,108,117, +- 101,115,32,102,114,111,109,32,116,104,101,32,115,112,101,99, +- 46,10,10,32,32,32,32,32,32,32,32,218,13,99,114,101, +- 97,116,101,95,109,111,100,117,108,101,78,41,7,114,177,0, +- 0,0,114,60,0,0,0,114,169,0,0,0,114,255,0,0, +- 0,114,68,0,0,0,114,67,0,0,0,114,254,0,0,0, +- 41,3,114,71,0,0,0,114,177,0,0,0,114,179,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,6,99,114,101,97,116,101,75,4,0,0,115,16,0,0, +- 0,0,7,9,2,18,3,21,2,6,1,12,4,18,1,13, +- 1,122,19,95,83,112,101,99,77,101,116,104,111,100,115,46, +- 99,114,101,97,116,101,99,2,0,0,0,0,0,0,0,2, +- 0,0,0,2,0,0,0,67,0,0,0,115,23,0,0,0, +- 124,0,0,106,0,0,106,1,0,106,2,0,124,1,0,131, +- 1,0,1,100,1,0,83,41,2,122,189,68,111,32,101,118, +- 101,114,121,116,104,105,110,103,32,110,101,99,101,115,115,97, +- 114,121,32,116,111,32,101,120,101,99,117,116,101,32,116,104, +- 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, +- 32,32,32,84,104,101,32,110,97,109,101,115,112,97,99,101, +- 32,111,102,32,96,109,111,100,117,108,101,96,32,105,115,32, +- 117,115,101,100,32,97,115,32,116,104,101,32,116,97,114,103, +- 101,116,32,111,102,32,101,120,101,99,117,116,105,111,110,46, +- 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, +- 116,104,111,100,32,117,115,101,115,32,116,104,101,32,108,111, +- 97,100,101,114,39,115,32,96,101,120,101,99,95,109,111,100, +- 117,108,101,40,41,96,32,109,101,116,104,111,100,46,10,10, +- 32,32,32,32,32,32,32,32,78,41,3,114,177,0,0,0, +- 114,169,0,0,0,218,11,101,120,101,99,95,109,111,100,117, +- 108,101,41,2,114,71,0,0,0,114,179,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, +- 101,120,101,99,98,4,0,0,115,2,0,0,0,0,7,122, +- 18,95,83,112,101,99,77,101,116,104,111,100,115,46,95,101, +- 120,101,99,99,2,0,0,0,0,0,0,0,4,0,0,0, +- 11,0,0,0,67,0,0,0,115,17,1,0,0,124,0,0, +- 106,0,0,106,1,0,125,2,0,116,2,0,106,3,0,131, +- 0,0,1,116,4,0,124,2,0,131,1,0,143,226,0,1, +- 116,5,0,106,6,0,106,7,0,124,2,0,131,1,0,124, +- 1,0,107,9,0,114,95,0,100,1,0,106,8,0,124,2, +- 0,131,1,0,125,3,0,116,9,0,124,3,0,100,2,0, +- 124,2,0,131,1,1,130,1,0,110,0,0,124,0,0,106, +- 0,0,106,10,0,100,3,0,107,8,0,114,181,0,124,0, +- 0,106,0,0,106,11,0,100,3,0,107,8,0,114,158,0, +- 116,9,0,100,4,0,100,2,0,124,0,0,106,0,0,106, +- 1,0,131,1,1,130,1,0,110,0,0,124,0,0,106,12, +- 0,124,1,0,100,5,0,100,6,0,131,1,1,1,124,1, +- 0,83,124,0,0,106,12,0,124,1,0,100,5,0,100,6, +- 0,131,1,1,1,116,13,0,124,0,0,106,0,0,106,10, +- 0,100,7,0,131,2,0,115,243,0,124,0,0,106,0,0, +- 106,10,0,106,14,0,124,2,0,131,1,0,1,110,13,0, +- 124,0,0,106,15,0,124,1,0,131,1,0,1,87,100,3, +- 0,81,88,116,5,0,106,6,0,124,2,0,25,83,41,8, +- 122,51,69,120,101,99,117,116,101,32,116,104,101,32,115,112, +- 101,99,32,105,110,32,97,110,32,101,120,105,115,116,105,110, +- 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115, +- 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33, +- 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111, +- 100,117,108,101,115,114,67,0,0,0,78,122,14,109,105,115, +- 115,105,110,103,32,108,111,97,100,101,114,114,248,0,0,0, +- 84,114,1,1,0,0,41,16,114,177,0,0,0,114,67,0, +- 0,0,114,106,0,0,0,218,12,97,99,113,117,105,114,101, +- 95,108,111,99,107,114,103,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,114,93,0,0,0,114,47,0,0,0,114,153, +- 0,0,0,114,169,0,0,0,114,220,0,0,0,114,254,0, +- 0,0,114,60,0,0,0,218,11,108,111,97,100,95,109,111, +- 100,117,108,101,114,2,1,0,0,41,4,114,71,0,0,0, +- 114,179,0,0,0,114,67,0,0,0,114,171,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,175, +- 0,0,0,108,4,0,0,115,32,0,0,0,0,2,12,1, +- 10,1,13,1,24,1,15,1,21,1,18,1,18,1,27,2, +- 19,1,4,1,19,1,21,4,22,2,19,1,122,17,95,83, +- 112,101,99,77,101,116,104,111,100,115,46,101,120,101,99,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,27,0,0,0, +- 67,0,0,0,115,24,1,0,0,124,0,0,106,0,0,125, +- 1,0,124,1,0,106,1,0,106,2,0,124,1,0,106,3, +- 0,131,1,0,1,116,4,0,106,5,0,124,1,0,106,3, +- 0,25,125,2,0,116,6,0,124,2,0,100,1,0,100,0, +- 0,131,3,0,100,0,0,107,8,0,114,108,0,121,16,0, +- 124,1,0,106,1,0,124,2,0,95,7,0,87,113,108,0, +- 4,116,8,0,107,10,0,114,104,0,1,1,1,89,113,108, +- 0,88,110,0,0,116,6,0,124,2,0,100,2,0,100,0, +- 0,131,3,0,100,0,0,107,8,0,114,215,0,121,59,0, +- 124,2,0,106,9,0,124,2,0,95,10,0,116,11,0,124, +- 2,0,100,3,0,131,2,0,115,190,0,124,1,0,106,3, +- 0,106,12,0,100,4,0,131,1,0,100,5,0,25,124,2, +- 0,95,10,0,110,0,0,87,113,215,0,4,116,8,0,107, +- 10,0,114,211,0,1,1,1,89,113,215,0,88,110,0,0, +- 116,6,0,124,2,0,100,6,0,100,0,0,131,3,0,100, +- 0,0,107,8,0,114,20,1,121,13,0,124,1,0,124,2, +- 0,95,13,0,87,113,20,1,4,116,8,0,107,10,0,114, +- 16,1,1,1,1,89,113,20,1,88,110,0,0,124,2,0, +- 83,41,7,78,114,204,0,0,0,114,250,0,0,0,114,246, +- 0,0,0,114,116,0,0,0,114,84,0,0,0,114,208,0, +- 0,0,41,14,114,177,0,0,0,114,169,0,0,0,114,4, +- 1,0,0,114,67,0,0,0,114,7,0,0,0,114,73,0, +- 0,0,114,62,0,0,0,114,204,0,0,0,114,209,0,0, +- 0,114,57,0,0,0,114,250,0,0,0,114,60,0,0,0, +- 114,32,0,0,0,114,208,0,0,0,41,3,114,71,0,0, +- 0,114,177,0,0,0,114,179,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,25,95,108,111,97, +- 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, +- 116,105,98,108,101,132,4,0,0,115,42,0,0,0,0,4, +- 9,1,19,2,16,1,24,1,3,1,16,1,13,1,8,1, +- 24,1,3,4,12,1,15,1,32,1,13,1,8,1,24,1, +- 3,1,13,1,13,1,8,1,122,38,95,83,112,101,99,77, +- 101,116,104,111,100,115,46,95,108,111,97,100,95,98,97,99, +- 107,119,97,114,100,95,99,111,109,112,97,116,105,98,108,101, ++ 120,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, ++ 103,101,110,101,120,112,114,62,122,18,105,109,112,111,114,116, ++ 32,123,33,114,125,32,35,32,123,33,114,125,70,41,9,114, ++ 215,0,0,0,114,79,0,0,0,114,8,0,0,0,114,74, ++ 0,0,0,114,68,0,0,0,114,80,0,0,0,114,153,0, ++ 0,0,114,170,0,0,0,114,216,0,0,0,41,3,114,72, ++ 0,0,0,114,81,0,0,0,114,178,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,82,0,0, ++ 0,227,2,0,0,115,18,0,0,0,0,1,3,1,9,1, ++ 25,1,3,1,17,1,13,1,8,2,26,2,122,26,95,105, ++ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, ++ 95,95,101,120,105,116,95,95,78,41,6,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,73,0,0,0,114, ++ 76,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,213,0, ++ 0,0,214,2,0,0,115,6,0,0,0,12,2,12,4,12, ++ 7,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, ++ 0,0,0,8,0,0,0,64,0,0,0,115,172,0,0,0, ++ 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, ++ 3,0,100,2,0,100,3,0,100,4,0,100,3,0,100,5, ++ 0,100,3,0,100,6,0,100,7,0,132,0,3,90,4,0, ++ 100,8,0,100,9,0,132,0,0,90,5,0,100,10,0,100, ++ 11,0,132,0,0,90,6,0,101,7,0,100,12,0,100,13, ++ 0,132,0,0,131,1,0,90,8,0,101,8,0,106,9,0, ++ 100,14,0,100,13,0,132,0,0,131,1,0,90,8,0,101, ++ 7,0,100,15,0,100,16,0,132,0,0,131,1,0,90,10, ++ 0,101,7,0,100,17,0,100,18,0,132,0,0,131,1,0, ++ 90,11,0,101,11,0,106,9,0,100,19,0,100,18,0,132, ++ 0,0,131,1,0,90,11,0,100,3,0,83,41,20,218,10, ++ 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, ++ 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, ++ 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, ++ 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, ++ 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, ++ 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, ++ 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, ++ 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, ++ 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, ++ 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, ++ 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, ++ 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, ++ 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, ++ 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, ++ 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, ++ 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, ++ 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, ++ 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, ++ 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, ++ 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, ++ 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, ++ 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, ++ 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, ++ 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, ++ 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, ++ 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, ++ 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, ++ 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, ++ 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, ++ 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, ++ 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, ++ 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, ++ 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, ++ 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, ++ 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, ++ 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, ++ 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, ++ 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, ++ 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, ++ 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, ++ 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, ++ 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, ++ 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, ++ 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, ++ 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, ++ 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, ++ 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, ++ 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, ++ 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, ++ 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, ++ 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, ++ 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, ++ 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, ++ 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, ++ 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, ++ 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, ++ 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, ++ 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, ++ 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, ++ 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, ++ 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, ++ 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, ++ 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, ++ 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, ++ 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, ++ 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, ++ 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, ++ 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, ++ 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, ++ 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, ++ 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, ++ 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, ++ 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, ++ 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, ++ 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, ++ 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, ++ 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, ++ 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, ++ 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, ++ 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, ++ 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, ++ 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, ++ 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, ++ 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, ++ 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, ++ 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, ++ 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, ++ 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, ++ 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, ++ 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, ++ 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, ++ 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, ++ 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, ++ 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,218, ++ 6,111,114,105,103,105,110,78,218,12,108,111,97,100,101,114, ++ 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, ++ 103,101,99,3,0,0,0,3,0,0,0,6,0,0,0,2, ++ 0,0,0,67,0,0,0,115,79,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,124,3, ++ 0,124,0,0,95,2,0,124,4,0,124,0,0,95,3,0, ++ 124,5,0,114,48,0,103,0,0,110,3,0,100,0,0,124, ++ 0,0,95,4,0,100,1,0,124,0,0,95,5,0,100,0, ++ 0,124,0,0,95,6,0,100,0,0,83,41,2,78,70,41, ++ 7,114,68,0,0,0,114,170,0,0,0,114,218,0,0,0, ++ 114,219,0,0,0,218,26,115,117,98,109,111,100,117,108,101, ++ 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, ++ 115,218,13,95,115,101,116,95,102,105,108,101,97,116,116,114, ++ 218,7,95,99,97,99,104,101,100,41,6,114,72,0,0,0, ++ 114,68,0,0,0,114,170,0,0,0,114,218,0,0,0,114, ++ 219,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,22,3,0, ++ 0,115,14,0,0,0,0,2,9,1,9,1,9,1,9,1, ++ 21,3,9,1,122,19,77,111,100,117,108,101,83,112,101,99, ++ 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, ++ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,153, ++ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, ++ 1,0,100,2,0,106,0,0,124,0,0,106,2,0,131,1, ++ 0,103,2,0,125,1,0,124,0,0,106,3,0,100,0,0, ++ 107,9,0,114,79,0,124,1,0,106,4,0,100,3,0,106, ++ 0,0,124,0,0,106,3,0,131,1,0,131,1,0,1,110, ++ 0,0,124,0,0,106,5,0,100,0,0,107,9,0,114,122, ++ 0,124,1,0,106,4,0,100,4,0,106,0,0,124,0,0, ++ 106,5,0,131,1,0,131,1,0,1,110,0,0,100,5,0, ++ 106,0,0,124,0,0,106,6,0,106,7,0,100,6,0,106, ++ 8,0,124,1,0,131,1,0,131,2,0,83,41,7,78,122, ++ 9,110,97,109,101,61,123,33,114,125,122,11,108,111,97,100, ++ 101,114,61,123,33,114,125,122,11,111,114,105,103,105,110,61, ++ 123,33,114,125,122,29,115,117,98,109,111,100,117,108,101,95, ++ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, ++ 61,123,125,122,6,123,125,40,123,125,41,122,2,44,32,41, ++ 9,114,48,0,0,0,114,68,0,0,0,114,170,0,0,0, ++ 114,218,0,0,0,218,6,97,112,112,101,110,100,114,221,0, ++ 0,0,218,9,95,95,99,108,97,115,115,95,95,114,58,0, ++ 0,0,114,27,0,0,0,41,2,114,72,0,0,0,114,81, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,102,0,0,0,34,3,0,0,115,16,0,0,0, ++ 0,1,15,1,21,1,15,1,28,1,15,1,6,1,22,1, ++ 122,19,77,111,100,117,108,101,83,112,101,99,46,95,95,114, ++ 101,112,114,95,95,99,2,0,0,0,0,0,0,0,3,0, ++ 0,0,11,0,0,0,67,0,0,0,115,145,0,0,0,124, ++ 0,0,106,0,0,125,2,0,121,107,0,124,0,0,106,1, ++ 0,124,1,0,106,1,0,107,2,0,111,114,0,124,0,0, ++ 106,2,0,124,1,0,106,2,0,107,2,0,111,114,0,124, ++ 0,0,106,3,0,124,1,0,106,3,0,107,2,0,111,114, ++ 0,124,2,0,124,1,0,106,0,0,107,2,0,111,114,0, ++ 124,0,0,106,4,0,124,1,0,106,4,0,107,2,0,111, ++ 114,0,124,0,0,106,5,0,124,1,0,106,5,0,107,2, ++ 0,83,87,110,22,0,4,116,6,0,107,10,0,114,140,0, ++ 1,1,1,100,1,0,83,89,110,1,0,88,100,0,0,83, ++ 41,2,78,70,41,7,114,221,0,0,0,114,68,0,0,0, ++ 114,170,0,0,0,114,218,0,0,0,218,6,99,97,99,104, ++ 101,100,218,12,104,97,115,95,108,111,99,97,116,105,111,110, ++ 114,210,0,0,0,41,3,114,72,0,0,0,218,5,111,116, ++ 104,101,114,218,4,115,109,115,108,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,6,95,95,101,113,95,95, ++ 44,3,0,0,115,20,0,0,0,0,1,9,1,3,1,18, ++ 1,18,1,18,1,15,1,18,1,20,1,13,1,122,17,77, ++ 111,100,117,108,101,83,112,101,99,46,95,95,101,113,95,95, + 99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,0, +- 0,67,0,0,0,115,179,0,0,0,124,0,0,106,0,0, +- 106,1,0,100,0,0,107,9,0,114,52,0,116,2,0,124, +- 0,0,106,0,0,106,1,0,100,1,0,131,2,0,115,52, +- 0,124,0,0,106,3,0,131,0,0,83,110,0,0,124,0, +- 0,106,4,0,131,0,0,125,1,0,116,5,0,124,1,0, +- 131,1,0,143,84,0,1,124,0,0,106,0,0,106,1,0, +- 100,0,0,107,8,0,114,143,0,124,0,0,106,0,0,106, +- 6,0,100,0,0,107,8,0,114,156,0,116,7,0,100,2, +- 0,100,3,0,124,0,0,106,0,0,106,8,0,131,1,1, +- 130,1,0,113,156,0,110,13,0,124,0,0,106,9,0,124, +- 1,0,131,1,0,1,87,100,0,0,81,88,116,10,0,106, +- 11,0,124,0,0,106,0,0,106,8,0,25,83,41,4,78, +- 114,1,1,0,0,122,14,109,105,115,115,105,110,103,32,108, +- 111,97,100,101,114,114,67,0,0,0,41,12,114,177,0,0, +- 0,114,169,0,0,0,114,60,0,0,0,114,5,1,0,0, +- 114,0,1,0,0,114,212,0,0,0,114,220,0,0,0,114, +- 153,0,0,0,114,67,0,0,0,114,2,1,0,0,114,7, +- 0,0,0,114,73,0,0,0,41,2,114,71,0,0,0,114, +- 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,99, +- 107,101,100,162,4,0,0,115,20,0,0,0,0,2,18,2, +- 21,1,13,2,12,1,13,1,18,1,18,1,30,3,19,5, +- 122,27,95,83,112,101,99,77,101,116,104,111,100,115,46,95, +- 108,111,97,100,95,117,110,108,111,99,107,101,100,99,1,0, +- 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, +- 0,0,115,49,0,0,0,116,0,0,106,1,0,131,0,0, +- 1,116,2,0,124,0,0,106,3,0,106,4,0,131,1,0, +- 143,15,0,1,124,0,0,106,5,0,131,0,0,83,87,100, +- 1,0,81,88,100,1,0,83,41,2,122,207,82,101,116,117, +- 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, +- 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, +- 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, +- 100,101,114,46,10,10,32,32,32,32,32,32,32,32,84,104, +- 101,32,109,111,100,117,108,101,32,105,115,32,110,111,116,32, +- 97,100,100,101,100,32,116,111,32,105,116,115,32,112,97,114, +- 101,110,116,46,10,10,32,32,32,32,32,32,32,32,73,102, +- 32,97,32,109,111,100,117,108,101,32,105,115,32,97,108,114, +- 101,97,100,121,32,105,110,32,115,121,115,46,109,111,100,117, +- 108,101,115,44,32,116,104,97,116,32,101,120,105,115,116,105, +- 110,103,32,109,111,100,117,108,101,32,103,101,116,115,10,32, +- 32,32,32,32,32,32,32,99,108,111,98,98,101,114,101,100, +- 46,10,10,32,32,32,32,32,32,32,32,78,41,6,114,106, +- 0,0,0,114,3,1,0,0,114,103,0,0,0,114,177,0, +- 0,0,114,67,0,0,0,114,6,1,0,0,41,1,114,71, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,176,0,0,0,185,4,0,0,115,6,0,0,0, +- 0,9,10,1,19,1,122,17,95,83,112,101,99,77,101,116, +- 104,111,100,115,46,108,111,97,100,78,41,13,114,57,0,0, +- 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, +- 114,72,0,0,0,114,205,0,0,0,114,254,0,0,0,114, +- 0,1,0,0,114,2,1,0,0,114,175,0,0,0,114,5, +- 1,0,0,114,6,1,0,0,114,176,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,174,0,0,0,225,3,0,0,115,20,0,0,0,12, +- 3,6,4,12,3,12,16,24,80,12,23,12,10,12,24,12, +- 30,12,23,114,174,0,0,0,99,4,0,0,0,0,0,0, +- 0,6,0,0,0,11,0,0,0,67,0,0,0,115,201,0, +- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,4, +- 0,124,0,0,106,0,0,100,2,0,131,1,0,125,5,0, +- 124,4,0,115,102,0,124,5,0,114,54,0,124,5,0,106, +- 1,0,125,4,0,113,102,0,124,2,0,124,3,0,107,2, +- 0,114,84,0,116,2,0,124,1,0,124,2,0,131,2,0, +- 125,4,0,113,102,0,116,3,0,124,1,0,124,2,0,131, +- 2,0,125,4,0,110,0,0,124,5,0,115,132,0,116,4, +- 0,124,1,0,124,2,0,100,3,0,124,4,0,131,2,1, +- 125,5,0,110,0,0,121,44,0,124,5,0,124,0,0,100, +- 2,0,60,124,4,0,124,0,0,100,1,0,60,124,2,0, +- 124,0,0,100,4,0,60,124,3,0,124,0,0,100,5,0, +- 60,87,110,18,0,4,116,5,0,107,10,0,114,196,0,1, +- 1,1,89,110,1,0,88,100,0,0,83,41,6,78,114,204, +- 0,0,0,114,208,0,0,0,114,169,0,0,0,114,210,0, +- 0,0,114,244,0,0,0,41,6,114,93,0,0,0,114,169, +- 0,0,0,218,20,83,111,117,114,99,101,108,101,115,115,70, +- 105,108,101,76,111,97,100,101,114,218,16,83,111,117,114,99, +- 101,70,105,108,101,76,111,97,100,101,114,114,239,0,0,0, +- 114,207,0,0,0,41,6,90,2,110,115,114,67,0,0,0, +- 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, +- 104,110,97,109,101,114,169,0,0,0,114,177,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,14, +- 95,102,105,120,95,117,112,95,109,111,100,117,108,101,199,4, +- 0,0,115,34,0,0,0,0,2,15,1,15,1,6,1,6, +- 1,12,1,12,1,18,2,18,1,6,1,24,1,3,1,10, +- 1,10,1,10,1,14,1,13,2,114,9,1,0,0,99,0, +- 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64, +- 0,0,0,115,181,0,0,0,101,0,0,90,1,0,100,0, +- 0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0, +- 100,3,0,132,0,0,131,1,0,90,5,0,101,6,0,100, +- 4,0,100,4,0,100,5,0,100,6,0,132,2,0,131,1, +- 0,90,7,0,101,6,0,100,4,0,100,7,0,100,8,0, +- 132,1,0,131,1,0,90,8,0,101,6,0,101,9,0,100, +- 9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,10, +- 0,101,6,0,101,9,0,100,11,0,100,12,0,132,0,0, +- 131,1,0,131,1,0,90,11,0,101,6,0,101,9,0,100, +- 13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,12, +- 0,101,6,0,101,9,0,100,15,0,100,16,0,132,0,0, +- 131,1,0,131,1,0,90,13,0,100,4,0,83,41,17,218, +- 15,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 122,144,77,101,116,97,32,112,97,116,104,32,105,109,112,111, +- 114,116,32,102,111,114,32,98,117,105,108,116,45,105,110,32, +- 109,111,100,117,108,101,115,46,10,10,32,32,32,32,65,108, +- 108,32,109,101,116,104,111,100,115,32,97,114,101,32,101,105, +- 116,104,101,114,32,99,108,97,115,115,32,111,114,32,115,116, +- 97,116,105,99,32,109,101,116,104,111,100,115,32,116,111,32, +- 97,118,111,105,100,32,116,104,101,32,110,101,101,100,32,116, +- 111,10,32,32,32,32,105,110,115,116,97,110,116,105,97,116, +- 101,32,116,104,101,32,99,108,97,115,115,46,10,10,32,32, +- 32,32,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, +- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,122,115, +- 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, +- 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, +- 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, +- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, +- 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, +- 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, +- 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, +- 32,32,32,122,24,60,109,111,100,117,108,101,32,123,33,114, +- 125,32,40,98,117,105,108,116,45,105,110,41,62,41,2,114, +- 47,0,0,0,114,57,0,0,0,41,1,114,179,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 205,0,0,0,233,4,0,0,115,2,0,0,0,0,7,122, +- 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0, +- 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, +- 0,0,115,58,0,0,0,124,2,0,100,0,0,107,9,0, +- 114,16,0,100,0,0,83,116,0,0,106,1,0,124,1,0, +- 131,1,0,114,50,0,116,2,0,124,1,0,124,0,0,100, +- 1,0,100,2,0,131,2,1,83,100,0,0,83,100,0,0, +- 83,41,3,78,114,217,0,0,0,122,8,98,117,105,108,116, +- 45,105,110,41,3,114,106,0,0,0,90,10,105,115,95,98, +- 117,105,108,116,105,110,114,173,0,0,0,41,4,218,3,99, +- 108,115,114,158,0,0,0,114,35,0,0,0,218,6,116,97, +- 114,103,101,116,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,242,4, +- 0,0,115,10,0,0,0,0,2,12,1,4,1,15,1,19, +- 2,122,25,66,117,105,108,116,105,110,73,109,112,111,114,116, +- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, +- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, +- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, +- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,9, +- 0,114,37,0,124,3,0,106,1,0,83,100,1,0,83,41, +- 2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, +- 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, +- 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, +- 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, +- 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, +- 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, +- 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, +- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, +- 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, +- 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, +- 32,32,78,41,2,114,13,1,0,0,114,169,0,0,0,41, +- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108, +- 101,251,4,0,0,115,4,0,0,0,0,9,18,1,122,27, +- 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, +- 102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,3,0,0,0,10,0,0,0,67,0,0,0, +- 115,59,0,0,0,116,0,0,124,1,0,131,1,0,143,23, +- 0,1,116,1,0,116,2,0,106,3,0,124,1,0,131,2, +- 0,125,2,0,87,100,1,0,81,88,124,0,0,124,2,0, +- 95,4,0,100,2,0,124,2,0,95,5,0,124,2,0,83, +- 41,3,122,23,76,111,97,100,32,97,32,98,117,105,108,116, +- 45,105,110,32,109,111,100,117,108,101,46,78,114,30,0,0, +- 0,41,6,114,69,0,0,0,114,114,0,0,0,114,106,0, +- 0,0,90,12,105,110,105,116,95,98,117,105,108,116,105,110, +- 114,204,0,0,0,114,250,0,0,0,41,3,114,11,1,0, +- 0,114,158,0,0,0,114,179,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,7, +- 5,0,0,115,10,0,0,0,0,6,13,1,24,1,9,1, +- 9,1,122,27,66,117,105,108,116,105,110,73,109,112,111,114, +- 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, ++ 0,67,0,0,0,115,158,0,0,0,124,0,0,106,0,0, ++ 100,0,0,107,8,0,114,151,0,124,0,0,106,1,0,100, ++ 0,0,107,9,0,114,151,0,124,0,0,106,2,0,114,151, ++ 0,124,0,0,106,1,0,125,1,0,124,1,0,106,3,0, ++ 116,4,0,116,5,0,131,1,0,131,1,0,114,112,0,121, ++ 19,0,116,6,0,124,1,0,131,1,0,124,0,0,95,0, ++ 0,87,113,145,0,4,116,7,0,107,10,0,114,108,0,1, ++ 1,1,89,113,145,0,88,113,148,0,124,1,0,106,3,0, ++ 116,4,0,116,8,0,131,1,0,131,1,0,114,148,0,124, ++ 1,0,124,0,0,95,0,0,113,148,0,113,151,0,110,0, ++ 0,124,0,0,106,0,0,83,41,1,78,41,9,114,223,0, ++ 0,0,114,218,0,0,0,114,222,0,0,0,218,8,101,110, ++ 100,115,119,105,116,104,218,5,116,117,112,108,101,114,135,0, ++ 0,0,114,133,0,0,0,114,125,0,0,0,218,17,66,89, ++ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,41, ++ 2,114,72,0,0,0,114,132,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,226,0,0,0,56, ++ 3,0,0,115,22,0,0,0,0,2,15,1,24,1,9,1, ++ 21,1,3,1,19,1,13,1,8,1,21,1,18,1,122,17, ++ 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101, ++ 100,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,0, ++ 0,95,0,0,100,0,0,83,41,1,78,41,1,114,223,0, ++ 0,0,41,2,114,72,0,0,0,114,226,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,226,0, ++ 0,0,70,3,0,0,115,2,0,0,0,0,2,99,1,0, ++ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, ++ 0,0,115,46,0,0,0,124,0,0,106,0,0,100,1,0, ++ 107,8,0,114,35,0,124,0,0,106,1,0,106,2,0,100, ++ 2,0,131,1,0,100,3,0,25,83,124,0,0,106,1,0, ++ 83,100,1,0,83,41,4,122,32,84,104,101,32,110,97,109, ++ 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,39, ++ 115,32,112,97,114,101,110,116,46,78,114,117,0,0,0,114, ++ 85,0,0,0,41,3,114,221,0,0,0,114,68,0,0,0, ++ 114,33,0,0,0,41,1,114,72,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,6,112,97,114, ++ 101,110,116,74,3,0,0,115,6,0,0,0,0,3,15,1, ++ 20,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112, ++ 97,114,101,110,116,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, ++ 0,0,106,0,0,83,41,1,78,41,1,114,222,0,0,0, ++ 41,1,114,72,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,227,0,0,0,82,3,0,0,115, ++ 2,0,0,0,0,2,122,23,77,111,100,117,108,101,83,112, ++ 101,99,46,104,97,115,95,108,111,99,97,116,105,111,110,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,19,0,0,0,116,0,0,124,1,0,131, ++ 1,0,124,0,0,95,1,0,100,0,0,83,41,1,78,41, ++ 2,218,4,98,111,111,108,114,222,0,0,0,41,2,114,72, ++ 0,0,0,218,5,118,97,108,117,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,227,0,0,0,86,3, ++ 0,0,115,2,0,0,0,0,2,41,12,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, ++ 73,0,0,0,114,102,0,0,0,114,230,0,0,0,218,8, ++ 112,114,111,112,101,114,116,121,114,226,0,0,0,218,6,115, ++ 101,116,116,101,114,114,234,0,0,0,114,227,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,217,0,0,0,241,2,0,0,115,20,0,0, ++ 0,12,35,6,2,15,1,15,11,12,10,12,12,18,14,21, ++ 4,18,8,18,4,114,217,0,0,0,114,218,0,0,0,114, ++ 220,0,0,0,99,2,0,0,0,2,0,0,0,5,0,0, ++ 0,15,0,0,0,67,0,0,0,115,193,0,0,0,116,0, ++ 0,124,1,0,100,1,0,131,2,0,114,83,0,124,3,0, ++ 100,2,0,107,8,0,114,43,0,116,1,0,124,0,0,100, ++ 3,0,124,1,0,131,1,1,83,124,3,0,114,55,0,103, ++ 0,0,110,3,0,100,2,0,125,4,0,116,1,0,124,0, ++ 0,100,3,0,124,1,0,100,4,0,124,4,0,131,1,2, ++ 83,124,3,0,100,2,0,107,8,0,114,168,0,116,0,0, ++ 124,1,0,100,5,0,131,2,0,114,159,0,121,19,0,124, ++ 1,0,106,2,0,124,0,0,131,1,0,125,3,0,87,113, ++ 165,0,4,116,3,0,107,10,0,114,155,0,1,1,1,100, ++ 2,0,125,3,0,89,113,165,0,88,113,168,0,100,6,0, ++ 125,3,0,110,0,0,116,4,0,124,0,0,124,1,0,100, ++ 7,0,124,2,0,100,5,0,124,3,0,131,2,2,83,41, ++ 8,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, ++ 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, ++ 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, ++ 109,101,116,104,111,100,115,46,218,12,103,101,116,95,102,105, ++ 108,101,110,97,109,101,78,114,170,0,0,0,114,221,0,0, ++ 0,114,220,0,0,0,70,114,218,0,0,0,41,5,114,61, ++ 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, ++ 105,108,101,95,108,111,99,97,116,105,111,110,114,220,0,0, ++ 0,114,154,0,0,0,114,217,0,0,0,41,5,114,68,0, ++ 0,0,114,170,0,0,0,114,218,0,0,0,114,220,0,0, ++ 0,90,6,115,101,97,114,99,104,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,174,0,0,0,91,3,0, ++ 0,115,28,0,0,0,0,2,15,1,12,1,16,1,18,1, ++ 15,1,7,2,12,1,15,1,3,1,19,1,13,1,14,3, ++ 9,2,114,174,0,0,0,114,170,0,0,0,114,221,0,0, ++ 0,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, ++ 0,0,67,0,0,0,115,110,1,0,0,124,1,0,100,1, ++ 0,107,8,0,114,79,0,100,2,0,125,1,0,116,0,0, ++ 124,2,0,100,3,0,131,2,0,114,79,0,121,19,0,124, ++ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,113, ++ 76,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, ++ 113,76,0,88,113,79,0,110,0,0,116,3,0,124,0,0, ++ 124,2,0,100,4,0,124,1,0,131,2,1,125,4,0,100, ++ 5,0,124,4,0,95,4,0,124,2,0,100,1,0,107,8, ++ 0,114,203,0,120,79,0,116,5,0,131,0,0,68,93,61, ++ 0,92,2,0,125,5,0,125,6,0,124,1,0,106,6,0, ++ 116,7,0,124,6,0,131,1,0,131,1,0,114,131,0,124, ++ 5,0,124,0,0,124,1,0,131,2,0,125,2,0,124,2, ++ 0,124,4,0,95,8,0,80,113,131,0,113,131,0,87,100, ++ 1,0,83,110,0,0,124,3,0,116,9,0,107,8,0,114, ++ 38,1,116,0,0,124,2,0,100,6,0,131,2,0,114,47, ++ 1,121,19,0,124,2,0,106,10,0,124,0,0,131,1,0, ++ 125,7,0,87,110,18,0,4,116,2,0,107,10,0,114,13, ++ 1,1,1,1,89,113,35,1,88,124,7,0,114,35,1,103, ++ 0,0,124,4,0,95,11,0,113,35,1,113,47,1,110,9, ++ 0,124,3,0,124,4,0,95,11,0,124,4,0,106,11,0, ++ 103,0,0,107,2,0,114,106,1,124,1,0,114,106,1,116, ++ 12,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, ++ 4,0,106,11,0,106,13,0,124,8,0,131,1,0,1,113, ++ 106,1,110,0,0,124,4,0,83,41,8,97,61,1,0,0, ++ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, ++ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, ++ 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, ++ 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, ++ 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, ++ 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, ++ 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, ++ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, ++ 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, ++ 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, ++ 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, ++ 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, ++ 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, ++ 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, ++ 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, ++ 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, ++ 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, ++ 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, ++ 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, ++ 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, ++ 60,117,110,107,110,111,119,110,62,114,239,0,0,0,114,218, ++ 0,0,0,84,114,220,0,0,0,114,85,0,0,0,41,14, ++ 114,61,0,0,0,114,239,0,0,0,114,154,0,0,0,114, ++ 217,0,0,0,114,222,0,0,0,218,27,95,103,101,116,95, ++ 115,117,112,112,111,114,116,101,100,95,102,105,108,101,95,108, ++ 111,97,100,101,114,115,114,231,0,0,0,114,232,0,0,0, ++ 114,170,0,0,0,218,9,95,80,79,80,85,76,65,84,69, ++ 114,220,0,0,0,114,221,0,0,0,114,39,0,0,0,114, ++ 224,0,0,0,41,9,114,68,0,0,0,218,8,108,111,99, ++ 97,116,105,111,110,114,170,0,0,0,114,221,0,0,0,114, ++ 178,0,0,0,218,12,108,111,97,100,101,114,95,99,108,97, ++ 115,115,114,128,0,0,0,114,220,0,0,0,90,7,100,105, ++ 114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,240,0,0,0,116,3,0,0,115,60,0, ++ 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, ++ 11,8,21,1,9,3,12,1,22,1,21,1,15,1,9,1, ++ 8,2,7,3,12,2,15,1,3,1,19,1,13,1,5,2, ++ 6,1,18,2,9,1,15,1,6,1,16,1,22,2,114,240, ++ 0,0,0,99,3,0,0,0,0,0,0,0,8,0,0,0, ++ 53,0,0,0,67,0,0,0,115,124,1,0,0,121,13,0, ++ 124,0,0,106,0,0,125,3,0,87,110,18,0,4,116,1, ++ 0,107,10,0,114,33,0,1,1,1,89,110,17,0,88,124, ++ 3,0,100,0,0,107,9,0,114,50,0,124,3,0,83,124, ++ 0,0,106,2,0,125,4,0,124,1,0,100,0,0,107,8, ++ 0,114,108,0,121,13,0,124,0,0,106,3,0,125,1,0, ++ 87,113,108,0,4,116,1,0,107,10,0,114,104,0,1,1, ++ 1,89,113,108,0,88,110,0,0,121,13,0,124,0,0,106, ++ 4,0,125,5,0,87,110,24,0,4,116,1,0,107,10,0, ++ 114,147,0,1,1,1,100,0,0,125,5,0,89,110,1,0, ++ 88,124,2,0,100,0,0,107,8,0,114,224,0,124,5,0, ++ 100,0,0,107,8,0,114,215,0,121,13,0,124,1,0,106, ++ 5,0,125,2,0,87,113,221,0,4,116,1,0,107,10,0, ++ 114,211,0,1,1,1,100,0,0,125,2,0,89,113,221,0, ++ 88,113,224,0,124,5,0,125,2,0,110,0,0,121,13,0, ++ 124,0,0,106,6,0,125,6,0,87,110,24,0,4,116,1, ++ 0,107,10,0,114,7,1,1,1,1,100,0,0,125,6,0, ++ 89,110,1,0,88,121,19,0,116,7,0,124,0,0,106,8, ++ 0,131,1,0,125,7,0,87,110,24,0,4,116,1,0,107, ++ 10,0,114,53,1,1,1,1,100,0,0,125,7,0,89,110, ++ 1,0,88,116,9,0,124,4,0,124,1,0,100,1,0,124, ++ 2,0,131,2,1,125,3,0,124,5,0,100,0,0,107,8, ++ 0,114,93,1,100,2,0,110,3,0,100,3,0,124,3,0, ++ 95,10,0,124,6,0,124,3,0,95,11,0,124,7,0,124, ++ 3,0,95,12,0,124,3,0,83,41,4,78,114,218,0,0, ++ 0,70,84,41,13,114,209,0,0,0,114,210,0,0,0,114, ++ 58,0,0,0,114,205,0,0,0,114,211,0,0,0,90,7, ++ 95,79,82,73,71,73,78,218,10,95,95,99,97,99,104,101, ++ 100,95,95,218,4,108,105,115,116,218,8,95,95,112,97,116, ++ 104,95,95,114,217,0,0,0,114,222,0,0,0,114,226,0, ++ 0,0,114,221,0,0,0,41,8,114,180,0,0,0,114,170, ++ 0,0,0,114,218,0,0,0,114,178,0,0,0,114,68,0, ++ 0,0,114,243,0,0,0,114,226,0,0,0,114,221,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,17,95,115,112,101,99,95,102,114,111,109,95,109,111,100, ++ 117,108,101,180,3,0,0,115,72,0,0,0,0,2,3,1, ++ 13,1,13,1,5,2,12,1,4,2,9,1,12,1,3,1, ++ 13,1,13,2,8,1,3,1,13,1,13,1,11,1,12,1, ++ 12,1,3,1,13,1,13,1,14,2,9,1,3,1,13,1, ++ 13,1,11,1,3,1,19,1,13,1,11,2,21,1,27,1, ++ 9,1,9,1,114,248,0,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,6,0,0,0,64,0,0,0,115,142, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, ++ 0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0, ++ 100,7,0,100,8,0,100,9,0,100,10,0,100,11,0,132, ++ 0,2,90,6,0,100,12,0,100,13,0,132,0,0,90,7, ++ 0,100,14,0,100,15,0,132,0,0,90,8,0,100,16,0, ++ 100,17,0,132,0,0,90,9,0,100,18,0,100,19,0,132, ++ 0,0,90,10,0,100,20,0,100,21,0,132,0,0,90,11, ++ 0,100,22,0,100,23,0,132,0,0,90,12,0,100,24,0, ++ 83,41,25,114,175,0,0,0,122,77,67,111,110,118,101,110, ++ 105,101,110,99,101,32,119,114,97,112,112,101,114,32,97,114, ++ 111,117,110,100,32,115,112,101,99,32,111,98,106,101,99,116, ++ 115,32,116,111,32,112,114,111,118,105,100,101,32,115,112,101, ++ 99,45,115,112,101,99,105,102,105,99,10,32,32,32,32,109, ++ 101,116,104,111,100,115,46,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, ++ 0,124,1,0,124,0,0,95,0,0,100,0,0,83,41,1, ++ 78,41,1,114,178,0,0,0,41,2,114,72,0,0,0,114, ++ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,73,0,0,0,232,3,0,0,115,2,0,0, ++ 0,0,1,122,21,95,83,112,101,99,77,101,116,104,111,100, ++ 115,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, ++ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, ++ 158,0,0,0,124,0,0,106,0,0,125,1,0,124,1,0, ++ 106,1,0,100,1,0,107,8,0,114,30,0,100,2,0,110, ++ 6,0,124,1,0,106,1,0,125,2,0,124,1,0,106,2, ++ 0,100,1,0,107,8,0,114,104,0,124,1,0,106,3,0, ++ 100,1,0,107,8,0,114,82,0,100,3,0,106,4,0,124, ++ 2,0,131,1,0,83,100,4,0,106,4,0,124,2,0,124, ++ 1,0,106,3,0,131,2,0,83,110,50,0,124,1,0,106, ++ 5,0,114,132,0,100,5,0,106,4,0,124,2,0,124,1, ++ 0,106,2,0,131,2,0,83,100,6,0,106,4,0,124,1, ++ 0,106,1,0,124,1,0,106,2,0,131,2,0,83,100,1, ++ 0,83,41,7,122,38,82,101,116,117,114,110,32,116,104,101, ++ 32,114,101,112,114,32,116,111,32,117,115,101,32,102,111,114, ++ 32,116,104,101,32,109,111,100,117,108,101,46,78,114,207,0, ++ 0,0,122,13,60,109,111,100,117,108,101,32,123,33,114,125, ++ 62,122,20,60,109,111,100,117,108,101,32,123,33,114,125,32, ++ 40,123,33,114,125,41,62,122,23,60,109,111,100,117,108,101, ++ 32,123,33,114,125,32,102,114,111,109,32,123,33,114,125,62, ++ 122,18,60,109,111,100,117,108,101,32,123,33,114,125,32,40, ++ 123,125,41,62,41,6,114,178,0,0,0,114,68,0,0,0, ++ 114,218,0,0,0,114,170,0,0,0,114,48,0,0,0,114, ++ 227,0,0,0,41,3,114,72,0,0,0,114,178,0,0,0, ++ 114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,206,0,0,0,235,3,0,0,115,18,0, ++ 0,0,0,3,9,1,30,1,15,1,15,1,13,2,22,2, ++ 9,1,19,2,122,24,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,109,111,100,117,108,101,95,114,101,112,114,218,9, ++ 95,111,118,101,114,114,105,100,101,70,218,11,95,102,111,114, ++ 99,101,95,110,97,109,101,84,99,2,0,0,0,2,0,0, ++ 0,6,0,0,0,59,0,0,0,67,0,0,0,115,75,2, ++ 0,0,124,0,0,106,0,0,125,4,0,124,2,0,115,45, ++ 0,124,3,0,115,45,0,116,1,0,124,1,0,100,1,0, ++ 100,2,0,131,3,0,100,2,0,107,8,0,114,85,0,121, ++ 16,0,124,4,0,106,2,0,124,1,0,95,3,0,87,113, ++ 85,0,4,116,4,0,107,10,0,114,81,0,1,1,1,89, ++ 113,85,0,88,110,0,0,124,2,0,115,115,0,116,1,0, ++ 124,1,0,100,3,0,100,2,0,131,3,0,100,2,0,107, ++ 8,0,114,221,0,124,4,0,106,5,0,125,5,0,124,5, ++ 0,100,2,0,107,8,0,114,184,0,124,4,0,106,6,0, ++ 100,2,0,107,9,0,114,184,0,116,7,0,106,8,0,116, ++ 7,0,131,1,0,125,5,0,124,4,0,106,6,0,124,5, ++ 0,95,9,0,113,184,0,110,0,0,121,13,0,124,5,0, ++ 124,1,0,95,10,0,87,113,221,0,4,116,4,0,107,10, ++ 0,114,217,0,1,1,1,89,113,221,0,88,110,0,0,124, ++ 2,0,115,251,0,116,1,0,124,1,0,100,4,0,100,2, ++ 0,131,3,0,100,2,0,107,8,0,114,35,1,121,16,0, ++ 124,4,0,106,11,0,124,1,0,95,12,0,87,113,35,1, ++ 4,116,4,0,107,10,0,114,31,1,1,1,1,89,113,35, ++ 1,88,110,0,0,121,13,0,124,4,0,124,1,0,95,13, ++ 0,87,110,18,0,4,116,4,0,107,10,0,114,68,1,1, ++ 1,1,89,110,1,0,88,124,2,0,115,99,1,116,1,0, ++ 124,1,0,100,5,0,100,2,0,131,3,0,100,2,0,107, ++ 8,0,114,157,1,124,4,0,106,6,0,100,2,0,107,9, ++ 0,114,157,1,121,16,0,124,4,0,106,6,0,124,1,0, ++ 95,14,0,87,113,154,1,4,116,4,0,107,10,0,114,150, ++ 1,1,1,1,89,113,154,1,88,113,157,1,110,0,0,124, ++ 4,0,106,15,0,114,71,2,124,2,0,115,196,1,116,1, ++ 0,124,1,0,100,6,0,100,2,0,131,3,0,100,2,0, ++ 107,8,0,114,236,1,121,16,0,124,4,0,106,16,0,124, ++ 1,0,95,17,0,87,113,236,1,4,116,4,0,107,10,0, ++ 114,232,1,1,1,1,89,113,236,1,88,110,0,0,124,2, ++ 0,115,10,2,116,1,0,124,1,0,100,7,0,100,2,0, ++ 131,3,0,100,2,0,107,8,0,114,71,2,124,4,0,106, ++ 18,0,100,2,0,107,9,0,114,68,2,121,16,0,124,4, ++ 0,106,18,0,124,1,0,95,19,0,87,113,65,2,4,116, ++ 4,0,107,10,0,114,61,2,1,1,1,89,113,65,2,88, ++ 113,68,2,113,71,2,110,0,0,100,2,0,83,41,8,97, ++ 29,2,0,0,83,101,116,32,116,104,101,32,109,111,100,117, ++ 108,101,39,115,32,97,116,116,114,105,98,117,116,101,115,46, ++ 10,10,32,32,32,32,32,32,32,32,65,108,108,32,109,105, ++ 115,115,105,110,103,32,105,109,112,111,114,116,45,114,101,108, ++ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, ++ 105,98,117,116,101,115,32,119,105,108,108,32,98,101,32,115, ++ 101,116,46,32,32,72,101,114,101,10,32,32,32,32,32,32, ++ 32,32,105,115,32,104,111,119,32,116,104,101,32,115,112,101, ++ 99,32,97,116,116,114,105,98,117,116,101,115,32,109,97,112, ++ 32,111,110,116,111,32,116,104,101,32,109,111,100,117,108,101, ++ 58,10,10,32,32,32,32,32,32,32,32,115,112,101,99,46, ++ 110,97,109,101,32,45,62,32,109,111,100,117,108,101,46,95, ++ 95,110,97,109,101,95,95,10,32,32,32,32,32,32,32,32, ++ 115,112,101,99,46,108,111,97,100,101,114,32,45,62,32,109, ++ 111,100,117,108,101,46,95,95,108,111,97,100,101,114,95,95, ++ 10,32,32,32,32,32,32,32,32,115,112,101,99,46,112,97, ++ 114,101,110,116,32,45,62,32,109,111,100,117,108,101,46,95, ++ 95,112,97,99,107,97,103,101,95,95,10,32,32,32,32,32, ++ 32,32,32,115,112,101,99,32,45,62,32,109,111,100,117,108, ++ 101,46,95,95,115,112,101,99,95,95,10,10,32,32,32,32, ++ 32,32,32,32,79,112,116,105,111,110,97,108,58,10,32,32, ++ 32,32,32,32,32,32,115,112,101,99,46,111,114,105,103,105, ++ 110,32,45,62,32,109,111,100,117,108,101,46,95,95,102,105, ++ 108,101,95,95,32,40,105,102,32,115,112,101,99,46,115,101, ++ 116,95,102,105,108,101,97,116,116,114,32,105,115,32,116,114, ++ 117,101,41,10,32,32,32,32,32,32,32,32,115,112,101,99, ++ 46,99,97,99,104,101,100,32,45,62,32,109,111,100,117,108, ++ 101,46,95,95,99,97,99,104,101,100,95,95,32,40,105,102, ++ 32,95,95,102,105,108,101,95,95,32,97,108,115,111,32,115, ++ 101,116,41,10,32,32,32,32,32,32,32,32,115,112,101,99, ++ 46,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, ++ 104,95,108,111,99,97,116,105,111,110,115,32,45,62,32,109, ++ 111,100,117,108,101,46,95,95,112,97,116,104,95,95,32,40, ++ 105,102,32,115,101,116,41,10,10,32,32,32,32,32,32,32, ++ 32,114,58,0,0,0,78,114,205,0,0,0,218,11,95,95, ++ 112,97,99,107,97,103,101,95,95,114,247,0,0,0,114,211, ++ 0,0,0,114,245,0,0,0,41,20,114,178,0,0,0,114, ++ 63,0,0,0,114,68,0,0,0,114,58,0,0,0,114,210, ++ 0,0,0,114,170,0,0,0,114,221,0,0,0,218,16,95, ++ 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,218, ++ 7,95,95,110,101,119,95,95,218,5,95,112,97,116,104,114, ++ 205,0,0,0,114,234,0,0,0,114,251,0,0,0,114,209, ++ 0,0,0,114,247,0,0,0,114,227,0,0,0,114,218,0, ++ 0,0,114,211,0,0,0,114,226,0,0,0,114,245,0,0, ++ 0,41,6,114,72,0,0,0,114,180,0,0,0,114,249,0, ++ 0,0,114,250,0,0,0,114,178,0,0,0,114,170,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,17,105,110,105,116,95,109,111,100,117,108,101,95,97,116, ++ 116,114,115,251,3,0,0,115,88,0,0,0,0,17,9,6, ++ 12,1,24,1,3,1,16,1,13,1,8,3,30,1,9,1, ++ 12,2,15,1,15,1,18,1,3,1,13,1,13,1,8,3, ++ 30,1,3,1,16,1,13,1,8,3,3,1,13,1,13,1, ++ 5,3,30,1,15,1,3,1,16,1,13,1,11,2,9,2, ++ 30,1,3,1,16,1,13,1,8,3,30,1,15,1,3,1, ++ 16,1,13,1,122,30,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,105,110,105,116,95,109,111,100,117,108,101,95,97, ++ 116,116,114,115,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,3,0,0,0,67,0,0,0,115,101,0,0,0,124,0, ++ 0,106,0,0,125,1,0,116,1,0,124,1,0,106,2,0, ++ 100,1,0,131,2,0,114,48,0,124,1,0,106,2,0,106, ++ 3,0,124,1,0,131,1,0,125,2,0,110,6,0,100,2, ++ 0,125,2,0,124,2,0,100,2,0,107,8,0,114,84,0, ++ 116,4,0,124,1,0,106,5,0,131,1,0,125,2,0,110, ++ 0,0,124,0,0,106,6,0,124,2,0,131,1,0,1,124, ++ 2,0,83,41,3,122,153,82,101,116,117,114,110,32,97,32, ++ 110,101,119,32,109,111,100,117,108,101,32,116,111,32,98,101, ++ 32,108,111,97,100,101,100,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,101,32,105,109,112,111,114,116,45,114,101,108, ++ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, ++ 105,98,117,116,101,115,32,97,114,101,32,97,108,115,111,32, ++ 115,101,116,32,119,105,116,104,32,116,104,101,10,32,32,32, ++ 32,32,32,32,32,97,112,112,114,111,112,114,105,97,116,101, ++ 32,118,97,108,117,101,115,32,102,114,111,109,32,116,104,101, ++ 32,115,112,101,99,46,10,10,32,32,32,32,32,32,32,32, ++ 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,78, ++ 41,7,114,178,0,0,0,114,61,0,0,0,114,170,0,0, ++ 0,114,0,1,0,0,114,69,0,0,0,114,68,0,0,0, ++ 114,255,0,0,0,41,3,114,72,0,0,0,114,178,0,0, ++ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,6,99,114,101,97,116,101,75,4,0, ++ 0,115,16,0,0,0,0,7,9,2,18,3,21,2,6,1, ++ 12,4,18,1,13,1,122,19,95,83,112,101,99,77,101,116, ++ 104,111,100,115,46,99,114,101,97,116,101,99,2,0,0,0, ++ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, ++ 115,23,0,0,0,124,0,0,106,0,0,106,1,0,106,2, ++ 0,124,1,0,131,1,0,1,100,1,0,83,41,2,122,189, ++ 68,111,32,101,118,101,114,121,116,104,105,110,103,32,110,101, ++ 99,101,115,115,97,114,121,32,116,111,32,101,120,101,99,117, ++ 116,101,32,116,104,101,32,109,111,100,117,108,101,46,10,10, ++ 32,32,32,32,32,32,32,32,84,104,101,32,110,97,109,101, ++ 115,112,97,99,101,32,111,102,32,96,109,111,100,117,108,101, ++ 96,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101, ++ 32,116,97,114,103,101,116,32,111,102,32,101,120,101,99,117, ++ 116,105,111,110,46,10,32,32,32,32,32,32,32,32,84,104, ++ 105,115,32,109,101,116,104,111,100,32,117,115,101,115,32,116, ++ 104,101,32,108,111,97,100,101,114,39,115,32,96,101,120,101, ++ 99,95,109,111,100,117,108,101,40,41,96,32,109,101,116,104, ++ 111,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, ++ 114,178,0,0,0,114,170,0,0,0,218,11,101,120,101,99, ++ 95,109,111,100,117,108,101,41,2,114,72,0,0,0,114,180, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,5,95,101,120,101,99,98,4,0,0,115,2,0, ++ 0,0,0,7,122,18,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,95,101,120,101,99,99,2,0,0,0,0,0,0, ++ 0,4,0,0,0,11,0,0,0,67,0,0,0,115,17,1, ++ 0,0,124,0,0,106,0,0,106,1,0,125,2,0,116,2, ++ 0,106,3,0,131,0,0,1,116,4,0,124,2,0,131,1, ++ 0,143,226,0,1,116,5,0,106,6,0,106,7,0,124,2, ++ 0,131,1,0,124,1,0,107,9,0,114,95,0,100,1,0, ++ 106,8,0,124,2,0,131,1,0,125,3,0,116,9,0,124, ++ 3,0,100,2,0,124,2,0,131,1,1,130,1,0,110,0, ++ 0,124,0,0,106,0,0,106,10,0,100,3,0,107,8,0, ++ 114,181,0,124,0,0,106,0,0,106,11,0,100,3,0,107, ++ 8,0,114,158,0,116,9,0,100,4,0,100,2,0,124,0, ++ 0,106,0,0,106,1,0,131,1,1,130,1,0,110,0,0, ++ 124,0,0,106,12,0,124,1,0,100,5,0,100,6,0,131, ++ 1,1,1,124,1,0,83,124,0,0,106,12,0,124,1,0, ++ 100,5,0,100,6,0,131,1,1,1,116,13,0,124,0,0, ++ 106,0,0,106,10,0,100,7,0,131,2,0,115,243,0,124, ++ 0,0,106,0,0,106,10,0,106,14,0,124,2,0,131,1, ++ 0,1,110,13,0,124,0,0,106,15,0,124,1,0,131,1, ++ 0,1,87,100,3,0,81,88,116,5,0,106,6,0,124,2, ++ 0,25,83,41,8,122,51,69,120,101,99,117,116,101,32,116, ++ 104,101,32,115,112,101,99,32,105,110,32,97,110,32,101,120, ++ 105,115,116,105,110,103,32,109,111,100,117,108,101,39,115,32, ++ 110,97,109,101,115,112,97,99,101,46,122,30,109,111,100,117, ++ 108,101,32,123,33,114,125,32,110,111,116,32,105,110,32,115, ++ 121,115,46,109,111,100,117,108,101,115,114,68,0,0,0,78, ++ 122,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, ++ 114,249,0,0,0,84,114,2,1,0,0,41,16,114,178,0, ++ 0,0,114,68,0,0,0,114,107,0,0,0,218,12,97,99, ++ 113,117,105,114,101,95,108,111,99,107,114,104,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,114,94,0,0,0,114,48, ++ 0,0,0,114,154,0,0,0,114,170,0,0,0,114,221,0, ++ 0,0,114,255,0,0,0,114,61,0,0,0,218,11,108,111, ++ 97,100,95,109,111,100,117,108,101,114,3,1,0,0,41,4, ++ 114,72,0,0,0,114,180,0,0,0,114,68,0,0,0,114, ++ 172,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,176,0,0,0,108,4,0,0,115,32,0,0, ++ 0,0,2,12,1,10,1,13,1,24,1,15,1,21,1,18, ++ 1,18,1,27,2,19,1,4,1,19,1,21,4,22,2,19, ++ 1,122,17,95,83,112,101,99,77,101,116,104,111,100,115,46, ++ 101,120,101,99,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,27,0,0,0,67,0,0,0,115,24,1,0,0,124,0, ++ 0,106,0,0,125,1,0,124,1,0,106,1,0,106,2,0, ++ 124,1,0,106,3,0,131,1,0,1,116,4,0,106,5,0, ++ 124,1,0,106,3,0,25,125,2,0,116,6,0,124,2,0, ++ 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, ++ 108,0,121,16,0,124,1,0,106,1,0,124,2,0,95,7, ++ 0,87,113,108,0,4,116,8,0,107,10,0,114,104,0,1, ++ 1,1,89,113,108,0,88,110,0,0,116,6,0,124,2,0, ++ 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, ++ 215,0,121,59,0,124,2,0,106,9,0,124,2,0,95,10, ++ 0,116,11,0,124,2,0,100,3,0,131,2,0,115,190,0, ++ 124,1,0,106,3,0,106,12,0,100,4,0,131,1,0,100, ++ 5,0,25,124,2,0,95,10,0,110,0,0,87,113,215,0, ++ 4,116,8,0,107,10,0,114,211,0,1,1,1,89,113,215, ++ 0,88,110,0,0,116,6,0,124,2,0,100,6,0,100,0, ++ 0,131,3,0,100,0,0,107,8,0,114,20,1,121,13,0, ++ 124,1,0,124,2,0,95,13,0,87,113,20,1,4,116,8, ++ 0,107,10,0,114,16,1,1,1,1,89,113,20,1,88,110, ++ 0,0,124,2,0,83,41,7,78,114,205,0,0,0,114,251, ++ 0,0,0,114,247,0,0,0,114,117,0,0,0,114,85,0, ++ 0,0,114,209,0,0,0,41,14,114,178,0,0,0,114,170, ++ 0,0,0,114,5,1,0,0,114,68,0,0,0,114,8,0, ++ 0,0,114,74,0,0,0,114,63,0,0,0,114,205,0,0, ++ 0,114,210,0,0,0,114,58,0,0,0,114,251,0,0,0, ++ 114,61,0,0,0,114,33,0,0,0,114,209,0,0,0,41, ++ 3,114,72,0,0,0,114,178,0,0,0,114,180,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 25,95,108,111,97,100,95,98,97,99,107,119,97,114,100,95, ++ 99,111,109,112,97,116,105,98,108,101,132,4,0,0,115,42, ++ 0,0,0,0,4,9,1,19,2,16,1,24,1,3,1,16, ++ 1,13,1,8,1,24,1,3,4,12,1,15,1,32,1,13, ++ 1,8,1,24,1,3,1,13,1,13,1,8,1,122,38,95, ++ 83,112,101,99,77,101,116,104,111,100,115,46,95,108,111,97, ++ 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, ++ 116,105,98,108,101,99,1,0,0,0,0,0,0,0,2,0, ++ 0,0,11,0,0,0,67,0,0,0,115,179,0,0,0,124, ++ 0,0,106,0,0,106,1,0,100,0,0,107,9,0,114,52, ++ 0,116,2,0,124,0,0,106,0,0,106,1,0,100,1,0, ++ 131,2,0,115,52,0,124,0,0,106,3,0,131,0,0,83, ++ 110,0,0,124,0,0,106,4,0,131,0,0,125,1,0,116, ++ 5,0,124,1,0,131,1,0,143,84,0,1,124,0,0,106, ++ 0,0,106,1,0,100,0,0,107,8,0,114,143,0,124,0, ++ 0,106,0,0,106,6,0,100,0,0,107,8,0,114,156,0, ++ 116,7,0,100,2,0,100,3,0,124,0,0,106,0,0,106, ++ 8,0,131,1,1,130,1,0,113,156,0,110,13,0,124,0, ++ 0,106,9,0,124,1,0,131,1,0,1,87,100,0,0,81, ++ 88,116,10,0,106,11,0,124,0,0,106,0,0,106,8,0, ++ 25,83,41,4,78,114,2,1,0,0,122,14,109,105,115,115, ++ 105,110,103,32,108,111,97,100,101,114,114,68,0,0,0,41, ++ 12,114,178,0,0,0,114,170,0,0,0,114,61,0,0,0, ++ 114,6,1,0,0,114,1,1,0,0,114,213,0,0,0,114, ++ 221,0,0,0,114,154,0,0,0,114,68,0,0,0,114,3, ++ 1,0,0,114,8,0,0,0,114,74,0,0,0,41,2,114, ++ 72,0,0,0,114,180,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,14,95,108,111,97,100,95, ++ 117,110,108,111,99,107,101,100,162,4,0,0,115,20,0,0, ++ 0,0,2,18,2,21,1,13,2,12,1,13,1,18,1,18, ++ 1,30,3,19,5,122,27,95,83,112,101,99,77,101,116,104, ++ 111,100,115,46,95,108,111,97,100,95,117,110,108,111,99,107, ++ 101,100,99,1,0,0,0,0,0,0,0,1,0,0,0,8, ++ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, ++ 1,0,131,0,0,1,116,2,0,124,0,0,106,3,0,106, ++ 4,0,131,1,0,143,15,0,1,124,0,0,106,5,0,131, ++ 0,0,83,87,100,1,0,81,88,100,1,0,83,41,2,122, ++ 207,82,101,116,117,114,110,32,97,32,110,101,119,32,109,111, ++ 100,117,108,101,32,111,98,106,101,99,116,44,32,108,111,97, ++ 100,101,100,32,98,121,32,116,104,101,32,115,112,101,99,39, ++ 115,32,108,111,97,100,101,114,46,10,10,32,32,32,32,32, ++ 32,32,32,84,104,101,32,109,111,100,117,108,101,32,105,115, ++ 32,110,111,116,32,97,100,100,101,100,32,116,111,32,105,116, ++ 115,32,112,97,114,101,110,116,46,10,10,32,32,32,32,32, ++ 32,32,32,73,102,32,97,32,109,111,100,117,108,101,32,105, ++ 115,32,97,108,114,101,97,100,121,32,105,110,32,115,121,115, ++ 46,109,111,100,117,108,101,115,44,32,116,104,97,116,32,101, ++ 120,105,115,116,105,110,103,32,109,111,100,117,108,101,32,103, ++ 101,116,115,10,32,32,32,32,32,32,32,32,99,108,111,98, ++ 98,101,114,101,100,46,10,10,32,32,32,32,32,32,32,32, ++ 78,41,6,114,107,0,0,0,114,4,1,0,0,114,104,0, ++ 0,0,114,178,0,0,0,114,68,0,0,0,114,7,1,0, ++ 0,41,1,114,72,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,177,0,0,0,185,4,0,0, ++ 115,6,0,0,0,0,9,10,1,19,1,122,17,95,83,112, ++ 101,99,77,101,116,104,111,100,115,46,108,111,97,100,78,41, ++ 13,114,58,0,0,0,114,57,0,0,0,114,59,0,0,0, ++ 114,60,0,0,0,114,73,0,0,0,114,206,0,0,0,114, ++ 255,0,0,0,114,1,1,0,0,114,3,1,0,0,114,176, ++ 0,0,0,114,6,1,0,0,114,7,1,0,0,114,177,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,175,0,0,0,225,3,0,0,115, ++ 20,0,0,0,12,3,6,4,12,3,12,16,24,80,12,23, ++ 12,10,12,24,12,30,12,23,114,175,0,0,0,99,4,0, ++ 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, ++ 0,0,115,201,0,0,0,124,0,0,106,0,0,100,1,0, ++ 131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,131, ++ 1,0,125,5,0,124,4,0,115,102,0,124,5,0,114,54, ++ 0,124,5,0,106,1,0,125,4,0,113,102,0,124,2,0, ++ 124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,124, ++ 2,0,131,2,0,125,4,0,113,102,0,116,3,0,124,1, ++ 0,124,2,0,131,2,0,125,4,0,110,0,0,124,5,0, ++ 115,132,0,116,4,0,124,1,0,124,2,0,100,3,0,124, ++ 4,0,131,2,1,125,5,0,110,0,0,121,44,0,124,5, ++ 0,124,0,0,100,2,0,60,124,4,0,124,0,0,100,1, ++ 0,60,124,2,0,124,0,0,100,4,0,60,124,3,0,124, ++ 0,0,100,5,0,60,87,110,18,0,4,116,5,0,107,10, ++ 0,114,196,0,1,1,1,89,110,1,0,88,100,0,0,83, ++ 41,6,78,114,205,0,0,0,114,209,0,0,0,114,170,0, ++ 0,0,114,211,0,0,0,114,245,0,0,0,41,6,114,94, ++ 0,0,0,114,170,0,0,0,218,20,83,111,117,114,99,101, ++ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,218,16, ++ 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, ++ 114,240,0,0,0,114,208,0,0,0,41,6,90,2,110,115, ++ 114,68,0,0,0,90,8,112,97,116,104,110,97,109,101,90, ++ 9,99,112,97,116,104,110,97,109,101,114,170,0,0,0,114, ++ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,14,95,102,105,120,95,117,112,95,109,111,100, ++ 117,108,101,199,4,0,0,115,34,0,0,0,0,2,15,1, ++ 15,1,6,1,6,1,12,1,12,1,18,2,18,1,6,1, ++ 24,1,3,1,10,1,10,1,10,1,14,1,13,2,114,10, ++ 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 5,0,0,0,64,0,0,0,115,181,0,0,0,101,0,0, ++ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,101, ++ 4,0,100,2,0,100,3,0,132,0,0,131,1,0,90,5, ++ 0,101,6,0,100,4,0,100,4,0,100,5,0,100,6,0, ++ 132,2,0,131,1,0,90,7,0,101,6,0,100,4,0,100, ++ 7,0,100,8,0,132,1,0,131,1,0,90,8,0,101,6, ++ 0,101,9,0,100,9,0,100,10,0,132,0,0,131,1,0, ++ 131,1,0,90,10,0,101,6,0,101,9,0,100,11,0,100, ++ 12,0,132,0,0,131,1,0,131,1,0,90,11,0,101,6, ++ 0,101,9,0,100,13,0,100,14,0,132,0,0,131,1,0, ++ 131,1,0,90,12,0,101,6,0,101,9,0,100,15,0,100, ++ 16,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4, ++ 0,83,41,17,218,15,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,122,144,77,101,116,97,32,112,97,116,104, ++ 32,105,109,112,111,114,116,32,102,111,114,32,98,117,105,108, ++ 116,45,105,110,32,109,111,100,117,108,101,115,46,10,10,32, ++ 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, ++ 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, ++ 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, ++ 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, ++ 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, ++ 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, ++ 46,10,10,32,32,32,32,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, ++ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, ++ 83,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114, ++ 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, ++ 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, ++ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, ++ 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, ++ 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, ++ 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, ++ 32,32,32,32,32,32,32,32,122,24,60,109,111,100,117,108, ++ 101,32,123,33,114,125,32,40,98,117,105,108,116,45,105,110, ++ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, ++ 114,180,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,206,0,0,0,233,4,0,0,115,2,0, ++ 0,0,0,7,122,27,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, ++ 114,78,99,4,0,0,0,0,0,0,0,4,0,0,0,5, ++ 0,0,0,67,0,0,0,115,58,0,0,0,124,2,0,100, ++ 0,0,107,9,0,114,16,0,100,0,0,83,116,0,0,106, ++ 1,0,124,1,0,131,1,0,114,50,0,116,2,0,124,1, ++ 0,124,0,0,100,1,0,100,2,0,131,2,1,83,100,0, ++ 0,83,100,0,0,83,41,3,78,114,218,0,0,0,122,8, ++ 98,117,105,108,116,45,105,110,41,3,114,107,0,0,0,90, ++ 10,105,115,95,98,117,105,108,116,105,110,114,174,0,0,0, ++ 41,4,218,3,99,108,115,114,159,0,0,0,114,36,0,0, ++ 0,218,6,116,97,114,103,101,116,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,9,102,105,110,100,95,115, ++ 112,101,99,242,4,0,0,115,10,0,0,0,0,2,12,1, ++ 4,1,15,1,19,2,122,25,66,117,105,108,116,105,110,73, ++ 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, ++ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, ++ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, ++ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, ++ 100,1,0,107,9,0,114,37,0,124,3,0,106,1,0,83, ++ 100,1,0,83,41,2,122,175,70,105,110,100,32,116,104,101, ++ 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, ++ 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, ++ 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, ++ 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, ++ 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, ++ 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, ++ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, ++ 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, ++ 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, ++ 32,32,32,32,32,32,32,78,41,2,114,14,1,0,0,114, ++ 170,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,178,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,11,102,105,110,100,95, ++ 109,111,100,117,108,101,251,4,0,0,115,4,0,0,0,0, ++ 9,18,1,122,27,66,117,105,108,116,105,110,73,109,112,111, ++ 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,3,0,0,0,10,0,0, ++ 0,67,0,0,0,115,59,0,0,0,116,0,0,124,1,0, ++ 131,1,0,143,23,0,1,116,1,0,116,2,0,106,3,0, ++ 124,1,0,131,2,0,125,2,0,87,100,1,0,81,88,124, ++ 0,0,124,2,0,95,4,0,100,2,0,124,2,0,95,5, ++ 0,124,2,0,83,41,3,122,23,76,111,97,100,32,97,32, ++ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, ++ 78,114,31,0,0,0,41,6,114,70,0,0,0,114,115,0, ++ 0,0,114,107,0,0,0,90,12,105,110,105,116,95,98,117, ++ 105,108,116,105,110,114,205,0,0,0,114,251,0,0,0,41, ++ 3,114,12,1,0,0,114,159,0,0,0,114,180,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 5,1,0,0,7,5,0,0,115,10,0,0,0,0,6,13, ++ 1,24,1,9,1,9,1,122,27,66,117,105,108,116,105,110, ++ 73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,111, ++ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, ++ 0,83,41,2,122,57,82,101,116,117,114,110,32,78,111,110, ++ 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111, ++ 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118, ++ 101,32,99,111,100,101,32,111,98,106,101,99,116,115,46,78, ++ 114,5,0,0,0,41,2,114,12,1,0,0,114,159,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,8,103,101,116,95,99,111,100,101,19,5,0,0,115,2, ++ 0,0,0,0,4,122,24,66,117,105,108,116,105,110,73,109, ++ 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, +- 57,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, ++ 56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, +- 32,100,111,32,110,111,116,32,104,97,118,101,32,99,111,100, +- 101,32,111,98,106,101,99,116,115,46,78,114,4,0,0,0, +- 41,2,114,11,1,0,0,114,158,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,8,103,101,116, +- 95,99,111,100,101,19,5,0,0,115,2,0,0,0,0,4, +- 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, +- 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, +- 4,0,0,0,100,1,0,83,41,2,122,56,82,101,116,117, +- 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, +- 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, +- 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, +- 111,100,101,46,78,114,4,0,0,0,41,2,114,11,1,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, +- 101,25,5,0,0,115,2,0,0,0,0,4,122,26,66,117, +- 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, +- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, ++ 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, ++ 114,99,101,32,99,111,100,101,46,78,114,5,0,0,0,41, ++ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, ++ 115,111,117,114,99,101,25,5,0,0,115,2,0,0,0,0, ++ 4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, ++ 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,4,0,0,0,100,1,0,83,41,2,122,52,82, ++ 101,116,117,114,110,32,70,97,108,115,101,32,97,115,32,98, ++ 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, ++ 97,114,101,32,110,101,118,101,114,32,112,97,99,107,97,103, ++ 101,115,46,70,114,5,0,0,0,41,2,114,12,1,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,220,0,0,0,31,5,0,0,115,2,0, ++ 0,0,0,4,122,26,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, ++ 41,14,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,218,12,115,116,97,116,105,99,109,101, ++ 116,104,111,100,114,206,0,0,0,218,11,99,108,97,115,115, ++ 109,101,116,104,111,100,114,14,1,0,0,114,15,1,0,0, ++ 114,162,0,0,0,114,5,1,0,0,114,16,1,0,0,114, ++ 17,1,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,11,1, ++ 0,0,224,4,0,0,115,28,0,0,0,12,7,6,2,18, ++ 9,3,1,21,8,3,1,18,11,3,1,21,11,3,1,21, ++ 5,3,1,21,5,3,1,114,11,1,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,0, ++ 0,115,193,0,0,0,101,0,0,90,1,0,100,0,0,90, ++ 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, ++ 0,132,0,0,131,1,0,90,5,0,101,6,0,100,4,0, ++ 100,4,0,100,5,0,100,6,0,132,2,0,131,1,0,90, ++ 7,0,101,6,0,100,4,0,100,7,0,100,8,0,132,1, ++ 0,131,1,0,90,8,0,101,4,0,100,9,0,100,10,0, ++ 132,0,0,131,1,0,90,9,0,101,6,0,100,11,0,100, ++ 12,0,132,0,0,131,1,0,90,10,0,101,6,0,101,11, ++ 0,100,13,0,100,14,0,132,0,0,131,1,0,131,1,0, ++ 90,12,0,101,6,0,101,11,0,100,15,0,100,16,0,132, ++ 0,0,131,1,0,131,1,0,90,13,0,101,6,0,101,11, ++ 0,100,17,0,100,18,0,132,0,0,131,1,0,131,1,0, ++ 90,14,0,100,4,0,83,41,19,218,14,70,114,111,122,101, ++ 110,73,109,112,111,114,116,101,114,122,142,77,101,116,97,32, ++ 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, ++ 102,114,111,122,101,110,32,109,111,100,117,108,101,115,46,10, ++ 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, ++ 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, ++ 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, ++ 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, ++ 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, ++ 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, ++ 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, ++ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, ++ 1,0,83,41,2,122,115,82,101,116,117,114,110,32,114,101, ++ 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, ++ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, ++ 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, ++ 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, ++ 10,10,32,32,32,32,32,32,32,32,122,22,60,109,111,100, ++ 117,108,101,32,123,33,114,125,32,40,102,114,111,122,101,110, ++ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, ++ 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,206,0,0,0,47,5,0,0,115,2,0,0,0, ++ 0,7,122,26,70,114,111,122,101,110,73,109,112,111,114,116, ++ 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, ++ 4,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, ++ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, ++ 1,0,131,1,0,114,34,0,116,2,0,124,1,0,124,0, ++ 0,100,1,0,100,2,0,131,2,1,83,100,0,0,83,100, ++ 0,0,83,41,3,78,114,218,0,0,0,90,6,102,114,111, ++ 122,101,110,41,3,114,107,0,0,0,114,163,0,0,0,114, ++ 174,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,13,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,14,1,0,0,56,5, ++ 0,0,115,6,0,0,0,0,2,15,1,19,2,122,24,70, ++ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, ++ 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, ++ 3,0,0,0,2,0,0,0,67,0,0,0,115,23,0,0, ++ 0,116,0,0,106,1,0,124,1,0,131,1,0,114,19,0, ++ 124,0,0,83,100,1,0,83,41,2,122,93,70,105,110,100, ++ 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, ++ 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, ++ 10,32,32,32,32,32,32,32,32,78,41,2,114,107,0,0, ++ 0,114,163,0,0,0,41,3,114,12,1,0,0,114,159,0, ++ 0,0,114,36,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,15,1,0,0,63,5,0,0,115, ++ 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, ++ 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, ++ 108,101,99,1,0,0,0,0,0,0,0,3,0,0,0,4, ++ 0,0,0,67,0,0,0,115,95,0,0,0,124,0,0,106, ++ 0,0,106,1,0,125,1,0,116,2,0,106,3,0,124,1, ++ 0,131,1,0,115,57,0,116,4,0,100,1,0,106,5,0, ++ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, ++ 1,0,110,0,0,116,6,0,116,2,0,106,7,0,124,1, ++ 0,131,2,0,125,2,0,116,8,0,124,2,0,124,0,0, ++ 106,9,0,131,2,0,1,100,0,0,83,41,3,78,122,27, ++ 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, ++ 111,122,101,110,32,109,111,100,117,108,101,114,68,0,0,0, ++ 41,10,114,209,0,0,0,114,68,0,0,0,114,107,0,0, ++ 0,114,163,0,0,0,114,154,0,0,0,114,48,0,0,0, ++ 114,115,0,0,0,218,17,103,101,116,95,102,114,111,122,101, ++ 110,95,111,98,106,101,99,116,114,176,0,0,0,114,64,0, ++ 0,0,41,3,114,180,0,0,0,114,68,0,0,0,114,195, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,2,1,0,0,72,5,0,0,115,12,0,0,0, ++ 0,2,12,1,15,1,18,1,12,1,18,1,122,26,70,114, ++ 111,122,101,110,73,109,112,111,114,116,101,114,46,101,120,101, ++ 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,3,0,0,0,67,0,0,0,115,13,0, ++ 0,0,116,0,0,124,0,0,124,1,0,131,2,0,83,41, ++ 1,122,95,76,111,97,100,32,97,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, ++ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, ++ 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, ++ 32,32,41,1,114,181,0,0,0,41,2,114,12,1,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,5,1,0,0,81,5,0,0,115,2,0, ++ 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, ++ 114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, ++ 0,67,0,0,0,115,13,0,0,0,116,0,0,106,1,0, ++ 124,1,0,131,1,0,83,41,1,122,45,82,101,116,117,114, ++ 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, ++ 116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,46,41,2,114,107,0,0,0,114, ++ 22,1,0,0,41,2,114,12,1,0,0,114,159,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 16,1,0,0,90,5,0,0,115,2,0,0,0,0,4,122, ++ 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, ++ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, +- 0,0,100,1,0,83,41,2,122,52,82,101,116,117,114,110, +- 32,70,97,108,115,101,32,97,115,32,98,117,105,108,116,45, +- 105,110,32,109,111,100,117,108,101,115,32,97,114,101,32,110, +- 101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,114, +- 4,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 219,0,0,0,31,5,0,0,115,2,0,0,0,0,4,122, +- 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 46,105,115,95,112,97,99,107,97,103,101,41,14,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114, +- 205,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111, +- 100,114,13,1,0,0,114,14,1,0,0,114,161,0,0,0, +- 114,4,1,0,0,114,15,1,0,0,114,16,1,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,10,1,0,0,224,4,0, +- 0,115,28,0,0,0,12,7,6,2,18,9,3,1,21,8, +- 3,1,18,11,3,1,21,11,3,1,21,5,3,1,21,5, +- 3,1,114,10,1,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,5,0,0,0,64,0,0,0,115,193,0,0, ++ 0,0,100,1,0,83,41,2,122,54,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, ++ 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, ++ 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 78,114,5,0,0,0,41,2,114,12,1,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,17,1,0,0,96,5,0,0,115,2,0,0,0,0, ++ 4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,101, ++ 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, ++ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, ++ 0,115,13,0,0,0,116,0,0,106,1,0,124,1,0,131, ++ 1,0,83,41,1,122,46,82,101,116,117,114,110,32,84,114, ++ 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, ++ 107,97,103,101,46,41,2,114,107,0,0,0,90,17,105,115, ++ 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,41, ++ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,220,0,0,0,102, ++ 5,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, ++ 101,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, ++ 99,107,97,103,101,41,15,114,58,0,0,0,114,57,0,0, ++ 0,114,59,0,0,0,114,60,0,0,0,114,18,1,0,0, ++ 114,206,0,0,0,114,19,1,0,0,114,14,1,0,0,114, ++ 15,1,0,0,114,2,1,0,0,114,5,1,0,0,114,165, ++ 0,0,0,114,16,1,0,0,114,17,1,0,0,114,220,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,20,1,0,0,38,5,0,0,115, ++ 28,0,0,0,12,7,6,2,18,9,3,1,21,6,3,1, ++ 18,8,18,9,18,9,3,1,21,5,3,1,21,5,3,1, ++ 114,20,1,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,5,0,0,0,64,0,0,0,115,121,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,90,4,0,100,3,0,90,5,0,100,4,0, ++ 90,6,0,101,7,0,100,5,0,100,6,0,132,0,0,131, ++ 1,0,90,8,0,101,7,0,100,7,0,100,8,0,132,0, ++ 0,131,1,0,90,9,0,101,7,0,100,9,0,100,9,0, ++ 100,10,0,100,11,0,132,2,0,131,1,0,90,10,0,101, ++ 7,0,100,9,0,100,12,0,100,13,0,132,1,0,131,1, ++ 0,90,11,0,100,9,0,83,41,14,218,21,87,105,110,100, ++ 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, ++ 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, ++ 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, ++ 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, ++ 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, ++ 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, ++ 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, ++ 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, ++ 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, ++ 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, ++ 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, ++ 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, ++ 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, ++ 103,70,99,2,0,0,0,0,0,0,0,2,0,0,0,11, ++ 0,0,0,67,0,0,0,115,67,0,0,0,121,23,0,116, ++ 0,0,106,1,0,116,0,0,106,2,0,124,1,0,131,2, ++ 0,83,87,110,37,0,4,116,3,0,107,10,0,114,62,0, ++ 1,1,1,116,0,0,106,1,0,116,0,0,106,4,0,124, ++ 1,0,131,2,0,83,89,110,1,0,88,100,0,0,83,41, ++ 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, ++ 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, ++ 82,69,78,84,95,85,83,69,82,114,41,0,0,0,90,18, ++ 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, ++ 78,69,41,2,114,12,1,0,0,218,3,107,101,121,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,14,95, ++ 111,112,101,110,95,114,101,103,105,115,116,114,121,121,5,0, ++ 0,115,8,0,0,0,0,2,3,1,23,1,13,1,122,36, ++ 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, ++ 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, ++ 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, ++ 0,16,0,0,0,67,0,0,0,115,142,0,0,0,124,0, ++ 0,106,0,0,114,21,0,124,0,0,106,1,0,125,2,0, ++ 110,9,0,124,0,0,106,2,0,125,2,0,124,2,0,106, ++ 3,0,100,1,0,124,1,0,100,2,0,116,4,0,106,5, ++ 0,100,0,0,100,3,0,133,2,0,25,131,0,2,125,3, ++ 0,121,46,0,124,0,0,106,6,0,124,3,0,131,1,0, ++ 143,25,0,125,4,0,116,7,0,106,8,0,124,4,0,100, ++ 4,0,131,2,0,125,5,0,87,100,0,0,81,88,87,110, ++ 22,0,4,116,9,0,107,10,0,114,137,0,1,1,1,100, ++ 0,0,83,89,110,1,0,88,124,5,0,83,41,5,78,114, ++ 159,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, ++ 110,114,137,0,0,0,114,31,0,0,0,41,10,218,11,68, ++ 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, ++ 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, ++ 82,69,71,73,83,84,82,89,95,75,69,89,114,48,0,0, ++ 0,114,8,0,0,0,218,7,118,101,114,115,105,111,110,114, ++ 26,1,0,0,114,24,1,0,0,90,10,81,117,101,114,121, ++ 86,97,108,117,101,114,41,0,0,0,41,6,114,12,1,0, ++ 0,114,159,0,0,0,90,12,114,101,103,105,115,116,114,121, ++ 95,107,101,121,114,25,1,0,0,90,4,104,107,101,121,218, ++ 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,16,95,115,101,97,114,99, ++ 104,95,114,101,103,105,115,116,114,121,128,5,0,0,115,22, ++ 0,0,0,0,2,9,1,12,2,9,1,15,1,22,1,3, ++ 1,18,1,28,1,13,1,9,1,122,38,87,105,110,100,111, ++ 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, ++ 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, ++ 121,78,99,4,0,0,0,0,0,0,0,8,0,0,0,14, ++ 0,0,0,67,0,0,0,115,155,0,0,0,124,0,0,106, ++ 0,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, ++ 0,107,8,0,114,31,0,100,0,0,83,121,14,0,116,1, ++ 0,124,4,0,131,1,0,1,87,110,22,0,4,116,2,0, ++ 107,10,0,114,69,0,1,1,1,100,0,0,83,89,110,1, ++ 0,88,120,78,0,116,3,0,131,0,0,68,93,67,0,92, ++ 2,0,125,5,0,125,6,0,124,4,0,106,4,0,116,5, ++ 0,124,6,0,131,1,0,131,1,0,114,80,0,116,6,0, ++ 124,1,0,124,5,0,124,1,0,124,4,0,131,2,0,100, ++ 1,0,124,4,0,131,2,1,125,7,0,124,7,0,83,113, ++ 80,0,87,100,0,0,83,41,2,78,114,218,0,0,0,41, ++ 7,114,32,1,0,0,114,40,0,0,0,114,41,0,0,0, ++ 114,241,0,0,0,114,231,0,0,0,114,232,0,0,0,114, ++ 174,0,0,0,41,8,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,13,1,0,0,114,31,1,0,0,114, ++ 170,0,0,0,114,128,0,0,0,114,178,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,14,1, ++ 0,0,143,5,0,0,115,24,0,0,0,0,2,15,1,12, ++ 1,4,1,3,1,14,1,13,1,9,1,22,1,21,1,21, ++ 1,9,1,122,31,87,105,110,100,111,119,115,82,101,103,105, ++ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, ++ 115,112,101,99,99,3,0,0,0,0,0,0,0,4,0,0, ++ 0,3,0,0,0,67,0,0,0,115,45,0,0,0,124,0, ++ 0,106,0,0,124,1,0,124,2,0,131,2,0,125,3,0, ++ 124,3,0,100,1,0,107,9,0,114,37,0,124,3,0,106, ++ 1,0,83,100,1,0,83,100,1,0,83,41,2,122,108,70, ++ 105,110,100,32,109,111,100,117,108,101,32,110,97,109,101,100, ++ 32,105,110,32,116,104,101,32,114,101,103,105,115,116,114,121, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, ++ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, ++ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,14, ++ 1,0,0,114,170,0,0,0,41,4,114,12,1,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,178,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,15,1, ++ 0,0,158,5,0,0,115,8,0,0,0,0,7,18,1,12, ++ 1,7,2,122,33,87,105,110,100,111,119,115,82,101,103,105, ++ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, ++ 109,111,100,117,108,101,41,12,114,58,0,0,0,114,57,0, ++ 0,0,114,59,0,0,0,114,60,0,0,0,114,29,1,0, ++ 0,114,28,1,0,0,114,27,1,0,0,114,19,1,0,0, ++ 114,26,1,0,0,114,32,1,0,0,114,14,1,0,0,114, ++ 15,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,23,1,0,0,109,5,0, ++ 0,115,20,0,0,0,12,2,6,3,6,3,6,2,6,2, ++ 18,7,18,15,3,1,21,14,3,1,114,23,1,0,0,99, ++ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, ++ 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, ++ 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, ++ 90,5,0,101,6,0,90,7,0,100,6,0,83,41,7,218, ++ 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, ++ 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, ++ 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, ++ 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, ++ 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, ++ 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, ++ 101,114,46,99,2,0,0,0,0,0,0,0,5,0,0,0, ++ 3,0,0,0,67,0,0,0,115,88,0,0,0,116,0,0, ++ 124,0,0,106,1,0,124,1,0,131,1,0,131,1,0,100, ++ 1,0,25,125,2,0,124,2,0,106,2,0,100,2,0,100, ++ 1,0,131,2,0,100,3,0,25,125,3,0,124,1,0,106, ++ 3,0,100,2,0,131,1,0,100,4,0,25,125,4,0,124, ++ 3,0,100,5,0,107,2,0,111,87,0,124,4,0,100,5, ++ 0,107,3,0,83,41,6,122,141,67,111,110,99,114,101,116, ++ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, ++ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, ++ 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, ++ 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, ++ 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, ++ 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, ++ 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, ++ 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, ++ 95,46,112,121,39,46,114,30,0,0,0,114,117,0,0,0, ++ 114,85,0,0,0,114,116,0,0,0,114,73,0,0,0,41, ++ 4,114,39,0,0,0,114,239,0,0,0,114,35,0,0,0, ++ 114,33,0,0,0,41,5,114,72,0,0,0,114,159,0,0, ++ 0,114,132,0,0,0,90,13,102,105,108,101,110,97,109,101, ++ 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 220,0,0,0,177,5,0,0,115,8,0,0,0,0,3,25, ++ 1,22,1,19,1,122,24,95,76,111,97,100,101,114,66,97, ++ 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, ++ 2,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, ++ 67,0,0,0,115,80,0,0,0,124,0,0,106,0,0,124, ++ 1,0,106,1,0,131,1,0,125,2,0,124,2,0,100,1, ++ 0,107,8,0,114,57,0,116,2,0,100,2,0,106,3,0, ++ 124,1,0,106,1,0,131,1,0,131,1,0,130,1,0,110, ++ 0,0,116,4,0,116,5,0,124,2,0,124,1,0,106,6, ++ 0,131,3,0,1,100,1,0,83,41,3,122,19,69,120,101, ++ 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, ++ 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, ++ 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, ++ 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, ++ 110,115,32,78,111,110,101,41,7,114,16,1,0,0,114,58, ++ 0,0,0,114,154,0,0,0,114,48,0,0,0,114,115,0, ++ 0,0,114,176,0,0,0,114,64,0,0,0,41,3,114,72, ++ 0,0,0,114,180,0,0,0,114,195,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,2,1,0, ++ 0,185,5,0,0,115,10,0,0,0,0,2,18,1,12,1, ++ 3,1,24,1,122,25,95,76,111,97,100,101,114,66,97,115, ++ 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,78, ++ 41,8,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,114,220,0,0,0,114,2,1,0,0, ++ 114,181,0,0,0,114,5,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,33, ++ 1,0,0,172,5,0,0,115,8,0,0,0,12,3,6,2, ++ 12,8,12,8,114,33,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4, ++ 0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0, ++ 90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100, ++ 9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18, ++ 0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0, ++ 100,16,0,132,0,0,90,9,0,100,17,0,83,41,19,218, ++ 12,83,111,117,114,99,101,76,111,97,100,101,114,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,10,0,0,0,116,0,0,130,1,0,100,1,0, ++ 83,41,2,122,178,79,112,116,105,111,110,97,108,32,109,101, ++ 116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110, ++ 115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105, ++ 111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41, ++ 32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32, ++ 32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,44, ++ 32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97, ++ 32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82, ++ 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, ++ 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, ++ 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, ++ 32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114, ++ 114,111,114,41,2,114,72,0,0,0,114,36,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, ++ 112,97,116,104,95,109,116,105,109,101,198,5,0,0,115,2, ++ 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, ++ 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, ++ 0,0,0,115,20,0,0,0,105,1,0,124,0,0,106,0, ++ 0,124,1,0,131,1,0,100,1,0,54,83,41,2,97,170, ++ 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, ++ 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, ++ 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, ++ 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,112, ++ 97,116,104,10,32,32,32,32,32,32,32,32,116,111,32,98, ++ 121,32,116,104,101,32,112,97,116,104,32,40,115,116,114,41, ++ 46,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, ++ 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, ++ 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, ++ 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, ++ 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, ++ 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, ++ 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, ++ 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, ++ 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, ++ 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, ++ 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, ++ 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, ++ 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, ++ 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, ++ 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, ++ 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, ++ 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, ++ 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, ++ 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, ++ 108,101,100,46,10,32,32,32,32,32,32,32,32,114,184,0, ++ 0,0,41,1,114,36,1,0,0,41,2,114,72,0,0,0, ++ 114,36,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, ++ 206,5,0,0,115,2,0,0,0,0,11,122,23,83,111,117, ++ 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, ++ 116,97,116,115,99,4,0,0,0,0,0,0,0,4,0,0, ++ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, ++ 0,106,0,0,124,2,0,124,3,0,131,2,0,83,41,1, ++ 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, ++ 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, ++ 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, ++ 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, ++ 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, ++ 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, ++ 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, ++ 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, ++ 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, ++ 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, ++ 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, ++ 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, ++ 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, ++ 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, ++ 32,32,32,32,32,32,41,1,218,8,115,101,116,95,100,97, ++ 116,97,41,4,114,72,0,0,0,114,142,0,0,0,90,10, ++ 99,97,99,104,101,95,112,97,116,104,114,54,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,15, ++ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,219, ++ 5,0,0,115,2,0,0,0,0,8,122,28,83,111,117,114, ++ 99,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, ++ 98,121,116,101,99,111,100,101,99,3,0,0,0,0,0,0, ++ 0,3,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,150,79,112,116,105,111,110, ++ 97,108,32,109,101,116,104,111,100,32,119,104,105,99,104,32, ++ 119,114,105,116,101,115,32,100,97,116,97,32,40,98,121,116, ++ 101,115,41,32,116,111,32,97,32,102,105,108,101,32,112,97, ++ 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, ++ 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, ++ 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, ++ 108,111,119,115,32,102,111,114,32,116,104,101,32,119,114,105, ++ 116,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, ++ 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, ++ 78,114,5,0,0,0,41,3,114,72,0,0,0,114,36,0, ++ 0,0,114,54,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,38,1,0,0,229,5,0,0,115, ++ 0,0,0,0,122,21,83,111,117,114,99,101,76,111,97,100, ++ 101,114,46,115,101,116,95,100,97,116,97,99,2,0,0,0, ++ 0,0,0,0,5,0,0,0,16,0,0,0,67,0,0,0, ++ 115,105,0,0,0,124,0,0,106,0,0,124,1,0,131,1, ++ 0,125,2,0,121,19,0,124,0,0,106,1,0,124,2,0, ++ 131,1,0,125,3,0,87,110,58,0,4,116,2,0,107,10, ++ 0,114,94,0,1,125,4,0,1,122,26,0,116,3,0,100, ++ 1,0,100,2,0,124,1,0,131,1,1,124,4,0,130,2, ++ 0,87,89,100,3,0,100,3,0,125,4,0,126,4,0,88, ++ 110,1,0,88,116,4,0,124,3,0,131,1,0,83,41,4, ++ 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, ++ 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, ++ 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, ++ 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, ++ 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, ++ 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, ++ 68,0,0,0,78,41,5,114,239,0,0,0,218,8,103,101, ++ 116,95,100,97,116,97,114,41,0,0,0,114,154,0,0,0, ++ 114,204,0,0,0,41,5,114,72,0,0,0,114,159,0,0, ++ 0,114,36,0,0,0,114,202,0,0,0,218,3,101,120,99, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 17,1,0,0,236,5,0,0,115,14,0,0,0,0,2,15, ++ 1,3,1,19,1,18,1,9,1,31,1,122,23,83,111,117, ++ 114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, ++ 117,114,99,101,218,9,95,111,112,116,105,109,105,122,101,114, ++ 30,0,0,0,99,3,0,0,0,1,0,0,0,4,0,0, ++ 0,9,0,0,0,67,0,0,0,115,31,0,0,0,116,0, ++ 0,116,1,0,124,1,0,124,2,0,100,1,0,100,2,0, ++ 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, ++ 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, ++ 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, ++ 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, ++ 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, ++ 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, ++ 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, ++ 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, ++ 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, ++ 32,32,32,114,176,0,0,0,218,12,100,111,110,116,95,105, ++ 110,104,101,114,105,116,84,114,119,0,0,0,41,2,114,115, ++ 0,0,0,218,7,99,111,109,112,105,108,101,41,4,114,72, ++ 0,0,0,114,54,0,0,0,114,36,0,0,0,114,42,1, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,14,115,111,117,114,99,101,95,116,111,95,99,111,100, ++ 101,246,5,0,0,115,4,0,0,0,0,5,18,1,122,27, ++ 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, ++ 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, ++ 0,0,0,0,10,0,0,0,43,0,0,0,67,0,0,0, ++ 115,177,1,0,0,124,0,0,106,0,0,124,1,0,131,1, ++ 0,125,2,0,100,1,0,125,3,0,121,16,0,116,1,0, ++ 124,2,0,131,1,0,125,4,0,87,110,24,0,4,116,2, ++ 0,107,10,0,114,63,0,1,1,1,100,1,0,125,4,0, ++ 89,110,202,0,88,121,19,0,124,0,0,106,3,0,124,2, ++ 0,131,1,0,125,5,0,87,110,18,0,4,116,4,0,107, ++ 10,0,114,103,0,1,1,1,89,110,162,0,88,116,5,0, ++ 124,5,0,100,2,0,25,131,1,0,125,3,0,121,19,0, ++ 124,0,0,106,6,0,124,4,0,131,1,0,125,6,0,87, ++ 110,18,0,4,116,7,0,107,10,0,114,159,0,1,1,1, ++ 89,110,106,0,88,121,34,0,116,8,0,124,6,0,100,3, ++ 0,124,5,0,100,4,0,124,1,0,100,5,0,124,4,0, ++ 131,1,3,125,7,0,87,110,24,0,4,116,9,0,116,10, ++ 0,102,2,0,107,10,0,114,220,0,1,1,1,89,110,45, ++ 0,88,116,11,0,100,6,0,124,4,0,124,2,0,131,3, ++ 0,1,116,12,0,124,7,0,100,4,0,124,1,0,100,7, ++ 0,124,4,0,100,8,0,124,2,0,131,1,3,83,124,0, ++ 0,106,6,0,124,2,0,131,1,0,125,8,0,124,0,0, ++ 106,13,0,124,8,0,124,2,0,131,2,0,125,9,0,116, ++ 11,0,100,9,0,124,2,0,131,2,0,1,116,14,0,106, ++ 15,0,12,114,173,1,124,4,0,100,1,0,107,9,0,114, ++ 173,1,124,3,0,100,1,0,107,9,0,114,173,1,116,16, ++ 0,124,9,0,124,3,0,116,17,0,124,8,0,131,1,0, ++ 131,3,0,125,6,0,121,36,0,124,0,0,106,18,0,124, ++ 2,0,124,4,0,124,6,0,131,3,0,1,116,11,0,100, ++ 10,0,124,4,0,131,2,0,1,87,113,173,1,4,116,2, ++ 0,107,10,0,114,169,1,1,1,1,89,113,173,1,88,110, ++ 0,0,124,9,0,83,41,11,122,190,67,111,110,99,114,101, ++ 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, ++ 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, ++ 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, ++ 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, ++ 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, ++ 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, ++ 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, ++ 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, ++ 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, ++ 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, ++ 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, ++ 32,32,32,32,32,32,32,32,78,114,184,0,0,0,114,188, ++ 0,0,0,114,68,0,0,0,114,36,0,0,0,122,13,123, ++ 125,32,109,97,116,99,104,101,115,32,123,125,114,141,0,0, ++ 0,114,142,0,0,0,122,19,99,111,100,101,32,111,98,106, ++ 101,99,116,32,102,114,111,109,32,123,125,122,10,119,114,111, ++ 116,101,32,123,33,114,125,41,19,114,239,0,0,0,114,133, ++ 0,0,0,114,125,0,0,0,114,37,1,0,0,114,35,1, ++ 0,0,114,15,0,0,0,114,40,1,0,0,114,41,0,0, ++ 0,114,191,0,0,0,114,154,0,0,0,114,187,0,0,0, ++ 114,153,0,0,0,114,196,0,0,0,114,45,1,0,0,114, ++ 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, ++ 95,98,121,116,101,99,111,100,101,114,199,0,0,0,114,32, ++ 0,0,0,114,39,1,0,0,41,10,114,72,0,0,0,114, ++ 159,0,0,0,114,142,0,0,0,114,189,0,0,0,114,141, ++ 0,0,0,218,2,115,116,114,54,0,0,0,218,10,98,121, ++ 116,101,115,95,100,97,116,97,114,202,0,0,0,90,11,99, ++ 111,100,101,95,111,98,106,101,99,116,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,16,1,0,0,254,5, ++ 0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,16, ++ 1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,3, ++ 1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,19, ++ 1,5,2,9,1,7,1,15,1,6,1,7,1,15,1,18, ++ 1,13,1,22,1,12,1,9,1,15,1,3,1,19,1,17, ++ 1,13,1,8,1,122,21,83,111,117,114,99,101,76,111,97, ++ 100,101,114,46,103,101,116,95,99,111,100,101,78,114,139,0, ++ 0,0,41,10,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,36,1,0,0,114,37,1,0,0,114,39,1, ++ 0,0,114,38,1,0,0,114,17,1,0,0,114,45,1,0, ++ 0,114,16,1,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,34,1,0,0,196, ++ 5,0,0,115,14,0,0,0,12,2,12,8,12,13,12,10, ++ 12,7,12,10,18,8,114,34,1,0,0,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, ++ 115,112,0,0,0,101,0,0,90,1,0,100,0,0,90,2, ++ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, ++ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, ++ 6,0,100,7,0,132,0,0,90,6,0,101,7,0,135,0, ++ 0,102,1,0,100,8,0,100,9,0,134,0,0,131,1,0, ++ 90,8,0,101,7,0,100,10,0,100,11,0,132,0,0,131, ++ 1,0,90,9,0,100,12,0,100,13,0,132,0,0,90,10, ++ 0,135,0,0,83,41,14,218,10,70,105,108,101,76,111,97, ++ 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, ++ 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, ++ 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, ++ 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, ++ 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, ++ 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, ++ 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, ++ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, ++ 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,124, ++ 2,0,124,0,0,95,1,0,100,1,0,83,41,2,122,75, ++ 67,97,99,104,101,32,116,104,101,32,109,111,100,117,108,101, ++ 32,110,97,109,101,32,97,110,100,32,116,104,101,32,112,97, ++ 116,104,32,116,111,32,116,104,101,32,102,105,108,101,32,102, ++ 111,117,110,100,32,98,121,32,116,104,101,10,32,32,32,32, ++ 32,32,32,32,102,105,110,100,101,114,46,78,41,2,114,68, ++ 0,0,0,114,36,0,0,0,41,3,114,72,0,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,55,6,0, ++ 0,115,4,0,0,0,0,3,9,1,122,19,70,105,108,101, ++ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,34,0,0,0,124,0,0,106,0,0,124, ++ 1,0,106,0,0,107,2,0,111,33,0,124,0,0,106,1, ++ 0,124,1,0,106,1,0,107,2,0,83,41,1,78,41,2, ++ 114,225,0,0,0,114,64,0,0,0,41,2,114,72,0,0, ++ 0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,230,0,0,0,61,6,0,0,115,4, ++ 0,0,0,0,1,18,1,122,17,70,105,108,101,76,111,97, ++ 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 26,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, ++ 116,0,0,124,0,0,106,2,0,131,1,0,65,83,41,1, ++ 78,41,3,218,4,104,97,115,104,114,68,0,0,0,114,36, ++ 0,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,8,95,95,104,97,115, ++ 104,95,95,65,6,0,0,115,2,0,0,0,0,1,122,19, ++ 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, ++ 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 3,0,0,0,3,0,0,0,115,22,0,0,0,116,0,0, ++ 116,1,0,124,0,0,131,2,0,106,2,0,124,1,0,131, ++ 1,0,83,41,1,122,100,76,111,97,100,32,97,32,109,111, ++ 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, ++ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, ++ 46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,115, ++ 117,112,101,114,114,49,1,0,0,114,5,1,0,0,41,2, ++ 114,72,0,0,0,114,159,0,0,0,41,1,114,225,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,5,1,0,0, ++ 68,6,0,0,115,2,0,0,0,0,10,122,22,70,105,108, ++ 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, ++ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, ++ 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, ++ 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, ++ 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, ++ 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, ++ 114,46,41,1,114,36,0,0,0,41,2,114,72,0,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,239,0,0,0,80,6,0,0,115,2,0, ++ 0,0,0,3,122,23,70,105,108,101,76,111,97,100,101,114, ++ 46,103,101,116,95,102,105,108,101,110,97,109,101,99,2,0, ++ 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, ++ 0,0,115,41,0,0,0,116,0,0,106,1,0,124,1,0, ++ 100,1,0,131,2,0,143,17,0,125,2,0,124,2,0,106, ++ 2,0,131,0,0,83,87,100,2,0,81,88,100,2,0,83, ++ 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, ++ 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, ++ 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, ++ 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, ++ 100,41,3,114,72,0,0,0,114,36,0,0,0,114,55,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,40,1,0,0,85,6,0,0,115,4,0,0,0,0, ++ 2,21,1,122,19,70,105,108,101,76,111,97,100,101,114,46, ++ 103,101,116,95,100,97,116,97,41,11,114,58,0,0,0,114, ++ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,73, ++ 0,0,0,114,230,0,0,0,114,51,1,0,0,114,157,0, ++ 0,0,114,5,1,0,0,114,239,0,0,0,114,40,1,0, ++ 0,114,5,0,0,0,114,5,0,0,0,41,1,114,225,0, ++ 0,0,114,6,0,0,0,114,49,1,0,0,50,6,0,0, ++ 115,14,0,0,0,12,3,6,2,12,6,12,4,12,3,24, ++ 12,18,5,114,49,1,0,0,99,0,0,0,0,0,0,0, ++ 0,0,0,0,0,4,0,0,0,64,0,0,0,115,64,0, ++ 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, ++ 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, ++ 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100, ++ 7,0,100,8,0,100,9,0,132,0,1,90,6,0,100,10, ++ 0,83,41,11,114,9,1,0,0,122,62,67,111,110,99,114, ++ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, ++ 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, ++ 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, ++ 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, ++ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,36, ++ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,105, ++ 2,0,124,2,0,106,1,0,100,1,0,54,124,2,0,106, ++ 2,0,100,2,0,54,83,41,3,122,33,82,101,116,117,114, ++ 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, ++ 111,114,32,116,104,101,32,112,97,116,104,46,114,184,0,0, ++ 0,114,185,0,0,0,41,3,114,40,0,0,0,218,8,115, ++ 116,95,109,116,105,109,101,90,7,115,116,95,115,105,122,101, ++ 41,3,114,72,0,0,0,114,36,0,0,0,114,47,1,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,37,1,0,0,95,6,0,0,115,4,0,0,0,0,2, ++ 12,1,122,27,83,111,117,114,99,101,70,105,108,101,76,111, ++ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, ++ 4,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, ++ 67,0,0,0,115,34,0,0,0,116,0,0,124,1,0,131, ++ 1,0,125,4,0,124,0,0,106,1,0,124,2,0,124,3, ++ 0,100,1,0,124,4,0,131,2,1,83,41,2,78,218,5, ++ 95,109,111,100,101,41,2,114,145,0,0,0,114,38,1,0, ++ 0,41,5,114,72,0,0,0,114,142,0,0,0,114,141,0, ++ 0,0,114,54,0,0,0,114,43,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,39,1,0,0, ++ 100,6,0,0,115,4,0,0,0,0,2,12,1,122,32,83, ++ 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, ++ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,114, ++ 55,1,0,0,105,182,1,0,0,99,3,0,0,0,1,0, ++ 0,0,9,0,0,0,17,0,0,0,67,0,0,0,115,53, ++ 1,0,0,116,0,0,124,1,0,131,1,0,92,2,0,125, ++ 4,0,125,5,0,103,0,0,125,6,0,120,54,0,124,4, ++ 0,114,80,0,116,1,0,124,4,0,131,1,0,12,114,80, ++ 0,116,0,0,124,4,0,131,1,0,92,2,0,125,4,0, ++ 125,7,0,124,6,0,106,2,0,124,7,0,131,1,0,1, ++ 113,27,0,87,120,132,0,116,3,0,124,6,0,131,1,0, ++ 68,93,118,0,125,7,0,116,4,0,124,4,0,124,7,0, ++ 131,2,0,125,4,0,121,17,0,116,5,0,106,6,0,124, ++ 4,0,131,1,0,1,87,113,94,0,4,116,7,0,107,10, ++ 0,114,155,0,1,1,1,119,94,0,89,113,94,0,4,116, ++ 8,0,107,10,0,114,211,0,1,125,8,0,1,122,25,0, ++ 116,9,0,100,1,0,124,4,0,124,8,0,131,3,0,1, ++ 100,2,0,83,87,89,100,2,0,100,2,0,125,8,0,126, ++ 8,0,88,113,94,0,88,113,94,0,87,121,33,0,116,10, ++ 0,124,1,0,124,2,0,124,3,0,131,3,0,1,116,9, ++ 0,100,3,0,124,1,0,131,2,0,1,87,110,53,0,4, ++ 116,8,0,107,10,0,114,48,1,1,125,8,0,1,122,21, ++ 0,116,9,0,100,1,0,124,1,0,124,8,0,131,3,0, ++ 1,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, ++ 110,1,0,88,100,2,0,83,41,4,122,27,87,114,105,116, ++ 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, ++ 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, ++ 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, ++ 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, ++ 33,114,125,41,11,114,39,0,0,0,114,47,0,0,0,114, ++ 224,0,0,0,114,34,0,0,0,114,29,0,0,0,114,4, ++ 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, ++ 69,120,105,115,116,115,69,114,114,111,114,114,41,0,0,0, ++ 114,153,0,0,0,114,56,0,0,0,41,9,114,72,0,0, ++ 0,114,36,0,0,0,114,54,0,0,0,114,55,1,0,0, ++ 114,234,0,0,0,114,132,0,0,0,114,28,0,0,0,114, ++ 24,0,0,0,114,41,1,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,38,1,0,0,105,6,0, ++ 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, ++ 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, ++ 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, ++ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, ++ 101,116,95,100,97,116,97,78,41,7,114,58,0,0,0,114, ++ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,37, ++ 1,0,0,114,39,1,0,0,114,38,1,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,9,1,0,0,91,6,0,0,115,8,0,0,0,12, ++ 2,6,2,12,5,12,5,114,9,1,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, ++ 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, ++ 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, ++ 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, ++ 100,6,0,83,41,7,114,8,1,0,0,122,45,76,111,97, ++ 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, ++ 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, ++ 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, ++ 0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,115, ++ 76,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, ++ 125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,125, ++ 3,0,116,2,0,124,3,0,100,1,0,124,1,0,100,2, ++ 0,124,2,0,131,1,2,125,4,0,116,3,0,124,4,0, ++ 100,1,0,124,1,0,100,3,0,124,2,0,131,1,2,83, ++ 41,4,78,114,68,0,0,0,114,36,0,0,0,114,141,0, ++ 0,0,41,4,114,239,0,0,0,114,40,1,0,0,114,191, ++ 0,0,0,114,196,0,0,0,41,5,114,72,0,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,54,0,0,0,114,48, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,16,1,0,0,138,6,0,0,115,8,0,0,0, ++ 0,1,15,1,15,1,24,1,122,29,83,111,117,114,99,101, ++ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,103, ++ 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, ++ 0,100,1,0,83,41,2,122,39,82,101,116,117,114,110,32, ++ 78,111,110,101,32,97,115,32,116,104,101,114,101,32,105,115, ++ 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 78,114,5,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,17,1,0,0,144,6,0,0,115,2,0,0,0,0, ++ 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, ++ 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, ++ 99,101,78,41,6,114,58,0,0,0,114,57,0,0,0,114, ++ 59,0,0,0,114,60,0,0,0,114,16,1,0,0,114,17, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,8,1,0,0,134,6,0,0, ++ 115,6,0,0,0,12,2,6,2,12,6,114,8,1,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, ++ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, ++ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, ++ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, ++ 101,7,0,100,8,0,100,9,0,132,0,0,131,1,0,90, ++ 8,0,100,10,0,100,11,0,132,0,0,90,9,0,100,12, ++ 0,100,13,0,132,0,0,90,10,0,100,14,0,100,15,0, ++ 132,0,0,90,11,0,101,7,0,100,16,0,100,17,0,132, ++ 0,0,131,1,0,90,12,0,100,18,0,83,41,19,218,19, ++ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, ++ 100,101,114,122,93,76,111,97,100,101,114,32,102,111,114,32, ++ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, ++ 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, ++ 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, ++ 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, ++ 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, ++ 32,32,99,3,0,0,0,0,0,0,0,3,0,0,0,2, ++ 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,0, ++ 0,83,41,1,78,41,2,114,68,0,0,0,114,36,0,0, ++ 0,41,3,114,72,0,0,0,114,68,0,0,0,114,36,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,73,0,0,0,161,6,0,0,115,4,0,0,0,0, ++ 1,9,1,122,28,69,120,116,101,110,115,105,111,110,70,105, ++ 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, ++ 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, ++ 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, ++ 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, ++ 41,2,114,225,0,0,0,114,64,0,0,0,41,2,114,72, ++ 0,0,0,114,228,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,230,0,0,0,165,6,0,0, ++ 115,4,0,0,0,0,1,18,1,122,26,69,120,116,101,110, ++ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, ++ 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, ++ 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, ++ 0,106,2,0,131,1,0,65,83,41,1,78,41,3,114,50, ++ 1,0,0,114,68,0,0,0,114,36,0,0,0,41,1,114, ++ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,51,1,0,0,169,6,0,0,115,2,0,0, ++ 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, ++ 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, ++ 95,99,2,0,0,0,0,0,0,0,4,0,0,0,11,0, ++ 0,0,67,0,0,0,115,183,0,0,0,116,0,0,124,1, ++ 0,131,1,0,143,29,0,1,116,1,0,116,2,0,106,3, ++ 0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,0, ++ 87,100,1,0,81,88,116,5,0,100,2,0,124,0,0,106, ++ 4,0,131,2,0,1,124,0,0,106,6,0,124,1,0,131, ++ 1,0,125,3,0,124,3,0,114,124,0,116,7,0,124,2, ++ 0,100,3,0,131,2,0,12,114,124,0,116,8,0,124,0, ++ 0,106,4,0,131,1,0,100,4,0,25,103,1,0,124,2, ++ 0,95,9,0,110,0,0,124,0,0,124,2,0,95,10,0, ++ 124,2,0,106,11,0,124,2,0,95,12,0,124,3,0,115, ++ 179,0,124,2,0,106,12,0,106,13,0,100,5,0,131,1, ++ 0,100,4,0,25,124,2,0,95,12,0,110,0,0,124,2, ++ 0,83,41,6,122,25,76,111,97,100,32,97,110,32,101,120, ++ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,46,78, ++ 122,33,101,120,116,101,110,115,105,111,110,32,109,111,100,117, ++ 108,101,32,108,111,97,100,101,100,32,102,114,111,109,32,123, ++ 33,114,125,114,247,0,0,0,114,85,0,0,0,114,117,0, ++ 0,0,41,14,114,70,0,0,0,114,115,0,0,0,114,107, ++ 0,0,0,90,12,108,111,97,100,95,100,121,110,97,109,105, ++ 99,114,36,0,0,0,114,153,0,0,0,114,220,0,0,0, ++ 114,61,0,0,0,114,39,0,0,0,114,247,0,0,0,114, ++ 205,0,0,0,114,58,0,0,0,114,251,0,0,0,114,33, ++ 0,0,0,41,4,114,72,0,0,0,114,159,0,0,0,114, ++ 180,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,5,1,0,0,172,6,0, ++ 0,115,24,0,0,0,0,5,13,1,9,1,21,1,16,1, ++ 15,1,22,1,28,1,9,1,12,1,6,1,28,1,122,31, ++ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, ++ 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, ++ 3,0,0,0,115,48,0,0,0,116,0,0,124,0,0,106, ++ 1,0,131,1,0,100,1,0,25,137,0,0,116,2,0,135, ++ 0,0,102,1,0,100,2,0,100,3,0,134,0,0,116,3, ++ 0,68,131,1,0,131,1,0,83,41,4,122,49,82,101,116, ++ 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, ++ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, ++ 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,30, ++ 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, ++ 4,0,0,0,51,0,0,0,115,31,0,0,0,124,0,0, ++ 93,21,0,125,1,0,136,0,0,100,0,0,124,1,0,23, ++ 107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,73, ++ 0,0,0,78,114,5,0,0,0,41,2,114,23,0,0,0, ++ 218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101, ++ 95,110,97,109,101,114,5,0,0,0,114,6,0,0,0,114, ++ 78,0,0,0,193,6,0,0,115,2,0,0,0,6,1,122, ++ 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, ++ 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, ++ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, ++ 114,62,41,4,114,39,0,0,0,114,36,0,0,0,114,79, ++ 0,0,0,218,18,69,88,84,69,78,83,73,79,78,95,83, ++ 85,70,70,73,88,69,83,41,2,114,72,0,0,0,114,159, ++ 0,0,0,114,5,0,0,0,41,1,114,59,1,0,0,114, ++ 6,0,0,0,114,220,0,0,0,190,6,0,0,115,6,0, ++ 0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115, ++ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, ++ 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, ++ 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, ++ 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, ++ 101,32,111,98,106,101,99,116,46,78,114,5,0,0,0,41, ++ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,16,1,0,0,196, ++ 6,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, ++ 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, ++ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105, ++ 111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32, ++ 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, ++ 114,5,0,0,0,41,2,114,72,0,0,0,114,159,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,17,1,0,0,200,6,0,0,115,2,0,0,0,0,2, ++ 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, ++ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, ++ 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, ++ 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, ++ 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, ++ 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, ++ 1,114,36,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,239,0,0,0,204,6,0,0,115,2,0,0,0,0, ++ 3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, ++ 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, ++ 97,109,101,78,41,13,114,58,0,0,0,114,57,0,0,0, ++ 114,59,0,0,0,114,60,0,0,0,114,73,0,0,0,114, ++ 230,0,0,0,114,51,1,0,0,114,157,0,0,0,114,5, ++ 1,0,0,114,220,0,0,0,114,16,1,0,0,114,17,1, ++ 0,0,114,239,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,57,1,0,0, ++ 153,6,0,0,115,18,0,0,0,12,6,6,2,12,4,12, ++ 4,12,3,18,18,12,6,12,4,12,4,114,57,1,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, ++ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, ++ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, ++ 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100, ++ 11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0, ++ 0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0, ++ 100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100, ++ 19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14, ++ 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, ++ 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, ++ 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, ++ 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, ++ 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, ++ 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, ++ 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, ++ 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, ++ 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, ++ 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, ++ 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, ++ 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, ++ 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, ++ 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, ++ 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, ++ 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, ++ 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, ++ 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, ++ 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, ++ 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, ++ 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52, ++ 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, ++ 0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0, ++ 0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0, ++ 95,5,0,100,0,0,83,41,1,78,41,6,114,71,0,0, ++ 0,114,254,0,0,0,114,232,0,0,0,218,16,95,103,101, ++ 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, ++ 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, ++ 218,12,95,112,97,116,104,95,102,105,110,100,101,114,41,4, ++ 114,72,0,0,0,114,68,0,0,0,114,36,0,0,0,218, ++ 11,112,97,116,104,95,102,105,110,100,101,114,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,73,0,0,0, ++ 217,6,0,0,115,8,0,0,0,0,1,9,1,9,1,21, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, ++ 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, ++ 53,0,0,0,124,0,0,106,0,0,106,1,0,100,1,0, ++ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, ++ 2,0,100,2,0,107,2,0,114,43,0,100,6,0,83,124, ++ 1,0,100,5,0,102,2,0,83,41,7,122,62,82,101,116, ++ 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, ++ 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, ++ 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, ++ 45,97,116,116,114,45,110,97,109,101,41,114,117,0,0,0, ++ 114,31,0,0,0,114,8,0,0,0,114,36,0,0,0,114, ++ 247,0,0,0,41,2,122,3,115,121,115,122,4,112,97,116, ++ 104,41,2,114,71,0,0,0,114,33,0,0,0,41,4,114, ++ 72,0,0,0,114,234,0,0,0,218,3,100,111,116,114,95, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,23,95,102,105,110,100,95,112,97,114,101,110,116, ++ 95,112,97,116,104,95,110,97,109,101,115,223,6,0,0,115, ++ 8,0,0,0,0,2,27,1,12,2,4,3,122,38,95,78, ++ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, ++ 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, ++ 97,109,101,115,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, ++ 0,106,0,0,131,0,0,92,2,0,125,1,0,125,2,0, ++ 116,1,0,116,2,0,106,3,0,124,1,0,25,124,2,0, ++ 131,2,0,83,41,1,78,41,4,114,67,1,0,0,114,63, ++ 0,0,0,114,8,0,0,0,114,74,0,0,0,41,3,114, ++ 72,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, ++ 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, ++ 116,116,114,95,110,97,109,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,62,1,0,0,233,6,0,0, ++ 115,4,0,0,0,0,1,18,1,122,31,95,78,97,109,101, ++ 115,112,97,99,101,80,97,116,104,46,95,103,101,116,95,112, ++ 97,114,101,110,116,95,112,97,116,104,99,1,0,0,0,0, ++ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, ++ 127,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, ++ 131,1,0,125,1,0,124,1,0,124,0,0,106,2,0,107, ++ 3,0,114,120,0,124,0,0,106,3,0,124,0,0,106,4, ++ 0,124,1,0,131,2,0,125,2,0,124,2,0,100,0,0, ++ 107,9,0,114,108,0,124,2,0,106,5,0,100,0,0,107, ++ 8,0,114,108,0,124,2,0,106,6,0,114,108,0,124,2, ++ 0,106,6,0,124,0,0,95,7,0,113,108,0,110,0,0, ++ 124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106, ++ 7,0,83,41,1,78,41,8,114,232,0,0,0,114,62,1, ++ 0,0,114,63,1,0,0,114,64,1,0,0,114,71,0,0, ++ 0,114,170,0,0,0,114,221,0,0,0,114,254,0,0,0, ++ 41,3,114,72,0,0,0,90,11,112,97,114,101,110,116,95, ++ 112,97,116,104,114,178,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, ++ 99,117,108,97,116,101,237,6,0,0,115,16,0,0,0,0, ++ 2,18,1,15,1,21,3,27,1,9,1,18,1,12,1,122, ++ 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, ++ 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, ++ 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, ++ 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, ++ 114,114,68,1,0,0,41,1,114,72,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, ++ 105,116,101,114,95,95,250,6,0,0,115,2,0,0,0,0, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, ++ 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, ++ 131,1,0,83,41,1,78,41,2,114,32,0,0,0,114,68, ++ 1,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, ++ 95,95,253,6,0,0,115,2,0,0,0,0,1,122,22,95, ++ 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, ++ 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, ++ 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, ++ 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, ++ 116,104,40,123,33,114,125,41,41,2,114,48,0,0,0,114, ++ 254,0,0,0,41,1,114,72,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,102,0,0,0,0, ++ 7,0,0,115,2,0,0,0,0,1,122,23,95,78,97,109, ++ 101,115,112,97,99,101,80,97,116,104,46,95,95,114,101,112, ++ 114,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,0, ++ 124,0,0,106,0,0,131,0,0,107,6,0,83,41,1,78, ++ 41,1,114,68,1,0,0,41,2,114,72,0,0,0,218,4, ++ 105,116,101,109,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, ++ 95,3,7,0,0,115,2,0,0,0,0,1,122,27,95,78, ++ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, ++ 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,20, ++ 0,0,0,124,0,0,106,0,0,106,1,0,124,1,0,131, ++ 1,0,1,100,0,0,83,41,1,78,41,2,114,254,0,0, ++ 0,114,224,0,0,0,41,2,114,72,0,0,0,114,72,1, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,224,0,0,0,6,7,0,0,115,2,0,0,0,0, ++ 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,97,112,112,101,110,100,78,41,13,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, ++ 73,0,0,0,114,67,1,0,0,114,62,1,0,0,114,68, ++ 1,0,0,114,70,1,0,0,114,71,1,0,0,114,102,0, ++ 0,0,114,73,1,0,0,114,224,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,61,1,0,0,210,6,0,0,115,20,0,0,0,12,5, ++ 6,2,12,6,12,10,12,4,12,13,12,3,12,3,12,3, ++ 12,3,114,61,1,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,3,0,0,0,64,0,0,0,115,106,0,0, + 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, +- 90,3,0,101,4,0,100,2,0,100,3,0,132,0,0,131, +- 1,0,90,5,0,101,6,0,100,4,0,100,4,0,100,5, +- 0,100,6,0,132,2,0,131,1,0,90,7,0,101,6,0, +- 100,4,0,100,7,0,100,8,0,132,1,0,131,1,0,90, +- 8,0,101,4,0,100,9,0,100,10,0,132,0,0,131,1, +- 0,90,9,0,101,6,0,100,11,0,100,12,0,132,0,0, +- 131,1,0,90,10,0,101,6,0,101,11,0,100,13,0,100, +- 14,0,132,0,0,131,1,0,131,1,0,90,12,0,101,6, +- 0,101,11,0,100,15,0,100,16,0,132,0,0,131,1,0, +- 131,1,0,90,13,0,101,6,0,101,11,0,100,17,0,100, +- 18,0,132,0,0,131,1,0,131,1,0,90,14,0,100,4, +- 0,83,41,19,218,14,70,114,111,122,101,110,73,109,112,111, +- 114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,32, +- 105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,101, +- 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, +- 65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,32, +- 101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,32, +- 115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,116, +- 111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,100, +- 32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,105, +- 97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,10, +- 32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,0, ++ 100,2,0,132,0,0,90,3,0,101,4,0,100,3,0,100, ++ 4,0,132,0,0,131,1,0,90,5,0,100,5,0,100,6, ++ 0,132,0,0,90,6,0,100,7,0,100,8,0,132,0,0, ++ 90,7,0,100,9,0,100,10,0,132,0,0,90,8,0,100, ++ 11,0,100,12,0,132,0,0,90,9,0,100,13,0,100,14, ++ 0,132,0,0,90,10,0,100,15,0,83,41,16,114,252,0, ++ 0,0,99,4,0,0,0,0,0,0,0,4,0,0,0,4, ++ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, ++ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, ++ 0,100,0,0,83,41,1,78,41,2,114,61,1,0,0,114, ++ 254,0,0,0,41,4,114,72,0,0,0,114,68,0,0,0, ++ 114,36,0,0,0,114,65,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,73,0,0,0,12,7, ++ 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, ++ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, ++ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, +- 0,106,0,0,124,0,0,106,1,0,131,1,0,83,41,2, ++ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, + 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, + 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, +@@ -2205,2171 +3230,1147 @@ + 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, + 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, + 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, +- 32,32,32,32,32,122,22,60,109,111,100,117,108,101,32,123, +- 33,114,125,32,40,102,114,111,122,101,110,41,62,41,2,114, +- 47,0,0,0,114,57,0,0,0,41,1,218,1,109,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,205,0, +- 0,0,47,5,0,0,115,2,0,0,0,0,7,122,26,70, +- 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111, +- 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0, +- 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, +- 42,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, +- 114,34,0,116,2,0,124,1,0,124,0,0,100,1,0,100, +- 2,0,131,2,1,83,100,0,0,83,100,0,0,83,41,3, +- 78,114,217,0,0,0,90,6,102,114,111,122,101,110,41,3, +- 114,106,0,0,0,114,162,0,0,0,114,173,0,0,0,41, +- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,12,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,13,1,0,0,56,5,0,0,115,6,0, +- 0,0,0,2,15,1,19,2,122,24,70,114,111,122,101,110, +- 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, +- 101,99,99,3,0,0,0,0,0,0,0,3,0,0,0,2, +- 0,0,0,67,0,0,0,115,23,0,0,0,116,0,0,106, +- 1,0,124,1,0,131,1,0,114,19,0,124,0,0,83,100, +- 1,0,83,41,2,122,93,70,105,110,100,32,97,32,102,114, +- 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, +- 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, +- 32,32,32,32,78,41,2,114,106,0,0,0,114,162,0,0, +- 0,41,3,114,11,1,0,0,114,158,0,0,0,114,35,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,14,1,0,0,63,5,0,0,115,2,0,0,0,0, +- 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, +- 114,46,102,105,110,100,95,109,111,100,117,108,101,99,1,0, +- 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, +- 0,0,115,95,0,0,0,124,0,0,106,0,0,106,1,0, +- 125,1,0,116,2,0,106,3,0,124,1,0,131,1,0,115, +- 57,0,116,4,0,100,1,0,106,5,0,124,1,0,131,1, +- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, +- 116,6,0,116,2,0,106,7,0,124,1,0,131,2,0,125, +- 2,0,116,8,0,124,2,0,124,0,0,106,9,0,131,2, +- 0,1,100,0,0,83,41,3,78,122,27,123,33,114,125,32, +- 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, +- 109,111,100,117,108,101,114,67,0,0,0,41,10,114,208,0, +- 0,0,114,67,0,0,0,114,106,0,0,0,114,162,0,0, +- 0,114,153,0,0,0,114,47,0,0,0,114,114,0,0,0, +- 218,17,103,101,116,95,102,114,111,122,101,110,95,111,98,106, +- 101,99,116,114,175,0,0,0,114,63,0,0,0,41,3,114, +- 179,0,0,0,114,67,0,0,0,114,194,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, +- 0,0,72,5,0,0,115,12,0,0,0,0,2,12,1,15, +- 1,18,1,12,1,18,1,122,26,70,114,111,122,101,110,73, +- 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, +- 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,0, +- 124,0,0,124,1,0,131,2,0,83,41,1,122,95,76,111, +- 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, ++ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, ++ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, ++ 41,2,114,48,0,0,0,114,58,0,0,0,41,2,114,12, ++ 1,0,0,114,180,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,206,0,0,0,15,7,0,0, ++ 115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, ++ 95,114,101,112,114,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, ++ 1,0,83,41,2,78,84,114,5,0,0,0,41,2,114,72, ++ 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,220,0,0,0,24,7,0,0, ++ 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, ++ 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, ++ 0,83,41,2,78,114,31,0,0,0,114,5,0,0,0,41, ++ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,17,1,0,0,27, ++ 7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, ++ 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, ++ 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,6,0,0,0,67,0,0,0,115,22,0,0, ++ 0,116,0,0,100,1,0,100,2,0,100,3,0,100,4,0, ++ 100,5,0,131,3,1,83,41,6,78,114,31,0,0,0,122, ++ 8,60,115,116,114,105,110,103,62,114,176,0,0,0,114,43, ++ 1,0,0,84,41,1,114,44,1,0,0,41,2,114,72,0, ++ 0,0,114,159,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,16,1,0,0,30,7,0,0,115, ++ 2,0,0,0,0,1,122,25,95,78,97,109,101,115,112,97, ++ 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, ++ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, ++ 0,0,67,0,0,0,115,4,0,0,0,100,0,0,83,41, ++ 1,78,114,5,0,0,0,41,2,114,72,0,0,0,114,180, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,2,1,0,0,33,7,0,0,115,2,0,0,0, ++ 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, ++ 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,67,0,0,0,115,29,0,0,0,116,0,0,100,1,0, ++ 124,0,0,106,1,0,131,2,0,1,116,2,0,124,0,0, ++ 124,1,0,131,2,0,83,41,2,122,98,76,111,97,100,32, ++ 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, +- 180,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 4,1,0,0,81,5,0,0,115,2,0,0,0,0,7,122, +- 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, +- 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, +- 115,13,0,0,0,116,0,0,106,1,0,124,1,0,131,1, +- 0,83,41,1,122,45,82,101,116,117,114,110,32,116,104,101, +- 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, +- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, +- 108,101,46,41,2,114,106,0,0,0,114,21,1,0,0,41, +- 2,114,11,1,0,0,114,158,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,15,1,0,0,90, +- 5,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122, +- 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, +- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108, +- 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, +- 0,41,2,114,11,1,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, +- 0,96,5,0,0,115,2,0,0,0,0,4,122,25,70,114, +- 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, +- 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, +- 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, +- 0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1, +- 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, +- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, +- 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, +- 41,2,114,106,0,0,0,90,17,105,115,95,102,114,111,122, +- 101,110,95,112,97,99,107,97,103,101,41,2,114,11,1,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,219,0,0,0,102,5,0,0,115,2, +- 0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112, +- 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, +- 41,15,114,57,0,0,0,114,56,0,0,0,114,58,0,0, +- 0,114,59,0,0,0,114,17,1,0,0,114,205,0,0,0, +- 114,18,1,0,0,114,13,1,0,0,114,14,1,0,0,114, +- 1,1,0,0,114,4,1,0,0,114,164,0,0,0,114,15, +- 1,0,0,114,16,1,0,0,114,219,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,19,1,0,0,38,5,0,0,115,28,0,0,0,12, +- 7,6,2,18,9,3,1,21,6,3,1,18,8,18,9,18, +- 9,3,1,21,5,3,1,21,5,3,1,114,19,1,0,0, ++ 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, ++ 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, ++ 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, ++ 32,123,33,114,125,41,3,114,153,0,0,0,114,254,0,0, ++ 0,114,181,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,5,1,0,0,36,7,0,0,115,4,0,0,0,0, ++ 7,16,1,122,28,95,78,97,109,101,115,112,97,99,101,76, ++ 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, ++ 101,78,41,11,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,73,0,0,0,114,19,1,0,0,114,206,0, ++ 0,0,114,220,0,0,0,114,17,1,0,0,114,16,1,0, ++ 0,114,2,1,0,0,114,5,1,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 252,0,0,0,11,7,0,0,115,14,0,0,0,12,1,12, ++ 3,18,9,12,3,12,3,12,3,12,3,114,252,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, +- 0,64,0,0,0,115,121,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,90, +- 4,0,100,3,0,90,5,0,100,4,0,90,6,0,101,7, +- 0,100,5,0,100,6,0,132,0,0,131,1,0,90,8,0, +- 101,7,0,100,7,0,100,8,0,132,0,0,131,1,0,90, +- 9,0,101,7,0,100,9,0,100,9,0,100,10,0,100,11, +- 0,132,2,0,131,1,0,90,10,0,101,7,0,100,9,0, +- 100,12,0,100,13,0,132,1,0,131,1,0,90,11,0,100, +- 9,0,83,41,14,218,21,87,105,110,100,111,119,115,82,101, +- 103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101, +- 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, +- 111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97, +- 114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111, +- 119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111, +- 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, +- 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, +- 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, +- 102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119, +- 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, +- 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, +- 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, +- 108,110,97,109,101,125,92,68,101,98,117,103,70,99,2,0, +- 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, +- 0,0,115,67,0,0,0,121,23,0,116,0,0,106,1,0, +- 116,0,0,106,2,0,124,1,0,131,2,0,83,87,110,37, +- 0,4,116,3,0,107,10,0,114,62,0,1,1,1,116,0, +- 0,106,1,0,116,0,0,106,4,0,124,1,0,131,2,0, +- 83,89,110,1,0,88,100,0,0,83,41,1,78,41,5,218, +- 7,95,119,105,110,114,101,103,90,7,79,112,101,110,75,101, +- 121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95, +- 85,83,69,82,114,40,0,0,0,90,18,72,75,69,89,95, +- 76,79,67,65,76,95,77,65,67,72,73,78,69,41,2,114, +- 11,1,0,0,218,3,107,101,121,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,14,95,111,112,101,110,95, +- 114,101,103,105,115,116,114,121,121,5,0,0,115,8,0,0, +- 0,0,2,3,1,23,1,13,1,122,36,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, +- 2,0,0,0,0,0,0,0,6,0,0,0,16,0,0,0, +- 67,0,0,0,115,142,0,0,0,124,0,0,106,0,0,114, +- 21,0,124,0,0,106,1,0,125,2,0,110,9,0,124,0, +- 0,106,2,0,125,2,0,124,2,0,106,3,0,100,1,0, +- 124,1,0,100,2,0,116,4,0,106,5,0,100,0,0,100, +- 3,0,133,2,0,25,131,0,2,125,3,0,121,46,0,124, +- 0,0,106,6,0,124,3,0,131,1,0,143,25,0,125,4, +- 0,116,7,0,106,8,0,124,4,0,100,4,0,131,2,0, +- 125,5,0,87,100,0,0,81,88,87,110,22,0,4,116,9, +- 0,107,10,0,114,137,0,1,1,1,100,0,0,83,89,110, +- 1,0,88,124,5,0,83,41,5,78,114,158,0,0,0,90, +- 11,115,121,115,95,118,101,114,115,105,111,110,114,136,0,0, +- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, +- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, +- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, +- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, +- 0,218,7,118,101,114,115,105,111,110,114,25,1,0,0,114, +- 23,1,0,0,90,10,81,117,101,114,121,86,97,108,117,101, +- 114,40,0,0,0,41,6,114,11,1,0,0,114,158,0,0, +- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, +- 24,1,0,0,90,4,104,107,101,121,218,8,102,105,108,101, +- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, +- 105,115,116,114,121,128,5,0,0,115,22,0,0,0,0,2, +- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,28,1, +- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, +- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, +- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, +- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, +- 0,0,115,155,0,0,0,124,0,0,106,0,0,124,1,0, +- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, +- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, +- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, +- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,78,0, +- 116,3,0,131,0,0,68,93,67,0,92,2,0,125,5,0, +- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, +- 1,0,131,1,0,114,80,0,116,6,0,124,1,0,124,5, +- 0,124,1,0,124,4,0,131,2,0,100,1,0,124,4,0, +- 131,2,1,125,7,0,124,7,0,83,113,80,0,87,100,0, +- 0,83,41,2,78,114,217,0,0,0,41,7,114,31,1,0, +- 0,114,39,0,0,0,114,40,0,0,0,114,240,0,0,0, +- 114,230,0,0,0,114,231,0,0,0,114,173,0,0,0,41, +- 8,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,12,1,0,0,114,30,1,0,0,114,169,0,0,0,114, +- 127,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,13,1,0,0,143,5,0, +- 0,115,24,0,0,0,0,2,15,1,12,1,4,1,3,1, +- 14,1,13,1,9,1,22,1,21,1,21,1,9,1,122,31, +- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, +- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, +- 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, +- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, +- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, +- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, +- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, +- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, +- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, +- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,78,41,2,114,13,1,0,0,114,169, +- 0,0,0,41,4,114,11,1,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,14,1,0,0,158,5,0, +- 0,115,8,0,0,0,0,7,18,1,12,1,7,2,122,33, +- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, +- 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, +- 101,41,12,114,57,0,0,0,114,56,0,0,0,114,58,0, +- 0,0,114,59,0,0,0,114,28,1,0,0,114,27,1,0, +- 0,114,26,1,0,0,114,18,1,0,0,114,25,1,0,0, +- 114,31,1,0,0,114,13,1,0,0,114,14,1,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,22,1,0,0,109,5,0,0,115,20,0,0, +- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, +- 1,21,14,3,1,114,22,1,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, +- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6, +- 0,90,7,0,100,6,0,83,41,7,218,13,95,76,111,97, +- 100,101,114,66,97,115,105,99,115,122,83,66,97,115,101,32, +- 99,108,97,115,115,32,111,102,32,99,111,109,109,111,110,32, +- 99,111,100,101,32,110,101,101,100,101,100,32,98,121,32,98, +- 111,116,104,32,83,111,117,114,99,101,76,111,97,100,101,114, +- 32,97,110,100,10,32,32,32,32,83,111,117,114,99,101,108, +- 101,115,115,70,105,108,101,76,111,97,100,101,114,46,99,2, +- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, +- 0,0,0,115,88,0,0,0,116,0,0,124,0,0,106,1, +- 0,124,1,0,131,1,0,131,1,0,100,1,0,25,125,2, +- 0,124,2,0,106,2,0,100,2,0,100,1,0,131,2,0, +- 100,3,0,25,125,3,0,124,1,0,106,3,0,100,2,0, +- 131,1,0,100,4,0,25,125,4,0,124,3,0,100,5,0, +- 107,2,0,111,87,0,124,4,0,100,5,0,107,3,0,83, +- 41,6,122,141,67,111,110,99,114,101,116,101,32,105,109,112, +- 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, +- 110,115,112,101,99,116,76,111,97,100,101,114,46,105,115,95, +- 112,97,99,107,97,103,101,32,98,121,32,99,104,101,99,107, +- 105,110,103,32,105,102,10,32,32,32,32,32,32,32,32,116, +- 104,101,32,112,97,116,104,32,114,101,116,117,114,110,101,100, +- 32,98,121,32,103,101,116,95,102,105,108,101,110,97,109,101, +- 32,104,97,115,32,97,32,102,105,108,101,110,97,109,101,32, +- 111,102,32,39,95,95,105,110,105,116,95,95,46,112,121,39, +- 46,114,29,0,0,0,114,116,0,0,0,114,84,0,0,0, +- 114,115,0,0,0,114,72,0,0,0,41,4,114,38,0,0, +- 0,114,238,0,0,0,114,34,0,0,0,114,32,0,0,0, +- 41,5,114,71,0,0,0,114,158,0,0,0,114,131,0,0, +- 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, +- 90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,177, +- 5,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1, +- 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, +- 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, +- 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, +- 80,0,0,0,124,0,0,106,0,0,124,1,0,106,1,0, +- 131,1,0,125,2,0,124,2,0,100,1,0,107,8,0,114, +- 57,0,116,2,0,100,2,0,106,3,0,124,1,0,106,1, +- 0,131,1,0,131,1,0,130,1,0,110,0,0,116,4,0, +- 116,5,0,124,2,0,124,1,0,106,6,0,131,3,0,1, +- 100,1,0,83,41,3,122,19,69,120,101,99,117,116,101,32, +- 116,104,101,32,109,111,100,117,108,101,46,78,122,52,99,97, +- 110,110,111,116,32,108,111,97,100,32,109,111,100,117,108,101, +- 32,123,33,114,125,32,119,104,101,110,32,103,101,116,95,99, +- 111,100,101,40,41,32,114,101,116,117,114,110,115,32,78,111, +- 110,101,41,7,114,15,1,0,0,114,57,0,0,0,114,153, +- 0,0,0,114,47,0,0,0,114,114,0,0,0,114,175,0, +- 0,0,114,63,0,0,0,41,3,114,71,0,0,0,114,179, +- 0,0,0,114,194,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,1,1,0,0,185,5,0,0, +- 115,10,0,0,0,0,2,18,1,12,1,3,1,24,1,122, +- 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,101, +- 120,101,99,95,109,111,100,117,108,101,78,41,8,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,114,219,0,0,0,114,1,1,0,0,114,180,0,0,0, +- 114,4,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,32,1,0,0,172,5, +- 0,0,115,8,0,0,0,12,3,6,2,12,8,12,8,114, +- 32,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, +- 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, +- 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, +- 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, +- 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, +- 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, +- 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, +- 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, +- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, +- 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, +- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, +- 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, +- 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, +- 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, +- 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, +- 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, +- 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, +- 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, +- 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, +- 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, +- 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, +- 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, +- 114,71,0,0,0,114,35,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,10,112,97,116,104,95, +- 109,116,105,109,101,198,5,0,0,115,2,0,0,0,0,6, +- 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, +- 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,20, +- 0,0,0,105,1,0,124,0,0,106,0,0,124,1,0,131, +- 1,0,100,1,0,54,83,41,2,97,170,1,0,0,79,112, +- 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, +- 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, +- 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, +- 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, +- 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, +- 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, +- 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, +- 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, +- 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, +- 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, +- 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, +- 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, +- 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, +- 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, +- 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, +- 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, +- 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, +- 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, +- 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, +- 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, +- 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, +- 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, +- 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, +- 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, +- 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, +- 32,32,32,32,32,32,32,32,114,183,0,0,0,41,1,114, +- 35,1,0,0,41,2,114,71,0,0,0,114,35,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 10,112,97,116,104,95,115,116,97,116,115,206,5,0,0,115, +- 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, +- 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, +- 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, +- 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, +- 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, +- 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, +- 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, +- 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, +- 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, +- 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, +- 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, +- 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, +- 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, +- 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, +- 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, +- 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, +- 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, +- 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, +- 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, +- 71,0,0,0,114,141,0,0,0,90,10,99,97,99,104,101, +- 95,112,97,116,104,114,53,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,15,95,99,97,99,104, +- 101,95,98,121,116,101,99,111,100,101,219,5,0,0,115,2, +- 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, +- 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, +- 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, +- 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, +- 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, +- 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, +- 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, +- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, +- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, +- 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, +- 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, +- 115,46,10,32,32,32,32,32,32,32,32,78,114,4,0,0, +- 0,41,3,114,71,0,0,0,114,35,0,0,0,114,53,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,37,1,0,0,229,5,0,0,115,0,0,0,0,122, +- 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, +- 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, +- 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, +- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, +- 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, +- 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, +- 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, +- 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, +- 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, +- 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, +- 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, +- 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, +- 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, +- 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, +- 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, +- 103,101,116,95,100,97,116,97,40,41,114,67,0,0,0,78, +- 41,5,114,238,0,0,0,218,8,103,101,116,95,100,97,116, +- 97,114,40,0,0,0,114,153,0,0,0,114,203,0,0,0, +- 41,5,114,71,0,0,0,114,158,0,0,0,114,35,0,0, +- 0,114,201,0,0,0,218,3,101,120,99,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,236, +- 5,0,0,115,14,0,0,0,0,2,15,1,3,1,19,1, +- 18,1,9,1,31,1,122,23,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,218, +- 9,95,111,112,116,105,109,105,122,101,114,29,0,0,0,99, +- 3,0,0,0,1,0,0,0,4,0,0,0,9,0,0,0, +- 67,0,0,0,115,31,0,0,0,116,0,0,116,1,0,124, +- 1,0,124,2,0,100,1,0,100,2,0,100,3,0,100,4, +- 0,124,3,0,131,4,2,83,41,5,122,130,82,101,116,117, +- 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, +- 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, +- 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, +- 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, +- 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, +- 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, +- 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, +- 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,175, +- 0,0,0,218,12,100,111,110,116,95,105,110,104,101,114,105, +- 116,84,114,118,0,0,0,41,2,114,114,0,0,0,218,7, +- 99,111,109,112,105,108,101,41,4,114,71,0,0,0,114,53, +- 0,0,0,114,35,0,0,0,114,41,1,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,14,115,111, +- 117,114,99,101,95,116,111,95,99,111,100,101,246,5,0,0, +- 115,4,0,0,0,0,5,18,1,122,27,83,111,117,114,99, +- 101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,116, +- 111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,10, +- 0,0,0,45,0,0,0,67,0,0,0,115,177,1,0,0, +- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,100, +- 1,0,125,3,0,121,16,0,116,1,0,124,2,0,131,1, +- 0,125,4,0,87,110,24,0,4,116,2,0,107,10,0,114, +- 63,0,1,1,1,100,1,0,125,4,0,89,110,202,0,88, +- 121,19,0,124,0,0,106,3,0,124,2,0,131,1,0,125, +- 5,0,87,110,18,0,4,116,4,0,107,10,0,114,103,0, +- 1,1,1,89,110,162,0,88,116,5,0,124,5,0,100,2, +- 0,25,131,1,0,125,3,0,121,19,0,124,0,0,106,6, +- 0,124,4,0,131,1,0,125,6,0,87,110,18,0,4,116, +- 7,0,107,10,0,114,159,0,1,1,1,89,110,106,0,88, +- 121,34,0,116,8,0,124,6,0,100,3,0,124,5,0,100, +- 4,0,124,1,0,100,5,0,124,4,0,131,1,3,125,7, +- 0,87,110,24,0,4,116,9,0,116,10,0,102,2,0,107, +- 10,0,114,220,0,1,1,1,89,110,45,0,88,116,11,0, +- 100,6,0,124,4,0,124,2,0,131,3,0,1,116,12,0, +- 124,7,0,100,4,0,124,1,0,100,7,0,124,4,0,100, +- 8,0,124,2,0,131,1,3,83,124,0,0,106,6,0,124, +- 2,0,131,1,0,125,8,0,124,0,0,106,13,0,124,8, +- 0,124,2,0,131,2,0,125,9,0,116,11,0,100,9,0, +- 124,2,0,131,2,0,1,116,14,0,106,15,0,12,114,173, +- 1,124,4,0,100,1,0,107,9,0,114,173,1,124,3,0, +- 100,1,0,107,9,0,114,173,1,116,16,0,124,9,0,124, +- 3,0,116,17,0,124,8,0,131,1,0,131,3,0,125,6, +- 0,121,36,0,124,0,0,106,18,0,124,2,0,124,4,0, +- 124,6,0,131,3,0,1,116,11,0,100,10,0,124,4,0, +- 131,2,0,1,87,113,173,1,4,116,2,0,107,10,0,114, +- 169,1,1,1,1,89,113,173,1,88,110,0,0,124,9,0, +- 83,41,11,122,190,67,111,110,99,114,101,116,101,32,105,109, +- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, +- 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, +- 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, +- 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, +- 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, +- 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, +- 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, +- 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, +- 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, +- 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, +- 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, +- 32,32,32,78,114,183,0,0,0,114,187,0,0,0,114,67, +- 0,0,0,114,35,0,0,0,122,13,123,125,32,109,97,116, +- 99,104,101,115,32,123,125,114,140,0,0,0,114,141,0,0, +- 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102, +- 114,111,109,32,123,125,122,10,119,114,111,116,101,32,123,33, +- 114,125,41,19,114,238,0,0,0,114,132,0,0,0,114,124, +- 0,0,0,114,36,1,0,0,114,34,1,0,0,114,14,0, +- 0,0,114,39,1,0,0,114,40,0,0,0,114,190,0,0, +- 0,114,153,0,0,0,114,186,0,0,0,114,152,0,0,0, +- 114,195,0,0,0,114,44,1,0,0,114,7,0,0,0,218, +- 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, +- 99,111,100,101,114,198,0,0,0,114,31,0,0,0,114,38, +- 1,0,0,41,10,114,71,0,0,0,114,158,0,0,0,114, +- 141,0,0,0,114,188,0,0,0,114,140,0,0,0,218,2, +- 115,116,114,53,0,0,0,218,10,98,121,116,101,115,95,100, +- 97,116,97,114,201,0,0,0,90,11,99,111,100,101,95,111, +- 98,106,101,99,116,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,15,1,0,0,254,5,0,0,115,78,0, +- 0,0,0,7,15,1,6,1,3,1,16,1,13,1,11,2, +- 3,1,19,1,13,1,5,2,16,1,3,1,19,1,13,1, +- 5,2,3,1,9,1,12,1,13,1,19,1,5,2,9,1, +- 7,1,15,1,6,1,7,1,15,1,18,1,13,1,22,1, +- 12,1,9,1,15,1,3,1,19,1,17,1,13,1,8,1, +- 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, +- 101,116,95,99,111,100,101,78,114,138,0,0,0,41,10,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,35, +- 1,0,0,114,36,1,0,0,114,38,1,0,0,114,37,1, +- 0,0,114,16,1,0,0,114,44,1,0,0,114,15,1,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,33,1,0,0,196,5,0,0,115,14, +- 0,0,0,12,2,12,8,12,13,12,10,12,7,12,10,18, +- 8,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,4,0,0,0,0,0,0,0,115,112,0,0,0, +- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, +- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, +- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, +- 132,0,0,90,6,0,101,7,0,135,0,0,102,1,0,100, +- 8,0,100,9,0,134,0,0,131,1,0,90,8,0,101,7, +- 0,100,10,0,100,11,0,132,0,0,131,1,0,90,9,0, +- 100,12,0,100,13,0,132,0,0,90,10,0,135,0,0,83, +- 41,14,218,10,70,105,108,101,76,111,97,100,101,114,122,103, +- 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, +- 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, +- 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, +- 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, +- 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, +- 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, +- 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, +- 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, +- 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, +- 95,1,0,100,1,0,83,41,2,122,75,67,97,99,104,101, +- 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, +- 32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111, +- 32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32, +- 98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102, +- 105,110,100,101,114,46,78,41,2,114,67,0,0,0,114,35, +- 0,0,0,41,3,114,71,0,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,55,6,0,0,115,4,0,0, +- 0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101, +- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, +- 34,0,0,0,124,0,0,106,0,0,124,1,0,106,0,0, +- 107,2,0,111,33,0,124,0,0,106,1,0,124,1,0,106, +- 1,0,107,2,0,83,41,1,78,41,2,114,224,0,0,0, +- 114,63,0,0,0,41,2,114,71,0,0,0,114,227,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,229,0,0,0,61,6,0,0,115,4,0,0,0,0,1, +- 18,1,122,17,70,105,108,101,76,111,97,100,101,114,46,95, +- 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, +- 0,106,2,0,131,1,0,65,83,41,1,78,41,3,218,4, +- 104,97,115,104,114,67,0,0,0,114,35,0,0,0,41,1, +- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,8,95,95,104,97,115,104,95,95,65,6, +- 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, +- 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, +- 0,0,0,115,22,0,0,0,116,0,0,116,1,0,124,0, +- 0,131,2,0,106,2,0,124,1,0,131,1,0,83,41,1, +- 122,100,76,111,97,100,32,97,32,109,111,100,117,108,101,32, +- 102,114,111,109,32,97,32,102,105,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, +- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,41,3,218,5,115,117,112,101,114,114, +- 48,1,0,0,114,4,1,0,0,41,2,114,71,0,0,0, +- 114,158,0,0,0,41,1,114,224,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,4,1,0,0,68,6,0,0,115, +- 2,0,0,0,0,10,122,22,70,105,108,101,76,111,97,100, +- 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, +- 0,0,0,115,7,0,0,0,124,0,0,106,0,0,83,41, +- 1,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, +- 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, +- 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, +- 121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,114, +- 35,0,0,0,41,2,114,71,0,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 238,0,0,0,80,6,0,0,115,2,0,0,0,0,3,122, +- 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, +- 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, +- 0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,0, +- 0,0,116,0,0,106,1,0,124,1,0,100,1,0,131,2, +- 0,143,17,0,125,2,0,124,2,0,106,2,0,131,0,0, +- 83,87,100,2,0,81,88,100,2,0,83,41,3,122,39,82, +- 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,102, +- 114,111,109,32,112,97,116,104,32,97,115,32,114,97,119,32, +- 98,121,116,101,115,46,218,1,114,78,41,3,114,49,0,0, +- 0,114,50,0,0,0,90,4,114,101,97,100,41,3,114,71, +- 0,0,0,114,35,0,0,0,114,54,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,39,1,0, +- 0,85,6,0,0,115,4,0,0,0,0,2,21,1,122,19, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, +- 97,116,97,41,11,114,57,0,0,0,114,56,0,0,0,114, +- 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,229, +- 0,0,0,114,50,1,0,0,114,156,0,0,0,114,4,1, +- 0,0,114,238,0,0,0,114,39,1,0,0,114,4,0,0, +- 0,114,4,0,0,0,41,1,114,224,0,0,0,114,5,0, +- 0,0,114,48,1,0,0,50,6,0,0,115,14,0,0,0, +- 12,3,6,2,12,6,12,4,12,3,24,12,18,5,114,48, +- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, +- 4,0,0,0,64,0,0,0,115,64,0,0,0,101,0,0, +- 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, +- 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, +- 0,132,0,0,90,5,0,100,6,0,100,7,0,100,8,0, +- 100,9,0,132,0,1,90,6,0,100,10,0,83,41,11,114, +- 8,1,0,0,122,62,67,111,110,99,114,101,116,101,32,105, +- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, +- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, +- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, +- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,3,0,0,0,67,0,0,0,115,36,0,0,0,116,0, +- 0,124,1,0,131,1,0,125,2,0,105,2,0,124,2,0, +- 106,1,0,100,1,0,54,124,2,0,106,2,0,100,2,0, +- 54,83,41,3,122,33,82,101,116,117,114,110,32,116,104,101, +- 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, +- 101,32,112,97,116,104,46,114,183,0,0,0,114,184,0,0, +- 0,41,3,114,39,0,0,0,218,8,115,116,95,109,116,105, +- 109,101,90,7,115,116,95,115,105,122,101,41,3,114,71,0, +- 0,0,114,35,0,0,0,114,46,1,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,36,1,0,0, +- 95,6,0,0,115,4,0,0,0,0,2,12,1,122,27,83, +- 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, +- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, +- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, +- 34,0,0,0,116,0,0,124,1,0,131,1,0,125,4,0, +- 124,0,0,106,1,0,124,2,0,124,3,0,100,1,0,124, +- 4,0,131,2,1,83,41,2,78,218,5,95,109,111,100,101, +- 41,2,114,144,0,0,0,114,37,1,0,0,41,5,114,71, +- 0,0,0,114,141,0,0,0,114,140,0,0,0,114,53,0, +- 0,0,114,42,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,38,1,0,0,100,6,0,0,115, +- 4,0,0,0,0,2,12,1,122,32,83,111,117,114,99,101, +- 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, +- 101,95,98,121,116,101,99,111,100,101,114,54,1,0,0,105, +- 182,1,0,0,99,3,0,0,0,1,0,0,0,9,0,0, +- 0,18,0,0,0,67,0,0,0,115,53,1,0,0,116,0, +- 0,124,1,0,131,1,0,92,2,0,125,4,0,125,5,0, +- 103,0,0,125,6,0,120,54,0,124,4,0,114,80,0,116, +- 1,0,124,4,0,131,1,0,12,114,80,0,116,0,0,124, +- 4,0,131,1,0,92,2,0,125,4,0,125,7,0,124,6, +- 0,106,2,0,124,7,0,131,1,0,1,113,27,0,87,120, +- 132,0,116,3,0,124,6,0,131,1,0,68,93,118,0,125, +- 7,0,116,4,0,124,4,0,124,7,0,131,2,0,125,4, +- 0,121,17,0,116,5,0,106,6,0,124,4,0,131,1,0, +- 1,87,113,94,0,4,116,7,0,107,10,0,114,155,0,1, +- 1,1,119,94,0,89,113,94,0,4,116,8,0,107,10,0, +- 114,211,0,1,125,8,0,1,122,25,0,116,9,0,100,1, +- 0,124,4,0,124,8,0,131,3,0,1,100,2,0,83,87, +- 89,100,2,0,100,2,0,125,8,0,126,8,0,88,113,94, +- 0,88,113,94,0,87,121,33,0,116,10,0,124,1,0,124, +- 2,0,124,3,0,131,3,0,1,116,9,0,100,3,0,124, +- 1,0,131,2,0,1,87,110,53,0,4,116,8,0,107,10, +- 0,114,48,1,1,125,8,0,1,122,21,0,116,9,0,100, +- 1,0,124,1,0,124,8,0,131,3,0,1,87,89,100,2, +- 0,100,2,0,125,8,0,126,8,0,88,110,1,0,88,100, +- 2,0,83,41,4,122,27,87,114,105,116,101,32,98,121,116, +- 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, +- 101,46,122,27,99,111,117,108,100,32,110,111,116,32,99,114, +- 101,97,116,101,32,123,33,114,125,58,32,123,33,114,125,78, +- 122,12,99,114,101,97,116,101,100,32,123,33,114,125,41,11, +- 114,38,0,0,0,114,46,0,0,0,114,223,0,0,0,114, +- 33,0,0,0,114,28,0,0,0,114,3,0,0,0,90,5, +- 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, +- 115,69,114,114,111,114,114,40,0,0,0,114,152,0,0,0, +- 114,55,0,0,0,41,9,114,71,0,0,0,114,35,0,0, +- 0,114,53,0,0,0,114,54,1,0,0,114,233,0,0,0, +- 114,131,0,0,0,114,27,0,0,0,114,23,0,0,0,114, +- 40,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,37,1,0,0,105,6,0,0,115,38,0,0, +- 0,0,2,18,1,6,2,22,1,18,1,17,2,19,1,15, +- 1,3,1,17,1,13,2,7,1,18,3,16,1,27,1,3, +- 1,16,1,17,1,18,2,122,25,83,111,117,114,99,101,70, +- 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, +- 116,97,78,41,7,114,57,0,0,0,114,56,0,0,0,114, +- 58,0,0,0,114,59,0,0,0,114,36,1,0,0,114,38, +- 1,0,0,114,37,1,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,8,1,0, +- 0,91,6,0,0,115,8,0,0,0,12,2,6,2,12,5, +- 12,5,114,8,1,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,2,0,0,0,64,0,0,0,115,46,0,0, +- 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, +- 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, +- 4,0,100,5,0,132,0,0,90,5,0,100,6,0,83,41, +- 7,114,7,1,0,0,122,45,76,111,97,100,101,114,32,119, +- 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, +- 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, +- 111,114,116,115,46,99,2,0,0,0,0,0,0,0,5,0, +- 0,0,6,0,0,0,67,0,0,0,115,76,0,0,0,124, +- 0,0,106,0,0,124,1,0,131,1,0,125,2,0,124,0, +- 0,106,1,0,124,2,0,131,1,0,125,3,0,116,2,0, +- 124,3,0,100,1,0,124,1,0,100,2,0,124,2,0,131, +- 1,2,125,4,0,116,3,0,124,4,0,100,1,0,124,1, +- 0,100,3,0,124,2,0,131,1,2,83,41,4,78,114,67, +- 0,0,0,114,35,0,0,0,114,140,0,0,0,41,4,114, +- 238,0,0,0,114,39,1,0,0,114,190,0,0,0,114,195, +- 0,0,0,41,5,114,71,0,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,53,0,0,0,114,47,1,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,15,1, +- 0,0,138,6,0,0,115,8,0,0,0,0,1,15,1,15, +- 1,24,1,122,29,83,111,117,114,99,101,108,101,115,115,70, +- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, +- 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, +- 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, +- 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, +- 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, +- 0,144,6,0,0,115,2,0,0,0,0,2,122,31,83,111, +- 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, +- 101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6, +- 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, +- 59,0,0,0,114,15,1,0,0,114,16,1,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,7,1,0,0,134,6,0,0,115,6,0,0,0, +- 12,2,6,2,12,6,114,7,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, +- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, +- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, +- 6,0,100,7,0,132,0,0,90,6,0,101,7,0,100,8, +- 0,100,9,0,132,0,0,131,1,0,90,8,0,100,10,0, +- 100,11,0,132,0,0,90,9,0,100,12,0,100,13,0,132, +- 0,0,90,10,0,100,14,0,100,15,0,132,0,0,90,11, +- 0,101,7,0,100,16,0,100,17,0,132,0,0,131,1,0, +- 90,12,0,100,18,0,83,41,19,218,19,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,122,93, +- 76,111,97,100,101,114,32,102,111,114,32,101,120,116,101,110, +- 115,105,111,110,32,109,111,100,117,108,101,115,46,10,10,32, +- 32,32,32,84,104,101,32,99,111,110,115,116,114,117,99,116, +- 111,114,32,105,115,32,100,101,115,105,103,110,101,100,32,116, +- 111,32,119,111,114,107,32,119,105,116,104,32,70,105,108,101, +- 70,105,110,100,101,114,46,10,10,32,32,32,32,99,3,0, +- 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, +- 0,0,115,22,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,2,0,124,0,0,95,1,0,100,0,0,83,41,1,78, +- 41,2,114,67,0,0,0,114,35,0,0,0,41,3,114,71, +- 0,0,0,114,67,0,0,0,114,35,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,0, +- 0,161,6,0,0,115,4,0,0,0,0,1,9,1,122,28, +- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, +- 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, +- 0,115,34,0,0,0,124,0,0,106,0,0,124,1,0,106, +- 0,0,107,2,0,111,33,0,124,0,0,106,1,0,124,1, +- 0,106,1,0,107,2,0,83,41,1,78,41,2,114,224,0, +- 0,0,114,63,0,0,0,41,2,114,71,0,0,0,114,227, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,229,0,0,0,165,6,0,0,115,4,0,0,0, +- 0,1,18,1,122,26,69,120,116,101,110,115,105,111,110,70, +- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, +- 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, +- 106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131, +- 1,0,65,83,41,1,78,41,3,114,49,1,0,0,114,67, +- 0,0,0,114,35,0,0,0,41,1,114,71,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,50, +- 1,0,0,169,6,0,0,115,2,0,0,0,0,1,122,28, +- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, +- 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, +- 0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0, +- 0,115,183,0,0,0,116,0,0,124,1,0,131,1,0,143, +- 29,0,1,116,1,0,116,2,0,106,3,0,124,1,0,124, +- 0,0,106,4,0,131,3,0,125,2,0,87,100,1,0,81, +- 88,116,5,0,100,2,0,124,0,0,106,4,0,131,2,0, +- 1,124,0,0,106,6,0,124,1,0,131,1,0,125,3,0, +- 124,3,0,114,124,0,116,7,0,124,2,0,100,3,0,131, +- 2,0,12,114,124,0,116,8,0,124,0,0,106,4,0,131, +- 1,0,100,4,0,25,103,1,0,124,2,0,95,9,0,110, +- 0,0,124,0,0,124,2,0,95,10,0,124,2,0,106,11, +- 0,124,2,0,95,12,0,124,3,0,115,179,0,124,2,0, +- 106,12,0,106,13,0,100,5,0,131,1,0,100,4,0,25, +- 124,2,0,95,12,0,110,0,0,124,2,0,83,41,6,122, +- 25,76,111,97,100,32,97,110,32,101,120,116,101,110,115,105, +- 111,110,32,109,111,100,117,108,101,46,78,122,33,101,120,116, +- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,108,111, +- 97,100,101,100,32,102,114,111,109,32,123,33,114,125,114,246, +- 0,0,0,114,84,0,0,0,114,116,0,0,0,41,14,114, +- 69,0,0,0,114,114,0,0,0,114,106,0,0,0,90,12, +- 108,111,97,100,95,100,121,110,97,109,105,99,114,35,0,0, +- 0,114,152,0,0,0,114,219,0,0,0,114,60,0,0,0, +- 114,38,0,0,0,114,246,0,0,0,114,204,0,0,0,114, +- 57,0,0,0,114,250,0,0,0,114,32,0,0,0,41,4, +- 114,71,0,0,0,114,158,0,0,0,114,179,0,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,4,1,0,0,172,6,0,0,115,24,0,0, +- 0,0,5,13,1,9,1,21,1,16,1,15,1,22,1,28, +- 1,9,1,12,1,6,1,28,1,122,31,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,108, +- 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,4,0,0,0,3,0,0,0,115, +- 48,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, +- 100,1,0,25,137,0,0,116,2,0,135,0,0,102,1,0, +- 100,2,0,100,3,0,134,0,0,116,3,0,68,131,1,0, +- 131,1,0,83,41,4,122,49,82,101,116,117,114,110,32,84, +- 114,117,101,32,105,102,32,116,104,101,32,101,120,116,101,110, +- 115,105,111,110,32,109,111,100,117,108,101,32,105,115,32,97, +- 32,112,97,99,107,97,103,101,46,114,29,0,0,0,99,1, +- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, +- 0,0,0,115,31,0,0,0,124,0,0,93,21,0,125,1, +- 0,136,0,0,100,0,0,124,1,0,23,107,2,0,86,1, +- 113,3,0,100,1,0,83,41,2,114,72,0,0,0,78,114, +- 4,0,0,0,41,2,114,22,0,0,0,218,6,115,117,102, +- 102,105,120,41,1,218,9,102,105,108,101,95,110,97,109,101, +- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,193, +- 6,0,0,115,2,0,0,0,6,1,122,49,69,120,116,101, +- 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, +- 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, +- 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, +- 38,0,0,0,114,35,0,0,0,114,78,0,0,0,218,18, +- 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, +- 69,83,41,2,114,71,0,0,0,114,158,0,0,0,114,4, +- 0,0,0,41,1,114,58,1,0,0,114,5,0,0,0,114, +- 219,0,0,0,190,6,0,0,115,6,0,0,0,0,2,19, +- 1,18,1,122,30,69,120,116,101,110,115,105,111,110,70,105, +- 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, +- 97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, +- 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, +- 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, +- 101,99,116,46,78,114,4,0,0,0,41,2,114,71,0,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,15,1,0,0,196,6,0,0,115,2, +- 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, +- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, +- 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, +- 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, +- 41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,0, +- 200,6,0,0,115,2,0,0,0,0,2,122,30,69,120,116, +- 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, +- 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 115,7,0,0,0,124,0,0,106,0,0,83,41,1,122,58, +- 82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,105, +- 108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,116, +- 104,101,32,102,105,110,100,101,114,46,41,1,114,35,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,238,0,0, +- 0,204,6,0,0,115,2,0,0,0,0,3,122,32,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, +- 13,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, +- 114,59,0,0,0,114,72,0,0,0,114,229,0,0,0,114, +- 50,1,0,0,114,156,0,0,0,114,4,1,0,0,114,219, +- 0,0,0,114,15,1,0,0,114,16,1,0,0,114,238,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,56,1,0,0,153,6,0,0,115, +- 18,0,0,0,12,6,6,2,12,4,12,4,12,3,18,18, +- 12,6,12,4,12,4,114,56,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, +- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, +- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, +- 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, +- 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, +- 90,8,0,100,12,0,100,13,0,132,0,0,90,9,0,100, +- 14,0,100,15,0,132,0,0,90,10,0,100,16,0,100,17, +- 0,132,0,0,90,11,0,100,18,0,100,19,0,132,0,0, +- 90,12,0,100,20,0,83,41,21,218,14,95,78,97,109,101, +- 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, +- 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, +- 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, +- 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, +- 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, +- 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, +- 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, +- 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, +- 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, +- 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, +- 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, +- 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, +- 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, +- 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, +- 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, +- 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, +- 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, +- 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, +- 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, +- 97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0, +- 0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,1, +- 0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0, +- 116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,124, +- 0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,0, +- 0,83,41,1,78,41,6,114,70,0,0,0,114,253,0,0, +- 0,114,231,0,0,0,218,16,95,103,101,116,95,112,97,114, +- 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, +- 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, +- 116,104,95,102,105,110,100,101,114,41,4,114,71,0,0,0, +- 114,67,0,0,0,114,35,0,0,0,218,11,112,97,116,104, +- 95,102,105,110,100,101,114,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,72,0,0,0,217,6,0,0,115, +- 8,0,0,0,0,1,9,1,9,1,21,1,122,23,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, +- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,4,0, +- 0,0,3,0,0,0,67,0,0,0,115,53,0,0,0,124, +- 0,0,106,0,0,106,1,0,100,1,0,131,1,0,92,3, +- 0,125,1,0,125,2,0,125,3,0,124,2,0,100,2,0, +- 107,2,0,114,43,0,100,6,0,83,124,1,0,100,5,0, +- 102,2,0,83,41,7,122,62,82,101,116,117,114,110,115,32, +- 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, +- 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, +- 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, +- 45,110,97,109,101,41,114,116,0,0,0,114,30,0,0,0, +- 114,7,0,0,0,114,35,0,0,0,114,246,0,0,0,41, +- 2,122,3,115,121,115,122,4,112,97,116,104,41,2,114,70, +- 0,0,0,114,32,0,0,0,41,4,114,71,0,0,0,114, +- 233,0,0,0,218,3,100,111,116,114,94,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,23,95, +- 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, +- 95,110,97,109,101,115,223,6,0,0,115,8,0,0,0,0, +- 2,27,1,12,2,4,3,122,38,95,78,97,109,101,115,112, +- 97,99,101,80,97,116,104,46,95,102,105,110,100,95,112,97, +- 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, +- 67,0,0,0,115,38,0,0,0,124,0,0,106,0,0,131, +- 0,0,92,2,0,125,1,0,125,2,0,116,1,0,116,2, +- 0,106,3,0,124,1,0,25,124,2,0,131,2,0,83,41, +- 1,78,41,4,114,66,1,0,0,114,62,0,0,0,114,7, +- 0,0,0,114,73,0,0,0,41,3,114,71,0,0,0,90, +- 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, +- 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, +- 97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,61,1,0,0,233,6,0,0,115,4,0,0,0, +- 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, +- 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, +- 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,67,0,0,0,115,127,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, +- 0,124,1,0,124,0,0,106,2,0,107,3,0,114,120,0, +- 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, +- 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,108, +- 0,124,2,0,106,5,0,100,0,0,107,8,0,114,108,0, +- 124,2,0,106,6,0,114,108,0,124,2,0,106,6,0,124, +- 0,0,95,7,0,113,108,0,110,0,0,124,1,0,124,0, +- 0,95,2,0,110,0,0,124,0,0,106,7,0,83,41,1, +- 78,41,8,114,231,0,0,0,114,61,1,0,0,114,62,1, +- 0,0,114,63,1,0,0,114,70,0,0,0,114,169,0,0, +- 0,114,220,0,0,0,114,253,0,0,0,41,3,114,71,0, +- 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, +- 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, +- 101,237,6,0,0,115,16,0,0,0,0,2,18,1,15,1, +- 21,3,27,1,9,1,18,1,12,1,122,27,95,78,97,109, +- 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, +- 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, +- 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, +- 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, +- 83,41,1,78,41,2,218,4,105,116,101,114,114,67,1,0, +- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,8,95,95,105,116,101,114,95, +- 95,250,6,0,0,115,2,0,0,0,0,1,122,23,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, +- 116,101,114,95,95,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,41, +- 1,78,41,2,114,31,0,0,0,114,67,1,0,0,41,1, +- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,7,95,95,108,101,110,95,95,253,6,0, +- 0,115,2,0,0,0,0,1,122,22,95,78,97,109,101,115, +- 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, +- 0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0, +- 124,0,0,106,1,0,131,1,0,83,41,2,78,122,20,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, +- 114,125,41,41,2,114,47,0,0,0,114,253,0,0,0,41, +- 1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,101,0,0,0,0,7,0,0,115,2, +- 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, +- 101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, +- 0,0,0,115,16,0,0,0,124,1,0,124,0,0,106,0, +- 0,131,0,0,107,6,0,83,41,1,78,41,1,114,67,1, +- 0,0,41,2,114,71,0,0,0,218,4,105,116,101,109,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12, +- 95,95,99,111,110,116,97,105,110,115,95,95,3,7,0,0, +- 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, +- 97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105, +- 110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,2,0,0,0,67,0,0,0,115,20,0,0,0,124,0, +- 0,106,0,0,106,1,0,124,1,0,131,1,0,1,100,0, +- 0,83,41,1,78,41,2,114,253,0,0,0,114,223,0,0, +- 0,41,2,114,71,0,0,0,114,71,1,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,223,0,0, +- 0,6,7,0,0,115,2,0,0,0,0,1,122,21,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112, +- 101,110,100,78,41,13,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, +- 66,1,0,0,114,61,1,0,0,114,67,1,0,0,114,69, +- 1,0,0,114,70,1,0,0,114,101,0,0,0,114,72,1, +- 0,0,114,223,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0, +- 210,6,0,0,115,20,0,0,0,12,5,6,2,12,6,12, +- 10,12,4,12,13,12,3,12,3,12,3,12,3,114,60,1, +- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,64,0,0,0,115,106,0,0,0,101,0,0,90, +- 1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0, +- 0,90,3,0,101,4,0,100,3,0,100,4,0,132,0,0, +- 131,1,0,90,5,0,100,5,0,100,6,0,132,0,0,90, +- 6,0,100,7,0,100,8,0,132,0,0,90,7,0,100,9, +- 0,100,10,0,132,0,0,90,8,0,100,11,0,100,12,0, +- 132,0,0,90,9,0,100,13,0,100,14,0,132,0,0,90, +- 10,0,100,15,0,83,41,16,114,251,0,0,0,99,4,0, +- 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, +- 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, +- 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, +- 41,1,78,41,2,114,60,1,0,0,114,253,0,0,0,41, +- 4,114,71,0,0,0,114,67,0,0,0,114,35,0,0,0, +- 114,64,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,72,0,0,0,12,7,0,0,115,2,0, +- 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, +- 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, +- 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, +- 1,0,106,1,0,131,1,0,83,41,2,122,115,82,101,116, +- 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, +- 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, +- 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, +- 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, +- 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, +- 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, +- 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, +- 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, +- 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, +- 0,0,114,57,0,0,0,41,2,114,11,1,0,0,114,179, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,205,0,0,0,15,7,0,0,115,2,0,0,0, +- 0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111, +- 97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114, +- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, +- 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, +- 78,84,114,4,0,0,0,41,2,114,71,0,0,0,114,158, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,219,0,0,0,24,7,0,0,115,2,0,0,0, +- 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, +- 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, +- 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,78, +- 114,30,0,0,0,114,4,0,0,0,41,2,114,71,0,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,16,1,0,0,27,7,0,0,115,2, +- 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, +- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,6, +- 0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,100, +- 1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,3, +- 1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,114, +- 105,110,103,62,114,175,0,0,0,114,42,1,0,0,84,41, +- 1,114,43,1,0,0,41,2,114,71,0,0,0,114,158,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,15,1,0,0,30,7,0,0,115,2,0,0,0,0, +- 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, +- 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, +- 0,115,4,0,0,0,100,0,0,83,41,1,78,114,4,0, +- 0,0,41,2,114,71,0,0,0,114,179,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, +- 0,0,33,7,0,0,115,2,0,0,0,0,1,122,28,95, +- 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, +- 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, +- 115,29,0,0,0,116,0,0,100,1,0,124,0,0,106,1, +- 0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2, +- 0,83,41,2,122,98,76,111,97,100,32,97,32,110,97,109, +- 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, +- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, +- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, +- 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, +- 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, +- 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, +- 41,3,114,152,0,0,0,114,253,0,0,0,114,180,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0, +- 0,36,7,0,0,115,4,0,0,0,0,7,16,1,122,28, +- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, +- 46,108,111,97,100,95,109,111,100,117,108,101,78,41,11,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, +- 0,0,0,114,18,1,0,0,114,205,0,0,0,114,219,0, +- 0,0,114,16,1,0,0,114,15,1,0,0,114,1,1,0, +- 0,114,4,1,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,11, +- 7,0,0,115,14,0,0,0,12,1,12,3,18,9,12,3, +- 12,3,12,3,12,3,114,251,0,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0, +- 115,160,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,101,4,0,100,2,0,100,3,0, +- 132,0,0,131,1,0,90,5,0,101,4,0,100,4,0,100, +- 5,0,132,0,0,131,1,0,90,6,0,101,4,0,100,6, +- 0,100,7,0,132,0,0,131,1,0,90,7,0,101,4,0, +- 100,8,0,100,9,0,132,0,0,131,1,0,90,8,0,101, +- 4,0,100,10,0,100,11,0,100,12,0,132,1,0,131,1, +- 0,90,9,0,101,4,0,100,10,0,100,10,0,100,13,0, +- 100,14,0,132,2,0,131,1,0,90,10,0,101,4,0,100, +- 10,0,100,15,0,100,16,0,132,1,0,131,1,0,90,11, +- 0,100,10,0,83,41,17,218,10,80,97,116,104,70,105,110, +- 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, +- 105,110,100,101,114,32,102,111,114,32,115,121,115,46,112,97, +- 116,104,32,97,110,100,32,112,97,99,107,97,103,101,32,95, +- 95,112,97,116,104,95,95,32,97,116,116,114,105,98,117,116, +- 101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0, +- 4,0,0,0,67,0,0,0,115,58,0,0,0,120,51,0, +- 116,0,0,106,1,0,106,2,0,131,0,0,68,93,34,0, +- 125,1,0,116,3,0,124,1,0,100,1,0,131,2,0,114, +- 16,0,124,1,0,106,4,0,131,0,0,1,113,16,0,113, +- 16,0,87,100,2,0,83,41,3,122,125,67,97,108,108,32, +- 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, +- 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, +- 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, +- 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, +- 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, ++ 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, ++ 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, ++ 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, ++ 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, ++ 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, ++ 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, ++ 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, ++ 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, ++ 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, ++ 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, ++ 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, ++ 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, ++ 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, ++ 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, ++ 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, ++ 0,2,0,0,0,4,0,0,0,67,0,0,0,115,58,0, ++ 0,0,120,51,0,116,0,0,106,1,0,106,2,0,131,0, ++ 0,68,93,34,0,125,1,0,116,3,0,124,1,0,100,1, ++ 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, ++ 1,113,16,0,113,16,0,87,100,2,0,83,41,3,122,125, ++ 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, ++ 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, ++ 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, ++ 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, ++ 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, ++ 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, ++ 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, ++ 105,109,112,108,101,109,101,110,116,101,100,41,46,218,17,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 78,41,5,114,8,0,0,0,218,19,112,97,116,104,95,105, ++ 109,112,111,114,116,101,114,95,99,97,99,104,101,218,6,118, ++ 97,108,117,101,115,114,61,0,0,0,114,75,1,0,0,41, ++ 2,114,12,1,0,0,218,6,102,105,110,100,101,114,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,75,1, ++ 0,0,53,7,0,0,115,6,0,0,0,0,4,22,1,15, ++ 1,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, ++ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, ++ 2,0,0,0,0,0,0,0,3,0,0,0,12,0,0,0, ++ 67,0,0,0,115,94,0,0,0,116,0,0,106,1,0,115, ++ 28,0,116,2,0,106,3,0,100,1,0,116,4,0,131,2, ++ 0,1,110,0,0,120,59,0,116,0,0,106,1,0,68,93, ++ 44,0,125,2,0,121,14,0,124,2,0,124,1,0,131,1, ++ 0,83,87,113,38,0,4,116,5,0,107,10,0,114,81,0, ++ 1,1,1,119,38,0,89,113,38,0,88,113,38,0,87,100, ++ 2,0,83,100,2,0,83,41,3,122,113,83,101,97,114,99, ++ 104,32,115,101,113,117,101,110,99,101,32,111,102,32,104,111, ++ 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, ++ 32,102,111,114,32,39,112,97,116,104,39,46,10,10,32,32, ++ 32,32,32,32,32,32,73,102,32,39,104,111,111,107,115,39, ++ 32,105,115,32,102,97,108,115,101,32,116,104,101,110,32,117, ++ 115,101,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,46,10,10,32,32,32,32,32,32,32,32,122,23,115,121, ++ 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, ++ 101,109,112,116,121,78,41,6,114,8,0,0,0,218,10,112, ++ 97,116,104,95,104,111,111,107,115,114,167,0,0,0,114,168, ++ 0,0,0,114,169,0,0,0,114,154,0,0,0,41,3,114, ++ 12,1,0,0,114,36,0,0,0,90,4,104,111,111,107,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,11, ++ 95,112,97,116,104,95,104,111,111,107,115,61,7,0,0,115, ++ 16,0,0,0,0,7,9,1,19,1,16,1,3,1,14,1, ++ 13,1,12,2,122,22,80,97,116,104,70,105,110,100,101,114, ++ 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, ++ 0,0,0,0,0,3,0,0,0,11,0,0,0,67,0,0, ++ 0,115,97,0,0,0,124,1,0,100,1,0,107,2,0,114, ++ 27,0,116,0,0,106,1,0,131,0,0,125,1,0,110,0, ++ 0,121,17,0,116,2,0,106,3,0,124,1,0,25,125,2, ++ 0,87,110,46,0,4,116,4,0,107,10,0,114,92,0,1, ++ 1,1,124,0,0,106,5,0,124,1,0,131,1,0,125,2, ++ 0,124,2,0,116,2,0,106,3,0,124,1,0,60,89,110, ++ 1,0,88,124,2,0,83,41,2,122,210,71,101,116,32,116, ++ 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, ++ 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, ++ 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, ++ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, ++ 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, ++ 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, ++ 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, ++ 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, ++ 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, ++ 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, ++ 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, ++ 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, ++ 110,101,46,10,10,32,32,32,32,32,32,32,32,114,31,0, ++ 0,0,41,6,114,4,0,0,0,114,46,0,0,0,114,8, ++ 0,0,0,114,76,1,0,0,114,80,0,0,0,114,80,1, ++ 0,0,41,3,114,12,1,0,0,114,36,0,0,0,114,78, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, ++ 101,114,95,99,97,99,104,101,78,7,0,0,115,16,0,0, ++ 0,0,8,12,1,15,1,3,1,17,1,13,1,15,1,18, ++ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, +- 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, +- 109,101,110,116,101,100,41,46,218,17,105,110,118,97,108,105, +- 100,97,116,101,95,99,97,99,104,101,115,78,41,5,114,7, +- 0,0,0,218,19,112,97,116,104,95,105,109,112,111,114,116, +- 101,114,95,99,97,99,104,101,218,6,118,97,108,117,101,115, +- 114,60,0,0,0,114,74,1,0,0,41,2,114,11,1,0, +- 0,218,6,102,105,110,100,101,114,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,74,1,0,0,53,7,0, +- 0,115,6,0,0,0,0,4,22,1,15,1,122,28,80,97, +- 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, +- 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, +- 0,0,0,3,0,0,0,12,0,0,0,67,0,0,0,115, +- 94,0,0,0,116,0,0,106,1,0,115,28,0,116,2,0, +- 106,3,0,100,1,0,116,4,0,131,2,0,1,110,0,0, +- 120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,0, +- 121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,38, +- 0,4,116,5,0,107,10,0,114,81,0,1,1,1,119,38, +- 0,89,113,38,0,88,113,38,0,87,100,2,0,83,100,2, +- 0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,113, +- 117,101,110,99,101,32,111,102,32,104,111,111,107,115,32,102, +- 111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,32, +- 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, +- 32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,102, +- 97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,121, +- 115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,32, +- 32,32,32,32,32,32,32,122,23,115,121,115,46,112,97,116, +- 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, +- 78,41,6,114,7,0,0,0,218,10,112,97,116,104,95,104, +- 111,111,107,115,114,166,0,0,0,114,167,0,0,0,114,168, +- 0,0,0,114,153,0,0,0,41,3,114,11,1,0,0,114, +- 35,0,0,0,90,4,104,111,111,107,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,11,95,112,97,116,104, +- 95,104,111,111,107,115,61,7,0,0,115,16,0,0,0,0, +- 7,9,1,19,1,16,1,3,1,14,1,13,1,12,2,122, +- 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, +- 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, +- 3,0,0,0,11,0,0,0,67,0,0,0,115,97,0,0, +- 0,124,1,0,100,1,0,107,2,0,114,27,0,116,0,0, +- 106,1,0,131,0,0,125,1,0,110,0,0,121,17,0,116, +- 2,0,106,3,0,124,1,0,25,125,2,0,87,110,46,0, +- 4,116,4,0,107,10,0,114,92,0,1,1,1,124,0,0, +- 106,5,0,124,1,0,131,1,0,125,2,0,124,2,0,116, +- 2,0,106,3,0,124,1,0,60,89,110,1,0,88,124,2, +- 0,83,41,2,122,210,71,101,116,32,116,104,101,32,102,105, +- 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, +- 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, +- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, +- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, +- 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, +- 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, +- 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, +- 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, +- 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, +- 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, +- 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, +- 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, +- 32,32,32,32,32,32,32,32,114,30,0,0,0,41,6,114, +- 3,0,0,0,114,45,0,0,0,114,7,0,0,0,114,75, +- 1,0,0,114,79,0,0,0,114,79,1,0,0,41,3,114, +- 11,1,0,0,114,35,0,0,0,114,77,1,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,20,95, +- 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, +- 99,104,101,78,7,0,0,115,16,0,0,0,0,8,12,1, +- 15,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, +- 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, +- 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, +- 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, +- 0,0,115,113,0,0,0,116,0,0,124,2,0,100,1,0, +- 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, +- 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, +- 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, +- 125,4,0,124,3,0,100,0,0,107,9,0,114,85,0,116, +- 3,0,124,1,0,124,3,0,131,2,0,83,116,4,0,124, +- 1,0,100,0,0,131,2,0,125,5,0,124,4,0,124,5, +- 0,95,5,0,124,5,0,83,41,2,78,114,165,0,0,0, +- 41,6,114,60,0,0,0,114,165,0,0,0,114,14,1,0, +- 0,114,173,0,0,0,114,216,0,0,0,114,220,0,0,0, +- 41,6,114,11,1,0,0,114,158,0,0,0,114,77,1,0, +- 0,114,169,0,0,0,114,170,0,0,0,114,177,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, +- 99,95,7,0,0,115,18,0,0,0,0,4,15,1,24,2, +- 15,1,6,1,12,1,13,1,15,1,9,1,122,27,80,97, +- 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, +- 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, +- 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, +- 252,0,0,0,103,0,0,125,4,0,120,239,0,124,2,0, +- 68,93,203,0,125,5,0,116,0,0,124,5,0,116,1,0, +- 116,2,0,102,2,0,131,2,0,115,46,0,113,13,0,110, +- 0,0,124,0,0,106,3,0,124,5,0,131,1,0,125,6, +- 0,124,6,0,100,1,0,107,9,0,114,13,0,116,4,0, +- 124,6,0,100,2,0,131,2,0,114,109,0,124,6,0,106, +- 5,0,124,1,0,124,3,0,131,2,0,125,7,0,110,18, +- 0,124,0,0,106,6,0,124,1,0,124,6,0,131,2,0, +- 125,7,0,124,7,0,100,1,0,107,8,0,114,145,0,113, +- 13,0,110,0,0,124,7,0,106,7,0,100,1,0,107,9, +- 0,114,164,0,124,7,0,83,124,7,0,106,8,0,125,8, +- 0,124,8,0,100,1,0,107,8,0,114,200,0,116,9,0, +- 100,3,0,131,1,0,130,1,0,110,0,0,124,4,0,106, +- 10,0,124,8,0,131,1,0,1,113,13,0,113,13,0,87, +- 116,11,0,124,1,0,100,1,0,131,2,0,125,7,0,124, +- 4,0,124,7,0,95,8,0,124,7,0,83,100,1,0,83, +- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, +- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, +- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, +- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, +- 109,101,46,78,114,13,1,0,0,122,19,115,112,101,99,32, +- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,12, +- 114,192,0,0,0,218,3,115,116,114,218,5,98,121,116,101, +- 115,114,80,1,0,0,114,60,0,0,0,114,13,1,0,0, +- 114,81,1,0,0,114,169,0,0,0,114,220,0,0,0,114, +- 153,0,0,0,114,197,0,0,0,114,216,0,0,0,41,9, +- 114,11,1,0,0,114,158,0,0,0,114,35,0,0,0,114, +- 12,1,0,0,218,14,110,97,109,101,115,112,97,99,101,95, +- 112,97,116,104,90,5,101,110,116,114,121,114,77,1,0,0, +- 114,177,0,0,0,114,170,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,9,95,103,101,116,95, +- 115,112,101,99,110,7,0,0,115,40,0,0,0,0,5,6, +- 1,13,1,21,1,6,1,15,1,12,1,15,1,21,2,18, +- 1,12,1,6,1,15,1,4,1,9,1,12,1,15,5,20, +- 2,15,1,9,1,122,20,80,97,116,104,70,105,110,100,101, +- 114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0, +- 0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,0, +- 115,143,0,0,0,124,2,0,100,1,0,107,8,0,114,24, +- 0,116,0,0,106,1,0,125,2,0,110,0,0,124,0,0, +- 106,2,0,124,1,0,124,2,0,124,3,0,131,3,0,125, +- 4,0,124,4,0,100,1,0,107,8,0,114,61,0,100,1, +- 0,83,124,4,0,106,3,0,100,1,0,107,8,0,114,135, +- 0,124,4,0,106,4,0,125,5,0,124,5,0,114,128,0, +- 100,2,0,124,4,0,95,5,0,116,6,0,124,1,0,124, +- 5,0,124,0,0,106,2,0,131,3,0,124,4,0,95,4, +- 0,124,4,0,83,100,1,0,83,110,4,0,124,4,0,83, +- 100,1,0,83,41,3,122,98,102,105,110,100,32,116,104,101, +- 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, +- 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, +- 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, +- 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, +- 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, +- 116,101,114,95,99,97,99,104,101,46,78,90,9,110,97,109, +- 101,115,112,97,99,101,41,7,114,7,0,0,0,114,35,0, +- 0,0,114,85,1,0,0,114,169,0,0,0,114,220,0,0, +- 0,114,217,0,0,0,114,60,1,0,0,41,6,114,11,1, +- 0,0,114,158,0,0,0,114,35,0,0,0,114,12,1,0, +- 0,114,177,0,0,0,114,84,1,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,13,1,0,0,142, +- 7,0,0,115,26,0,0,0,0,4,12,1,12,1,21,1, +- 12,1,4,1,15,1,9,1,6,3,9,1,24,1,4,2, +- 7,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, +- 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, +- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,41,0, +- 0,0,124,0,0,106,0,0,124,1,0,124,2,0,131,2, +- 0,125,3,0,124,3,0,100,1,0,107,8,0,114,34,0, +- 100,1,0,83,124,3,0,106,1,0,83,41,2,122,170,102, +- 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, +- 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, +- 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, +- 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, +- 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, +- 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, +- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, +- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, +- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, +- 10,32,32,32,32,32,32,32,32,78,41,2,114,13,1,0, +- 0,114,169,0,0,0,41,4,114,11,1,0,0,114,158,0, +- 0,0,114,35,0,0,0,114,177,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,14,1,0,0, +- 164,7,0,0,115,8,0,0,0,0,8,18,1,12,1,4, +- 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, +- 110,100,95,109,111,100,117,108,101,41,12,114,57,0,0,0, +- 114,56,0,0,0,114,58,0,0,0,114,59,0,0,0,114, +- 18,1,0,0,114,74,1,0,0,114,79,1,0,0,114,80, +- 1,0,0,114,81,1,0,0,114,85,1,0,0,114,13,1, +- 0,0,114,14,1,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,73,1,0,0, +- 49,7,0,0,115,22,0,0,0,12,2,6,2,18,8,18, +- 17,18,17,18,15,3,1,18,31,3,1,21,21,3,1,114, +- 73,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,3,0,0,0,64,0,0,0,115,133,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, +- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, +- 5,0,132,0,0,90,5,0,101,6,0,90,7,0,100,6, +- 0,100,7,0,132,0,0,90,8,0,100,8,0,100,9,0, +- 132,0,0,90,9,0,100,10,0,100,11,0,100,12,0,132, +- 1,0,90,10,0,100,13,0,100,14,0,132,0,0,90,11, +- 0,101,12,0,100,15,0,100,16,0,132,0,0,131,1,0, +- 90,13,0,100,17,0,100,18,0,132,0,0,90,14,0,100, +- 10,0,83,41,19,218,10,70,105,108,101,70,105,110,100,101, +- 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105, +- 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114, +- 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101, +- 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101, +- 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102, +- 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32, +- 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101, +- 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, +- 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97, +- 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32, +- 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99, +- 2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, +- 7,0,0,0,115,122,0,0,0,103,0,0,125,3,0,120, +- 52,0,124,2,0,68,93,44,0,92,2,0,137,0,0,125, +- 4,0,124,3,0,106,0,0,135,0,0,102,1,0,100,1, +- 0,100,2,0,134,0,0,124,4,0,68,131,1,0,131,1, +- 0,1,113,13,0,87,124,3,0,124,0,0,95,1,0,124, +- 1,0,112,79,0,100,3,0,124,0,0,95,2,0,100,6, +- 0,124,0,0,95,3,0,116,4,0,131,0,0,124,0,0, +- 95,5,0,116,4,0,131,0,0,124,0,0,95,6,0,100, +- 5,0,83,41,7,122,154,73,110,105,116,105,97,108,105,122, +- 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, +- 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, +- 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, +- 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, +- 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, +- 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, +- 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, +- 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, +- 46,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, +- 0,0,51,0,0,0,115,27,0,0,0,124,0,0,93,17, +- 0,125,1,0,124,1,0,136,0,0,102,2,0,86,1,113, +- 3,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2, +- 114,22,0,0,0,114,57,1,0,0,41,1,114,169,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,77,0,0,0, +- 193,7,0,0,115,2,0,0,0,6,0,122,38,70,105,108, ++ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, ++ 0,0,0,67,0,0,0,115,113,0,0,0,116,0,0,124, ++ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, ++ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, ++ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, ++ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, ++ 0,114,85,0,116,3,0,124,1,0,124,3,0,131,2,0, ++ 83,116,4,0,124,1,0,100,0,0,131,2,0,125,5,0, ++ 124,4,0,124,5,0,95,5,0,124,5,0,83,41,2,78, ++ 114,166,0,0,0,41,6,114,61,0,0,0,114,166,0,0, ++ 0,114,15,1,0,0,114,174,0,0,0,114,217,0,0,0, ++ 114,221,0,0,0,41,6,114,12,1,0,0,114,159,0,0, ++ 0,114,78,1,0,0,114,170,0,0,0,114,171,0,0,0, ++ 114,178,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101, ++ 116,95,115,112,101,99,95,7,0,0,115,18,0,0,0,0, ++ 4,15,1,24,2,15,1,6,1,12,1,13,1,15,1,9, ++ 1,122,27,80,97,116,104,70,105,110,100,101,114,46,95,108, ++ 101,103,97,99,121,95,103,101,116,95,115,112,101,99,78,99, ++ 4,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, ++ 67,0,0,0,115,252,0,0,0,103,0,0,125,4,0,120, ++ 239,0,124,2,0,68,93,203,0,125,5,0,116,0,0,124, ++ 5,0,116,1,0,116,2,0,102,2,0,131,2,0,115,46, ++ 0,113,13,0,110,0,0,124,0,0,106,3,0,124,5,0, ++ 131,1,0,125,6,0,124,6,0,100,1,0,107,9,0,114, ++ 13,0,116,4,0,124,6,0,100,2,0,131,2,0,114,109, ++ 0,124,6,0,106,5,0,124,1,0,124,3,0,131,2,0, ++ 125,7,0,110,18,0,124,0,0,106,6,0,124,1,0,124, ++ 6,0,131,2,0,125,7,0,124,7,0,100,1,0,107,8, ++ 0,114,145,0,113,13,0,110,0,0,124,7,0,106,7,0, ++ 100,1,0,107,9,0,114,164,0,124,7,0,83,124,7,0, ++ 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, ++ 200,0,116,9,0,100,3,0,131,1,0,130,1,0,110,0, ++ 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, ++ 0,113,13,0,87,116,11,0,124,1,0,100,1,0,131,2, ++ 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, ++ 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, ++ 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, ++ 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, ++ 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, ++ 103,101,32,110,97,109,101,46,78,114,14,1,0,0,122,19, ++ 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, ++ 100,101,114,41,12,114,193,0,0,0,218,3,115,116,114,218, ++ 5,98,121,116,101,115,114,81,1,0,0,114,61,0,0,0, ++ 114,14,1,0,0,114,82,1,0,0,114,170,0,0,0,114, ++ 221,0,0,0,114,154,0,0,0,114,198,0,0,0,114,217, ++ 0,0,0,41,9,114,12,1,0,0,114,159,0,0,0,114, ++ 36,0,0,0,114,13,1,0,0,218,14,110,97,109,101,115, ++ 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, ++ 114,78,1,0,0,114,178,0,0,0,114,171,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,9, ++ 95,103,101,116,95,115,112,101,99,110,7,0,0,115,40,0, ++ 0,0,0,5,6,1,13,1,21,1,6,1,15,1,12,1, ++ 15,1,21,2,18,1,12,1,6,1,15,1,4,1,9,1, ++ 12,1,15,5,20,2,15,1,9,1,122,20,80,97,116,104, ++ 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, ++ 99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0, ++ 0,67,0,0,0,115,143,0,0,0,124,2,0,100,1,0, ++ 107,8,0,114,24,0,116,0,0,106,1,0,125,2,0,110, ++ 0,0,124,0,0,106,2,0,124,1,0,124,2,0,124,3, ++ 0,131,3,0,125,4,0,124,4,0,100,1,0,107,8,0, ++ 114,61,0,100,1,0,83,124,4,0,106,3,0,100,1,0, ++ 107,8,0,114,135,0,124,4,0,106,4,0,125,5,0,124, ++ 5,0,114,128,0,100,2,0,124,4,0,95,5,0,116,6, ++ 0,124,1,0,124,5,0,124,0,0,106,2,0,131,3,0, ++ 124,4,0,95,4,0,124,4,0,83,100,1,0,83,110,4, ++ 0,124,4,0,83,100,1,0,83,41,3,122,98,102,105,110, ++ 100,32,116,104,101,32,109,111,100,117,108,101,32,111,110,32, ++ 115,121,115,46,112,97,116,104,32,111,114,32,39,112,97,116, ++ 104,39,32,98,97,115,101,100,32,111,110,32,115,121,115,46, ++ 112,97,116,104,95,104,111,111,107,115,32,97,110,100,10,32, ++ 32,32,32,32,32,32,32,115,121,115,46,112,97,116,104,95, ++ 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,78, ++ 90,9,110,97,109,101,115,112,97,99,101,41,7,114,8,0, ++ 0,0,114,36,0,0,0,114,86,1,0,0,114,170,0,0, ++ 0,114,221,0,0,0,114,218,0,0,0,114,61,1,0,0, ++ 41,6,114,12,1,0,0,114,159,0,0,0,114,36,0,0, ++ 0,114,13,1,0,0,114,178,0,0,0,114,85,1,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 14,1,0,0,142,7,0,0,115,26,0,0,0,0,4,12, ++ 1,12,1,21,1,12,1,4,1,15,1,9,1,6,3,9, ++ 1,24,1,4,2,7,2,122,20,80,97,116,104,70,105,110, ++ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, ++ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, ++ 0,0,115,41,0,0,0,124,0,0,106,0,0,124,1,0, ++ 124,2,0,131,2,0,125,3,0,124,3,0,100,1,0,107, ++ 8,0,114,34,0,100,1,0,83,124,3,0,106,1,0,83, ++ 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, ++ 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, ++ 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, ++ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, ++ 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, ++ 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, ++ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, ++ 2,114,14,1,0,0,114,170,0,0,0,41,4,114,12,1, ++ 0,0,114,159,0,0,0,114,36,0,0,0,114,178,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,15,1,0,0,164,7,0,0,115,8,0,0,0,0,8, ++ 18,1,12,1,4,1,122,22,80,97,116,104,70,105,110,100, ++ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, ++ 114,58,0,0,0,114,57,0,0,0,114,59,0,0,0,114, ++ 60,0,0,0,114,19,1,0,0,114,75,1,0,0,114,80, ++ 1,0,0,114,81,1,0,0,114,82,1,0,0,114,86,1, ++ 0,0,114,14,1,0,0,114,15,1,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,74,1,0,0,49,7,0,0,115,22,0,0,0,12,2, ++ 6,2,18,8,18,17,18,17,18,15,3,1,18,31,3,1, ++ 21,21,3,1,114,74,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,133, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, ++ 0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,0, ++ 90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,100, ++ 8,0,100,9,0,132,0,0,90,9,0,100,10,0,100,11, ++ 0,100,12,0,132,1,0,90,10,0,100,13,0,100,14,0, ++ 132,0,0,90,11,0,101,12,0,100,15,0,100,16,0,132, ++ 0,0,131,1,0,90,13,0,100,17,0,100,18,0,132,0, ++ 0,90,14,0,100,10,0,83,41,19,218,10,70,105,108,101, ++ 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, ++ 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, ++ 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, ++ 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, ++ 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, ++ 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, ++ 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, ++ 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, ++ 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, ++ 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, ++ 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, ++ 32,32,32,32,99,2,0,0,0,0,0,0,0,5,0,0, ++ 0,5,0,0,0,7,0,0,0,115,122,0,0,0,103,0, ++ 0,125,3,0,120,52,0,124,2,0,68,93,44,0,92,2, ++ 0,137,0,0,125,4,0,124,3,0,106,0,0,135,0,0, ++ 102,1,0,100,1,0,100,2,0,134,0,0,124,4,0,68, ++ 131,1,0,131,1,0,1,113,13,0,87,124,3,0,124,0, ++ 0,95,1,0,124,1,0,112,79,0,100,3,0,124,0,0, ++ 95,2,0,100,6,0,124,0,0,95,3,0,116,4,0,131, ++ 0,0,124,0,0,95,5,0,116,4,0,131,0,0,124,0, ++ 0,95,6,0,100,5,0,83,41,7,122,154,73,110,105,116, ++ 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, ++ 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, ++ 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, ++ 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, ++ 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, ++ 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, ++ 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, ++ 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, ++ 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,3,0,0,0,51,0,0,0,115,27,0,0,0, ++ 124,0,0,93,17,0,125,1,0,124,1,0,136,0,0,102, ++ 2,0,86,1,113,3,0,100,0,0,83,41,1,78,114,5, ++ 0,0,0,41,2,114,23,0,0,0,114,58,1,0,0,41, ++ 1,114,170,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,78,0,0,0,193,7,0,0,115,2,0,0,0,6,0, ++ 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, ++ 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, ++ 103,101,110,101,120,112,114,62,114,117,0,0,0,114,30,0, ++ 0,0,78,114,139,0,0,0,41,7,114,198,0,0,0,218, ++ 8,95,108,111,97,100,101,114,115,114,36,0,0,0,218,11, ++ 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, ++ 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, ++ 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, ++ 104,101,41,5,114,72,0,0,0,114,36,0,0,0,218,14, ++ 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, ++ 108,111,97,100,101,114,115,114,128,0,0,0,114,5,0,0, ++ 0,41,1,114,170,0,0,0,114,6,0,0,0,114,73,0, ++ 0,0,187,7,0,0,115,16,0,0,0,0,4,6,1,19, ++ 1,36,1,9,2,15,1,9,1,12,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, +- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, +- 112,114,62,114,116,0,0,0,114,29,0,0,0,78,114,138, +- 0,0,0,41,7,114,197,0,0,0,218,8,95,108,111,97, +- 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, +- 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, +- 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, +- 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, +- 71,0,0,0,114,35,0,0,0,218,14,108,111,97,100,101, +- 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, +- 114,115,114,127,0,0,0,114,4,0,0,0,41,1,114,169, +- 0,0,0,114,5,0,0,0,114,72,0,0,0,187,7,0, +- 0,115,16,0,0,0,0,4,6,1,19,1,36,1,9,2, +- 15,1,9,1,12,1,122,19,70,105,108,101,70,105,110,100, +- 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, +- 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, +- 115,13,0,0,0,100,3,0,124,0,0,95,0,0,100,2, +- 0,83,41,4,122,31,73,110,118,97,108,105,100,97,116,101, +- 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, +- 116,105,109,101,46,114,29,0,0,0,78,114,138,0,0,0, +- 41,1,114,88,1,0,0,41,1,114,71,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,74,1, +- 0,0,201,7,0,0,115,2,0,0,0,0,2,122,28,70, +- 105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,105, +- 100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,0, +- 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, +- 115,59,0,0,0,124,0,0,106,0,0,124,1,0,131,1, +- 0,125,2,0,124,2,0,100,1,0,107,8,0,114,37,0, +- 100,1,0,103,0,0,102,2,0,83,124,2,0,106,1,0, +- 124,2,0,106,2,0,112,55,0,103,0,0,102,2,0,83, +- 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32, +- 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101, +- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, +- 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112, +- 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107, +- 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101, +- 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108, +- 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41, +- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, +- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, +- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, +- 10,32,32,32,32,32,32,32,32,78,41,3,114,13,1,0, +- 0,114,169,0,0,0,114,220,0,0,0,41,3,114,71,0, +- 0,0,114,158,0,0,0,114,177,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,165,0,0,0, +- 207,7,0,0,115,8,0,0,0,0,7,15,1,12,1,10, +- 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, +- 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, +- 0,0,7,0,0,0,7,0,0,0,67,0,0,0,115,40, +- 0,0,0,124,1,0,124,2,0,124,3,0,131,2,0,125, +- 6,0,116,0,0,124,2,0,124,3,0,100,1,0,124,6, +- 0,100,2,0,124,4,0,131,2,2,83,41,3,78,114,169, +- 0,0,0,114,220,0,0,0,41,1,114,239,0,0,0,41, +- 7,114,71,0,0,0,114,243,0,0,0,114,158,0,0,0, +- 114,35,0,0,0,114,228,0,0,0,114,12,1,0,0,114, +- 169,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,85,1,0,0,219,7,0,0,115,6,0,0, +- 0,0,1,15,1,18,1,122,20,70,105,108,101,70,105,110, +- 100,101,114,46,95,103,101,116,95,115,112,101,99,78,99,3, +- 0,0,0,0,0,0,0,14,0,0,0,15,0,0,0,67, +- 0,0,0,115,240,1,0,0,100,1,0,125,3,0,124,1, +- 0,106,0,0,100,2,0,131,1,0,100,3,0,25,125,4, +- 0,121,34,0,116,1,0,124,0,0,106,2,0,112,49,0, +- 116,3,0,106,4,0,131,0,0,131,1,0,106,5,0,125, +- 5,0,87,110,24,0,4,116,6,0,107,10,0,114,85,0, +- 1,1,1,100,10,0,125,5,0,89,110,1,0,88,124,5, +- 0,124,0,0,106,7,0,107,3,0,114,123,0,124,0,0, +- 106,8,0,131,0,0,1,124,5,0,124,0,0,95,7,0, +- 110,0,0,116,9,0,131,0,0,114,156,0,124,0,0,106, +- 10,0,125,6,0,124,4,0,106,11,0,131,0,0,125,7, +- 0,110,15,0,124,0,0,106,12,0,125,6,0,124,4,0, +- 125,7,0,124,7,0,124,6,0,107,6,0,114,51,1,116, +- 13,0,124,0,0,106,2,0,124,4,0,131,2,0,125,8, +- 0,120,103,0,124,0,0,106,14,0,68,93,77,0,92,2, +- 0,125,9,0,125,10,0,100,5,0,124,9,0,23,125,11, +- 0,116,13,0,124,8,0,124,11,0,131,2,0,125,12,0, +- 116,15,0,124,12,0,131,1,0,114,211,0,124,0,0,106, +- 16,0,124,10,0,124,1,0,124,12,0,124,8,0,103,1, +- 0,124,2,0,131,5,0,83,113,211,0,87,116,17,0,124, +- 8,0,131,1,0,125,3,0,110,0,0,120,126,0,124,0, +- 0,106,14,0,68,93,115,0,92,2,0,125,9,0,125,10, +- 0,116,13,0,124,0,0,106,2,0,124,4,0,124,9,0, +- 23,131,2,0,125,12,0,116,18,0,100,6,0,106,19,0, +- 124,12,0,131,1,0,100,7,0,100,3,0,131,1,1,1, +- 124,7,0,124,9,0,23,124,6,0,107,6,0,114,61,1, +- 116,15,0,124,12,0,131,1,0,114,176,1,124,0,0,106, +- 16,0,124,10,0,124,1,0,124,12,0,100,8,0,124,2, +- 0,131,5,0,83,113,61,1,113,61,1,87,124,3,0,114, +- 236,1,116,18,0,100,9,0,106,19,0,124,8,0,131,1, +- 0,131,1,0,1,116,20,0,124,1,0,100,8,0,131,2, +- 0,125,13,0,124,8,0,103,1,0,124,13,0,95,21,0, +- 124,13,0,83,100,8,0,83,41,11,122,125,84,114,121,32, +- 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, +- 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, +- 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, +- 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, +- 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, +- 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, +- 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, +- 111,114,116,105,111,110,115,41,46,70,114,116,0,0,0,114, +- 115,0,0,0,114,29,0,0,0,114,72,0,0,0,122,9, +- 116,114,121,105,110,103,32,123,125,114,145,0,0,0,78,122, +- 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, +- 97,99,101,32,102,111,114,32,123,125,114,138,0,0,0,41, +- 22,114,32,0,0,0,114,39,0,0,0,114,35,0,0,0, +- 114,3,0,0,0,114,45,0,0,0,114,53,1,0,0,114, +- 40,0,0,0,114,88,1,0,0,218,11,95,102,105,108,108, +- 95,99,97,99,104,101,114,6,0,0,0,114,91,1,0,0, +- 114,139,0,0,0,114,90,1,0,0,114,28,0,0,0,114, +- 87,1,0,0,114,44,0,0,0,114,85,1,0,0,114,46, +- 0,0,0,114,152,0,0,0,114,47,0,0,0,114,216,0, +- 0,0,114,220,0,0,0,41,14,114,71,0,0,0,114,158, +- 0,0,0,114,12,1,0,0,90,12,105,115,95,110,97,109, +- 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, +- 117,108,101,114,183,0,0,0,90,5,99,97,99,104,101,90, +- 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, +- 97,115,101,95,112,97,116,104,114,57,1,0,0,114,243,0, +- 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, +- 101,90,9,102,117,108,108,95,112,97,116,104,114,177,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,13,1,0,0,224,7,0,0,115,68,0,0,0,0,3, +- 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, +- 12,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, +- 22,1,10,1,15,1,12,1,32,4,15,2,22,1,22,1, +- 25,1,16,1,12,1,32,1,6,1,19,1,15,1,12,1, +- 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, +- 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, +- 0,9,0,0,0,13,0,0,0,67,0,0,0,115,14,1, +- 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, +- 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, +- 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, +- 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, +- 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, +- 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, +- 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, +- 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, +- 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, +- 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, +- 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, +- 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, +- 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, +- 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, +- 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, +- 114,10,1,100,4,0,100,5,0,132,0,0,124,2,0,68, +- 131,1,0,124,0,0,95,17,0,110,0,0,100,6,0,83, +- 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, +- 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, +- 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, +- 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, +- 114,101,99,116,111,114,121,46,114,0,0,0,0,114,116,0, +- 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,28, +- 0,0,0,104,0,0,124,0,0,93,18,0,125,1,0,124, +- 1,0,106,0,0,131,0,0,146,2,0,113,6,0,83,114, +- 4,0,0,0,41,1,114,139,0,0,0,41,2,114,22,0, +- 0,0,90,2,102,110,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,250,9,60,115,101,116,99,111,109,112,62, +- 42,8,0,0,115,2,0,0,0,9,0,122,41,70,105,108, +- 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, +- 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, +- 116,99,111,109,112,62,78,41,18,114,35,0,0,0,114,3, +- 0,0,0,90,7,108,105,115,116,100,105,114,114,45,0,0, +- 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, +- 114,114,111,114,218,15,80,101,114,109,105,115,115,105,111,110, +- 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, +- 116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,8, +- 0,0,0,114,9,0,0,0,114,89,1,0,0,114,90,1, +- 0,0,114,121,0,0,0,114,47,0,0,0,114,139,0,0, +- 0,218,3,97,100,100,114,10,0,0,0,114,91,1,0,0, +- 41,9,114,71,0,0,0,114,35,0,0,0,90,8,99,111, +- 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, +- 102,102,105,120,95,99,111,110,116,101,110,116,115,114,71,1, +- 0,0,114,67,0,0,0,114,65,1,0,0,114,57,1,0, +- 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,93,1,0,0,13, +- 8,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, +- 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, +- 27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,101, +- 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, +- 104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,3, +- 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, +- 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, +- 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, +- 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, +- 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, +- 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, +- 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, +- 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, +- 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, +- 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, +- 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, +- 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, +- 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, +- 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, +- 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, +- 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, +- 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, +- 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, +- 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, +- 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, +- 0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0, +- 131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124, +- 0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0, +- 0,136,1,0,140,1,0,83,41,3,122,45,80,97,116,104, +- 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, +- 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, +- 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, +- 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, +- 115,117,112,112,111,114,116,101,100,114,35,0,0,0,41,2, +- 114,46,0,0,0,114,153,0,0,0,41,1,114,35,0,0, +- 0,41,2,114,11,1,0,0,114,92,1,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,24,112,97,116,104,95,104,111, +- 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, +- 114,54,8,0,0,115,6,0,0,0,0,2,12,1,21,1, +- 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, +- 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, +- 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, +- 108,101,70,105,110,100,101,114,114,4,0,0,0,41,3,114, +- 11,1,0,0,114,92,1,0,0,114,99,1,0,0,114,4, +- 0,0,0,41,2,114,11,1,0,0,114,92,1,0,0,114, +- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,44, +- 8,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, +- 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, +- 111,107,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, +- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, +- 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, +- 41,41,2,114,47,0,0,0,114,35,0,0,0,41,1,114, +- 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,101,0,0,0,62,8,0,0,115,2,0,0, +- 0,0,1,122,19,70,105,108,101,70,105,110,100,101,114,46, +- 95,95,114,101,112,114,95,95,41,15,114,57,0,0,0,114, +- 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,72, +- 0,0,0,114,74,1,0,0,114,172,0,0,0,114,14,1, +- 0,0,114,165,0,0,0,114,85,1,0,0,114,13,1,0, +- 0,114,93,1,0,0,114,18,1,0,0,114,100,1,0,0, +- 114,101,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,86,1,0,0,178,7, +- 0,0,115,20,0,0,0,12,7,6,2,12,14,12,4,6, +- 2,12,12,12,5,15,45,12,31,18,18,114,86,1,0,0, +- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,46,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, +- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, +- 0,90,5,0,100,6,0,83,41,7,218,18,95,73,109,112, +- 111,114,116,76,111,99,107,67,111,110,116,101,120,116,122,36, +- 67,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32, +- 102,111,114,32,116,104,101,32,105,109,112,111,114,116,32,108, +- 111,99,107,46,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,1,0,0,0,67,0,0,0,115,14,0,0,0,116,0, +- 0,106,1,0,131,0,0,1,100,1,0,83,41,2,122,24, +- 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, +- 114,116,32,108,111,99,107,46,78,41,2,114,106,0,0,0, +- 114,3,1,0,0,41,1,114,71,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,75,0,0,0, +- 72,8,0,0,115,2,0,0,0,0,2,122,28,95,73,109, +- 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, +- 95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,0, +- 0,0,4,0,0,0,1,0,0,0,67,0,0,0,115,14, ++ 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, ++ 0,67,0,0,0,115,13,0,0,0,100,3,0,124,0,0, ++ 95,0,0,100,2,0,83,41,4,122,31,73,110,118,97,108, ++ 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, ++ 111,114,121,32,109,116,105,109,101,46,114,30,0,0,0,78, ++ 114,139,0,0,0,41,1,114,89,1,0,0,41,1,114,72, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,75,1,0,0,201,7,0,0,115,2,0,0,0, ++ 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, ++ 0,67,0,0,0,115,59,0,0,0,124,0,0,106,0,0, ++ 124,1,0,131,1,0,125,2,0,124,2,0,100,1,0,107, ++ 8,0,114,37,0,100,1,0,103,0,0,102,2,0,83,124, ++ 2,0,106,1,0,124,2,0,106,2,0,112,55,0,103,0, ++ 0,102,2,0,83,41,2,122,197,84,114,121,32,116,111,32, ++ 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, ++ 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, ++ 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, ++ 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, ++ 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, ++ 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, ++ 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, ++ 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, ++ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, ++ 3,114,14,1,0,0,114,170,0,0,0,114,221,0,0,0, ++ 41,3,114,72,0,0,0,114,159,0,0,0,114,178,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,166,0,0,0,207,7,0,0,115,8,0,0,0,0,7, ++ 15,1,12,1,10,1,122,22,70,105,108,101,70,105,110,100, ++ 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,6, ++ 0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,67, ++ 0,0,0,115,40,0,0,0,124,1,0,124,2,0,124,3, ++ 0,131,2,0,125,6,0,116,0,0,124,2,0,124,3,0, ++ 100,1,0,124,6,0,100,2,0,124,4,0,131,2,2,83, ++ 41,3,78,114,170,0,0,0,114,221,0,0,0,41,1,114, ++ 240,0,0,0,41,7,114,72,0,0,0,114,244,0,0,0, ++ 114,159,0,0,0,114,36,0,0,0,114,229,0,0,0,114, ++ 13,1,0,0,114,170,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,86,1,0,0,219,7,0, ++ 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, ++ 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, ++ 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, ++ 15,0,0,0,67,0,0,0,115,240,1,0,0,100,1,0, ++ 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, ++ 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, ++ 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, ++ 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, ++ 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, ++ 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, ++ 123,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, ++ 0,0,95,7,0,110,0,0,116,9,0,131,0,0,114,156, ++ 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, ++ 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, ++ 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, ++ 0,114,51,1,116,13,0,124,0,0,106,2,0,124,4,0, ++ 131,2,0,125,8,0,120,103,0,124,0,0,106,14,0,68, ++ 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, ++ 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, ++ 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,211, ++ 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, ++ 124,8,0,103,1,0,124,2,0,131,5,0,83,113,211,0, ++ 87,116,17,0,124,8,0,131,1,0,125,3,0,110,0,0, ++ 120,126,0,124,0,0,106,14,0,68,93,115,0,92,2,0, ++ 125,9,0,125,10,0,116,13,0,124,0,0,106,2,0,124, ++ 4,0,124,9,0,23,131,2,0,125,12,0,116,18,0,100, ++ 6,0,106,19,0,124,12,0,131,1,0,100,7,0,100,3, ++ 0,131,1,1,1,124,7,0,124,9,0,23,124,6,0,107, ++ 6,0,114,61,1,116,15,0,124,12,0,131,1,0,114,176, ++ 1,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, ++ 100,8,0,124,2,0,131,5,0,83,113,61,1,113,61,1, ++ 87,124,3,0,114,236,1,116,18,0,100,9,0,106,19,0, ++ 124,8,0,131,1,0,131,1,0,1,116,20,0,124,1,0, ++ 100,8,0,131,2,0,125,13,0,124,8,0,103,1,0,124, ++ 13,0,95,21,0,124,13,0,83,100,8,0,83,41,11,122, ++ 125,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, ++ 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, ++ 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, ++ 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, ++ 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, ++ 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, ++ 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, ++ 45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,114, ++ 117,0,0,0,114,116,0,0,0,114,30,0,0,0,114,73, ++ 0,0,0,122,9,116,114,121,105,110,103,32,123,125,114,146, ++ 0,0,0,78,122,25,112,111,115,115,105,98,108,101,32,110, ++ 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,114, ++ 139,0,0,0,41,22,114,33,0,0,0,114,40,0,0,0, ++ 114,36,0,0,0,114,4,0,0,0,114,46,0,0,0,114, ++ 54,1,0,0,114,41,0,0,0,114,89,1,0,0,218,11, ++ 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, ++ 114,92,1,0,0,114,140,0,0,0,114,91,1,0,0,114, ++ 29,0,0,0,114,88,1,0,0,114,45,0,0,0,114,86, ++ 1,0,0,114,47,0,0,0,114,153,0,0,0,114,48,0, ++ 0,0,114,217,0,0,0,114,221,0,0,0,41,14,114,72, ++ 0,0,0,114,159,0,0,0,114,13,1,0,0,90,12,105, ++ 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, ++ 108,95,109,111,100,117,108,101,114,184,0,0,0,90,5,99, ++ 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, ++ 108,101,90,9,98,97,115,101,95,112,97,116,104,114,58,1, ++ 0,0,114,244,0,0,0,90,13,105,110,105,116,95,102,105, ++ 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, ++ 104,114,178,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,14,1,0,0,224,7,0,0,115,68, ++ 0,0,0,0,3,6,1,19,1,3,1,34,1,13,1,11, ++ 1,15,1,10,1,12,2,9,1,9,1,15,2,9,1,6, ++ 2,12,1,18,1,22,1,10,1,15,1,12,1,32,4,15, ++ 2,22,1,22,1,25,1,16,1,12,1,32,1,6,1,19, ++ 1,15,1,12,1,4,1,122,20,70,105,108,101,70,105,110, ++ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, ++ 0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,0, ++ 0,0,115,14,1,0,0,124,0,0,106,0,0,125,1,0, ++ 121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,116, ++ 1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,110, ++ 33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,107, ++ 10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,110, ++ 1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,131, ++ 1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,0, ++ 0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,0, ++ 120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,0, ++ 106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,125, ++ 6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,13, ++ 0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,0, ++ 125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,106, ++ 15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,0, ++ 124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,116, ++ 16,0,131,1,0,114,10,1,100,4,0,100,5,0,132,0, ++ 0,124,2,0,68,131,1,0,124,0,0,95,17,0,110,0, ++ 0,100,6,0,83,41,7,122,68,70,105,108,108,32,116,104, ++ 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, ++ 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, ++ 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, ++ 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, ++ 0,0,114,117,0,0,0,122,5,123,125,46,123,125,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83, ++ 0,0,0,115,28,0,0,0,104,0,0,124,0,0,93,18, ++ 0,125,1,0,124,1,0,106,0,0,131,0,0,146,2,0, ++ 113,6,0,83,114,5,0,0,0,41,1,114,140,0,0,0, ++ 41,2,114,23,0,0,0,90,2,102,110,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,250,9,60,115,101,116, ++ 99,111,109,112,62,42,8,0,0,115,2,0,0,0,9,0, ++ 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, ++ 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, ++ 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,36, ++ 0,0,0,114,4,0,0,0,90,7,108,105,115,116,100,105, ++ 114,114,46,0,0,0,218,17,70,105,108,101,78,111,116,70, ++ 111,117,110,100,69,114,114,111,114,218,15,80,101,114,109,105, ++ 115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65, ++ 68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,8, ++ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,90,1, ++ 0,0,114,91,1,0,0,114,122,0,0,0,114,48,0,0, ++ 0,114,140,0,0,0,218,3,97,100,100,114,11,0,0,0, ++ 114,92,1,0,0,41,9,114,72,0,0,0,114,36,0,0, ++ 0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119, ++ 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, ++ 116,115,114,72,1,0,0,114,68,0,0,0,114,66,1,0, ++ 0,114,58,1,0,0,90,8,110,101,119,95,110,97,109,101, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 94,1,0,0,13,8,0,0,115,34,0,0,0,0,2,9, ++ 1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13, ++ 1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122, ++ 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, ++ 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, ++ 3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0, ++ 0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0, ++ 134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0, ++ 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, ++ 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, ++ 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, ++ 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, ++ 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, ++ 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, ++ 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, ++ 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, ++ 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, ++ 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, ++ 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, ++ 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, ++ 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, ++ 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, ++ 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, ++ 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, ++ 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, ++ 32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,4,0,0,0,19,0,0,0,115,46,0,0,0,116, ++ 0,0,124,0,0,131,1,0,115,33,0,116,1,0,100,1, ++ 0,100,2,0,124,0,0,131,1,1,130,1,0,110,0,0, ++ 136,0,0,124,0,0,136,1,0,140,1,0,83,41,3,122, ++ 45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105, ++ 109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101, ++ 114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30, ++ 111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115, ++ 32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,36, ++ 0,0,0,41,2,114,47,0,0,0,114,154,0,0,0,41, ++ 1,114,36,0,0,0,41,2,114,12,1,0,0,114,93,1, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,24,112,97, ++ 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, ++ 70,105,110,100,101,114,54,8,0,0,115,6,0,0,0,0, ++ 2,12,1,21,1,122,54,70,105,108,101,70,105,110,100,101, ++ 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, ++ 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, ++ 111,114,95,70,105,108,101,70,105,110,100,101,114,114,5,0, ++ 0,0,41,3,114,12,1,0,0,114,93,1,0,0,114,100, ++ 1,0,0,114,5,0,0,0,41,2,114,12,1,0,0,114, ++ 93,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, ++ 104,111,111,107,44,8,0,0,115,4,0,0,0,0,10,21, ++ 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, ++ 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, ++ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, ++ 83,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, ++ 40,123,33,114,125,41,41,2,114,48,0,0,0,114,36,0, ++ 0,0,41,1,114,72,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,102,0,0,0,62,8,0, ++ 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, ++ 110,100,101,114,46,95,95,114,101,112,114,95,95,41,15,114, ++ 58,0,0,0,114,57,0,0,0,114,59,0,0,0,114,60, ++ 0,0,0,114,73,0,0,0,114,75,1,0,0,114,173,0, ++ 0,0,114,15,1,0,0,114,166,0,0,0,114,86,1,0, ++ 0,114,14,1,0,0,114,94,1,0,0,114,19,1,0,0, ++ 114,101,1,0,0,114,102,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,87, ++ 1,0,0,178,7,0,0,115,20,0,0,0,12,7,6,2, ++ 12,14,12,4,6,2,12,12,12,5,15,45,12,31,18,18, ++ 114,87,1,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,46,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, ++ 100,5,0,132,0,0,90,5,0,100,6,0,83,41,7,218, ++ 18,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, ++ 101,120,116,122,36,67,111,110,116,101,120,116,32,109,97,110, ++ 97,103,101,114,32,102,111,114,32,116,104,101,32,105,109,112, ++ 111,114,116,32,108,111,99,107,46,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,14, + 0,0,0,116,0,0,106,1,0,131,0,0,1,100,1,0, +- 83,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, +- 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, +- 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, +- 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, +- 46,78,41,2,114,106,0,0,0,114,107,0,0,0,41,4, +- 114,71,0,0,0,90,8,101,120,99,95,116,121,112,101,90, +- 9,101,120,99,95,118,97,108,117,101,90,13,101,120,99,95, +- 116,114,97,99,101,98,97,99,107,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,81,0,0,0,76,8,0, +- 0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,114, +- 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, +- 120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,0, +- 0,0,114,58,0,0,0,114,59,0,0,0,114,75,0,0, +- 0,114,81,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,101,1,0,0,68, +- 8,0,0,115,6,0,0,0,12,2,6,2,12,4,114,101, +- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, +- 4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,0, +- 106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,0, +- 125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,107, +- 0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,1, +- 0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,0, +- 0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,0, +- 131,2,0,83,124,4,0,83,41,6,122,50,82,101,115,111, +- 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, +- 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, +- 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,116, +- 0,0,0,114,29,0,0,0,122,50,97,116,116,101,109,112, +- 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, +- 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, +- 101,118,101,108,32,112,97,99,107,97,103,101,114,84,0,0, +- 0,122,5,123,125,46,123,125,41,4,114,34,0,0,0,114, +- 31,0,0,0,114,133,0,0,0,114,47,0,0,0,41,5, +- 114,67,0,0,0,218,7,112,97,99,107,97,103,101,218,5, +- 108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,115, +- 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,13,95,114,101,115,111,108,118,101,95,110,97,109,101,81, +- 8,0,0,115,10,0,0,0,0,2,22,1,18,1,15,1, +- 10,1,114,104,1,0,0,99,3,0,0,0,0,0,0,0, +- 4,0,0,0,3,0,0,0,67,0,0,0,115,47,0,0, +- 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, +- 125,3,0,124,3,0,100,0,0,107,8,0,114,34,0,100, +- 0,0,83,116,1,0,124,1,0,124,3,0,131,2,0,83, +- 41,1,78,41,2,114,14,1,0,0,114,173,0,0,0,41, +- 4,114,77,1,0,0,114,67,0,0,0,114,35,0,0,0, +- 114,169,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, +- 95,108,101,103,97,99,121,90,8,0,0,115,8,0,0,0, +- 0,3,18,1,12,1,4,1,114,105,1,0,0,99,3,0, +- 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, +- 0,0,115,34,1,0,0,116,0,0,106,1,0,115,28,0, +- 116,2,0,106,3,0,100,1,0,116,4,0,131,2,0,1, +- 110,0,0,124,0,0,116,0,0,106,5,0,107,6,0,125, +- 3,0,120,240,0,116,0,0,106,1,0,68,93,225,0,125, +- 4,0,116,6,0,131,0,0,143,93,0,1,121,13,0,124, +- 4,0,106,7,0,125,5,0,87,110,54,0,4,116,8,0, +- 107,10,0,114,138,0,1,1,1,116,9,0,124,4,0,124, +- 0,0,124,1,0,131,3,0,125,6,0,124,6,0,100,2, +- 0,107,8,0,114,134,0,119,53,0,110,0,0,89,110,19, +- 0,88,124,5,0,124,0,0,124,1,0,124,2,0,131,3, +- 0,125,6,0,87,100,2,0,81,88,124,6,0,100,2,0, +- 107,9,0,114,53,0,124,3,0,12,114,15,1,124,0,0, +- 116,0,0,106,5,0,107,6,0,114,15,1,116,0,0,106, +- 5,0,124,0,0,25,125,7,0,121,13,0,124,7,0,106, +- 10,0,125,8,0,87,110,22,0,4,116,8,0,107,10,0, +- 114,247,0,1,1,1,124,6,0,83,89,113,19,1,88,124, +- 8,0,100,2,0,107,8,0,114,8,1,124,6,0,83,124, +- 8,0,83,113,22,1,124,6,0,83,113,53,0,113,53,0, +- 87,100,2,0,83,100,2,0,83,41,3,122,23,70,105,110, +- 100,32,97,32,109,111,100,117,108,101,39,115,32,108,111,97, +- 100,101,114,46,122,22,115,121,115,46,109,101,116,97,95,112, +- 97,116,104,32,105,115,32,101,109,112,116,121,78,41,11,114, +- 7,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114, +- 166,0,0,0,114,167,0,0,0,114,168,0,0,0,114,73, +- 0,0,0,114,101,1,0,0,114,13,1,0,0,114,209,0, +- 0,0,114,105,1,0,0,114,208,0,0,0,41,9,114,67, +- 0,0,0,114,35,0,0,0,114,12,1,0,0,90,9,105, +- 115,95,114,101,108,111,97,100,114,77,1,0,0,114,13,1, +- 0,0,114,177,0,0,0,114,179,0,0,0,114,208,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,10,95,102,105,110,100,95,115,112,101,99,99,8,0,0, +- 115,48,0,0,0,0,2,9,1,19,4,15,1,16,1,10, +- 1,3,1,13,1,13,1,18,1,12,1,11,2,24,1,12, +- 2,22,1,13,1,3,1,13,1,13,4,9,2,12,1,4, +- 2,7,2,11,2,114,107,1,0,0,99,3,0,0,0,0, +- 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, +- 194,0,0,0,116,0,0,124,0,0,116,1,0,131,2,0, +- 115,45,0,116,2,0,100,1,0,106,3,0,116,4,0,124, +- 0,0,131,1,0,131,1,0,131,1,0,130,1,0,110,0, +- 0,124,2,0,100,2,0,107,0,0,114,72,0,116,5,0, +- 100,3,0,131,1,0,130,1,0,110,0,0,124,1,0,114, +- 156,0,116,0,0,124,1,0,116,1,0,131,2,0,115,108, +- 0,116,2,0,100,4,0,131,1,0,130,1,0,113,156,0, +- 124,1,0,116,6,0,106,7,0,107,7,0,114,156,0,100, +- 5,0,125,3,0,116,8,0,124,3,0,106,3,0,124,1, +- 0,131,1,0,131,1,0,130,1,0,113,156,0,110,0,0, +- 124,0,0,12,114,190,0,124,2,0,100,2,0,107,2,0, +- 114,190,0,116,5,0,100,6,0,131,1,0,130,1,0,110, +- 0,0,100,7,0,83,41,8,122,28,86,101,114,105,102,121, +- 32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,34, +- 115,97,110,101,34,46,122,31,109,111,100,117,108,101,32,110, +- 97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,44, +- 32,110,111,116,32,123,125,114,84,0,0,0,122,18,108,101, +- 118,101,108,32,109,117,115,116,32,98,101,32,62,61,32,48, +- 122,31,95,95,112,97,99,107,97,103,101,95,95,32,110,111, +- 116,32,115,101,116,32,116,111,32,97,32,115,116,114,105,110, +- 103,122,61,80,97,114,101,110,116,32,109,111,100,117,108,101, +- 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, +- 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, +- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, +- 122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,110, +- 97,109,101,78,41,9,114,192,0,0,0,114,82,1,0,0, +- 218,9,84,121,112,101,69,114,114,111,114,114,47,0,0,0, +- 114,66,0,0,0,114,133,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, +- 114,41,4,114,67,0,0,0,114,102,1,0,0,114,103,1, +- 0,0,114,171,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,13,95,115,97,110,105,116,121,95, +- 99,104,101,99,107,139,8,0,0,115,24,0,0,0,0,2, +- 15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1, +- 6,2,27,1,19,1,114,110,1,0,0,122,16,78,111,32, +- 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, +- 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, +- 12,0,0,0,67,0,0,0,115,52,1,0,0,100,0,0, +- 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, +- 2,0,25,125,3,0,124,3,0,114,178,0,124,3,0,116, +- 1,0,106,2,0,107,7,0,114,62,0,116,3,0,124,1, +- 0,124,3,0,131,2,0,1,110,0,0,124,0,0,116,1, +- 0,106,2,0,107,6,0,114,88,0,116,1,0,106,2,0, +- 124,0,0,25,83,116,1,0,106,2,0,124,3,0,25,125, +- 4,0,121,13,0,124,4,0,106,4,0,125,2,0,87,113, +- 178,0,4,116,5,0,107,10,0,114,174,0,1,1,1,116, +- 6,0,100,3,0,23,106,7,0,124,0,0,124,3,0,131, +- 2,0,125,5,0,116,8,0,124,5,0,100,4,0,124,0, +- 0,131,1,1,130,1,0,89,113,178,0,88,110,0,0,116, +- 9,0,124,0,0,124,2,0,131,2,0,125,6,0,124,6, +- 0,100,0,0,107,8,0,114,235,0,116,8,0,116,6,0, +- 106,7,0,124,0,0,131,1,0,100,4,0,124,0,0,131, +- 1,1,130,1,0,110,18,0,116,10,0,124,6,0,131,1, +- 0,106,11,0,131,0,0,125,7,0,124,3,0,114,48,1, +- 116,1,0,106,2,0,124,3,0,25,125,4,0,116,12,0, +- 124,4,0,124,0,0,106,0,0,100,1,0,131,1,0,100, +- 5,0,25,124,7,0,131,3,0,1,110,0,0,124,7,0, +- 83,41,6,78,114,116,0,0,0,114,84,0,0,0,122,23, +- 59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32, +- 112,97,99,107,97,103,101,114,67,0,0,0,114,115,0,0, +- 0,41,13,114,32,0,0,0,114,7,0,0,0,114,73,0, +- 0,0,114,114,0,0,0,114,246,0,0,0,114,209,0,0, +- 0,218,8,95,69,82,82,95,77,83,71,114,47,0,0,0, +- 114,153,0,0,0,114,107,1,0,0,114,174,0,0,0,114, +- 6,1,0,0,114,61,0,0,0,41,8,114,67,0,0,0, +- 218,7,105,109,112,111,114,116,95,114,35,0,0,0,114,233, +- 0,0,0,90,13,112,97,114,101,110,116,95,109,111,100,117, +- 108,101,114,171,0,0,0,114,177,0,0,0,114,179,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,100, +- 95,117,110,108,111,99,107,101,100,159,8,0,0,115,42,0, +- 0,0,0,1,6,1,19,1,6,1,15,1,16,2,15,1, +- 11,1,13,1,3,1,13,1,13,1,22,1,26,1,15,1, +- 12,1,30,2,18,1,6,2,13,1,32,1,114,113,1,0, +- 0,99,2,0,0,0,0,0,0,0,2,0,0,0,10,0, +- 0,0,67,0,0,0,115,36,0,0,0,116,0,0,124,0, +- 0,131,1,0,143,18,0,1,116,1,0,124,0,0,124,1, +- 0,131,2,0,83,87,100,1,0,81,88,100,1,0,83,41, +- 2,122,54,70,105,110,100,32,97,110,100,32,108,111,97,100, +- 32,116,104,101,32,109,111,100,117,108,101,44,32,97,110,100, +- 32,114,101,108,101,97,115,101,32,116,104,101,32,105,109,112, +- 111,114,116,32,108,111,99,107,46,78,41,2,114,103,0,0, +- 0,114,113,1,0,0,41,2,114,67,0,0,0,114,112,1, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, +- 100,186,8,0,0,115,4,0,0,0,0,2,13,1,114,114, +- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, +- 4,0,0,0,67,0,0,0,115,172,0,0,0,116,0,0, +- 124,0,0,124,1,0,124,2,0,131,3,0,1,124,2,0, +- 100,1,0,107,4,0,114,49,0,116,1,0,124,0,0,124, +- 1,0,124,2,0,131,3,0,125,0,0,110,0,0,116,2, +- 0,106,3,0,131,0,0,1,124,0,0,116,4,0,106,5, +- 0,107,7,0,114,87,0,116,6,0,124,0,0,116,7,0, +- 131,2,0,83,116,4,0,106,5,0,124,0,0,25,125,3, +- 0,124,3,0,100,2,0,107,8,0,114,158,0,116,2,0, +- 106,8,0,131,0,0,1,100,3,0,106,9,0,124,0,0, +- 131,1,0,125,4,0,116,10,0,124,4,0,100,4,0,124, +- 0,0,131,1,1,130,1,0,110,0,0,116,11,0,124,0, +- 0,131,1,0,1,124,3,0,83,41,5,97,50,1,0,0, +- 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, +- 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, +- 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, +- 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, +- 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, +- 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, +- 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, +- 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, +- 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, +- 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, +- 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, +- 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, +- 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, +- 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, +- 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, +- 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, +- 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, +- 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, +- 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, +- 32,32,114,84,0,0,0,78,122,40,105,109,112,111,114,116, +- 32,111,102,32,123,125,32,104,97,108,116,101,100,59,32,78, +- 111,110,101,32,105,110,32,115,121,115,46,109,111,100,117,108, +- 101,115,114,67,0,0,0,41,12,114,110,1,0,0,114,104, +- 1,0,0,114,106,0,0,0,114,3,1,0,0,114,7,0, +- 0,0,114,73,0,0,0,114,114,1,0,0,218,11,95,103, +- 99,100,95,105,109,112,111,114,116,114,107,0,0,0,114,47, +- 0,0,0,114,153,0,0,0,114,112,0,0,0,41,5,114, +- 67,0,0,0,114,102,1,0,0,114,103,1,0,0,114,179, +- 0,0,0,114,151,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,115,1,0,0,192,8,0,0, +- 115,26,0,0,0,0,9,16,1,12,1,21,1,10,1,15, +- 1,13,1,13,1,12,1,10,2,15,1,21,1,10,1,114, +- 115,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, +- 0,17,0,0,0,67,0,0,0,115,1,1,0,0,116,0, +- 0,124,0,0,100,1,0,131,2,0,114,253,0,100,2,0, +- 124,1,0,107,6,0,114,89,0,116,1,0,124,1,0,131, +- 1,0,125,1,0,124,1,0,106,2,0,100,2,0,131,1, +- 0,1,116,0,0,124,0,0,100,3,0,131,2,0,114,89, +- 0,124,1,0,106,3,0,124,0,0,106,4,0,131,1,0, +- 1,113,89,0,110,0,0,120,161,0,124,1,0,68,93,150, +- 0,125,3,0,116,0,0,124,0,0,124,3,0,131,2,0, +- 115,96,0,100,4,0,106,5,0,124,0,0,106,6,0,124, +- 3,0,131,2,0,125,4,0,121,17,0,116,7,0,124,2, +- 0,124,4,0,131,2,0,1,87,113,246,0,4,116,8,0, +- 107,10,0,114,242,0,1,125,5,0,1,122,53,0,116,9, +- 0,124,5,0,131,1,0,106,10,0,116,11,0,131,1,0, +- 114,221,0,124,5,0,106,12,0,124,4,0,107,2,0,114, +- 221,0,119,96,0,113,221,0,110,0,0,130,0,0,87,89, +- 100,5,0,100,5,0,125,5,0,126,5,0,88,113,246,0, +- 88,113,96,0,113,96,0,87,110,0,0,124,0,0,83,41, +- 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, +- 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, +- 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, +- 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, +- 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, +- 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, +- 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, +- 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, +- 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, +- 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, +- 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, +- 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, +- 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, +- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, +- 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, +- 32,114,246,0,0,0,250,1,42,218,7,95,95,97,108,108, +- 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, +- 0,114,245,0,0,0,218,6,114,101,109,111,118,101,114,197, +- 0,0,0,114,117,1,0,0,114,47,0,0,0,114,57,0, +- 0,0,114,114,0,0,0,114,153,0,0,0,114,82,1,0, +- 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, +- 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,179, +- 0,0,0,218,8,102,114,111,109,108,105,115,116,114,112,1, +- 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, +- 109,101,114,40,1,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, +- 102,114,111,109,108,105,115,116,216,8,0,0,115,34,0,0, +- 0,0,10,15,1,12,1,12,1,13,1,15,1,22,1,13, +- 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,9, +- 1,32,1,114,121,1,0,0,99,1,0,0,0,0,0,0, +- 0,2,0,0,0,2,0,0,0,67,0,0,0,115,78,0, +- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, +- 0,124,1,0,100,2,0,107,8,0,114,74,0,124,0,0, +- 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, +- 114,74,0,124,1,0,106,1,0,100,5,0,131,1,0,100, +- 6,0,25,125,1,0,113,74,0,110,0,0,124,1,0,83, +- 41,7,122,167,67,97,108,99,117,108,97,116,101,32,119,104, +- 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, +- 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, +- 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, +- 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, +- 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, +- 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, +- 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, +- 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, +- 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, +- 110,111,119,110,46,10,10,32,32,32,32,114,250,0,0,0, +- 78,114,57,0,0,0,114,246,0,0,0,114,116,0,0,0, +- 114,84,0,0,0,41,2,114,93,0,0,0,114,32,0,0, +- 0,41,2,218,7,103,108,111,98,97,108,115,114,102,1,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, +- 101,95,95,248,8,0,0,115,12,0,0,0,0,7,15,1, +- 12,1,10,1,12,1,25,1,114,123,1,0,0,99,0,0, +- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, +- 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, +- 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, +- 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, +- 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, +- 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, +- 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, +- 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, +- 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, +- 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, +- 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, +- 32,41,7,114,56,1,0,0,114,106,0,0,0,218,18,101, +- 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, +- 115,114,8,1,0,0,114,134,0,0,0,114,7,1,0,0, +- 114,232,0,0,0,41,3,90,10,101,120,116,101,110,115,105, +- 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, +- 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,240,0,0,0,7,9,0,0,115,8,0, +- 0,0,0,5,18,1,12,1,12,1,114,240,0,0,0,99, +- 5,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, +- 67,0,0,0,115,227,0,0,0,124,4,0,100,1,0,107, +- 2,0,114,27,0,116,0,0,124,0,0,131,1,0,125,5, +- 0,110,54,0,124,1,0,100,2,0,107,9,0,114,45,0, +- 124,1,0,110,3,0,105,0,0,125,6,0,116,1,0,124, +- 6,0,131,1,0,125,7,0,116,0,0,124,0,0,124,7, +- 0,124,4,0,131,3,0,125,5,0,124,3,0,115,207,0, +- 124,4,0,100,1,0,107,2,0,114,122,0,116,0,0,124, +- 0,0,106,2,0,100,3,0,131,1,0,100,1,0,25,131, +- 1,0,83,124,0,0,115,132,0,124,5,0,83,116,3,0, +- 124,0,0,131,1,0,116,3,0,124,0,0,106,2,0,100, +- 3,0,131,1,0,100,1,0,25,131,1,0,24,125,8,0, +- 116,4,0,106,5,0,124,5,0,106,6,0,100,2,0,116, +- 3,0,124,5,0,106,6,0,131,1,0,124,8,0,24,133, +- 2,0,25,25,83,110,16,0,116,7,0,124,5,0,124,3, +- 0,116,0,0,131,3,0,83,100,2,0,83,41,4,97,214, +- 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, +- 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, +- 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, +- 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, +- 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, +- 116,32,105,115,32,111,99,99,117,114,105,110,103,32,102,114, +- 111,109,10,32,32,32,32,116,111,32,104,97,110,100,108,101, +- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, +- 115,46,32,84,104,101,32,39,108,111,99,97,108,115,39,32, +- 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111, +- 114,101,100,46,32,84,104,101,10,32,32,32,32,39,102,114, +- 111,109,108,105,115,116,39,32,97,114,103,117,109,101,110,116, +- 32,115,112,101,99,105,102,105,101,115,32,119,104,97,116,32, +- 115,104,111,117,108,100,32,101,120,105,115,116,32,97,115,32, +- 97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,104, +- 101,32,109,111,100,117,108,101,10,32,32,32,32,98,101,105, +- 110,103,32,105,109,112,111,114,116,101,100,32,40,101,46,103, +- 46,32,96,96,102,114,111,109,32,109,111,100,117,108,101,32, +- 105,109,112,111,114,116,32,60,102,114,111,109,108,105,115,116, +- 62,96,96,41,46,32,32,84,104,101,32,39,108,101,118,101, +- 108,39,10,32,32,32,32,97,114,103,117,109,101,110,116,32, +- 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,112, +- 97,99,107,97,103,101,32,108,111,99,97,116,105,111,110,32, +- 116,111,32,105,109,112,111,114,116,32,102,114,111,109,32,105, +- 110,32,97,32,114,101,108,97,116,105,118,101,10,32,32,32, +- 32,105,109,112,111,114,116,32,40,101,46,103,46,32,96,96, +- 102,114,111,109,32,46,46,112,107,103,32,105,109,112,111,114, +- 116,32,109,111,100,96,96,32,119,111,117,108,100,32,104,97, +- 118,101,32,97,32,39,108,101,118,101,108,39,32,111,102,32, +- 50,41,46,10,10,32,32,32,32,114,84,0,0,0,78,114, +- 116,0,0,0,41,8,114,115,1,0,0,114,123,1,0,0, +- 114,121,0,0,0,114,31,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,114,57,0,0,0,114,121,1,0,0,41,9, +- 114,67,0,0,0,114,122,1,0,0,218,6,108,111,99,97, +- 108,115,114,120,1,0,0,114,103,1,0,0,114,179,0,0, +- 0,90,8,103,108,111,98,97,108,115,95,114,102,1,0,0, +- 90,7,99,117,116,95,111,102,102,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,10,95,95,105,109,112,111, +- 114,116,95,95,18,9,0,0,115,26,0,0,0,0,11,12, +- 1,15,2,24,1,12,1,18,1,6,3,12,1,23,1,6, +- 1,4,4,35,3,40,2,114,126,1,0,0,99,1,0,0, +- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, +- 0,115,68,0,0,0,116,0,0,106,1,0,124,0,0,131, +- 1,0,125,1,0,124,1,0,100,0,0,107,8,0,114,46, +- 0,116,2,0,100,1,0,124,0,0,23,131,1,0,130,1, +- 0,110,0,0,116,3,0,124,1,0,131,1,0,125,2,0, +- 124,2,0,106,4,0,131,0,0,83,41,2,78,122,25,110, +- 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, +- 101,32,110,97,109,101,100,32,41,5,114,10,1,0,0,114, +- 13,1,0,0,114,153,0,0,0,114,174,0,0,0,114,6, +- 1,0,0,41,3,114,67,0,0,0,114,177,0,0,0,114, +- 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, +- 111,109,95,110,97,109,101,53,9,0,0,115,10,0,0,0, +- 0,1,15,1,12,1,19,1,12,1,114,127,1,0,0,99, +- 2,0,0,0,0,0,0,0,19,0,0,0,12,0,0,0, +- 67,0,0,0,115,232,2,0,0,124,1,0,97,0,0,124, +- 0,0,97,1,0,116,1,0,106,2,0,106,3,0,114,33, +- 0,116,4,0,97,5,0,110,6,0,116,6,0,97,5,0, +- 116,7,0,116,1,0,131,1,0,125,2,0,120,138,0,116, +- 1,0,106,8,0,106,9,0,131,0,0,68,93,121,0,92, +- 2,0,125,3,0,125,4,0,116,10,0,124,4,0,124,2, +- 0,131,2,0,114,67,0,124,3,0,116,1,0,106,11,0, +- 107,6,0,114,118,0,116,12,0,125,5,0,110,27,0,116, +- 0,0,106,13,0,124,3,0,131,1,0,114,67,0,116,14, +- 0,125,5,0,110,3,0,113,67,0,116,15,0,124,4,0, +- 124,5,0,131,2,0,125,6,0,116,16,0,124,6,0,131, +- 1,0,125,7,0,124,7,0,106,17,0,124,4,0,131,1, +- 0,1,113,67,0,113,67,0,87,116,1,0,106,8,0,116, +- 18,0,25,125,8,0,120,73,0,100,26,0,68,93,65,0, +- 125,9,0,124,9,0,116,1,0,106,8,0,107,7,0,114, +- 248,0,116,19,0,124,9,0,131,1,0,125,10,0,110,13, +- 0,116,1,0,106,8,0,124,9,0,25,125,10,0,116,20, +- 0,124,8,0,124,9,0,124,10,0,131,3,0,1,113,212, +- 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, +- 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, +- 125,11,0,120,146,0,124,11,0,68,93,126,0,92,2,0, +- 125,12,0,125,13,0,116,21,0,100,9,0,100,10,0,132, +- 0,0,124,13,0,68,131,1,0,131,1,0,115,108,1,116, +- 22,0,130,1,0,124,13,0,100,11,0,25,125,14,0,124, +- 12,0,116,1,0,106,8,0,107,6,0,114,150,1,116,1, +- 0,106,8,0,124,12,0,25,125,15,0,80,113,65,1,121, +- 17,0,116,19,0,124,12,0,131,1,0,125,15,0,80,87, +- 113,65,1,4,116,23,0,107,10,0,114,190,1,1,1,1, +- 119,65,1,89,113,65,1,88,113,65,1,87,116,23,0,100, +- 12,0,131,1,0,130,1,0,116,20,0,124,8,0,100,13, +- 0,124,15,0,131,3,0,1,116,20,0,124,8,0,100,14, +- 0,124,14,0,131,3,0,1,116,20,0,124,8,0,100,15, +- 0,100,16,0,106,24,0,124,13,0,131,1,0,131,3,0, +- 1,121,16,0,116,19,0,100,17,0,131,1,0,125,16,0, +- 87,110,24,0,4,116,23,0,107,10,0,114,50,2,1,1, +- 1,100,18,0,125,16,0,89,110,1,0,88,116,20,0,124, +- 8,0,100,17,0,124,16,0,131,3,0,1,116,19,0,100, +- 19,0,131,1,0,125,17,0,116,20,0,124,8,0,100,19, +- 0,124,17,0,131,3,0,1,124,12,0,100,7,0,107,2, +- 0,114,138,2,116,19,0,100,20,0,131,1,0,125,18,0, +- 116,20,0,124,8,0,100,21,0,124,18,0,131,3,0,1, +- 110,0,0,116,20,0,124,8,0,100,22,0,116,25,0,131, +- 0,0,131,3,0,1,116,26,0,106,27,0,116,0,0,106, +- 28,0,131,0,0,131,1,0,1,124,12,0,100,7,0,107, +- 2,0,114,228,2,116,29,0,106,30,0,100,23,0,131,1, +- 0,1,100,24,0,116,26,0,107,6,0,114,228,2,100,25, +- 0,116,31,0,95,32,0,113,228,2,110,0,0,100,18,0, +- 83,41,27,122,250,83,101,116,117,112,32,105,109,112,111,114, +- 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, +- 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, +- 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, +- 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, +- 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, +- 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, +- 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, +- 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, +- 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, +- 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, +- 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, +- 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, +- 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, +- 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, +- 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114, +- 49,0,0,0,114,166,0,0,0,218,8,98,117,105,108,116, +- 105,110,115,114,191,0,0,0,90,5,112,111,115,105,120,250, +- 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, +- 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, +- 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, +- 100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31, +- 0,0,0,41,2,114,22,0,0,0,114,130,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77, +- 0,0,0,105,9,0,0,115,2,0,0,0,6,0,122,25, +- 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, +- 60,103,101,110,101,120,112,114,62,114,84,0,0,0,122,30, +- 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, +- 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, +- 0,0,0,114,25,0,0,0,114,21,0,0,0,114,30,0, +- 0,0,114,85,0,0,0,78,114,111,0,0,0,90,6,119, +- 105,110,114,101,103,114,23,1,0,0,114,6,0,0,0,122, +- 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, +- 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, +- 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, +- 104,97,108,41,33,114,106,0,0,0,114,7,0,0,0,114, +- 117,0,0,0,114,118,0,0,0,114,120,0,0,0,114,232, +- 0,0,0,114,119,0,0,0,114,66,0,0,0,114,73,0, +- 0,0,218,5,105,116,101,109,115,114,192,0,0,0,114,157, +- 0,0,0,114,10,1,0,0,114,162,0,0,0,114,19,1, +- 0,0,114,247,0,0,0,114,174,0,0,0,114,254,0,0, +- 0,114,57,0,0,0,114,127,1,0,0,114,61,0,0,0, +- 218,3,97,108,108,114,100,0,0,0,114,153,0,0,0,114, +- 26,0,0,0,114,11,0,0,0,114,59,1,0,0,114,197, +- 0,0,0,114,124,1,0,0,114,134,0,0,0,114,223,0, +- 0,0,114,22,1,0,0,114,26,1,0,0,41,19,218,10, +- 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, +- 95,109,111,100,117,108,101,90,11,109,111,100,117,108,101,95, +- 116,121,112,101,114,67,0,0,0,114,179,0,0,0,114,169, +- 0,0,0,114,177,0,0,0,114,178,0,0,0,90,11,115, +- 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, +- 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, +- 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, +- 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, +- 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, +- 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, +- 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, +- 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, +- 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,6,95,115,101,116,117,112,61,9,0,0,115,108, +- 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, +- 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, +- 1,12,1,20,3,13,1,13,1,15,1,15,2,13,1,20, +- 3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3, +- 1,12,1,5,1,13,1,12,2,12,1,16,1,16,1,25, +- 3,3,1,16,1,13,2,11,1,16,3,12,1,16,3,12, +- 1,12,1,19,3,19,1,19,1,12,1,13,1,12,1,114, +- 136,1,0,0,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,3,0,0,0,67,0,0,0,115,136,0,0,0,116,0, +- 0,124,0,0,124,1,0,131,2,0,1,116,1,0,131,0, +- 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, +- 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, +- 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, +- 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, +- 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, +- 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, +- 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, +- 0,1,100,2,0,83,41,3,122,50,73,110,115,116,97,108, +- 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, +- 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, +- 110,32,111,102,32,105,109,112,111,114,116,46,114,130,1,0, +- 0,78,41,15,114,136,1,0,0,114,240,0,0,0,114,7, +- 0,0,0,114,78,1,0,0,114,197,0,0,0,114,86,1, +- 0,0,114,100,1,0,0,114,106,1,0,0,114,223,0,0, +- 0,114,10,1,0,0,114,19,1,0,0,114,3,0,0,0, +- 114,57,0,0,0,114,22,1,0,0,114,73,1,0,0,41, +- 3,114,134,1,0,0,114,135,1,0,0,90,17,115,117,112, +- 112,111,114,116,101,100,95,108,111,97,100,101,114,115,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95, +- 105,110,115,116,97,108,108,148,9,0,0,115,16,0,0,0, +- 0,2,13,1,9,1,28,1,16,1,16,1,15,1,19,1, +- 114,137,1,0,0,41,3,122,3,119,105,110,114,1,0,0, +- 0,114,2,0,0,0,41,92,114,59,0,0,0,114,10,0, +- 0,0,114,11,0,0,0,114,17,0,0,0,114,19,0,0, +- 0,114,28,0,0,0,114,38,0,0,0,114,39,0,0,0, +- 114,43,0,0,0,114,44,0,0,0,114,46,0,0,0,114, +- 55,0,0,0,114,65,0,0,0,114,68,0,0,0,114,66, +- 0,0,0,218,8,95,95,99,111,100,101,95,95,114,193,0, +- 0,0,114,69,0,0,0,114,109,0,0,0,114,92,0,0, +- 0,114,99,0,0,0,114,82,0,0,0,114,83,0,0,0, +- 114,102,0,0,0,114,103,0,0,0,114,105,0,0,0,114, +- 112,0,0,0,114,114,0,0,0,114,15,0,0,0,114,185, +- 0,0,0,114,14,0,0,0,114,18,0,0,0,90,17,95, +- 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, +- 114,125,0,0,0,114,134,0,0,0,114,119,0,0,0,114, +- 120,0,0,0,114,132,0,0,0,114,135,0,0,0,114,142, +- 0,0,0,114,144,0,0,0,114,152,0,0,0,114,156,0, +- 0,0,114,161,0,0,0,114,164,0,0,0,114,172,0,0, +- 0,114,180,0,0,0,114,190,0,0,0,114,195,0,0,0, +- 114,198,0,0,0,114,203,0,0,0,114,211,0,0,0,114, +- 212,0,0,0,114,216,0,0,0,114,173,0,0,0,218,6, +- 111,98,106,101,99,116,114,241,0,0,0,114,239,0,0,0, +- 114,247,0,0,0,114,174,0,0,0,114,9,1,0,0,114, +- 10,1,0,0,114,19,1,0,0,114,22,1,0,0,114,32, +- 1,0,0,114,33,1,0,0,114,48,1,0,0,114,8,1, +- 0,0,114,7,1,0,0,114,59,1,0,0,114,56,1,0, +- 0,114,60,1,0,0,114,251,0,0,0,114,73,1,0,0, +- 114,86,1,0,0,114,101,1,0,0,114,104,1,0,0,114, +- 105,1,0,0,114,107,1,0,0,114,110,1,0,0,114,119, +- 1,0,0,114,111,1,0,0,114,113,1,0,0,114,114,1, +- 0,0,114,115,1,0,0,114,121,1,0,0,114,123,1,0, +- 0,114,240,0,0,0,114,126,1,0,0,114,127,1,0,0, +- 114,136,1,0,0,114,137,1,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, +- 60,109,111,100,117,108,101,62,8,0,0,0,115,170,0,0, +- 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, +- 10,12,9,12,5,12,7,15,22,12,8,12,4,15,4,19, +- 20,6,2,6,3,22,4,19,68,19,21,19,19,12,19,12, +- 20,12,114,22,1,18,2,6,2,9,2,9,1,9,2,15, +- 27,12,23,12,19,12,12,18,8,12,18,12,11,12,11,12, +- 17,12,16,21,55,21,12,18,10,12,14,12,36,19,27,19, +- 106,24,22,9,3,12,1,15,63,18,45,19,230,15,25,19, +- 70,19,71,19,63,19,24,22,110,19,41,25,43,25,16,6, +- 3,19,57,19,57,19,38,19,129,19,146,19,13,12,9,12, +- 9,15,40,12,17,6,1,10,2,12,27,12,6,18,24,12, +- 32,12,15,12,11,24,35,12,8,12,87, ++ 83,41,2,122,24,65,99,113,117,105,114,101,32,116,104,101, ++ 32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,2, ++ 114,107,0,0,0,114,4,1,0,0,41,1,114,72,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,76,0,0,0,72,8,0,0,115,2,0,0,0,0,2, ++ 122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,110, ++ 116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,4, ++ 0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,67, ++ 0,0,0,115,14,0,0,0,116,0,0,106,1,0,131,0, ++ 0,1,100,1,0,83,41,2,122,60,82,101,108,101,97,115, ++ 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, ++ 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, ++ 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, ++ 116,105,111,110,115,46,78,41,2,114,107,0,0,0,114,108, ++ 0,0,0,41,4,114,72,0,0,0,90,8,101,120,99,95, ++ 116,121,112,101,90,9,101,120,99,95,118,97,108,117,101,90, ++ 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,82,0, ++ 0,0,76,8,0,0,115,2,0,0,0,0,2,122,27,95, ++ 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, ++ 116,46,95,95,101,120,105,116,95,95,78,41,6,114,58,0, ++ 0,0,114,57,0,0,0,114,59,0,0,0,114,60,0,0, ++ 0,114,76,0,0,0,114,82,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 102,1,0,0,68,8,0,0,115,6,0,0,0,12,2,6, ++ 2,12,4,114,102,1,0,0,99,3,0,0,0,0,0,0, ++ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,91,0, ++ 0,0,124,1,0,106,0,0,100,1,0,124,2,0,100,2, ++ 0,24,131,2,0,125,3,0,116,1,0,124,3,0,131,1, ++ 0,124,2,0,107,0,0,114,55,0,116,2,0,100,3,0, ++ 131,1,0,130,1,0,110,0,0,124,3,0,100,4,0,25, ++ 125,4,0,124,0,0,114,87,0,100,5,0,106,3,0,124, ++ 4,0,124,0,0,131,2,0,83,124,4,0,83,41,6,122, ++ 50,82,101,115,111,108,118,101,32,97,32,114,101,108,97,116, ++ 105,118,101,32,109,111,100,117,108,101,32,110,97,109,101,32, ++ 116,111,32,97,110,32,97,98,115,111,108,117,116,101,32,111, ++ 110,101,46,114,117,0,0,0,114,30,0,0,0,122,50,97, ++ 116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118, ++ 101,32,105,109,112,111,114,116,32,98,101,121,111,110,100,32, ++ 116,111,112,45,108,101,118,101,108,32,112,97,99,107,97,103, ++ 101,114,85,0,0,0,122,5,123,125,46,123,125,41,4,114, ++ 35,0,0,0,114,32,0,0,0,114,134,0,0,0,114,48, ++ 0,0,0,41,5,114,68,0,0,0,218,7,112,97,99,107, ++ 97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,115, ++ 90,4,98,97,115,101,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,13,95,114,101,115,111,108,118,101,95, ++ 110,97,109,101,81,8,0,0,115,10,0,0,0,0,2,22, ++ 1,18,1,15,1,10,1,114,105,1,0,0,99,3,0,0, ++ 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, ++ 0,115,47,0,0,0,124,0,0,106,0,0,124,1,0,124, ++ 2,0,131,2,0,125,3,0,124,3,0,100,0,0,107,8, ++ 0,114,34,0,100,0,0,83,116,1,0,124,1,0,124,3, ++ 0,131,2,0,83,41,1,78,41,2,114,15,1,0,0,114, ++ 174,0,0,0,41,4,114,78,1,0,0,114,68,0,0,0, ++ 114,36,0,0,0,114,170,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, ++ 95,115,112,101,99,95,108,101,103,97,99,121,90,8,0,0, ++ 115,8,0,0,0,0,3,18,1,12,1,4,1,114,106,1, ++ 0,0,99,3,0,0,0,0,0,0,0,9,0,0,0,26, ++ 0,0,0,67,0,0,0,115,34,1,0,0,116,0,0,106, ++ 1,0,115,28,0,116,2,0,106,3,0,100,1,0,116,4, ++ 0,131,2,0,1,110,0,0,124,0,0,116,0,0,106,5, ++ 0,107,6,0,125,3,0,120,240,0,116,0,0,106,1,0, ++ 68,93,225,0,125,4,0,116,6,0,131,0,0,143,93,0, ++ 1,121,13,0,124,4,0,106,7,0,125,5,0,87,110,54, ++ 0,4,116,8,0,107,10,0,114,138,0,1,1,1,116,9, ++ 0,124,4,0,124,0,0,124,1,0,131,3,0,125,6,0, ++ 124,6,0,100,2,0,107,8,0,114,134,0,119,53,0,110, ++ 0,0,89,110,19,0,88,124,5,0,124,0,0,124,1,0, ++ 124,2,0,131,3,0,125,6,0,87,100,2,0,81,88,124, ++ 6,0,100,2,0,107,9,0,114,53,0,124,3,0,12,114, ++ 15,1,124,0,0,116,0,0,106,5,0,107,6,0,114,15, ++ 1,116,0,0,106,5,0,124,0,0,25,125,7,0,121,13, ++ 0,124,7,0,106,10,0,125,8,0,87,110,22,0,4,116, ++ 8,0,107,10,0,114,247,0,1,1,1,124,6,0,83,89, ++ 113,19,1,88,124,8,0,100,2,0,107,8,0,114,8,1, ++ 124,6,0,83,124,8,0,83,113,22,1,124,6,0,83,113, ++ 53,0,113,53,0,87,100,2,0,83,100,2,0,83,41,3, ++ 122,23,70,105,110,100,32,97,32,109,111,100,117,108,101,39, ++ 115,32,108,111,97,100,101,114,46,122,22,115,121,115,46,109, ++ 101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116, ++ 121,78,41,11,114,8,0,0,0,218,9,109,101,116,97,95, ++ 112,97,116,104,114,167,0,0,0,114,168,0,0,0,114,169, ++ 0,0,0,114,74,0,0,0,114,102,1,0,0,114,14,1, ++ 0,0,114,210,0,0,0,114,106,1,0,0,114,209,0,0, ++ 0,41,9,114,68,0,0,0,114,36,0,0,0,114,13,1, ++ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,78,1, ++ 0,0,114,14,1,0,0,114,178,0,0,0,114,180,0,0, ++ 0,114,209,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,10,95,102,105,110,100,95,115,112,101, ++ 99,99,8,0,0,115,48,0,0,0,0,2,9,1,19,4, ++ 15,1,16,1,10,1,3,1,13,1,13,1,18,1,12,1, ++ 11,2,24,1,12,2,22,1,13,1,3,1,13,1,13,4, ++ 9,2,12,1,4,2,7,2,11,2,114,108,1,0,0,99, ++ 3,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, ++ 67,0,0,0,115,194,0,0,0,116,0,0,124,0,0,116, ++ 1,0,131,2,0,115,45,0,116,2,0,100,1,0,106,3, ++ 0,116,4,0,124,0,0,131,1,0,131,1,0,131,1,0, ++ 130,1,0,110,0,0,124,2,0,100,2,0,107,0,0,114, ++ 72,0,116,5,0,100,3,0,131,1,0,130,1,0,110,0, ++ 0,124,1,0,114,156,0,116,0,0,124,1,0,116,1,0, ++ 131,2,0,115,108,0,116,2,0,100,4,0,131,1,0,130, ++ 1,0,113,156,0,124,1,0,116,6,0,106,7,0,107,7, ++ 0,114,156,0,100,5,0,125,3,0,116,8,0,124,3,0, ++ 106,3,0,124,1,0,131,1,0,131,1,0,130,1,0,113, ++ 156,0,110,0,0,124,0,0,12,114,190,0,124,2,0,100, ++ 2,0,107,2,0,114,190,0,116,5,0,100,6,0,131,1, ++ 0,130,1,0,110,0,0,100,7,0,83,41,8,122,28,86, ++ 101,114,105,102,121,32,97,114,103,117,109,101,110,116,115,32, ++ 97,114,101,32,34,115,97,110,101,34,46,122,31,109,111,100, ++ 117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101, ++ 32,115,116,114,44,32,110,111,116,32,123,125,114,85,0,0, ++ 0,122,18,108,101,118,101,108,32,109,117,115,116,32,98,101, ++ 32,62,61,32,48,122,31,95,95,112,97,99,107,97,103,101, ++ 95,95,32,110,111,116,32,115,101,116,32,116,111,32,97,32, ++ 115,116,114,105,110,103,122,61,80,97,114,101,110,116,32,109, ++ 111,100,117,108,101,32,123,33,114,125,32,110,111,116,32,108, ++ 111,97,100,101,100,44,32,99,97,110,110,111,116,32,112,101, ++ 114,102,111,114,109,32,114,101,108,97,116,105,118,101,32,105, ++ 109,112,111,114,116,122,17,69,109,112,116,121,32,109,111,100, ++ 117,108,101,32,110,97,109,101,78,41,9,114,193,0,0,0, ++ 114,83,1,0,0,218,9,84,121,112,101,69,114,114,111,114, ++ 114,48,0,0,0,114,67,0,0,0,114,134,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,218,11,83,121,115,116,101, ++ 109,69,114,114,111,114,41,4,114,68,0,0,0,114,103,1, ++ 0,0,114,104,1,0,0,114,172,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,13,95,115,97, ++ 110,105,116,121,95,99,104,101,99,107,139,8,0,0,115,24, ++ 0,0,0,0,2,15,1,30,1,12,1,15,1,6,1,15, ++ 1,15,1,15,1,6,2,27,1,19,1,114,111,1,0,0, ++ 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, ++ 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, ++ 0,8,0,0,0,12,0,0,0,67,0,0,0,115,52,1, ++ 0,0,100,0,0,125,2,0,124,0,0,106,0,0,100,1, ++ 0,131,1,0,100,2,0,25,125,3,0,124,3,0,114,178, ++ 0,124,3,0,116,1,0,106,2,0,107,7,0,114,62,0, ++ 116,3,0,124,1,0,124,3,0,131,2,0,1,110,0,0, ++ 124,0,0,116,1,0,106,2,0,107,6,0,114,88,0,116, ++ 1,0,106,2,0,124,0,0,25,83,116,1,0,106,2,0, ++ 124,3,0,25,125,4,0,121,13,0,124,4,0,106,4,0, ++ 125,2,0,87,113,178,0,4,116,5,0,107,10,0,114,174, ++ 0,1,1,1,116,6,0,100,3,0,23,106,7,0,124,0, ++ 0,124,3,0,131,2,0,125,5,0,116,8,0,124,5,0, ++ 100,4,0,124,0,0,131,1,1,130,1,0,89,113,178,0, ++ 88,110,0,0,116,9,0,124,0,0,124,2,0,131,2,0, ++ 125,6,0,124,6,0,100,0,0,107,8,0,114,235,0,116, ++ 8,0,116,6,0,106,7,0,124,0,0,131,1,0,100,4, ++ 0,124,0,0,131,1,1,130,1,0,110,18,0,116,10,0, ++ 124,6,0,131,1,0,106,11,0,131,0,0,125,7,0,124, ++ 3,0,114,48,1,116,1,0,106,2,0,124,3,0,25,125, ++ 4,0,116,12,0,124,4,0,124,0,0,106,0,0,100,1, ++ 0,131,1,0,100,5,0,25,124,7,0,131,3,0,1,110, ++ 0,0,124,7,0,83,41,6,78,114,117,0,0,0,114,85, ++ 0,0,0,122,23,59,32,123,33,114,125,32,105,115,32,110, ++ 111,116,32,97,32,112,97,99,107,97,103,101,114,68,0,0, ++ 0,114,116,0,0,0,41,13,114,33,0,0,0,114,8,0, ++ 0,0,114,74,0,0,0,114,115,0,0,0,114,247,0,0, ++ 0,114,210,0,0,0,218,8,95,69,82,82,95,77,83,71, ++ 114,48,0,0,0,114,154,0,0,0,114,108,1,0,0,114, ++ 175,0,0,0,114,7,1,0,0,114,62,0,0,0,41,8, ++ 114,68,0,0,0,218,7,105,109,112,111,114,116,95,114,36, ++ 0,0,0,114,234,0,0,0,90,13,112,97,114,101,110,116, ++ 95,109,111,100,117,108,101,114,172,0,0,0,114,178,0,0, ++ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,23,95,102,105,110,100,95,97,110,100, ++ 95,108,111,97,100,95,117,110,108,111,99,107,101,100,159,8, ++ 0,0,115,42,0,0,0,0,1,6,1,19,1,6,1,15, ++ 1,16,2,15,1,11,1,13,1,3,1,13,1,13,1,22, ++ 1,26,1,15,1,12,1,30,2,18,1,6,2,13,1,32, ++ 1,114,114,1,0,0,99,2,0,0,0,0,0,0,0,2, ++ 0,0,0,10,0,0,0,67,0,0,0,115,36,0,0,0, ++ 116,0,0,124,0,0,131,1,0,143,18,0,1,116,1,0, ++ 124,0,0,124,1,0,131,2,0,83,87,100,1,0,81,88, ++ 100,1,0,83,41,2,122,54,70,105,110,100,32,97,110,100, ++ 32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101, ++ 44,32,97,110,100,32,114,101,108,101,97,115,101,32,116,104, ++ 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, ++ 2,114,104,0,0,0,114,114,1,0,0,41,2,114,68,0, ++ 0,0,114,113,1,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,218,14,95,102,105,110,100,95,97,110, ++ 100,95,108,111,97,100,186,8,0,0,115,4,0,0,0,0, ++ 2,13,1,114,115,1,0,0,99,3,0,0,0,0,0,0, ++ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,172,0, ++ 0,0,116,0,0,124,0,0,124,1,0,124,2,0,131,3, ++ 0,1,124,2,0,100,1,0,107,4,0,114,49,0,116,1, ++ 0,124,0,0,124,1,0,124,2,0,131,3,0,125,0,0, ++ 110,0,0,116,2,0,106,3,0,131,0,0,1,124,0,0, ++ 116,4,0,106,5,0,107,7,0,114,87,0,116,6,0,124, ++ 0,0,116,7,0,131,2,0,83,116,4,0,106,5,0,124, ++ 0,0,25,125,3,0,124,3,0,100,2,0,107,8,0,114, ++ 158,0,116,2,0,106,8,0,131,0,0,1,100,3,0,106, ++ 9,0,124,0,0,131,1,0,125,4,0,116,10,0,124,4, ++ 0,100,4,0,124,0,0,131,1,1,130,1,0,110,0,0, ++ 116,11,0,124,0,0,131,1,0,1,124,3,0,83,41,5, ++ 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, ++ 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, ++ 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, ++ 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, ++ 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, ++ 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, ++ 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, ++ 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, ++ 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, ++ 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, ++ 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, ++ 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, ++ 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, ++ 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, ++ 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, ++ 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, ++ 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, ++ 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, ++ 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, ++ 46,10,10,32,32,32,32,114,85,0,0,0,78,122,40,105, ++ 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, ++ 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, ++ 109,111,100,117,108,101,115,114,68,0,0,0,41,12,114,111, ++ 1,0,0,114,105,1,0,0,114,107,0,0,0,114,4,1, ++ 0,0,114,8,0,0,0,114,74,0,0,0,114,115,1,0, ++ 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,108, ++ 0,0,0,114,48,0,0,0,114,154,0,0,0,114,113,0, ++ 0,0,41,5,114,68,0,0,0,114,103,1,0,0,114,104, ++ 1,0,0,114,180,0,0,0,114,152,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,116,1,0, ++ 0,192,8,0,0,115,26,0,0,0,0,9,16,1,12,1, ++ 21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, ++ 21,1,10,1,114,116,1,0,0,99,3,0,0,0,0,0, ++ 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,1, ++ 1,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, ++ 253,0,100,2,0,124,1,0,107,6,0,114,89,0,116,1, ++ 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, ++ 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, ++ 131,2,0,114,89,0,124,1,0,106,3,0,124,0,0,106, ++ 4,0,131,1,0,1,113,89,0,110,0,0,120,161,0,124, ++ 1,0,68,93,150,0,125,3,0,116,0,0,124,0,0,124, ++ 3,0,131,2,0,115,96,0,100,4,0,106,5,0,124,0, ++ 0,106,6,0,124,3,0,131,2,0,125,4,0,121,17,0, ++ 116,7,0,124,2,0,124,4,0,131,2,0,1,87,113,246, ++ 0,4,116,8,0,107,10,0,114,242,0,1,125,5,0,1, ++ 122,53,0,116,9,0,124,5,0,131,1,0,106,10,0,116, ++ 11,0,131,1,0,114,221,0,124,5,0,106,12,0,124,4, ++ 0,107,2,0,114,221,0,119,96,0,113,221,0,110,0,0, ++ 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, ++ 0,88,113,246,0,88,113,96,0,113,96,0,87,110,0,0, ++ 124,0,0,83,41,6,122,238,70,105,103,117,114,101,32,111, ++ 117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116, ++ 95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110, ++ 46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114, ++ 116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32, ++ 97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104, ++ 32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32, ++ 111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32, ++ 32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114, ++ 101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117, ++ 112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110, ++ 32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105, ++ 109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105, ++ 109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97, ++ 116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46, ++ 10,10,32,32,32,32,114,247,0,0,0,250,1,42,218,7, ++ 95,95,97,108,108,95,95,122,5,123,125,46,123,125,78,41, ++ 13,114,61,0,0,0,114,246,0,0,0,218,6,114,101,109, ++ 111,118,101,114,198,0,0,0,114,118,1,0,0,114,48,0, ++ 0,0,114,58,0,0,0,114,115,0,0,0,114,154,0,0, ++ 0,114,83,1,0,0,114,10,0,0,0,218,15,95,69,82, ++ 82,95,77,83,71,95,80,82,69,70,73,88,114,68,0,0, ++ 0,41,6,114,180,0,0,0,218,8,102,114,111,109,108,105, ++ 115,116,114,113,1,0,0,114,17,0,0,0,90,9,102,114, ++ 111,109,95,110,97,109,101,114,41,1,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,16,95,104,97, ++ 110,100,108,101,95,102,114,111,109,108,105,115,116,216,8,0, ++ 0,115,34,0,0,0,0,10,15,1,12,1,12,1,13,1, ++ 15,1,22,1,13,1,15,1,21,1,3,1,17,1,18,4, ++ 21,1,15,1,9,1,32,1,114,122,1,0,0,99,1,0, ++ 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, ++ 0,0,115,78,0,0,0,124,0,0,106,0,0,100,1,0, ++ 131,1,0,125,1,0,124,1,0,100,2,0,107,8,0,114, ++ 74,0,124,0,0,100,3,0,25,125,1,0,100,4,0,124, ++ 0,0,107,7,0,114,74,0,124,1,0,106,1,0,100,5, ++ 0,131,1,0,100,6,0,25,125,1,0,113,74,0,110,0, ++ 0,124,1,0,83,41,7,122,167,67,97,108,99,117,108,97, ++ 116,101,32,119,104,97,116,32,95,95,112,97,99,107,97,103, ++ 101,95,95,32,115,104,111,117,108,100,32,98,101,46,10,10, ++ 32,32,32,32,95,95,112,97,99,107,97,103,101,95,95,32, ++ 105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101, ++ 100,32,116,111,32,98,101,32,100,101,102,105,110,101,100,32, ++ 111,114,32,99,111,117,108,100,32,98,101,32,115,101,116,32, ++ 116,111,32,78,111,110,101,10,32,32,32,32,116,111,32,114, ++ 101,112,114,101,115,101,110,116,32,116,104,97,116,32,105,116, ++ 115,32,112,114,111,112,101,114,32,118,97,108,117,101,32,105, ++ 115,32,117,110,107,110,111,119,110,46,10,10,32,32,32,32, ++ 114,251,0,0,0,78,114,58,0,0,0,114,247,0,0,0, ++ 114,117,0,0,0,114,85,0,0,0,41,2,114,94,0,0, ++ 0,114,33,0,0,0,41,2,218,7,103,108,111,98,97,108, ++ 115,114,103,1,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,17,95,99,97,108,99,95,95,95,112, ++ 97,99,107,97,103,101,95,95,248,8,0,0,115,12,0,0, ++ 0,0,7,15,1,12,1,10,1,12,1,25,1,114,124,1, ++ 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, ++ 0,0,0,67,0,0,0,115,55,0,0,0,116,0,0,116, ++ 1,0,106,2,0,131,0,0,102,2,0,125,0,0,116,3, ++ 0,116,4,0,102,2,0,125,1,0,116,5,0,116,6,0, ++ 102,2,0,125,2,0,124,0,0,124,1,0,124,2,0,103, ++ 3,0,83,41,1,122,95,82,101,116,117,114,110,115,32,97, ++ 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, ++ 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, ++ 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, ++ 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, ++ 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, ++ 46,10,32,32,32,32,41,7,114,57,1,0,0,114,107,0, ++ 0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,117, ++ 102,102,105,120,101,115,114,9,1,0,0,114,135,0,0,0, ++ 114,8,1,0,0,114,233,0,0,0,41,3,90,10,101,120, ++ 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, ++ 90,8,98,121,116,101,99,111,100,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,241,0,0,0,7,9, ++ 0,0,115,8,0,0,0,0,5,18,1,12,1,12,1,114, ++ 241,0,0,0,99,5,0,0,0,0,0,0,0,9,0,0, ++ 0,5,0,0,0,67,0,0,0,115,227,0,0,0,124,4, ++ 0,100,1,0,107,2,0,114,27,0,116,0,0,124,0,0, ++ 131,1,0,125,5,0,110,54,0,124,1,0,100,2,0,107, ++ 9,0,114,45,0,124,1,0,110,3,0,105,0,0,125,6, ++ 0,116,1,0,124,6,0,131,1,0,125,7,0,116,0,0, ++ 124,0,0,124,7,0,124,4,0,131,3,0,125,5,0,124, ++ 3,0,115,207,0,124,4,0,100,1,0,107,2,0,114,122, ++ 0,116,0,0,124,0,0,106,2,0,100,3,0,131,1,0, ++ 100,1,0,25,131,1,0,83,124,0,0,115,132,0,124,5, ++ 0,83,116,3,0,124,0,0,131,1,0,116,3,0,124,0, ++ 0,106,2,0,100,3,0,131,1,0,100,1,0,25,131,1, ++ 0,24,125,8,0,116,4,0,106,5,0,124,5,0,106,6, ++ 0,100,2,0,116,3,0,124,5,0,106,6,0,131,1,0, ++ 124,8,0,24,133,2,0,25,25,83,110,16,0,116,7,0, ++ 124,5,0,124,3,0,116,0,0,131,3,0,83,100,2,0, ++ 83,41,4,97,214,1,0,0,73,109,112,111,114,116,32,97, ++ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, ++ 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, ++ 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, ++ 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, ++ 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, ++ 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, ++ 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, ++ 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, ++ 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, ++ 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, ++ 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, ++ 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, ++ 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, ++ 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, ++ 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, ++ 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, ++ 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, ++ 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, ++ 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, ++ 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, ++ 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, ++ 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, ++ 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, ++ 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, ++ 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, ++ 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, ++ 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, ++ 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, ++ 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,85, ++ 0,0,0,78,114,117,0,0,0,41,8,114,116,1,0,0, ++ 114,124,1,0,0,114,122,0,0,0,114,32,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,114,58,0,0,0,114,122, ++ 1,0,0,41,9,114,68,0,0,0,114,123,1,0,0,218, ++ 6,108,111,99,97,108,115,114,121,1,0,0,114,104,1,0, ++ 0,114,180,0,0,0,90,8,103,108,111,98,97,108,115,95, ++ 114,103,1,0,0,90,7,99,117,116,95,111,102,102,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, ++ 95,105,109,112,111,114,116,95,95,18,9,0,0,115,26,0, ++ 0,0,0,11,12,1,15,2,24,1,12,1,18,1,6,3, ++ 12,1,23,1,6,1,4,4,35,3,40,2,114,127,1,0, ++ 0,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, ++ 0,0,67,0,0,0,115,68,0,0,0,116,0,0,106,1, ++ 0,124,0,0,131,1,0,125,1,0,124,1,0,100,0,0, ++ 107,8,0,114,46,0,116,2,0,100,1,0,124,0,0,23, ++ 131,1,0,130,1,0,110,0,0,116,3,0,124,1,0,131, ++ 1,0,125,2,0,124,2,0,106,4,0,131,0,0,83,41, ++ 2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32, ++ 109,111,100,117,108,101,32,110,97,109,101,100,32,41,5,114, ++ 11,1,0,0,114,14,1,0,0,114,154,0,0,0,114,175, ++ 0,0,0,114,7,1,0,0,41,3,114,68,0,0,0,114, ++ 178,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, ++ 105,110,95,102,114,111,109,95,110,97,109,101,53,9,0,0, ++ 115,10,0,0,0,0,1,15,1,12,1,19,1,12,1,114, ++ 128,1,0,0,99,2,0,0,0,0,0,0,0,19,0,0, ++ 0,12,0,0,0,67,0,0,0,115,232,2,0,0,124,1, ++ 0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0, ++ 106,3,0,114,33,0,116,4,0,97,5,0,110,6,0,116, ++ 6,0,97,5,0,116,7,0,116,1,0,131,1,0,125,2, ++ 0,120,138,0,116,1,0,106,8,0,106,9,0,131,0,0, ++ 68,93,121,0,92,2,0,125,3,0,125,4,0,116,10,0, ++ 124,4,0,124,2,0,131,2,0,114,67,0,124,3,0,116, ++ 1,0,106,11,0,107,6,0,114,118,0,116,12,0,125,5, ++ 0,110,27,0,116,0,0,106,13,0,124,3,0,131,1,0, ++ 114,67,0,116,14,0,125,5,0,110,3,0,113,67,0,116, ++ 15,0,124,4,0,124,5,0,131,2,0,125,6,0,116,16, ++ 0,124,6,0,131,1,0,125,7,0,124,7,0,106,17,0, ++ 124,4,0,131,1,0,1,113,67,0,113,67,0,87,116,1, ++ 0,106,8,0,116,18,0,25,125,8,0,120,73,0,100,26, ++ 0,68,93,65,0,125,9,0,124,9,0,116,1,0,106,8, ++ 0,107,7,0,114,248,0,116,19,0,124,9,0,131,1,0, ++ 125,10,0,110,13,0,116,1,0,106,8,0,124,9,0,25, ++ 125,10,0,116,20,0,124,8,0,124,9,0,124,10,0,131, ++ 3,0,1,113,212,0,87,100,5,0,100,6,0,103,1,0, ++ 102,2,0,100,7,0,100,8,0,100,6,0,103,2,0,102, ++ 2,0,102,2,0,125,11,0,120,146,0,124,11,0,68,93, ++ 126,0,92,2,0,125,12,0,125,13,0,116,21,0,100,9, ++ 0,100,10,0,132,0,0,124,13,0,68,131,1,0,131,1, ++ 0,115,108,1,116,22,0,130,1,0,124,13,0,100,11,0, ++ 25,125,14,0,124,12,0,116,1,0,106,8,0,107,6,0, ++ 114,150,1,116,1,0,106,8,0,124,12,0,25,125,15,0, ++ 80,113,65,1,121,17,0,116,19,0,124,12,0,131,1,0, ++ 125,15,0,80,87,113,65,1,4,116,23,0,107,10,0,114, ++ 190,1,1,1,1,119,65,1,89,113,65,1,88,113,65,1, ++ 87,116,23,0,100,12,0,131,1,0,130,1,0,116,20,0, ++ 124,8,0,100,13,0,124,15,0,131,3,0,1,116,20,0, ++ 124,8,0,100,14,0,124,14,0,131,3,0,1,116,20,0, ++ 124,8,0,100,15,0,100,16,0,106,24,0,124,13,0,131, ++ 1,0,131,3,0,1,121,16,0,116,19,0,100,17,0,131, ++ 1,0,125,16,0,87,110,24,0,4,116,23,0,107,10,0, ++ 114,50,2,1,1,1,100,18,0,125,16,0,89,110,1,0, ++ 88,116,20,0,124,8,0,100,17,0,124,16,0,131,3,0, ++ 1,116,19,0,100,19,0,131,1,0,125,17,0,116,20,0, ++ 124,8,0,100,19,0,124,17,0,131,3,0,1,124,12,0, ++ 100,7,0,107,2,0,114,138,2,116,19,0,100,20,0,131, ++ 1,0,125,18,0,116,20,0,124,8,0,100,21,0,124,18, ++ 0,131,3,0,1,110,0,0,116,20,0,124,8,0,100,22, ++ 0,116,25,0,131,0,0,131,3,0,1,116,26,0,106,27, ++ 0,116,0,0,106,28,0,131,0,0,131,1,0,1,124,12, ++ 0,100,7,0,107,2,0,114,228,2,116,29,0,106,30,0, ++ 100,23,0,131,1,0,1,100,24,0,116,26,0,107,6,0, ++ 114,228,2,100,25,0,116,31,0,95,32,0,113,228,2,110, ++ 0,0,100,18,0,83,41,27,122,250,83,101,116,117,112,32, ++ 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, ++ 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, ++ 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, ++ 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, ++ 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, ++ 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, ++ 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, ++ 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, ++ 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, ++ 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, ++ 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, ++ 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, ++ 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, ++ 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, ++ 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, ++ 32,32,32,32,114,50,0,0,0,114,167,0,0,0,218,8, ++ 98,117,105,108,116,105,110,115,114,192,0,0,0,90,5,112, ++ 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, ++ 0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1, ++ 0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0, ++ 86,1,113,3,0,100,1,0,83,41,2,114,30,0,0,0, ++ 78,41,1,114,32,0,0,0,41,2,114,23,0,0,0,114, ++ 131,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,78,0,0,0,105,9,0,0,115,2,0,0, ++ 0,6,0,122,25,95,115,101,116,117,112,46,60,108,111,99, ++ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,85, ++ 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, ++ 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, ++ 32,110,116,114,4,0,0,0,114,26,0,0,0,114,22,0, ++ 0,0,114,31,0,0,0,114,86,0,0,0,78,114,112,0, ++ 0,0,90,6,119,105,110,114,101,103,114,24,1,0,0,114, ++ 7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,112, ++ 121,100,84,41,4,122,3,95,105,111,122,9,95,119,97,114, ++ 110,105,110,103,115,122,8,98,117,105,108,116,105,110,115,122, ++ 7,109,97,114,115,104,97,108,41,33,114,107,0,0,0,114, ++ 8,0,0,0,114,118,0,0,0,114,119,0,0,0,114,121, ++ 0,0,0,114,233,0,0,0,114,120,0,0,0,114,67,0, ++ 0,0,114,74,0,0,0,218,5,105,116,101,109,115,114,193, ++ 0,0,0,114,158,0,0,0,114,11,1,0,0,114,163,0, ++ 0,0,114,20,1,0,0,114,248,0,0,0,114,175,0,0, ++ 0,114,255,0,0,0,114,58,0,0,0,114,128,1,0,0, ++ 114,62,0,0,0,218,3,97,108,108,114,101,0,0,0,114, ++ 154,0,0,0,114,27,0,0,0,114,12,0,0,0,114,60, ++ 1,0,0,114,198,0,0,0,114,125,1,0,0,114,135,0, ++ 0,0,114,224,0,0,0,114,23,1,0,0,114,27,1,0, ++ 0,41,19,218,10,115,121,115,95,109,111,100,117,108,101,218, ++ 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, ++ 100,117,108,101,95,116,121,112,101,114,68,0,0,0,114,180, ++ 0,0,0,114,170,0,0,0,114,178,0,0,0,114,179,0, ++ 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90, ++ 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98, ++ 117,105,108,116,105,110,95,109,111,100,117,108,101,90,10,111, ++ 115,95,100,101,116,97,105,108,115,90,10,98,117,105,108,116, ++ 105,110,95,111,115,114,22,0,0,0,114,26,0,0,0,90, ++ 9,111,115,95,109,111,100,117,108,101,90,13,116,104,114,101, ++ 97,100,95,109,111,100,117,108,101,90,14,119,101,97,107,114, ++ 101,102,95,109,111,100,117,108,101,90,13,119,105,110,114,101, ++ 103,95,109,111,100,117,108,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,61, ++ 9,0,0,115,108,0,0,0,0,9,6,1,6,2,12,1, ++ 9,2,6,3,12,1,28,1,15,1,15,1,9,1,15,1, ++ 9,2,3,1,15,1,12,1,20,3,13,1,13,1,15,1, ++ 15,2,13,1,20,3,33,1,19,2,31,1,10,1,15,1, ++ 13,1,4,2,3,1,12,1,5,1,13,1,12,2,12,1, ++ 16,1,16,1,25,3,3,1,16,1,13,2,11,1,16,3, ++ 12,1,16,3,12,1,12,1,19,3,19,1,19,1,12,1, ++ 13,1,12,1,114,137,1,0,0,99,2,0,0,0,0,0, ++ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,136, ++ 0,0,0,116,0,0,124,0,0,124,1,0,131,2,0,1, ++ 116,1,0,131,0,0,125,2,0,116,2,0,106,3,0,106, ++ 4,0,116,5,0,106,6,0,124,2,0,140,0,0,103,1, ++ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,9, ++ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,10, ++ 0,131,1,0,1,116,11,0,106,12,0,100,1,0,107,2, ++ 0,114,116,0,116,2,0,106,7,0,106,8,0,116,13,0, ++ 131,1,0,1,110,0,0,116,2,0,106,7,0,106,8,0, ++ 116,14,0,131,1,0,1,100,2,0,83,41,3,122,50,73, ++ 110,115,116,97,108,108,32,105,109,112,111,114,116,108,105,98, ++ 32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110, ++ 116,97,116,105,111,110,32,111,102,32,105,109,112,111,114,116, ++ 46,114,131,1,0,0,78,41,15,114,137,1,0,0,114,241, ++ 0,0,0,114,8,0,0,0,114,79,1,0,0,114,198,0, ++ 0,0,114,87,1,0,0,114,101,1,0,0,114,107,1,0, ++ 0,114,224,0,0,0,114,11,1,0,0,114,20,1,0,0, ++ 114,4,0,0,0,114,58,0,0,0,114,23,1,0,0,114, ++ 74,1,0,0,41,3,114,135,1,0,0,114,136,1,0,0, ++ 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, ++ 101,114,115,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,8,95,105,110,115,116,97,108,108,148,9,0,0, ++ 115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16, ++ 1,15,1,19,1,114,138,1,0,0,41,4,122,3,119,105, ++ 110,114,1,0,0,0,114,2,0,0,0,114,3,0,0,0, ++ 41,92,114,60,0,0,0,114,11,0,0,0,114,12,0,0, ++ 0,114,18,0,0,0,114,20,0,0,0,114,29,0,0,0, ++ 114,39,0,0,0,114,40,0,0,0,114,44,0,0,0,114, ++ 45,0,0,0,114,47,0,0,0,114,56,0,0,0,114,66, ++ 0,0,0,114,69,0,0,0,114,67,0,0,0,218,8,95, ++ 95,99,111,100,101,95,95,114,194,0,0,0,114,70,0,0, ++ 0,114,110,0,0,0,114,93,0,0,0,114,100,0,0,0, ++ 114,83,0,0,0,114,84,0,0,0,114,103,0,0,0,114, ++ 104,0,0,0,114,106,0,0,0,114,113,0,0,0,114,115, ++ 0,0,0,114,16,0,0,0,114,186,0,0,0,114,15,0, ++ 0,0,114,19,0,0,0,90,17,95,82,65,87,95,77,65, ++ 71,73,67,95,78,85,77,66,69,82,114,126,0,0,0,114, ++ 135,0,0,0,114,120,0,0,0,114,121,0,0,0,114,133, ++ 0,0,0,114,136,0,0,0,114,143,0,0,0,114,145,0, ++ 0,0,114,153,0,0,0,114,157,0,0,0,114,162,0,0, ++ 0,114,165,0,0,0,114,173,0,0,0,114,181,0,0,0, ++ 114,191,0,0,0,114,196,0,0,0,114,199,0,0,0,114, ++ 204,0,0,0,114,212,0,0,0,114,213,0,0,0,114,217, ++ 0,0,0,114,174,0,0,0,218,6,111,98,106,101,99,116, ++ 114,242,0,0,0,114,240,0,0,0,114,248,0,0,0,114, ++ 175,0,0,0,114,10,1,0,0,114,11,1,0,0,114,20, ++ 1,0,0,114,23,1,0,0,114,33,1,0,0,114,34,1, ++ 0,0,114,49,1,0,0,114,9,1,0,0,114,8,1,0, ++ 0,114,60,1,0,0,114,57,1,0,0,114,61,1,0,0, ++ 114,252,0,0,0,114,74,1,0,0,114,87,1,0,0,114, ++ 102,1,0,0,114,105,1,0,0,114,106,1,0,0,114,108, ++ 1,0,0,114,111,1,0,0,114,120,1,0,0,114,112,1, ++ 0,0,114,114,1,0,0,114,115,1,0,0,114,116,1,0, ++ 0,114,122,1,0,0,114,124,1,0,0,114,241,0,0,0, ++ 114,127,1,0,0,114,128,1,0,0,114,137,1,0,0,114, ++ 138,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, ++ 101,62,8,0,0,0,115,170,0,0,0,6,17,6,3,12, ++ 12,12,5,12,5,12,6,12,12,12,10,12,9,12,5,12, ++ 7,15,22,12,8,12,4,15,4,19,20,6,2,6,3,22, ++ 4,19,68,19,21,19,19,12,19,12,20,12,114,22,1,18, ++ 2,6,2,9,2,9,1,9,2,15,27,12,23,12,19,12, ++ 12,18,8,12,18,12,11,12,11,12,17,12,16,21,55,21, ++ 12,18,10,12,14,12,36,19,27,19,106,24,22,9,3,12, ++ 1,15,63,18,45,19,230,15,25,19,70,19,71,19,63,19, ++ 24,22,110,19,41,25,43,25,16,6,3,19,57,19,57,19, ++ 38,19,129,19,146,19,13,12,9,12,9,15,40,12,17,6, ++ 1,10,2,12,27,12,6,18,24,12,32,12,15,12,11,24, ++ 35,12,8,12,87, + }; +diff -Nru orig/Python/marshal.c modified/Python/marshal.c +--- orig/Python/marshal.c 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Python/marshal.c 2015-05-04 12:43:06.000000000 +0800 +@@ -13,17 +13,26 @@ + #include "code.h" + #include "marshal.h" + ++#ifdef __APPLE__ ++# include "TargetConditionals.h" ++#endif /* __APPLE__ */ ++ + #define ABS(x) ((x) < 0 ? -(x) : (x)) + + /* High water mark to determine when the marshalled object is dangerously deep + * and risks coring the interpreter. When the object stack gets this deep, + * raise an exception instead of continuing. + * On Windows debug builds, reduce this value. ++ * iOS also requires a reduced value. + */ + #if defined(MS_WINDOWS) && defined(_DEBUG) +-#define MAX_MARSHAL_STACK_DEPTH 1500 ++# define MAX_MARSHAL_STACK_DEPTH 1500 + #else +-#define MAX_MARSHAL_STACK_DEPTH 2000 ++# if TARGET_OS_IPHONE ++# define MAX_MARSHAL_STACK_DEPTH 1500 ++# else ++# define MAX_MARSHAL_STACK_DEPTH 2000 ++# endif /* TARGET_OS_IPHONE */ + #endif + + #define TYPE_NULL '0' +Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ +diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_packages/README +--- orig/Tools/iOS-test/app_packages/README 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/app_packages/README 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1 @@ ++This directory exists so that 3rd party packages can be installed here. +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json +--- orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1,53 @@ ++{ ++ "images" : [ ++ { ++ "idiom" : "iphone", ++ "size" : "29x29", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "iphone", ++ "size" : "40x40", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "iphone", ++ "size" : "60x60", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "29x29", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "29x29", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "40x40", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "40x40", ++ "scale" : "2x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "76x76", ++ "scale" : "1x" ++ }, ++ { ++ "idiom" : "ipad", ++ "size" : "76x76", ++ "scale" : "2x" ++ } ++ ], ++ "info" : { ++ "version" : 1, ++ "author" : "xcode" ++ } ++} +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json +--- orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1,51 @@ ++{ ++ "images" : [ ++ { ++ "orientation" : "portrait", ++ "idiom" : "iphone", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "iphone", ++ "subtype" : "retina4", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "1x" ++ }, ++ { ++ "orientation" : "landscape", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "1x" ++ }, ++ { ++ "orientation" : "portrait", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ }, ++ { ++ "orientation" : "landscape", ++ "idiom" : "ipad", ++ "extent" : "full-screen", ++ "minimum-system-version" : "7.0", ++ "scale" : "2x" ++ } ++ ], ++ "info" : { ++ "version" : 1, ++ "author" : "xcode" ++ } ++} +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings +--- orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1 @@ ++/* Localized versions of Info.plist keys */ +diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist +--- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1,45 @@ ++ ++ ++ ++ ++ CFBundleDevelopmentRegion ++ en ++ CFBundleDisplayName ++ ${PRODUCT_NAME} ++ CFBundleExecutable ++ ${EXECUTABLE_NAME} ++ CFBundleIdentifier ++ com.python.${PRODUCT_NAME:rfc1034identifier} ++ CFBundleInfoDictionaryVersion ++ 6.0 ++ CFBundleName ++ ${PRODUCT_NAME} ++ CFBundlePackageType ++ APPL ++ CFBundleShortVersionString ++ 1.0 ++ CFBundleSignature ++ ???? ++ CFBundleVersion ++ 1.0 ++ LSRequiresIPhoneOS ++ ++ UIRequiredDeviceCapabilities ++ ++ armv7 ++ ++ UISupportedInterfaceOrientations ++ ++ UIInterfaceOrientationPortrait ++ UIInterfaceOrientationLandscapeLeft ++ UIInterfaceOrientationLandscapeRight ++ ++ UISupportedInterfaceOrientations~ipad ++ ++ UIInterfaceOrientationPortrait ++ UIInterfaceOrientationPortraitUpsideDown ++ UIInterfaceOrientationLandscapeLeft ++ UIInterfaceOrientationLandscapeRight ++ ++ ++ +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch +--- orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2015-04-26 21:28:31.000000000 +0800 +@@ -0,0 +1,16 @@ ++// ++// Prefix header ++// ++// The contents of this file are implicitly included at the beginning of every source file. ++// ++ ++#import + -+#if defined(HAVE_AS_CFI_PSEUDO_OP) -+ .cfi_sections .debug_frame ++#ifndef __IPHONE_3_0 ++#warning "This project uses features only available in iOS SDK 3.0 and later." +#endif + -+#define arg0 %rcx -+#define arg1 %rdx -+#define arg2 %r8 -+#define arg3 %r9 -+ -+#ifdef SYMBOL_UNDERSCORE -+#define SYMBOL_NAME(name) _##name -+#else -+#define SYMBOL_NAME(name) name ++#ifdef __OBJC__ ++ #import ++ #import +#endif +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m +--- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/main.m 2015-05-04 13:59:48.000000000 +0800 +@@ -0,0 +1,119 @@ ++// ++// main.m ++// A main module for starting Python projects under iOS. ++// ++// Copyright (c) 2014 Russell Keith-Magee. ++// Released under the terms of the BSD license. ++// Based on an intial file provided as part of the Kivy project ++// Copyright (c) 2014 Russell Keith-Magee. ++// + -+.macro E which -+ .align 8 -+ .org 0b + \which * 8 -+.endm ++#import ++#import ++#include ++#include + -+ .text ++int main(int argc, char *argv[]) { ++ int ret = 0; ++ unsigned int i; ++ NSString *python_path; ++ wchar_t* python_home; ++ wchar_t** python_argv; ++ @autoreleasepool { ++ ++ NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; ++ ++ putenv("PYTHONNOUSERSITE=1"); ++ ++ python_path = [NSString stringWithFormat:@"PYTHONPATH=%@/src:%@/app_packages", ++ resourcePath, resourcePath, nil]; ++ NSLog(@"%s", [python_path UTF8String]); ++ putenv((char *)[python_path UTF8String]); + -+/* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10) ++ NSLog(@"PythonHome is: %s", [resourcePath UTF8String]); ++ python_home = _Py_char2wchar([resourcePath cStringUsingEncoding:NSUTF8StringEncoding], NULL); ++ Py_SetPythonHome(python_home); ++ ++ NSLog(@"Initializing Python runtime..."); ++ Py_Initialize(); + -+ Bit o trickiness here -- FRAME is the base of the stack frame -+ for this function. This has been allocated by ffi_call. We also -+ deallocate some of the stack that has been alloca'd. */ ++ // To tell lldb not to stop on signals, use the following commands: ++ // * process handle SIGPIPE -n true -p true -s false ++ // * process handle SIGINT -n true -p true -s false ++ // * process handle SIGXFSZ -n true -p true -s false ++ // * process handle SIGUSR1 -n true -p true -s false ++ // * process handle SIGUSR2 -n true -p true -s false ++ ++ // Arguments to pass to test runner ++ char *test_args[] = { ++ "-j", "1", ++ "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", ++ "-v", ++ "-W", ++// "test_bytes", // ctypes related; PyBytes_FromFormat ++// "test_ctypes", // DL loading? ++// "test_pydoc", // .pyc file not being generated? ++// "test_shutil", // mkdir ++// "test_site", // mkdir ++// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc ++// "test_unicode", // # ctypes related; PyUnicode_FromFormat ++// "test_zipfile", // mkdir ++ ++// "test_httpservers", // # desktop ++// "test_logging", // # desktop ++// "test_mailcap", // # desktop ++// "test_socket", // # desktop ++// "test_socketserver", // # desktop ++// "test_warnings", // # desktop ++ }; ++ ++ int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; ++ ++ python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * n_test_args); ++ python_argv[0] = _Py_char2wchar(argv[0], NULL); ++ for (int i = 1; i < n_test_args; i++) { ++ python_argv[i] = _Py_char2wchar(test_args[i-1], NULL); ++ } + -+ .align 8 -+ .globl ffi_call_win64 ++ PySys_SetArgv(n_test_args, python_argv); ++ ++ // If other modules are using thread, we need to initialize them before. ++ PyEval_InitThreads(); ++ ++ // Search and start main.py ++ const char * prog = [ ++ [[NSBundle mainBundle] pathForResource:@"src/iOS-test/main" ++ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; ++ NSLog(@"Running %s", prog); ++ ++ @try { ++ FILE* fd = fopen(prog, "r"); ++ if (fd == NULL) { ++ ret = 1; ++ NSLog(@"Unable to open main.py, abort."); ++ } else { ++ ret = PyRun_SimpleFileEx(fd, prog, 1); ++ if (ret != 0) { ++ NSLog(@"Application quit abnormally!"); ++ } ++ } ++ } ++ @catch (NSException *exception) { ++ NSLog(@"Python runtime error: %@", [exception reason]); ++ } ++ @finally { ++ Py_Finalize(); ++ } ++ ++ PyMem_RawFree(python_home); ++ if (python_argv) { ++ for (i = 0; i < argc; i++) ++ PyMem_RawFree(python_argv[i]); ++ PyMem_RawFree(python_argv); ++ } ++ NSLog(@"Leaving"); ++ } ++ ++ exit(ret); ++ return ret; ++} +\ No newline at end of file +diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj +--- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-04-26 21:31:37.000000000 +0800 +@@ -0,0 +1,369 @@ ++// !$*UTF8*$! ++{ ++ archiveVersion = 1; ++ classes = { ++ }; ++ objectVersion = 46; ++ objects = { + -+ .seh_proc ffi_call_win64 -+ffi_call_win64: -+ cfi_startproc -+ /* Set up the local stack frame and install it in rbp/rsp. */ -+ movq (%rsp), %rax -+ movq %rbp, (arg1) -+ movq %rax, 8(arg1) -+ movq arg1, %rbp -+ cfi_def_cfa(%rbp, 16) -+ cfi_rel_offset(%rbp, 0) -+ .seh_pushreg %rbp -+ .seh_setframe %rbp, 0 -+ .seh_endprologue -+ movq arg0, %rsp -+ -+ movq arg2, %r10 -+ -+ /* Load all slots into both general and xmm registers. */ -+ movq (%rsp), %rcx -+ movsd (%rsp), %xmm0 -+ movq 8(%rsp), %rdx -+ movsd 8(%rsp), %xmm1 -+ movq 16(%rsp), %r8 -+ movsd 16(%rsp), %xmm2 -+ movq 24(%rsp), %r9 -+ movsd 24(%rsp), %xmm3 -+ -+ call *16(%rbp) -+ -+ movl 24(%rbp), %ecx -+ movq 32(%rbp), %r8 -+ leaq 0f(%rip), %r10 -+ cmpl $FFI_TYPE_SMALL_STRUCT_4B, %ecx -+ leaq (%r10, %rcx, 8), %r10 -+ ja 99f -+ jmp *%r10 ++/* Begin PBXBuildFile section */ ++ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE519190F4100A9926B /* Foundation.framework */; }; ++ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE719190F4100A9926B /* CoreGraphics.framework */; }; ++ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE919190F4100A9926B /* UIKit.framework */; }; ++ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 60796EEE19190F4100A9926B /* InfoPlist.strings */; }; ++ 60796EF219190F4100A9926B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60796EF119190F4100A9926B /* main.m */; }; ++ 60796EF819190F4100A9926B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60796EF719190F4100A9926B /* Images.xcassets */; }; ++ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1819190FBB00A9926B /* libz.dylib */; }; ++ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; ++ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; ++ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; ++ 60F0BABE191FC83F006EC268 /* src in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABD191FC83F006EC268 /* src */; }; ++ 60F0BAC0191FC868006EC268 /* app_packages in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABF191FC868006EC268 /* app_packages */; }; ++/* End PBXBuildFile section */ + -+/* Below, we're space constrained most of the time. Thus we eschew the -+ modern "mov, pop, ret" sequence (5 bytes) for "leave, ret" (2 bytes). */ -+.macro epilogue -+ leaveq -+ cfi_remember_state -+ cfi_def_cfa(%rsp, 8) -+ cfi_restore(%rbp) -+ ret -+ cfi_restore_state -+.endm ++/* Begin PBXFileReference section */ ++ 60796EE219190F4100A9926B /* iOS-test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-test.app"; sourceTree = BUILT_PRODUCTS_DIR; }; ++ 60796EE519190F4100A9926B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; ++ 60796EE719190F4100A9926B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; ++ 60796EE919190F4100A9926B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; ++ 60796EED19190F4100A9926B /* iOS-test-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS-test-Info.plist"; sourceTree = ""; }; ++ 60796EEF19190F4100A9926B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; ++ 60796EF119190F4100A9926B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; ++ 60796EF319190F4100A9926B /* iOS-test-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-test-Prefix.pch"; sourceTree = ""; }; ++ 60796EF719190F4100A9926B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; ++ 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; ++ 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; ++ 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; ++ 60796F34191A76C400A9926B /* include */ = {isa = PBXFileReference; lastKnownFileType = folder; name = include; path = Python.framework/Resources/include; sourceTree = ""; }; ++ 60796F35191A76C400A9926B /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = Python.framework/Resources/lib; sourceTree = ""; }; ++ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; ++ 60F0BABD191FC83F006EC268 /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; path = src; sourceTree = SOURCE_ROOT; }; ++ 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; ++/* End PBXFileReference section */ + -+ .align 8 -+0: -+E FFI_TYPE_VOID -+ epilogue -+E FFI_TYPE_INT -+ movslq %eax, %rax -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_FLOAT -+ movss %xmm0, (%r8) -+ epilogue -+E FFI_TYPE_DOUBLE -+ movsd %xmm0, (%r8) -+ epilogue -+E FFI_TYPE_LONGDOUBLE -+ call abort -+E FFI_TYPE_UINT8 -+ movzbl %al, %eax -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_SINT8 -+ movsbq %al, %rax -+ jmp 98f -+E FFI_TYPE_UINT16 -+ movzwl %ax, %eax -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_SINT16 -+ movswq %ax, %rax -+ jmp 98f -+E FFI_TYPE_UINT32 -+ movl %eax, %eax -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_SINT32 -+ movslq %eax, %rax -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_UINT64 -+98: movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_SINT64 -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_STRUCT -+ epilogue -+E FFI_TYPE_POINTER -+ movq %rax, (%r8) -+ epilogue -+E FFI_TYPE_COMPLEX -+ call abort -+E FFI_TYPE_SMALL_STRUCT_1B -+ movb %al, (%r8) -+ epilogue -+E FFI_TYPE_SMALL_STRUCT_2B -+ movw %ax, (%r8) -+ epilogue -+E FFI_TYPE_SMALL_STRUCT_4B -+ movl %eax, (%r8) -+ epilogue -+ -+ .align 8 -+99: call abort -+ -+.purgem epilogue ++/* Begin PBXFrameworksBuildPhase section */ ++ 60796EDF19190F4100A9926B /* Frameworks */ = { ++ isa = PBXFrameworksBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */, ++ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */, ++ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */, ++ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */, ++ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */, ++ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */, ++ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXFrameworksBuildPhase section */ + -+ cfi_endproc -+ .seh_endproc ++/* Begin PBXGroup section */ ++ 60796ED919190F4100A9926B = { ++ isa = PBXGroup; ++ children = ( ++ 60796F1A19190FEB00A9926B /* Python */, ++ 60796EEB19190F4100A9926B /* iOS-test */, ++ 60796EE419190F4100A9926B /* Frameworks */, ++ 60796EE319190F4100A9926B /* Products */, ++ ); ++ sourceTree = ""; ++ }; ++ 60796EE319190F4100A9926B /* Products */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796EE219190F4100A9926B /* iOS-test.app */, ++ ); ++ name = Products; ++ sourceTree = ""; ++ }; ++ 60796EE419190F4100A9926B /* Frameworks */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796F1F1919174D00A9926B /* libsqlite3.dylib */, ++ 60796F1819190FBB00A9926B /* libz.dylib */, ++ 60796F2B1919C70800A9926B /* Python.framework */, ++ 60796EE519190F4100A9926B /* Foundation.framework */, ++ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, ++ 60796EE719190F4100A9926B /* CoreGraphics.framework */, ++ 60796EE919190F4100A9926B /* UIKit.framework */, ++ ); ++ name = Frameworks; ++ sourceTree = ""; ++ }; ++ 60796EEB19190F4100A9926B /* iOS-test */ = { ++ isa = PBXGroup; ++ children = ( ++ 60F0BABF191FC868006EC268 /* app_packages */, ++ 60F0BABD191FC83F006EC268 /* src */, ++ 60796EF719190F4100A9926B /* Images.xcassets */, ++ 60796EEC19190F4100A9926B /* Supporting Files */, ++ ); ++ path = "iOS-test"; ++ sourceTree = ""; ++ }; ++ 60796EEC19190F4100A9926B /* Supporting Files */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796EED19190F4100A9926B /* iOS-test-Info.plist */, ++ 60796EEE19190F4100A9926B /* InfoPlist.strings */, ++ 60796EF119190F4100A9926B /* main.m */, ++ 60796EF319190F4100A9926B /* iOS-test-Prefix.pch */, ++ ); ++ name = "Supporting Files"; ++ sourceTree = ""; ++ }; ++ 60796F1A19190FEB00A9926B /* Python */ = { ++ isa = PBXGroup; ++ children = ( ++ 60796F34191A76C400A9926B /* include */, ++ 60796F35191A76C400A9926B /* lib */, ++ ); ++ name = Python; ++ sourceTree = ""; ++ }; ++/* End PBXGroup section */ ++ ++/* Begin PBXNativeTarget section */ ++ 60796EE119190F4100A9926B /* iOS-test */ = { ++ isa = PBXNativeTarget; ++ buildConfigurationList = 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "iOS-test" */; ++ buildPhases = ( ++ 60796F2F1919C7E700A9926B /* Refresh Python source */, ++ 60796EDE19190F4100A9926B /* Sources */, ++ 60796EDF19190F4100A9926B /* Frameworks */, ++ 60796EE019190F4100A9926B /* Resources */, ++ ); ++ buildRules = ( ++ ); ++ dependencies = ( ++ ); ++ name = "iOS-test"; ++ productName = "iOS-test"; ++ productReference = 60796EE219190F4100A9926B /* iOS-test.app */; ++ productType = "com.apple.product-type.application"; ++ }; ++/* End PBXNativeTarget section */ + ++/* Begin PBXProject section */ ++ 60796EDA19190F4100A9926B /* Project object */ = { ++ isa = PBXProject; ++ attributes = { ++ CLASSPREFIX = Py; ++ LastUpgradeCheck = 0630; ++ ORGANIZATIONNAME = "Python Software Foundation"; ++ }; ++ buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "iOS-test" */; ++ compatibilityVersion = "Xcode 3.2"; ++ developmentRegion = English; ++ hasScannedForEncodings = 0; ++ knownRegions = ( ++ en, ++ ); ++ mainGroup = 60796ED919190F4100A9926B; ++ productRefGroup = 60796EE319190F4100A9926B /* Products */; ++ projectDirPath = ""; ++ projectRoot = ""; ++ targets = ( ++ 60796EE119190F4100A9926B /* iOS-test */, ++ ); ++ }; ++/* End PBXProject section */ + -+/* 32 bytes of outgoing register stack space, 8 bytes of alignment, -+ 16 bytes of result, 32 bytes of xmm registers. */ -+#define ffi_clo_FS (32+8+16+32) -+#define ffi_clo_OFF_R (32+8) -+#define ffi_clo_OFF_X (32+8+16) ++/* Begin PBXResourcesBuildPhase section */ ++ 60796EE019190F4100A9926B /* Resources */ = { ++ isa = PBXResourcesBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60F0BABE191FC83F006EC268 /* src in Resources */, ++ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, ++ 60796EF819190F4100A9926B /* Images.xcassets in Resources */, ++ 60F0BAC0191FC868006EC268 /* app_packages in Resources */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXResourcesBuildPhase section */ + -+ .align 8 -+ .globl ffi_go_closure_win64 ++/* Begin PBXShellScriptBuildPhase section */ ++ 60796F2F1919C7E700A9926B /* Refresh Python source */ = { ++ isa = PBXShellScriptBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ ); ++ inputPaths = ( ++ ); ++ name = "Refresh Python source"; ++ outputPaths = ( ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ shellPath = /bin/sh; ++ shellScript = "rsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\n"; ++ }; ++/* End PBXShellScriptBuildPhase section */ + -+ .seh_proc ffi_go_closure_win64 -+ffi_go_closure_win64: -+ cfi_startproc -+ /* Save all integer arguments into the incoming reg stack space. */ -+ movq arg0, 8(%rsp) -+ movq arg1, 16(%rsp) -+ movq arg2, 24(%rsp) -+ movq arg3, 32(%rsp) -+ -+ movq 8(%r10), arg0 /* load cif */ -+ movq 16(%r10), arg1 /* load fun */ -+ movq %r10, arg2 /* closure is user_data */ -+ jmp 0f -+ cfi_endproc -+ .seh_endproc ++/* Begin PBXSourcesBuildPhase section */ ++ 60796EDE19190F4100A9926B /* Sources */ = { ++ isa = PBXSourcesBuildPhase; ++ buildActionMask = 2147483647; ++ files = ( ++ 60796EF219190F4100A9926B /* main.m in Sources */, ++ ); ++ runOnlyForDeploymentPostprocessing = 0; ++ }; ++/* End PBXSourcesBuildPhase section */ + -+ .align 8 -+ .globl ffi_closure_win64 ++/* Begin PBXVariantGroup section */ ++ 60796EEE19190F4100A9926B /* InfoPlist.strings */ = { ++ isa = PBXVariantGroup; ++ children = ( ++ 60796EEF19190F4100A9926B /* en */, ++ ); ++ name = InfoPlist.strings; ++ sourceTree = ""; ++ }; ++/* End PBXVariantGroup section */ + -+ .seh_proc ffi_closure_win64 -+ffi_closure_win64: -+ cfi_startproc -+ /* Save all integer arguments into the incoming reg stack space. */ -+ movq arg0, 8(%rsp) -+ movq arg1, 16(%rsp) -+ movq arg2, 24(%rsp) -+ movq arg3, 32(%rsp) -+ -+ movq FFI_TRAMPOLINE_SIZE(%r10), arg0 /* load cif */ -+ movq FFI_TRAMPOLINE_SIZE+8(%r10), arg1 /* load fun */ -+ movq FFI_TRAMPOLINE_SIZE+16(%r10), arg2 /* load user_data */ -+0: -+ subq $ffi_clo_FS, %rsp -+ cfi_adjust_cfa_offset(ffi_clo_FS) -+ .seh_stackalloc ffi_clo_FS -+ .seh_endprologue -+ -+ /* Save all sse arguments into the stack frame. */ -+ movsd %xmm0, ffi_clo_OFF_X(%rsp) -+ movsd %xmm1, ffi_clo_OFF_X+8(%rsp) -+ movsd %xmm2, ffi_clo_OFF_X+16(%rsp) -+ movsd %xmm3, ffi_clo_OFF_X+24(%rsp) -+ -+ leaq ffi_clo_OFF_R(%rsp), arg3 -+ call ffi_closure_win64_inner -+ -+ /* Load the result into both possible result registers. */ -+ movq ffi_clo_OFF_R(%rsp), %rax -+ movsd ffi_clo_OFF_R(%rsp), %xmm0 -+ -+ addq $ffi_clo_FS, %rsp -+ cfi_adjust_cfa_offset(-ffi_clo_FS) -+ ret ++/* Begin XCBuildConfiguration section */ ++ 60796F0C19190F4100A9926B /* Debug */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ALWAYS_SEARCH_USER_PATHS = NO; ++ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; ++ CLANG_CXX_LIBRARY = "libc++"; ++ CLANG_ENABLE_MODULES = YES; ++ CLANG_ENABLE_OBJC_ARC = YES; ++ CLANG_WARN_BOOL_CONVERSION = YES; ++ CLANG_WARN_CONSTANT_CONVERSION = YES; ++ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; ++ CLANG_WARN_EMPTY_BODY = YES; ++ CLANG_WARN_ENUM_CONVERSION = YES; ++ CLANG_WARN_INT_CONVERSION = YES; ++ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; ++ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ++ COPY_PHASE_STRIP = NO; ++ GCC_C_LANGUAGE_STANDARD = gnu99; ++ GCC_DYNAMIC_NO_PIC = NO; ++ GCC_OPTIMIZATION_LEVEL = 0; ++ GCC_PREPROCESSOR_DEFINITIONS = ( ++ "DEBUG=1", ++ "$(inherited)", ++ ); ++ GCC_SYMBOLS_PRIVATE_EXTERN = NO; ++ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; ++ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; ++ GCC_WARN_UNDECLARED_SELECTOR = YES; ++ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; ++ GCC_WARN_UNUSED_FUNCTION = YES; ++ GCC_WARN_UNUSED_VARIABLE = YES; ++ IPHONEOS_DEPLOYMENT_TARGET = 7.1; ++ ONLY_ACTIVE_ARCH = YES; ++ SDKROOT = iphoneos; ++ TARGETED_DEVICE_FAMILY = "1,2"; ++ }; ++ name = Debug; ++ }; ++ 60796F0D19190F4100A9926B /* Release */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ALWAYS_SEARCH_USER_PATHS = NO; ++ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; ++ CLANG_CXX_LIBRARY = "libc++"; ++ CLANG_ENABLE_MODULES = YES; ++ CLANG_ENABLE_OBJC_ARC = YES; ++ CLANG_WARN_BOOL_CONVERSION = YES; ++ CLANG_WARN_CONSTANT_CONVERSION = YES; ++ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; ++ CLANG_WARN_EMPTY_BODY = YES; ++ CLANG_WARN_ENUM_CONVERSION = YES; ++ CLANG_WARN_INT_CONVERSION = YES; ++ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; ++ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ++ COPY_PHASE_STRIP = YES; ++ ENABLE_NS_ASSERTIONS = NO; ++ GCC_C_LANGUAGE_STANDARD = gnu99; ++ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; ++ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; ++ GCC_WARN_UNDECLARED_SELECTOR = YES; ++ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; ++ GCC_WARN_UNUSED_FUNCTION = YES; ++ GCC_WARN_UNUSED_VARIABLE = YES; ++ IPHONEOS_DEPLOYMENT_TARGET = 7.1; ++ SDKROOT = iphoneos; ++ TARGETED_DEVICE_FAMILY = "1,2"; ++ VALIDATE_PRODUCT = YES; ++ }; ++ name = Release; ++ }; ++ 60796F0F19190F4100A9926B /* Debug */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ FRAMEWORK_SEARCH_PATHS = ( ++ "$(inherited)", ++ "$(PROJECT_DIR)", ++ ); ++ GCC_PRECOMPILE_PREFIX_HEADER = YES; ++ GCC_PREFIX_HEADER = "iOS-test/iOS-test-Prefix.pch"; ++ HEADER_SEARCH_PATHS = ( ++ "$(inherited)", ++ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ++ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", ++ ); ++ INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; ++ PRODUCT_NAME = "$(TARGET_NAME)"; ++ USER_HEADER_SEARCH_PATHS = include/python2.7; ++ WRAPPER_EXTENSION = app; ++ }; ++ name = Debug; ++ }; ++ 60796F1019190F4100A9926B /* Release */ = { ++ isa = XCBuildConfiguration; ++ buildSettings = { ++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ FRAMEWORK_SEARCH_PATHS = ( ++ "$(inherited)", ++ "$(PROJECT_DIR)", ++ ); ++ GCC_PRECOMPILE_PREFIX_HEADER = YES; ++ GCC_PREFIX_HEADER = "iOS-test/iOS-test-Prefix.pch"; ++ HEADER_SEARCH_PATHS = ( ++ "$(inherited)", ++ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, ++ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", ++ ); ++ INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; ++ PRODUCT_NAME = "$(TARGET_NAME)"; ++ USER_HEADER_SEARCH_PATHS = include/python2.7; ++ WRAPPER_EXTENSION = app; ++ }; ++ name = Release; ++ }; ++/* End XCBuildConfiguration section */ + -+ cfi_endproc -+ .seh_endproc -diff -Nru orig/Modules/makesetup modified/Modules/makesetup ---- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/makesetup 2015-02-28 13:35:58.000000000 +0800 -@@ -176,6 +176,7 @@ - *.c++) srcs="$srcs $arg";; - *.cxx) srcs="$srcs $arg";; - *.cpp) srcs="$srcs $arg";; -+ *.S) srcs="$srcs $arg";; - \$*) libs="$libs $arg" - cpps="$cpps $arg";; - *.*) echo 1>&2 "bad word $arg in $line" -@@ -205,6 +206,7 @@ - *.C) obj=`basename $src .C`.o; cc='$(CXX)';; - *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; - *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; -+ *.S) obj=`basename $src .S`.o; cc='$(CC)';; # Assembly - *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C - *) continue;; - esac -@@ -266,7 +268,7 @@ - *) sed -e " - 1i$NL/* Generated automatically from $config by makesetup. */ - /MARKER 1/i$NL$EXTDECLS -- ++/* Begin XCConfigurationList section */ ++ 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "iOS-test" */ = { ++ isa = XCConfigurationList; ++ buildConfigurations = ( ++ 60796F0C19190F4100A9926B /* Debug */, ++ 60796F0D19190F4100A9926B /* Release */, ++ ); ++ defaultConfigurationIsVisible = 0; ++ defaultConfigurationName = Release; ++ }; ++ 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "iOS-test" */ = { ++ isa = XCConfigurationList; ++ buildConfigurations = ( ++ 60796F0F19190F4100A9926B /* Debug */, ++ 60796F1019190F4100A9926B /* Release */, ++ ); ++ defaultConfigurationIsVisible = 0; ++ defaultConfigurationName = Release; ++ }; ++/* End XCConfigurationList section */ ++ }; ++ rootObject = 60796EDA19190F4100A9926B /* Project object */; ++} +diff -Nru orig/Tools/iOS-test/src/iOS-test/main.py modified/Tools/iOS-test/src/iOS-test/main.py +--- orig/Tools/iOS-test/src/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/src/iOS-test/main.py 2015-05-04 13:49:31.000000000 +0800 +@@ -0,0 +1,10 @@ ++from datetime import datetime ++from test import regrtest ++ ++regrtest.start = datetime.now() ++print("START:", regrtest.start) ++regrtest.main_in_temp_cwd() ++regrtest.end = datetime.now() ++print("END:", regrtest.end) ++print("Duration:", regrtest.end - regrtest.start) + - /MARKER 2/i$NL$INITBITS - - " $config >config.c diff -Nru orig/config.sub modified/config.sub --- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 +++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 @@ -25361,7 +48369,7 @@ diff -Nru orig/config.sub modified/config.sub *) diff -Nru orig/configure modified/configure --- orig/configure 2015-02-03 19:49:02.000000000 +0800 -+++ modified/configure 2015-03-14 23:11:10.000000000 +0800 ++++ modified/configure 2015-04-30 09:18:43.000000000 +0800 @@ -3290,6 +3290,9 @@ *-*-cygwin*) ac_sys_system=Cygwin @@ -25421,7 +48429,16 @@ diff -Nru orig/configure modified/configure fi -@@ -16732,7 +16753,17 @@ +@@ -10421,6 +10442,8 @@ + hp*|HP*) DYNLOADFILE="dynload_hpux.o";; + # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() + Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";; ++ # Disable dynamic loading on iOS ++ iOS/*) DYNLOADFILE="dynload_stub.o";; + *) + # use dynload_shlib.c and dlopen() if we have it; otherwise stub + # out any dynamic loading +@@ -16732,7 +16755,17 @@ echo "creating Modules/Setup.local" >&6 if test ! -f Modules/Setup.local then @@ -25434,7 +48451,7 @@ diff -Nru orig/configure modified/configure + then + cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local + else -+ cp Modules/Setup.$_PYTHON_HOST_PLATFORM Modules/Setup.local ++ cat Modules/Setup.embedded Modules/Setup.$_PYTHON_HOST_PLATFORM > Modules/Setup.local + fi + fi fi @@ -25442,7 +48459,7 @@ diff -Nru orig/configure modified/configure echo "creating Makefile" >&6 diff -Nru orig/configure.ac modified/configure.ac --- orig/configure.ac 2015-02-25 21:21:37.000000000 +0800 -+++ modified/configure.ac 2015-03-14 23:11:05.000000000 +0800 ++++ modified/configure.ac 2015-04-30 09:18:57.000000000 +0800 @@ -373,6 +373,9 @@ *-*-cygwin*) ac_sys_system=Cygwin @@ -25502,29 +48519,38 @@ diff -Nru orig/configure.ac modified/configure.ac fi AC_SUBST(READELF) -@@ -4826,7 +4847,17 @@ +@@ -2898,6 +2919,8 @@ + hp*|HP*) DYNLOADFILE="dynload_hpux.o";; + # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() + Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";; ++ # Disable dynamic loading on iOS ++ iOS/*) DYNLOADFILE="dynload_stub.o";; + *) + # use dynload_shlib.c and dlopen() if we have it; otherwise stub + # out any dynamic loading +@@ -4826,7 +4849,17 @@ echo "creating Modules/Setup.local" >&AS_MESSAGE_FD if test ! -f Modules/Setup.local then - echo "# Edit this file for local setup changes" >Modules/Setup.local -+ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM -+ then -+ echo "# Edit this file for local setup changes" >Modules/Setup.local -+ else -+ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local -+ then -+ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local -+ else -+ cp Modules/Setup.$_PYTHON_HOST_PLATFORM Modules/Setup.local -+ fi -+ fi ++ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM ++ then ++ echo "# Edit this file for local setup changes" >Modules/Setup.local ++ else ++ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local ++ then ++ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local ++ else ++ cat Modules/Setup.embedded Modules/Setup.$_PYTHON_HOST_PLATFORM > Modules/Setup.local ++ fi ++ fi fi echo "creating Makefile" >&AS_MESSAGE_FD diff -Nru orig/iOS/Makefile modified/iOS/Makefile --- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2015-03-14 23:01:05.000000000 +0800 -@@ -0,0 +1,168 @@ ++++ modified/iOS/Makefile 2015-05-04 15:40:56.000000000 +0800 +@@ -0,0 +1,229 @@ +# This is a "Meta-makefile" for building an iOS-compatible Python.framework. +# It invokes the base makefile multiple times, once for each hardware platform +# that needs to be supported; then it combines the products into a single "fat" @@ -25538,37 +48564,52 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile +# Build identifier of the build OS. +BUILD_OS_ID=x86_64-apple-darwin$(shell uname -r) + -+# IOS ARMV7 build commands and flags -+IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path1) -+IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 -+IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 ++# 32 bit iOS Simulator build commands and flags ++IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) ++IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 ++ ++# 64 bit iOS Simulator build commands and flags ++IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) ++IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_SIMULATOR_64_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 ++ ++# iOS ARMV7 build commands and flags ++IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) ++IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 ++ ++# iOS ARMV7S build commands and flags ++IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) ++IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7S_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 + -+# IOS ARM64 build commands and flags ++# iOS ARM64 build commands and flags +IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 -+IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 ++IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 + -+# IOS_SIMULATOR_64 build commands and flags -+IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -+IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=6.0 -+IOS_SIMULATOR_64_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=6.0 + -+# IOS_SIMULATOR build commands and flags -+# This is provided for completeness, but shouldn't be required any more -+IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -+IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 -+IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 ++.PHONY: libs test all clean distclean _framework + -+.PHONY: all clean ++all: libs test + -+all: ../Python.framework ++libs: ../Python.framework ++ ++test: ../Tools/iOS-test/Python.framework + +clean: + rm -rf build + rm -rf ../Python.framework ++ rm -rf ../Tools/iOS-test/Python.framework ++ ++distclean: clean + rm -rf XCode-sample/sample.xcodeproj/project.xcworkspace + rm -rf XCode-sample/sample.xcodeproj/xcuserdata + rm -rf XCode-sample/Python.framework ++ rm -rf ../Tools/iOS-test/sample.xcodeproj/project.xcworkspace ++ rm -rf ../Tools/iOS-test/sample.xcodeproj/xcuserdata ++ rm -rf ../Tools/iOS-test/Python.framework + +build/host/bin/python$(PYTHON_VERSION): + # Configure and make the local build, providing compiled resources. @@ -25577,41 +48618,41 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + cd .. && make + cd .. && make install + -+build/ios-simulator-x86_64.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++build/ios-simulator-i386.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build Simulator library + if test -f ../Makefile; then cd .. && make distclean; fi + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=x86_64-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_SIMULATOR_64_CC)" LD="$(IOS_SIMULATOR_64_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-simulator-x86_64 \ ++ --host=i386-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-simulator-i386 \ + --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ + ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no + cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make + cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install + # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-simulator-x86_64.tar.gz ios-simulator-x86_64 && rm -rf ios-simulator-x86_64 ++ cd build && tar zcvf ios-simulator-i386.tar.gz ios-simulator-i386 && rm -rf ios-simulator-i386 + -+build/ios-simulator-i386.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++build/ios-simulator-x86_64.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build Simulator library + if test -f ../Makefile; then cd .. && make distclean; fi + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=i386-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-simulator-i386 \ ++ --host=x86_64-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_SIMULATOR_64_CC)" LD="$(IOS_SIMULATOR_64_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-simulator-x86_64 \ + --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ + ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no + cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make + cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install + # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-simulator-i386.tar.gz ios-simulator-i386 && rm -rf ios-simulator-i386 ++ cd build && tar zcvf ios-simulator-x86_64.tar.gz ios-simulator-x86_64 && rm -rf ios-simulator-x86_64 + +build/ios-armv7.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build ARMv7 library + if test -f ../Makefile; then cd .. && make distclean; fi + cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=armv7-apple-ios --build=$(BUILD_OS_ID) \ + CC="$(IOS_ARMV7_CC)" LD="$(IOS_ARMV7_LD)" \ + --prefix=$(IOS_DIR)/build/ios-armv7 \ @@ -25622,6 +48663,21 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + # Now pack away all the built artefacts so that the top level distclean doesn't touch them + cd build && tar zcvf ios-armv7.tar.gz ios-armv7 && rm -rf ios-armv7 + ++build/ios-armv7s.tar.gz: build/host/bin/python$(PYTHON_VERSION) ++ # Configure and build ARMv7s library ++ if test -f ../Makefile; then cd .. && make distclean; fi ++ cd .. && \ ++ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ ++ --host=armv7s-apple-ios --build=$(BUILD_OS_ID) \ ++ CC="$(IOS_ARMV7S_CC)" LD="$(IOS_ARMV7S_LD)" \ ++ --prefix=$(IOS_DIR)/build/ios-armv7s \ ++ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ++ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make ++ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf ios-armv7s.tar.gz ios-armv7s && rm -rf ios-armv7s ++ +build/ios-arm64.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build ARM64 library + if test -f ../Makefile; then cd .. && make distclean; fi @@ -25637,65 +48693,96 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + # Now pack away all the built artefacts so that the top level distclean doesn't touch them + cd build && tar zcvf ios-arm64.tar.gz ios-arm64 && rm -rf ios-arm64 + -+# FIXME - ARMv7 build is currently broken due to libffi problems. -+# ../Python.framework: build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-arm64.tar.gz -+../Python.framework: build/ios-simulator-x86_64.tar.gz build/ios-arm64.tar.gz ++../Python.framework: build/ios-simulator-i386.tar.gz build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-armv7s.tar.gz build/ios-arm64.tar.gz ++ FRAMEWORK_DIR=../Python.framework PRUNED=yes $(MAKE) _framework ++ ++../Tools/iOS-test/Python.framework: build/ios-simulator-i386.tar.gz build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-armv7s.tar.gz build/ios-arm64.tar.gz ++ FRAMEWORK_DIR=../Tools/iOS-test/Python.framework $(MAKE) _framework ++ ++########################################################################## ++# A meta-task for building an iOS framework. ++# ++# The test system framework and the production framework are very similar, ++# but the production framework can be significantly pruned and compressed. ++# However, other than that detail, the process of creating the respective ++# frameworks is identical. ++# ++# This meta target allows you to invoke a recursive make call with a ++# _framework target. The framework will be built in the $(FRAMEWORK_DIR) ++# directory; if $(PRUNED) is defined, it will be pruned and compressed. ++########################################################################## ++_framework: + # Unpack the archived install directories ++ cd build && tar zxvf ios-simulator-i386.tar.gz + cd build && tar zxvf ios-simulator-x86_64.tar.gz -+ # cd build && tar zxvf ios-armv7.tar.gz ++ cd build && tar zxvf ios-armv7.tar.gz ++ cd build && tar zxvf ios-armv7s.tar.gz + cd build && tar zxvf ios-arm64.tar.gz + + # Create the framework directory and set it as the current version -+ mkdir -p ../Python.framework/Versions/$(PYTHON_VERSION)/ -+ cd ../Python.framework/Versions && ln -fs $(PYTHON_VERSION) Current ++ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/ ++ cd $(FRAMEWORK_DIR)/Versions && ln -fs $(PYTHON_VERSION) Current + + # Copy the headers. The headers are the same for every platform, except for pyconfig.h; + # use the x86_64 simulator build because reasons. -+ cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) ../Python.framework/Versions/$(PYTHON_VERSION)/Headers ++ cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers ++ + # The only headers that change between versions is pyconfig.h; copy each supported version... -+ cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h -+ cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h -+ # cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h ++ cp build/ios-simulator-i386/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-i386.h ++ cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h ++ cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h ++ cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h ++ cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h + # ... and then copy in a master pyconfig.h to unify them all. -+ cp include/pyconfig.h ../Python.framework/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h ++ cp include/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h + + # Link the current Headers to the top level -+ cd ../Python.framework && ln -fs Versions/Current/Headers ++ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Headers + + # Copy the standard library from the simulator build. Again, the + # pure Python standard library is the same on every platform; + # use the simulator version because reasons. -+ mkdir -p ../Python.framework/Versions/$(PYTHON_VERSION)/Resources -+ cp -r build/ios-simulator-x86_64/lib ../Python.framework/Versions/$(PYTHON_VERSION)/Resources ++ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources ++ cp -r build/ios-simulator-x86_64/lib $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources ++ ++ # Copy Python.h and pyconfig.h into the resources include directory ++ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) ++ cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig*.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) ++ cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/Python.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) + + # Remove the pieces of the resources directory that aren't needed: + # libpython.a isn't needed in the lib directory -+ rm -f ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a ++ rm -f $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a + # pkgconfig isn't needed on the device -+ rm -rf ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig -+ # Remove all the modules we don't need, and compress the rest. -+ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && \ ++ rm -rf $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig ++ ++ # If a pruned framework has been requested, do the pruning and compression. ++ if test -n "$(PRUNED)"; then \ ++ cd $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION); \ + rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ -+ config-$(PYTHON_VERSION) ctypes/test distutils/tests site-pacakges sqlite3/test -+ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && \ -+ zip -r ../python$(subst .,,$(PYTHON_VERSION)).zip * -+ cd ../Python.framework/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION) && rm -rf * ++ config-$(PYTHON_VERSION) ctypes/test distutils/tests site-packages sqlite3/test; \ ++ zip -r ../python$(subst .,,$(PYTHON_VERSION)).zip *; \ ++ rm -rf *; \ ++ fi + + # Link the current Resources to the top level -+ cd ../Python.framework && ln -fs Versions/Current/Resources ++ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Resources + + # Create a fat binary for the libPython library + xcrun lipo -create -output \ -+ ../Python.framework/Versions/$(PYTHON_VERSION)/Python \ ++ $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Python \ ++ build/ios-simulator-i386/lib/libpython$(PYTHON_VERSION).a \ + build/ios-simulator-x86_64/lib/libpython$(PYTHON_VERSION).a \ -+ build/ios-arm64/lib/libpython$(PYTHON_VERSION).a; -+ # build/python/ios-armv7/lib/libpython$(PYTHON_VERSION).a; ++ build/ios-armv7/lib/libpython$(PYTHON_VERSION).a \ ++ build/ios-armv7s/lib/libpython$(PYTHON_VERSION).a \ ++ build/ios-arm64/lib/libpython$(PYTHON_VERSION).a \ ++ ; + + # Link the current Python library to the top level -+ cd ../Python.framework && ln -fs Versions/Current/Python ++ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python diff -Nru orig/iOS/README modified/iOS/README --- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2015-03-14 23:20:19.000000000 +0800 ++++ modified/iOS/README 2015-05-04 14:36:22.000000000 +0800 @@ -0,0 +1,131 @@ +==================== +Python on iOS README @@ -26533,12 +49620,14 @@ diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h \ No newline at end of file diff -Nru orig/setup.py modified/setup.py --- orig/setup.py 2015-02-03 19:49:05.000000000 +0800 -+++ modified/setup.py 2015-02-28 17:26:54.000000000 +0800 -@@ -252,7 +252,11 @@ ++++ modified/setup.py 2015-04-26 07:48:53.000000000 +0800 +@@ -252,7 +252,13 @@ build_ext.build_extensions(self) - longest = max([len(e.name) for e in self.extensions]) ++ # If there are any missing modules, use the longest name to ++ # set the column width for the list of missing modules. + if missing: + longest = max([len(m) for m in missing]) + else: diff --git a/patch/Python/pyconfig.h b/patch/Python/pyconfig.h index e169fb91..4296183a 100644 --- a/patch/Python/pyconfig.h +++ b/patch/Python/pyconfig.h @@ -1,9 +1,13 @@ +#ifdef __arm__ +#include "pyconfig-armv7.h" +#endif + #ifdef __arm64__ #include "pyconfig-arm64.h" #endif -#ifdef __arm__ -#include "pyconfig-armv7.h" +#ifdef __i386__ +#include "pyconfig-i386.h" #endif #ifdef __x86_64__ From 879380b5f4b1fc7090b66e73a4015c3d4f9b6c0b Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 28 Jun 2015 16:46:19 +0800 Subject: [PATCH 03/51] Fixed #3, #4, #8 -- Added Python 3.4.2 build. This cleans up the build process, using the patch that has been submitted for inclusion in Python core. It also adds support for OpenSSL and ARM64. --- LICENSE | 25 --- Makefile | 330 +++++++++++++++++++++++------------- README.rst | 7 +- patch/Python/Python.patch | 105 +++++++++--- patch/Python/Setup.embedded | 88 ++++++++++ patch/Python/pyconfig.h | 15 -- 6 files changed, 380 insertions(+), 190 deletions(-) create mode 100644 patch/Python/Setup.embedded delete mode 100644 patch/Python/pyconfig.h diff --git a/LICENSE b/LICENSE index 1b9b59f1..be2bd37e 100644 --- a/LICENSE +++ b/LICENSE @@ -17,28 +17,3 @@ 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. - -=========================================================================== - -Portions of the build tools are derived from code provided as part -of Kivy-iOS. The copyright for Kivy-iOS is: - -Copyright (c) 2010-2013 Kivy Team and other contributors - -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: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/Makefile b/Makefile index cd24cc7f..b2095b4a 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,30 @@ PROJECTDIR=$(shell pwd) -# iOS Build variables. -OSX_SDK_ROOT=$(shell xcrun --sdk macosx --show-sdk-path) - BUILD_NUMBER=1 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.4.2 -RUBICON_VERSION=0.1.3 +OPENSSL_VERSION=1.0.2c + +# 32 bit iOS Simulator build commands and flags +IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) +IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 -# Build identifier of the build OS. -BUILD_OS_ID=x86_64-apple-darwin$(shell uname -r) +# 64 bit iOS Simulator build commands and flags +IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) +IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 -# IOS ARMV7 build commands and flags +# iOS ARMV7 build commands and flags IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 -IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=6.0 +IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 -# IOS ARM64 build commands and flags -IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 -IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=6.0 +# iOS ARMV7S build commands and flags +IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) +IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 -# IOS_SIMULATOR build commands and flags -IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 -IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=6.0 +# iOS ARM64 build commands and flags +IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) +IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 all: Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz @@ -38,6 +37,9 @@ clean: distclean: clean rm -rf downloads +Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz: dist/OpenSSL.framework dist/Python.framework + cd dist && tar zcvf ../Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz Python.framework OpenSSL.framework + ########################################################################### # Working directories ########################################################################### @@ -51,23 +53,190 @@ build: dist: mkdir -p dist - ########################################################################### -# rubicon-objc +# OpenSSL +# These build instructions adapted from the scripts developed by +# Felix Shchulze (@x2on) https://github.com/x2on/OpenSSL-for-iPhone ########################################################################### -# Clean the rubicon project -clean-rubicon-objc: - rm -rf build/rubicon-objc-$(RUBICON_VERSION) +# Clean the OpenSSL project +clean-OpenSSL: + rm -rf build/openssl-$(OPENSSL_VERSION) + rm -rf dist/OpenSSL.framework -# Down original librubicon-objc source code archive. -downloads/rubicon-objc-$(RUBICON_VERSION).tar.gz: downloads - curl -L https://github.com/pybee/rubicon-objc/archive/v$(RUBICON_VERSION).tar.gz > downloads/rubicon-objc-$(RUBICON_VERSION).tar.gz +# Download original OpenSSL source code archive. +downloads/openssl-$(OPENSSL_VERSION).tgz: downloads + curl -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz > downloads/openssl-$(OPENSSL_VERSION).tgz -# Unpack rubicon-objc source archive into build working directory -build/rubicon-objc-$(RUBICON_VERSION): downloads/rubicon-objc-$(RUBICON_VERSION).tar.gz - tar zxf downloads/rubicon-objc-$(RUBICON_VERSION).tar.gz - mv rubicon-objc-$(RUBICON_VERSION) build +build/OpenSSL/ios-simulator-i386/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz + # Unpack sources + cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz + cd build && mv openssl-$(OPENSSL_VERSION) ios-simulator-i386 + mkdir -p build/OpenSSL + cd build && mv ios-simulator-i386 OpenSSL + # Tweak the Makefile to include sysroot and iOS minimum version + cd build/OpenSSL/ios-simulator-i386 && \ + sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_SIMULATOR_SDK_ROOT) -arch i386 -miphoneos-version-min=7.0 !" Makefile + # Configure the build + cd build/OpenSSL/ios-simulator-i386 && \ + CC="$(IOS_SIMULATOR_CC)" \ + CROSS_TOP="$(dir $(IOS_SIMULATOR_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_SIMULATOR_SDK_ROOT))" \ + ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-simulator-i386 + # Make the build + cd build/OpenSSL/ios-simulator-i386 && \ + CC="$(IOS_SIMULATOR_CC)" \ + CROSS_TOP="$(dir $(IOS_SIMULATOR_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_SIMULATOR_SDK_ROOT))" \ + make all + +build/OpenSSL/ios-simulator-x86_64/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz + # Unpack sources + cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz + cd build && mv openssl-$(OPENSSL_VERSION) ios-simulator-x86_64 + mkdir -p build/OpenSSL + cd build && mv ios-simulator-x86_64 OpenSSL + # Tweak the Makefile to include sysroot and iOS minimum version + cd build/OpenSSL/ios-simulator-x86_64 && \ + sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_SIMULATOR_64_SDK_ROOT) -arch x86_64 -miphoneos-version-min=7.0 !" Makefile + # Configure the build + cd build/OpenSSL/ios-simulator-x86_64 && \ + CC="$(IOS_SIMULATOR_64_CC)" \ + CROSS_TOP="$(dir $(IOS_SIMULATOR_64_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_SIMULATOR_64_SDK_ROOT))" \ + ./Configure darwin64-x86_64-cc --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-simulator-x86_64 + # Make the build + cd build/OpenSSL/ios-simulator-x86_64 && \ + CC="$(IOS_SIMULATOR_64_CC)" \ + CROSS_TOP="$(dir $(IOS_SIMULATOR_64_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_SIMULATOR_64_SDK_ROOT))" \ + make all + +build/OpenSSL/ios-armv7/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz + # Unpack sources + cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz + cd build && mv openssl-$(OPENSSL_VERSION) ios-armv7 + mkdir -p build/OpenSSL + cd build && mv ios-armv7 OpenSSL + # Tweak the Makefile to include sysroot and iOS minimum version + cd build/OpenSSL/ios-armv7 && \ + sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARMV7_SDK_ROOT) -arch armv7 -miphoneos-version-min=7.0 !" Makefile + # Tweak ui_openssl.c + cd build/OpenSSL/ios-armv7 && \ + sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c + # Configure the build + cd build/OpenSSL/ios-armv7 && \ + CC="$(IOS_ARMV7_CC)" \ + CROSS_TOP="$(dir $(IOS_ARMV7_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARMV7_SDK_ROOT))" \ + ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-armv7 + # Make the build + cd build/OpenSSL/ios-armv7 && \ + CC="$(IOS_ARMV7_CC)" \ + CROSS_TOP="$(dir $(IOS_ARMV7_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARMV7_SDK_ROOT))" \ + make all + +build/OpenSSL/ios-armv7s/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz + # Unpack sources + cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz + cd build && mv openssl-$(OPENSSL_VERSION) ios-armv7s + mkdir -p build/OpenSSL + cd build && mv ios-armv7s OpenSSL + # Tweak the Makefile to include sysroot and iOS minimum version + cd build/OpenSSL/ios-armv7s && \ + sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARMV7S_SDK_ROOT) -arch armv7s -miphoneos-version-min=7.0 !" Makefile + # Tweak ui_openssl.c + cd build/OpenSSL/ios-armv7s && \ + sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c + # Configure the build + cd build/OpenSSL/ios-armv7s && \ + CC="$(IOS_ARMV7S_CC)" \ + CROSS_TOP="$(dir $(IOS_ARMV7S_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARMV7S_SDK_ROOT))" \ + ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-armv7s + # Make the build + cd build/OpenSSL/ios-armv7s && \ + CC="$(IOS_ARMV7S_CC)" \ + CROSS_TOP="$(dir $(IOS_ARMV7S_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARMV7S_SDK_ROOT))" \ + make all + +build/OpenSSL/ios-arm64/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz + # Unpack sources + cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz + cd build && mv openssl-$(OPENSSL_VERSION) ios-arm64 + mkdir -p build/OpenSSL + cd build && mv ios-arm64 OpenSSL + # Tweak the Makefile to include sysroot and iOS minimum version + cd build/OpenSSL/ios-arm64 && \ + sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARM64_SDK_ROOT) -arch arm64 -miphoneos-version-min=7.0 !" Makefile + # Tweak ui_openssl.c + cd build/OpenSSL/ios-arm64 && \ + sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c + # Configure the build + cd build/OpenSSL/ios-arm64 && \ + CC="$(IOS_ARM64_CC)" \ + CROSS_TOP="$(dir $(IOS_ARM64_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARM64_SDK_ROOT))" \ + ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-arm64 + # Make the build + cd build/OpenSSL/ios-arm64 && \ + CC="$(IOS_ARM64_CC)" \ + CROSS_TOP="$(dir $(IOS_ARM64_SDK_ROOT)).." \ + CROSS_SDK="$(notdir $(IOS_ARM64_SDK_ROOT))" \ + make all + +build/OpenSSL/libssl.a: \ + build/OpenSSL/ios-simulator-i386/libssl.a \ + build/OpenSSL/ios-simulator-x86_64/libssl.a \ + build/OpenSSL/ios-armv7/libssl.a \ + build/OpenSSL/ios-armv7s/libssl.a \ + build/OpenSSL/ios-arm64/libssl.a + cd build/OpenSSL && \ + lipo -create \ + ios-simulator-i386/libssl.a \ + ios-simulator-x86_64/libssl.a \ + ios-armv7/libssl.a \ + ios-armv7s/libssl.a \ + ios-arm64/libssl.a \ + -output libssl.a + +build/OpenSSL/libcrypto.a: \ + build/OpenSSL/ios-simulator-i386/libssl.a \ + build/OpenSSL/ios-simulator-x86_64/libssl.a \ + build/OpenSSL/ios-armv7/libssl.a \ + build/OpenSSL/ios-armv7s/libssl.a \ + build/OpenSSL/ios-arm64/libssl.a + cd build/OpenSSL && \ + lipo -create \ + ios-simulator-i386/libcrypto.a \ + ios-simulator-x86_64/libcrypto.a \ + ios-armv7/libcrypto.a \ + ios-armv7s/libcrypto.a \ + ios-arm64/libcrypto.a \ + -output libcrypto.a + +dist/OpenSSL.framework: dist build/OpenSSL/libssl.a build/OpenSSL/libcrypto.a + # Create framework directory structure + cd dist && mkdir -p OpenSSL.framework + cd dist && mkdir -p OpenSSL.framework/Versions/$(OPENSSL_VERSION)/ + cd dist/OpenSSL.framework/Versions && ln -fs $(OPENSSL_VERSION) Current + + # Copy the headers (use the version from the x86_64 simulator because reasons) + cp -r build/OpenSSL/ios-simulator-x86_64/include dist/OpenSSL.framework/Versions/Current/Headers + + # Link the current Headers to the top level + cd dist/OpenSSL.framework && ln -fs Versions/Current/Headers + + # Create the fat library + libtool -no_warning_for_no_symbols -static \ + -o dist/OpenSSL.framework/Versions/Current/OpenSSL \ + build/OpenSSL/libcrypto.a \ + build/OpenSSL/libssl.a + + # Link the fat Library to the top level + cd dist/OpenSSL.framework && ln -fs Versions/Current/OpenSSL ########################################################################### # Python @@ -79,102 +248,19 @@ clean-Python: rm -rf build/python rm -rf dist/Python.framework -# Down original Python source code archive. +# Download original Python source code archive. downloads/Python-$(PYTHON_VERSION).tgz: downloads curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz -build/Python-$(PYTHON_VERSION)/host/python.exe: build downloads/Python-$(PYTHON_VERSION).tgz - # Unpack sources - tar zxf downloads/Python-$(PYTHON_VERSION).tgz - mkdir -p build/Python-$(PYTHON_VERSION) - mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/host - # Configure and make the local build, providing compiled resources. - cd build/Python-$(PYTHON_VERSION)/host && ./configure --prefix=$(PROJECTDIR)/build/python/host - cd build/Python-$(PYTHON_VERSION)/host && make - -build/python/ios-simulator/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe - # Unpack sources - tar zxf downloads/Python-$(PYTHON_VERSION).tgz - mkdir -p build/Python-$(PYTHON_VERSION) - mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-simulator - # Apply patches - cd build/Python-$(PYTHON_VERSION)/ios-simulator && patch -p1 < ../../../patch/Python/Python.patch - # Configure and build Simulator library - cd build/Python-$(PYTHON_VERSION)/ios-simulator && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=x86_64-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" --prefix=$(PROJECTDIR)/build/python/ios-simulator --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no - cd build/Python-$(PYTHON_VERSION)/ios-simulator && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install - -build/python/ios-armv7/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe - # Unpack sources - tar zxf downloads/Python-$(PYTHON_VERSION).tgz - mkdir -p build/Python-$(PYTHON_VERSION) - mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-armv7 - # Apply patches - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && patch -p1 < ../../../patch/Python/Python.patch - # Configure and build ARMv7 library - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=armv7-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_ARMV7_CC)" LD="$(IOS_ARMV7_LD)" --prefix=$(PROJECTDIR)/build/python/ios-armv7 --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no - cd build/Python-$(PYTHON_VERSION)/ios-armv7 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install - -build/python/ios-arm64/Python: build build/Python-$(PYTHON_VERSION)/host/python.exe +# build/Python-$(PYTHON_VERSION)/Python.framework: build dist/OpenSSL.framework downloads/Python-$(PYTHON_VERSION).tgz +build/Python-$(PYTHON_VERSION)/Python.framework: build downloads/Python-$(PYTHON_VERSION).tgz # Unpack sources - tar zxf downloads/Python-$(PYTHON_VERSION).tgz - mkdir -p build/Python-$(PYTHON_VERSION) - mv Python-$(PYTHON_VERSION) build/Python-$(PYTHON_VERSION)/ios-arm64 + cd build && tar zxf ../downloads/Python-$(PYTHON_VERSION).tgz # Apply patches - cd build/Python-$(PYTHON_VERSION)/ios-arm64 && patch -p1 < ../../../patch/Python/Python.patch - # Configure and build ARM64 library - cd build/Python-$(PYTHON_VERSION)/ios-arm64 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) ./configure --host=aarch64-apple-ios --build=$(BUILD_OS_ID) CC="$(IOS_ARM64_CC)" LD="$(IOS_ARM64_LD)" --prefix=$(PROJECTDIR)/build/python/ios-arm64 --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no - cd build/Python-$(PYTHON_VERSION)/ios-arm64 && PATH=$(PROJECTDIR)/build/python/host/bin:$(PATH) make && make install - -dist/Python.framework/Python: build/python/ios-simulator/Python build/python/ios-arm64/Python build/rubicon-objc-$(RUBICON_VERSION) - # Create the framework directory and set it as the current version - mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/ - cd dist/Python.framework/Versions && ln -fs $(basename $(PYTHON_VERSION)) Current - - # Copy the headers. The headers are the same for every platform, except for pyconfig.h; - # use the x86_64 simulator build because reasons. - cp -r build/python/ios-simulator/include/python$(basename $(PYTHON_VERSION)) dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers - # The only headers that change between versions is pyconfig.h; copy each supported version... - cp build/python/ios-simulator/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-x86_64.h - cp build/python/ios-arm64/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-arm64.h - # cp build/python/ios-armv7/include/python$(basename $(PYTHON_VERSION))/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig-armv7.h - # ... and then copy in a master pyconfig.h to unify them all. - cp patch/Python/pyconfig.h dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Headers/pyconfig.h + cd build/Python-$(PYTHON_VERSION) && patch -p1 < ../../patch/Python/Python.patch + cd build/Python-$(PYTHON_VERSION) && cp ../../patch/Python/Setup.embedded Modules/Setup.embedded + # Configure and make the build + cd build/Python-$(PYTHON_VERSION)/iOS && make - # Link the current Headers to the top level - cd dist/Python.framework && ln -fs Versions/Current/Headers - - # Copy the standard library from the x86_64 simulator build. Again, the - # pure Python standard library is the same on every platform; use the - # simulator version because reasons. - mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources - cp -r build/python/ios-simulator/lib dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources - - # Remove the pieces of the resources directory that aren't needed: - # libpython.a isn't needed in the lib directory - rm -f dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/libpython$(basename $(PYTHON_VERSION)).a - # pkgconfig isn't needed on the device - rm -rf dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/pkgconfig - # Remove all the modules we don't need, compress the rest. - cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref config-$(basename $(PYTHON_VERSION)) ctypes/test distutils/tests site-pacakges sqlite3/test - cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && zip -r ../python$(subst .,,$(basename $(PYTHON_VERSION))).zip * - cd dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION)) && rm -rf * - - # Install Rubicon into site packages. - mkdir -p dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION))/site-packages - cd build && cp -r rubicon-objc-$(RUBICON_VERSION)/rubicon ../dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Resources/lib/python$(basename $(PYTHON_VERSION))/site-packages/ - - # Link the current Resources to the top level - cd dist/Python.framework && ln -fs Versions/Current/Resources - - # Create a fat binary for the libPython library - xcrun lipo -create -output \ - dist/Python.framework/Versions/$(basename $(PYTHON_VERSION))/Python \ - build/python/ios-simulator/lib/libpython$(basename $(PYTHON_VERSION)).a \ - build/python/ios-arm64/lib/libpython$(basename $(PYTHON_VERSION)).a; - # build/python/ios-armv7/lib/libpython$(basename $(PYTHON_VERSION)).a; - - # Link the current Python library to the top level - cd dist/Python.framework && ln -fs Versions/Current/Python - -Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz: dist/Python.framework/Python - cd dist && tar zcvf ../Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz Python.framework +dist/Python.framework: dist build/Python-$(PYTHON_VERSION)/Python.framework + cd dist && cp -r ../build/Python-$(PYTHON_VERSION)/Python.framework . diff --git a/README.rst b/README.rst index 7a7965c2..4d8dc519 100644 --- a/README.rst +++ b/README.rst @@ -4,8 +4,8 @@ Python iOS Support This is a meta-package for building a version of Python that can be embedded into an iOS project. -It works by downloading, patching, and building a fat binary static libffi.a -and libPython.a, and packaging them both in iOS Framework format. +It works by downloading, patching, and building a fat binary OpenSSL and +Python, and packaging them both in iOS Framework format. The ``site-packages`` has the `Rubicon Objective-C`_ library pre-installed. This library enables you to have direct access to the iOS system libraries @@ -61,12 +61,9 @@ The build products will be in the `build` directory. Acknowledgements ---------------- -This work draws on the groundwork provided by `Kivy's iOS packaging tools.`_ - The approach to framework packaging is drawn from `Jeff Verkoeyen`_, and `Ernesto García's`_ tutorials. -.. _Kivy's iOS packaging tools.: https://github.com/kivy/kivy-ios .. _Jeff Verkoeyen: https://github.com/jverkoey/iOS-Framework .. _Ernesto García's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial .. _Rubicon Objective-C: http://github.com/pybee/rubicon-objc diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index ec785503..a13f5459 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -13056,8 +13056,8 @@ diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py # platform are, allow user to override them with the BROWSER variable. diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded --- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.embedded 2015-04-27 14:10:46.000000000 +0800 -@@ -0,0 +1,82 @@ ++++ modified/Modules/Setup.embedded 2015-06-28 15:00:41.000000000 +0800 +@@ -0,0 +1,91 @@ +##################################################################### +# Static compilation instructions for all binary modules. +##################################################################### @@ -13107,6 +13107,16 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded + -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI +resource resource.c +select selectmodule.c ++_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ ++ _sqlite/cache.c \ ++ _sqlite/connection.c \ ++ _sqlite/cursor.c \ ++ _sqlite/microprotocols.c \ ++ _sqlite/module.c \ ++ _sqlite/prepare_protocol.c \ ++ _sqlite/row.c \ ++ _sqlite/statement.c \ ++ _sqlite/util.c +syslog syslogmodule.c +termios termios.c +time timemodule.c @@ -13130,7 +13140,6 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +#_dbm _dbmmodule.c +#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm +#_lzma -+#_sqlite3 +#_ssl _ssl.c \ +# -I$(SSL)/include -I$(SSL)/include/openssl \ +# -L$(SSL)/lib -lssl -lcrypto @@ -38763,7 +38772,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c modified/Modules/_ct +#endif /* !FFI_NO_RAW_API */ diff -Nru orig/Modules/makesetup modified/Modules/makesetup --- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/makesetup 2015-04-27 13:32:33.000000000 +0800 ++++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 @@ -128,7 +128,7 @@ # Output DEFS in reverse order so first definition overrides @@ -38773,7 +38782,22 @@ diff -Nru orig/Modules/makesetup modified/Modules/makesetup 'include '*) DEFS="$line$NL$DEFS"; continue;; '*noobjects*') case $noobjects in -@@ -176,6 +176,7 @@ +@@ -156,9 +156,12 @@ + esac + case $arg in + -framework) libs="$libs $arg"; skip=libs; +- # OSX/OSXS/Darwin framework link cmd ++ # OSX/iOS/Darwin framework + ;; +- -[IDUCfF]*) cpps="$cpps $arg";; ++ -F*) libs="$libs $arg"; skip=libs; ++ # OSX/iOS/Darwin framework directory ++ ;; ++ -[IDUCf]*) cpps="$cpps $arg";; + -Xcompiler) skip=cpps;; + -Xlinker) libs="$libs $arg"; skip=libs;; + -rpath) libs="$libs $arg"; skip=libs;; +@@ -176,6 +179,7 @@ *.c++) srcs="$srcs $arg";; *.cxx) srcs="$srcs $arg";; *.cpp) srcs="$srcs $arg";; @@ -38781,7 +38805,7 @@ diff -Nru orig/Modules/makesetup modified/Modules/makesetup \$*) libs="$libs $arg" cpps="$cpps $arg";; *.*) echo 1>&2 "bad word $arg in $line" -@@ -205,6 +206,7 @@ +@@ -205,6 +209,7 @@ *.C) obj=`basename $src .C`.o; cc='$(CXX)';; *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; @@ -38789,7 +38813,7 @@ diff -Nru orig/Modules/makesetup modified/Modules/makesetup *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C *) continue;; esac -@@ -266,7 +268,7 @@ +@@ -266,7 +271,7 @@ *) sed -e " 1i$NL/* Generated automatically from $config by makesetup. */ /MARKER 1/i$NL$EXTDECLS @@ -47846,7 +47870,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2015-05-04 13:59:48.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/main.m 2015-06-27 21:42:56.000000000 +0800 @@ -0,0 +1,119 @@ +// +// main.m @@ -47898,7 +47922,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + char *test_args[] = { + "-j", "1", + "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", -+ "-v", ++// "-v", + "-W", +// "test_bytes", // ctypes related; PyBytes_FromFormat +// "test_ctypes", // DL loading? @@ -47911,8 +47935,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + +// "test_httpservers", // # desktop +// "test_logging", // # desktop -+// "test_mailcap", // # desktop -+// "test_socket", // # desktop ++// "test_nntplib", // #desktop ++ "test_socket", // # desktop +// "test_socketserver", // # desktop +// "test_warnings", // # desktop + }; @@ -48549,8 +48573,8 @@ diff -Nru orig/configure.ac modified/configure.ac echo "creating Makefile" >&AS_MESSAGE_FD diff -Nru orig/iOS/Makefile modified/iOS/Makefile --- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2015-05-04 15:40:56.000000000 +0800 -@@ -0,0 +1,229 @@ ++++ modified/iOS/Makefile 2015-06-28 13:59:34.000000000 +0800 +@@ -0,0 +1,230 @@ +# This is a "Meta-makefile" for building an iOS-compatible Python.framework. +# It invokes the base makefile multiple times, once for each hardware platform +# that needs to be supported; then it combines the products into a single "fat" @@ -48730,8 +48754,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + # The only headers that change between versions is pyconfig.h; copy each supported version... + cp build/ios-simulator-i386/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-i386.h + cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h ++ # ARMv7 and ARMv7S headers are the same; don't copy this one. ++ # cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h + cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h -+ cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h + cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h + # ... and then copy in a master pyconfig.h to unify them all. + cp include/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h @@ -48782,8 +48807,8 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python diff -Nru orig/iOS/README modified/iOS/README --- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2015-05-04 14:36:22.000000000 +0800 -@@ -0,0 +1,131 @@ ++++ modified/iOS/README 2015-05-05 08:38:46.000000000 +0800 +@@ -0,0 +1,165 @@ +==================== +Python on iOS README +==================== @@ -48805,25 +48830,59 @@ diff -Nru orig/iOS/README modified/iOS/README +it will use XCode utilities to identify the location of compilers, +resource directories, and so on. + -+The build process will configure and build Python 4 times, producing: ++The build process will configure and build Python 6 times, producing: + + * A "host" version of Python + * A version of Python compiled for the x86-64 iOS Simulator -+ * A version of Python compiled for ARMv7 iOS devices ++ * A version of Python compiled for the i386 iOS Simulator + * A version of Python compiled for ARM64 iOS devices ++ * A version of Python compiled for ARMv7s iOS devices ++ * A version of Python compiled for ARMv7 iOS devices + +Build products will be "installed" into iOS/build. The built products will +then be combined into a single "fat" ``Python.framework`` that can be added to +an XCode project. The resulting framework will be located in the root +directory of the Python source tree. + -+A ``make clean`` target also exists to clean out all build products. ++A ``make clean`` target also exists to clean out all build products; ++``make distclean`` will clean out all user-specific files from the test and ++sample projects. ++ ++Test instructions ++----------------- ++ ++The ``Tools`` directory contains an ``iOS-Test`` project that enables you to ++run the Python regression test suite. When you run ``make`` in the iOS ++directory, a copy of ``Python.framework`` will also be installed into this ++test project. ++ ++To run the test project, load the project into XCode, and run (either on a ++device or in the simulator). The test suite takes around 20 minutes to run on ++an iPhone5S. ++ ++.. note:: If you run the test project in debug mode, the XCode debugger will ++ stop whenever a signal is raised. The Python regression test suite checks ++ a number of signal handlers, and the test suite will stop mid-execution ++ when this occurs. ++ ++ To disable this signal handling, set a breakpoint at the start of ++ ``main.c``; when execution stops at the breakpoint, run the following ++ commands in the debugger (at the ``(lldb)`` prompt in the console log ++ window):: ++ ++ process handle SIGPIPE -n true -p true -s false ++ process handle SIGINT -n true -p true -s false ++ process handle SIGXFSZ -n true -p true -s false ++ process handle SIGUSR1 -n true -p true -s false ++ process handle SIGUSR2 -n true -p true -s false ++ ++ Unfortunately, this has to be done every time the test suite is executed. + +iOS-specific details +==================== + -+* ``import sys; sys.platform`` will report as "ios", regardless of whether you are on -+ a simulator or a real platform. ++* ``import sys; sys.platform`` will report as "ios", regardless of whether you ++ are on a simulator or a real platform. + +* ``import platform; platform.machine()`` will return the device identifier. + For example, an iPhone 5S will return "iPhone6,2" @@ -48849,7 +48908,7 @@ diff -Nru orig/iOS/README modified/iOS/README + - ``wsgiref`` + +* Due to limitations in using dynamic loading on iOS, binary Python modules must be -+ statically-linked into the exectuable. The framework package produced by the iOS ++ statically-linked into the executable. The framework package produced by the iOS + ``make install`` statically links all the supported standard library modules. + If you have a third-party Python binary module, you'll need to incorporate the + source files for that module into the sources for your own app. @@ -49600,7 +49659,7 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC +} diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h --- orig/iOS/include/pyconfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/include/pyconfig.h 2015-03-14 21:42:14.000000000 +0800 ++++ modified/iOS/include/pyconfig.h 2015-05-05 08:36:22.000000000 +0800 @@ -0,0 +1,15 @@ +#ifdef __arm__ +#include "pyconfig-armv7.h" diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded new file mode 100644 index 00000000..29c46f02 --- /dev/null +++ b/patch/Python/Setup.embedded @@ -0,0 +1,88 @@ +##################################################################### +# Static compilation instructions for all binary modules. +##################################################################### + +_bisect _bisectmodule.c +_codecs_cn cjkcodecs/_codecs_cn.c +_codecs_hk cjkcodecs/_codecs_hk.c +_codecs_iso2022 cjkcodecs/_codecs_iso2022.c +_codecs_jp cjkcodecs/_codecs_jp.c +_codecs_kr cjkcodecs/_codecs_kr.c +_codecs_tw cjkcodecs/_codecs_tw.c +_crypt _cryptmodule.c +_csv _csv.c +_datetime _datetimemodule.c +_elementtree _elementtree.c \ + -I$(srcdir)/Modules/expat + -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI +_heapq _heapqmodule.c +_json _json.c +_lsprof _lsprof.o rotatingtree.c +_md5 md5module.c +_multibytecodec cjkcodecs/multibytecodec.c +_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c +_opcode _opcode.c +_pickle _pickle.c +_posixsubprocess _posixsubprocess.c +_random _randommodule.c +_sha1 sha1module.c +_sha256 sha256module.c +_sha512 sha512module.c +_socket socketmodule.c +_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ + _sqlite/cache.c \ + _sqlite/connection.c \ + _sqlite/cursor.c \ + _sqlite/microprotocols.c \ + _sqlite/module.c \ + _sqlite/prepare_protocol.c \ + _sqlite/row.c \ + _sqlite/statement.c \ + _sqlite/util.c +_ssl _ssl.c -I$(srcdir)/../../dist/OpenSSL.framework/Headers -framework OpenSSL -F$(srcdir)/../../dist -DUSE_SSL +_struct _struct.c +array arraymodule.c +audioop audioop.c +binascii binascii.c +cmath cmathmodule.c _math.c +fcntl fcntlmodule.c +grp grpmodule.c +math mathmodule.c +mmap mmapmodule.c +parser parsermodule.c +pyexpat expat/xmlparse.c \ + expat/xmlrole.c \ + expat/xmltok.c \ + pyexpat.c \ + -I$(srcdir)/Modules/expat \ + -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI +resource resource.c +select selectmodule.c +syslog syslogmodule.c +termios termios.c +time timemodule.c +unicodedata unicodedata.c +zlib zlibmodule.c -I$(prefix)/include -lz + +##################################################################### +# Testing modules +##################################################################### +_ctypes_test _ctypes/_ctypes_test.c +_testbuffer _testbuffer.c +_testcapi _testcapimodule.c +_testimportmultiple _testimportmultiple.c + +##################################################################### +# Modules that require additional frameworks +##################################################################### +#_bz2 bz2module.c -lbz2 +#_curses _cursesmodule.c -lcurses -ltermcap +#_curses_panel _curses_panel.c -lpanel -lncurses +#_dbm _dbmmodule.c +#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm +#_lzma +#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... +#nis nismodule.c -lnsl +#ossaudiodev +#readline readline.c -lreadline -ltermcap +#spwd spwdmodule.c diff --git a/patch/Python/pyconfig.h b/patch/Python/pyconfig.h deleted file mode 100644 index 4296183a..00000000 --- a/patch/Python/pyconfig.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifdef __arm__ -#include "pyconfig-armv7.h" -#endif - -#ifdef __arm64__ -#include "pyconfig-arm64.h" -#endif - -#ifdef __i386__ -#include "pyconfig-i386.h" -#endif - -#ifdef __x86_64__ -#include "pyconfig-x86_64.h" -#endif \ No newline at end of file From 2676f2c87ae61098c965513228fcfc24e03e1937 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 28 Jun 2015 17:47:29 +0800 Subject: [PATCH 04/51] Clarified that Rubicon isn't installed by default. --- README.rst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.rst b/README.rst index 4d8dc519..21cf35b4 100644 --- a/README.rst +++ b/README.rst @@ -7,10 +7,6 @@ into an iOS project. It works by downloading, patching, and building a fat binary OpenSSL and Python, and packaging them both in iOS Framework format. -The ``site-packages`` has the `Rubicon Objective-C`_ library pre-installed. -This library enables you to have direct access to the iOS system libraries -from within the Python environment. - The binaries support the ``$(ARCHS_STANDARD)`` set - that is, armv7 and arm64. This should enable the code to run on: @@ -66,4 +62,3 @@ The approach to framework packaging is drawn from `Jeff Verkoeyen`_, and .. _Jeff Verkoeyen: https://github.com/jverkoey/iOS-Framework .. _Ernesto García's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial -.. _Rubicon Objective-C: http://github.com/pybee/rubicon-objc From a04adeec03c88ea482d8504b2028f8a400acc98b Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 5 Jul 2015 00:20:31 +0800 Subject: [PATCH 05/51] Improvements to Python test suite and sample/test project layout. --- Makefile | 4 +- README.rst | 2 +- patch/Python/Python.patch | 842 ++++++++++++++++++++++++++------------ 3 files changed, 587 insertions(+), 261 deletions(-) diff --git a/Makefile b/Makefile index b2095b4a..dc502bde 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ PROJECTDIR=$(shell pwd) -BUILD_NUMBER=1 +BUILD_NUMBER=2 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.4.2 @@ -263,4 +263,4 @@ build/Python-$(PYTHON_VERSION)/Python.framework: build downloads/Python-$(PYTHON cd build/Python-$(PYTHON_VERSION)/iOS && make dist/Python.framework: dist build/Python-$(PYTHON_VERSION)/Python.framework - cd dist && cp -r ../build/Python-$(PYTHON_VERSION)/Python.framework . + cd dist && mv ../build/Python-$(PYTHON_VERSION)/Python.framework . diff --git a/README.rst b/README.rst index 21cf35b4..20cfdb89 100644 --- a/README.rst +++ b/README.rst @@ -52,7 +52,7 @@ This should: The build products will be in the `build` directory. -.. _downloaded: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b1/Python-3.4.2-iOS-support.b1.tar.gz +.. _downloaded: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b2/Python-3.4.2-iOS-support.b2.tar.gz Acknowledgements ---------------- diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index a13f5459..6ff42a57 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -28,9 +28,9 @@ diff -Nru orig/Include/datetime.h modified/Include/datetime.h #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/test_as_parameter.py --- orig/Lib/ctypes/test/test_as_parameter.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_as_parameter.py 2015-04-27 21:02:02.000000000 +0800 ++++ modified/Lib/ctypes/test/test_as_parameter.py 2015-06-28 21:35:59.000000000 +0800 @@ -1,9 +1,11 @@ -+import sys ++import os import unittest from ctypes import * from ctypes.test import need_symbol @@ -38,7 +38,7 @@ diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/tes -dll = CDLL(_ctypes_test.__file__) + -+dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) try: CALLBACK_FUNCTYPE = WINFUNCTYPE @@ -52,13 +52,12 @@ diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/tes return param diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_bitfields.py --- orig/Lib/ctypes/test/test_bitfields.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_bitfields.py 2015-04-27 21:02:13.000000000 +0800 -@@ -1,11 +1,13 @@ ++++ modified/Lib/ctypes/test/test_bitfields.py 2015-06-28 21:36:06.000000000 +0800 +@@ -1,11 +1,12 @@ from ctypes import * from ctypes.test import need_symbol -import unittest import os -+import sys +import unittest import ctypes @@ -68,12 +67,12 @@ diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_b class BITS(Structure): _fields_ = [("A", c_int, 1), ("B", c_int, 2), -@@ -25,7 +27,7 @@ +@@ -25,7 +26,7 @@ ("R", c_short, 6), ("S", c_short, 7)] -func = CDLL(_ctypes_test.__file__).unpack_bitfields -+func = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])).unpack_bitfields ++func = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])).unpack_bitfields func.argtypes = POINTER(BITS), c_char ##for n in "ABCDEFGHIMNOPQRS": @@ -90,9 +89,9 @@ diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buf def test_buffer(self): diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_callbacks.py --- orig/Lib/ctypes/test/test_callbacks.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_callbacks.py 2015-04-27 21:02:35.000000000 +0800 ++++ modified/Lib/ctypes/test/test_callbacks.py 2015-06-28 21:36:18.000000000 +0800 @@ -1,8 +1,10 @@ -+import sys ++import os import unittest from ctypes import * from ctypes.test import need_symbol @@ -107,7 +106,7 @@ diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_c def test_integrate(self): # Derived from some then non-working code, posted by David Foster - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) # The function prototype called by 'integrate': double func(double); CALLBACK = CFUNCTYPE(c_double, c_double) @@ -116,7 +115,7 @@ diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_c # Issue #8275: buggy handling of callback args under Win64 # NOTE: should be run on release builds as well - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) CALLBACK = CFUNCTYPE(c_int, c_int, c_int, c_int, c_int, c_int) # All this function does is call the callback with its args squared func = dll._testfunc_cbk_reg_int @@ -125,18 +124,18 @@ diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_c # Issue #8275: buggy handling of callback args under Win64 # NOTE: should be run on release builds as well - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) CALLBACK = CFUNCTYPE(c_double, c_double, c_double, c_double, c_double, c_double) # All this function does is call the callback with its args squared diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfuncs.py --- orig/Lib/ctypes/test/test_cfuncs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_cfuncs.py 2015-04-27 21:02:50.000000000 +0800 ++++ modified/Lib/ctypes/test/test_cfuncs.py 2015-06-28 21:36:25.000000000 +0800 @@ -1,17 +1,20 @@ # A lot of failures in these tests on Mac OS X. # Byte order related? -+import sys ++import os import unittest from ctypes import * from ctypes.test import need_symbol @@ -146,7 +145,7 @@ diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfun + class CFunctions(unittest.TestCase): - _dll = CDLL(_ctypes_test.__file__) -+ _dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ _dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) def S(self): return c_longlong.in_dll(self._dll, "last_tf_arg_s").value @@ -159,15 +158,15 @@ diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfun @need_symbol('WinDLL') class stdcallCFunctions(CFunctions): - _dll = stdcall_dll(_ctypes_test.__file__) -+ _dll = stdcall_dll(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ _dll = stdcall_dll(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) if __name__ == '__main__': unittest.main() diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test_checkretval.py --- orig/Lib/ctypes/test/test_checkretval.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_checkretval.py 2015-04-27 21:03:01.000000000 +0800 ++++ modified/Lib/ctypes/test/test_checkretval.py 2015-06-28 21:36:10.000000000 +0800 @@ -1,8 +1,10 @@ -+import sys ++import os import unittest from ctypes import * @@ -182,54 +181,54 @@ diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test import _ctypes_test - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) self.assertEqual(42, dll._testfunc_p_p(42)) dll._testfunc_p_p.restype = CHECKED diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_funcptr.py --- orig/Lib/ctypes/test/test_funcptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_funcptr.py 2015-04-27 21:03:08.000000000 +0800 -@@ -1,4 +1,6 @@ ++++ modified/Lib/ctypes/test/test_funcptr.py 2015-06-28 21:36:31.000000000 +0800 +@@ -1,4 +1,5 @@ -import os, unittest +import os -+import sys +import unittest from ctypes import * try: -@@ -8,7 +10,10 @@ +@@ -8,7 +9,10 @@ WINFUNCTYPE = CFUNCTYPE import _ctypes_test -lib = CDLL(_ctypes_test.__file__) + + -+lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) + class CFuncPtrTestCase(unittest.TestCase): def test_basic(self): diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_functions.py --- orig/Lib/ctypes/test/test_functions.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_functions.py 2015-04-27 21:03:17.000000000 +0800 -@@ -7,7 +7,8 @@ ++++ modified/Lib/ctypes/test/test_functions.py 2015-06-28 21:36:38.000000000 +0800 +@@ -7,7 +7,9 @@ from ctypes import * from ctypes.test import need_symbol -import sys, unittest ++import os +import sys +import unittest try: WINFUNCTYPE -@@ -16,15 +17,22 @@ +@@ -16,15 +18,22 @@ WINFUNCTYPE = CFUNCTYPE import _ctypes_test -dll = CDLL(_ctypes_test.__file__) + + -+dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) if sys.platform == "win32": windll = WinDLL(_ctypes_test.__file__) @@ -248,9 +247,9 @@ diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_f def test_mro(self): diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.py --- orig/Lib/ctypes/test/test_libc.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_libc.py 2015-04-27 21:03:25.000000000 +0800 ++++ modified/Lib/ctypes/test/test_libc.py 2015-06-28 21:36:41.000000000 +0800 @@ -1,14 +1,18 @@ -+import sys ++import os import unittest from ctypes import * @@ -258,7 +257,7 @@ diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.p -lib = CDLL(_ctypes_test.__file__) + -+lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) + def three_way_cmp(x, y): @@ -271,10 +270,10 @@ diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.p lib.my_sqrt.argtypes = c_double, diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_parameters.py --- orig/Lib/ctypes/test/test_parameters.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_parameters.py 2015-04-27 21:03:34.000000000 +0800 ++++ modified/Lib/ctypes/test/test_parameters.py 2015-06-28 21:36:45.000000000 +0800 @@ -1,6 +1,9 @@ -import unittest, sys -+import sys ++import os +import unittest + from ctypes.test import need_symbol @@ -288,38 +287,39 @@ diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_ from ctypes import CDLL, c_void_p, ArgumentError - func = CDLL(_ctypes_test.__file__)._testfunc_p_p -+ func = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))._testfunc_p_p ++ func = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))._testfunc_p_p func.restype = c_void_p # TypeError: has no from_param method self.assertRaises(TypeError, setattr, func, "argtypes", (object,)) diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pickling.py --- orig/Lib/ctypes/test/test_pickling.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pickling.py 2015-04-27 21:03:50.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pickling.py 2015-06-28 21:36:49.000000000 +0800 @@ -1,8 +1,11 @@ -import unittest import pickle -+import sys ++import os +import unittest from ctypes import * import _ctypes_test -dll = CDLL(_ctypes_test.__file__) + + -+dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) class X(Structure): _fields_ = [("a", c_int), ("b", c_double)] diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_pointers.py --- orig/Lib/ctypes/test/test_pointers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pointers.py 2015-04-27 21:03:59.000000000 +0800 -@@ -1,4 +1,5 @@ ++++ modified/Lib/ctypes/test/test_pointers.py 2015-06-28 21:38:12.000000000 +0800 +@@ -1,4 +1,6 @@ -import unittest, sys ++import os +import sys +import unittest from ctypes import * import _ctypes_test -@@ -8,6 +9,7 @@ +@@ -8,6 +10,7 @@ python_types = [int, int, int, int, int, int, int, int, int, int, float, float] @@ -327,47 +327,47 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po class PointersTestCase(unittest.TestCase): def test_pointer_crash(self): -@@ -20,7 +22,7 @@ +@@ -20,7 +23,7 @@ self.assertRaises(TypeError, A, c_ulong(33)) def test_pass_pointers(self): - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) func = dll._testfunc_p_p func.restype = c_long -@@ -35,7 +37,7 @@ +@@ -35,7 +38,7 @@ self.assertEqual(res[0], 12345678) def test_change_pointers(self): - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) func = dll._testfunc_p_p i = c_int(87654) -@@ -70,7 +72,7 @@ +@@ -70,7 +73,7 @@ return 0 callback = PROTOTYPE(func) - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) # This function expects a function pointer, # and calls this with an integer pointer as parameter. # The int pointer points to a table containing the numbers 1..10 -@@ -135,7 +137,7 @@ +@@ -135,7 +138,7 @@ def test_charpp(self): """Test that a character pointer-to-pointer is correctly passed""" - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) func = dll._testfunc_c_p_p func.restype = c_char_p argv = (c_char_p * 2)() diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_prototypes.py --- orig/Lib/ctypes/test/test_prototypes.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_prototypes.py 2015-04-27 21:04:08.000000000 +0800 ++++ modified/Lib/ctypes/test/test_prototypes.py 2015-06-28 21:37:34.000000000 +0800 @@ -1,6 +1,7 @@ -+import sys ++import os +import unittest from ctypes import * from ctypes.test import need_symbol @@ -382,19 +382,19 @@ diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_ -testdll = CDLL(_ctypes_test.__file__) + + -+testdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++testdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) # Return machine address `a` as a (possibly long) non-negative integer. # Starting with Python 2.5, id(anything) is always non-negative, and diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_refcounts.py --- orig/Lib/ctypes/test/test_refcounts.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_refcounts.py 2015-04-27 21:04:22.000000000 +0800 ++++ modified/Lib/ctypes/test/test_refcounts.py 2015-06-28 21:37:38.000000000 +0800 @@ -1,13 +1,17 @@ -import unittest -from test import support import ctypes import gc -+import sys ++import os +import unittest +from test import support @@ -405,16 +405,16 @@ diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_r -dll = ctypes.CDLL(_ctypes_test.__file__) + + -+dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) + class RefcountTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/test_returnfuncptrs.py --- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-04-27 21:04:34.000000000 +0800 ++++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-06-28 21:37:45.000000000 +0800 @@ -1,15 +1,16 @@ -+import sys ++import os import unittest from ctypes import * -import os @@ -428,7 +428,7 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t # The _ctypes_test shared lib/dll exports quite some functions for testing. # The get_strchr function returns a *pointer* to the C strchr function. - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) get_strchr = dll.get_strchr get_strchr.restype = CFUNCTYPE(c_char_p, c_char_p, c_char) strchr = get_strchr() @@ -437,7 +437,7 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t def test_without_prototype(self): - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) get_strchr = dll.get_strchr # the default 'c_int' would not work on systems where sizeof(int) != sizeof(void *) get_strchr.restype = c_void_p @@ -446,7 +446,7 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t def test_from_dll(self): - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) # _CFuncPtr instances are now callable with a tuple argument # which denotes a function name and a dll: strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(("my_strchr", dll)) @@ -455,22 +455,22 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t return "my_strchr" if key == 1: - return CDLL(_ctypes_test.__file__) -+ return CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ return CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) raise IndexError # _CFuncPtr instances are now callable with a tuple argument # which denotes a function name and a dll: strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)( - BadSequence(("my_strchr", CDLL(_ctypes_test.__file__)))) -+ BadSequence(("my_strchr", CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))))) ++ BadSequence(("my_strchr", CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))))) self.assertTrue(strchr(b"abcdef", b"b"), "bcdef") self.assertEqual(strchr(b"abcdef", b"x"), None) self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_slicing.py --- orig/Lib/ctypes/test/test_slicing.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_slicing.py 2015-04-27 21:04:43.000000000 +0800 ++++ modified/Lib/ctypes/test/test_slicing.py 2015-06-28 21:37:52.000000000 +0800 @@ -1,3 +1,4 @@ -+import sys ++import os import unittest from ctypes import * from ctypes.test import need_symbol @@ -479,7 +479,7 @@ diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_sli s = b"abcdefghijklmnopqrstuvwxyz" - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) dll.my_strdup.restype = POINTER(c_char) dll.my_free.restype = None res = dll.my_strdup(s) @@ -488,7 +488,7 @@ diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_sli def test_char_ptr_with_free(self): - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) s = b"abcdefghijklmnopqrstuvwxyz" class allocated_c_char_p(c_char_p): @@ -497,15 +497,15 @@ diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_sli s = "abcdefghijklmnopqrstuvwxyz\0" - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) dll.my_wcsdup.restype = POINTER(c_wchar) dll.my_wcsdup.argtypes = POINTER(c_wchar), dll.my_free.restype = None diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_stringptr.py --- orig/Lib/ctypes/test/test_stringptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_stringptr.py 2015-04-27 21:04:57.000000000 +0800 ++++ modified/Lib/ctypes/test/test_stringptr.py 2015-06-28 21:37:55.000000000 +0800 @@ -1,10 +1,12 @@ -+import sys ++import os import unittest from test import support from ctypes import * @@ -514,15 +514,15 @@ diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_s -lib = CDLL(_ctypes_test.__file__) + -+lib = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) class StringPtrTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_unicode.py --- orig/Lib/ctypes/test/test_unicode.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_unicode.py 2015-04-27 21:05:06.000000000 +0800 ++++ modified/Lib/ctypes/test/test_unicode.py 2015-06-28 21:37:59.000000000 +0800 @@ -1,13 +1,15 @@ -+import sys ++import os import unittest import ctypes from ctypes.test import need_symbol @@ -534,7 +534,7 @@ diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_uni class UnicodeTestCase(unittest.TestCase): def test_wcslen(self): - dll = ctypes.CDLL(_ctypes_test.__file__) -+ dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) wcslen = dll.my_wcslen wcslen.argtypes = [ctypes.c_wchar_p] @@ -543,18 +543,19 @@ diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_uni self.assertEqual(buf[6:5:-1], "") -func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p -+func = ctypes.CDLL(getattr(_ctypes_test, '__file__', sys.argv[0]))._testfunc_p_p ++func = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))._testfunc_p_p class StringTestCase(UnicodeTestCase): def setUp(self): diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_values.py --- orig/Lib/ctypes/test/test_values.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_values.py 2015-04-27 21:05:16.000000000 +0800 -@@ -2,18 +2,19 @@ ++++ modified/Lib/ctypes/test/test_values.py 2015-06-28 21:38:03.000000000 +0800 +@@ -2,18 +2,20 @@ A testcase which accesses *values* in a dll. """ -import unittest ++import os import sys +import unittest from ctypes import * @@ -568,38 +569,42 @@ diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_valu # This test checks and changes an integer stored inside the # _ctypes_test dll/shared lib. - ctdll = CDLL(_ctypes_test.__file__) -+ ctdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ ctdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) an_integer = c_int.in_dll(ctdll, "an_integer") x = an_integer.value self.assertEqual(x, ctdll.get_an_integer()) -@@ -25,7 +26,7 @@ +@@ -25,9 +27,10 @@ self.assertEqual(x, ctdll.get_an_integer()) def test_undefined(self): - ctdll = CDLL(_ctypes_test.__file__) -+ ctdll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ ctdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) self.assertRaises(ValueError, c_int.in_dll, ctdll, "Undefined_Symbol") ++ @unittest.skipUnless(sys.platform == 'win32', 'Windows-specific test') + class Win_ValuesTestCase(unittest.TestCase): + """This test only works when python itself is a dll/shared library""" diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32.py --- orig/Lib/ctypes/test/test_win32.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_win32.py 2015-04-27 21:05:21.000000000 +0800 -@@ -1,7 +1,8 @@ ++++ modified/Lib/ctypes/test/test_win32.py 2015-06-28 21:38:08.000000000 +0800 +@@ -1,7 +1,9 @@ # Windows specific tests from ctypes import * -import unittest, sys ++import os +import sys +import unittest from test import support import _ctypes_test -@@ -109,7 +110,7 @@ +@@ -109,7 +111,7 @@ ("right", c_long), ("bottom", c_long)] - dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', sys.argv[0])) ++ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) pt = POINT(10, 10) rect = RECT(0, 0, 20, 20) @@ -823,7 +828,7 @@ diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py def _make_relax_case(): diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py --- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/IN.py 2015-04-26 09:30:37.000000000 +0800 ++++ modified/Lib/plat-ios/IN.py 2015-07-04 14:09:06.000000000 +0800 @@ -0,0 +1,8269 @@ +# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/netinet/in.h + @@ -832,11 +837,11 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +# Included from sys/_types.h + +# Included from sys/cdefs.h -+def __P(protos): return protos ++def __P(protos): return protos + +def __STRING(x): return #x + -+def __P(protos): return () ++def __P(protos): return () + +def __STRING(x): return "x" + @@ -858,7 +863,7 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py + +def __PROJECT_VERSION(s): return __IDSTRING(project_version,s) + -+def __FBSDID(s): return ++def __FBSDID(s): return + +__DARWIN_ONLY_64_BIT_INO_T = 1 +__DARWIN_ONLY_UNIX_CONFORMANCE = 1 @@ -959,7 +964,7 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +# Included from sys/_posix_availability.h +def __POSIX_C_DEPRECATED(ver): return ___POSIX_C_DEPRECATED_STARTING_##ver + -+__DARWIN_C_ANSI = 010000 ++__DARWIN_C_ANSI = 10000 +__DARWIN_C_FULL = 900000 +__DARWIN_C_LEVEL = __DARWIN_C_ANSI +__DARWIN_C_LEVEL = _POSIX_C_SOURCE @@ -9122,9 +9127,22 @@ diff -Nru orig/Lib/platform.py modified/Lib/platform.py # XXX Others too ? return default target = _follow_symlinks(target) +diff -Nru orig/Lib/site.py modified/Lib/site.py +--- orig/Lib/site.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/site.py 2015-07-04 21:19:43.000000000 +0800 +@@ -266,6 +266,9 @@ + if get_config_var('PYTHONFRAMEWORK'): + USER_SITE = get_path('purelib', 'osx_framework_user') + return USER_SITE ++ elif sys.platform == 'ios': ++ USER_SITE = get_path('purelib', 'ios') ++ return USER_SITE + + USER_SITE = get_path('purelib', '%s_user' % os.name) + return USER_SITE diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py --- orig/Lib/subprocess.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/subprocess.py 2015-04-30 07:50:40.000000000 +0800 ++++ modified/Lib/subprocess.py 2015-06-28 20:16:04.000000000 +0800 @@ -423,1268 +423,1269 @@ else: _PopenSelector = selectors.SelectSelector @@ -11579,6 +11597,46 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + """Kill the process with SIGKILL + """ + self.send_signal(signal.SIGKILL) +diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py +--- orig/Lib/sysconfig.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/sysconfig.py 2015-07-04 21:18:58.000000000 +0800 +@@ -78,6 +78,15 @@ + 'scripts': '{userbase}/bin', + 'data': '{userbase}', + }, ++ 'ios': { ++ 'stdlib': '{installed_base}/lib/python%s' % sys.version[:3], ++ 'platstdlib': '{installed_base}/lib/python%s' % sys.version[:3], ++ 'purelib': '{installed_base}/lib/python%s/site-packages' % sys.version[:3], ++ 'platlib': '{installed_base}/lib/python%s/site-packages' % sys.version[:3], ++ 'include': '{installed_base}/include', ++ 'scripts': '{installed_base}/bin', ++ 'data': '{installed_base}/Resources', ++ }, + } + + _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', +@@ -181,6 +190,8 @@ + if os.name == 'posix': + # the default scheme for posix is posix_prefix + return 'posix_prefix' ++ elif sys.platform == 'ios': ++ return 'ios' + return os.name + + +@@ -205,6 +216,11 @@ + else: + return joinuser("~", "Library", framework, "%d.%d" % + sys.version_info[:2]) ++ elif sys.platform == 'ios': ++ if env_base: ++ return env_base ++ else: ++ return _BASE_PREFIX + + if env_base: + return env_base diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py --- orig/Lib/test/__main__.py 2015-02-03 19:49:03.000000000 +0800 +++ modified/Lib/test/__main__.py 2015-05-04 07:57:38.000000000 +0800 @@ -12009,8 +12067,16 @@ diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py --- orig/Lib/test/test_httpservers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2015-04-28 10:16:55.000000000 +0800 -@@ -277,11 +277,11 @@ ++++ modified/Lib/test/test_httpservers.py 2015-06-28 20:16:12.000000000 +0800 +@@ -16,6 +16,7 @@ + import urllib.parse + import html + import http.client ++import subprocess + import tempfile + from io import BytesIO + +@@ -277,11 +278,11 @@ with open(os.path.join(self.tempdir, filename), 'wb') as f: f.write(support.TESTFN_UNDECODABLE) response = self.request(self.tempdir_name + '/') @@ -12024,7 +12090,15 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p filename = name break body = self.check_status_and_reason(response, 200) -@@ -550,6 +550,7 @@ +@@ -362,6 +363,7 @@ + + @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, + "This test can't be run reliably as root (issue #13308).") ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + class CGIHTTPServerTestCase(BaseTestCase): + class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): + pass +@@ -550,6 +552,7 @@ def log_message(self, format, *args): pass @@ -12032,7 +12106,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p class RejectingSocketlessRequestHandler(SocketlessRequestHandler): def handle_expect_100(self): self.send_error(417) -@@ -580,7 +581,7 @@ +@@ -580,7 +583,7 @@ HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK') @@ -12041,7 +12115,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p self.handler = SocketlessRequestHandler() def send_typical_request(self, message): -@@ -731,6 +732,7 @@ +@@ -731,6 +734,7 @@ self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n') self.assertFalse(self.handler.get_called) @@ -12061,6 +12135,17 @@ diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py 'imp.load_dynamic() required')(meth) +diff -Nru orig/Lib/test/test_import.py modified/Lib/test/test_import.py +--- orig/Lib/test/test_import.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_import.py 2015-07-04 22:52:30.000000000 +0800 +@@ -280,6 +280,7 @@ + """)) + script_helper.assert_python_ok(testfn) + ++ @skip_if_dont_write_bytecode + def test_timestamp_overflow(self): + # A modification timestamp larger than 2**32 should not be a problem + # when importing a module (issue #11235). diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/test/test_importlib/extension/test_finder.py --- orig/Lib/test/test_importlib/extension/test_finder.py 2015-02-03 19:49:03.000000000 +0800 +++ modified/Lib/test/test_importlib/extension/test_finder.py 2015-04-30 22:06:18.000000000 +0800 @@ -12165,6 +12250,46 @@ diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py def _generate_keywords(self, grammar_file, target_keyword_py_file): proc = subprocess.Popen([sys.executable, KEYWORD_FILE, +diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py +--- orig/Lib/test/test_logging.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_logging.py 2015-07-04 22:52:40.000000000 +0800 +@@ -1460,9 +1460,20 @@ + # just need a name - file can't be present, or we'll get an + # 'address already in use' error. + os.remove(fn) ++ # Check the size of the socket file name. If it exceeds 108 ++ # characters (UNIX_PATH_MAX), it can't be used as a UNIX socket. ++ # In this case, fall back to a path constructed somewhere that ++ # is known to be short. ++ if len(fn) > 108: ++ fd, fn = tempfile.mkstemp(prefix='test_logging_', suffix='.sock', dir='/tmp') ++ os.close(fd) ++ # just need a name - file can't be present, or we'll get an ++ # 'address already in use' error. ++ os.remove(fn) + return fn + + @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(threading, 'Threading required for this test.') + class UnixSocketHandlerTest(SocketHandlerTest): + +@@ -1535,6 +1546,7 @@ + self.assertEqual(self.log_output, "spam\neggs\n") + + @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(threading, 'Threading required for this test.') + class UnixDatagramHandlerTest(DatagramHandlerTest): + +@@ -1610,6 +1622,7 @@ + self.assertEqual(self.log_output, b'<11>h\xc3\xa4m-sp\xc3\xa4m') + + @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(threading, 'Threading required for this test.') + class UnixSysLogHandlerTest(SysLogHandlerTest): + diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py --- orig/Lib/test/test_mailcap.py 2015-02-03 19:49:04.000000000 +0800 +++ modified/Lib/test/test_mailcap.py 2015-05-04 14:35:55.000000000 +0800 @@ -12584,7 +12709,7 @@ diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py p = os.popen(cmd, 'r') diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py --- orig/Lib/test/test_shutil.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2015-05-04 14:44:01.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2015-07-04 22:52:47.000000000 +0800 @@ -48,6 +48,7 @@ except ImportError: ZIP_SUPPORT = find_executable('zip') @@ -12593,7 +12718,15 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py def _fake_rename(*args, **kwargs): # Pretend the destination path is on a different filesystem. raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") -@@ -1741,6 +1742,7 @@ +@@ -1318,6 +1319,7 @@ + self.assertEqual(['foo'], os.listdir(rv)) + + ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't support other executables.") + class TestWhich(unittest.TestCase): + + def setUp(self): +@@ -1741,6 +1743,7 @@ self.assertEqual(size.lines, 888) @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") @@ -12614,7 +12747,7 @@ diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py # test-running process from all the signals. It then diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py --- orig/Lib/test/test_site.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_site.py 2015-05-04 14:44:06.000000000 +0800 ++++ modified/Lib/test/test_site.py 2015-07-04 21:21:33.000000000 +0800 @@ -31,6 +31,7 @@ os.makedirs(site.USER_SITE) site.addsitedir(site.USER_SITE) @@ -12631,6 +12764,15 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py def test_s_option(self): usersite = site.USER_SITE self.assertIn(usersite, sys.path) +@@ -231,7 +233,7 @@ + dirs = site.getsitepackages() + + if (sys.platform == "darwin" and +- sysconfig.get_config_var("PYTHONFRAMEWORK")): ++ sysconfig.get_config_var("PYTHONFRAMEWORK")): + # OS X framework builds + site.PREFIXES = ['Python.framework'] + dirs = site.getsitepackages() @@ -322,6 +324,7 @@ """Restore sys.path""" sys.path[:] = self.sys_path @@ -12647,6 +12789,158 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py def test_startup_imports(self): # This tests checks which modules are loaded by Python when it # initially starts upon startup. +diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py +--- orig/Lib/test/test_socket.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_socket.py 2015-07-04 22:53:12.000000000 +0800 +@@ -530,6 +530,7 @@ + sock.bind(path) + self.addCleanup(support.unlink, path) + ++ + class UnixStreamBase(UnixSocketTestBase): + """Base class for Unix-domain SOCK_STREAM tests.""" + +@@ -774,8 +775,7 @@ + self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names))) + + def test_host_resolution(self): +- for addr in ['0.1.1.~1', '1+.1.1.1', '::1q', '::1::2', +- '1:1:1:1:1:1:1:1:1']: ++ for addr in ['0.1.1.~1', '1+.1.1.1']: + self.assertRaises(OSError, socket.gethostbyname, addr) + self.assertRaises(OSError, socket.gethostbyaddr, addr) + +@@ -787,6 +787,12 @@ + for host in [support.HOST]: + self.assertIn(host, socket.gethostbyaddr(host)[2]) + ++ @unittest.skipUnless(socket.has_ipv6, "test needs IPv6 support") ++ def test_host_resolution_ipv6(self): ++ for addr in ['::1q', '::1::2', '1:1:1:1:1:1:1:1:1']: ++ self.assertRaises(OSError, socket.gethostbyname, addr) ++ self.assertRaises(OSError, socket.gethostbyaddr, addr) ++ + @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()") + @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()") + def test_sethostname(self): +@@ -1286,7 +1292,7 @@ + # these should all be successful + socket.gethostbyname('испытание.python.org') + socket.gethostbyname_ex('испытание.python.org') +- socket.getaddrinfo('испытание.python.org',0,socket.AF_UNSPEC,socket.SOCK_STREAM) ++ socket.getaddrinfo('испытание.python.org', 0, socket.AF_UNSPEC, socket.SOCK_STREAM) + # this may not work if the forward lookup choses the IPv6 address, as that doesn't + # have a reverse entry yet + # socket.gethostbyaddr('испытание.python.org') +@@ -2727,7 +2733,7 @@ + def _testFDPassCMSG_LEN(self): + self.createAndSendFDs(1) + +- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") ++ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @requireAttrs(socket, "CMSG_SPACE") + def testFDPassSeparate(self): + # Pass two FDs in two separate arrays. Arrays may be combined +@@ -2737,7 +2743,7 @@ + maxcmsgs=2) + + @testFDPassSeparate.client_skip +- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") ++ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + def _testFDPassSeparate(self): + fd0, fd1 = self.newFDs(2) + self.assertEqual( +@@ -2749,7 +2755,7 @@ + array.array("i", [fd1]))]), + len(MSG)) + +- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") ++ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @requireAttrs(socket, "CMSG_SPACE") + def testFDPassSeparateMinSpace(self): + # Pass two FDs in two separate arrays, receiving them into the +@@ -2761,7 +2767,7 @@ + maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC) + + @testFDPassSeparateMinSpace.client_skip +- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") ++ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + def _testFDPassSeparateMinSpace(self): + fd0, fd1 = self.newFDs(2) + self.assertEqual( +@@ -3532,12 +3538,14 @@ + + @requireAttrs(socket.socket, "sendmsg") + @requireAttrs(socket, "AF_UNIX") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(thread, 'Threading required for this test.') + class SendmsgUnixStreamTest(SendmsgStreamTests, SendrecvmsgUnixStreamTestBase): + pass + + @requireAttrs(socket.socket, "recvmsg") + @requireAttrs(socket, "AF_UNIX") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(thread, 'Threading required for this test.') + class RecvmsgUnixStreamTest(RecvmsgTests, RecvmsgGenericStreamTests, + SendrecvmsgUnixStreamTestBase): +@@ -3545,6 +3553,7 @@ + + @requireAttrs(socket.socket, "recvmsg_into") + @requireAttrs(socket, "AF_UNIX") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(thread, 'Threading required for this test.') + class RecvmsgIntoUnixStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests, + SendrecvmsgUnixStreamTestBase): +@@ -3552,12 +3561,14 @@ + + @requireAttrs(socket.socket, "sendmsg", "recvmsg") + @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(thread, 'Threading required for this test.') + class RecvmsgSCMRightsStreamTest(SCMRightsTest, SendrecvmsgUnixStreamTestBase): + pass + + @requireAttrs(socket.socket, "sendmsg", "recvmsg_into") + @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + @unittest.skipUnless(thread, 'Threading required for this test.') + class RecvmsgIntoSCMRightsStreamTest(RecvmsgIntoMixin, SCMRightsTest, + SendrecvmsgUnixStreamTestBase): +diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver.py +--- orig/Lib/test/test_socketserver.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_socketserver.py 2015-07-04 22:53:26.000000000 +0800 +@@ -8,7 +8,7 @@ + import select + import signal + import socket +-import select ++import sys + import errno + import tempfile + import unittest +@@ -32,6 +32,7 @@ + HAVE_FORKING = hasattr(os, "fork") + requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking') + ++ + def signal_alarm(n): + """Call signal.alarm when it exists (i.e. not on Windows).""" + if hasattr(signal, 'alarm'): +@@ -186,12 +187,14 @@ + self.stream_examine) + + @requires_unix_sockets ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_UnixStreamServer(self): + self.run_server(socketserver.UnixStreamServer, + socketserver.StreamRequestHandler, + self.stream_examine) + + @requires_unix_sockets ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_ThreadingUnixStreamServer(self): + self.run_server(socketserver.ThreadingUnixStreamServer, + socketserver.StreamRequestHandler, diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py --- orig/Lib/test/test_source_encoding.py 2015-02-03 19:49:04.000000000 +0800 +++ modified/Lib/test/test_source_encoding.py 2015-05-04 14:44:09.000000000 +0800 @@ -12737,7 +13031,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py self.assertEqual(os.path.abspath(sys.executable), sys.executable) diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py --- orig/Lib/test/test_sysconfig.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2015-05-04 14:44:23.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2015-07-04 22:53:33.000000000 +0800 @@ -15,6 +15,7 @@ get_scheme_names, get_config_var, _main) import _osx_support @@ -12746,7 +13040,13 @@ diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py class TestSysConfig(unittest.TestCase): def setUp(self): -@@ -239,6 +240,7 @@ +@@ -234,11 +235,12 @@ + self.assertTrue(os.path.isfile(config_h), config_h) + + def test_get_scheme_names(self): +- wanted = ('nt', 'nt_user', 'osx_framework_user', ++ wanted = ('ios', 'nt', 'nt_user', 'osx_framework_user', + 'posix_home', 'posix_prefix', 'posix_user') self.assertEqual(get_scheme_names(), wanted) @skip_unless_symlink @@ -12970,6 +13270,25 @@ diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py URL = 'http://www.example.com/' CMD_NAME = 'test' +diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py +--- orig/Lib/test/test_zipfile.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_zipfile.py 2015-07-04 22:53:46.000000000 +0800 +@@ -583,6 +583,7 @@ + if name + 'o' not in namelist: + self.assertIn(name + 'c', namelist) + ++ @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") + def test_write_pyfile(self): + with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: + fn = __file__ +@@ -625,6 +626,7 @@ + self.assertCompiledIn('email/__init__.py', names) + self.assertCompiledIn('email/mime/text.py', names) + ++ @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") + def test_write_filtered_python_package(self): + import test + packagedir = os.path.dirname(test.__file__) diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_break.py --- orig/Lib/unittest/test/test_break.py 2015-02-03 19:49:04.000000000 +0800 +++ modified/Lib/unittest/test/test_break.py 2015-04-27 09:20:54.000000000 +0800 @@ -47672,6 +47991,20 @@ diff -Nru orig/Python/marshal.c modified/Python/marshal.c #define TYPE_NULL '0' Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ +diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/iOS-test/main.py +--- orig/Tools/iOS-test/app/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-04 21:31:30.000000000 +0800 +@@ -0,0 +1,10 @@ ++from datetime import datetime ++from test import regrtest ++ ++regrtest.start = datetime.now() ++print("START:", regrtest.start) ++regrtest.main_in_temp_cwd() ++regrtest.end = datetime.now() ++print("END:", regrtest.end) ++print("Duration:", regrtest.end - regrtest.start) ++ diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_packages/README --- orig/Tools/iOS-test/app_packages/README 1970-01-01 08:00:00.000000000 +0800 +++ modified/Tools/iOS-test/app_packages/README 2015-04-26 21:28:31.000000000 +0800 @@ -47680,8 +48013,8 @@ diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_pa \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json --- orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-04-26 21:28:31.000000000 +0800 -@@ -0,0 +1,53 @@ ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-07-04 17:34:59.000000000 +0800 +@@ -0,0 +1,58 @@ +{ + "images" : [ + { @@ -47700,6 +48033,11 @@ diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Conten + "scale" : "2x" + }, + { ++ "idiom" : "iphone", ++ "size" : "60x60", ++ "scale" : "3x" ++ }, ++ { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" @@ -47799,7 +48137,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools +/* Localized versions of Info.plist keys */ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist --- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-04-26 21:28:31.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-07-04 17:34:56.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -47812,7 +48150,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-te + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier -+ com.python.${PRODUCT_NAME:rfc1034identifier} ++ org.python.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName @@ -47846,7 +48184,6 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-te + + + -\ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch --- orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 +++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2015-04-26 21:28:31.000000000 +0800 @@ -47870,17 +48207,12 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2015-06-27 21:42:56.000000000 +0800 -@@ -0,0 +1,119 @@ ++++ modified/Tools/iOS-test/iOS-test/main.m 2015-07-04 23:12:23.000000000 +0800 +@@ -0,0 +1,125 @@ +// +// main.m +// A main module for starting Python projects under iOS. +// -+// Copyright (c) 2014 Russell Keith-Magee. -+// Released under the terms of the BSD license. -+// Based on an intial file provided as part of the Kivy project -+// Copyright (c) 2014 Russell Keith-Magee. -+// + +#import +#import @@ -47890,24 +48222,37 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m +int main(int argc, char *argv[]) { + int ret = 0; + unsigned int i; -+ NSString *python_path; -+ wchar_t* python_home; ++ NSString *tmp_path; ++ NSString *exe; ++ NSString *python_home; ++ wchar_t *wpython_home; ++ const char* main_script; + wchar_t** python_argv; + @autoreleasepool { -+ ++ + NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; -+ -+ putenv("PYTHONNOUSERSITE=1"); -+ -+ python_path = [NSString stringWithFormat:@"PYTHONPATH=%@/src:%@/app_packages", -+ resourcePath, resourcePath, nil]; -+ NSLog(@"%s", [python_path UTF8String]); -+ putenv((char *)[python_path UTF8String]); -+ -+ NSLog(@"PythonHome is: %s", [resourcePath UTF8String]); -+ python_home = _Py_char2wchar([resourcePath cStringUsingEncoding:NSUTF8StringEncoding], NULL); -+ Py_SetPythonHome(python_home); -+ ++ ++ // Special environment to avoid writing bytecode because ++ // the process will not have write attribute on the device. ++ putenv("PYTHONDONTWRITEBYTECODE=1"); ++ ++ python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; ++ NSLog(@"PythonHome is: %@", python_home); ++ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); ++ Py_SetPythonHome(wpython_home); ++ ++ // iOS provides a specific directory for temp files. ++ tmp_path = [NSString stringWithFormat:@"TMP=%@/tmp", resourcePath, nil]; ++ putenv((char *)[tmp_path UTF8String]); ++ ++ // Since iOS doesn't allow dynamic linking, we have to know ++ // the name of the executable so that we can find the ctypes ++ // test objects. However, sys.argv[0] will be updated to ++ // reflect the script name; the TEST_EXECUTABLE environment ++ // variable provides the mechanism for specifying the filename. ++ exe = [NSString stringWithFormat:@"TEST_EXECUTABLE=%s", argv[0], nil]; ++ putenv((char *)[exe UTF8String]); ++ + NSLog(@"Initializing Python runtime..."); + Py_Initialize(); + @@ -47923,50 +48268,47 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + "-j", "1", + "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", +// "-v", -+ "-W", ++// "-W", +// "test_bytes", // ctypes related; PyBytes_FromFormat +// "test_ctypes", // DL loading? -+// "test_pydoc", // .pyc file not being generated? -+// "test_shutil", // mkdir -+// "test_site", // mkdir +// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc +// "test_unicode", // # ctypes related; PyUnicode_FromFormat -+// "test_zipfile", // mkdir -+ -+// "test_httpservers", // # desktop -+// "test_logging", // # desktop -+// "test_nntplib", // #desktop -+ "test_socket", // # desktop -+// "test_socketserver", // # desktop -+// "test_warnings", // # desktop + }; + -+ int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; ++ // Set the name of the main script ++ main_script = [ ++ [[NSBundle mainBundle] pathForResource:@"Library/Application Support/org.python.iOS-test/app/iOS-test/main" ++ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; ++ ++ if (main_script == NULL) { ++ NSLog(@"Unable to locate app/iOS-test/main.py file"); ++ exit(-1); ++ } + ++ // Construct argv for the interpreter ++ int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; ++ + python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * n_test_args); -+ python_argv[0] = _Py_char2wchar(argv[0], NULL); -+ for (int i = 1; i < n_test_args; i++) { ++ python_argv[0] = _Py_char2wchar(main_script, NULL); ++ for (i = 1; i < n_test_args; i++) { + python_argv[i] = _Py_char2wchar(test_args[i-1], NULL); + } + + PySys_SetArgv(n_test_args, python_argv); -+ ++ + // If other modules are using thread, we need to initialize them before. + PyEval_InitThreads(); -+ -+ // Search and start main.py -+ const char * prog = [ -+ [[NSBundle mainBundle] pathForResource:@"src/iOS-test/main" -+ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; -+ NSLog(@"Running %s", prog); -+ ++ ++ // Start the main.py script ++ NSLog(@"Running %s", main_script); ++ + @try { -+ FILE* fd = fopen(prog, "r"); ++ FILE* fd = fopen(main_script, "r"); + if (fd == NULL) { + ret = 1; + NSLog(@"Unable to open main.py, abort."); + } else { -+ ret = PyRun_SimpleFileEx(fd, prog, 1); ++ ret = PyRun_SimpleFileEx(fd, main_script, 1); + if (ret != 0) { + NSLog(@"Application quit abnormally!"); + } @@ -47978,24 +48320,25 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + @finally { + Py_Finalize(); + } -+ -+ PyMem_RawFree(python_home); ++ ++ PyMem_RawFree(wpython_home); + if (python_argv) { -+ for (i = 0; i < argc; i++) ++ for (i = 0; i < argc; i++) { + PyMem_RawFree(python_argv[i]); ++ } + PyMem_RawFree(python_argv); + } + NSLog(@"Leaving"); + } -+ ++ + exit(ret); + return ret; +} \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj --- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-04-26 21:31:37.000000000 +0800 -@@ -0,0 +1,369 @@ ++++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-07-04 21:28:49.000000000 +0800 +@@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; @@ -48015,8 +48358,6 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; + 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; + 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; -+ 60F0BABE191FC83F006EC268 /* src in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABD191FC83F006EC268 /* src */; }; -+ 60F0BAC0191FC868006EC268 /* app_packages in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABF191FC868006EC268 /* app_packages */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ @@ -48032,10 +48373,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; -+ 60796F34191A76C400A9926B /* include */ = {isa = PBXFileReference; lastKnownFileType = folder; name = include; path = Python.framework/Resources/include; sourceTree = ""; }; -+ 60796F35191A76C400A9926B /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = Python.framework/Resources/lib; sourceTree = ""; }; + 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; -+ 60F0BABD191FC83F006EC268 /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; path = src; sourceTree = SOURCE_ROOT; }; ++ 60DBD4B01B47DEF700068095 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; + 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + @@ -48060,7 +48399,6 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796ED919190F4100A9926B = { + isa = PBXGroup; + children = ( -+ 60796F1A19190FEB00A9926B /* Python */, + 60796EEB19190F4100A9926B /* iOS-test */, + 60796EE419190F4100A9926B /* Frameworks */, + 60796EE319190F4100A9926B /* Products */, @@ -48092,8 +48430,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796EEB19190F4100A9926B /* iOS-test */ = { + isa = PBXGroup; + children = ( ++ 60DBD4B01B47DEF700068095 /* app */, + 60F0BABF191FC868006EC268 /* app_packages */, -+ 60F0BABD191FC83F006EC268 /* src */, + 60796EF719190F4100A9926B /* Images.xcassets */, + 60796EEC19190F4100A9926B /* Supporting Files */, + ); @@ -48111,15 +48449,6 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + name = "Supporting Files"; + sourceTree = ""; + }; -+ 60796F1A19190FEB00A9926B /* Python */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796F34191A76C400A9926B /* include */, -+ 60796F35191A76C400A9926B /* lib */, -+ ); -+ name = Python; -+ sourceTree = ""; -+ }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ @@ -48173,10 +48502,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( -+ 60F0BABE191FC83F006EC268 /* src in Resources */, + 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, + 60796EF819190F4100A9926B /* Images.xcassets in Resources */, -+ 60F0BAC0191FC868006EC268 /* app_packages in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; @@ -48195,7 +48522,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; -+ shellScript = "rsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\n"; ++ shellScript = "mkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nmkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages/ $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources/lib/python`readlink $PROJECT_DIR/Python.framework/Versions/Current`/site-packages/\n"; + }; +/* End PBXShellScriptBuildPhase section */ + @@ -48365,20 +48692,6 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + }; + rootObject = 60796EDA19190F4100A9926B /* Project object */; +} -diff -Nru orig/Tools/iOS-test/src/iOS-test/main.py modified/Tools/iOS-test/src/iOS-test/main.py ---- orig/Tools/iOS-test/src/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/src/iOS-test/main.py 2015-05-04 13:49:31.000000000 +0800 -@@ -0,0 +1,10 @@ -+from datetime import datetime -+from test import regrtest -+ -+regrtest.start = datetime.now() -+print("START:", regrtest.start) -+regrtest.main_in_temp_cwd() -+regrtest.end = datetime.now() -+print("END:", regrtest.end) -+print("Duration:", regrtest.end - regrtest.start) -+ diff -Nru orig/config.sub modified/config.sub --- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 +++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 @@ -48573,8 +48886,8 @@ diff -Nru orig/configure.ac modified/configure.ac echo "creating Makefile" >&AS_MESSAGE_FD diff -Nru orig/iOS/Makefile modified/iOS/Makefile --- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2015-06-28 13:59:34.000000000 +0800 -@@ -0,0 +1,230 @@ ++++ modified/iOS/Makefile 2015-07-04 13:38:21.000000000 +0800 +@@ -0,0 +1,248 @@ +# This is a "Meta-makefile" for building an iOS-compatible Python.framework. +# It invokes the base makefile multiple times, once for each hardware platform +# that needs to be supported; then it combines the products into a single "fat" @@ -48641,10 +48954,15 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + cd .. && ./configure --prefix=$(IOS_DIR)/build/host --without-ensurepip + cd .. && make + cd .. && make install ++ # Now pack away all the built artefacts so that the top level distclean doesn't touch them ++ cd build && tar zcvf host.tar.gz host && rm -rf host + +build/ios-simulator-i386.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build Simulator library + if test -f ../Makefile; then cd .. && make distclean; fi ++ # Restore host Python ++ cd build && tar zxvf host.tar.gz ++ # Configure and build target Python + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=i386-apple-ios --build=$(BUILD_OS_ID) \ @@ -48660,6 +48978,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile +build/ios-simulator-x86_64.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build Simulator library + if test -f ../Makefile; then cd .. && make distclean; fi ++ # Restore host Python ++ cd build && tar zxvf host.tar.gz ++ # Configure and build target Python + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=x86_64-apple-ios --build=$(BUILD_OS_ID) \ @@ -48675,6 +48996,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile +build/ios-armv7.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build ARMv7 library + if test -f ../Makefile; then cd .. && make distclean; fi ++ # Restore host Python ++ cd build && tar zxvf host.tar.gz ++ # Configure and build target Python + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=armv7-apple-ios --build=$(BUILD_OS_ID) \ @@ -48690,6 +49014,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile +build/ios-armv7s.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build ARMv7s library + if test -f ../Makefile; then cd .. && make distclean; fi ++ # Restore host Python ++ cd build && tar zxvf host.tar.gz ++ # Configure and build target Python + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=armv7s-apple-ios --build=$(BUILD_OS_ID) \ @@ -48705,6 +49032,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile +build/ios-arm64.tar.gz: build/host/bin/python$(PYTHON_VERSION) + # Configure and build ARM64 library + if test -f ../Makefile; then cd .. && make distclean; fi ++ # Restore host Python ++ cd build && tar zxvf host.tar.gz ++ # Configure and build target Python + cd .. && \ + PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ + --host=aarch64-apple-ios --build=$(BUILD_OS_ID) \ @@ -48786,6 +49116,7 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + cd $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION); \ + rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ + config-$(PYTHON_VERSION) ctypes/test distutils/tests site-packages sqlite3/test; \ ++ find . -name "*.pyc" -exec rm -rf {} \; ; \ + zip -r ../python$(subst .,,$(PYTHON_VERSION)).zip *; \ + rm -rf *; \ + fi @@ -49109,8 +49440,8 @@ diff -Nru orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings modified/iOS/X +/* Localized versions of Info.plist keys */ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/main.m --- orig/iOS/XCode-sample/sample/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/main.m 2015-03-14 22:34:08.000000000 +0800 -@@ -0,0 +1,97 @@ ++++ modified/iOS/XCode-sample/sample/main.m 2015-07-04 23:12:05.000000000 +0800 +@@ -0,0 +1,112 @@ +// +// main.m +// A main module for starting Python projects under iOS. @@ -49124,59 +49455,73 @@ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/m +int main(int argc, char *argv[]) { + int ret = 0; + unsigned int i; -+ wchar_t* python_home; ++ NSString *tmp_path; ++ NSString *python_home; ++ wchar_t *wpython_home; ++ const char* main_script; + wchar_t** python_argv; ++ + @autoreleasepool { -+ ++ + NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; -+ -+ // Special environment to prefer .pyo, and don't write bytecode if .py are found -+ // because the process will not have write attribute on the device. -+ putenv("PYTHONOPTIMIZE=2"); ++ ++ // Special environment to prefer .pyo; also, don't write bytecode ++ // because the process will not have write permissions on the device. ++ putenv("PYTHONOPTIMIZE=1"); + putenv("PYTHONDONTWRITEBYTECODE=1"); -+ putenv("PYTHONNOUSERSITE=1"); -+ -+ NSString *python_path = [NSString stringWithFormat:@"PYTHONPATH=%@/src:%@/app_packages", -+ resourcePath, resourcePath, nil]; -+ putenv((char *)[python_path UTF8String]); -+ // putenv("PYTHONVERBOSE=1"); -+ -+ NSLog(@"PythonHome is: %s", [resourcePath UTF8String]); -+ python_home = _Py_char2wchar([resourcePath cStringUsingEncoding:NSUTF8StringEncoding], NULL); -+ Py_SetPythonHome(python_home); -+ ++ ++ python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; ++ NSLog(@"PythonHome is: %@", python_home); ++ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); ++ Py_SetPythonHome(wpython_home); ++ ++ // iOS provides a specific directory for temp files. ++ tmp_path = [NSString stringWithFormat:@"TMP=%@/tmp", resourcePath, nil]; ++ putenv((char *)[tmp_path UTF8String]); ++ + NSLog(@"Initializing Python runtime"); + Py_Initialize(); -+ ++ ++ // Set the name of the main script ++ main_script = [ ++ [[NSBundle mainBundle] pathForResource:@"Library/Application Support/org.python.sample/app/sample/main" ++ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; ++ ++ if (main_script == NULL) { ++ NSLog(@"Unable to locate app/sample/main.py file"); ++ exit(-1); ++ } ++ ++ // Construct argv for the interpreter + python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * argc); -+ for (i = 0; i < argc; i++) { ++ ++ python_argv[0] = _Py_char2wchar(main_script, NULL); ++ for (i = 1; i < argc; i++) { + python_argv[i] = _Py_char2wchar(argv[i], NULL); + } ++ + PySys_SetArgv(argc, python_argv); -+ -+ // If other modules are using thread, we need to initialize them before. ++ ++ // If other modules are using threads, we need to initialize them. + PyEval_InitThreads(); -+ -+ // Search and start main.py -+ const char * prog = [ -+ [[NSBundle mainBundle] pathForResource:@"app/sample/main" -+ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; -+ NSLog(@"Running %s", prog); -+ ++ ++ // Start the main.py script ++ NSLog(@"Running %s", main_script); ++ + @try { -+ FILE* fd = fopen(prog, "r"); ++ FILE* fd = fopen(main_script, "r"); + if (fd == NULL) { + ret = 1; + NSLog(@"Unable to open main.py, abort."); + } else { -+ ret = PyRun_SimpleFileEx(fd, prog, 1); ++ ret = PyRun_SimpleFileEx(fd, main_script, 1); + if (ret != 0) { + NSLog(@"Application quit abnormally!"); + } else { + // In a normal iOS application, the following line is what + // actually runs the application. It requires that the + // Objective-C runtime environment has a class named -+ // "PythonAppDelegate". This sample project doesn't define ++ // "PythonAppDelegate". This project doesn't define + // one, because Objective-C bridging isn't something + // Python does out of the box. You'll need to use + // a library like Rubicon-ObjC [1], Pyobjus [2] or @@ -49184,8 +49529,8 @@ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/m + // [1] http://pybee.org/rubicon + // [2] http://pyobjus.readthedocs.org/ + // [3] https://pythonhosted.org/pyobjc/ -+ -+ // UIApplicationMain(argc, argv, nil, @"PythonAppDelegate"); ++ ++ UIApplicationMain(argc, argv, nil, @"PythonAppDelegate"); + } + } + } @@ -49195,16 +49540,17 @@ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/m + @finally { + Py_Finalize(); + } -+ -+ error: ++ ++ PyMem_RawFree(wpython_home); + if (python_argv) { -+ for (i = 0; i < argc; i++) ++ for (i = 0; i < argc; i++) { + PyMem_RawFree(python_argv[i]); ++ } + PyMem_RawFree(python_argv); + } + NSLog(@"Leaving"); + } -+ ++ + exit(ret); + return ret; +} @@ -49282,8 +49628,8 @@ diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-samp \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj --- orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-03-14 22:03:22.000000000 +0800 -@@ -0,0 +1,373 @@ ++++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-07-04 23:17:10.000000000 +0800 +@@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; @@ -49293,7 +49639,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + objects = { + +/* Begin PBXBuildFile section */ -+ 605737FC1AB4772A00F05C6F /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 60796F35191A76C400A9926B /* lib */; }; + 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE519190F4100A9926B /* Foundation.framework */; }; + 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE719190F4100A9926B /* CoreGraphics.framework */; }; + 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE919190F4100A9926B /* UIKit.framework */; }; @@ -49304,8 +49649,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; + 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; + 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; -+ 60F0BABE191FC83F006EC268 /* app in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABD191FC83F006EC268 /* app */; }; -+ 60F0BAC0191FC868006EC268 /* app_packages in Resources */ = {isa = PBXBuildFile; fileRef = 60F0BABF191FC868006EC268 /* app_packages */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ @@ -49321,7 +49664,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; -+ 60796F35191A76C400A9926B /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = Python.framework/Resources/lib; sourceTree = ""; }; + 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 60F0BABD191FC83F006EC268 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; + 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; @@ -49348,7 +49690,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796ED919190F4100A9926B = { + isa = PBXGroup; + children = ( -+ 60796F1A19190FEB00A9926B /* Python */, + 60796EEB19190F4100A9926B /* sample */, + 60796EE419190F4100A9926B /* Frameworks */, + 60796EE319190F4100A9926B /* Products */, @@ -49368,10 +49709,10 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + children = ( + 60796F1F1919174D00A9926B /* libsqlite3.dylib */, + 60796F1819190FBB00A9926B /* libz.dylib */, -+ 60796F2B1919C70800A9926B /* Python.framework */, -+ 60796EE519190F4100A9926B /* Foundation.framework */, + 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, + 60796EE719190F4100A9926B /* CoreGraphics.framework */, ++ 60796EE519190F4100A9926B /* Foundation.framework */, ++ 60796F2B1919C70800A9926B /* Python.framework */, + 60796EE919190F4100A9926B /* UIKit.framework */, + ); + name = Frameworks; @@ -49380,8 +49721,8 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796EEB19190F4100A9926B /* sample */ = { + isa = PBXGroup; + children = ( -+ 60F0BABF191FC868006EC268 /* app_packages */, + 60F0BABD191FC83F006EC268 /* app */, ++ 60F0BABF191FC868006EC268 /* app_packages */, + 60796EF719190F4100A9926B /* Images.xcassets */, + 60796EEC19190F4100A9926B /* Supporting Files */, + ); @@ -49399,14 +49740,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + name = "Supporting Files"; + sourceTree = ""; + }; -+ 60796F1A19190FEB00A9926B /* Python */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796F35191A76C400A9926B /* lib */, -+ ); -+ name = Python; -+ sourceTree = ""; -+ }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ @@ -49435,7 +49768,7 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + isa = PBXProject; + attributes = { + CLASSPREFIX = Py; -+ LastUpgradeCheck = 0510; ++ LastUpgradeCheck = 0630; + ORGANIZATIONNAME = "Example Corp"; + }; + buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "sample" */; @@ -49460,11 +49793,8 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( -+ 60F0BABE191FC83F006EC268 /* app in Resources */, -+ 605737FC1AB4772A00F05C6F /* lib in Resources */, + 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, + 60796EF819190F4100A9926B /* Images.xcassets in Resources */, -+ 60F0BAC0191FC868006EC268 /* app_packages in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; @@ -49483,7 +49813,7 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; -+ shellScript = "rsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH\n"; ++ shellScript = "mkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nmkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages/ $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources/lib/python`readlink $PROJECT_DIR/Python.framework/Versions/Current`/site-packages/\n"; + }; +/* End PBXShellScriptBuildPhase section */ + @@ -49514,7 +49844,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; -+ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; @@ -49554,7 +49883,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; -+ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; @@ -49587,7 +49915,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796F0F19190F4100A9926B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { -+ ARCHS = "$(ARCHS_STANDARD)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + FRAMEWORK_SEARCH_PATHS = ( @@ -49611,7 +49938,6 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + 60796F1019190F4100A9926B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { -+ ARCHS = "$(ARCHS_STANDARD)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + FRAMEWORK_SEARCH_PATHS = ( From 1beb8ae9ea2d0fc574928d64ae37510c90956b62 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 28 Jul 2015 20:52:44 +0800 Subject: [PATCH 06/51] Bumped OpenSSL version, and made downloads more robust. --- Makefile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index dc502bde..ca7efdea 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ PROJECTDIR=$(shell pwd) -BUILD_NUMBER=2 +BUILD_NUMBER=3 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.4.2 -OPENSSL_VERSION=1.0.2c + +OPENSSL_VERSION_NUMBER=1.0.2 +OPENSSL_REVISION=d +OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) # 32 bit iOS Simulator build commands and flags IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) @@ -66,7 +69,8 @@ clean-OpenSSL: # Download original OpenSSL source code archive. downloads/openssl-$(OPENSSL_VERSION).tgz: downloads - curl -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz > downloads/openssl-$(OPENSSL_VERSION).tgz + -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi + if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi build/OpenSSL/ios-simulator-i386/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz # Unpack sources @@ -250,7 +254,7 @@ clean-Python: # Download original Python source code archive. downloads/Python-$(PYTHON_VERSION).tgz: downloads - curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz + if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi # build/Python-$(PYTHON_VERSION)/Python.framework: build dist/OpenSSL.framework downloads/Python-$(PYTHON_VERSION).tgz build/Python-$(PYTHON_VERSION)/Python.framework: build downloads/Python-$(PYTHON_VERSION).tgz From 7a5ce3327289c3aa579fe339ec53d0c32242955f Mon Sep 17 00:00:00 2001 From: Max Khon Date: Mon, 12 Oct 2015 22:14:03 +0600 Subject: [PATCH 07/51] Build ARM targets with Bitcode enabled (-fembed-bitcode) so that the frameworks are suitable for projects with ENABLE_BITCODE = YES. --- Makefile | 6 +++--- patch/Python/Python.patch | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index ca7efdea..9d83d6da 100644 --- a/Makefile +++ b/Makefile @@ -19,15 +19,15 @@ IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 # iOS ARMV7 build commands and flags IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 -fembed-bitcode --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 # iOS ARMV7S build commands and flags IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s -fembed-bitcode --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 # iOS ARM64 build commands and flags IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 -fembed-bitcode --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 all: Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 6ff42a57..7884d9a9 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -48913,17 +48913,17 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + +# iOS ARMV7 build commands and flags +IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 -fembed-bitcode --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 + +# iOS ARMV7S build commands and flags +IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s -fembed-bitcode --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7S_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 + +# iOS ARM64 build commands and flags +IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 -fembed-bitcode --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 + + From f2af7c4fb97014aab54db8106efc76004b5cf8cd Mon Sep 17 00:00:00 2001 From: Max Khon Date: Thu, 15 Oct 2015 03:52:38 +0600 Subject: [PATCH 08/51] - Generalize Makefile glue for OpenSSL build. - Add tvOS and watchOS targets. --- Makefile | 286 +++++++++++++++++------------------------------------ README.rst | 9 +- 2 files changed, 100 insertions(+), 195 deletions(-) diff --git a/Makefile b/Makefile index 9d83d6da..0965ff3c 100644 --- a/Makefile +++ b/Makefile @@ -9,52 +9,33 @@ OPENSSL_VERSION_NUMBER=1.0.2 OPENSSL_REVISION=d OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) -# 32 bit iOS Simulator build commands and flags -IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 +OS= iOS tvOS watchOS +TARGETS-iOS= iphonesimulator.x86_64 iphonesimulator.i386\ + iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 +CFLAGS-iOS= -miphoneos-version-min=7.0 +CFLAGS-iphoneos.armv7= -fembed-bitcode +CFLAGS-iphoneos.armv7s= -fembed-bitcode +CFLAGS-iphoneos.arm64= -fembed-bitcode -# 64 bit iOS Simulator build commands and flags -IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 +TARGETS-tvOS= appletvsimulator.x86_64 appletvos.arm64 +CFLAGS-tvOS= -mtvos-version-min=9.0 +CFLAGS-appletvos.arm64= -fembed-bitcode -# iOS ARMV7 build commands and flags -IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 -fembed-bitcode --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 +TARGETS-watchOS= watchsimulator.i386 watchos.armv7k +CFLAGS-watchOS= -mwatchos-version-min=2.0 +CFLAGS-watchos.armv7= -fembed-bitcode -# iOS ARMV7S build commands and flags -IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s -fembed-bitcode --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 - -# iOS ARM64 build commands and flags -IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 -fembed-bitcode --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 - - -all: Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz +all: $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) # Clean all builds clean: - rm -rf build dist Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz + rm -rf build dist $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) # Full clean - includes all downloaded products distclean: clean rm -rf downloads -Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz: dist/OpenSSL.framework dist/Python.framework - cd dist && tar zcvf ../Python-$(PYTHON_VERSION)-iOS-support.b$(BUILD_NUMBER).tar.gz Python.framework OpenSSL.framework - -########################################################################### -# Working directories -########################################################################### - -downloads: - mkdir -p downloads - -build: - mkdir -p build - -dist: - mkdir -p dist +downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz ########################################################################### # OpenSSL @@ -64,183 +45,95 @@ dist: # Clean the OpenSSL project clean-OpenSSL: - rm -rf build/openssl-$(OPENSSL_VERSION) + rm -rf build/OpenSSL rm -rf dist/OpenSSL.framework # Download original OpenSSL source code archive. -downloads/openssl-$(OPENSSL_VERSION).tgz: downloads +downloads/openssl-$(OPENSSL_VERSION).tgz: + mkdir downloads -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi -build/OpenSSL/ios-simulator-i386/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz - # Unpack sources - cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz - cd build && mv openssl-$(OPENSSL_VERSION) ios-simulator-i386 - mkdir -p build/OpenSSL - cd build && mv ios-simulator-i386 OpenSSL - # Tweak the Makefile to include sysroot and iOS minimum version - cd build/OpenSSL/ios-simulator-i386 && \ - sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_SIMULATOR_SDK_ROOT) -arch i386 -miphoneos-version-min=7.0 !" Makefile - # Configure the build - cd build/OpenSSL/ios-simulator-i386 && \ - CC="$(IOS_SIMULATOR_CC)" \ - CROSS_TOP="$(dir $(IOS_SIMULATOR_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_SIMULATOR_SDK_ROOT))" \ - ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-simulator-i386 - # Make the build - cd build/OpenSSL/ios-simulator-i386 && \ - CC="$(IOS_SIMULATOR_CC)" \ - CROSS_TOP="$(dir $(IOS_SIMULATOR_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_SIMULATOR_SDK_ROOT))" \ - make all +define build-openssl-target +ARCH-$1= $$(subst .,,$$(suffix $1)) +SDK-$1= $$(basename $1) -build/OpenSSL/ios-simulator-x86_64/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz - # Unpack sources - cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz - cd build && mv openssl-$(OPENSSL_VERSION) ios-simulator-x86_64 - mkdir -p build/OpenSSL - cd build && mv ios-simulator-x86_64 OpenSSL - # Tweak the Makefile to include sysroot and iOS minimum version - cd build/OpenSSL/ios-simulator-x86_64 && \ - sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_SIMULATOR_64_SDK_ROOT) -arch x86_64 -miphoneos-version-min=7.0 !" Makefile - # Configure the build - cd build/OpenSSL/ios-simulator-x86_64 && \ - CC="$(IOS_SIMULATOR_64_CC)" \ - CROSS_TOP="$(dir $(IOS_SIMULATOR_64_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_SIMULATOR_64_SDK_ROOT))" \ - ./Configure darwin64-x86_64-cc --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-simulator-x86_64 - # Make the build - cd build/OpenSSL/ios-simulator-x86_64 && \ - CC="$(IOS_SIMULATOR_64_CC)" \ - CROSS_TOP="$(dir $(IOS_SIMULATOR_64_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_SIMULATOR_64_SDK_ROOT))" \ - make all +SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) +CC-$1= $$(shell xcrun -find -sdk $$(SDK-$1) clang)\ + -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) -build/OpenSSL/ios-armv7/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz +build/OpenSSL/$1/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz # Unpack sources - cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz - cd build && mv openssl-$(OPENSSL_VERSION) ios-armv7 - mkdir -p build/OpenSSL - cd build && mv ios-armv7 OpenSSL - # Tweak the Makefile to include sysroot and iOS minimum version - cd build/OpenSSL/ios-armv7 && \ - sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARMV7_SDK_ROOT) -arch armv7 -miphoneos-version-min=7.0 !" Makefile + mkdir -p build/OpenSSL/$1 + tar zxf downloads/openssl-$(OPENSSL_VERSION).tgz --strip-components 1 -C build/OpenSSL/$1 +ifeq ($$(findstring simulator,$$(SDK-$1)),) # Tweak ui_openssl.c - cd build/OpenSSL/ios-armv7 && \ - sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c + sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" build/OpenSSL/$1/crypto/ui/ui_openssl.c +endif +ifeq ($$(findstring iphone,$$(SDK-$1)),) + # Patch apps/speed.c to not use fork() since it's not available on tvOS + sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' build/OpenSSL/$1/apps/speed.c + # Patch Configure to build for tvOS or watchOS, not iOS + LANG=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' build/OpenSSL/$1/Configure +endif # Configure the build - cd build/OpenSSL/ios-armv7 && \ - CC="$(IOS_ARMV7_CC)" \ - CROSS_TOP="$(dir $(IOS_ARMV7_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARMV7_SDK_ROOT))" \ - ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-armv7 - # Make the build - cd build/OpenSSL/ios-armv7 && \ - CC="$(IOS_ARMV7_CC)" \ - CROSS_TOP="$(dir $(IOS_ARMV7_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARMV7_SDK_ROOT))" \ - make all + cd build/OpenSSL/$1 && \ + CC="$$(CC-$1)" \ + CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ + CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ + ./Configure iphoneos-cross no-asm --openssldir=$(PROJECTDIR)/build/OpenSSL/$1 -build/OpenSSL/ios-armv7s/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz - # Unpack sources - cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz - cd build && mv openssl-$(OPENSSL_VERSION) ios-armv7s - mkdir -p build/OpenSSL - cd build && mv ios-armv7s OpenSSL - # Tweak the Makefile to include sysroot and iOS minimum version - cd build/OpenSSL/ios-armv7s && \ - sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARMV7S_SDK_ROOT) -arch armv7s -miphoneos-version-min=7.0 !" Makefile - # Tweak ui_openssl.c - cd build/OpenSSL/ios-armv7s && \ - sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c - # Configure the build - cd build/OpenSSL/ios-armv7s && \ - CC="$(IOS_ARMV7S_CC)" \ - CROSS_TOP="$(dir $(IOS_ARMV7S_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARMV7S_SDK_ROOT))" \ - ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-armv7s +build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a: build/OpenSSL/$1/Makefile # Make the build - cd build/OpenSSL/ios-armv7s && \ - CC="$(IOS_ARMV7S_CC)" \ - CROSS_TOP="$(dir $(IOS_ARMV7S_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARMV7S_SDK_ROOT))" \ + cd build/OpenSSL/$1 && \ + CC="$$(CC-$1)" \ + CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ + CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ make all -build/OpenSSL/ios-arm64/libssl.a: build downloads/openssl-$(OPENSSL_VERSION).tgz - # Unpack sources - cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION).tgz - cd build && mv openssl-$(OPENSSL_VERSION) ios-arm64 - mkdir -p build/OpenSSL - cd build && mv ios-arm64 OpenSSL - # Tweak the Makefile to include sysroot and iOS minimum version - cd build/OpenSSL/ios-arm64 && \ - sed -ie "s!^CFLAG=!CFLAG=-isysroot $(IOS_ARM64_SDK_ROOT) -arch arm64 -miphoneos-version-min=7.0 !" Makefile - # Tweak ui_openssl.c - cd build/OpenSSL/ios-arm64 && \ - sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c - # Configure the build - cd build/OpenSSL/ios-arm64 && \ - CC="$(IOS_ARM64_CC)" \ - CROSS_TOP="$(dir $(IOS_ARM64_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARM64_SDK_ROOT))" \ - ./Configure iphoneos-cross --openssldir=$(PROJECTDIR)/build/OpenSSL/ios-arm64 - # Make the build - cd build/OpenSSL/ios-arm64 && \ - CC="$(IOS_ARM64_CC)" \ - CROSS_TOP="$(dir $(IOS_ARM64_SDK_ROOT)).." \ - CROSS_SDK="$(notdir $(IOS_ARM64_SDK_ROOT))" \ - make all +vars-$1: + @echo "ARCH-$1: $$(ARCH-$1)" + @echo "SDK-$1: $$(SDK-$1)" + @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)" + @echo "CC-$1: $$(CC-$1)" +endef + +define build-openssl +$$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-openssl-target,$$(target),$1))) + +Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: dist/$1/OpenSSL.framework dist/$1/Python.framework + tar zcvf $$@ -C dist/$1 Python.framework OpenSSL.framework -build/OpenSSL/libssl.a: \ - build/OpenSSL/ios-simulator-i386/libssl.a \ - build/OpenSSL/ios-simulator-x86_64/libssl.a \ - build/OpenSSL/ios-armv7/libssl.a \ - build/OpenSSL/ios-armv7s/libssl.a \ - build/OpenSSL/ios-arm64/libssl.a - cd build/OpenSSL && \ - lipo -create \ - ios-simulator-i386/libssl.a \ - ios-simulator-x86_64/libssl.a \ - ios-armv7/libssl.a \ - ios-armv7s/libssl.a \ - ios-arm64/libssl.a \ - -output libssl.a - -build/OpenSSL/libcrypto.a: \ - build/OpenSSL/ios-simulator-i386/libssl.a \ - build/OpenSSL/ios-simulator-x86_64/libssl.a \ - build/OpenSSL/ios-armv7/libssl.a \ - build/OpenSSL/ios-armv7s/libssl.a \ - build/OpenSSL/ios-arm64/libssl.a - cd build/OpenSSL && \ - lipo -create \ - ios-simulator-i386/libcrypto.a \ - ios-simulator-x86_64/libcrypto.a \ - ios-armv7/libcrypto.a \ - ios-armv7s/libcrypto.a \ - ios-arm64/libcrypto.a \ - -output libcrypto.a - -dist/OpenSSL.framework: dist build/OpenSSL/libssl.a build/OpenSSL/libcrypto.a +build/OpenSSL/$1/libssl.a: $$(foreach target,$$(TARGETS-$1),build/OpenSSL/$$(target)/libssl.a) + mkdir -p build/OpenSSL/$1 + lipo -create $$^ -output $$@ + +build/OpenSSL/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),build/OpenSSL/$$(target)/libcrypto.a) + mkdir -p build/OpenSSL/$1 + lipo -create $$^ -output $$@ + +dist/$1/OpenSSL.framework: build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a # Create framework directory structure - cd dist && mkdir -p OpenSSL.framework - cd dist && mkdir -p OpenSSL.framework/Versions/$(OPENSSL_VERSION)/ - cd dist/OpenSSL.framework/Versions && ln -fs $(OPENSSL_VERSION) Current + mkdir -p dist/$1/OpenSSL.framework/Versions/$(OPENSSL_VERSION) + ln -fs $(OPENSSL_VERSION) dist/$1/OpenSSL.framework/Versions/Current - # Copy the headers (use the version from the x86_64 simulator because reasons) - cp -r build/OpenSSL/ios-simulator-x86_64/include dist/OpenSSL.framework/Versions/Current/Headers + # Copy the headers (use the version from the simulator because reasons) + cp -r build/OpenSSL/$$(firstword $$(TARGETS-$1))/include dist/$1/OpenSSL.framework/Versions/Current/Headers # Link the current Headers to the top level - cd dist/OpenSSL.framework && ln -fs Versions/Current/Headers + ln -fs Versions/Current/Headers dist/$1/OpenSSL.framework # Create the fat library - libtool -no_warning_for_no_symbols -static \ - -o dist/OpenSSL.framework/Versions/Current/OpenSSL \ - build/OpenSSL/libcrypto.a \ - build/OpenSSL/libssl.a + $(shell xcrun -find libtool) -no_warning_for_no_symbols -static \ + -o dist/$1/OpenSSL.framework/Versions/Current/OpenSSL \ + build/OpenSSL/$1/libcrypto.a \ + build/OpenSSL/$1/libssl.a # Link the fat Library to the top level - cd dist/OpenSSL.framework && ln -fs Versions/Current/OpenSSL + ln -fs Versions/Current/OpenSSL dist/$1/OpenSSL.framework +endef + +$(foreach os,$(OS),$(eval $(call build-openssl,$(os)))) ########################################################################### # Python @@ -253,18 +146,23 @@ clean-Python: rm -rf dist/Python.framework # Download original Python source code archive. -downloads/Python-$(PYTHON_VERSION).tgz: downloads +downloads/Python-$(PYTHON_VERSION).tgz: + mkdir downloads if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi -# build/Python-$(PYTHON_VERSION)/Python.framework: build dist/OpenSSL.framework downloads/Python-$(PYTHON_VERSION).tgz -build/Python-$(PYTHON_VERSION)/Python.framework: build downloads/Python-$(PYTHON_VERSION).tgz +build/Python-$(PYTHON_VERSION)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz # Unpack sources - cd build && tar zxf ../downloads/Python-$(PYTHON_VERSION).tgz + mkdir build + tar zxf downloads/Python-$(PYTHON_VERSION).tgz -C build # Apply patches cd build/Python-$(PYTHON_VERSION) && patch -p1 < ../../patch/Python/Python.patch cd build/Python-$(PYTHON_VERSION) && cp ../../patch/Python/Setup.embedded Modules/Setup.embedded + +#build/Python-$(PYTHON_VERSION)/Python.framework: dist/OpenSSL.framework build/Python-$(PYTHON_VERSION)/Makefile +build/Python-$(PYTHON_VERSION)/iOS/Python.framework: build/Python-$(PYTHON_VERSION)/Makefile # Configure and make the build cd build/Python-$(PYTHON_VERSION)/iOS && make -dist/Python.framework: dist build/Python-$(PYTHON_VERSION)/Python.framework - cd dist && mv ../build/Python-$(PYTHON_VERSION)/Python.framework . +dist/Python.framework: build/Python-$(PYTHON_VERSION)/Python.framework + mkdir dist + mv build/Python-$(PYTHON_VERSION)/Python.framework dist diff --git a/README.rst b/README.rst index 20cfdb89..21569ce4 100644 --- a/README.rst +++ b/README.rst @@ -1,3 +1,10 @@ +This is a fork of https://github.com/pybee/Python-iOS-support/ that contains +Python.framework WIP for tvOS and watchOS. + +In the meantime only OpenSSL.framework can be built for tvOS or watchOS: + make dist/tvOS/OpenSSL.framework + make dist/watchOS/OpenSSL.framework + Python iOS Support ================== @@ -61,4 +68,4 @@ The approach to framework packaging is drawn from `Jeff Verkoeyen`_, and `Ernesto García's`_ tutorials. .. _Jeff Verkoeyen: https://github.com/jverkoey/iOS-Framework -.. _Ernesto García's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial +.. _Ernesto García1G's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial From d2633674c18499393a92eb168c554a32b1311bef Mon Sep 17 00:00:00 2001 From: Max Khon Date: Thu, 15 Oct 2015 03:55:10 +0600 Subject: [PATCH 09/51] Formatting fixes. --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index 21569ce4..b3097f91 100644 --- a/README.rst +++ b/README.rst @@ -2,6 +2,8 @@ This is a fork of https://github.com/pybee/Python-iOS-support/ that contains Python.framework WIP for tvOS and watchOS. In the meantime only OpenSSL.framework can be built for tvOS or watchOS: + +:: make dist/tvOS/OpenSSL.framework make dist/watchOS/OpenSSL.framework From fda2c9cc62371421f667c8f58928ae4ef27f29a6 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Thu, 15 Oct 2015 03:56:44 +0600 Subject: [PATCH 10/51] Formatting fixes. --- README.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index b3097f91..1753bd43 100644 --- a/README.rst +++ b/README.rst @@ -1,10 +1,9 @@ This is a fork of https://github.com/pybee/Python-iOS-support/ that contains Python.framework WIP for tvOS and watchOS. -In the meantime only OpenSSL.framework can be built for tvOS or watchOS: - -:: +In the meantime only OpenSSL.framework can be built for tvOS or watchOS:: make dist/tvOS/OpenSSL.framework + make dist/watchOS/OpenSSL.framework Python iOS Support From ce0449995a06552f34b527c76850c136926231e5 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Thu, 15 Oct 2015 03:56:44 +0600 Subject: [PATCH 11/51] Formatting fixes. --- README.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index b3097f91..fcab6751 100644 --- a/README.rst +++ b/README.rst @@ -3,9 +3,8 @@ Python.framework WIP for tvOS and watchOS. In the meantime only OpenSSL.framework can be built for tvOS or watchOS: -:: - make dist/tvOS/OpenSSL.framework - make dist/watchOS/OpenSSL.framework +- make dist/tvOS/OpenSSL.framework +- make dist/watchOS/OpenSSL.framework Python iOS Support ================== From a4809cc81ad5492be90c6cd8abf34910f92729aa Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 04:29:15 +0600 Subject: [PATCH 12/51] - Python can now be built for tvOS and watchOS (Python.framework build is still incomplete) - Fix -femebd-bitcode for watchOS --- Makefile | 270 ++++++++++++++++++++++++--------- README.rst | 5 +- patch/Python/Python-tvos.patch | 46 ++++++ patch/Python/Setup.embedded | 2 +- 4 files changed, 252 insertions(+), 71 deletions(-) create mode 100644 patch/Python/Python-tvos.patch diff --git a/Makefile b/Makefile index 0965ff3c..1db1e06b 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,33 @@ -PROJECTDIR=$(shell pwd) +# +# Useful targets: +# - all-iOS - build everything for iOS +# - all-tvOS - build everything for tvOS +# - all-watchOS - build everything for watchOS +# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS +# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS +# - Python-host - build host python +# - Python.framework-iOS - build Python.framework for iOS +# - Python.framework-tvOS - build Python.framework for tvOS +# - Python.framework-watchOS - build Python.framework for watchOS + +# Current director +PROJECT_DIR=$(shell pwd) BUILD_NUMBER=3 # Version of packages that will be compiled by this meta-package -PYTHON_VERSION=3.4.2 +PYTHON_VERSION= 3.4.2 +PYTHON_VER= $(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 OPENSSL_REVISION=d OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) +# Supported OS OS= iOS tvOS watchOS + +# iOS targets TARGETS-iOS= iphonesimulator.x86_64 iphonesimulator.i386\ iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 CFLAGS-iOS= -miphoneos-version-min=7.0 @@ -17,19 +35,23 @@ CFLAGS-iphoneos.armv7= -fembed-bitcode CFLAGS-iphoneos.armv7s= -fembed-bitcode CFLAGS-iphoneos.arm64= -fembed-bitcode +# tvOS targets TARGETS-tvOS= appletvsimulator.x86_64 appletvos.arm64 CFLAGS-tvOS= -mtvos-version-min=9.0 CFLAGS-appletvos.arm64= -fembed-bitcode +PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no +# watchOS targets TARGETS-watchOS= watchsimulator.i386 watchos.armv7k CFLAGS-watchOS= -mwatchos-version-min=2.0 -CFLAGS-watchos.armv7= -fembed-bitcode +CFLAGS-watchos.armv7k= -fembed-bitcode +PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no -all: $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) +all: $(foreach os,$(OS),all-$(os)) # Clean all builds clean: - rm -rf build dist $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) + rm -rf build $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) # Full clean - includes all downloaded products distclean: clean @@ -45,8 +67,7 @@ downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VE # Clean the OpenSSL project clean-OpenSSL: - rm -rf build/OpenSSL - rm -rf dist/OpenSSL.framework + rm -rf build/*/openssl-$(OPENSSL_VERSION)-* build/*/OpenSSL.framework # Download original OpenSSL source code archive. downloads/openssl-$(OPENSSL_VERSION).tgz: @@ -54,43 +75,110 @@ downloads/openssl-$(OPENSSL_VERSION).tgz: -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi -define build-openssl-target +########################################################################### +# Python +########################################################################### + +# Clean the Python project +clean-Python: + rm -rf build/*/Python-$(PYTHON_VERSION)-* build/*/Python.framework + +# Download original Python source code archive. +downloads/Python-$(PYTHON_VERSION).tgz: + mkdir downloads + if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi + +PYTHON_DIR-host= build/Python-$(PYTHON_VERSION)-host + +Python-host: $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) + +# Unpack host Python +$(PYTHON_DIR-host)/configure: downloads/Python-$(PYTHON_VERSION).tgz + # Unpack host Python + mkdir -p $(PYTHON_DIR-host) + tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $(PYTHON_DIR-host) + # Configure host Python + cd $(PYTHON_DIR-host) && ./configure --prefix=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist --without-ensurepip + +# Build host Python +$(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile + # Build host Python + make -C $(PYTHON_DIR-host) all install + +# +# Build for specified target (from $(TARGETS)) +# +# Parameters: +# - $1 - target +# - $2 - OS +define build-target ARCH-$1= $$(subst .,,$$(suffix $1)) SDK-$1= $$(basename $1) SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1= $$(shell xcrun -find -sdk $$(SDK-$1) clang)\ +CC-$1= xcrun --sdk $$(SDK-$1) clang\ -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) -build/OpenSSL/$1/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz +OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 +PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 + +# Unpack OpenSSL +$$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz # Unpack sources - mkdir -p build/OpenSSL/$1 - tar zxf downloads/openssl-$(OPENSSL_VERSION).tgz --strip-components 1 -C build/OpenSSL/$1 + mkdir -p $$(OPENSSL_DIR-$1) + tar zxf downloads/openssl-$(OPENSSL_VERSION).tgz --strip-components 1 -C $$(OPENSSL_DIR-$1) ifeq ($$(findstring simulator,$$(SDK-$1)),) # Tweak ui_openssl.c - sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" build/OpenSSL/$1/crypto/ui/ui_openssl.c + sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" $$(OPENSSL_DIR-$1)/crypto/ui/ui_openssl.c endif ifeq ($$(findstring iphone,$$(SDK-$1)),) # Patch apps/speed.c to not use fork() since it's not available on tvOS - sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' build/OpenSSL/$1/apps/speed.c + sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' $$(OPENSSL_DIR-$1)/apps/speed.c # Patch Configure to build for tvOS or watchOS, not iOS - LANG=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' build/OpenSSL/$1/Configure + LANG=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' $$(OPENSSL_DIR-$1)/Configure endif # Configure the build - cd build/OpenSSL/$1 && \ + cd $$(OPENSSL_DIR-$1) && \ CC="$$(CC-$1)" \ CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ - ./Configure iphoneos-cross no-asm --openssldir=$(PROJECTDIR)/build/OpenSSL/$1 + ./Configure iphoneos-cross no-asm --openssldir=$(PROJECT_DIR)/$$(OPENSSL_DIR-$1) -build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a: build/OpenSSL/$1/Makefile +# Build OpenSSL +$$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/Makefile # Make the build - cd build/OpenSSL/$1 && \ + cd $$(OPENSSL_DIR-$1) && \ CC="$$(CC-$1)" \ CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ make all +# Unpack Python +$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz + # Unpack target Python + mkdir -p $$(PYTHON_DIR-$1) + tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) + # Apply target Python patches + cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python.patch +ifeq ($$(findstring iphone,$$(SDK-$1)),) + cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python-tvos.patch +endif + cp $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded + # Configure target Python + cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ + CC="$$(CC-$1)" LD="$$(CC-$1)" \ + --host=$$(ARCH-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ + --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ + ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ + $$(PYTHON_CONFIGURE-$2) + +# Build Python +$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework + # Build target Python + cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install + +# Dump vars (for test) vars-$1: @echo "ARCH-$1: $$(ARCH-$1)" @echo "SDK-$1: $$(SDK-$1)" @@ -98,71 +186,117 @@ vars-$1: @echo "CC-$1: $$(CC-$1)" endef -define build-openssl -$$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-openssl-target,$$(target),$1))) +# +# Build for specified OS (from $(OS)) +# Parameters: +# - $1 - OS +define build +$$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) + +all-$1: Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz -Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: dist/$1/OpenSSL.framework dist/$1/Python.framework - tar zcvf $$@ -C dist/$1 Python.framework OpenSSL.framework +clean-$1: + rm -rf build/$1 -build/OpenSSL/$1/libssl.a: $$(foreach target,$$(TARGETS-$1),build/OpenSSL/$$(target)/libssl.a) - mkdir -p build/OpenSSL/$1 - lipo -create $$^ -output $$@ +Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: build/$1/OpenSSL.framework build/$1/Python.framework + tar zcvf $$@ -C build/$1 Python.framework OpenSSL.framework -build/OpenSSL/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),build/OpenSSL/$$(target)/libcrypto.a) - mkdir -p build/OpenSSL/$1 - lipo -create $$^ -output $$@ +OpenSSL.framework-$1: build/$1/OpenSSL.framework -dist/$1/OpenSSL.framework: build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a +# Build OpenSSL.framework +build/$1/OpenSSL.framework: build/$1/libssl.a build/$1/libcrypto.a # Create framework directory structure - mkdir -p dist/$1/OpenSSL.framework/Versions/$(OPENSSL_VERSION) - ln -fs $(OPENSSL_VERSION) dist/$1/OpenSSL.framework/Versions/Current + mkdir -p build/$1/OpenSSL.framework/Versions/$(OPENSSL_VERSION) + ln -fs $(OPENSSL_VERSION) build/$1/OpenSSL.framework/Versions/Current # Copy the headers (use the version from the simulator because reasons) - cp -r build/OpenSSL/$$(firstword $$(TARGETS-$1))/include dist/$1/OpenSSL.framework/Versions/Current/Headers + cp -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include build/$1/OpenSSL.framework/Versions/Current/Headers # Link the current Headers to the top level - ln -fs Versions/Current/Headers dist/$1/OpenSSL.framework + ln -fs Versions/Current/Headers build/$1/OpenSSL.framework # Create the fat library - $(shell xcrun -find libtool) -no_warning_for_no_symbols -static \ - -o dist/$1/OpenSSL.framework/Versions/Current/OpenSSL \ - build/OpenSSL/$1/libcrypto.a \ - build/OpenSSL/$1/libssl.a + xcrun libtool -no_warning_for_no_symbols -static \ + -o build/$1/OpenSSL.framework/Versions/Current/OpenSSL $$^ # Link the fat Library to the top level - ln -fs Versions/Current/OpenSSL dist/$1/OpenSSL.framework + ln -fs Versions/Current/OpenSSL build/$1/OpenSSL.framework + +build/$1/libssl.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target))/libssl.a) + mkdir -p build/$1 + xcrun lipo -create -output $$@ $$^ + +build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target))/libcrypto.a) + mkdir -p build/$1 + xcrun lipo -create -output $$@ $$^ + +Python.framework-$1: build/$1/Python.framework + +# Build Python.framework +build/$1/Python.framework: build/$1/libpython$(PYTHON_VER).a + +# Build libpython fat library +build/$1/libpython$(PYTHON_VER).a: $$(foreach target,$$(TARGETS-$1),$$(PYTHON_DIR-$$(target))/dist/lib/libpython$(PYTHON_VER).a) + mkdir -p build/$1 + xcrun lipo -create -output $$@ $$^ + endef -$(foreach os,$(OS),$(eval $(call build-openssl,$(os)))) +$(foreach os,$(OS),$(eval $(call build,$(os)))) -########################################################################### -# Python -########################################################################### +_framework: + # Create the framework directory and set it as the current version + mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/ + cd $(FRAMEWORK_DIR)/Versions && ln -fs $(PYTHON_VERSION) Current -# Clean the Python project -clean-Python: - rm -rf build/Python-$(PYTHON_VERSION) - rm -rf build/python - rm -rf dist/Python.framework + # Copy the headers. The headers are the same for every platform, except for pyconfig.h; + # use the x86_64 simulator build because reasons. + cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers -# Download original Python source code archive. -downloads/Python-$(PYTHON_VERSION).tgz: - mkdir downloads - if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi + # The only headers that change between versions is pyconfig.h; copy each supported version... + cp build/ios-simulator-i386/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-i386.h + cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h + # ARMv7 and ARMv7S headers are the same; don't copy this one. + # cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h + cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h + cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h + # ... and then copy in a master pyconfig.h to unify them all. + cp include/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h -build/Python-$(PYTHON_VERSION)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz - # Unpack sources - mkdir build - tar zxf downloads/Python-$(PYTHON_VERSION).tgz -C build - # Apply patches - cd build/Python-$(PYTHON_VERSION) && patch -p1 < ../../patch/Python/Python.patch - cd build/Python-$(PYTHON_VERSION) && cp ../../patch/Python/Setup.embedded Modules/Setup.embedded - -#build/Python-$(PYTHON_VERSION)/Python.framework: dist/OpenSSL.framework build/Python-$(PYTHON_VERSION)/Makefile -build/Python-$(PYTHON_VERSION)/iOS/Python.framework: build/Python-$(PYTHON_VERSION)/Makefile - # Configure and make the build - cd build/Python-$(PYTHON_VERSION)/iOS && make - -dist/Python.framework: build/Python-$(PYTHON_VERSION)/Python.framework - mkdir dist - mv build/Python-$(PYTHON_VERSION)/Python.framework dist + # Link the current Headers to the top level + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Headers + + # Copy the standard library from the simulator build. Again, the + # pure Python standard library is the same on every platform; + # use the simulator version because reasons. + mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources + cp -r build/ios-simulator-x86_64/lib $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources + + # Copy Python.h and pyconfig.h into the resources include directory + mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) + cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig*.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) + cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/Python.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) + + # Remove the pieces of the resources directory that aren't needed: + # libpython.a isn't needed in the lib directory + rm -f $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a + # pkgconfig isn't needed on the device + rm -rf $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig + +ifneq ($(TEST),) + # Do the pruning and compression. + cd $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION); + rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ + config-$(PYTHON_VERSION) ctypes/test distutils/tests site-packages sqlite3/test; \ + find . -name "*.pyc" -exec rm -rf {} \; + zip -r ../python$(subst .,,$(PYTHON_VER)).zip *; +endif + + # Link the current Resources to the top level + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Resources + + # Create a fat binary for the libPython library + cp libpython.a $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Python + + # Link the current Python library to the top level + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python diff --git a/README.rst b/README.rst index fcab6751..b1926ac1 100644 --- a/README.rst +++ b/README.rst @@ -3,8 +3,9 @@ Python.framework WIP for tvOS and watchOS. In the meantime only OpenSSL.framework can be built for tvOS or watchOS: -- make dist/tvOS/OpenSSL.framework -- make dist/watchOS/OpenSSL.framework +- make OpenSSL.framework-iOS +- make OpenSSL.framework-tvOS +- make OpenSSL.framework-watchOS Python iOS Support ================== diff --git a/patch/Python/Python-tvos.patch b/patch/Python/Python-tvos.patch new file mode 100644 index 00000000..ef3a577c --- /dev/null +++ b/patch/Python/Python-tvos.patch @@ -0,0 +1,46 @@ +--- a/Modules/_posixsubprocess.c 2015-10-16 03:07:29.000000000 +0600 ++++ b/Modules/_posixsubprocess.c 2015-10-16 03:13:46.000000000 +0600 +@@ -479,11 +479,15 @@ + saved_errno = 0; + for (i = 0; exec_array[i] != NULL; ++i) { + const char *executable = exec_array[i]; ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ errno = ENOTSUP; ++#else + if (envp) { + execve(executable, argv, envp); + } else { + execv(executable, argv); + } ++#endif + if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { + saved_errno = errno; + } +@@ -646,7 +650,12 @@ + cwd_obj2 = NULL; + } + ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ pid = -1; ++ errno = ENOTSUP; ++#else + pid = fork(); ++#endif + if (pid == 0) { + /* Child process */ + /* +--- a/Modules/posixmodule.c 2015-10-16 03:34:01.000000000 +0600 ++++ b/Modules/posixmodule.c 2015-10-16 03:35:46.000000000 +0600 +@@ -4463,7 +4463,12 @@ + + command = PyBytes_AsString(command_obj); + Py_BEGIN_ALLOW_THREADS ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ sts = -1; ++ errno = ENOTSUP; ++#else + sts = system(command); ++#endif + Py_END_ALLOW_THREADS + Py_DECREF(command_obj); + #endif diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded index 29c46f02..3269bad8 100644 --- a/patch/Python/Setup.embedded +++ b/patch/Python/Setup.embedded @@ -39,7 +39,7 @@ _sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_L _sqlite/row.c \ _sqlite/statement.c \ _sqlite/util.c -_ssl _ssl.c -I$(srcdir)/../../dist/OpenSSL.framework/Headers -framework OpenSSL -F$(srcdir)/../../dist -DUSE_SSL +_ssl _ssl.c -I$(srcdir)/../OpenSSL.framework/Headers -framework OpenSSL -F$(srcdir)/.. -DUSE_SSL _struct _struct.c array arraymodule.c audioop audioop.c From bde59115c6d867e69f3c9430d5ccfb7911662562 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:15:15 +0600 Subject: [PATCH 13/51] Python.framework can now be built. --- Makefile | 143 ++++++++++++++++++++--------------------- python-lib-exclude.lst | 16 +++++ 2 files changed, 86 insertions(+), 73 deletions(-) create mode 100644 python-lib-exclude.lst diff --git a/Makefile b/Makefile index 1db1e06b..c0740fa2 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,9 @@ CFLAGS-watchOS= -mwatchos-version-min=2.0 CFLAGS-watchos.armv7k= -fembed-bitcode PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no +# override machine for arm64 +MACHINE-arm64= aarch64 + all: $(foreach os,$(OS),all-$(os)) # Clean all builds @@ -93,7 +96,7 @@ PYTHON_DIR-host= build/Python-$(PYTHON_VERSION)-host Python-host: $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) # Unpack host Python -$(PYTHON_DIR-host)/configure: downloads/Python-$(PYTHON_VERSION).tgz +$(PYTHON_DIR-host)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz # Unpack host Python mkdir -p $(PYTHON_DIR-host) tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $(PYTHON_DIR-host) @@ -113,6 +116,11 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile # - $2 - OS define build-target ARCH-$1= $$(subst .,,$$(suffix $1)) +ifdef MACHINE-$$(ARCH-$1) +MACHINE-$1= $$(MACHINE-$$(ARCH-$1)) +else +MACHINE-$1= $$(ARCH-$1) +endif SDK-$1= $$(basename $1) SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) @@ -121,6 +129,7 @@ CC-$1= xcrun --sdk $$(SDK-$1) clang\ OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 +pyconfig.h-$1= pyconfig-$$(ARCH-$1).h # Unpack OpenSSL $$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz @@ -167,7 +176,7 @@ endif # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ - --host=$$(ARCH-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + --host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ @@ -178,14 +187,26 @@ $$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile # Build target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install +build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/pyconfig.h + cp $$^ $$@ + # Dump vars (for test) vars-$1: @echo "ARCH-$1: $$(ARCH-$1)" + @echo "MACHINE-$1: $$(MACHINE-$1)" @echo "SDK-$1: $$(SDK-$1)" @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)" @echo "CC-$1: $$(CC-$1)" endef +# +# Install target pyconfig.h +# Parameters: +# - $1 - target +# - $2 - framework directory +define install-target-pyconfig +endef + # # Build for specified OS (from $(OS)) # Parameters: @@ -193,34 +214,36 @@ endef define build $$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) +OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework +PYTHON_FRAMEWORK-$1= build/$1/Python.framework +PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources + all-$1: Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz clean-$1: rm -rf build/$1 -Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: build/$1/OpenSSL.framework build/$1/Python.framework - tar zcvf $$@ -C build/$1 Python.framework OpenSSL.framework +Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRAMEWORK-$1) $$(PYTHON_FRAMEWORK-$1) + tar zcvf $$@ -C build/$1 $$(notdir $$^) -OpenSSL.framework-$1: build/$1/OpenSSL.framework +OpenSSL.framework-$1: $$(OPENSSL_FRAMEWORK-$1) # Build OpenSSL.framework -build/$1/OpenSSL.framework: build/$1/libssl.a build/$1/libcrypto.a +$$(OPENSSL_FRAMEWORK-$1): build/$1/libssl.a build/$1/libcrypto.a # Create framework directory structure - mkdir -p build/$1/OpenSSL.framework/Versions/$(OPENSSL_VERSION) - ln -fs $(OPENSSL_VERSION) build/$1/OpenSSL.framework/Versions/Current + mkdir -p $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION) # Copy the headers (use the version from the simulator because reasons) - cp -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include build/$1/OpenSSL.framework/Versions/Current/Headers - - # Link the current Headers to the top level - ln -fs Versions/Current/Headers build/$1/OpenSSL.framework + cp -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/Headers # Create the fat library xcrun libtool -no_warning_for_no_symbols -static \ - -o build/$1/OpenSSL.framework/Versions/Current/OpenSSL $$^ + -o $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/OpenSSL $$^ - # Link the fat Library to the top level - ln -fs Versions/Current/OpenSSL build/$1/OpenSSL.framework + # Create symlinks + ln -fs $(OPENSSL_VERSION) $$(OPENSSL_FRAMEWORK-$1)/Versions/Current + ln -fs Versions/Current/Headers $$(OPENSSL_FRAMEWORK-$1) + ln -fs Versions/Current/OpenSSL $$(OPENSSL_FRAMEWORK-$1) build/$1/libssl.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target))/libssl.a) mkdir -p build/$1 @@ -230,73 +253,47 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target) mkdir -p build/$1 xcrun lipo -create -output $$@ $$^ -Python.framework-$1: build/$1/Python.framework +Python.framework-$1: $$(PYTHON_FRAMEWORK-$1) # Build Python.framework -build/$1/Python.framework: build/$1/libpython$(PYTHON_VER).a +$$(PYTHON_FRAMEWORK-$1): build/$1/libpython$(PYTHON_VER).a $$(foreach target,$$(TARGETS-$1),build/$1/$$(pyconfig.h-$$(target))) + mkdir -p $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) -# Build libpython fat library -build/$1/libpython$(PYTHON_VER).a: $$(foreach target,$$(TARGETS-$1),$$(PYTHON_DIR-$$(target))/dist/lib/libpython$(PYTHON_VER).a) - mkdir -p build/$1 - xcrun lipo -create -output $$@ $$^ - -endef - -$(foreach os,$(OS),$(eval $(call build,$(os)))) - -_framework: - # Create the framework directory and set it as the current version - mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/ - cd $(FRAMEWORK_DIR)/Versions && ln -fs $(PYTHON_VERSION) Current - - # Copy the headers. The headers are the same for every platform, except for pyconfig.h; - # use the x86_64 simulator build because reasons. - cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers - - # The only headers that change between versions is pyconfig.h; copy each supported version... - cp build/ios-simulator-i386/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-i386.h - cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h - # ARMv7 and ARMv7S headers are the same; don't copy this one. - # cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h - cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h - cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h - # ... and then copy in a master pyconfig.h to unify them all. - cp include/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h - - # Link the current Headers to the top level - cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Headers - - # Copy the standard library from the simulator build. Again, the - # pure Python standard library is the same on every platform; - # use the simulator version because reasons. - mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources - cp -r build/ios-simulator-x86_64/lib $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources + # Copy the headers. The headers are the same for every platform, except for pyconfig.h + cp -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/include/python$(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers + cp $$(filter %.h,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers + cp $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/iOS/include/pyconfig.h $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers # Copy Python.h and pyconfig.h into the resources include directory - mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) - cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig*.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) - cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/Python.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) - - # Remove the pieces of the resources directory that aren't needed: - # libpython.a isn't needed in the lib directory - rm -f $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a - # pkgconfig isn't needed on the device - rm -rf $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig + cp -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/pyconfig*.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) + cp -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/Python.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) + # Copy the standard library from the simulator build ifneq ($(TEST),) - # Do the pruning and compression. - cd $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION); - rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ - config-$(PYTHON_VERSION) ctypes/test distutils/tests site-packages sqlite3/test; \ - find . -name "*.pyc" -exec rm -rf {} \; - zip -r ../python$(subst .,,$(PYTHON_VER)).zip *; + cp -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib $$(PYTHON_RESOURCES-$1) + # Remove the pieces of the resources directory that aren't needed: + rm -f $$(PYTHON_RESOURCES-$1)/lib/libpython$(PYTHON_VER).a + rm -rf $$(PYTHON_RESOURCES-$1)/lib/pkgconfig +else + mkdir -p $$(PYTHON_RESOURCES-$1)/lib + cd $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib/python$(PYTHON_VER) && \ + zip -x@$(PROJECT_DIR)/python-lib-exclude.lst -r $(PROJECT_DIR)/$$(PYTHON_RESOURCES-$1)/lib/python$(subst .,,$(PYTHON_VER)) * endif - # Link the current Resources to the top level - cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Resources + # Copy fat library + cp $$(filter %.a,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Python + # Create symlinks + ln -fs $(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/Current + ln -fs Versions/Current/Headers $$(PYTHON_FRAMEWORK-$1) + ln -fs Versions/Current/Resources $$(PYTHON_FRAMEWORK-$1) + ln -fs Versions/Current/Python $$(PYTHON_FRAMEWORK-$1) + +# Build libpython fat library +build/$1/libpython$(PYTHON_VER).a: $$(foreach target,$$(TARGETS-$1),$$(PYTHON_DIR-$$(target))/dist/lib/libpython$(PYTHON_VER).a) # Create a fat binary for the libPython library - cp libpython.a $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Python + mkdir -p build/$1 + xcrun lipo -create -output $$@ $$^ +endef - # Link the current Python library to the top level - cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python +$(foreach os,$(OS),$(eval $(call build,$(os)))) diff --git a/python-lib-exclude.lst b/python-lib-exclude.lst new file mode 100644 index 00000000..d931a4a0 --- /dev/null +++ b/python-lib-exclude.lst @@ -0,0 +1,16 @@ +bsddb/* +config-*/* +ctypes/test/* +curses/* +distutils/tests +ensurepip/* +hotshot/* +idlelib/* +lib*/* +site-packages/* +sqlite3/test +*test*/* +tkinter/* +turtledemo/* +wsgiref/* +*.pyc From 41343c383082cd812c4884d7920ed7b4816119b9 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:16:04 +0600 Subject: [PATCH 14/51] Ignore dist tarballs. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a4de7595..118bf1ed 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ archive/* build/* downloads/* diff/* -dist/* +Python-*-*-support.*.tar.gz From 1df382e5e1f0b07d2e32d8936921cb4d7ce78c75 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:17:45 +0600 Subject: [PATCH 15/51] Fix README. --- Makefile | 2 +- README.rst | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index c0740fa2..1f2c6c60 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,10 @@ # - OpenSSL.framework-iOS - build OpenSSL.framework for iOS # - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS # - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - Python-host - build host python # - Python.framework-iOS - build Python.framework for iOS # - Python.framework-tvOS - build Python.framework for tvOS # - Python.framework-watchOS - build Python.framework for watchOS +# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) diff --git a/README.rst b/README.rst index b1926ac1..ddf1a7ef 100644 --- a/README.rst +++ b/README.rst @@ -1,11 +1,17 @@ -This is a fork of https://github.com/pybee/Python-iOS-support/ that contains -Python.framework WIP for tvOS and watchOS. - -In the meantime only OpenSSL.framework can be built for tvOS or watchOS: - -- make OpenSSL.framework-iOS -- make OpenSSL.framework-tvOS -- make OpenSSL.framework-watchOS +This is a fork of https://github.com/pybee/Python-iOS-support/ that adds +tvOS and watchOS builds. + +Useful targets: +- all-iOS - build everything for iOS +- all-tvOS - build everything for tvOS +- all-watchOS - build everything for watchOS +- OpenSSL.framework-iOS - build OpenSSL.framework for iOS +- OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +- OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS +- Python.framework-iOS - build Python.framework for iOS +- Python.framework-tvOS - build Python.framework for tvOS +- Python.framework-watchOS - build Python.framework for watchOS +- Python-host - build host python Python iOS Support ================== From 2c72db107b743a9ada4489341d2708f0c989adb2 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:18:40 +0600 Subject: [PATCH 16/51] Fix formatting. --- README.rst | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.rst b/README.rst index ddf1a7ef..7ce2cd62 100644 --- a/README.rst +++ b/README.rst @@ -2,16 +2,17 @@ This is a fork of https://github.com/pybee/Python-iOS-support/ that adds tvOS and watchOS builds. Useful targets: -- all-iOS - build everything for iOS -- all-tvOS - build everything for tvOS -- all-watchOS - build everything for watchOS -- OpenSSL.framework-iOS - build OpenSSL.framework for iOS -- OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS -- OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -- Python.framework-iOS - build Python.framework for iOS -- Python.framework-tvOS - build Python.framework for tvOS -- Python.framework-watchOS - build Python.framework for watchOS -- Python-host - build host python + +* all-iOS - build everything for iOS +* all-tvOS - build everything for tvOS +* all-watchOS - build everything for watchOS +* OpenSSL.framework-iOS - build OpenSSL.framework for iOS +* OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +* OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS +* Python.framework-iOS - build Python.framework for iOS +* Python.framework-tvOS - build Python.framework for tvOS +* Python.framework-watchOS - build Python.framework for watchOS +* Python-host - build host python Python iOS Support ================== From 2066a75665fea82eca400e89a02162426e058447 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:24:57 +0600 Subject: [PATCH 17/51] Fix clean targets. --- Makefile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 1f2c6c60..cf512224 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ all: $(foreach os,$(OS),all-$(os)) # Clean all builds clean: - rm -rf build $(foreach os,$(OS),Python-$(PYTHON_VERSION)-$(os)-support.b$(BUILD_NUMBER).tar.gz) + rm -rf build Python-$(PYTHON_VERSION)-*-support.b$(BUILD_NUMBER).tar.gz # Full clean - includes all downloaded products distclean: clean @@ -70,7 +70,9 @@ downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VE # Clean the OpenSSL project clean-OpenSSL: - rm -rf build/*/openssl-$(OPENSSL_VERSION)-* build/*/OpenSSL.framework + rm -rf build/*/openssl-$(OPENSSL_VERSION)-* \ + build/*/libssl.a build/*/libcrypto.a \ + build/*/OpenSSL.framework # Download original OpenSSL source code archive. downloads/openssl-$(OPENSSL_VERSION).tgz: @@ -84,7 +86,9 @@ downloads/openssl-$(OPENSSL_VERSION).tgz: # Clean the Python project clean-Python: - rm -rf build/*/Python-$(PYTHON_VERSION)-* build/*/Python.framework + rm -rf build/Python-$(PYTHON_VERSION)-host build/*/Python-$(PYTHON_VERSION)-* \ + build/*/libpython$(PYTHON_VER).a build/*/pyconfig-*.h \ + build/*/Python.framework # Download original Python source code archive. downloads/Python-$(PYTHON_VERSION).tgz: From 7225ea3cae7224eed2136d13053ca1def5e33b3a Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:37:02 +0600 Subject: [PATCH 18/51] Undo unintentional change. --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 7ce2cd62..f4d6e539 100644 --- a/README.rst +++ b/README.rst @@ -77,4 +77,4 @@ The approach to framework packaging is drawn from `Jeff Verkoeyen`_, and `Ernesto García's`_ tutorials. .. _Jeff Verkoeyen: https://github.com/jverkoey/iOS-Framework -.. _Ernesto García1G's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial +.. _Ernesto García's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial From f654a137148ecf36f58c7210fd45b6be27ae70d4 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:39:32 +0600 Subject: [PATCH 19/51] Change wording. --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index f4d6e539..0d1a7582 100644 --- a/README.rst +++ b/README.rst @@ -1,8 +1,8 @@ -This is a fork of https://github.com/pybee/Python-iOS-support/ that adds -tvOS and watchOS builds. +Makefile glue for Python for iOS, tvOS and watchOS. Useful targets: +* all - build all * all-iOS - build everything for iOS * all-tvOS - build everything for tvOS * all-watchOS - build everything for watchOS From 7f481a53c685b20048472ec5d98dd1f342448a4d Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:43:58 +0600 Subject: [PATCH 20/51] Build tarballs in dist/ --- .gitignore | 2 +- Makefile | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 118bf1ed..a4de7595 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ archive/* build/* downloads/* diff/* -Python-*-*-support.*.tar.gz +dist/* diff --git a/Makefile b/Makefile index cf512224..19e03203 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ all: $(foreach os,$(OS),all-$(os)) # Clean all builds clean: - rm -rf build Python-$(PYTHON_VERSION)-*-support.b$(BUILD_NUMBER).tar.gz + rm -rf build dist # Full clean - includes all downloaded products distclean: clean @@ -222,12 +222,13 @@ OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework PYTHON_FRAMEWORK-$1= build/$1/Python.framework PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources -all-$1: Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz +all-$1: dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz clean-$1: rm -rf build/$1 -Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRAMEWORK-$1) $$(PYTHON_FRAMEWORK-$1) +dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRAMEWORK-$1) $$(PYTHON_FRAMEWORK-$1) + mkdir dist tar zcvf $$@ -C build/$1 $$(notdir $$^) OpenSSL.framework-$1: $$(OPENSSL_FRAMEWORK-$1) From 0323d6760a5b3fb9dc1417ed6efaab066d9e32f6 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 07:48:07 +0600 Subject: [PATCH 21/51] Revert bitcode patch here now that Python build is done from the root Makefile. --- patch/Python/Python.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 7884d9a9..6ff42a57 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -48913,17 +48913,17 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + +# iOS ARMV7 build commands and flags +IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 -fembed-bitcode --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 + +# iOS ARMV7S build commands and flags +IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s -fembed-bitcode --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARMV7S_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 + +# iOS ARM64 build commands and flags +IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 -fembed-bitcode --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 ++IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 +IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 + + From e535e639016210d8425192089adfd27df8e90b71 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 08:11:48 +0600 Subject: [PATCH 22/51] Add missing dependency on host python. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 19e03203..ff31ccb5 100644 --- a/Makefile +++ b/Makefile @@ -167,7 +167,7 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M make all # Unpack Python -$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz +$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz Python-host # Unpack target Python mkdir -p $$(PYTHON_DIR-$1) tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) From ab5b1f22217bc184f7c81b791052212aa8e7a50a Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 16 Oct 2015 12:44:09 +0600 Subject: [PATCH 23/51] Always use "mkdir -p" so that mkdir does not fail if directory already exists. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ff31ccb5..9faab2c6 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ clean-OpenSSL: # Download original OpenSSL source code archive. downloads/openssl-$(OPENSSL_VERSION).tgz: - mkdir downloads + mkdir -p downloads -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi @@ -92,7 +92,7 @@ clean-Python: # Download original Python source code archive. downloads/Python-$(PYTHON_VERSION).tgz: - mkdir downloads + mkdir -p downloads if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi PYTHON_DIR-host= build/Python-$(PYTHON_VERSION)-host @@ -228,7 +228,7 @@ clean-$1: rm -rf build/$1 dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRAMEWORK-$1) $$(PYTHON_FRAMEWORK-$1) - mkdir dist + mkdir -p dist tar zcvf $$@ -C build/$1 $$(notdir $$^) OpenSSL.framework-$1: $$(OPENSSL_FRAMEWORK-$1) From 9815b230f5dbe9aab0396d98e2a593b7035ef795 Mon Sep 17 00:00:00 2001 From: Max Khon Date: Tue, 27 Oct 2015 03:05:09 +0600 Subject: [PATCH 24/51] Fix python dependencies so that Python is not unpacked when not necessary. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9faab2c6..04ad60ee 100644 --- a/Makefile +++ b/Makefile @@ -96,8 +96,9 @@ downloads/Python-$(PYTHON_VERSION).tgz: if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi PYTHON_DIR-host= build/Python-$(PYTHON_VERSION)-host +PYTHON_HOST= $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) -Python-host: $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) +Python-host: $(PYTHON_HOST) # Unpack host Python $(PYTHON_DIR-host)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz @@ -167,7 +168,7 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M make all # Unpack Python -$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz Python-host +$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST) # Unpack target Python mkdir -p $$(PYTHON_DIR-$1) tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) From e916bd251e0cfdd367b60db2bc6724c3101a282d Mon Sep 17 00:00:00 2001 From: Max Khon Date: Tue, 27 Oct 2015 03:56:09 +0600 Subject: [PATCH 25/51] Use "cp -f" to copy so that copying to read-only file does not fail. --- Makefile | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 04ad60ee..520a9d03 100644 --- a/Makefile +++ b/Makefile @@ -177,7 +177,7 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST ifeq ($$(findstring iphone,$$(SDK-$1)),) cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python-tvos.patch endif - cp $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded + cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ @@ -193,7 +193,7 @@ $$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/pyconfig.h - cp $$^ $$@ + cp -f $$^ $$@ # Dump vars (for test) vars-$1: @@ -240,7 +240,7 @@ $$(OPENSSL_FRAMEWORK-$1): build/$1/libssl.a build/$1/libcrypto.a mkdir -p $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION) # Copy the headers (use the version from the simulator because reasons) - cp -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/Headers + cp -f -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/Headers # Create the fat library xcrun libtool -no_warning_for_no_symbols -static \ @@ -266,17 +266,17 @@ $$(PYTHON_FRAMEWORK-$1): build/$1/libpython$(PYTHON_VER).a $$(foreach target,$$( mkdir -p $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) # Copy the headers. The headers are the same for every platform, except for pyconfig.h - cp -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/include/python$(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers - cp $$(filter %.h,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers - cp $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/iOS/include/pyconfig.h $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers + cp -f -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/include/python$(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers + cp -f $$(filter %.h,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers + cp -f $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/iOS/include/pyconfig.h $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers # Copy Python.h and pyconfig.h into the resources include directory - cp -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/pyconfig*.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) - cp -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/Python.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) + cp -f -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/pyconfig*.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) + cp -f -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/Python.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) # Copy the standard library from the simulator build ifneq ($(TEST),) - cp -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib $$(PYTHON_RESOURCES-$1) + cp -f -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib $$(PYTHON_RESOURCES-$1) # Remove the pieces of the resources directory that aren't needed: rm -f $$(PYTHON_RESOURCES-$1)/lib/libpython$(PYTHON_VER).a rm -rf $$(PYTHON_RESOURCES-$1)/lib/pkgconfig @@ -287,7 +287,7 @@ else endif # Copy fat library - cp $$(filter %.a,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Python + cp -f $$(filter %.a,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Python # Create symlinks ln -fs $(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/Current From 80ea79f5d3770ba12210a51090a5f4f0ac1a98db Mon Sep 17 00:00:00 2001 From: Max Khon Date: Mon, 9 Nov 2015 13:40:50 +0600 Subject: [PATCH 26/51] Use LC_ALL=C instead of LANG=C: LC_ALL has precedence over all LC_* and LANG. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 520a9d03..198f1ae8 100644 --- a/Makefile +++ b/Makefile @@ -149,7 +149,7 @@ ifeq ($$(findstring iphone,$$(SDK-$1)),) # Patch apps/speed.c to not use fork() since it's not available on tvOS sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' $$(OPENSSL_DIR-$1)/apps/speed.c # Patch Configure to build for tvOS or watchOS, not iOS - LANG=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' $$(OPENSSL_DIR-$1)/Configure + LC_ALL=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' $$(OPENSSL_DIR-$1)/Configure endif # Configure the build cd $$(OPENSSL_DIR-$1) && \ From e5aff7ab0438a92de1a9c60071b7be0c52f32251 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 5 Dec 2015 16:22:11 +0800 Subject: [PATCH 27/51] Added CONTRIBUTING.md --- CONTRIBUTING.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..d6f8d984 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,8 @@ +# Contributing + +PyBee <3's contributions! + +Please be aware, PyBee operates under a Code of Conduct. + +See [CONTRIBUTING to PyBee](pybee.org/contributing) for details. + From fe19e3ed68bac29ed439e8eab27618877911267f Mon Sep 17 00:00:00 2001 From: Max Khon Date: Fri, 11 Dec 2015 23:47:59 +0600 Subject: [PATCH 28/51] Do not reference `environ' on tvOS and watchOS (prohibited). --- patch/Python/Python-tvos.patch | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/patch/Python/Python-tvos.patch b/patch/Python/Python-tvos.patch index ef3a577c..0e7a69b0 100644 --- a/patch/Python/Python-tvos.patch +++ b/patch/Python/Python-tvos.patch @@ -31,6 +31,25 @@ /* --- a/Modules/posixmodule.c 2015-10-16 03:34:01.000000000 +0600 +++ b/Modules/posixmodule.c 2015-10-16 03:35:46.000000000 +0600 +@@ -1197,7 +1197,9 @@ + #include + static char **environ; + #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) ++#if !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) + extern char **environ; ++#endif + #endif /* !_MSC_VER */ + + static PyObject * +@@ -1248,7 +1250,7 @@ + Py_DECREF(k); + Py_DECREF(v); + } +-#else ++#elif !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) + if (environ == NULL) + return d; + /* This part ignores errors */ @@ -4463,7 +4463,12 @@ command = PyBytes_AsString(command_obj); From 22812bbe6ceab0d317cd59c4a7564b6e9851af3f Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 21 Dec 2015 11:35:18 +0800 Subject: [PATCH 29/51] Updated Python patch to use single-source libffi. --- patch/Python/Python.patch | 36649 ++++++++++++++---------------------- 1 file changed, 14258 insertions(+), 22391 deletions(-) diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 6ff42a57..8ff3d3d9 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -13375,7 +13375,7 @@ diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py # platform are, allow user to override them with the BROWSER variable. diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded --- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.embedded 2015-06-28 15:00:41.000000000 +0800 ++++ modified/Modules/Setup.embedded 2015-07-04 23:36:43.000000000 +0800 @@ -0,0 +1,91 @@ +##################################################################### +# Static compilation instructions for all binary modules. @@ -13408,6 +13408,16 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +_sha256 sha256module.c +_sha512 sha512module.c +_socket socketmodule.c ++_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ ++ _sqlite/cache.c \ ++ _sqlite/connection.c \ ++ _sqlite/cursor.c \ ++ _sqlite/microprotocols.c \ ++ _sqlite/module.c \ ++ _sqlite/prepare_protocol.c \ ++ _sqlite/row.c \ ++ _sqlite/statement.c \ ++ _sqlite/util.c +_struct _struct.c +array arraymodule.c +audioop audioop.c @@ -13426,16 +13436,6 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded + -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI +resource resource.c +select selectmodule.c -+_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ -+ _sqlite/cache.c \ -+ _sqlite/connection.c \ -+ _sqlite/cursor.c \ -+ _sqlite/microprotocols.c \ -+ _sqlite/module.c \ -+ _sqlite/prepare_protocol.c \ -+ _sqlite/row.c \ -+ _sqlite/statement.c \ -+ _sqlite/util.c +syslog syslogmodule.c +termios termios.c +time timemodule.c @@ -13470,8 +13470,8 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +#spwd spwdmodule.c diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 --- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-aarch64 2015-04-26 11:31:03.000000000 +0800 -@@ -0,0 +1,34 @@ ++++ modified/Modules/Setup.ios-aarch64 2015-12-20 23:03:15.000000000 +0800 +@@ -0,0 +1,35 @@ + +##################################################################### +# iOS ARM64: Platform specific configuration @@ -13481,13 +13481,14 @@ diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 + _ctypes/callproc.c \ + _ctypes/stgdict.c \ + _ctypes/cfield.c \ -+ _ctypes/libffi_ios_aarch64/prep_cif.c \ -+ _ctypes/libffi_ios_aarch64/raw_api.c \ -+ _ctypes/libffi_ios_aarch64/java_raw_api.c \ -+ _ctypes/libffi_ios_aarch64/closures.c \ -+ _ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c \ -+ _ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios_aarch64/include ++ _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ ++ _ctypes/libffi_ios/raw_api.c \ ++ _ctypes/libffi_ios/java_raw_api.c \ ++ _ctypes/libffi_ios/closures.c \ ++ _ctypes/libffi_ios/aarch64/ffi_arm64.c \ ++ _ctypes/libffi_ios/aarch64/sysv_arm64.S \ ++ -I$(srcdir)/Modules/_ctypes/libffi_ios/include + +_decimal _decimal/_decimal.c \ + _decimal/libmpdec/basearith.c \ @@ -13508,8 +13509,8 @@ diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 + -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm --- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-arm 2015-04-26 11:31:08.000000000 +0800 -@@ -0,0 +1,35 @@ ++++ modified/Modules/Setup.ios-arm 2015-12-20 23:02:39.000000000 +0800 +@@ -0,0 +1,36 @@ + +##################################################################### +# iOS ARMv7: Platform specific configuration @@ -13520,6 +13521,7 @@ diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm + _ctypes/stgdict.c \ + _ctypes/cfield.c \ + _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ + _ctypes/libffi_ios/raw_api.c \ + _ctypes/libffi_ios/java_raw_api.c \ + _ctypes/libffi_ios/closures.c \ @@ -13547,7 +13549,7 @@ diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 --- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-i386 2015-04-26 11:31:06.000000000 +0800 ++++ modified/Modules/Setup.ios-i386 2015-12-20 23:01:44.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -13559,12 +13561,12 @@ diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 + _ctypes/stgdict.c \ + _ctypes/cfield.c \ + _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ + _ctypes/libffi_ios/raw_api.c \ + _ctypes/libffi_ios/java_raw_api.c \ + _ctypes/libffi_ios/closures.c \ + _ctypes/libffi_ios/x86/ffi_i386.c \ -+ _ctypes/libffi_ios/x86/darwin_i386.S \ -+ _ctypes/libffi_ios/x86/win32_i386.S \ ++ _ctypes/libffi_ios/x86/sysv_i386.S \ + -I$(srcdir)/Modules/_ctypes/libffi_ios/include + +_decimal _decimal/_decimal.c \ @@ -13586,8 +13588,8 @@ diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 --- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-x86_64 2015-04-26 11:31:11.000000000 +0800 -@@ -0,0 +1,34 @@ ++++ modified/Modules/Setup.ios-x86_64 2015-12-20 23:01:43.000000000 +0800 +@@ -0,0 +1,35 @@ + +##################################################################### +# iOS x86_64 Simulator: Platform specific configuration @@ -13598,11 +13600,12 @@ diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 + _ctypes/stgdict.c \ + _ctypes/cfield.c \ + _ctypes/libffi_ios/prep_cif.c \ ++ _ctypes/libffi_ios/types.c \ + _ctypes/libffi_ios/raw_api.c \ + _ctypes/libffi_ios/java_raw_api.c \ + _ctypes/libffi_ios/closures.c \ + _ctypes/libffi_ios/x86/ffi64_x86_64.c \ -+ _ctypes/libffi_ios/x86/darwin64_x86_64.S \ ++ _ctypes/libffi_ios/x86/unix64_x86_64.S \ + -I$(srcdir)/Modules/_ctypes/libffi_ios/include + +_decimal _decimal/_decimal.c \ @@ -13649,12 +13652,12 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libff +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README --- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README 2015-04-26 07:29:13.000000000 +0800 -@@ -0,0 +1,447 @@ ++++ modified/Modules/_ctypes/libffi_ios/README 2015-12-21 09:55:54.000000000 +0800 +@@ -0,0 +1,450 @@ +Status +====== + -+libffi-3.2.1 was released on November 12, 2014. Check the libffi web ++libffi-4?? was released on TBD. Check the libffi web +page for updates: . + + @@ -13835,6 +13838,9 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi + +See the git log for details at http://github.com/atgreen/libffi. + ++4.0 TBD ++ New API in support of GO closures. ++ +3.2.1 Nov-12-14 + Build fix for non-iOS AArch64 targets. + @@ -14100,7 +14106,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi +libffi-discuss@sourceware.org. diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes/libffi_ios/README.python --- orig/Modules/_ctypes/libffi_ios/README.python 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README.python 2015-04-26 09:00:07.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README.python 2015-12-20 18:48:11.000000000 +0800 @@ -0,0 +1,14 @@ +This directory contains the generated source code for running libffi +on iOS platforms (physical and simulator). It contains support for @@ -14114,15373 +14120,8908 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes +generated code directories. It has been pruned of source files that are +not needed for ctypes. + -+The code in this directory uses the source code from libffi 3.2.1, released -+in November 2014. -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c ---- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,936 @@ -+#ifdef __arm__ -+ -+/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 2011 Timothy Wall -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2011 Free Software Foundation -+ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++The code in this directory uses the source code from a pre-release version ++and patched verion of libffi 4. +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c +--- orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2015-12-20 22:04:51.000000000 +0800 +@@ -0,0 +1,934 @@ ++#ifdef __arm64__ + -+ ARM Foreign Function Interface ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + -+ 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: ++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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+ 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. -+ ----------------------------------------------------------------------- */ ++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. */ + ++#include ++#include ++#include ++#include +#include +#include ++#include "internal.h" + -+#include ++/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; ++ all further uses in this file will refer to the 128-bit type. */ ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE ++# if FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++#else ++# undef FFI_TYPE_LONGDOUBLE ++# define FFI_TYPE_LONGDOUBLE 4 ++#endif + -+/* Forward declares. */ -+static int vfp_type_p (ffi_type *); -+static void layout_vfp_args (ffi_cif *); ++union _d ++{ ++ UINT64 d; ++ UINT32 s[2]; ++}; + -+int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space); -+int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space); ++struct _v ++{ ++ union _d d[2] __attribute__((aligned(16))); ++}; + -+static char* ffi_align(ffi_type **p_arg, char *argp) ++struct call_context +{ -+ /* Align if necessary */ -+ register size_t alignment = (*p_arg)->alignment; -+ if (alignment < 4) -+ { -+ alignment = 4; -+ } -+#ifdef _WIN32_WCE -+ if (alignment > 4) -+ { -+ alignment = 4; -+ } -+#endif -+ if ((alignment - 1) & (unsigned) argp) -+ { -+ argp = (char *) ALIGN(argp, alignment); -+ } ++ struct _v v[N_V_ARG_REG]; ++ UINT64 x[N_X_ARG_REG]; ++}; + -+ if ((*p_arg)->type == FFI_TYPE_STRUCT) -+ { -+ argp = (char *) ALIGN(argp, 4); -+ } -+ return argp; -+} ++#if defined (__clang__) && defined (__APPLE__) ++extern void sys_icache_invalidate (void *start, size_t len); ++#endif + -+static size_t ffi_put_arg(ffi_type **arg_type, void **arg, char *stack) ++static inline void ++ffi_clear_cache (void *start, void *end) +{ -+ register char* argp = stack; -+ register ffi_type **p_arg = arg_type; -+ register void **p_argv = arg; -+ register size_t z = (*p_arg)->size; -+ if (z < sizeof(int)) -+ { -+ z = sizeof(int); -+ switch ((*p_arg)->type) -+ { -+ case FFI_TYPE_SINT8: -+ *(signed int *) argp = (signed int)*(SINT8 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_UINT8: -+ *(unsigned int *) argp = (unsigned int)*(UINT8 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_SINT16: -+ *(signed int *) argp = (signed int)*(SINT16 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ *(unsigned int *) argp = (unsigned int)*(UINT16 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_STRUCT: -+ memcpy(argp, *p_argv, (*p_arg)->size); -+ break; -+ -+ default: -+ FFI_ASSERT(0); -+ } -+ } -+ else if (z == sizeof(int)) -+ { -+ if ((*p_arg)->type == FFI_TYPE_FLOAT) -+ *(float *) argp = *(float *)(* p_argv); -+ else -+ *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); -+ } -+ else if (z == sizeof(double) && (*p_arg)->type == FFI_TYPE_DOUBLE) -+ { -+ *(double *) argp = *(double *)(* p_argv); -+ } -+ else -+ { -+ memcpy(argp, *p_argv, z); -+ } -+ return z; ++#if defined (__clang__) && defined (__APPLE__) ++ sys_icache_invalidate (start, (char *)end - (char *)start); ++#elif defined (__GNUC__) ++ __builtin___clear_cache (start, end); ++#else ++#error "Missing builtin to flush instruction cache" ++#endif +} -+/* ffi_prep_args is called by the assembly routine once stack space -+ has been allocated for the function's arguments -+ -+ The vfp_space parameter is the load area for VFP regs, the return -+ value is cif->vfp_used (word bitset of VFP regs used for passing -+ arguments). These are only used for the VFP hard-float ABI. -+*/ -+int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space) -+{ -+ register unsigned int i; -+ register void **p_argv; -+ register char *argp; -+ register ffi_type **p_arg; -+ argp = stack; -+ + -+ if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { -+ *(void **) argp = ecif->rvalue; -+ argp += 4; -+ } ++#if FFI_EXEC_TRAMPOLINE_TABLE + -+ p_argv = ecif->avalue; ++#ifdef __MACH__ ++#include ++#endif + -+ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; -+ (i != 0); -+ i--, p_arg++, p_argv++) -+ { -+ argp = ffi_align(p_arg, argp); -+ argp += ffi_put_arg(p_arg, p_argv, argp); -+ } ++#endif + -+ return 0; -+} ++/* A subroutine of is_vfp_type. Given a structure type, return the type code ++ of the first non-structure element. Recurse for structure elements. ++ Return -1 if the structure is in fact empty, i.e. no nested elements. */ + -+int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space) ++static int ++is_hfa0 (const ffi_type *ty) +{ -+ register unsigned int i, vi = 0; -+ register void **p_argv; -+ register char *argp, *regp, *eo_regp; -+ register ffi_type **p_arg; -+ char stack_used = 0; -+ char done_with_regs = 0; -+ char is_vfp_type; ++ ffi_type **elements = ty->elements; ++ int i, ret = -1; + -+ // make sure we are using FFI_VFP -+ FFI_ASSERT(ecif->cif->abi == FFI_VFP); ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ ret = elements[i]->type; ++ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) ++ { ++ ret = is_hfa0 (elements[i]); ++ if (ret < 0) ++ continue; ++ } ++ break; ++ } + -+ /* the first 4 words on the stack are used for values passed in core -+ * registers. */ -+ regp = stack; -+ eo_regp = argp = regp + 16; -+ ++ return ret; ++} + -+ /* if the function returns an FFI_TYPE_STRUCT in memory, that address is -+ * passed in r0 to the function */ -+ if ( ecif->cif->flags == FFI_TYPE_STRUCT ) { -+ *(void **) regp = ecif->rvalue; -+ regp += 4; -+ } ++/* A subroutine of is_vfp_type. Given a structure type, return true if all ++ of the non-structure elements are the same as CANDIDATE. */ + -+ p_argv = ecif->avalue; ++static int ++is_hfa1 (const ffi_type *ty, int candidate) ++{ ++ ffi_type **elements = ty->elements; ++ int i; + -+ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; -+ (i != 0); -+ i--, p_arg++, p_argv++) -+ { -+ is_vfp_type = vfp_type_p (*p_arg); ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } + -+ /* Allocated in VFP registers. */ -+ if(vi < ecif->cif->vfp_nargs && is_vfp_type) -+ { -+ char *vfp_slot = (char *)(vfp_space + ecif->cif->vfp_args[vi++]); -+ ffi_put_arg(p_arg, p_argv, vfp_slot); -+ continue; -+ } -+ /* Try allocating in core registers. */ -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char *tregp = ffi_align(p_arg, regp); -+ size_t size = (*p_arg)->size; -+ size = (size < 4)? 4 : size; // pad -+ /* Check if there is space left in the aligned register area to place -+ * the argument */ -+ if(tregp + size <= eo_regp) -+ { -+ regp = tregp + ffi_put_arg(p_arg, p_argv, tregp); -+ done_with_regs = (regp == argp); -+ // ensure we did not write into the stack area -+ FFI_ASSERT(regp <= argp); -+ continue; -+ } -+ /* In case there are no arguments in the stack area yet, -+ the argument is passed in the remaining core registers and on the -+ stack. */ -+ else if (!stack_used) -+ { -+ stack_used = 1; -+ done_with_regs = 1; -+ argp = tregp + ffi_put_arg(p_arg, p_argv, tregp); -+ FFI_ASSERT(eo_regp < argp); -+ continue; -+ } -+ } -+ /* Base case, arguments are passed on the stack */ -+ stack_used = 1; -+ argp = ffi_align(p_arg, argp); -+ argp += ffi_put_arg(p_arg, p_argv, argp); -+ } -+ /* Indicate the VFP registers used. */ -+ return ecif->cif->vfp_used; ++ return 1; +} + -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif) ++/* Determine if TY may be allocated to the FP registers. This is both an ++ fp scalar type as well as an homogenous floating point aggregate (HFA). ++ That is, a structure consisting of 1 to 4 members of all the same type, ++ where that type is an fp scalar. ++ ++ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* ++ constant for the type. */ ++ ++static int ++is_vfp_type (const ffi_type *ty) +{ -+ int type_code; -+ /* Round the stack up to a multiple of 8 bytes. This isn't needed -+ everywhere, but it is on some platforms, and it doesn't harm anything -+ when it isn't needed. */ -+ cif->bytes = (cif->bytes + 7) & ~7; ++ ffi_type **elements; ++ int candidate, i; ++ size_t size, ele_count; + -+ /* Set the return type flag */ -+ switch (cif->rtype->type) ++ /* Quickest tests first. */ ++ candidate = ty->type; ++ switch (candidate) + { -+ case FFI_TYPE_VOID: ++ default: ++ return 0; + case FFI_TYPE_FLOAT: + case FFI_TYPE_DOUBLE: -+ cif->flags = (unsigned) cif->rtype->type; -+ break; -+ -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ cif->flags = (unsigned) FFI_TYPE_SINT64; -+ break; -+ -+ case FFI_TYPE_STRUCT: -+ if (cif->abi == FFI_VFP -+ && (type_code = vfp_type_p (cif->rtype)) != 0) ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 1; ++ goto done; ++ case FFI_TYPE_COMPLEX: ++ candidate = ty->elements[0]->type; ++ switch (candidate) + { -+ /* A Composite Type passed in VFP registers, either -+ FFI_TYPE_STRUCT_VFP_FLOAT or FFI_TYPE_STRUCT_VFP_DOUBLE. */ -+ cif->flags = (unsigned) type_code; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = 2; ++ goto done; + } -+ else if (cif->rtype->size <= 4) -+ /* A Composite Type not larger than 4 bytes is returned in r0. */ -+ cif->flags = (unsigned)FFI_TYPE_INT; -+ else -+ /* A Composite Type larger than 4 bytes, or whose size cannot -+ be determined statically ... is stored in memory at an -+ address passed [in r0]. */ -+ cif->flags = (unsigned)FFI_TYPE_STRUCT; -+ break; -+ -+ default: -+ cif->flags = FFI_TYPE_INT; ++ return 0; ++ case FFI_TYPE_STRUCT: + break; + } + -+ /* Map out the register placements of VFP register args. -+ The VFP hard-float calling conventions are slightly more sophisticated than -+ the base calling conventions, so we do it here instead of in ffi_prep_args(). */ -+ if (cif->abi == FFI_VFP) -+ layout_vfp_args (cif); -+ -+ return FFI_OK; -+} -+ -+/* Perform machine dependent cif processing for variadic calls */ -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs) -+{ -+ /* VFP variadic calls actually use the SYSV ABI */ -+ if (cif->abi == FFI_VFP) -+ cif->abi = FFI_SYSV; -+ -+ return ffi_prep_cif_machdep(cif); -+} -+ -+/* Prototypes for assembly functions, in sysv.S */ -+extern void ffi_call_SYSV (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); -+extern void ffi_call_VFP (void (*fn)(void), extended_cif *, unsigned, unsigned, unsigned *); -+ -+void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ extended_cif ecif; -+ -+ int small_struct = (cif->flags == FFI_TYPE_INT -+ && cif->rtype->type == FFI_TYPE_STRUCT); -+ int vfp_struct = (cif->flags == FFI_TYPE_STRUCT_VFP_FLOAT -+ || cif->flags == FFI_TYPE_STRUCT_VFP_DOUBLE); -+ -+ unsigned int temp; -+ -+ ecif.cif = cif; -+ ecif.avalue = avalue; -+ -+ /* If the return value is a struct and we don't have a return */ -+ /* value address then we need to make one */ ++ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ ++ size = ty->size; ++ if (size < 4 || size > 64) ++ return 0; + -+ if ((rvalue == NULL) && -+ (cif->flags == FFI_TYPE_STRUCT)) -+ { -+ ecif.rvalue = alloca(cif->rtype->size); -+ } -+ else if (small_struct) -+ ecif.rvalue = &temp; -+ else if (vfp_struct) ++ /* Find the type of the first non-structure member. */ ++ elements = ty->elements; ++ candidate = elements[0]->type; ++ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) + { -+ /* Largest case is double x 4. */ -+ ecif.rvalue = alloca(32); ++ for (i = 0; ; ++i) ++ { ++ candidate = is_hfa0 (elements[i]); ++ if (candidate >= 0) ++ break; ++ } + } -+ else -+ ecif.rvalue = rvalue; + -+ switch (cif->abi) ++ /* If the first member is not a floating point type, it's not an HFA. ++ Also quickly re-check the size of the structure. */ ++ switch (candidate) + { -+ case FFI_SYSV: -+ ffi_call_SYSV (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); ++ case FFI_TYPE_FLOAT: ++ ele_count = size / sizeof(float); ++ if (size != ele_count * sizeof(float)) ++ return 0; + break; -+ -+ case FFI_VFP: -+#ifdef __ARM_EABI__ -+ ffi_call_VFP (fn, &ecif, cif->bytes, cif->flags, ecif.rvalue); ++ case FFI_TYPE_DOUBLE: ++ ele_count = size / sizeof(double); ++ if (size != ele_count * sizeof(double)) ++ return 0; + break; -+#endif -+ -+ default: -+ FFI_ASSERT(0); ++ case FFI_TYPE_LONGDOUBLE: ++ ele_count = size / sizeof(long double); ++ if (size != ele_count * sizeof(long double)) ++ return 0; + break; ++ default: ++ return 0; + } -+ if (small_struct) -+ { -+ FFI_ASSERT(rvalue != NULL); -+ memcpy (rvalue, &temp, cif->rtype->size); -+ } -+ -+ else if (vfp_struct) ++ if (ele_count > 4) ++ return 0; ++ ++ /* Finally, make sure that all scalar elements are the same type. */ ++ for (i = 0; elements[i]; ++i) + { -+ FFI_ASSERT(rvalue != NULL); -+ memcpy (rvalue, ecif.rvalue, cif->rtype->size); ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; + } -+ -+} -+ -+/** private members **/ -+ -+static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, -+ void** args, ffi_cif* cif, float *vfp_stack); + -+static void ffi_prep_incoming_args_VFP (char *stack, void **ret, -+ void** args, ffi_cif* cif, float *vfp_stack); -+ -+void ffi_closure_SYSV (ffi_closure *); ++ /* All tests succeeded. Encode the result. */ ++ done: ++ return candidate * 4 + (4 - ele_count); ++} + -+void ffi_closure_VFP (ffi_closure *); ++/* Representation of the procedure call argument marshalling ++ state. + -+/* This function is jumped to by the trampoline */ ++ The terse state variable names match the names used in the AARCH64 ++ PCS. */ + -+unsigned int FFI_HIDDEN -+ffi_closure_inner (ffi_closure *closure, -+ void **respp, void *args, void *vfp_args) ++struct arg_state +{ -+ // our various things... -+ ffi_cif *cif; -+ void **arg_area; -+ -+ cif = closure->cif; -+ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); -+ -+ /* this call will initialize ARG_AREA, such that each -+ * element in that array points to the corresponding -+ * value on the stack; and if the function returns -+ * a structure, it will re-set RESP to point to the -+ * structure return address. */ -+ if (cif->abi == FFI_VFP) -+ ffi_prep_incoming_args_VFP(args, respp, arg_area, cif, vfp_args); -+ else -+ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif, vfp_args); ++ unsigned ngrn; /* Next general-purpose register number. */ ++ unsigned nsrn; /* Next vector register number. */ ++ size_t nsaa; /* Next stack offset. */ + -+ (closure->fun) (cif, *respp, arg_area, closure->user_data); ++#if defined (__APPLE__) ++ unsigned allocating_variadic; ++#endif ++}; + -+ return cif->flags; ++/* Initialize a procedure call argument marshalling state. */ ++static void ++arg_init (struct arg_state *state) ++{ ++ state->ngrn = 0; ++ state->nsrn = 0; ++ state->nsaa = 0; ++#if defined (__APPLE__) ++ state->allocating_variadic = 0; ++#endif +} + -+/*@-exportheader@*/ -+static void -+ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, -+ void **avalue, ffi_cif *cif, -+ /* Used only under VFP hard-float ABI. */ -+ float *vfp_stack) -+/*@=exportheader@*/ ++/* Allocate an aligned slot on the stack and return a pointer to it. */ ++static void * ++allocate_to_stack (struct arg_state *state, void *stack, ++ size_t alignment, size_t size) +{ -+ register unsigned int i; -+ register void **p_argv; -+ register char *argp; -+ register ffi_type **p_arg; -+ -+ argp = stack; -+ -+ if ( cif->flags == FFI_TYPE_STRUCT ) { -+ *rvalue = *(void **) argp; -+ argp += 4; -+ } -+ -+ p_argv = avalue; -+ -+ for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) -+ { -+ size_t z; -+ -+ argp = ffi_align(p_arg, argp); -+ -+ z = (*p_arg)->size; -+ -+ /* because we're little endian, this is what it turns into. */ ++ size_t nsaa = state->nsaa; + -+ *p_argv = (void*) argp; ++ /* Round up the NSAA to the larger of 8 or the natural ++ alignment of the argument's type. */ ++#if defined (__APPLE__) ++ if (state->allocating_variadic && alignment < 8) ++ alignment = 8; ++#else ++ if (alignment < 8) ++ alignment = 8; ++#endif ++ ++ nsaa = ALIGN (nsaa, alignment); ++ state->nsaa = nsaa + size; + -+ p_argv++; -+ argp += z; -+ } -+ -+ return; ++ return (char *)stack + nsaa; +} + -+/*@-exportheader@*/ -+static void -+ffi_prep_incoming_args_VFP(char *stack, void **rvalue, -+ void **avalue, ffi_cif *cif, -+ /* Used only under VFP hard-float ABI. */ -+ float *vfp_stack) -+/*@=exportheader@*/ ++static ffi_arg ++extend_integer_type (void *source, int type) +{ -+ register unsigned int i, vi = 0; -+ register void **p_argv; -+ register char *argp, *regp, *eo_regp; -+ register ffi_type **p_arg; -+ char done_with_regs = 0; -+ char stack_used = 0; -+ char is_vfp_type; -+ -+ FFI_ASSERT(cif->abi == FFI_VFP); -+ regp = stack; -+ eo_regp = argp = regp + 16; -+ -+ if ( cif->flags == FFI_TYPE_STRUCT ) { -+ *rvalue = *(void **) regp; -+ regp += 4; -+ } -+ -+ p_argv = avalue; -+ -+ for (i = cif->nargs, p_arg = cif->arg_types; (i != 0); i--, p_arg++) ++ switch (type) + { -+ size_t z; -+ is_vfp_type = vfp_type_p (*p_arg); -+ -+ if(vi < cif->vfp_nargs && is_vfp_type) -+ { -+ *p_argv++ = (void*)(vfp_stack + cif->vfp_args[vi++]); -+ continue; -+ } -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char* tregp = ffi_align(p_arg, regp); -+ -+ z = (*p_arg)->size; -+ z = (z < 4)? 4 : z; // pad -+ -+ /* if the arguments either fits into the registers or uses registers -+ * and stack, while we haven't read other things from the stack */ -+ if(tregp + z <= eo_regp || !stack_used) -+ { -+ /* because we're little endian, this is what it turns into. */ -+ *p_argv = (void*) tregp; -+ -+ p_argv++; -+ regp = tregp + z; -+ // if we read past the last core register, make sure we have not read -+ // from the stack before and continue reading after regp -+ if(regp > eo_regp) -+ { -+ if(stack_used) -+ { -+ abort(); // we should never read past the end of the register -+ // are if the stack is already in use -+ } -+ argp = regp; -+ } -+ if(regp >= eo_regp) -+ { -+ done_with_regs = 1; -+ stack_used = 1; -+ } -+ continue; -+ } -+ } -+ stack_used = 1; -+ -+ argp = ffi_align(p_arg, argp); -+ -+ z = (*p_arg)->size; -+ -+ /* because we're little endian, this is what it turns into. */ -+ -+ *p_argv = (void*) argp; -+ -+ p_argv++; -+ argp += z; ++ case FFI_TYPE_UINT8: ++ return *(UINT8 *) source; ++ case FFI_TYPE_SINT8: ++ return *(SINT8 *) source; ++ case FFI_TYPE_UINT16: ++ return *(UINT16 *) source; ++ case FFI_TYPE_SINT16: ++ return *(SINT16 *) source; ++ case FFI_TYPE_UINT32: ++ return *(UINT32 *) source; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ return *(SINT32 *) source; ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ return *(UINT64 *) source; ++ break; ++ case FFI_TYPE_POINTER: ++ return *(uintptr_t *) source; ++ default: ++ abort(); + } -+ -+ return; +} + -+/* How to make a trampoline. */ -+ -+extern unsigned int ffi_arm_trampoline[3]; -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#include -+#include -+#include -+#include -+ -+extern void *ffi_closure_trampoline_table_page; -+ -+typedef struct ffi_trampoline_table ffi_trampoline_table; -+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; -+ -+struct ffi_trampoline_table { -+ /* contiguous writable and executable pages */ -+ vm_address_t config_page; -+ vm_address_t trampoline_page; -+ -+ /* free list tracking */ -+ uint16_t free_count; -+ ffi_trampoline_table_entry *free_list; -+ ffi_trampoline_table_entry *free_list_pool; -+ -+ ffi_trampoline_table *prev; -+ ffi_trampoline_table *next; -+}; -+ -+struct ffi_trampoline_table_entry { -+ void *(*trampoline)(); -+ ffi_trampoline_table_entry *next; -+}; ++static void ++extend_hfa_type (void *dest, void *src, int h) ++{ ++ int f = h - AARCH64_RET_S4; ++ void *x0; + -+/* Override the standard architecture trampoline size */ -+// XXX TODO - Fix -+#undef FFI_TRAMPOLINE_SIZE -+#define FFI_TRAMPOLINE_SIZE 12 -+ -+/* The trampoline configuration is placed at 4080 bytes prior to the trampoline's entry point */ -+#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - 4080)); -+ -+/* The first 16 bytes of the config page are unused, as they are unaddressable from the trampoline page. */ -+#define FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET 16 -+ -+/* Total number of trampolines that fit in one trampoline table */ -+#define FFI_TRAMPOLINE_COUNT ((PAGE_SIZE - FFI_TRAMPOLINE_CONFIG_PAGE_OFFSET) / FFI_TRAMPOLINE_SIZE) -+ -+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -+static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++ asm volatile ( ++ "adr %0, 0f\n" ++" add %0, %0, %1\n" ++" br %0\n" ++"0: ldp s16, s17, [%3]\n" /* S4 */ ++" ldp s18, s19, [%3, #8]\n" ++" b 4f\n" ++" ldp s16, s17, [%3]\n" /* S3 */ ++" ldr s18, [%3, #8]\n" ++" b 3f\n" ++" ldp s16, s17, [%3]\n" /* S2 */ ++" b 2f\n" ++" nop\n" ++" ldr s16, [%3]\n" /* S1 */ ++" b 1f\n" ++" nop\n" ++" ldp d16, d17, [%3]\n" /* D4 */ ++" ldp d18, d19, [%3, #16]\n" ++" b 4f\n" ++" ldp d16, d17, [%3]\n" /* D3 */ ++" ldr d18, [%3, #16]\n" ++" b 3f\n" ++" ldp d16, d17, [%3]\n" /* D2 */ ++" b 2f\n" ++" nop\n" ++" ldr d16, [%3]\n" /* D1 */ ++" b 1f\n" ++" nop\n" ++" ldp q16, q17, [%3]\n" /* Q4 */ ++" ldp q18, q19, [%3, #16]\n" ++" b 4f\n" ++" ldp q16, q17, [%3]\n" /* Q3 */ ++" ldr q18, [%3, #16]\n" ++" b 3f\n" ++" ldp q16, q17, [%3]\n" /* Q2 */ ++" b 2f\n" ++" nop\n" ++" ldr q16, [%3]\n" /* Q1 */ ++" b 1f\n" ++"4: str q19, [%2, #48]\n" ++"3: str q18, [%2, #32]\n" ++"2: str q17, [%2, #16]\n" ++"1: str q16, [%2]" ++ : "=&r"(x0) ++ : "r"(f * 12), "r"(dest), "r"(src) ++ : "memory", "v16", "v17", "v18", "v19"); ++} + -+static ffi_trampoline_table * -+ffi_trampoline_table_alloc () ++static void * ++compress_hfa_type (void *dest, void *reg, int h) +{ -+ ffi_trampoline_table *table = NULL; -+ -+ /* Loop until we can allocate two contiguous pages */ -+ while (table == NULL) { -+ vm_address_t config_page = 0x0; -+ kern_return_t kt; -+ -+ /* Try to allocate two pages */ -+ kt = vm_allocate (mach_task_self (), &config_page, PAGE_SIZE*2, VM_FLAGS_ANYWHERE); -+ if (kt != KERN_SUCCESS) { -+ fprintf(stderr, "vm_allocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ switch (h) ++ { ++ case AARCH64_RET_S1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 12; ++#endif ++ } ++ else ++ *(float *)dest = *(float *)reg; + break; -+ } -+ -+ /* Now drop the second half of the allocation to make room for the trampoline table */ -+ vm_address_t trampoline_page = config_page+PAGE_SIZE; -+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) { -+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); ++ case AARCH64_RET_S2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.s, v17.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_S3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.s, v17.s, v18.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_S4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); + break; -+ } -+ -+ /* Remap the trampoline table to directly follow the config page */ -+ vm_prot_t cur_prot; -+ vm_prot_t max_prot; -+ -+ kt = vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, mach_task_self (), (vm_address_t) &ffi_closure_trampoline_table_page, FALSE, &cur_prot, &max_prot, VM_INHERIT_SHARE); + -+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ -+ if (kt != KERN_SUCCESS) { -+ /* Log unexpected failures */ -+ if (kt != KERN_NO_SPACE) { -+ fprintf(stderr, "vm_remap() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); -+ } ++ case AARCH64_RET_D1: ++ if (dest == reg) ++ { ++#ifdef __AARCH64EB__ ++ dest += 8; ++#endif ++ } ++ else ++ *(double *)dest = *(double *)reg; ++ break; ++ case AARCH64_RET_D2: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "st2 { v16.d, v17.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); ++ break; ++ case AARCH64_RET_D3: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldr q18, [%1, #32]\n\t" ++ "st3 { v16.d, v17.d, v18.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); ++ break; ++ case AARCH64_RET_D4: ++ asm ("ldp q16, q17, [%1]\n\t" ++ "ldp q18, q19, [%1, #32]\n\t" ++ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" ++ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); ++ break; + -+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); -+ continue; ++ default: ++ if (dest != reg) ++ return memcpy (dest, reg, 16 * (4 - (h & 3))); ++ break; + } ++ return dest; ++} + -+ /* We have valid trampoline and config pages */ -+ table = calloc (1, sizeof(ffi_trampoline_table)); -+ table->free_count = FFI_TRAMPOLINE_COUNT; -+ table->config_page = config_page; -+ table->trampoline_page = trampoline_page; -+ -+ /* Create and initialize the free list */ -+ table->free_list_pool = calloc(FFI_TRAMPOLINE_COUNT, sizeof(ffi_trampoline_table_entry)); -+ -+ uint16_t i; -+ for (i = 0; i < table->free_count; i++) { -+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; -+ entry->trampoline = (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); -+ -+ if (i < table->free_count - 1) -+ entry->next = &table->free_list_pool[i+1]; -+ } ++/* Either allocate an appropriate register for the argument type, or if ++ none are available, allocate a stack slot and return a pointer ++ to the allocated space. */ + -+ table->free_list = table->free_list_pool; -+ } ++static void * ++allocate_int_to_reg_or_stack (struct call_context *context, ++ struct arg_state *state, ++ void *stack, size_t size) ++{ ++ if (state->ngrn < N_X_ARG_REG) ++ return &context->x[state->ngrn++]; + -+ return table; ++ state->ngrn = N_X_ARG_REG; ++ return allocate_to_stack (state, stack, size, size); +} + -+void * -+ffi_closure_alloc (size_t size, void **code) ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) +{ -+ /* Create the closure */ -+ ffi_closure *closure = malloc(size); -+ if (closure == NULL) -+ return NULL; -+ -+ pthread_mutex_lock(&ffi_trampoline_lock); -+ -+ /* Check for an active trampoline table with available entries. */ -+ ffi_trampoline_table *table = ffi_trampoline_tables; -+ if (table == NULL || table->free_list == NULL) { -+ table = ffi_trampoline_table_alloc (); -+ if (table == NULL) { -+ free(closure); -+ return NULL; -+ } ++ ffi_type *rtype = cif->rtype; ++ size_t bytes = cif->bytes; ++ int flags, i, n; + -+ /* Insert the new table at the top of the list */ -+ table->next = ffi_trampoline_tables; -+ if (table->next != NULL) -+ table->next->prev = table; ++ switch (rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = AARCH64_RET_VOID; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = AARCH64_RET_UINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = AARCH64_RET_UINT16; ++ break; ++ case FFI_TYPE_UINT32: ++ flags = AARCH64_RET_UINT32; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = AARCH64_RET_SINT8; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = AARCH64_RET_SINT16; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ flags = AARCH64_RET_SINT32; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = AARCH64_RET_INT64; ++ break; ++ case FFI_TYPE_POINTER: ++ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); ++ break; + -+ ffi_trampoline_tables = table; -+ } ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ flags = is_vfp_type (rtype); ++ if (flags == 0) ++ { ++ size_t s = rtype->size; ++ if (s > 16) ++ { ++ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; ++ bytes += 8; ++ } ++ else if (s == 16) ++ flags = AARCH64_RET_INT128; ++ else if (s == 8) ++ flags = AARCH64_RET_INT64; ++ else ++ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; ++ } ++ break; + -+ /* Claim the free entry */ -+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; -+ ffi_trampoline_tables->free_list = entry->next; -+ ffi_trampoline_tables->free_count--; -+ entry->next = NULL; ++ default: ++ abort(); ++ } + -+ pthread_mutex_unlock(&ffi_trampoline_lock); ++ for (i = 0, n = cif->nargs; i < n; i++) ++ if (is_vfp_type (cif->arg_types[i])) ++ { ++ flags |= AARCH64_FLAG_ARG_V; ++ break; ++ } + -+ /* Initialize the return values */ -+ *code = entry->trampoline; -+ closure->trampoline_table = table; -+ closure->trampoline_table_entry = entry; ++ /* Round the stack up to a multiple of the stack alignment requirement. */ ++ cif->bytes = ALIGN(bytes, 16); ++ cif->flags = flags; ++#if defined (__APPLE__) ++ cif->aarch64_nfixedargs = 0; ++#endif + -+ return closure; ++ return FFI_OK; +} + -+void -+ffi_closure_free (void *ptr) ++#if defined (__APPLE__) ++/* Perform Apple-specific cif processing for variadic calls */ ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs) +{ -+ ffi_closure *closure = ptr; ++ ffi_status status = ffi_prep_cif_machdep (cif); ++ cif->aarch64_nfixedargs = nfixedargs; ++ return status; ++} ++#endif /* __APPLE__ */ + -+ pthread_mutex_lock(&ffi_trampoline_lock); ++extern void ffi_call_SYSV (struct call_context *context, void *frame, ++ void (*fn)(void), void *rvalue, int flags, ++ void *closure) FFI_HIDDEN; + -+ /* Fetch the table and entry references */ -+ ffi_trampoline_table *table = closure->trampoline_table; -+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++/* Call a function with the provided arguments and capture the return ++ value. */ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, ++ void **avalue, void *closure) ++{ ++ struct call_context *context; ++ void *stack, *frame, *rvalue; ++ struct arg_state state; ++ size_t stack_bytes, rtype_size, rsize; ++ int i, nargs, flags; ++ ffi_type *rtype; + -+ /* Return the entry to the free list */ -+ entry->next = table->free_list; -+ table->free_list = entry; -+ table->free_count++; ++ flags = cif->flags; ++ rtype = cif->rtype; ++ rtype_size = rtype->size; ++ stack_bytes = cif->bytes; + -+ /* If all trampolines within this table are free, and at least one other table exists, deallocate -+ * the table */ -+ if (table->free_count == FFI_TRAMPOLINE_COUNT && ffi_trampoline_tables != table) { -+ /* Remove from the list */ -+ if (table->prev != NULL) -+ table->prev->next = table->next; -+ -+ if (table->next != NULL) -+ table->next->prev = table->prev; -+ -+ /* Deallocate pages */ -+ kern_return_t kt; -+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); -+ -+ kt = vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf(stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, __FILE__, __LINE__); -+ -+ /* Deallocate free list */ -+ free (table->free_list_pool); -+ free (table); -+ } else if (ffi_trampoline_tables != table) { -+ /* Otherwise, bump this table to the top of the list */ -+ table->prev = NULL; -+ table->next = ffi_trampoline_tables; -+ if (ffi_trampoline_tables != NULL) -+ ffi_trampoline_tables->prev = table; -+ -+ ffi_trampoline_tables = table; -+ } ++ /* If the target function returns a structure via hidden pointer, ++ then we cannot allow a null rvalue. Otherwise, mash a null ++ rvalue to void return type. */ ++ rsize = 0; ++ if (flags & AARCH64_RET_IN_MEM) ++ { ++ if (orig_rvalue == NULL) ++ rsize = rtype_size; ++ } ++ else if (orig_rvalue == NULL) ++ flags &= AARCH64_FLAG_ARG_V; ++ else if (flags & AARCH64_RET_NEED_COPY) ++ rsize = 16; + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++ /* Allocate consectutive stack for everything we'll need. */ ++ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); ++ stack = context + 1; ++ frame = stack + stack_bytes; ++ rvalue = (rsize ? frame + 32 : orig_rvalue); + -+ /* Free the closure */ -+ free (closure); -+} ++ arg_init (&state); ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) ++ { ++ ffi_type *ty = cif->arg_types[i]; ++ size_t s = ty->size; ++ void *a = avalue[i]; ++ int h, t; ++ ++ t = ty->type; ++ switch (t) ++ { ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; + ++ /* If the argument is a basic type the argument is allocated to an ++ appropriate register, or if none are available, to the stack. */ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ do_pointer: ++ { ++ ffi_arg ext = extend_integer_type (a, t); ++ if (state.ngrn < N_X_ARG_REG) ++ context->x[state.ngrn++] = ext; ++ else ++ { ++ void *d = allocate_to_stack (&state, stack, ty->alignment, s); ++ state.ngrn = N_X_ARG_REG; ++ /* Note that the default abi extends each argument ++ to a full 64-bit slot, while the iOS abi allocates ++ only enough space. */ ++#ifdef __APPLE__ ++ memcpy(d, a, s); +#else ++ *(ffi_arg *)d = ext; ++#endif ++ } ++ } ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ { ++ void *dest; ++ ++ h = is_vfp_type (ty); ++ if (h) ++ { ++ int elems = 4 - (h & 3); ++ if (state.nsrn + elems <= N_V_ARG_REG) ++ { ++ dest = &context->v[state.nsrn]; ++ state.nsrn += elems; ++ extend_hfa_type (dest, a, h); ++ break; ++ } ++ state.nsrn = N_V_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ else if (s > 16) ++ { ++ /* If the argument is a composite type that is larger than 16 ++ bytes, then the argument has been copied to memory, and ++ the argument is replaced by a pointer to the copy. */ ++ a = &avalue[i]; ++ t = FFI_TYPE_POINTER; ++ goto do_pointer; ++ } ++ else ++ { ++ size_t n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ /* If the argument is a composite type and the size in ++ double-words is not more than the number of available ++ X registers, then the argument is copied into ++ consecutive X registers. */ ++ dest = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ /* Otherwise, there are insufficient X registers. Further ++ X register allocations are prevented, the NSAA is ++ adjusted and the argument is copied to memory at the ++ adjusted NSAA. */ ++ state.ngrn = N_X_ARG_REG; ++ dest = allocate_to_stack (&state, stack, ty->alignment, s); ++ } ++ } ++ memcpy (dest, a, s); ++ } ++ break; + -+#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -+({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ -+ unsigned int __fun = (unsigned int)(FUN); \ -+ unsigned int __ctx = (unsigned int)(CTX); \ -+ unsigned char *insns = (unsigned char *)(CTX); \ -+ memcpy (__tramp, ffi_arm_trampoline, sizeof ffi_arm_trampoline); \ -+ *(unsigned int*) &__tramp[12] = __ctx; \ -+ *(unsigned int*) &__tramp[16] = __fun; \ -+ __clear_cache((&__tramp[0]), (&__tramp[19])); /* Clear data mapping. */ \ -+ __clear_cache(insns, insns + 3 * sizeof (unsigned int)); \ -+ /* Clear instruction \ -+ mapping. */ \ -+ }) ++ default: ++ abort(); ++ } + ++#if defined (__APPLE__) ++ if (i + 1 == cif->aarch64_nfixedargs) ++ { ++ state.ngrn = N_X_ARG_REG; ++ state.nsrn = N_V_ARG_REG; ++ state.allocating_variadic = 1; ++ } +#endif ++ } + -+/* the cif must already be prep'ed */ ++ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); ++ ++ if (flags & AARCH64_RET_NEED_COPY) ++ memcpy (orig_rvalue, rvalue, rtype_size); ++} ++ ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} ++ ++#ifdef FFI_GO_CLOSURES ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} ++#endif /* FFI_GO_CLOSURES */ ++ ++/* Build a trampoline. */ ++ ++extern void ffi_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; + +ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) ++ffi_prep_closure_loc (ffi_closure *closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) +{ -+ void (*closure_func)(ffi_closure*) = NULL; ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+ if (cif->abi == FFI_SYSV) -+ closure_func = &ffi_closure_SYSV; -+#ifdef __ARM_EABI__ -+ else if (cif->abi == FFI_VFP) -+ closure_func = &ffi_closure_VFP; -+#endif ++ void (*start)(void); ++ ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_closure_SYSV_V; + else -+ return FFI_BAD_ABI; ++ start = ffi_closure_SYSV; + +#if FFI_EXEC_TRAMPOLINE_TABLE -+ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc); ++#ifdef __MACH__ ++ void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); + config[0] = closure; -+ config[1] = closure_func; ++ config[1] = start; ++#endif +#else -+ FFI_INIT_TRAMPOLINE (&closure->tramp[0], \ -+ closure_func, \ -+ codeloc); ++ static const unsigned char trampoline[16] = { ++ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ ++ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ ++ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ ++ }; ++ char *tramp = closure->tramp; ++ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ ++ *(UINT64 *)(tramp + 16) = (uintptr_t)start; ++ ++ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); +#endif + -+ closure->cif = cif; ++ closure->cif = cif; ++ closure->fun = fun; + closure->user_data = user_data; -+ closure->fun = fun; + + return FFI_OK; +} + -+/* Below are routines for VFP hard-float support. */ ++#ifdef FFI_GO_CLOSURES ++extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; ++extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; + -+static int rec_vfp_type_p (ffi_type *t, int *elt, int *elnum) ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) +{ -+ switch (t->type) -+ { -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ *elt = (int) t->type; -+ *elnum = 1; -+ return 1; ++ void (*start)(void); + -+ case FFI_TYPE_STRUCT_VFP_FLOAT: -+ *elt = FFI_TYPE_FLOAT; -+ *elnum = t->size / sizeof (float); -+ return 1; ++ if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+ case FFI_TYPE_STRUCT_VFP_DOUBLE: -+ *elt = FFI_TYPE_DOUBLE; -+ *elnum = t->size / sizeof (double); -+ return 1; ++ if (cif->flags & AARCH64_FLAG_ARG_V) ++ start = ffi_go_closure_SYSV_V; ++ else ++ start = ffi_go_closure_SYSV; + -+ case FFI_TYPE_STRUCT:; -+ { -+ int base_elt = 0, total_elnum = 0; -+ ffi_type **el = t->elements; -+ while (*el) -+ { -+ int el_elt = 0, el_elnum = 0; -+ if (! rec_vfp_type_p (*el, &el_elt, &el_elnum) -+ || (base_elt && base_elt != el_elt) -+ || total_elnum + el_elnum > 4) -+ return 0; -+ base_elt = el_elt; -+ total_elnum += el_elnum; -+ el++; -+ } -+ *elnum = total_elnum; -+ *elt = base_elt; -+ return 1; -+ } -+ default: ; -+ } -+ return 0; -+} ++ closure->tramp = start; ++ closure->cif = cif; ++ closure->fun = fun; + -+static int vfp_type_p (ffi_type *t) -+{ -+ int elt, elnum; -+ if (rec_vfp_type_p (t, &elt, &elnum)) -+ { -+ if (t->type == FFI_TYPE_STRUCT) -+ { -+ if (elnum == 1) -+ t->type = elt; -+ else -+ t->type = (elt == FFI_TYPE_FLOAT -+ ? FFI_TYPE_STRUCT_VFP_FLOAT -+ : FFI_TYPE_STRUCT_VFP_DOUBLE); -+ } -+ return (int) t->type; -+ } -+ return 0; ++ return FFI_OK; +} ++#endif /* FFI_GO_CLOSURES */ ++ ++/* Primary handler to setup and invoke a function within a closure. ++ ++ A closure when invoked enters via the assembler wrapper ++ ffi_closure_SYSV(). The wrapper allocates a call context on the ++ stack, saves the interesting registers (from the perspective of ++ the calling convention) into the context then passes control to ++ ffi_closure_SYSV_inner() passing the saved context and a pointer to ++ the stack at the point ffi_closure_SYSV() was invoked. ++ ++ On the return path the assembler wrapper will reload call context ++ registers. ++ ++ ffi_closure_SYSV_inner() marshalls the call context into ffi value ++ descriptors, invokes the wrapped function, then marshalls the return ++ value back into the call context. */ + -+static int place_vfp_arg (ffi_cif *cif, ffi_type *t) ++int FFI_HIDDEN ++ffi_closure_SYSV_inner (ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ struct call_context *context, ++ void *stack, void *rvalue, void *struct_rvalue) +{ -+ short reg = cif->vfp_reg_free; -+ int nregs = t->size / sizeof (float); -+ int align = ((t->type == FFI_TYPE_STRUCT_VFP_FLOAT -+ || t->type == FFI_TYPE_FLOAT) ? 1 : 2); -+ /* Align register number. */ -+ if ((reg & 1) && align == 2) -+ reg++; -+ while (reg + nregs <= 16) ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ int i, h, nargs, flags; ++ struct arg_state state; ++ ++ arg_init (&state); ++ ++ for (i = 0, nargs = cif->nargs; i < nargs; i++) + { -+ int s, new_used = 0; -+ for (s = reg; s < reg + nregs; s++) ++ ffi_type *ty = cif->arg_types[i]; ++ int t = ty->type; ++ size_t n, s = ty->size; ++ ++ switch (t) + { -+ new_used |= (1 << s); -+ if (cif->vfp_used & (1 << s)) ++ case FFI_TYPE_VOID: ++ FFI_ASSERT (0); ++ break; ++ ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); ++ break; ++ ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ h = is_vfp_type (ty); ++ if (h) + { -+ reg += align; -+ goto next_reg; ++ n = 4 - (h & 3); ++ if (state.nsrn + n <= N_V_ARG_REG) ++ { ++ void *reg = &context->v[state.nsrn]; ++ state.nsrn += n; ++ ++ /* Eeek! We need a pointer to the structure, however the ++ homogeneous float elements are being passed in individual ++ registers, therefore for float and double the structure ++ is not represented as a contiguous sequence of bytes in ++ our saved register context. We don't need the original ++ contents of the register storage, so we reformat the ++ structure into the same memory. */ ++ avalue[i] = compress_hfa_type (reg, reg, h); ++ } ++ else ++ { ++ state.nsrn = N_V_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } + } -+ } -+ /* Found regs to allocate. */ -+ cif->vfp_used |= new_used; -+ cif->vfp_args[cif->vfp_nargs++] = reg; ++ else if (s > 16) ++ { ++ /* Replace Composite type of size greater than 16 with a ++ pointer. */ ++ avalue[i] = *(void **) ++ allocate_int_to_reg_or_stack (context, &state, stack, ++ sizeof (void *)); ++ } ++ else ++ { ++ n = (s + 7) / 8; ++ if (state.ngrn + n <= N_X_ARG_REG) ++ { ++ avalue[i] = &context->x[state.ngrn]; ++ state.ngrn += n; ++ } ++ else ++ { ++ state.ngrn = N_X_ARG_REG; ++ avalue[i] = allocate_to_stack (&state, stack, ++ ty->alignment, s); ++ } ++ } ++ break; + -+ /* Update vfp_reg_free. */ -+ if (cif->vfp_used & (1 << cif->vfp_reg_free)) -+ { -+ reg += nregs; -+ while (cif->vfp_used & (1 << reg)) -+ reg += 1; -+ cif->vfp_reg_free = reg; ++ default: ++ abort(); + } -+ return 0; -+ next_reg: ; + } -+ // done, mark all regs as used -+ cif->vfp_reg_free = 16; -+ cif->vfp_used = 0xFFFF; -+ return 1; -+} + -+static void layout_vfp_args (ffi_cif *cif) -+{ -+ int i; -+ /* Init VFP fields */ -+ cif->vfp_used = 0; -+ cif->vfp_nargs = 0; -+ cif->vfp_reg_free = 0; -+ memset (cif->vfp_args, -1, 16); /* Init to -1. */ ++ flags = cif->flags; ++ if (flags & AARCH64_RET_IN_MEM) ++ rvalue = struct_rvalue; + -+ for (i = 0; i < cif->nargs; i++) -+ { -+ ffi_type *t = cif->arg_types[i]; -+ if (vfp_type_p (t) && place_vfp_arg (cif, t) == 1) -+ { -+ break; -+ } -+ } ++ fun (cif, rvalue, avalue, user_data); ++ ++ return flags; +} + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S ---- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,496 @@ -+#ifdef __arm__ +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h +--- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-12-20 19:03:29.000000000 +0800 +@@ -0,0 +1,67 @@ ++/* ++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: + -+/* ----------------------------------------------------------------------- -+ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ -+ ARM Foreign Function Interface ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+ 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: ++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. */ + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++#define AARCH64_RET_VOID 0 ++#define AARCH64_RET_INT64 1 ++#define AARCH64_RET_INT128 2 + -+ 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. -+ ----------------------------------------------------------------------- */ ++#define AARCH64_RET_UNUSED3 3 ++#define AARCH64_RET_UNUSED4 4 ++#define AARCH64_RET_UNUSED5 5 ++#define AARCH64_RET_UNUSED6 6 ++#define AARCH64_RET_UNUSED7 7 + -+#define LIBFFI_ASM -+#include -+#include -+#ifdef HAVE_MACHINE_ASM_H -+#include -+#else -+#ifdef __USER_LABEL_PREFIX__ -+#define CONCAT1(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b ++/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, ++ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ ++#define AARCH64_RET_S4 8 ++#define AARCH64_RET_S3 9 ++#define AARCH64_RET_S2 10 ++#define AARCH64_RET_S1 11 + -+/* Use the right prefix for global labels. */ -+#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -+#else -+#define CNAME(x) x -+#endif -+#ifdef __APPLE__ -+#define ENTRY(x) .globl _##x; _##x: -+#else -+#define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): -+#endif /* __APPLE__ */ -+#endif ++#define AARCH64_RET_D4 12 ++#define AARCH64_RET_D3 13 ++#define AARCH64_RET_D2 14 ++#define AARCH64_RET_D1 15 + -+#ifdef __ELF__ -+#define LSYM(x) .x -+#else -+#define LSYM(x) x -+#endif ++#define AARCH64_RET_Q4 16 ++#define AARCH64_RET_Q3 17 ++#define AARCH64_RET_Q2 18 ++#define AARCH64_RET_Q1 19 + -+/* Use the SOFTFP return value ABI on Mac OS X, as per the iOS ABI -+ Function Call Guide */ -+#ifdef __APPLE__ -+#define __SOFTFP__ -+#endif ++/* Note that each of the sub-64-bit integers gets two entries. */ ++#define AARCH64_RET_UINT8 20 ++#define AARCH64_RET_UINT16 22 ++#define AARCH64_RET_UINT32 24 + -+/* We need a better way of testing for this, but for now, this is all -+ we can do. */ -+@ This selects the minimum architecture level required. -+#define __ARM_ARCH__ 3 ++#define AARCH64_RET_SINT8 26 ++#define AARCH64_RET_SINT16 28 ++#define AARCH64_RET_SINT32 30 + -+#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) -+# undef __ARM_ARCH__ -+# define __ARM_ARCH__ 4 -+#endif -+ -+#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ -+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ -+ || defined(__ARM_ARCH_5TEJ__) -+# undef __ARM_ARCH__ -+# define __ARM_ARCH__ 5 -+#endif -+ -+#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ -+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ -+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ -+ || defined(__ARM_ARCH_6M__) -+# undef __ARM_ARCH__ -+# define __ARM_ARCH__ 6 -+#endif -+ -+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ -+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ -+ || defined(__ARM_ARCH_7EM__) -+# undef __ARM_ARCH__ -+# define __ARM_ARCH__ 7 -+#endif -+ -+#if __ARM_ARCH__ >= 5 -+# define call_reg(x) blx x -+#elif defined (__ARM_ARCH_4T__) -+# define call_reg(x) mov lr, pc ; bx x -+# if defined(__thumb__) || defined(__THUMB_INTERWORK__) -+# define __INTERWORKING__ -+# endif -+#else -+# define call_reg(x) mov lr, pc ; mov pc, x -+#endif -+ -+/* Conditionally compile unwinder directives. */ -+#ifdef __ARM_EABI__ -+#define UNWIND -+#else -+#define UNWIND @ -+#endif -+ -+.syntax unified -+ -+#if defined(__thumb__) && !defined(__THUMB_INTERWORK__) -+#define ARM_FUNC_START(name) \ -+ .text; \ -+ .align 2; \ -+ .thumb; \ -+ .thumb_func; \ -+ ENTRY(name); \ -+ bx pc; \ -+ nop; \ -+ .arm; \ -+ UNWIND .fnstart; \ -+_L__##name: -+#else -+#define ARM_FUNC_START(name) \ -+ .text; \ -+ .align 2; \ -+ .arm; \ -+ ENTRY(name); \ -+ UNWIND .fnstart -+#endif -+ -+.macro RETLDM regs=, cond=, dirn=ia -+#if defined (__INTERWORKING__) -+ .ifc "\regs","" -+ ldr\cond lr, [sp], #4 -+ .else -+ ldm\cond\dirn sp!, {\regs, lr} -+ .endif -+ bx\cond lr -+#else -+ .ifc "\regs","" -+ ldr\cond pc, [sp], #4 -+ .else -+ ldm\cond\dirn sp!, {\regs, pc} -+ .endif -+#endif -+.endm -+ -+ @ r0: ffi_prep_args -+ @ r1: &ecif -+ @ r2: cif->bytes -+ @ r3: fig->flags -+ @ sp+0: ecif.rvalue -+ -+ @ This assumes we are using gas. -+ARM_FUNC_START(ffi_call_SYSV) -+ @ Save registers -+ stmfd sp!, {r0-r3, fp, lr} -+ UNWIND .save {r0-r3, fp, lr} -+ mov fp, sp -+ -+ UNWIND .setfp fp, sp -+ -+ @ Make room for all of the new args. -+ sub sp, fp, r2 -+ -+ @ Place all of the ffi_prep_args in position -+ mov r0, sp -+ @ r1 already set -+ -+ @ Call ffi_prep_args(stack, &ecif) -+ bl CNAME(ffi_prep_args_SYSV) -+ -+ @ move first 4 parameters in registers -+ ldmia sp, {r0-r3} -+ -+ @ and adjust stack -+ sub lr, fp, sp @ cif->bytes == fp - sp -+ ldr ip, [fp] @ load fn() in advance -+ cmp lr, #16 -+ movhs lr, #16 -+ add sp, sp, lr ++#define AARCH64_RET_MASK 31 + -+ @ call (fn) (...) -+ call_reg(ip) -+ -+ @ Remove the space we pushed for the args -+ mov sp, fp ++#define AARCH64_RET_IN_MEM (1 << 5) ++#define AARCH64_RET_NEED_COPY (1 << 6) + -+ @ Load r2 with the pointer to storage for the return value -+ ldr r2, [sp, #24] ++#define AARCH64_FLAG_ARG_V_BIT 7 ++#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) + -+ @ Load r3 with the return type code -+ ldr r3, [sp, #12] ++#define N_X_ARG_REG 8 ++#define N_V_ARG_REG 8 ++#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) +diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S +--- orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2015-12-20 22:31:37.000000000 +0800 +@@ -0,0 +1,443 @@ ++#ifdef __arm64__ + -+ @ If the return value pointer is NULL, assume no return value. -+ cmp r2, #0 -+ beq LSYM(Lepilogue) ++/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. + -+@ return INT -+ cmp r3, #FFI_TYPE_INT -+#if defined(__SOFTFP__) || defined(__ARM_EABI__) -+ cmpne r3, #FFI_TYPE_FLOAT -+#endif -+ streq r0, [r2] -+ beq LSYM(Lepilogue) ++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: + -+ @ return INT64 -+ cmp r3, #FFI_TYPE_SINT64 -+#if defined(__SOFTFP__) || defined(__ARM_EABI__) -+ cmpne r3, #FFI_TYPE_DOUBLE -+#endif -+ stmiaeq r2, {r0, r1} ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. + -+#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) -+ beq LSYM(Lepilogue) ++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. */ + -+@ return FLOAT -+ cmp r3, #FFI_TYPE_FLOAT -+ stfeqs f0, [r2] -+ beq LSYM(Lepilogue) ++#define LIBFFI_ASM ++#include ++#include ++#include ++#include "internal.h" + -+@ return DOUBLE or LONGDOUBLE -+ cmp r3, #FFI_TYPE_DOUBLE -+ stfeqd f0, [r2] -+#endif ++#ifdef HAVE_MACHINE_ASM_H ++#include ++#else ++#ifdef __USER_LABEL_PREFIX__ ++#define CONCAT1(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b + -+LSYM(Lepilogue): -+#if defined (__INTERWORKING__) -+ ldmia sp!, {r0-r3,fp, lr} -+ bx lr ++/* Use the right prefix for global labels. */ ++#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) +#else -+ ldmia sp!, {r0-r3,fp, pc} ++#define CNAME(x) x +#endif -+ -+.ffi_call_SYSV_end: -+ UNWIND .fnend -+#ifdef __ELF__ -+ .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) +#endif + -+ -+/* -+ unsigned int FFI_HIDDEN -+ ffi_closure_inner (closure, respp, args) -+ ffi_closure *closure; -+ void **respp; -+ void *args; -+*/ -+ -+ARM_FUNC_START(ffi_closure_SYSV) -+ UNWIND .pad #16 -+ add ip, sp, #16 -+ stmfd sp!, {ip, lr} -+ UNWIND .save {r0, lr} -+ add r2, sp, #8 -+ UNWIND .pad #16 -+ sub sp, sp, #16 -+ str sp, [sp, #8] -+ add r1, sp, #8 -+ bl CNAME(ffi_closure_inner) -+ cmp r0, #FFI_TYPE_INT -+ beq .Lretint -+ -+ cmp r0, #FFI_TYPE_FLOAT -+#if defined(__SOFTFP__) || defined(__ARM_EABI__) -+ beq .Lretint ++#ifdef __AARCH64EB__ ++# define BE(X) X +#else -+ beq .Lretfloat ++# define BE(X) 0 +#endif + -+ cmp r0, #FFI_TYPE_DOUBLE -+#if defined(__SOFTFP__) || defined(__ARM_EABI__) -+ beq .Lretlonglong ++#ifdef __ILP32__ ++#define PTR_REG(n) w##n +#else -+ beq .Lretdouble ++#define PTR_REG(n) x##n +#endif + -+ cmp r0, #FFI_TYPE_LONGDOUBLE -+#if defined(__SOFTFP__) || defined(__ARM_EABI__) -+ beq .Lretlonglong ++#ifdef __ILP32__ ++#define PTR_SIZE 4 +#else -+ beq .Lretlongdouble -+#endif -+ -+ cmp r0, #FFI_TYPE_SINT64 -+ beq .Lretlonglong -+.Lclosure_epilogue: -+ add sp, sp, #16 -+ ldmfd sp, {sp, pc} -+.Lretint: -+ ldr r0, [sp] -+ b .Lclosure_epilogue -+.Lretlonglong: -+ ldr r0, [sp] -+ ldr r1, [sp, #4] -+ b .Lclosure_epilogue -+ -+#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) -+.Lretfloat: -+ ldfs f0, [sp] -+ b .Lclosure_epilogue -+.Lretdouble: -+ ldfd f0, [sp] -+ b .Lclosure_epilogue -+.Lretlongdouble: -+ ldfd f0, [sp] -+ b .Lclosure_epilogue -+#endif -+ -+.ffi_closure_SYSV_end: -+ UNWIND .fnend -+#ifdef __ELF__ -+ .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) ++#define PTR_SIZE 8 +#endif + ++ .text ++ .align 4 + -+/* Below are VFP hard-float ABI call and closure implementations. -+ Add VFP FPU directive here. This is only compiled into the library -+ under EABI. */ -+#ifdef __ARM_EABI__ -+ .fpu vfp -+ -+ @ r0: fn -+ @ r1: &ecif -+ @ r2: cif->bytes -+ @ r3: fig->flags -+ @ sp+0: ecif.rvalue -+ -+ARM_FUNC_START(ffi_call_VFP) -+ @ Save registers -+ stmfd sp!, {r0-r3, fp, lr} -+ UNWIND .save {r0-r3, fp, lr} -+ mov fp, sp -+ UNWIND .setfp fp, sp -+ -+ @ Make room for all of the new args. -+ sub sp, sp, r2 -+ -+ @ Make room for loading VFP args -+ sub sp, sp, #64 -+ -+ @ Place all of the ffi_prep_args in position -+ mov r0, sp -+ @ r1 already set -+ sub r2, fp, #64 @ VFP scratch space -+ -+ @ Call ffi_prep_args(stack, &ecif, vfp_space) -+ bl CNAME(ffi_prep_args_VFP) -+ -+ @ Load VFP register args if needed -+ cmp r0, #0 -+ mov ip, fp -+ beq LSYM(Lbase_args) -+ -+ @ Load only d0 if possible -+ cmp r0, #3 -+ sub ip, fp, #64 -+ flddle d0, [ip] -+ fldmiadgt ip, {d0-d7} -+ -+LSYM(Lbase_args): -+ @ move first 4 parameters in registers -+ ldmia sp, {r0-r3} -+ -+ @ and adjust stack -+ sub lr, ip, sp @ cif->bytes == (fp - 64) - sp -+ ldr ip, [fp] @ load fn() in advance -+ cmp lr, #16 -+ movhs lr, #16 -+ add sp, sp, lr -+ -+ @ call (fn) (...) -+ call_reg(ip) -+ -+ @ Remove the space we pushed for the args -+ mov sp, fp -+ -+ @ Load r2 with the pointer to storage for -+ @ the return value -+ ldr r2, [sp, #24] ++/* ffi_call_SYSV ++ extern void ffi_call_SYSV (void *stack, void *frame, ++ void (*fn)(void), void *rvalue, ++ int flags, void *closure); + -+ @ Load r3 with the return type code -+ ldr r3, [sp, #12] ++ Therefore on entry we have: + -+ @ If the return value pointer is NULL, -+ @ assume no return value. -+ cmp r2, #0 -+ beq LSYM(Lepilogue_vfp) ++ x0 stack ++ x1 frame ++ x2 fn ++ x3 rvalue ++ x4 flags ++ x5 closure ++*/ + -+ cmp r3, #FFI_TYPE_INT -+ streq r0, [r2] -+ beq LSYM(Lepilogue_vfp) ++ cfi_startproc ++CNAME(ffi_call_SYSV): ++ /* Use a stack frame allocated by our caller. */ ++ cfi_def_cfa(x1, 32); ++ stp x29, x30, [x1] ++ mov x29, x1 ++ mov sp, x0 ++ cfi_def_cfa_register(x29) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + -+ cmp r3, #FFI_TYPE_SINT64 -+ stmeqia r2, {r0, r1} -+ beq LSYM(Lepilogue_vfp) ++ mov x9, x2 /* save fn */ ++ mov x8, x3 /* install structure return */ ++#ifdef FFI_GO_CLOSURES ++ mov x18, x5 /* install static chain */ ++#endif ++ stp x3, x4, [x29, #16] /* save rvalue and flags */ + -+ cmp r3, #FFI_TYPE_FLOAT -+ fstseq s0, [r2] -+ beq LSYM(Lepilogue_vfp) -+ -+ cmp r3, #FFI_TYPE_DOUBLE -+ fstdeq d0, [r2] -+ beq LSYM(Lepilogue_vfp) ++ /* Load the vector argument passing registers, if necessary. */ ++ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f ++ ldp q0, q1, [sp, #0] ++ ldp q2, q3, [sp, #32] ++ ldp q4, q5, [sp, #64] ++ ldp q6, q7, [sp, #96] ++1: ++ /* Load the core argument passing registers, including ++ the structure return pointer. */ ++ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] ++ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] ++ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] ++ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] + -+ cmp r3, #FFI_TYPE_STRUCT_VFP_FLOAT -+ cmpne r3, #FFI_TYPE_STRUCT_VFP_DOUBLE -+ fstmiadeq r2, {d0-d3} ++ /* Deallocate the context, leaving the stacked arguments. */ ++ add sp, sp, #CALL_CONTEXT_SIZE + -+LSYM(Lepilogue_vfp): -+ RETLDM "r0-r3,fp" ++ blr x9 /* call fn */ + -+.ffi_call_VFP_end: -+ UNWIND .fnend -+ .size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP) ++ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ + ++ /* Partially deconstruct the stack frame. */ ++ mov sp, x29 ++ cfi_def_cfa_register (sp) ++ ldp x29, x30, [x29] + -+ARM_FUNC_START(ffi_closure_VFP) -+ fstmfdd sp!, {d0-d7} -+ @ r0-r3, then d0-d7 -+ UNWIND .pad #80 -+ add ip, sp, #80 -+ stmfd sp!, {ip, lr} -+ UNWIND .save {r0, lr} -+ add r2, sp, #72 -+ add r3, sp, #8 -+ UNWIND .pad #72 -+ sub sp, sp, #72 -+ str sp, [sp, #64] -+ add r1, sp, #64 -+ bl CNAME(ffi_closure_inner) -+ -+ cmp r0, #FFI_TYPE_INT -+ beq .Lretint_vfp -+ -+ cmp r0, #FFI_TYPE_FLOAT -+ beq .Lretfloat_vfp -+ -+ cmp r0, #FFI_TYPE_DOUBLE -+ cmpne r0, #FFI_TYPE_LONGDOUBLE -+ beq .Lretdouble_vfp -+ -+ cmp r0, #FFI_TYPE_SINT64 -+ beq .Lretlonglong_vfp -+ -+ cmp r0, #FFI_TYPE_STRUCT_VFP_FLOAT -+ beq .Lretfloat_struct_vfp -+ -+ cmp r0, #FFI_TYPE_STRUCT_VFP_DOUBLE -+ beq .Lretdouble_struct_vfp -+ -+.Lclosure_epilogue_vfp: -+ add sp, sp, #72 -+ ldmfd sp, {sp, pc} -+ -+.Lretfloat_vfp: -+ flds s0, [sp] -+ b .Lclosure_epilogue_vfp -+.Lretdouble_vfp: -+ fldd d0, [sp] -+ b .Lclosure_epilogue_vfp -+.Lretint_vfp: -+ ldr r0, [sp] -+ b .Lclosure_epilogue_vfp -+.Lretlonglong_vfp: -+ ldmia sp, {r0, r1} -+ b .Lclosure_epilogue_vfp -+.Lretfloat_struct_vfp: -+ fldmiad sp, {d0-d1} -+ b .Lclosure_epilogue_vfp -+.Lretdouble_struct_vfp: -+ fldmiad sp, {d0-d3} -+ b .Lclosure_epilogue_vfp -+ -+.ffi_closure_VFP_end: -+ UNWIND .fnend -+ .size CNAME(ffi_closure_VFP),.ffi_closure_VFP_end-CNAME(ffi_closure_VFP) -+#endif -+ -+ENTRY(ffi_arm_trampoline) -+ stmfd sp!, {r0-r3} -+ ldr r0, [pc] -+ ldr pc, [pc] ++ /* Save the return value as directed. */ ++ adr x5, 0f ++ and w4, w4, #AARCH64_RET_MASK ++ add x5, x5, x4, lsl #3 ++ br x5 + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits -+#endif ++ /* Note that each table entry is 2 insns, and thus 8 bytes. ++ For integer data, note that we're storing into ffi_arg ++ and therefore we want to extend to 64 bits; these types ++ have two consecutive entries allocated for them. */ ++ .align 4 ++0: ret /* VOID */ ++ nop ++1: str x0, [x3] /* INT64 */ ++ ret ++2: stp x0, x1, [x3] /* INT128 */ ++ ret ++3: brk #1000 /* UNUSED */ ++ ret ++4: brk #1000 /* UNUSED */ ++ ret ++5: brk #1000 /* UNUSED */ ++ ret ++6: brk #1000 /* UNUSED */ ++ ret ++7: brk #1000 /* UNUSED */ ++ ret ++8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ ++ ret ++9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ ++ ret ++10: stp s0, s1, [x3] /* S2 */ ++ ret ++11: str s0, [x3] /* S1 */ ++ ret ++12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ ++ ret ++13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ ++ ret ++14: stp d0, d1, [x3] /* D2 */ ++ ret ++15: str d0, [x3] /* D1 */ ++ ret ++16: str q3, [x3, #48] /* Q4 */ ++ nop ++17: str q2, [x3, #32] /* Q3 */ ++ nop ++18: stp q0, q1, [x3] /* Q2 */ ++ ret ++19: str q0, [x3] /* Q1 */ ++ ret ++20: uxtb w0, w0 /* UINT8 */ ++ str x0, [x3] ++21: ret /* reserved */ ++ nop ++22: uxth w0, w0 /* UINT16 */ ++ str x0, [x3] ++23: ret /* reserved */ ++ nop ++24: mov w0, w0 /* UINT32 */ ++ str x0, [x3] ++25: ret /* reserved */ ++ nop ++26: sxtb x0, w0 /* SINT8 */ ++ str x0, [x3] ++27: ret /* reserved */ ++ nop ++28: sxth x0, w0 /* SINT16 */ ++ str x0, [x3] ++29: ret /* reserved */ ++ nop ++30: sxtw x0, w0 /* SINT32 */ ++ str x0, [x3] ++31: ret /* reserved */ ++ nop + ++ cfi_endproc + ++ .globl CNAME(ffi_call_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_call_SYSV), #function ++ .hidden CNAME(ffi_call_SYSV) ++ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S ---- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,4455 @@ -+#ifdef __arm__ -+ -+# GENERATED CODE - DO NOT EDIT -+# This file was generated by src/arm/gentramp.sh -+ -+# Copyright (c) 2010, Plausible Labs Cooperative, Inc. -+# -+# 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: -+# -+# The above copyright notice and this permission notice shall be included -+# in all copies or substantial portions of the Software. -+# -+# 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. -+# ----------------------------------------------------------------------- + -+.text -+.align 12 -+.globl _ffi_closure_trampoline_table_page -+_ffi_closure_trampoline_table_page: ++/* ffi_closure_SYSV + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Closure invocation glue. This is the low level code invoked directly by ++ the closure trampoline to setup and call a closure. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ On entry x17 points to a struct ffi_closure, x16 has been clobbered ++ all other registers are preserved. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ We allocate a call context and save the argument passing registers, ++ then invoked the generic C ffi_closure_SYSV_inner() function to do all ++ the real work, on return we load the result passing registers back from ++ the call context. ++*/ + ++#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ .align 4 ++CNAME(ffi_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ .globl CNAME(ffi_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV_V), #function ++ .hidden CNAME(ffi_closure_SYSV_V) ++ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ .align 4 ++ cfi_startproc ++CNAME(ffi_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] + ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ ++ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ ++.Ldo_closure: ++ add x3, sp, #16 /* load context */ ++ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ ++ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ ++ mov x6, x8 /* load struct_rval */ ++ bl CNAME(ffi_closure_SYSV_inner) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Load the return value as directed. */ ++ adr x1, 0f ++ and w0, w0, #AARCH64_RET_MASK ++ add x1, x1, x0, lsl #3 ++ add x3, sp, #16+CALL_CONTEXT_SIZE ++ br x1 + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Note that each table entry is 2 insns, and thus 8 bytes. */ ++ .align 4 ++0: b 99f /* VOID */ ++ nop ++1: ldr x0, [x3] /* INT64 */ ++ b 99f ++2: ldp x0, x1, [x3] /* INT128 */ ++ b 99f ++3: brk #1000 /* UNUSED */ ++ nop ++4: brk #1000 /* UNUSED */ ++ nop ++5: brk #1000 /* UNUSED */ ++ nop ++6: brk #1000 /* UNUSED */ ++ nop ++7: brk #1000 /* UNUSED */ ++ nop ++8: ldr s3, [x3, #12] /* S4 */ ++ nop ++9: ldr s2, [x2, #8] /* S3 */ ++ nop ++10: ldp s0, s1, [x3] /* S2 */ ++ b 99f ++11: ldr s0, [x3] /* S1 */ ++ b 99f ++12: ldr d3, [x3, #24] /* D4 */ ++ nop ++13: ldr d2, [x3, #16] /* D3 */ ++ nop ++14: ldp d0, d1, [x3] /* D2 */ ++ b 99f ++15: ldr d0, [x3] /* D1 */ ++ b 99f ++16: ldr q3, [x3, #48] /* Q4 */ ++ nop ++17: ldr q2, [x3, #32] /* Q3 */ ++ nop ++18: ldp q0, q1, [x3] /* Q2 */ ++ b 99f ++19: ldr q0, [x3] /* Q1 */ ++ b 99f ++20: ldrb w0, [x3, #BE(7)] /* UINT8 */ ++ b 99f ++21: brk #1000 /* reserved */ ++ nop ++22: ldrh w0, [x3, #BE(6)] /* UINT16 */ ++ b 99f ++23: brk #1000 /* reserved */ ++ nop ++24: ldr w0, [x3, #BE(4)] /* UINT32 */ ++ b 99f ++25: brk #1000 /* reserved */ ++ nop ++26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ ++ b 99f ++27: brk #1000 /* reserved */ ++ nop ++28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ ++ b 99f ++29: brk #1000 /* reserved */ ++ nop ++30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ ++ nop ++31: /* reserved */ ++99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS ++ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) ++ cfi_restore (x29) ++ cfi_restore (x30) ++ ret ++ cfi_endproc + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ .globl CNAME(ffi_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_closure_SYSV), #function ++ .hidden CNAME(ffi_closure_SYSV) ++ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) ++#endif + ++#if FFI_EXEC_TRAMPOLINE_TABLE + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifdef __MACH__ ++#include ++ .align PAGE_MAX_SHIFT ++CNAME(ffi_closure_trampoline_table_page): ++ .rept PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE ++ adr x16, -PAGE_MAX_SIZE ++ ldp x17, x16, [x16] ++ br x16 ++ nop /* each entry in the trampoline config page is 2*sizeof(void*) so the trampoline itself cannot be smaller that 16 bytes */ ++ .endr ++ ++ .globl CNAME(ffi_closure_trampoline_table_page) ++ #ifdef __ELF__ ++ .type CNAME(ffi_closure_trampoline_table_page), #function ++ .hidden CNAME(ffi_closure_trampoline_table_page) ++ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) ++ #endif ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef FFI_GO_CLOSURES ++ .align 4 ++CNAME(ffi_go_closure_SYSV_V): ++ cfi_startproc ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) + ++ /* Save the argument passing vector registers. */ ++ stp q0, q1, [sp, #16 + 0] ++ stp q2, q3, [sp, #16 + 32] ++ stp q4, q5, [sp, #16 + 64] ++ stp q6, q7, [sp, #16 + 96] ++ b 0f ++ cfi_endproc + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ .globl CNAME(ffi_go_closure_SYSV_V) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV_V), #function ++ .hidden CNAME(ffi_go_closure_SYSV_V) ++ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ .align 4 ++ cfi_startproc ++CNAME(ffi_go_closure_SYSV): ++ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! ++ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++0: ++ mov x29, sp + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Save the argument passing core registers. */ ++ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] ++ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] ++ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] ++ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] + ++ /* Load ffi_closure_inner arguments. */ ++ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ ++ mov x2, x18 /* load user_data */ ++ b .Ldo_closure ++ cfi_endproc + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ .globl CNAME(ffi_go_closure_SYSV) ++#ifdef __ELF__ ++ .type CNAME(ffi_go_closure_SYSV), #function ++ .hidden CNAME(ffi_go_closure_SYSV) ++ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) ++#endif ++#endif /* FFI_GO_CLOSURES */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c +--- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-12-20 22:05:17.000000000 +0800 +@@ -0,0 +1,813 @@ ++#ifdef __arm__ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 2011 Timothy Wall ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2011 Free Software Foundation ++ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ ARM Foreign Function Interface + ++ 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: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ 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. ++ ----------------------------------------------------------------------- */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#include ++#include ++#include ++#include ++#include "internal.h" + ++#if FFI_EXEC_TRAMPOLINE_TABLE + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifdef __MACH__ ++#include ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#else ++extern unsigned int ffi_arm_trampoline[2] FFI_HIDDEN; ++#endif + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Forward declares. */ ++static int vfp_type_p (const ffi_type *); ++static void layout_vfp_args (ffi_cif *); + ++static void * ++ffi_align (ffi_type *ty, void *p) ++{ ++ /* Align if necessary */ ++ size_t alignment; ++#ifdef _WIN32_WCE ++ alignment = 4; ++#else ++ alignment = ty->alignment; ++ if (alignment < 4) ++ alignment = 4; ++#endif ++ return (void *) ALIGN (p, alignment); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++static size_t ++ffi_put_arg (ffi_type *ty, void *src, void *dst) ++{ ++ size_t z = ty->size; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ switch (ty->type) ++ { ++ case FFI_TYPE_SINT8: ++ *(UINT32 *)dst = *(SINT8 *)src; ++ break; ++ case FFI_TYPE_UINT8: ++ *(UINT32 *)dst = *(UINT8 *)src; ++ break; ++ case FFI_TYPE_SINT16: ++ *(UINT32 *)dst = *(SINT16 *)src; ++ break; ++ case FFI_TYPE_UINT16: ++ *(UINT32 *)dst = *(UINT16 *)src; ++ break; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ case FFI_TYPE_FLOAT: ++ *(UINT32 *)dst = *(UINT32 *)src; ++ break; + ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_DOUBLE: ++ *(UINT64 *)dst = *(UINT64 *)src; ++ break; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ memcpy (dst, src, z); ++ break; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ default: ++ abort(); ++ } + ++ return ALIGN (z, 4); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ffi_prep_args is called once stack space has been allocated ++ for the function's arguments. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ The vfp_space parameter is the load area for VFP regs, the return ++ value is cif->vfp_used (word bitset of VFP regs used for passing ++ arguments). These are only used for the VFP hard-float ABI. ++*/ ++static void ++ffi_prep_args_SYSV (ffi_cif *cif, int flags, void *rvalue, ++ void **avalue, char *argp) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (flags == ARM_TYPE_STRUCT) ++ { ++ *(void **) argp = rvalue; ++ argp += 4; ++ } + ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ argp = ffi_align (ty, argp); ++ argp += ffi_put_arg (ty, avalue[i], argp); ++ } ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++static void ++ffi_prep_args_VFP (ffi_cif *cif, int flags, void *rvalue, ++ void **avalue, char *stack, char *vfp_space) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n, vi = 0; ++ char *argp, *regp, *eo_regp; ++ char stack_used = 0; ++ char done_with_regs = 0; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* The first 4 words on the stack are used for values ++ passed in core registers. */ ++ regp = stack; ++ eo_regp = argp = regp + 16; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* If the function returns an FFI_TYPE_STRUCT in memory, ++ that address is passed in r0 to the function. */ ++ if (flags == ARM_TYPE_STRUCT) ++ { ++ *(void **) regp = rvalue; ++ regp += 4; ++ } + ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ void *a = avalue[i]; ++ int is_vfp_type = vfp_type_p (ty); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Allocated in VFP registers. */ ++ if (vi < cif->vfp_nargs && is_vfp_type) ++ { ++ char *vfp_slot = vfp_space + cif->vfp_args[vi++] * 4; ++ ffi_put_arg (ty, a, vfp_slot); ++ continue; ++ } ++ /* Try allocating in core registers. */ ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char *tregp = ffi_align (ty, regp); ++ size_t size = ty->size; ++ size = (size < 4) ? 4 : size; // pad ++ /* Check if there is space left in the aligned register ++ area to place the argument. */ ++ if (tregp + size <= eo_regp) ++ { ++ regp = tregp + ffi_put_arg (ty, a, tregp); ++ done_with_regs = (regp == argp); ++ // ensure we did not write into the stack area ++ FFI_ASSERT (regp <= argp); ++ continue; ++ } ++ /* In case there are no arguments in the stack area yet, ++ the argument is passed in the remaining core registers ++ and on the stack. */ ++ else if (!stack_used) ++ { ++ stack_used = 1; ++ done_with_regs = 1; ++ argp = tregp + ffi_put_arg (ty, a, tregp); ++ FFI_ASSERT (eo_regp < argp); ++ continue; ++ } ++ } ++ /* Base case, arguments are passed on the stack */ ++ stack_used = 1; ++ argp = ffi_align (ty, argp); ++ argp += ffi_put_arg (ty, a, argp); ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Perform machine dependent cif processing */ ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int flags = 0, cabi = cif->abi; ++ size_t bytes = cif->bytes; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Map out the register placements of VFP register args. The VFP ++ hard-float calling conventions are slightly more sophisticated ++ than the base calling conventions, so we do it here instead of ++ in ffi_prep_args(). */ ++ if (cabi == FFI_VFP) ++ layout_vfp_args (cif); + ++ /* Set the return type flag */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = ARM_TYPE_VOID; ++ break; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_POINTER: ++ flags = ARM_TYPE_INT; ++ break; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = ARM_TYPE_INT64; ++ break; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ case FFI_TYPE_FLOAT: ++ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_S : ARM_TYPE_INT); ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_D : ARM_TYPE_INT64); ++ break; + ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_COMPLEX: ++ if (cabi == FFI_VFP) ++ { ++ int h = vfp_type_p (cif->rtype); ++ ++ flags = ARM_TYPE_VFP_N; ++ if (h == 0x100 + FFI_TYPE_FLOAT) ++ flags = ARM_TYPE_VFP_S; ++ if (h == 0x100 + FFI_TYPE_DOUBLE) ++ flags = ARM_TYPE_VFP_D; ++ if (h != 0) ++ break; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* A Composite Type not larger than 4 bytes is returned in r0. ++ A Composite Type larger than 4 bytes, or whose size cannot ++ be determined statically ... is stored in memory at an ++ address passed [in r0]. */ ++ if (cif->rtype->size <= 4) ++ flags = ARM_TYPE_INT; ++ else ++ { ++ flags = ARM_TYPE_STRUCT; ++ bytes += 4; ++ } ++ break; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ default: ++ abort(); ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Round the stack up to a multiple of 8 bytes. This isn't needed ++ everywhere, but it is on some platforms, and it doesn't harm anything ++ when it isn't needed. */ ++ bytes = ALIGN (bytes, 8); + ++ /* Minimum stack space is the 4 register arguments that we pop. */ ++ if (bytes < 4*4) ++ bytes = 4*4; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ cif->bytes = bytes; ++ cif->flags = flags; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ return FFI_OK; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Perform machine dependent cif processing for variadic calls */ ++ffi_status ++ffi_prep_cif_machdep_var (ffi_cif * cif, ++ unsigned int nfixedargs, unsigned int ntotalargs) ++{ ++ /* VFP variadic calls actually use the SYSV ABI */ ++ if (cif->abi == FFI_VFP) ++ cif->abi = FFI_SYSV; + ++ return ffi_prep_cif_machdep (cif); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Prototypes for assembly functions, in sysv.S. */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++struct call_frame ++{ ++ void *fp; ++ void *lr; ++ void *rvalue; ++ int flags; ++ void *closure; ++}; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++extern void ffi_call_SYSV (void *stack, struct call_frame *, ++ void (*fn) (void)) FFI_HIDDEN; ++extern void ffi_call_VFP (void *vfp_space, struct call_frame *, ++ void (*fn) (void), unsigned vfp_used) FFI_HIDDEN; + ++static void ++ffi_call_int (ffi_cif * cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ int flags = cif->flags; ++ ffi_type *rtype = cif->rtype; ++ size_t bytes, rsize, vfp_size; ++ char *stack, *vfp_space, *new_rvalue; ++ struct call_frame *frame; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ rsize = 0; ++ if (rvalue == NULL) ++ { ++ /* If the return value is a struct and we don't have a return ++ value address then we need to make one. Otherwise the return ++ value is in registers and we can ignore them. */ ++ if (flags == ARM_TYPE_STRUCT) ++ rsize = rtype->size; ++ else ++ flags = ARM_TYPE_VOID; ++ } ++ else if (flags == ARM_TYPE_VFP_N) ++ { ++ /* Largest case is double x 4. */ ++ rsize = 32; ++ } ++ else if (flags == ARM_TYPE_INT && rtype->type == FFI_TYPE_STRUCT) ++ rsize = 4; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Largest case. */ ++ vfp_size = (cif->abi == FFI_VFP && cif->vfp_used ? 8*8: 0); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ bytes = cif->bytes; ++ stack = alloca (vfp_size + bytes + sizeof(struct call_frame) + rsize); + ++ vfp_space = NULL; ++ if (vfp_size) ++ { ++ vfp_space = stack; ++ stack += vfp_size; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ frame = (struct call_frame *)(stack + bytes); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ new_rvalue = rvalue; ++ if (rsize) ++ new_rvalue = (void *)(frame + 1); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ frame->rvalue = new_rvalue; ++ frame->flags = flags; ++ frame->closure = closure; + ++ if (vfp_space) ++ { ++ ffi_prep_args_VFP (cif, flags, new_rvalue, avalue, stack, vfp_space); ++ ffi_call_VFP (vfp_space, frame, fn, cif->vfp_used); ++ } ++ else ++ { ++ ffi_prep_args_SYSV (cif, flags, new_rvalue, avalue, stack); ++ ffi_call_SYSV (stack, frame, fn); ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (rvalue && rvalue != new_rvalue) ++ memcpy (rvalue, new_rvalue, rtype->size); ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void ++ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void ++ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} + ++static void * ++ffi_prep_incoming_args_SYSV (ffi_cif *cif, void *rvalue, ++ char *argp, void **avalue) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (cif->flags == ARM_TYPE_STRUCT) ++ { ++ rvalue = *(void **) argp; ++ argp += 4; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ argp = ffi_align (ty, argp); ++ avalue[i] = (void *) argp; ++ argp += z; ++ } + ++ return rvalue; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++static void * ++ffi_prep_incoming_args_VFP (ffi_cif *cif, void *rvalue, char *stack, ++ char *vfp_space, void **avalue) ++{ ++ ffi_type **arg_types = cif->arg_types; ++ int i, n, vi = 0; ++ char *argp, *regp, *eo_regp; ++ char done_with_regs = 0; ++ char stack_used = 0; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ regp = stack; ++ eo_regp = argp = regp + 16; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (cif->flags == ARM_TYPE_STRUCT) ++ { ++ rvalue = *(void **) regp; ++ regp += 4; ++ } + ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ int is_vfp_type = vfp_type_p (ty); ++ size_t z = ty->size; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (vi < cif->vfp_nargs && is_vfp_type) ++ { ++ avalue[i] = vfp_space + cif->vfp_args[vi++] * 4; ++ continue; ++ } ++ else if (!done_with_regs && !is_vfp_type) ++ { ++ char *tregp = ffi_align (ty, regp); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ z = (z < 4) ? 4 : z; // pad + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* If the arguments either fits into the registers or uses registers ++ and stack, while we haven't read other things from the stack */ ++ if (tregp + z <= eo_regp || !stack_used) ++ { ++ /* Because we're little endian, this is what it turns into. */ ++ avalue[i] = (void *) tregp; ++ regp = tregp + z; ++ ++ /* If we read past the last core register, make sure we ++ have not read from the stack before and continue ++ reading after regp. */ ++ if (regp > eo_regp) ++ { ++ FFI_ASSERT (!stack_used); ++ argp = regp; ++ } ++ if (regp >= eo_regp) ++ { ++ done_with_regs = 1; ++ stack_used = 1; ++ } ++ continue; ++ } ++ } + ++ stack_used = 1; ++ argp = ffi_align (ty, argp); ++ avalue[i] = (void *) argp; ++ argp += z; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ return rvalue; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++struct closure_frame ++{ ++ char vfp_space[8*8] __attribute__((aligned(8))); ++ char result[8*4]; ++ char argp[]; ++}; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++int FFI_HIDDEN ++ffi_closure_inner_SYSV (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ struct closure_frame *frame) ++{ ++ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); ++ void *rvalue = ffi_prep_incoming_args_SYSV (cif, frame->result, ++ frame->argp, avalue); ++ fun (cif, rvalue, avalue, user_data); ++ return cif->flags; ++} + ++int FFI_HIDDEN ++ffi_closure_inner_VFP (ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, ++ struct closure_frame *frame) ++{ ++ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); ++ void *rvalue = ffi_prep_incoming_args_VFP (cif, frame->result, frame->argp, ++ frame->vfp_space, avalue); ++ fun (cif, rvalue, avalue, user_data); ++ return cif->flags; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++void ffi_closure_SYSV (void) FFI_HIDDEN; ++void ffi_closure_VFP (void) FFI_HIDDEN; ++void ffi_go_closure_SYSV (void) FFI_HIDDEN; ++void ffi_go_closure_VFP (void) FFI_HIDDEN; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* the cif must already be prep'ed */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ffi_status ++ffi_prep_closure_loc (ffi_closure * closure, ++ ffi_cif * cif, ++ void (*fun) (ffi_cif *, void *, void **, void *), ++ void *user_data, void *codeloc) ++{ ++ void (*closure_func) (void) = ffi_closure_SYSV; + ++ if (cif->abi == FFI_VFP) ++ { ++ /* We only need take the vfp path if there are vfp arguments. */ ++ if (cif->vfp_used) ++ closure_func = ffi_closure_VFP; ++ } ++ else if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); ++ config[0] = closure; ++ config[1] = closure_func; ++#else ++ memcpy (closure->tramp, ffi_arm_trampoline, 8); ++ __clear_cache(closure->tramp, closure->tramp + 8); /* clear data map */ ++ __clear_cache(codeloc, codeloc + 8); /* clear insn map */ ++ *(void (**)(void))(closure->tramp + 8) = closure_func; ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return FFI_OK; ++} + ++ffi_status ++ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, ++ void (*fun) (ffi_cif *, void *, void **, void *)) ++{ ++ void (*closure_func) (void) = ffi_go_closure_SYSV; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (cif->abi == FFI_VFP) ++ { ++ /* We only need take the vfp path if there are vfp arguments. */ ++ if (cif->vfp_used) ++ closure_func = ffi_go_closure_VFP; ++ } ++ else if (cif->abi != FFI_SYSV) ++ return FFI_BAD_ABI; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ closure->tramp = closure_func; ++ closure->cif = cif; ++ closure->fun = fun; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return FFI_OK; ++} + ++/* Below are routines for VFP hard-float support. */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* A subroutine of vfp_type_p. Given a structure type, return the type code ++ of the first non-structure element. Recurse for structure elements. ++ Return -1 if the structure is in fact empty, i.e. no nested elements. */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static int ++is_hfa0 (const ffi_type *ty) ++{ ++ ffi_type **elements = ty->elements; ++ int i, ret = -1; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ ret = elements[i]->type; ++ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) ++ { ++ ret = is_hfa0 (elements[i]); ++ if (ret < 0) ++ continue; ++ } ++ break; ++ } + ++ return ret; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* A subroutine of vfp_type_p. Given a structure type, return true if all ++ of the non-structure elements are the same as CANDIDATE. */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static int ++is_hfa1 (const ffi_type *ty, int candidate) ++{ ++ ffi_type **elements = ty->elements; ++ int i; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (elements != NULL) ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } + ++ return 1; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Determine if TY is an homogenous floating point aggregate (HFA). ++ That is, a structure consisting of 1 to 4 members of all the same type, ++ where that type is a floating point scalar. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Returns non-zero iff TY is an HFA. The result is an encoded value where ++ bits 0-7 contain the type code, and bits 8-10 contain the element count. */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++static int ++vfp_type_p (const ffi_type *ty) ++{ ++ ffi_type **elements; ++ int candidate, i; ++ size_t size, ele_count; + ++ /* Quickest tests first. */ ++ candidate = ty->type; ++ switch (ty->type) ++ { ++ default: ++ return 0; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_DOUBLE: ++ ele_count = 1; ++ goto done; ++ case FFI_TYPE_COMPLEX: ++ candidate = ty->elements[0]->type; ++ if (candidate != FFI_TYPE_FLOAT && candidate != FFI_TYPE_DOUBLE) ++ return 0; ++ ele_count = 2; ++ goto done; ++ case FFI_TYPE_STRUCT: ++ break; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* No HFA types are smaller than 4 bytes, or larger than 32 bytes. */ ++ size = ty->size; ++ if (size < 4 || size > 32) ++ return 0; + ++ /* Find the type of the first non-structure member. */ ++ elements = ty->elements; ++ candidate = elements[0]->type; ++ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) ++ { ++ for (i = 0; ; ++i) ++ { ++ candidate = is_hfa0 (elements[i]); ++ if (candidate >= 0) ++ break; ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* If the first member is not a floating point type, it's not an HFA. ++ Also quickly re-check the size of the structure. */ ++ switch (candidate) ++ { ++ case FFI_TYPE_FLOAT: ++ ele_count = size / sizeof(float); ++ if (size != ele_count * sizeof(float)) ++ return 0; ++ break; ++ case FFI_TYPE_DOUBLE: ++ ele_count = size / sizeof(double); ++ if (size != ele_count * sizeof(double)) ++ return 0; ++ break; ++ default: ++ return 0; ++ } ++ if (ele_count > 4) ++ return 0; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Finally, make sure that all scalar elements are the same type. */ ++ for (i = 0; elements[i]; ++i) ++ { ++ int t = elements[i]->type; ++ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) ++ { ++ if (!is_hfa1 (elements[i], candidate)) ++ return 0; ++ } ++ else if (t != candidate) ++ return 0; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* All tests succeeded. Encode the result. */ ++ done: ++ return (ele_count << 8) | candidate; ++} + ++static int ++place_vfp_arg (ffi_cif *cif, int h) ++{ ++ unsigned short reg = cif->vfp_reg_free; ++ int align = 1, nregs = h >> 8; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if ((h & 0xff) == FFI_TYPE_DOUBLE) ++ align = 2, nregs *= 2; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Align register number. */ ++ if ((reg & 1) && align == 2) ++ reg++; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ while (reg + nregs <= 16) ++ { ++ int s, new_used = 0; ++ for (s = reg; s < reg + nregs; s++) ++ { ++ new_used |= (1 << s); ++ if (cif->vfp_used & (1 << s)) ++ { ++ reg += align; ++ goto next_reg; ++ } ++ } ++ /* Found regs to allocate. */ ++ cif->vfp_used |= new_used; ++ cif->vfp_args[cif->vfp_nargs++] = reg; + ++ /* Update vfp_reg_free. */ ++ if (cif->vfp_used & (1 << cif->vfp_reg_free)) ++ { ++ reg += nregs; ++ while (cif->vfp_used & (1 << reg)) ++ reg += 1; ++ cif->vfp_reg_free = reg; ++ } ++ return 0; ++ next_reg:; ++ } ++ // done, mark all regs as used ++ cif->vfp_reg_free = 16; ++ cif->vfp_used = 0xFFFF; ++ return 1; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++static void ++layout_vfp_args (ffi_cif * cif) ++{ ++ int i; ++ /* Init VFP fields */ ++ cif->vfp_used = 0; ++ cif->vfp_nargs = 0; ++ cif->vfp_reg_free = 0; ++ memset (cif->vfp_args, -1, 16); /* Init to -1. */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ for (i = 0; i < cif->nargs; i++) ++ { ++ int h = vfp_type_p (cif->arg_types[i]); ++ if (h && place_vfp_arg (cif, h) == 1) ++ break; ++ } ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h +--- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-12-20 19:03:21.000000000 +0800 +@@ -0,0 +1,7 @@ ++#define ARM_TYPE_VFP_S 0 ++#define ARM_TYPE_VFP_D 1 ++#define ARM_TYPE_VFP_N 2 ++#define ARM_TYPE_INT64 3 ++#define ARM_TYPE_INT 4 ++#define ARM_TYPE_VOID 5 ++#define ARM_TYPE_STRUCT 6 +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S +--- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-12-20 22:31:41.000000000 +0800 +@@ -0,0 +1,388 @@ ++#ifdef __arm__ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ----------------------------------------------------------------------- ++ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ ARM Foreign Function Interface + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ 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: + ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ 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. ++ ----------------------------------------------------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define LIBFFI_ASM ++#include ++#include ++#include ++#include "internal.h" + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* GCC 4.8 provides __ARM_ARCH; construct it otherwise. */ ++#ifndef __ARM_ARCH ++# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ ++ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ ++ || defined(__ARM_ARCH_7EM__) ++# define __ARM_ARCH 7 ++# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ ++ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ ++ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ ++ || defined(__ARM_ARCH_6M__) ++# define __ARM_ARCH 6 ++# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ ++ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ ++ || defined(__ARM_ARCH_5TEJ__) ++# define __ARM_ARCH 5 ++# else ++# define __ARM_ARCH 4 ++# endif ++#endif + ++/* Conditionally compile unwinder directives. */ ++#ifdef __ARM_EABI__ ++# define UNWIND(...) __VA_ARGS__ ++#else ++# define UNWIND(...) ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__ARM_EABI__) ++ .cfi_sections .debug_frame ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define CONCAT(a, b) CONCAT2(a, b) ++#define CONCAT2(a, b) a ## b + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef __USER_LABEL_PREFIX__ ++# define CNAME(X) CONCAT (__USER_LABEL_PREFIX__, X) ++#else ++# define CNAME(X) X ++#endif ++#ifdef __ELF__ ++# define SIZE(X) .size CNAME(X), . - CNAME(X) ++# define TYPE(X, Y) .type CNAME(X), Y ++#else ++# define SIZE(X) ++# define TYPE(X, Y) ++#endif + ++#define ARM_FUNC_START_LOCAL(name) \ ++ .align 3; \ ++ TYPE(CNAME(name), %function); \ ++ CNAME(name): + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define ARM_FUNC_START(name) \ ++ .globl CNAME(name); \ ++ FFI_HIDDEN(CNAME(name)); \ ++ ARM_FUNC_START_LOCAL(name) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define ARM_FUNC_END(name) \ ++ SIZE(name) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Aid in defining a jump table with 8 bytes between entries. */ ++/* ??? The clang assembler doesn't handle .if with symbolic expressions. */ ++#ifdef __clang__ ++# define E(index) ++#else ++# define E(index) \ ++ .if . - 0b - 8*index; \ ++ .error "type table out of sync"; \ ++ .endif ++#endif + ++ .text ++ .syntax unified ++ .arm + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifndef __clang__ ++ /* We require interworking on LDM, which implies ARMv5T, ++ which implies the existance of BLX. */ ++ .arch armv5t ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Note that we use STC and LDC to encode VFP instructions, ++ so that we do not need ".fpu vfp", nor get that added to ++ the object file attributes. These will not be executed ++ unless the FFI_VFP abi is used. */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ @ r0: stack ++ @ r1: frame ++ @ r2: fn ++ @ r3: vfp_used + ++ARM_FUNC_START(ffi_call_VFP) ++ UNWIND(.fnstart) ++ cfi_startproc + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ cmp r3, #3 @ load only d0 if possible ++#ifdef __clang__ ++ vldrle d0, [sp] ++ vldmgt sp, {d0-d7} ++#else ++ ldcle p11, cr0, [r0] @ vldrle d0, [sp] ++ ldcgt p11, cr0, [r0], {16} @ vldmgt sp, {d0-d7} ++#endif ++ add r0, r0, #64 @ discard the vfp register args ++ /* FALLTHRU */ ++ARM_FUNC_END(ffi_call_VFP) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ARM_FUNC_START(ffi_call_SYSV) ++ stm r1, {fp, lr} ++ mov fp, r1 ++ ++ @ This is a bit of a lie wrt the origin of the unwind info, but ++ @ now we've got the usual frame pointer and two saved registers. ++ UNWIND(.save {fp,lr}) ++ UNWIND(.setfp fp, sp) ++ cfi_def_cfa(fp, 8) ++ cfi_rel_offset(fp, 0) ++ cfi_rel_offset(lr, 4) ++ ++ mov sp, r0 @ install the stack pointer ++ mov lr, r2 @ move the fn pointer out of the way ++ ldr ip, [fp, #16] @ install the static chain ++ ldmia sp!, {r0-r3} @ move first 4 parameters in registers. ++ blx lr @ call fn + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ @ Load r2 with the pointer to storage for the return value ++ @ Load r3 with the return type code ++ ldr r2, [fp, #8] ++ ldr r3, [fp, #12] + ++ @ Deallocate the stack with the arguments. ++ mov sp, fp ++ cfi_def_cfa_register(sp) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ @ Store values stored in registers. ++ .align 3 ++ add pc, pc, r3, lsl #3 ++ nop ++0: ++E(ARM_TYPE_VFP_S) ++#ifdef __clang__ ++ vstr s0, [r2] ++#else ++ stc p10, cr0, [r2] @ vstr s0, [r2] ++#endif ++ pop {fp,pc} ++E(ARM_TYPE_VFP_D) ++#ifdef __clang__ ++ vstr d0, [r2] ++#else ++ stc p11, cr0, [r2] @ vstr d0, [r2] ++#endif ++ pop {fp,pc} ++E(ARM_TYPE_VFP_N) ++#ifdef __clang__ ++ vstm r2, {d0-d3} ++#else ++ stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3} ++#endif ++ pop {fp,pc} ++E(ARM_TYPE_INT64) ++ str r1, [r2, #4] ++ nop ++E(ARM_TYPE_INT) ++ str r0, [r2] ++ pop {fp,pc} ++E(ARM_TYPE_VOID) ++ pop {fp,pc} ++ nop ++E(ARM_TYPE_STRUCT) ++ pop {fp,pc} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ cfi_endproc ++ UNWIND(.fnend) ++ARM_FUNC_END(ffi_call_SYSV) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++/* ++ int ffi_closure_inner_* (cif, fun, user_data, frame) ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ARM_FUNC_START(ffi_go_closure_SYSV) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #4] @ load cif ++ ldr r1, [ip, #8] @ load fun ++ mov r2, ip @ load user_data ++ b 0f ++ cfi_endproc ++ARM_FUNC_END(ffi_go_closure_SYSV) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ARM_FUNC_START(ffi_closure_SYSV) ++ UNWIND(.fnstart) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ldr ip, [ip] @ ip points to the config page, dereference to get the ffi_closure* ++#endif ++ ldr r0, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET] @ load cif ++ ldr r1, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+4] @ load fun ++ ldr r2, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+8] @ load user_data ++0: ++ add ip, sp, #16 @ compute entry sp ++ sub sp, sp, #64+32 @ allocate frame ++ cfi_adjust_cfa_offset(64+32) ++ stmdb sp!, {ip,lr} ++ ++ /* Remember that EABI unwind info only applies at call sites. ++ We need do nothing except note the save of the stack pointer ++ and the link registers. */ ++ UNWIND(.save {sp,lr}) ++ cfi_adjust_cfa_offset(8) ++ cfi_rel_offset(lr, 4) ++ ++ add r3, sp, #8 @ load frame ++ bl CNAME(ffi_closure_inner_SYSV) ++ ++ @ Load values returned in registers. ++ add r2, sp, #8+64 @ load result ++ adr r3, CNAME(ffi_closure_ret) ++ add pc, r3, r0, lsl #3 ++ cfi_endproc ++ UNWIND(.fnend) ++ARM_FUNC_END(ffi_closure_SYSV) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ARM_FUNC_START(ffi_go_closure_VFP) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ldr r0, [ip, #4] @ load cif ++ ldr r1, [ip, #8] @ load fun ++ mov r2, ip @ load user_data ++ b 0f ++ cfi_endproc ++ARM_FUNC_END(ffi_go_closure_VFP) + ++ARM_FUNC_START(ffi_closure_VFP) ++ UNWIND(.fnstart) ++ cfi_startproc ++ stmdb sp!, {r0-r3} @ save argument regs ++ cfi_adjust_cfa_offset(16) ++ ++#if FFI_EXEC_TRAMPOLINE_TABLE ++ ldr ip, [ip] @ ip points to the config page, dereference to get the ffi_closure* ++#endif ++ ldr r0, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET] @ load cif ++ ldr r1, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+4] @ load fun ++ ldr r2, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+8] @ load user_data ++0: ++ add ip, sp, #16 ++ sub sp, sp, #64+32 @ allocate frame ++ cfi_adjust_cfa_offset(64+32) ++#ifdef __clang__ ++ vstm sp, {d0-d7} ++#else ++ stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7} ++#endif ++ stmdb sp!, {ip,lr} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* See above. */ ++ UNWIND(.save {sp,lr}) ++ cfi_adjust_cfa_offset(8) ++ cfi_rel_offset(lr, 4) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ add r3, sp, #8 @ load frame ++ bl CNAME(ffi_closure_inner_VFP) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ @ Load values returned in registers. ++ add r2, sp, #8+64 @ load result ++ adr r3, CNAME(ffi_closure_ret) ++ add pc, r3, r0, lsl #3 ++ cfi_endproc ++ UNWIND(.fnend) ++ARM_FUNC_END(ffi_closure_VFP) + ++/* Load values returned in registers for both closure entry points. ++ Note that we use LDM with SP in the register set. This is deprecated ++ by ARM, but not yet unpredictable. */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ARM_FUNC_START_LOCAL(ffi_closure_ret) ++ cfi_startproc ++ cfi_rel_offset(sp, 0) ++ cfi_rel_offset(lr, 4) ++0: ++E(ARM_TYPE_VFP_S) ++#ifdef __clang__ ++ vldr s0, [r2] ++#else ++ ldc p10, cr0, [r2] @ vldr s0, [r2] ++#endif ++ ldm sp, {sp,pc} ++E(ARM_TYPE_VFP_D) ++#ifdef __clang__ ++ vldr d0, [r2] ++#else ++ ldc p11, cr0, [r2] @ vldr d0, [r2] ++#endif ++ ldm sp, {sp,pc} ++E(ARM_TYPE_VFP_N) ++#ifdef __clang__ ++ vldm r2, {d0-d3} ++#else ++ ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3} ++#endif ++ ldm sp, {sp,pc} ++E(ARM_TYPE_INT64) ++ ldr r1, [r2, #4] ++ nop ++E(ARM_TYPE_INT) ++ ldr r0, [r2] ++ ldm sp, {sp,pc} ++E(ARM_TYPE_VOID) ++ ldm sp, {sp,pc} ++ nop ++E(ARM_TYPE_STRUCT) ++ ldm sp, {sp,pc} ++ cfi_endproc ++ARM_FUNC_END(ffi_closure_ret) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if FFI_EXEC_TRAMPOLINE_TABLE + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef __MACH__ ++#include + ++.align PAGE_MAX_SHIFT ++ARM_FUNC_START(ffi_closure_trampoline_table_page) ++.rept PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE ++ adr ip, #-PAGE_MAX_SIZE @ the config page is PAGE_MAX_SIZE behind the trampoline page ++ sub ip, #8 @ account for pc bias ++ ldr pc, [ip, #4] @ jump to ffi_closure_SYSV or ffi_closure_VFP ++.endr ++ARM_FUNC_END(ffi_closure_trampoline_table_page) ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#else + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ARM_FUNC_START(ffi_arm_trampoline) ++0: adr ip, 0b ++ ldr pc, 1f ++1: .long 0 ++ARM_FUNC_END(ffi_arm_trampoline) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ + ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S +--- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-12-20 18:50:24.000000000 +0800 +@@ -0,0 +1,5 @@ ++#ifdef __arm__ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c +--- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-12-20 22:04:37.000000000 +0800 +@@ -0,0 +1,925 @@ ++/* ----------------------------------------------------------------------- ++ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. ++ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc ++ Copyright (c) 2011 Plausible Labs Cooperative, Inc. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Code to allocate and deallocate memory for closures. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ 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: + ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ ++ 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. ++ ----------------------------------------------------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if defined __linux__ && !defined _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#include ++#include ++#include + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE ++# if __gnu_linux__ && !defined(__ANDROID__) ++/* This macro indicates it may be forbidden to map anonymous memory ++ with both write and execute permission. Code compiled when this ++ option is defined will attempt to map such pages once, but if it ++ fails, it falls back to creating a temporary file in a writable and ++ executable filesystem and mapping pages from it into separate ++ locations in the virtual memory space, one location writable and ++ another executable. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# define HAVE_MNTENT 1 ++# endif ++# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) ++/* Windows systems may have Data Execution Protection (DEP) enabled, ++ which requires the use of VirtualMalloc/VirtualFree to alloc/free ++ executable memory. */ ++# define FFI_MMAP_EXEC_WRIT 1 ++# endif ++#endif + ++#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX ++# ifdef __linux__ ++/* When defined to 1 check for SELinux and if SELinux is active, ++ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that ++ might cause audit messages. */ ++# define FFI_MMAP_EXEC_SELINUX 1 ++# endif ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if FFI_CLOSURES + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if FFI_EXEC_TRAMPOLINE_TABLE + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef __MACH__ + ++#include ++#include ++#include ++#include + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++extern void *ffi_closure_trampoline_table_page; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++typedef struct ffi_trampoline_table ffi_trampoline_table; ++typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++struct ffi_trampoline_table ++{ ++ /* contiguous writable and executable pages */ ++ vm_address_t config_page; ++ vm_address_t trampoline_page; + ++ /* free list tracking */ ++ uint16_t free_count; ++ ffi_trampoline_table_entry *free_list; ++ ffi_trampoline_table_entry *free_list_pool; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ ffi_trampoline_table *prev; ++ ffi_trampoline_table *next; ++}; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++struct ffi_trampoline_table_entry ++{ ++ void *(*trampoline) (); ++ ffi_trampoline_table_entry *next; ++}; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Total number of trampolines that fit in one trampoline table */ ++#define FFI_TRAMPOLINE_COUNT (PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE) + ++static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; ++static ffi_trampoline_table *ffi_trampoline_tables = NULL; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++static ffi_trampoline_table * ++ffi_trampoline_table_alloc () ++{ ++ ffi_trampoline_table *table = NULL; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Loop until we can allocate two contiguous pages */ ++ while (table == NULL) ++ { ++ vm_address_t config_page = 0x0; ++ kern_return_t kt; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Try to allocate two pages */ ++ kt = ++ vm_allocate (mach_task_self (), &config_page, PAGE_MAX_SIZE * 2, ++ VM_FLAGS_ANYWHERE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } + ++ /* Now drop the second half of the allocation to make room for the trampoline table */ ++ vm_address_t trampoline_page = config_page + PAGE_MAX_SIZE; ++ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_MAX_SIZE); ++ if (kt != KERN_SUCCESS) ++ { ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ break; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Remap the trampoline table to directly follow the config page */ ++ vm_prot_t cur_prot; ++ vm_prot_t max_prot; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ vm_address_t trampoline_page_template = (vm_address_t)&ffi_closure_trampoline_table_page; ++#ifdef __arm__ ++ /* ffi_closure_trampoline_table_page can be thumb-biased on some ARM archs */ ++ trampoline_page_template &= ~1UL; ++#endif + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ kt = ++ vm_remap (mach_task_self (), &trampoline_page, PAGE_MAX_SIZE, 0x0, FALSE, ++ mach_task_self (), trampoline_page_template, FALSE, ++ &cur_prot, &max_prot, VM_INHERIT_SHARE); + ++ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ ++ if (kt != KERN_SUCCESS) ++ { ++ /* Log unexpected failures */ ++ if (kt != KERN_NO_SPACE) ++ { ++ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); ++ continue; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* We have valid trampoline and config pages */ ++ table = calloc (1, sizeof (ffi_trampoline_table)); ++ table->free_count = FFI_TRAMPOLINE_COUNT; ++ table->config_page = config_page; ++ table->trampoline_page = trampoline_page; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Create and initialize the free list */ ++ table->free_list_pool = ++ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); + ++ uint16_t i; ++ for (i = 0; i < table->free_count; i++) ++ { ++ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; ++ entry->trampoline = ++ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (i < table->free_count - 1) ++ entry->next = &table->free_list_pool[i + 1]; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ table->free_list = table->free_list_pool; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return table; ++} + ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ /* Create the closure */ ++ ffi_closure *closure = malloc (size); ++ if (closure == NULL) ++ return NULL; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ pthread_mutex_lock (&ffi_trampoline_lock); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Check for an active trampoline table with available entries. */ ++ ffi_trampoline_table *table = ffi_trampoline_tables; ++ if (table == NULL || table->free_list == NULL) ++ { ++ table = ffi_trampoline_table_alloc (); ++ if (table == NULL) ++ { ++ free (closure); ++ return NULL; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Insert the new table at the top of the list */ ++ table->next = ffi_trampoline_tables; ++ if (table->next != NULL) ++ table->next->prev = table; + ++ ffi_trampoline_tables = table; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Claim the free entry */ ++ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; ++ ffi_trampoline_tables->free_list = entry->next; ++ ffi_trampoline_tables->free_count--; ++ entry->next = NULL; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ pthread_mutex_unlock (&ffi_trampoline_lock); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Initialize the return values */ ++ *code = entry->trampoline; ++ closure->trampoline_table = table; ++ closure->trampoline_table_entry = entry; + ++ return closure; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++void ++ffi_closure_free (void *ptr) ++{ ++ ffi_closure *closure = ptr; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ pthread_mutex_lock (&ffi_trampoline_lock); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Fetch the table and entry references */ ++ ffi_trampoline_table *table = closure->trampoline_table; ++ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; + ++ /* Return the entry to the free list */ ++ entry->next = table->free_list; ++ table->free_list = entry; ++ table->free_count++; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* If all trampolines within this table are free, and at least one other table exists, deallocate ++ * the table */ ++ if (table->free_count == FFI_TRAMPOLINE_COUNT ++ && ffi_trampoline_tables != table) ++ { ++ /* Remove from the list */ ++ if (table->prev != NULL) ++ table->prev->next = table->next; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (table->next != NULL) ++ table->next->prev = table->prev; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Deallocate pages */ ++ kern_return_t kt; ++ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); + ++ kt = ++ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); ++ if (kt != KERN_SUCCESS) ++ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, ++ __FILE__, __LINE__); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Deallocate free list */ ++ free (table->free_list_pool); ++ free (table); ++ } ++ else if (ffi_trampoline_tables != table) ++ { ++ /* Otherwise, bump this table to the top of the list */ ++ table->prev = NULL; ++ table->next = ffi_trampoline_tables; ++ if (ffi_trampoline_tables != NULL) ++ ffi_trampoline_tables->prev = table; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ ffi_trampoline_tables = table; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ pthread_mutex_unlock (&ffi_trampoline_lock); + ++ /* Free the closure */ ++ free (closure); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ + ++#define USE_LOCKS 1 ++#define USE_DL_PREFIX 1 ++#ifdef __GNUC__ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 1 ++#endif ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* We need to use mmap, not sbrk. */ ++#define HAVE_MORECORE 0 + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* We could, in theory, support mremap, but it wouldn't buy us anything. */ ++#define HAVE_MREMAP 0 + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* We have no use for this, so save some code and data. */ ++#define NO_MALLINFO 1 + ++/* We need all allocations to be in regular segments, otherwise we ++ lose track of the corresponding code address. */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Don't allocate more than a page unless needed. */ ++#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if FFI_CLOSURE_TEST ++/* Don't release single pages, to avoid a worst-case scenario of ++ continuously allocating and releasing single pages, but release ++ pairs of pages, which should do just as well given that allocations ++ are likely to be small. */ ++#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) ++#endif + ++#include ++#include ++#include ++#include ++#ifndef _MSC_VER ++#include ++#endif ++#include ++#include ++#if !defined(X86_WIN32) && !defined(X86_WIN64) ++#ifdef HAVE_MNTENT ++#include ++#endif /* HAVE_MNTENT */ ++#include ++#include + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* We don't want sys/mman.h to be included after we redefine mmap and ++ dlmunmap. */ ++#include ++#define LACKS_SYS_MMAN_H 1 + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if FFI_MMAP_EXEC_SELINUX ++#include ++#include + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++static int selinux_enabled = -1; + ++static int ++selinux_enabled_check (void) ++{ ++ struct statfs sfs; ++ FILE *f; ++ char *buf = NULL; ++ size_t len = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (statfs ("/selinux", &sfs) >= 0 ++ && (unsigned int) sfs.f_type == 0xf97cff8cU) ++ return 1; ++ f = fopen ("/proc/mounts", "r"); ++ if (f == NULL) ++ return 0; ++ while (getline (&buf, &len, f) >= 0) ++ { ++ char *p = strchr (buf, ' '); ++ if (p == NULL) ++ break; ++ p = strchr (p + 1, ' '); ++ if (p == NULL) ++ break; ++ if (strncmp (p + 1, "selinuxfs ", 10) == 0) ++ { ++ free (buf); ++ fclose (f); ++ return 1; ++ } ++ } ++ free (buf); ++ fclose (f); ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ ++ : (selinux_enabled = selinux_enabled_check ())) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#else + ++#define is_selinux_enabled() 0 + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#endif /* !FFI_MMAP_EXEC_SELINUX */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ ++#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#include + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++static int emutramp_enabled = -1; + ++static int ++emutramp_enabled_check (void) ++{ ++ char *buf = NULL; ++ size_t len = 0; ++ FILE *f; ++ int ret; ++ f = fopen ("/proc/self/status", "r"); ++ if (f == NULL) ++ return 0; ++ ret = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ while (getline (&buf, &len, f) != -1) ++ if (!strncmp (buf, "PaX:", 4)) ++ { ++ char emutramp; ++ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) ++ ret = (emutramp == 'E'); ++ break; ++ } ++ free (buf); ++ fclose (f); ++ return ret; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ ++ : (emutramp_enabled = emutramp_enabled_check ())) ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#elif defined (__CYGWIN__) || defined(__INTERIX) + ++#include + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Cygwin is Linux-like, but not quite that Linux-like. */ ++#define is_selinux_enabled() 0 + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX ++#define is_emutramp_enabled() 0 ++#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ + ++/* Declare all functions defined in dlmalloc.c as static. */ ++static void *dlmalloc(size_t); ++static void dlfree(void*); ++static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; ++static void *dlrealloc(void *, size_t) MAYBE_UNUSED; ++static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; ++static void *dlvalloc(size_t) MAYBE_UNUSED; ++static int dlmallopt(int, int) MAYBE_UNUSED; ++static size_t dlmalloc_footprint(void) MAYBE_UNUSED; ++static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; ++static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; ++static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; ++static void *dlpvalloc(size_t) MAYBE_UNUSED; ++static int dlmalloc_trim(size_t) MAYBE_UNUSED; ++static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; ++static void dlmalloc_stats(void) MAYBE_UNUSED; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++/* Use these for mmap and munmap within dlmalloc.c. */ ++static void *dlmmap(void *, size_t, int, int, int, off_t); ++static int dlmunmap(void *, size_t); ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define mmap dlmmap ++#define munmap dlmunmap + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#include "dlmalloc.c" + ++#undef mmap ++#undef munmap + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* A mutex used to synchronize access to *exec* variables in this file. */ ++static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* A file descriptor of a temporary file from which we'll map ++ executable pages. */ ++static int execfd = -1; + ++/* The amount of space already allocated from the temporary file. */ ++static size_t execsize = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Open a temporary file name, and immediately unlink it. */ ++static int ++open_temp_exec_file_name (char *name, int flags) ++{ ++ int fd; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#ifdef HAVE_MKOSTEMP ++ fd = mkostemp (name, flags); ++#else ++ fd = mkstemp (name); ++#endif + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (fd != -1) ++ unlink (name); + ++ return fd; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Open a temporary file in the named directory. */ ++static int ++open_temp_exec_file_dir (const char *dir) ++{ ++ static const char suffix[] = "/ffiXXXXXX"; ++ int lendir, flags; ++ char *tempname; ++#ifdef O_TMPFILE ++ int fd; ++#endif + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#ifdef O_CLOEXEC ++ flags = O_CLOEXEC; ++#else ++ flags = 0; ++#endif + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef O_TMPFILE ++ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); ++ /* If the running system does not support the O_TMPFILE flag then retry without it. */ ++ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { ++ return fd; ++ } else { ++ errno = 0; ++ } ++#endif + ++ lendir = strlen (dir); ++ tempname = __builtin_alloca (lendir + sizeof (suffix)); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (!tempname) ++ return -1; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ memcpy (tempname, dir, lendir); ++ memcpy (tempname + lendir, suffix, sizeof (suffix)); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return open_temp_exec_file_name (tempname, flags); ++} + ++/* Open a temporary file in the directory in the named environment ++ variable. */ ++static int ++open_temp_exec_file_env (const char *envvar) ++{ ++ const char *value = getenv (envvar); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (!value) ++ return -1; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ return open_temp_exec_file_dir (value); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef HAVE_MNTENT ++/* Open a temporary file in an executable and writable mount point ++ listed in the mounts file. Subsequent calls with the same mounts ++ keep searching for mount points in the same file. Providing NULL ++ as the mounts file closes the file. */ ++static int ++open_temp_exec_file_mnt (const char *mounts) ++{ ++ static const char *last_mounts; ++ static FILE *last_mntent; + ++ if (mounts != last_mounts) ++ { ++ if (last_mntent) ++ endmntent (last_mntent); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ last_mounts = mounts; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (mounts) ++ last_mntent = setmntent (mounts, "r"); ++ else ++ last_mntent = NULL; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (!last_mntent) ++ return -1; + ++ for (;;) ++ { ++ int fd; ++ struct mntent mnt; ++ char buf[MAXPATHLEN * 3]; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) ++ return -1; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (hasmntopt (&mnt, "ro") ++ || hasmntopt (&mnt, "noexec") ++ || access (mnt.mnt_dir, W_OK)) ++ continue; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ fd = open_temp_exec_file_dir (mnt.mnt_dir); + ++ if (fd != -1) ++ return fd; ++ } ++} ++#endif /* HAVE_MNTENT */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Instructions to look for a location to hold a temporary file that ++ can be mapped in for execution. */ ++static struct ++{ ++ int (*func)(const char *); ++ const char *arg; ++ int repeat; ++} open_temp_exec_file_opts[] = { ++ { open_temp_exec_file_env, "TMPDIR", 0 }, ++ { open_temp_exec_file_dir, "/tmp", 0 }, ++ { open_temp_exec_file_dir, "/var/tmp", 0 }, ++ { open_temp_exec_file_dir, "/dev/shm", 0 }, ++ { open_temp_exec_file_env, "HOME", 0 }, ++#ifdef HAVE_MNTENT ++ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, ++ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, ++#endif /* HAVE_MNTENT */ ++}; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Current index into open_temp_exec_file_opts. */ ++static int open_temp_exec_file_opts_idx = 0; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Reset a current multi-call func, then advances to the next entry. ++ If we're at the last, go back to the first and return nonzero, ++ otherwise return zero. */ ++static int ++open_temp_exec_file_opts_next (void) ++{ ++ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); + ++ open_temp_exec_file_opts_idx++; ++ if (open_temp_exec_file_opts_idx ++ == (sizeof (open_temp_exec_file_opts) ++ / sizeof (*open_temp_exec_file_opts))) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ return 1; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Return a file descriptor of a temporary zero-sized file in a ++ writable and executable filesystem. */ ++static int ++open_temp_exec_file (void) ++{ ++ int fd; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ do ++ { ++ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func ++ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); + ++ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat ++ || fd == -1) ++ { ++ if (open_temp_exec_file_opts_next ()) ++ break; ++ } ++ } ++ while (fd == -1); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ return fd; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Map in a chunk of memory from the temporary exec file into separate ++ locations in the virtual memory address space, one writable and one ++ executable. Returns the address of the writable portion, after ++ storing an offset to the corresponding executable portion at the ++ last word of the requested chunk. */ ++static void * ++dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) ++{ ++ void *ptr; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (execfd == -1) ++ { ++ open_temp_exec_file_opts_idx = 0; ++ retry_open: ++ execfd = open_temp_exec_file (); ++ if (execfd == -1) ++ return MFAIL; ++ } + ++ offset = execsize; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (ftruncate (execfd, offset + length)) ++ return MFAIL; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); ++ flags |= MAP_SHARED; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, ++ flags, execfd, offset); ++ if (ptr == MFAIL) ++ { ++ if (!offset) ++ { ++ close (execfd); ++ goto retry_open; ++ } ++ ftruncate (execfd, offset); ++ return MFAIL; ++ } ++ else if (!offset ++ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) ++ open_temp_exec_file_opts_next (); + ++ start = mmap (start, length, prot, flags, execfd, offset); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (start == MFAIL) ++ { ++ munmap (ptr, length); ++ ftruncate (execfd, offset); ++ return start; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ execsize += length; + ++ return start; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Map in a writable and executable chunk of memory if possible. ++ Failing that, fall back to dlmmap_locked. */ ++static void * ++dlmmap (void *start, size_t length, int prot, ++ int flags, int fd, off_t offset) ++{ ++ void *ptr; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ assert (start == NULL && length % malloc_getpagesize == 0 ++ && prot == (PROT_READ | PROT_WRITE) ++ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) ++ && fd == -1 && offset == 0); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if FFI_CLOSURE_TEST ++ printf ("mapping in %zi\n", length); ++#endif + ++ if (execfd == -1 && is_emutramp_enabled ()) ++ { ++ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); ++ return ptr; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (execfd == -1 && !is_selinux_enabled ()) ++ { ++ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) ++ /* Cool, no need to mess with separate segments. */ ++ return ptr; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* If MREMAP_DUP is ever introduced and implemented, try mmap ++ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with ++ MREMAP_DUP and prot at this point. */ ++ } + ++ if (execsize == 0 || execfd == -1) ++ { ++ pthread_mutex_lock (&open_temp_exec_file_mutex); ++ ptr = dlmmap_locked (start, length, prot, flags, offset); ++ pthread_mutex_unlock (&open_temp_exec_file_mutex); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ return ptr; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ return dlmmap_locked (start, length, prot, flags, offset); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Release memory at the given address, as well as the corresponding ++ executable page if it's separate. */ ++static int ++dlmunmap (void *start, size_t length) ++{ ++ /* We don't bother decreasing execsize or truncating the file, since ++ we can't quite tell whether we're unmapping the end of the file. ++ We don't expect frequent deallocation anyway. If we did, we ++ could locate pages in the file by writing to the pages being ++ deallocated and checking that the file contents change. ++ Yuck. */ ++ msegmentptr seg = segment_holding (gm, start); ++ void *code; + ++#if FFI_CLOSURE_TEST ++ printf ("unmapping %zi\n", length); ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (seg && (code = add_segment_exec_offset (start, seg)) != start) ++ { ++ int ret = munmap (code, length); ++ if (ret) ++ return ret; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ return munmap (start, length); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if FFI_CLOSURE_FREE_CODE ++/* Return segment holding given code address. */ ++static msegmentptr ++segment_holding_code (mstate m, char* addr) ++{ ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= add_segment_exec_offset (sp->base, sp) ++ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} ++#endif + ++#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Allocate a chunk of memory with the given size. Returns a pointer ++ to the writable address, and sets *CODE to the executable ++ corresponding virtual address. */ ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ void *ptr; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (!code) ++ return NULL; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ ptr = dlmalloc (size); + ++ if (ptr) ++ { ++ msegmentptr seg = segment_holding (gm, ptr); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ *code = add_segment_exec_offset (ptr, seg); ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ return ptr; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Release a chunk of memory allocated with ffi_closure_alloc. If ++ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the ++ writable or the executable address given. Otherwise, only the ++ writable address can be provided here. */ ++void ++ffi_closure_free (void *ptr) ++{ ++#if FFI_CLOSURE_FREE_CODE ++ msegmentptr seg = segment_holding_code (gm, ptr); + ++ if (seg) ++ ptr = sub_segment_exec_offset (ptr, seg); ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ dlfree (ptr); ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if FFI_CLOSURE_TEST ++/* Do some internal sanity testing to make sure allocation and ++ deallocation of pages are working as intended. */ ++int main () ++{ ++ void *p[3]; ++#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) ++#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) ++ GET (0, malloc_getpagesize / 2); ++ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); ++ PUT (1); ++ GET (1, 2 * malloc_getpagesize); ++ GET (2, malloc_getpagesize / 2); ++ PUT (1); ++ PUT (0); ++ PUT (2); ++ return 0; ++} ++#endif /* FFI_CLOSURE_TEST */ ++# else /* ! FFI_MMAP_EXEC_WRIT */ + ++/* On many systems, memory returned by malloc is writable and ++ executable, so just use it. */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#include + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void * ++ffi_closure_alloc (size_t size, void **code) ++{ ++ if (!code) ++ return NULL; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return *code = malloc (size); ++} + ++void ++ffi_closure_free (void *ptr) ++{ ++ free (ptr); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++# endif /* ! FFI_MMAP_EXEC_WRIT */ ++#endif /* FFI_CLOSURES */ +diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c +--- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-12-20 22:33:34.000000000 +0800 +@@ -0,0 +1,64 @@ ++/* ----------------------------------------------------------------------- ++ debug.c - Copyright (c) 1996 Red Hat, Inc. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ 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: + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + ++ 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. ++ ----------------------------------------------------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#include ++#include ++#include ++#include + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* General debugging routines */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void ffi_stop_here(void) ++{ ++ /* This function is only useful for debugging purposes. ++ Place a breakpoint on ffi_stop_here to be notified of ++ significant events. */ ++} + ++/* This function should only be called via the FFI_ASSERT() macro */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++void ffi_assert(char *expr, char *file, int line) ++{ ++ fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); ++ ffi_stop_here(); ++ abort(); ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Perform a sanity check on an ffi_type structure */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void ffi_type_test(ffi_type *a, char *file, int line) ++{ ++ FFI_ASSERT_AT(a != NULL, file, line); ++ ++ FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); ++ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); ++ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); ++ FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX) ++ || a->elements != NULL, file, line); ++ FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX ++ || (a->elements != NULL ++ && a->elements[0] != NULL && a->elements[1] == NULL), ++ file, line); + ++} +diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c +--- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-12-20 18:49:03.000000000 +0800 +@@ -0,0 +1,5161 @@ ++/* ++ This is a version (aka dlmalloc) of malloc/free/realloc written by ++ Doug Lea and released to the public domain, as explained at ++ http://creativecommons.org/licenses/publicdomain. Send questions, ++ comments, complaints, performance data, etc to dl@cs.oswego.edu + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Note: There may be an updated version of this malloc obtainable at ++ ftp://gee.cs.oswego.edu/pub/misc/malloc.c ++ Check before installing! + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++* Quickstart + ++ This library is all in one file to simplify the most common usage: ++ ftp it, compile it (-O3), and link it into another program. All of ++ the compile-time options default to reasonable values for use on ++ most platforms. You might later want to step through various ++ compile-time and dynamic tuning options. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ For convenience, an include file for code using this malloc is at: ++ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h ++ You don't really need this .h file unless you call functions not ++ defined in your system include files. The .h file contains only the ++ excerpts from this file needed for using this malloc on ANSI C/C++ ++ systems, so long as you haven't changed compile-time options about ++ naming and tuning parameters. If you do, then you can create your ++ own malloc.h that does include all settings by cutting at the point ++ indicated below. Note that you may already by default be using a C ++ library containing a malloc that is based on some version of this ++ malloc (for example in linux). You might still want to use the one ++ in this file to customize settings or to avoid overheads associated ++ with library versions. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++* Vital statistics: + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Supported pointer/size_t representation: 4 or 8 bytes ++ size_t MUST be an unsigned type of the same width as ++ pointers. (If you are using an ancient system that declares ++ size_t as a signed type, or need it to be a different width ++ than pointers, you can use a previous release of this malloc ++ (e.g. 2.7.2) supporting these.) + ++ Alignment: 8 bytes (default) ++ This suffices for nearly all current machines and C compilers. ++ However, you can define MALLOC_ALIGNMENT to be wider than this ++ if necessary (up to 128bytes), at the expense of using more space. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) ++ 8 or 16 bytes (if 8byte sizes) ++ Each malloced chunk has a hidden word of overhead holding size ++ and status information, and additional cross-check word ++ if FOOTERS is defined. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) ++ 8-byte ptrs: 32 bytes (including overhead) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Even a request for zero bytes (i.e., malloc(0)) returns a ++ pointer to something of the minimum allocatable size. ++ The maximum overhead wastage (i.e., number of extra bytes ++ allocated than were requested in malloc) is less than or equal ++ to the minimum size, except for requests >= mmap_threshold that ++ are serviced via mmap(), where the worst case wastage is about ++ 32 bytes plus the remainder from a system page (the minimal ++ mmap unit); typically 4096 or 8192 bytes. + ++ Security: static-safe; optionally more or less ++ The "security" of malloc refers to the ability of malicious ++ code to accentuate the effects of errors (for example, freeing ++ space that is not currently malloc'ed or overwriting past the ++ ends of chunks) in code that calls malloc. This malloc ++ guarantees not to modify any memory locations below the base of ++ heap, i.e., static variables, even in the presence of usage ++ errors. The routines additionally detect most improper frees ++ and reallocs. All this holds as long as the static bookkeeping ++ for malloc itself is not corrupted by some other means. This ++ is only one aspect of security -- these checks do not, and ++ cannot, detect all possible programming errors. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ If FOOTERS is defined nonzero, then each allocated chunk ++ carries an additional check word to verify that it was malloced ++ from its space. These check words are the same within each ++ execution of a program using malloc, but differ across ++ executions, so externally crafted fake chunks cannot be ++ freed. This improves security by rejecting frees/reallocs that ++ could corrupt heap memory, in addition to the checks preventing ++ writes to statics that are always on. This may further improve ++ security at the expense of time and space overhead. (Note that ++ FOOTERS may also be worth using with MSPACES.) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ By default detected errors cause the program to abort (calling ++ "abort()"). You can override this to instead proceed past ++ errors by defining PROCEED_ON_ERROR. In this case, a bad free ++ has no effect, and a malloc that encounters a bad address ++ caused by user overwrites will ignore the bad address by ++ dropping pointers and indices to all known memory. This may ++ be appropriate for programs that should continue if at all ++ possible in the face of programming errors, although they may ++ run out of memory because dropped memory is never reclaimed. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ If you don't like either of these options, you can define ++ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything ++ else. And if if you are sure that your program using malloc has ++ no errors or vulnerabilities, you can define INSECURE to 1, ++ which might (or might not) provide a small performance improvement. + ++ Thread-safety: NOT thread-safe unless USE_LOCKS defined ++ When USE_LOCKS is defined, each public call to malloc, free, ++ etc is surrounded with either a pthread mutex or a win32 ++ spinlock (depending on WIN32). This is not especially fast, and ++ can be a major bottleneck. It is designed only to provide ++ minimal protection in concurrent environments, and to provide a ++ basis for extensions. If you are using malloc in a concurrent ++ program, consider instead using ptmalloc, which is derived from ++ a version of this malloc. (See http://www.malloc.de). + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP ++ This malloc can use unix sbrk or any emulation (invoked using ++ the CALL_MORECORE macro) and/or mmap/munmap or any emulation ++ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system ++ memory. On most unix systems, it tends to work best if both ++ MORECORE and MMAP are enabled. On Win32, it uses emulations ++ based on VirtualAlloc. It also uses common C library functions ++ like memset. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Compliance: I believe it is compliant with the Single Unix Specification ++ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably ++ others as well. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++* Overview of algorithms + ++ This is not the fastest, most space-conserving, most portable, or ++ most tunable malloc ever written. However it is among the fastest ++ while also being among the most space-conserving, portable and ++ tunable. Consistent balance across these factors results in a good ++ general-purpose allocator for malloc-intensive programs. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ In most ways, this malloc is a best-fit allocator. Generally, it ++ chooses the best-fitting existing chunk for a request, with ties ++ broken in approximately least-recently-used order. (This strategy ++ normally maintains low fragmentation.) However, for requests less ++ than 256bytes, it deviates from best-fit when there is not an ++ exactly fitting available chunk by preferring to use space adjacent ++ to that used for the previous small request, as well as by breaking ++ ties in approximately most-recently-used order. (These enhance ++ locality of series of small allocations.) And for very large requests ++ (>= 256Kb by default), it relies on system memory mapping ++ facilities, if supported. (This helps avoid carrying around and ++ possibly fragmenting memory used only for large chunks.) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ All operations (except malloc_stats and mallinfo) have execution ++ times that are bounded by a constant factor of the number of bits in ++ a size_t, not counting any clearing in calloc or copying in realloc, ++ or actions surrounding MORECORE and MMAP that have times ++ proportional to the number of non-contiguous regions returned by ++ system allocation routines, which is often just 1. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The implementation is not very modular and seriously overuses ++ macros. Perhaps someday all C compilers will do as good a job ++ inlining modular code as can now be done by brute-force expansion, ++ but now, enough of them seem not to. + ++ Some compilers issue a lot of warnings about code that is ++ dead/unreachable only on some platforms, and also about intentional ++ uses of negation on unsigned types. All known cases of each can be ++ ignored. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ For a longer but out of date high-level description, see ++ http://gee.cs.oswego.edu/dl/html/malloc.html + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++* MSPACES ++ If MSPACES is defined, then in addition to malloc, free, etc., ++ this file also defines mspace_malloc, mspace_free, etc. These ++ are versions of malloc routines that take an "mspace" argument ++ obtained using create_mspace, to control all internal bookkeeping. ++ If ONLY_MSPACES is defined, only these versions are compiled. ++ So if you would like to use this allocator for only some allocations, ++ and your system malloc for others, you can compile with ++ ONLY_MSPACES and then do something like... ++ static mspace mymspace = create_mspace(0,0); // for example ++ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ (Note: If you only need one instance of an mspace, you can instead ++ use "USE_DL_PREFIX" to relabel the global malloc.) + ++ You can similarly create thread-local allocators by storing ++ mspaces as thread-locals. For example: ++ static __thread mspace tlms = 0; ++ void* tlmalloc(size_t bytes) { ++ if (tlms == 0) tlms = create_mspace(0, 0); ++ return mspace_malloc(tlms, bytes); ++ } ++ void tlfree(void* mem) { mspace_free(tlms, mem); } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Unless FOOTERS is defined, each mspace is completely independent. ++ You cannot allocate from one and free to another (although ++ conformance is only weakly checked, so usage errors are not always ++ caught). If FOOTERS is defined, then each chunk carries around a tag ++ indicating its originating mspace, and frees are directed to their ++ originating spaces. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ ------------------------- Compile-time options --------------------------- + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++Be careful in setting #define values for numerical constants of type ++size_t. On some systems, literal values are not automatically extended ++to size_t precision unless they are explicitly casted. + ++WIN32 default: defined if _WIN32 defined ++ Defining WIN32 sets up defaults for MS environment and compilers. ++ Otherwise defaults are for unix. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++MALLOC_ALIGNMENT default: (size_t)8 ++ Controls the minimum alignment for malloc'ed chunks. It must be a ++ power of two and at least 8, even on machines for which smaller ++ alignments would suffice. It may be defined as larger than this ++ though. Note however that code and data structures are optimized for ++ the case of 8-byte alignment. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++MSPACES default: 0 (false) ++ If true, compile in support for independent allocation spaces. ++ This is only supported if HAVE_MMAP is true. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ONLY_MSPACES default: 0 (false) ++ If true, only compile in mspace versions, not regular versions. + ++USE_LOCKS default: 0 (false) ++ Causes each call to each public routine to be surrounded with ++ pthread or WIN32 mutex lock/unlock. (If set true, this can be ++ overridden on a per-mspace basis for mspace versions.) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++FOOTERS default: 0 ++ If true, provide extra checking and dispatching by placing ++ information in the footers of allocated chunks. This adds ++ space and time overhead. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++INSECURE default: 0 ++ If true, omit checks for usage errors and heap space overwrites. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++USE_DL_PREFIX default: NOT defined ++ Causes compiler to prefix all public routines with the string 'dl'. ++ This can be useful when you only want to use this malloc in one part ++ of a program, using your regular system malloc elsewhere. + ++ABORT default: defined as abort() ++ Defines how to abort on failed checks. On most systems, a failed ++ check cannot die with an "assert" or even print an informative ++ message, because the underlying print routines in turn call malloc, ++ which will fail again. Generally, the best policy is to simply call ++ abort(). It's not very useful to do more than this because many ++ errors due to overwriting will show up as address faults (null, odd ++ addresses etc) rather than malloc-triggered checks, so will also ++ abort. Also, most compilers know that abort() does not return, so ++ can better optimize code conditionally calling it. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++PROCEED_ON_ERROR default: defined as 0 (false) ++ Controls whether detected bad addresses cause them to bypassed ++ rather than aborting. If set, detected bad arguments to free and ++ realloc are ignored. And all bookkeeping information is zeroed out ++ upon a detected overwrite of freed heap space, thus losing the ++ ability to ever return it from malloc again, but enabling the ++ application to proceed. If PROCEED_ON_ERROR is defined, the ++ static variable malloc_corruption_error_count is compiled in ++ and can be examined to see if errors have occurred. This option ++ generates slower code than the default abort policy. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++DEBUG default: NOT defined ++ The DEBUG setting is mainly intended for people trying to modify ++ this code or diagnose problems when porting to new platforms. ++ However, it may also be able to better isolate user errors than just ++ using runtime checks. The assertions in the check routines spell ++ out in more detail the assumptions and invariants underlying the ++ algorithms. The checking is fairly extensive, and will slow down ++ execution noticeably. Calling malloc_stats or mallinfo with DEBUG ++ set will attempt to check every non-mmapped allocated and free chunk ++ in the course of computing the summaries. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) ++ Debugging assertion failures can be nearly impossible if your ++ version of the assert macro causes malloc to be called, which will ++ lead to a cascade of further failures, blowing the runtime stack. ++ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), ++ which will usually make debugging easier. + ++MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 ++ The action to take before "return 0" when malloc fails to be able to ++ return memory because there is none available. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES ++ True if this system supports sbrk or an emulation of it. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++MORECORE default: sbrk ++ The name of the sbrk-style system routine to call to obtain more ++ memory. See below for guidance on writing custom MORECORE ++ functions. The type of the argument to sbrk/MORECORE varies across ++ systems. It cannot be size_t, because it supports negative ++ arguments, so it is normally the signed type of the same width as ++ size_t (sometimes declared as "intptr_t"). It doesn't much matter ++ though. Internally, we only call it with arguments less than half ++ the max value of a size_t, which should work across all reasonable ++ possibilities, although sometimes generating compiler warnings. See ++ near the end of this file for guidelines for creating a custom ++ version of MORECORE. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++MORECORE_CONTIGUOUS default: 1 (true) ++ If true, take advantage of fact that consecutive calls to MORECORE ++ with positive arguments always return contiguous increasing ++ addresses. This is true of unix sbrk. It does not hurt too much to ++ set it true anyway, since malloc copes with non-contiguities. ++ Setting it false when definitely non-contiguous saves time ++ and possibly wasted space it would take to discover this though. + ++MORECORE_CANNOT_TRIM default: NOT defined ++ True if MORECORE cannot release space back to the system when given ++ negative arguments. This is generally necessary only if you are ++ using a hand-crafted MORECORE function that cannot handle negative ++ arguments. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++HAVE_MMAP default: 1 (true) ++ True if this system supports mmap or an emulation of it. If so, and ++ HAVE_MORECORE is not true, MMAP is used for all system ++ allocation. If set and HAVE_MORECORE is true as well, MMAP is ++ primarily used to directly allocate very large blocks. It is also ++ used as a backup strategy in cases where MORECORE fails to provide ++ space from system. Note: A single call to MUNMAP is assumed to be ++ able to unmap memory that may have be allocated using multiple calls ++ to MMAP, so long as they are adjacent. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++HAVE_MREMAP default: 1 on linux, else 0 ++ If true realloc() uses mremap() to re-allocate large blocks and ++ extend or shrink allocation spaces. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++MMAP_CLEARS default: 1 on unix ++ True if mmap clears memory so calloc doesn't need to. This is true ++ for standard unix mmap using /dev/zero. + ++USE_BUILTIN_FFS default: 0 (i.e., not used) ++ Causes malloc to use the builtin ffs() function to compute indices. ++ Some compilers may recognize and intrinsify ffs to be faster than the ++ supplied C version. Also, the case of x86 using gcc is special-cased ++ to an asm instruction, so is already as fast as it can be, and so ++ this setting has no effect. (On most x86s, the asm version is only ++ slightly faster than the C version.) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++malloc_getpagesize default: derive from system includes, or 4096. ++ The system page size. To the extent possible, this malloc manages ++ memory from the system in page-size units. This may be (and ++ usually is) a function rather than a constant. This is ignored ++ if WIN32, where page size is determined using getSystemInfo during ++ initialization. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++USE_DEV_RANDOM default: 0 (i.e., not used) ++ Causes malloc to use /dev/random to initialize secure magic seed for ++ stamping footers. Otherwise, the current time is used. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++NO_MALLINFO default: 0 ++ If defined, don't compile "mallinfo". This can be a simple way ++ of dealing with mismatches between system declarations and ++ those in this file. + ++MALLINFO_FIELD_TYPE default: size_t ++ The type of the fields in the mallinfo struct. This was originally ++ defined as "int" in SVID etc, but is more usefully defined as ++ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++REALLOC_ZERO_BYTES_FREES default: not defined ++ This should be set if a call to realloc with zero bytes should ++ be the same as a call to free. Some people think it should. Otherwise, ++ since this malloc returns a unique pointer for malloc(0), so does ++ realloc(p, 0). + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H ++LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H ++LACKS_STDLIB_H default: NOT defined unless on WIN32 ++ Define these if your system does not have these header files. ++ You might need to manually insert some of the declarations they provide. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, ++ system_info.dwAllocationGranularity in WIN32, ++ otherwise 64K. ++ Also settable using mallopt(M_GRANULARITY, x) ++ The unit for allocating and deallocating memory from the system. On ++ most systems with contiguous MORECORE, there is no reason to ++ make this more than a page. However, systems with MMAP tend to ++ either require or encourage larger granularities. You can increase ++ this value to prevent system allocation functions to be called so ++ often, especially if they are slow. The value must be at least one ++ page and must be a power of two. Setting to 0 causes initialization ++ to either page size or win32 region size. (Note: In previous ++ versions of malloc, the equivalent of this option was called ++ "TOP_PAD") + ++DEFAULT_TRIM_THRESHOLD default: 2MB ++ Also settable using mallopt(M_TRIM_THRESHOLD, x) ++ The maximum amount of unused top-most memory to keep before ++ releasing via malloc_trim in free(). Automatic trimming is mainly ++ useful in long-lived programs using contiguous MORECORE. Because ++ trimming via sbrk can be slow on some systems, and can sometimes be ++ wasteful (in cases where programs immediately afterward allocate ++ more large chunks) the value should be high enough so that your ++ overall system performance would improve by releasing this much ++ memory. As a rough guide, you might set to a value close to the ++ average size of a process (program) running on your system. ++ Releasing this much memory would allow such a process to run in ++ memory. Generally, it is worth tuning trim thresholds when a ++ program undergoes phases where several large chunks are allocated ++ and released in ways that can reuse each other's storage, perhaps ++ mixed with phases where there are no such chunks at all. The trim ++ value must be greater than page size to have any useful effect. To ++ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick ++ some people use of mallocing a huge space and then freeing it at ++ program startup, in an attempt to reserve system memory, doesn't ++ have the intended effect under automatic trimming, since that memory ++ will immediately be returned to the system. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++DEFAULT_MMAP_THRESHOLD default: 256K ++ Also settable using mallopt(M_MMAP_THRESHOLD, x) ++ The request size threshold for using MMAP to directly service a ++ request. Requests of at least this size that cannot be allocated ++ using already-existing space will be serviced via mmap. (If enough ++ normal freed space already exists it is used instead.) Using mmap ++ segregates relatively large chunks of memory so that they can be ++ individually obtained and released from the host system. A request ++ serviced through mmap is never reused by any other request (at least ++ not directly; the system may just so happen to remap successive ++ requests to the same locations). Segregating space in this way has ++ the benefits that: Mmapped space can always be individually released ++ back to the system, which helps keep the system level memory demands ++ of a long-lived program low. Also, mapped memory doesn't become ++ `locked' between other chunks, as can happen with normally allocated ++ chunks, which means that even trimming via malloc_trim would not ++ release them. However, it has the disadvantage that the space ++ cannot be reclaimed, consolidated, and then used to service later ++ requests, as happens with normal chunks. The advantages of mmap ++ nearly always outweigh disadvantages for "large" chunks, but the ++ value of "large" may vary across systems. The default is an ++ empirically derived value that works well in most systems. You can ++ disable mmap by setting to MAX_SIZE_T. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++*/ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifndef WIN32 ++#ifdef _WIN32 ++#define WIN32 1 ++#endif /* _WIN32 */ ++#endif /* WIN32 */ ++#ifdef WIN32 ++#define WIN32_LEAN_AND_MEAN ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_UNISTD_H ++#define LACKS_SYS_PARAM_H ++#define LACKS_SYS_MMAN_H ++#define LACKS_STRING_H ++#define LACKS_STRINGS_H ++#define LACKS_SYS_TYPES_H ++#define LACKS_ERRNO_H ++#define MALLOC_FAILURE_ACTION ++#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ ++#endif /* WIN32 */ + ++#ifdef __OS2__ ++#define INCL_DOS ++#include ++#define HAVE_MMAP 1 ++#define HAVE_MORECORE 0 ++#define LACKS_SYS_MMAN_H ++#endif /* __OS2__ */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if defined(DARWIN) || defined(_DARWIN) ++/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ ++#ifndef HAVE_MORECORE ++#define HAVE_MORECORE 0 ++#define HAVE_MMAP 1 ++#endif /* HAVE_MORECORE */ ++#endif /* DARWIN */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#ifndef LACKS_SYS_TYPES_H ++#include /* For size_t */ ++#endif /* LACKS_SYS_TYPES_H */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* The maximum possible size_t value has all bits set */ ++#define MAX_SIZE_T (~(size_t)0) + ++#ifndef ONLY_MSPACES ++#define ONLY_MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#ifndef MSPACES ++#if ONLY_MSPACES ++#define MSPACES 1 ++#else /* ONLY_MSPACES */ ++#define MSPACES 0 ++#endif /* ONLY_MSPACES */ ++#endif /* MSPACES */ ++#ifndef MALLOC_ALIGNMENT ++#define MALLOC_ALIGNMENT ((size_t)8U) ++#endif /* MALLOC_ALIGNMENT */ ++#ifndef FOOTERS ++#define FOOTERS 0 ++#endif /* FOOTERS */ ++#ifndef ABORT ++#define ABORT abort() ++#endif /* ABORT */ ++#ifndef ABORT_ON_ASSERT_FAILURE ++#define ABORT_ON_ASSERT_FAILURE 1 ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#ifndef PROCEED_ON_ERROR ++#define PROCEED_ON_ERROR 0 ++#endif /* PROCEED_ON_ERROR */ ++#ifndef USE_LOCKS ++#define USE_LOCKS 0 ++#endif /* USE_LOCKS */ ++#ifndef INSECURE ++#define INSECURE 0 ++#endif /* INSECURE */ ++#ifndef HAVE_MMAP ++#define HAVE_MMAP 1 ++#endif /* HAVE_MMAP */ ++#ifndef MMAP_CLEARS ++#define MMAP_CLEARS 1 ++#endif /* MMAP_CLEARS */ ++#ifndef HAVE_MREMAP ++#ifdef linux ++#define HAVE_MREMAP 1 ++#else /* linux */ ++#define HAVE_MREMAP 0 ++#endif /* linux */ ++#endif /* HAVE_MREMAP */ ++#ifndef MALLOC_FAILURE_ACTION ++#define MALLOC_FAILURE_ACTION errno = ENOMEM; ++#endif /* MALLOC_FAILURE_ACTION */ ++#ifndef HAVE_MORECORE ++#if ONLY_MSPACES ++#define HAVE_MORECORE 0 ++#else /* ONLY_MSPACES */ ++#define HAVE_MORECORE 1 ++#endif /* ONLY_MSPACES */ ++#endif /* HAVE_MORECORE */ ++#if !HAVE_MORECORE ++#define MORECORE_CONTIGUOUS 0 ++#else /* !HAVE_MORECORE */ ++#ifndef MORECORE ++#define MORECORE sbrk ++#endif /* MORECORE */ ++#ifndef MORECORE_CONTIGUOUS ++#define MORECORE_CONTIGUOUS 1 ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* HAVE_MORECORE */ ++#ifndef DEFAULT_GRANULARITY ++#if MORECORE_CONTIGUOUS ++#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ ++#else /* MORECORE_CONTIGUOUS */ ++#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) ++#endif /* MORECORE_CONTIGUOUS */ ++#endif /* DEFAULT_GRANULARITY */ ++#ifndef DEFAULT_TRIM_THRESHOLD ++#ifndef MORECORE_CANNOT_TRIM ++#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) ++#else /* MORECORE_CANNOT_TRIM */ ++#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T ++#endif /* MORECORE_CANNOT_TRIM */ ++#endif /* DEFAULT_TRIM_THRESHOLD */ ++#ifndef DEFAULT_MMAP_THRESHOLD ++#if HAVE_MMAP ++#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) ++#else /* HAVE_MMAP */ ++#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T ++#endif /* HAVE_MMAP */ ++#endif /* DEFAULT_MMAP_THRESHOLD */ ++#ifndef USE_BUILTIN_FFS ++#define USE_BUILTIN_FFS 0 ++#endif /* USE_BUILTIN_FFS */ ++#ifndef USE_DEV_RANDOM ++#define USE_DEV_RANDOM 0 ++#endif /* USE_DEV_RANDOM */ ++#ifndef NO_MALLINFO ++#define NO_MALLINFO 0 ++#endif /* NO_MALLINFO */ ++#ifndef MALLINFO_FIELD_TYPE ++#define MALLINFO_FIELD_TYPE size_t ++#endif /* MALLINFO_FIELD_TYPE */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mallopt tuning options. SVID/XPG defines four standard parameter ++ numbers for mallopt, normally defined in malloc.h. None of these ++ are used in this malloc, so setting them has no effect. But this ++ malloc does support the following options. ++*/ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define M_TRIM_THRESHOLD (-1) ++#define M_GRANULARITY (-2) ++#define M_MMAP_THRESHOLD (-3) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ------------------------ Mallinfo declarations ------------------------ */ + ++#if !NO_MALLINFO ++/* ++ This version of malloc supports the standard SVID/XPG mallinfo ++ routine that returns a struct containing usage properties and ++ statistics. It should work on any system that has a ++ /usr/include/malloc.h defining struct mallinfo. The main ++ declaration needed is the mallinfo struct that is returned (by-copy) ++ by mallinfo(). The malloinfo struct contains a bunch of fields that ++ are not even meaningful in this version of malloc. These fields are ++ are instead filled by mallinfo() with other numbers that might be of ++ interest. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a ++ /usr/include/malloc.h file that includes a declaration of struct ++ mallinfo. If so, it is included; else a compliant version is ++ declared below. These must be precisely the same for mallinfo() to ++ work. The original SVID version of this struct, defined on most ++ systems with mallinfo, declares all fields as ints. But some others ++ define as unsigned long. If your system defines the fields using a ++ type of different width than listed here, you MUST #include your ++ system version and #define HAVE_USR_INCLUDE_MALLOC_H. ++*/ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* #define HAVE_USR_INCLUDE_MALLOC_H */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef HAVE_USR_INCLUDE_MALLOC_H ++#include "/usr/include/malloc.h" ++#else /* HAVE_USR_INCLUDE_MALLOC_H */ + ++/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ ++#define _STRUCT_MALLINFO + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++struct mallinfo { ++ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ ++ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ ++ MALLINFO_FIELD_TYPE smblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ ++ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ ++ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ ++ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ ++ MALLINFO_FIELD_TYPE fordblks; /* total free space */ ++ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ ++}; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif /* HAVE_USR_INCLUDE_MALLOC_H */ ++#endif /* NO_MALLINFO */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ + ++#if !ONLY_MSPACES + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ------------------- Declarations of public routines ------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#ifndef USE_DL_PREFIX ++#define dlcalloc calloc ++#define dlfree free ++#define dlmalloc malloc ++#define dlmemalign memalign ++#define dlrealloc realloc ++#define dlvalloc valloc ++#define dlpvalloc pvalloc ++#define dlmallinfo mallinfo ++#define dlmallopt mallopt ++#define dlmalloc_trim malloc_trim ++#define dlmalloc_stats malloc_stats ++#define dlmalloc_usable_size malloc_usable_size ++#define dlmalloc_footprint malloc_footprint ++#define dlmalloc_max_footprint malloc_max_footprint ++#define dlindependent_calloc independent_calloc ++#define dlindependent_comalloc independent_comalloc ++#endif /* USE_DL_PREFIX */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++/* ++ malloc(size_t n) ++ Returns a pointer to a newly allocated chunk of at least n bytes, or ++ null if no space is available, in which case errno is set to ENOMEM ++ on ANSI C systems. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ If n is zero, malloc returns a minimum-sized chunk. (The minimum ++ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit ++ systems.) Note that size_t is an unsigned type, so calls with ++ arguments that would be negative if signed are interpreted as ++ requests for huge amounts of space, which will often fail. The ++ maximum supported value of n differs across systems, but is in all ++ cases less than the maximum representable value of a size_t. ++*/ ++void* dlmalloc(size_t); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ free(void* p) ++ Releases the chunk of memory pointed to by p, that had been previously ++ allocated using malloc or a related routine such as realloc. ++ It has no effect if p is null. If p was not malloced or already ++ freed, free(p) will by default cause the current program to abort. ++*/ ++void dlfree(void*); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ calloc(size_t n_elements, size_t element_size); ++ Returns a pointer to n_elements * element_size bytes, with all locations ++ set to zero. ++*/ ++void* dlcalloc(size_t, size_t); + ++/* ++ realloc(void* p, size_t n) ++ Returns a pointer to a chunk of size n that contains the same data ++ as does chunk p up to the minimum of (n, p's size) bytes, or null ++ if no space is available. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The returned pointer may or may not be the same as p. The algorithm ++ prefers extending p in most cases when possible, otherwise it ++ employs the equivalent of a malloc-copy-free sequence. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ If p is null, realloc is equivalent to malloc. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ If space is not available, realloc returns null, errno is set (if on ++ ANSI) and p is NOT freed. + ++ if n is for fewer bytes than already held by p, the newly unused ++ space is lopped off and freed if possible. realloc with a size ++ argument of zero (re)allocates a minimum-sized chunk. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The old unix realloc convention of allowing the last-free'd chunk ++ to be used as an argument to realloc is not supported. ++*/ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void* dlrealloc(void*, size_t); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ memalign(size_t alignment, size_t n); ++ Returns a pointer to a newly allocated chunk of n bytes, aligned ++ in accord with the alignment argument. + ++ The alignment argument should be a power of two. If the argument is ++ not a power of two, the nearest greater power is used. ++ 8-byte alignment is guaranteed by normal malloc calls, so don't ++ bother calling memalign with an argument of 8 or less. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Overreliance on memalign is a sure way to fragment space. ++*/ ++void* dlmemalign(size_t, size_t); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ valloc(size_t n); ++ Equivalent to memalign(pagesize, n), where pagesize is the page ++ size of the system. If the pagesize is unknown, 4096 is used. ++*/ ++void* dlvalloc(size_t); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ mallopt(int parameter_number, int parameter_value) ++ Sets tunable parameters The format is to provide a ++ (parameter-number, parameter-value) pair. mallopt then sets the ++ corresponding parameter to the argument value if it can (i.e., so ++ long as the value is meaningful), and returns 1 if successful else ++ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, ++ normally defined in malloc.h. None of these are use in this malloc, ++ so setting them has no effect. But this malloc also supports other ++ options in mallopt. See below for details. Briefly, supported ++ parameters are as follows (listed defaults are for "typical" ++ configurations). + ++ Symbol param # default allowed param values ++ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) ++ M_GRANULARITY -2 page size any power of 2 >= page size ++ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) ++*/ ++int dlmallopt(int, int); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ malloc_footprint(); ++ Returns the number of bytes obtained from the system. The total ++ number of bytes allocated by malloc, realloc etc., is less than this ++ value. Unlike mallinfo, this function returns only a precomputed ++ result, so can be called frequently to monitor memory consumption. ++ Even if locks are otherwise defined, this function does not use them, ++ so results might not be up to date. ++*/ ++size_t dlmalloc_footprint(void); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ malloc_max_footprint(); ++ Returns the maximum number of bytes obtained from the system. This ++ value will be greater than current footprint if deallocated space ++ has been reclaimed by the system. The peak number of bytes allocated ++ by malloc, realloc etc., is less than this value. Unlike mallinfo, ++ this function returns only a precomputed result, so can be called ++ frequently to monitor memory consumption. Even if locks are ++ otherwise defined, this function does not use them, so results might ++ not be up to date. ++*/ ++size_t dlmalloc_max_footprint(void); + ++#if !NO_MALLINFO ++/* ++ mallinfo() ++ Returns (by copy) a struct containing various summary statistics: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ arena: current total non-mmapped bytes allocated from system ++ ordblks: the number of free chunks ++ smblks: always zero. ++ hblks: current number of mmapped regions ++ hblkhd: total bytes held in mmapped regions ++ usmblks: the maximum total allocated space. This will be greater ++ than current total if trimming has occurred. ++ fsmblks: always zero ++ uordblks: current total allocated space (normal or mmapped) ++ fordblks: total free space ++ keepcost: the maximum number of bytes that could ideally be released ++ back to system via malloc_trim. ("ideally" means that ++ it ignores page restrictions etc.) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Because these fields are ints, but internal bookkeeping may ++ be kept as longs, the reported values may wrap around zero and ++ thus be inaccurate. ++*/ ++struct mallinfo dlmallinfo(void); ++#endif /* NO_MALLINFO */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); + ++ independent_calloc is similar to calloc, but instead of returning a ++ single cleared space, it returns an array of pointers to n_elements ++ independent elements that can hold contents of size elem_size, each ++ of which starts out cleared, and can be independently freed, ++ realloc'ed etc. The elements are guaranteed to be adjacently ++ allocated (this is not guaranteed to occur with multiple callocs or ++ mallocs), which may also improve cache locality in some ++ applications. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The "chunks" argument is optional (i.e., may be null, which is ++ probably the most typical usage). If it is null, the returned array ++ is itself dynamically allocated and should also be freed when it is ++ no longer needed. Otherwise, the chunks array must be of at least ++ n_elements in length. It is filled in with the pointers to the ++ chunks. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ In either case, independent_calloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and "chunks" ++ is null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use regular calloc and assign pointers into this ++ space to represent elements. (In this case though, you cannot ++ independently free elements.) + ++ independent_calloc simplifies and speeds up implementations of many ++ kinds of pools. It may also be useful when constructing large data ++ structures that initially have a fixed number of fixed-sized nodes, ++ but the number is not known at compile time, and some of the nodes ++ may later need to be freed. For example: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ struct Node { int item; struct Node* next; }; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ struct Node* build_list() { ++ struct Node** pool; ++ int n = read_number_of_nodes_needed(); ++ if (n <= 0) return 0; ++ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); ++ if (pool == 0) die(); ++ // organize into a linked list... ++ struct Node* first = pool[0]; ++ for (i = 0; i < n-1; ++i) ++ pool[i]->next = pool[i+1]; ++ free(pool); // Can now free the array (or not, if it is needed later) ++ return first; ++ } ++*/ ++void** dlindependent_calloc(size_t, size_t, void**); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); + ++ independent_comalloc allocates, all at once, a set of n_elements ++ chunks with sizes indicated in the "sizes" array. It returns ++ an array of pointers to these elements, each of which can be ++ independently freed, realloc'ed etc. The elements are guaranteed to ++ be adjacently allocated (this is not guaranteed to occur with ++ multiple callocs or mallocs), which may also improve cache locality ++ in some applications. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The "chunks" argument is optional (i.e., may be null). If it is null ++ the returned array is itself dynamically allocated and should also ++ be freed when it is no longer needed. Otherwise, the chunks array ++ must be of at least n_elements in length. It is filled in with the ++ pointers to the chunks. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ In either case, independent_comalloc returns this pointer array, or ++ null if the allocation failed. If n_elements is zero and chunks is ++ null, it returns a chunk representing an array with zero elements ++ (which should be freed if not wanted). + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Each element must be individually freed when it is no longer ++ needed. If you'd like to instead be able to free all at once, you ++ should instead use a single regular malloc, and assign pointers at ++ particular offsets in the aggregate space. (In this case though, you ++ cannot independently free elements.) + ++ independent_comallac differs from independent_calloc in that each ++ element may have a different size, and also that it does not ++ automatically clear elements. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ independent_comalloc can be used to speed up allocation in cases ++ where several structs or objects must always be allocated at the ++ same time. For example: + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ struct Head { ... } ++ struct Foot { ... } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ void send_message(char* msg) { ++ int msglen = strlen(msg); ++ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; ++ void* chunks[3]; ++ if (independent_comalloc(3, sizes, chunks) == 0) ++ die(); ++ struct Head* head = (struct Head*)(chunks[0]); ++ char* body = (char*)(chunks[1]); ++ struct Foot* foot = (struct Foot*)(chunks[2]); ++ // ... ++ } + ++ In general though, independent_comalloc is worth using only for ++ larger values of n_elements. For small values, you probably won't ++ detect enough difference from series of malloc calls to bother. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Overuse of independent_comalloc can increase overall memory usage, ++ since it cannot reuse existing noncontiguous small chunks that ++ might be available for some of the elements. ++*/ ++void** dlindependent_comalloc(size_t, size_t*, void**); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ pvalloc(size_t n); ++ Equivalent to valloc(minimum-page-that-holds(n)), that is, ++ round up n to nearest pagesize. ++ */ ++void* dlpvalloc(size_t); + ++/* ++ malloc_trim(size_t pad); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ If possible, gives memory back to the system (via negative arguments ++ to sbrk) if there is unused memory at the `high' end of the malloc ++ pool or in unused MMAP segments. You can call this after freeing ++ large blocks of memory to potentially reduce the system-level memory ++ requirements of a program. However, it cannot guarantee to reduce ++ memory. Under some allocation patterns, some large free blocks of ++ memory will be locked between two used chunks, so they cannot be ++ given back to the system. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ The `pad' argument to malloc_trim represents the amount of free ++ trailing space to leave untrimmed. If this argument is zero, only ++ the minimum amount of memory to maintain internal data structures ++ will be left. Non-zero arguments can be supplied to maintain enough ++ trailing space to service future expected allocations without having ++ to re-obtain memory from the system. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Malloc_trim returns 1 if it actually released any memory, else 0. ++*/ ++int dlmalloc_trim(size_t); + ++/* ++ malloc_usable_size(void* p); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Returns the number of bytes you can actually use in ++ an allocated chunk, which may be more than you requested (although ++ often not) due to alignment and minimum size constraints. ++ You can use this many bytes without worrying about ++ overwriting other allocated objects. This is not a particularly great ++ programming practice. malloc_usable_size can be more useful in ++ debugging and assertions, for example: + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ p = malloc(n); ++ assert(malloc_usable_size(p) >= 256); ++*/ ++size_t dlmalloc_usable_size(void*); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ malloc_stats(); ++ Prints on stderr the amount of space obtained from the system (both ++ via sbrk and mmap), the maximum amount (which may be more than ++ current if malloc_trim and/or munmap got called), and the current ++ number of bytes allocated via malloc (or realloc, etc) but not yet ++ freed. Note that this is the number of bytes allocated, not the ++ number requested. It will be larger than the number requested ++ because of alignment and bookkeeping overhead. Because it includes ++ alignment wastage as being in use, this figure may be greater than ++ zero even when no user-level chunks are allocated. + ++ The reported current and maximum system memory can be inaccurate if ++ a program makes other calls to system memory allocation functions ++ (normally sbrk) outside of malloc. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ malloc_stats prints only the most commonly interesting statistics. ++ More information can be obtained by calling mallinfo. ++*/ ++void dlmalloc_stats(void); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif /* ONLY_MSPACES */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if MSPACES + ++/* ++ mspace is an opaque type representing an independent ++ region of space that supports mspace_malloc, etc. ++*/ ++typedef void* mspace; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ create_mspace creates and returns a new independent space with the ++ given initial capacity, or, if 0, the default granularity size. It ++ returns null if there is no system memory available to create the ++ space. If argument locked is non-zero, the space uses a separate ++ lock to control access. The capacity of the space will grow ++ dynamically as needed to service mspace_malloc requests. You can ++ control the sizes of incremental increases of this space by ++ compiling with a different DEFAULT_GRANULARITY or dynamically ++ setting with mallopt(M_GRANULARITY, value). ++*/ ++mspace create_mspace(size_t capacity, int locked); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ destroy_mspace destroys the given space, and attempts to return all ++ of its memory back to the system, returning the total number of ++ bytes freed. After destruction, the results of access to all memory ++ used by the space become undefined. ++*/ ++size_t destroy_mspace(mspace msp); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ create_mspace_with_base uses the memory supplied as the initial base ++ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this ++ space is used for bookkeeping, so the capacity must be at least this ++ large. (Otherwise 0 is returned.) When this initial space is ++ exhausted, additional memory will be obtained from the system. ++ Destroying this space will deallocate all additionally allocated ++ space (if possible) but not the initial base. ++*/ ++mspace create_mspace_with_base(void* base, size_t capacity, int locked); + ++/* ++ mspace_malloc behaves as malloc, but operates within ++ the given space. ++*/ ++void* mspace_malloc(mspace msp, size_t bytes); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mspace_free behaves as free, but operates within ++ the given space. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ If compiled with FOOTERS==1, mspace_free is not actually needed. ++ free may be called instead of mspace_free because freed chunks from ++ any space are handled by their originating spaces. ++*/ ++void mspace_free(mspace msp, void* mem); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ mspace_realloc behaves as realloc, but operates within ++ the given space. + ++ If compiled with FOOTERS==1, mspace_realloc is not actually ++ needed. realloc may be called instead of mspace_realloc because ++ realloced chunks from any space are handled by their originating ++ spaces. ++*/ ++void* mspace_realloc(mspace msp, void* mem, size_t newsize); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mspace_calloc behaves as calloc, but operates within ++ the given space. ++*/ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ mspace_memalign behaves as memalign, but operates within ++ the given space. ++*/ ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ mspace_independent_calloc behaves as independent_calloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]); + ++/* ++ mspace_independent_comalloc behaves as independent_comalloc, but ++ operates within the given space. ++*/ ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mspace_footprint() returns the number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_footprint(mspace msp); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ mspace_max_footprint() returns the peak number of bytes obtained from the ++ system for this space. ++*/ ++size_t mspace_max_footprint(mspace msp); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++#if !NO_MALLINFO ++/* ++ mspace_mallinfo behaves as mallinfo, but reports properties of ++ the given space. ++*/ ++struct mallinfo mspace_mallinfo(mspace msp); ++#endif /* NO_MALLINFO */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mspace_malloc_stats behaves as malloc_stats, but reports ++ properties of the given space. ++*/ ++void mspace_malloc_stats(mspace msp); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ mspace_trim behaves as malloc_trim, but ++ operates within the given space. ++*/ ++int mspace_trim(mspace msp, size_t pad); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ An alias for mallopt. ++*/ ++int mspace_mallopt(int, int); + ++#endif /* MSPACES */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifdef __cplusplus ++}; /* end of extern "C" */ ++#endif /* __cplusplus */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ ======================================================================== ++ To make a fully customizable malloc.h header file, cut everything ++ above this line, put into file malloc.h, edit to suit, and #include it ++ on the next line, as well as in programs that use this malloc. ++ ======================================================================== ++*/ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* #include "malloc.h" */ + ++/*------------------------------ internal #includes ---------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifdef _MSC_VER ++#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ ++#endif /* _MSC_VER */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#include /* for printing in malloc_stats */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#ifndef LACKS_ERRNO_H ++#include /* for MALLOC_FAILURE_ACTION */ ++#endif /* LACKS_ERRNO_H */ ++#if FOOTERS ++#include /* for magic initialization */ ++#endif /* FOOTERS */ ++#ifndef LACKS_STDLIB_H ++#include /* for abort() */ ++#endif /* LACKS_STDLIB_H */ ++#ifdef DEBUG ++#if ABORT_ON_ASSERT_FAILURE ++#define assert(x) if(!(x)) ABORT ++#else /* ABORT_ON_ASSERT_FAILURE */ ++#include ++#endif /* ABORT_ON_ASSERT_FAILURE */ ++#else /* DEBUG */ ++#define assert(x) ++#endif /* DEBUG */ ++#ifndef LACKS_STRING_H ++#include /* for memset etc */ ++#endif /* LACKS_STRING_H */ ++#if USE_BUILTIN_FFS ++#ifndef LACKS_STRINGS_H ++#include /* for ffs */ ++#endif /* LACKS_STRINGS_H */ ++#endif /* USE_BUILTIN_FFS */ ++#if HAVE_MMAP ++#ifndef LACKS_SYS_MMAN_H ++#include /* for mmap */ ++#endif /* LACKS_SYS_MMAN_H */ ++#ifndef LACKS_FCNTL_H ++#include ++#endif /* LACKS_FCNTL_H */ ++#endif /* HAVE_MMAP */ ++#if HAVE_MORECORE ++#ifndef LACKS_UNISTD_H ++#include /* for sbrk */ ++#else /* LACKS_UNISTD_H */ ++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) ++extern void* sbrk(ptrdiff_t); ++#endif /* FreeBSD etc */ ++#endif /* LACKS_UNISTD_H */ ++#endif /* HAVE_MMAP */ + ++#ifndef WIN32 ++#ifndef malloc_getpagesize ++# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ ++# ifndef _SC_PAGE_SIZE ++# define _SC_PAGE_SIZE _SC_PAGESIZE ++# endif ++# endif ++# ifdef _SC_PAGE_SIZE ++# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) ++# else ++# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) ++ extern size_t getpagesize(); ++# define malloc_getpagesize getpagesize() ++# else ++# ifdef WIN32 /* use supplied emulation of getpagesize */ ++# define malloc_getpagesize getpagesize() ++# else ++# ifndef LACKS_SYS_PARAM_H ++# include ++# endif ++# ifdef EXEC_PAGESIZE ++# define malloc_getpagesize EXEC_PAGESIZE ++# else ++# ifdef NBPG ++# ifndef CLSIZE ++# define malloc_getpagesize NBPG ++# else ++# define malloc_getpagesize (NBPG * CLSIZE) ++# endif ++# else ++# ifdef NBPC ++# define malloc_getpagesize NBPC ++# else ++# ifdef PAGESIZE ++# define malloc_getpagesize PAGESIZE ++# else /* just guess */ ++# define malloc_getpagesize ((size_t)4096U) ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++# endif ++#endif ++#endif + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ------------------- size_t and alignment properties -------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* The byte and bit size of a size_t */ ++#define SIZE_T_SIZE (sizeof(size_t)) ++#define SIZE_T_BITSIZE (sizeof(size_t) << 3) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Some constants coerced to size_t */ ++/* Annoying but necessary to avoid errors on some platforms */ ++#define SIZE_T_ZERO ((size_t)0) ++#define SIZE_T_ONE ((size_t)1) ++#define SIZE_T_TWO ((size_t)2) ++#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) ++#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) ++#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) ++#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) + ++/* The bit mask value corresponding to MALLOC_ALIGNMENT */ ++#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* True if address a has acceptable alignment */ ++#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* the number of bytes to offset an address to align it */ ++#define align_offset(A)\ ++ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ ++ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* -------------------------- MMAP preliminaries ------------------------- */ + ++/* ++ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and ++ checks to fail so compiler optimizer can delete code rather than ++ using so many "#if"s. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* MORECORE and MMAP must return MFAIL on failure */ ++#define MFAIL ((void*)(MAX_SIZE_T)) ++#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if !HAVE_MMAP ++#define IS_MMAPPED_BIT (SIZE_T_ZERO) ++#define USE_MMAP_BIT (SIZE_T_ZERO) ++#define CALL_MMAP(s) MFAIL ++#define CALL_MUNMAP(a, s) (-1) ++#define DIRECT_MMAP(s) MFAIL + ++#else /* HAVE_MMAP */ ++#define IS_MMAPPED_BIT (SIZE_T_ONE) ++#define USE_MMAP_BIT (SIZE_T_ONE) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if !defined(WIN32) && !defined (__OS2__) ++#define CALL_MUNMAP(a, s) munmap((a), (s)) ++#define MMAP_PROT (PROT_READ|PROT_WRITE) ++#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) ++#define MAP_ANONYMOUS MAP_ANON ++#endif /* MAP_ANON */ ++#ifdef MAP_ANONYMOUS ++#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) ++#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) ++#else /* MAP_ANONYMOUS */ ++/* ++ Nearly all versions of mmap support MAP_ANONYMOUS, so the following ++ is unlikely to be needed, but is supplied just in case. ++*/ ++#define MMAP_FLAGS (MAP_PRIVATE) ++static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ ++#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ ++ (dev_zero_fd = open("/dev/zero", O_RDWR), \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ ++ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) ++#endif /* MAP_ANONYMOUS */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define DIRECT_MMAP(s) CALL_MMAP(s) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#elif defined(__OS2__) + ++/* OS/2 MMAP via DosAllocMem */ ++static void* os2mmap(size_t size) { ++ void* ptr; ++ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && ++ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) ++ return MFAIL; ++ return ptr; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define os2direct_mmap(n) os2mmap(n) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* This function supports releasing coalesed segments */ ++static int os2munmap(void* ptr, size_t size) { ++ while (size) { ++ ULONG ulSize = size; ++ ULONG ulFlags = 0; ++ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) ++ return -1; ++ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || ++ ulSize > size) ++ return -1; ++ if (DosFreeMem(ptr) != 0) ++ return -1; ++ ptr = ( void * ) ( ( char * ) ptr + ulSize ); ++ size -= ulSize; ++ } ++ return 0; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define CALL_MMAP(s) os2mmap(s) ++#define CALL_MUNMAP(a, s) os2munmap((a), (s)) ++#define DIRECT_MMAP(s) os2direct_mmap(s) + ++#else /* WIN32 */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Win32 MMAP via VirtualAlloc */ ++static void* win32mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ ++static void* win32direct_mmap(size_t size) { ++ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, ++ PAGE_EXECUTE_READWRITE); ++ return (ptr != 0)? ptr: MFAIL; ++} + ++/* This function supports releasing coalesed segments */ ++static int win32munmap(void* ptr, size_t size) { ++ MEMORY_BASIC_INFORMATION minfo; ++ char* cptr = ptr; ++ while (size) { ++ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) ++ return -1; ++ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || ++ minfo.State != MEM_COMMIT || minfo.RegionSize > size) ++ return -1; ++ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) ++ return -1; ++ cptr += minfo.RegionSize; ++ size -= minfo.RegionSize; ++ } ++ return 0; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define CALL_MMAP(s) win32mmap(s) ++#define CALL_MUNMAP(a, s) win32munmap((a), (s)) ++#define DIRECT_MMAP(s) win32direct_mmap(s) ++#endif /* WIN32 */ ++#endif /* HAVE_MMAP */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if HAVE_MMAP && HAVE_MREMAP ++#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) ++#else /* HAVE_MMAP && HAVE_MREMAP */ ++#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL ++#endif /* HAVE_MMAP && HAVE_MREMAP */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if HAVE_MORECORE ++#define CALL_MORECORE(S) MORECORE(S) ++#else /* HAVE_MORECORE */ ++#define CALL_MORECORE(S) MFAIL ++#endif /* HAVE_MORECORE */ + ++/* mstate bit set if contiguous morecore disabled or failed */ ++#define USE_NONCONTIGUOUS_BIT (4U) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* segment bit set in create_mspace_with_base */ ++#define EXTERN_BIT (8U) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* --------------------------- Lock preliminaries ------------------------ */ + ++#if USE_LOCKS + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ When locks are defined, there are up to two global locks: + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to ++ MORECORE. In many cases sys_alloc requires two calls, that should ++ not be interleaved with calls by other threads. This does not ++ protect against direct calls to MORECORE by other threads not ++ using this lock, so there is still code to cope the best we can on ++ interference. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ * magic_init_mutex ensures that mparams.magic and other ++ unique mparams values are initialized only once. ++*/ + ++#if !defined(WIN32) && !defined(__OS2__) ++/* By default use posix locks */ ++#include ++#define MLOCK_T pthread_mutex_t ++#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) ++#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) ++#define RELEASE_LOCK(l) pthread_mutex_unlock(l) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; ++#endif /* HAVE_MORECORE */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#elif defined(__OS2__) ++#define MLOCK_T HMTX ++#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) ++#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) ++#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; + ++#else /* WIN32 */ ++/* ++ Because lock-protected regions have bounded times, and there ++ are no recursive lock calls, we can use simple spinlocks. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define MLOCK_T long ++static int win32_acquire_lock (MLOCK_T *sl) { ++ for (;;) { ++#ifdef InterlockedCompareExchangePointer ++ if (!InterlockedCompareExchange(sl, 1, 0)) ++ return 0; ++#else /* Use older void* version */ ++ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) ++ return 0; ++#endif /* InterlockedCompareExchangePointer */ ++ Sleep (0); ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static void win32_release_lock (MLOCK_T *sl) { ++ InterlockedExchange (sl, 0); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define INITIAL_LOCK(l) *(l)=0 ++#define ACQUIRE_LOCK(l) win32_acquire_lock(l) ++#define RELEASE_LOCK(l) win32_release_lock(l) ++#if HAVE_MORECORE ++static MLOCK_T morecore_mutex; ++#endif /* HAVE_MORECORE */ ++static MLOCK_T magic_init_mutex; ++#endif /* WIN32 */ + ++#define USE_LOCK_BIT (2U) ++#else /* USE_LOCKS */ ++#define USE_LOCK_BIT (0U) ++#define INITIAL_LOCK(l) ++#endif /* USE_LOCKS */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if USE_LOCKS && HAVE_MORECORE ++#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); ++#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); ++#else /* USE_LOCKS && HAVE_MORECORE */ ++#define ACQUIRE_MORECORE_LOCK() ++#define RELEASE_MORECORE_LOCK() ++#endif /* USE_LOCKS && HAVE_MORECORE */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if USE_LOCKS ++#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); ++#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); ++#else /* USE_LOCKS */ ++#define ACQUIRE_MAGIC_INIT_LOCK() ++#define RELEASE_MAGIC_INIT_LOCK() ++#endif /* USE_LOCKS */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++/* ----------------------- Chunk representations ------------------------ */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ (The following includes lightly edited explanations by Colin Plumb.) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ The malloc_chunk declaration below is misleading (but accurate and ++ necessary). It declares a "view" into memory allowing access to ++ necessary fields at known offsets from a given base. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Chunks of memory are maintained using a `boundary tag' method as ++ originally described by Knuth. (See the paper by Paul Wilson ++ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such ++ techniques.) Sizes of free chunks are stored both in the front of ++ each chunk and at the end. This makes consolidating fragmented ++ chunks into bigger chunks fast. The head fields also hold bits ++ representing whether chunks are free or in use. + ++ Here are some pictures to make it clearer. They are "exploded" to ++ show that the state of a chunk can be thought of as extending from ++ the high 31 bits of the head field of its header through the ++ prev_foot and PINUSE_BIT bit of the following chunk header. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ A chunk that's in use looks like: + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk (if P = 1) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 1| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | | ++ +- -+ ++ | | ++ +- -+ ++ | : ++ +- size - sizeof(size_t) available payload bytes -+ ++ : | ++ chunk-> +- -+ ++ | | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| ++ | Size of next chunk (may or may not be in use) | +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ And if it's free, it looks like this: + ++ chunk-> +- -+ ++ | User payload (must be in use, or we would have merged!) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| ++ | Size of this chunk 0| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Next pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Prev pointer | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- size - sizeof(struct chunk) unused bytes -+ ++ : | ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| ++ | Size of next chunk (must be in use, or we would have merged)| +-+ ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | : ++ +- User payload -+ ++ : | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ |0| ++ +-+ ++ Note that since we always merge adjacent free chunks, the chunks ++ adjacent to a free chunk must be in use. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Given a pointer to a chunk (which can be derived trivially from the ++ payload pointer) we can, in O(1) time, find out whether the adjacent ++ chunks are free, and if so, unlink them from the lists that they ++ are on and merge them with the current chunk. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Chunks always begin on even word boundaries, so the mem portion ++ (which is returned to the user) is also on an even word boundary, and ++ thus at least double-word aligned. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the ++ chunk size (which is always a multiple of two words), is an in-use ++ bit for the *previous* chunk. If that bit is *clear*, then the ++ word before the current chunk size contains the previous chunk ++ size, and can be used to find the front of the previous chunk. ++ The very first chunk allocated always has this bit set, preventing ++ access to non-existent (or non-owned) memory. If pinuse is set for ++ any given chunk, then you CANNOT determine the size of the ++ previous chunk, and might even get a memory addressing fault when ++ trying to do so. + ++ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of ++ the chunk size redundantly records whether the current chunk is ++ inuse. This redundancy enables usage checks within free and realloc, ++ and reduces indirection when freeing and consolidating chunks. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Each freshly allocated chunk must have both cinuse and pinuse set. ++ That is, each allocated chunk borders either a previously allocated ++ and still in-use chunk, or the base of its memory arena. This is ++ ensured by making all allocations from the the `lowest' part of any ++ found chunk. Further, no free chunk physically borders another one, ++ so each free chunk is known to be preceded and followed by either ++ inuse chunks or the ends of memory. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Note that the `foot' of the current chunk is actually represented ++ as the prev_foot of the NEXT chunk. This makes it easier to ++ deal with alignments etc but can be very confusing when trying ++ to extend or adapt this code. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The exceptions to all this are + ++ 1. The special chunk `top' is the top-most available chunk (i.e., ++ the one bordering the end of available memory). It is treated ++ specially. Top is never included in any bin, is used only if ++ no other chunk is available, and is released back to the ++ system if it is very large (see M_TRIM_THRESHOLD). In effect, ++ the top chunk is treated as larger (and thus less well ++ fitting) than any other available chunk. The top chunk ++ doesn't update its trailing size field since there is no next ++ contiguous chunk that would have to index off it. However, ++ space is still allocated for it (TOP_FOOT_SIZE) to enable ++ separation or merging when space is extended. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ 3. Chunks allocated via mmap, which have the lowest-order bit ++ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set ++ PINUSE_BIT in their head fields. Because they are allocated ++ one-by-one, each must carry its own prev_foot field, which is ++ also used to hold the offset this chunk has within its mmapped ++ region, which is needed to preserve alignment. Each mmapped ++ chunk is trailed by the first two fields of a fake next-chunk ++ for sake of usage checks. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++*/ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++struct malloc_chunk { ++ size_t prev_foot; /* Size of previous chunk (if free). */ ++ size_t head; /* Size and inuse bits. */ ++ struct malloc_chunk* fd; /* double links -- used only if free. */ ++ struct malloc_chunk* bk; ++}; + ++typedef struct malloc_chunk mchunk; ++typedef struct malloc_chunk* mchunkptr; ++typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ ++typedef size_t bindex_t; /* Described below */ ++typedef unsigned int binmap_t; /* Described below */ ++typedef unsigned int flag_t; /* The type of various bit flag sets */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ------------------- Chunks sizes and alignments ----------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define MCHUNK_SIZE (sizeof(mchunk)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if FOOTERS ++#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++#else /* FOOTERS */ ++#define CHUNK_OVERHEAD (SIZE_T_SIZE) ++#endif /* FOOTERS */ + ++/* MMapped chunks need a second word of overhead ... */ ++#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) ++/* ... and additional padding for fake next-chunk at foot */ ++#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* The smallest size we can malloc is an aligned minimal chunk */ ++#define MIN_CHUNK_SIZE\ ++ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* conversion from malloc headers to user pointers, and back */ ++#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) ++#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) ++/* chunk associated with aligned address A */ ++#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Bounds on request (not chunk) sizes. */ ++#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) ++#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) + ++/* pad request bytes into a usable size */ ++#define pad_request(req) \ ++ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* pad request, checking for minimum (but not maximum) */ ++#define request2size(req) \ ++ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ------------------ Operations on head and foot fields ----------------- */ + ++/* ++ The head field of a chunk is or'ed with PINUSE_BIT when previous ++ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in ++ use. If the chunk was obtained with mmap, the prev_foot field has ++ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the ++ mmapped region to the base of the chunk. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define PINUSE_BIT (SIZE_T_ONE) ++#define CINUSE_BIT (SIZE_T_TWO) ++#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Head value for fenceposts */ ++#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* extraction of fields from head words */ ++#define cinuse(p) ((p)->head & CINUSE_BIT) ++#define pinuse(p) ((p)->head & PINUSE_BIT) ++#define chunksize(p) ((p)->head & ~(INUSE_BITS)) + ++#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) ++#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Treat space at ptr +/- offset as a chunk */ ++#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) ++#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Ptr to next or previous physical malloc_chunk. */ ++#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) ++#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* extract next chunk's pinuse bit */ ++#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) + ++/* Get/set size at footer */ ++#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) ++#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Set size, pinuse bit, and foot */ ++#define set_size_and_pinuse_of_free_chunk(p, s)\ ++ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Set size, pinuse bit, foot, and clear next pinuse */ ++#define set_free_with_pinuse(p, s, n)\ ++ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define is_mmapped(p)\ ++ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) + ++/* Get the internal overhead associated with chunk p */ ++#define overhead_for(p)\ ++ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Return true if malloced space is not necessarily cleared */ ++#if MMAP_CLEARS ++#define calloc_must_clear(p) (!is_mmapped(p)) ++#else /* MMAP_CLEARS */ ++#define calloc_must_clear(p) (1) ++#endif /* MMAP_CLEARS */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ---------------------- Overlaid data structures ----------------------- */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ When chunks are not in use, they are treated as nodes of either ++ lists or trees. + ++ "Small" chunks are stored in circular doubly-linked lists, and look ++ like this: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk in list | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space (may be 0 bytes long) . ++ . . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Larger chunks are kept in a form of bitwise digital trees (aka ++ tries) keyed on chunksizes. Because malloc_tree_chunks are only for ++ free chunks greater than 256 bytes, their size doesn't impose any ++ constraints on user chunk sizes. Each node looks like: + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Size of previous chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `head:' | Size of chunk, in bytes |P| ++ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Forward pointer to next chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Back pointer to previous chunk of same size | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to left child (child[0]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to right child (child[1]) | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Pointer to parent | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | bin index of this chunk | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ | Unused space . ++ . | ++nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++ `foot:' | Size of chunk, in bytes | ++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ++ Each tree holding treenodes is a tree of unique chunk sizes. Chunks ++ of the same size are arranged in a circularly-linked list, with only ++ the oldest chunk (the next to be used, in our FIFO ordering) ++ actually in the tree. (Tree members are distinguished by a non-null ++ parent pointer.) If a chunk with the same size an an existing node ++ is inserted, it is linked off the existing node using pointers that ++ work in the same way as fd/bk pointers of small chunks. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Each tree contains a power of 2 sized range of chunk sizes (the ++ smallest is 0x100 <= x < 0x180), which is is divided in half at each ++ tree level, with the chunks in the smaller half of the range (0x100 ++ <= x < 0x140 for the top nose) in the left subtree and the larger ++ half (0x140 <= x < 0x180) in the right subtree. This is, of course, ++ done by inspecting individual bits. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Using these rules, each node's left subtree contains all smaller ++ sizes than its right subtree. However, the node at the root of each ++ subtree has no particular ordering relationship to either. (The ++ dividing line between the subtree sizes is based on trie relation.) ++ If we remove the last chunk of a given size from the interior of the ++ tree, we need to replace it with a leaf node. The tree ordering ++ rules permit a node to be replaced by any leaf below it. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The smallest chunk in a tree (a common operation in a best-fit ++ allocator) can be found by walking a path to the leftmost leaf in ++ the tree. Unlike a usual binary tree, where we follow left child ++ pointers until we reach a null, here we follow the right child ++ pointer any time the left one is null, until we reach a leaf with ++ both child pointers null. The smallest chunk in the tree will be ++ somewhere along that path. + ++ The worst case number of steps to add, find, or remove a node is ++ bounded by the number of bits differentiating chunks within ++ bins. Under current bin calculations, this ranges from 6 up to 21 ++ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case ++ is of course much better. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++struct malloc_tree_chunk { ++ /* The first four fields must be compatible with malloc_chunk */ ++ size_t prev_foot; ++ size_t head; ++ struct malloc_tree_chunk* fd; ++ struct malloc_tree_chunk* bk; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ struct malloc_tree_chunk* child[2]; ++ struct malloc_tree_chunk* parent; ++ bindex_t index; ++}; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++typedef struct malloc_tree_chunk tchunk; ++typedef struct malloc_tree_chunk* tchunkptr; ++typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ + ++/* A little helper macro for trees */ ++#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ----------------------------- Segments -------------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ Each malloc space may include non-contiguous segments, held in a ++ list headed by an embedded malloc_segment record representing the ++ top-most space. Segments also include flags holding properties of ++ the space. Large chunks that are directly allocated by mmap are not ++ included in this list. They are instead independently created and ++ destroyed without otherwise keeping track of them. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Segment management mainly comes into play for spaces allocated by ++ MMAP. Any call to MMAP might or might not return memory that is ++ adjacent to an existing segment. MORECORE normally contiguously ++ extends the current space, so this space is almost always adjacent, ++ which is simpler and faster to deal with. (This is why MORECORE is ++ used preferentially to MMAP when both are available -- see ++ sys_alloc.) When allocating using MMAP, we don't use any of the ++ hinting mechanisms (inconsistently) supported in various ++ implementations of unix mmap, or distinguish reserving from ++ committing memory. Instead, we just ask for space, and exploit ++ contiguity when we get it. It is probably possible to do ++ better than this on some systems, but no general scheme seems ++ to be significantly better. + ++ Management entails a simpler variant of the consolidation scheme ++ used for chunks to reduce fragmentation -- new adjacent memory is ++ normally prepended or appended to an existing segment. However, ++ there are limitations compared to chunk consolidation that mostly ++ reflect the fact that segment processing is relatively infrequent ++ (occurring only when getting memory from system) and that we ++ don't expect to have huge numbers of segments: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ * Segments are not indexed, so traversal requires linear scans. (It ++ would be possible to index these, but is not worth the extra ++ overhead and complexity for most programs on most platforms.) ++ * New segments are only appended to old ones when holding top-most ++ memory; if they cannot be prepended to others, they are held in ++ different segments. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Except for the top-most segment of an mstate, each segment record ++ is kept at the tail of its segment. Segments are added by pushing ++ segment records onto the list headed by &mstate.seg for the ++ containing mstate. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Segment flags control allocation/merge/deallocation policies: ++ * If EXTERN_BIT set, then we did not allocate this segment, ++ and so should not try to deallocate or merge with others. ++ (This currently holds only for the initial segment passed ++ into create_mspace_with_base.) ++ * If IS_MMAPPED_BIT set, the segment may be merged with ++ other surrounding mmapped segments and trimmed/de-allocated ++ using munmap. ++ * If neither bit is set, then the segment was obtained using ++ MORECORE so can be merged with surrounding MORECORE'd segments ++ and deallocated/trimmed using MORECORE with negative arguments. ++*/ + ++struct malloc_segment { ++ char* base; /* base address */ ++ size_t size; /* allocated size */ ++ struct malloc_segment* next; /* ptr to next segment */ ++#if FFI_MMAP_EXEC_WRIT ++ /* The mmap magic is supposed to store the address of the executable ++ segment at the very end of the requested block. */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* We can only merge segments if their corresponding executable ++ segments are at identical offsets. */ ++# define check_segment_merge(S,b,s) \ ++ (mmap_exec_offset((b),(s)) == (S)->exec_offset) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) ++# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) + ++ /* The removal of sflags only works with HAVE_MORECORE == 0. */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++# define get_segment_flags(S) (IS_MMAPPED_BIT) ++# define set_segment_flags(S,v) \ ++ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ ++ (((S)->exec_offset = \ ++ mmap_exec_offset((S)->base, (S)->size)), \ ++ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ ++ (S)->exec_offset) ? (ABORT, (v)) : \ ++ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* We use an offset here, instead of a pointer, because then, when ++ base changes, we don't have to modify this. On architectures ++ with segmented addresses, this might not work. */ ++ ptrdiff_t exec_offset; ++#else + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++# define get_segment_flags(S) ((S)->sflags) ++# define set_segment_flags(S,v) ((S)->sflags = (v)) ++# define check_segment_merge(S,b,s) (1) + ++ flag_t sflags; /* mmap and extern flag */ ++#endif ++}; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) ++#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++typedef struct malloc_segment msegment; ++typedef struct malloc_segment* msegmentptr; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ---------------------------- malloc_state ----------------------------- */ + ++/* ++ A malloc_state holds all of the bookkeeping for a space. ++ The main fields are: + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Top ++ The topmost chunk of the currently active segment. Its size is ++ cached in topsize. The actual size of topmost space is ++ topsize+TOP_FOOT_SIZE, which includes space reserved for adding ++ fenceposts and segment records if necessary when getting more ++ space from the system. The size at which to autotrim top is ++ cached from mparams in trim_check, except that it is disabled if ++ an autotrim fails. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Designated victim (dv) ++ This is the preferred chunk for servicing small requests that ++ don't have exact fits. It is normally the chunk split off most ++ recently to service another small request. Its size is cached in ++ dvsize. The link fields of this chunk are not maintained since it ++ is not kept in a bin. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ SmallBins ++ An array of bin headers for free chunks. These bins hold chunks ++ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains ++ chunks of all the same size, spaced 8 bytes apart. To simplify ++ use in double-linked lists, each bin header acts as a malloc_chunk ++ pointing to the real first node, if it exists (else pointing to ++ itself). This avoids special-casing for headers. But to avoid ++ waste, we allocate only the fd/bk pointers of bins, and then use ++ repositioning tricks to treat these as the fields of a chunk. + ++ TreeBins ++ Treebins are pointers to the roots of trees holding a range of ++ sizes. There are 2 equally spaced treebins for each power of two ++ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything ++ larger. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Bin maps ++ There is one bit map for small bins ("smallmap") and one for ++ treebins ("treemap). Each bin sets its bit when non-empty, and ++ clears the bit when empty. Bit operations are then used to avoid ++ bin-by-bin searching -- nearly all "search" is done without ever ++ looking at bins that won't be selected. The bit maps ++ conservatively use 32 bits per map word, even if on 64bit system. ++ For a good description of some of the bit-based techniques used ++ here, see Henry S. Warren Jr's book "Hacker's Delight" (and ++ supplement at http://hackersdelight.org/). Many of these are ++ intended to reduce the branchiness of paths through malloc etc, as ++ well as to reduce the number of memory locations read or written. + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Segments ++ A list of segments headed by an embedded malloc_segment record ++ representing the initial space. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Address check support ++ The least_addr field is the least address ever obtained from ++ MORECORE or MMAP. Attempted frees and reallocs of any address less ++ than this are trapped (unless INSECURE is defined). + ++ Magic tag ++ A cross-check field that should always hold same value as mparams.magic. + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ Flags ++ Bits recording whether to use MMAP, locks, or contiguous MORECORE + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ Statistics ++ Each space keeps track of current and maximum system memory ++ obtained via MORECORE or MMAP. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ Locking ++ If USE_LOCKS is defined, the "mutex" lock is acquired and released ++ around every public call using this mspace. ++*/ + ++/* Bin types, widths and sizes */ ++#define NSMALLBINS (32U) ++#define NTREEBINS (32U) ++#define SMALLBIN_SHIFT (3U) ++#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) ++#define TREEBIN_SHIFT (8U) ++#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) ++#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) ++#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++struct malloc_state { ++ binmap_t smallmap; ++ binmap_t treemap; ++ size_t dvsize; ++ size_t topsize; ++ char* least_addr; ++ mchunkptr dv; ++ mchunkptr top; ++ size_t trim_check; ++ size_t magic; ++ mchunkptr smallbins[(NSMALLBINS+1)*2]; ++ tbinptr treebins[NTREEBINS]; ++ size_t footprint; ++ size_t max_footprint; ++ flag_t mflags; ++#if USE_LOCKS ++ MLOCK_T mutex; /* locate lock among fields that rarely change */ ++#endif /* USE_LOCKS */ ++ msegment seg; ++}; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++typedef struct malloc_state* mstate; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ------------- Global malloc_state and malloc_params ------------------- */ + ++/* ++ malloc_params holds global properties, including those that can be ++ dynamically set using mallopt. There is a single instance, mparams, ++ initialized in init_mparams. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++struct malloc_params { ++ size_t magic; ++ size_t page_size; ++ size_t granularity; ++ size_t mmap_threshold; ++ size_t trim_threshold; ++ flag_t default_mflags; ++}; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static struct malloc_params mparams; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* The global malloc_state used for all non-"mspace" calls */ ++static struct malloc_state _gm_; ++#define gm (&_gm_) ++#define is_global(M) ((M) == &_gm_) ++#define is_initialized(M) ((M)->top != 0) + ++/* -------------------------- system alloc setup ------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Operations on mflags */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) ++#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) ++#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) ++#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) ++#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) + ++#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) ++#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define set_lock(M,L)\ ++ ((M)->mflags = (L)?\ ++ ((M)->mflags | USE_LOCK_BIT) :\ ++ ((M)->mflags & ~USE_LOCK_BIT)) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* page-align a size */ ++#define page_align(S)\ ++ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* granularity-align a size */ ++#define granularity_align(S)\ ++ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) + ++#define is_page_aligned(S)\ ++ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) ++#define is_granularity_aligned(S)\ ++ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* True if segment S holds address A */ ++#define segment_holds(S, A)\ ++ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Return segment holding given address */ ++static msegmentptr segment_holding(mstate m, char* addr) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if (addr >= sp->base && addr < sp->base + sp->size) ++ return sp; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Return true if segment contains a segment link */ ++static int has_segment_link(mstate m, msegmentptr ss) { ++ msegmentptr sp = &m->seg; ++ for (;;) { ++ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) ++ return 1; ++ if ((sp = sp->next) == 0) ++ return 0; ++ } ++} + ++#ifndef MORECORE_CANNOT_TRIM ++#define should_trim(M,s) ((s) > (M)->trim_check) ++#else /* MORECORE_CANNOT_TRIM */ ++#define should_trim(M,s) (0) ++#endif /* MORECORE_CANNOT_TRIM */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ TOP_FOOT_SIZE is padding at the end of a segment, including space ++ that may be needed to place segment records and fenceposts when new ++ noncontiguous segments are added. ++*/ ++#define TOP_FOOT_SIZE\ ++ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ------------------------------- Hooks -------------------------------- */ + ++/* ++ PREACTION should be defined to return 0 on success, and nonzero on ++ failure. If you are not using locking, you can redefine these to do ++ anything you like. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if USE_LOCKS + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Ensure locks are initialized */ ++#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) ++#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } ++#else /* USE_LOCKS */ + ++#ifndef PREACTION ++#define PREACTION(M) (0) ++#endif /* PREACTION */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifndef POSTACTION ++#define POSTACTION(M) ++#endif /* POSTACTION */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#endif /* USE_LOCKS */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. ++ USAGE_ERROR_ACTION is triggered on detected bad frees and ++ reallocs. The argument p is an address that might have triggered the ++ fault. It is ignored by the two predefined actions, but might be ++ useful in custom actions that try to help diagnose errors. ++*/ + ++#if PROCEED_ON_ERROR + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* A count of the number of corruption errors causing resets */ ++int malloc_corruption_error_count; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* default corruption action */ ++static void reset_on_error(mstate m); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) ++#define USAGE_ERROR_ACTION(m, p) + ++#else /* PROCEED_ON_ERROR */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#ifndef CORRUPTION_ERROR_ACTION ++#define CORRUPTION_ERROR_ACTION(m) ABORT ++#endif /* CORRUPTION_ERROR_ACTION */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#ifndef USAGE_ERROR_ACTION ++#define USAGE_ERROR_ACTION(m,p) ABORT ++#endif /* USAGE_ERROR_ACTION */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#endif /* PROCEED_ON_ERROR */ + ++/* -------------------------- Debugging setup ---------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if ! DEBUG + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) ++#define check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) ++#define check_malloc_state(M) ++#define check_top_chunk(M,P) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#else /* DEBUG */ ++#define check_free_chunk(M,P) do_check_free_chunk(M,P) ++#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) ++#define check_top_chunk(M,P) do_check_top_chunk(M,P) ++#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) ++#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) ++#define check_malloc_state(M) do_check_malloc_state(M) + ++static void do_check_any_chunk(mstate m, mchunkptr p); ++static void do_check_top_chunk(mstate m, mchunkptr p); ++static void do_check_mmapped_chunk(mstate m, mchunkptr p); ++static void do_check_inuse_chunk(mstate m, mchunkptr p); ++static void do_check_free_chunk(mstate m, mchunkptr p); ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s); ++static void do_check_tree(mstate m, tchunkptr t); ++static void do_check_treebin(mstate m, bindex_t i); ++static void do_check_smallbin(mstate m, bindex_t i); ++static void do_check_malloc_state(mstate m); ++static int bin_find(mstate m, mchunkptr x); ++static size_t traverse_and_check(mstate m); ++#endif /* DEBUG */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ---------------------------- Indexing Bins ---------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) ++#define small_index(s) ((s) >> SMALLBIN_SHIFT) ++#define small_index2size(i) ((i) << SMALLBIN_SHIFT) ++#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* addressing by index. See above about smallbin repositioning */ ++#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) ++#define treebin_at(M,i) (&((M)->treebins[i])) + ++/* assign tree index for size S to variable I */ ++#if defined(__GNUC__) && defined(__i386__) ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int K;\ ++ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ ++ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ ++ }\ ++} ++#else /* GNUC */ ++#define compute_tree_index(S, I)\ ++{\ ++ size_t X = S >> TREEBIN_SHIFT;\ ++ if (X == 0)\ ++ I = 0;\ ++ else if (X > 0xFFFF)\ ++ I = NTREEBINS-1;\ ++ else {\ ++ unsigned int Y = (unsigned int)X;\ ++ unsigned int N = ((Y - 0x100) >> 16) & 8;\ ++ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ ++ N += K;\ ++ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ ++ K = 14 - N + ((Y <<= K) >> 15);\ ++ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ ++ }\ ++} ++#endif /* GNUC */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Bit representing maximum resolved size in a treebin at i */ ++#define bit_for_tree_index(i) \ ++ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Shift placing maximum resolved bit in a treebin at i as sign bit */ ++#define leftshift_for_tree_index(i) \ ++ ((i == NTREEBINS-1)? 0 : \ ++ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* The size of the smallest chunk held in bin with index i */ ++#define minsize_for_tree_index(i) \ ++ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ ++ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) + + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ------------------------ Operations on bin maps ----------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* bit corresponding to given index */ ++#define idx2bit(i) ((binmap_t)(1) << (i)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Mark/Clear bits with given index */ ++#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) ++#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) ++#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) + ++#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) ++#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) ++#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* index corresponding to given bit */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if defined(__GNUC__) && defined(__i386__) ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int J;\ ++ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ ++ I = (bindex_t)J;\ ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#else /* GNUC */ ++#if USE_BUILTIN_FFS ++#define compute_bit2idx(X, I) I = ffs(X)-1 + ++#else /* USE_BUILTIN_FFS */ ++#define compute_bit2idx(X, I)\ ++{\ ++ unsigned int Y = X - 1;\ ++ unsigned int K = Y >> (16-4) & 16;\ ++ unsigned int N = K; Y >>= K;\ ++ N += K = Y >> (8-3) & 8; Y >>= K;\ ++ N += K = Y >> (4-2) & 4; Y >>= K;\ ++ N += K = Y >> (2-1) & 2; Y >>= K;\ ++ N += K = Y >> (1-0) & 1; Y >>= K;\ ++ I = (bindex_t)(N + Y);\ ++} ++#endif /* USE_BUILTIN_FFS */ ++#endif /* GNUC */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* isolate the least set bit of a bitmap */ ++#define least_bit(x) ((x) & -(x)) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* mask with all bits to left of least bit of x on */ ++#define left_bits(x) ((x<<1) | -(x<<1)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* mask with all bits to left of or equal to least bit of x on */ ++#define same_or_left_bits(x) ((x) | -(x)) + + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ----------------------- Runtime Check Support ------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ For security, the main invariant is that malloc/free/etc never ++ writes to a static address other than malloc_state, unless static ++ malloc_state itself has been corrupted, which cannot occur via ++ malloc (because of these checks). In essence this means that we ++ believe all pointers, sizes, maps etc held in malloc_state, but ++ check all of those linked or offsetted from other embedded data ++ structures. These checks are interspersed with main code in a way ++ that tends to minimize their run-time cost. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ When FOOTERS is defined, in addition to range checking, we also ++ verify footer fields of inuse chunks, which can be used guarantee ++ that the mstate controlling malloc/free is intact. This is a ++ streamlined version of the approach described by William Robertson ++ et al in "Run-time Detection of Heap-based Overflows" LISA'03 ++ http://www.usenix.org/events/lisa03/tech/robertson.html The footer ++ of an inuse chunk holds the xor of its mstate and a random seed, ++ that is checked upon calls to free() and realloc(). This is ++ (probablistically) unguessable from outside the program, but can be ++ computed by any code successfully malloc'ing any chunk, so does not ++ itself provide protection against code that has already broken ++ security through some other means. Unlike Robertson et al, we ++ always dynamically check addresses of all offset chunks (previous, ++ next, etc). This turns out to be cheaper than relying on hashes. ++*/ + ++#if !INSECURE ++/* Check if address a is at least as high as any from MORECORE or MMAP */ ++#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) ++/* Check if address of next chunk n is higher than base chunk p */ ++#define ok_next(p, n) ((char*)(p) < (char*)(n)) ++/* Check if p has its cinuse bit on */ ++#define ok_cinuse(p) cinuse(p) ++/* Check if p has its pinuse bit on */ ++#define ok_pinuse(p) pinuse(p) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#else /* !INSECURE */ ++#define ok_address(M, a) (1) ++#define ok_next(b, n) (1) ++#define ok_cinuse(p) (1) ++#define ok_pinuse(p) (1) ++#endif /* !INSECURE */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if (FOOTERS && !INSECURE) ++/* Check if (alleged) mstate m has expected magic field */ ++#define ok_magic(M) ((M)->magic == mparams.magic) ++#else /* (FOOTERS && !INSECURE) */ ++#define ok_magic(M) (1) ++#endif /* (FOOTERS && !INSECURE) */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++/* In gcc, use __builtin_expect to minimize impact of checks */ ++#if !INSECURE ++#if defined(__GNUC__) && __GNUC__ >= 3 ++#define RTCHECK(e) __builtin_expect(e, 1) ++#else /* GNUC */ ++#define RTCHECK(e) (e) ++#endif /* GNUC */ ++#else /* !INSECURE */ ++#define RTCHECK(e) (1) ++#endif /* !INSECURE */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* macros to set up inuse chunks with or without footers */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if !FOOTERS + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define mark_inuse_foot(M,p,s) + ++/* Set cinuse bit and pinuse bit of next chunk */ ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Set size, cinuse and pinuse bit of this chunk */ ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#else /* FOOTERS */ + ++/* Set foot of inuse chunk to be xor of mstate and seed */ ++#define mark_inuse_foot(M,p,s)\ ++ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#define get_mstate_for(p)\ ++ ((mstate)(((mchunkptr)((char*)(p) +\ ++ (chunksize(p))))->prev_foot ^ mparams.magic)) + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define set_inuse(M,p,s)\ ++ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ ++ mark_inuse_foot(M,p,s)) + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define set_inuse_and_pinuse(M,p,s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ ++ mark_inuse_foot(M,p,s)) + ++#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ ++ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ ++ mark_inuse_foot(M, p, s)) + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#endif /* !FOOTERS */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ---------------------------- setting mparams -------------------------- */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Initialize mparams */ ++static int init_mparams(void) { ++ if (mparams.page_size == 0) { ++ size_t s; + ++ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; ++ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; ++#if MORECORE_CONTIGUOUS ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; ++#else /* MORECORE_CONTIGUOUS */ ++ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; ++#endif /* MORECORE_CONTIGUOUS */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if (FOOTERS && !INSECURE) ++ { ++#if USE_DEV_RANDOM ++ int fd; ++ unsigned char buf[sizeof(size_t)]; ++ /* Try to use /dev/urandom, else fall back on using time */ ++ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && ++ read(fd, buf, sizeof(buf)) == sizeof(buf)) { ++ s = *((size_t *) buf); ++ close(fd); ++ } ++ else ++#endif /* USE_DEV_RANDOM */ ++ s = (size_t)(time(0) ^ (size_t)0x55555555U); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ s |= (size_t)8U; /* ensure nonzero */ ++ s &= ~(size_t)7U; /* improve chances of fault for bad values */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ } ++#else /* (FOOTERS && !INSECURE) */ ++ s = (size_t)0x58585858U; ++#endif /* (FOOTERS && !INSECURE) */ ++ ACQUIRE_MAGIC_INIT_LOCK(); ++ if (mparams.magic == 0) { ++ mparams.magic = s; ++ /* Set up lock for main malloc area */ ++ INITIAL_LOCK(&gm->mutex); ++ gm->mflags = mparams.default_mflags; ++ } ++ RELEASE_MAGIC_INIT_LOCK(); + ++#if !defined(WIN32) && !defined(__OS2__) ++ mparams.page_size = malloc_getpagesize; ++ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? ++ DEFAULT_GRANULARITY : mparams.page_size); ++#elif defined (__OS2__) ++ /* if low-memory is used, os2munmap() would break ++ if it were anything other than 64k */ ++ mparams.page_size = 4096u; ++ mparams.granularity = 65536u; ++#else /* WIN32 */ ++ { ++ SYSTEM_INFO system_info; ++ GetSystemInfo(&system_info); ++ mparams.page_size = system_info.dwPageSize; ++ mparams.granularity = system_info.dwAllocationGranularity; ++ } ++#endif /* WIN32 */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Sanity-check configuration: ++ size_t must be unsigned and as wide as pointer type. ++ ints must be at least 4 bytes. ++ alignment must be at least 8. ++ Alignment, min chunk size, and page size must all be powers of 2. ++ */ ++ if ((sizeof(size_t) != sizeof(char*)) || ++ (MAX_SIZE_T < MIN_CHUNK_SIZE) || ++ (sizeof(int) < 4) || ++ (MALLOC_ALIGNMENT < (size_t)8U) || ++ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || ++ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || ++ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || ++ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) ++ ABORT; ++ } ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* support for mallopt */ ++static int change_mparam(int param_number, int value) { ++ size_t val = (size_t)value; ++ init_mparams(); ++ switch(param_number) { ++ case M_TRIM_THRESHOLD: ++ mparams.trim_threshold = val; ++ return 1; ++ case M_GRANULARITY: ++ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { ++ mparams.granularity = val; ++ return 1; ++ } ++ else ++ return 0; ++ case M_MMAP_THRESHOLD: ++ mparams.mmap_threshold = val; ++ return 1; ++ default: ++ return 0; ++ } ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if DEBUG ++/* ------------------------- Debugging Support --------------------------- */ + ++/* Check properties of any chunk, whether free, inuse, mmapped etc */ ++static void do_check_any_chunk(mstate m, mchunkptr p) { ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Check properties of top chunk */ ++static void do_check_top_chunk(mstate m, mchunkptr p) { ++ msegmentptr sp = segment_holding(m, (char*)p); ++ size_t sz = chunksize(p); ++ assert(sp != 0); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(sz == m->topsize); ++ assert(sz > 0); ++ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); ++ assert(pinuse(p)); ++ assert(!next_pinuse(p)); ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Check properties of (inuse) mmapped chunks */ ++static void do_check_mmapped_chunk(mstate m, mchunkptr p) { ++ size_t sz = chunksize(p); ++ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); ++ assert(is_mmapped(p)); ++ assert(use_mmap(m)); ++ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); ++ assert(ok_address(m, p)); ++ assert(!is_small(sz)); ++ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); ++ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); ++ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Check properties of inuse chunks */ ++static void do_check_inuse_chunk(mstate m, mchunkptr p) { ++ do_check_any_chunk(m, p); ++ assert(cinuse(p)); ++ assert(next_pinuse(p)); ++ /* If not pinuse and not mmapped, previous chunk has OK offset */ ++ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); ++ if (is_mmapped(p)) ++ do_check_mmapped_chunk(m, p); ++} + ++/* Check properties of free chunks */ ++static void do_check_free_chunk(mstate m, mchunkptr p) { ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ mchunkptr next = chunk_plus_offset(p, sz); ++ do_check_any_chunk(m, p); ++ assert(!cinuse(p)); ++ assert(!next_pinuse(p)); ++ assert (!is_mmapped(p)); ++ if (p != m->dv && p != m->top) { ++ if (sz >= MIN_CHUNK_SIZE) { ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(is_aligned(chunk2mem(p))); ++ assert(next->prev_foot == sz); ++ assert(pinuse(p)); ++ assert (next == m->top || cinuse(next)); ++ assert(p->fd->bk == p); ++ assert(p->bk->fd == p); ++ } ++ else /* markers are always of size SIZE_T_SIZE */ ++ assert(sz == SIZE_T_SIZE); ++ } ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Check properties of malloced chunks at the point they are malloced */ ++static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); ++ do_check_inuse_chunk(m, p); ++ assert((sz & CHUNK_ALIGN_MASK) == 0); ++ assert(sz >= MIN_CHUNK_SIZE); ++ assert(sz >= s); ++ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ ++ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Check a tree and its subtrees. */ ++static void do_check_tree(mstate m, tchunkptr t) { ++ tchunkptr head = 0; ++ tchunkptr u = t; ++ bindex_t tindex = t->index; ++ size_t tsize = chunksize(t); ++ bindex_t idx; ++ compute_tree_index(tsize, idx); ++ assert(tindex == idx); ++ assert(tsize >= MIN_LARGE_SIZE); ++ assert(tsize >= minsize_for_tree_index(idx)); ++ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ do { /* traverse through chain of same-sized nodes */ ++ do_check_any_chunk(m, ((mchunkptr)u)); ++ assert(u->index == tindex); ++ assert(chunksize(u) == tsize); ++ assert(!cinuse(u)); ++ assert(!next_pinuse(u)); ++ assert(u->fd->bk == u); ++ assert(u->bk->fd == u); ++ if (u->parent == 0) { ++ assert(u->child[0] == 0); ++ assert(u->child[1] == 0); ++ } ++ else { ++ assert(head == 0); /* only one node on chain has parent */ ++ head = u; ++ assert(u->parent != u); ++ assert (u->parent->child[0] == u || ++ u->parent->child[1] == u || ++ *((tbinptr*)(u->parent)) == u); ++ if (u->child[0] != 0) { ++ assert(u->child[0]->parent == u); ++ assert(u->child[0] != u); ++ do_check_tree(m, u->child[0]); ++ } ++ if (u->child[1] != 0) { ++ assert(u->child[1]->parent == u); ++ assert(u->child[1] != u); ++ do_check_tree(m, u->child[1]); ++ } ++ if (u->child[0] != 0 && u->child[1] != 0) { ++ assert(chunksize(u->child[0]) < chunksize(u->child[1])); ++ } ++ } ++ u = u->fd; ++ } while (u != t); ++ assert(head != 0); ++} + ++/* Check all the chunks in a treebin. */ ++static void do_check_treebin(mstate m, bindex_t i) { ++ tbinptr* tb = treebin_at(m, i); ++ tchunkptr t = *tb; ++ int empty = (m->treemap & (1U << i)) == 0; ++ if (t == 0) ++ assert(empty); ++ if (!empty) ++ do_check_tree(m, t); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Check all the chunks in a smallbin. */ ++static void do_check_smallbin(mstate m, bindex_t i) { ++ sbinptr b = smallbin_at(m, i); ++ mchunkptr p = b->bk; ++ unsigned int empty = (m->smallmap & (1U << i)) == 0; ++ if (p == b) ++ assert(empty); ++ if (!empty) { ++ for (; p != b; p = p->bk) { ++ size_t size = chunksize(p); ++ mchunkptr q; ++ /* each chunk claims to be free */ ++ do_check_free_chunk(m, p); ++ /* chunk belongs in bin */ ++ assert(small_index(size) == i); ++ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); ++ /* chunk is followed by an inuse chunk */ ++ q = next_chunk(p); ++ if (q->head != FENCEPOST_HEAD) ++ do_check_inuse_chunk(m, q); ++ } ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Find x in a bin. Used in other check functions. */ ++static int bin_find(mstate m, mchunkptr x) { ++ size_t size = chunksize(x); ++ if (is_small(size)) { ++ bindex_t sidx = small_index(size); ++ sbinptr b = smallbin_at(m, sidx); ++ if (smallmap_is_marked(m, sidx)) { ++ mchunkptr p = b; ++ do { ++ if (p == x) ++ return 1; ++ } while ((p = p->fd) != b); ++ } ++ } ++ else { ++ bindex_t tidx; ++ compute_tree_index(size, tidx); ++ if (treemap_is_marked(m, tidx)) { ++ tchunkptr t = *treebin_at(m, tidx); ++ size_t sizebits = size << leftshift_for_tree_index(tidx); ++ while (t != 0 && chunksize(t) != size) { ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ sizebits <<= 1; ++ } ++ if (t != 0) { ++ tchunkptr u = t; ++ do { ++ if (u == (tchunkptr)x) ++ return 1; ++ } while ((u = u->fd) != t); ++ } ++ } ++ } ++ return 0; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Traverse each chunk and check it; return total */ ++static size_t traverse_and_check(mstate m) { ++ size_t sum = 0; ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ sum += m->topsize + TOP_FOOT_SIZE; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ mchunkptr lastq = 0; ++ assert(pinuse(q)); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ sum += chunksize(q); ++ if (cinuse(q)) { ++ assert(!bin_find(m, q)); ++ do_check_inuse_chunk(m, q); ++ } ++ else { ++ assert(q == m->dv || bin_find(m, q)); ++ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ ++ do_check_free_chunk(m, q); ++ } ++ lastq = q; ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } ++ return sum; ++} + ++/* Check all properties of malloc_state. */ ++static void do_check_malloc_state(mstate m) { ++ bindex_t i; ++ size_t total; ++ /* check bins */ ++ for (i = 0; i < NSMALLBINS; ++i) ++ do_check_smallbin(m, i); ++ for (i = 0; i < NTREEBINS; ++i) ++ do_check_treebin(m, i); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (m->dvsize != 0) { /* check dv chunk */ ++ do_check_any_chunk(m, m->dv); ++ assert(m->dvsize == chunksize(m->dv)); ++ assert(m->dvsize >= MIN_CHUNK_SIZE); ++ assert(bin_find(m, m->dv) == 0); ++ } + ++ if (m->top != 0) { /* check top chunk */ ++ do_check_top_chunk(m, m->top); ++ assert(m->topsize == chunksize(m->top)); ++ assert(m->topsize > 0); ++ assert(bin_find(m, m->top) == 0); ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ total = traverse_and_check(m); ++ assert(total <= m->footprint); ++ assert(m->footprint <= m->max_footprint); ++} ++#endif /* DEBUG */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ----------------------------- statistics ------------------------------ */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if !NO_MALLINFO ++static struct mallinfo internal_mallinfo(mstate m) { ++ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ++ if (!PREACTION(m)) { ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ size_t nfree = SIZE_T_ONE; /* top always free */ ++ size_t mfree = m->topsize + TOP_FOOT_SIZE; ++ size_t sum = mfree; ++ msegmentptr s = &m->seg; ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ size_t sz = chunksize(q); ++ sum += sz; ++ if (!cinuse(q)) { ++ mfree += sz; ++ ++nfree; ++ } ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } + ++ nm.arena = sum; ++ nm.ordblks = nfree; ++ nm.hblkhd = m->footprint - sum; ++ nm.usmblks = m->max_footprint; ++ nm.uordblks = m->footprint - mfree; ++ nm.fordblks = mfree; ++ nm.keepcost = m->topsize; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ POSTACTION(m); ++ } ++ return nm; ++} ++#endif /* !NO_MALLINFO */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static void internal_malloc_stats(mstate m) { ++ if (!PREACTION(m)) { ++ size_t maxfp = 0; ++ size_t fp = 0; ++ size_t used = 0; ++ check_malloc_state(m); ++ if (is_initialized(m)) { ++ msegmentptr s = &m->seg; ++ maxfp = m->max_footprint; ++ fp = m->footprint; ++ used = fp - (m->topsize + TOP_FOOT_SIZE); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ while (s != 0) { ++ mchunkptr q = align_as_chunk(s->base); ++ while (segment_holds(s, q) && ++ q != m->top && q->head != FENCEPOST_HEAD) { ++ if (!cinuse(q)) ++ used -= chunksize(q); ++ q = next_chunk(q); ++ } ++ s = s->next; ++ } ++ } + ++ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); ++ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); ++ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ POSTACTION(m); ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ----------------------- Operations on smallbins ----------------------- */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ++ Various forms of linking and unlinking are defined as macros. Even ++ the ones for trees, which are very long but have very short typical ++ paths. This is ugly but reduces reliance on inlining support of ++ compilers. ++*/ + ++/* Link a free chunk into a smallbin */ ++#define insert_small_chunk(M, P, S) {\ ++ bindex_t I = small_index(S);\ ++ mchunkptr B = smallbin_at(M, I);\ ++ mchunkptr F = B;\ ++ assert(S >= MIN_CHUNK_SIZE);\ ++ if (!smallmap_is_marked(M, I))\ ++ mark_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, B->fd)))\ ++ F = B->fd;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ B->fd = P;\ ++ F->bk = P;\ ++ P->fd = F;\ ++ P->bk = B;\ ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Unlink a chunk from a smallbin */ ++#define unlink_small_chunk(M, P, S) {\ ++ mchunkptr F = P->fd;\ ++ mchunkptr B = P->bk;\ ++ bindex_t I = small_index(S);\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (F == B)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ ++ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ ++ F->bk = B;\ ++ B->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Unlink the first chunk from a smallbin */ ++#define unlink_first_small_chunk(M, B, P, I) {\ ++ mchunkptr F = P->fd;\ ++ assert(P != B);\ ++ assert(P != F);\ ++ assert(chunksize(P) == small_index2size(I));\ ++ if (B == F)\ ++ clear_smallmap(M, I);\ ++ else if (RTCHECK(ok_address(M, F))) {\ ++ B->fd = F;\ ++ F->bk = B;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Replace dv node, binning the old one */ ++/* Used only when dvsize known to be small */ ++#define replace_dv(M, P, S) {\ ++ size_t DVS = M->dvsize;\ ++ if (DVS != 0) {\ ++ mchunkptr DV = M->dv;\ ++ assert(is_small(DVS));\ ++ insert_small_chunk(M, DV, DVS);\ ++ }\ ++ M->dvsize = S;\ ++ M->dv = P;\ ++} + ++/* ------------------------- Operations on trees ------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Insert chunk into tree */ ++#define insert_large_chunk(M, X, S) {\ ++ tbinptr* H;\ ++ bindex_t I;\ ++ compute_tree_index(S, I);\ ++ H = treebin_at(M, I);\ ++ X->index = I;\ ++ X->child[0] = X->child[1] = 0;\ ++ if (!treemap_is_marked(M, I)) {\ ++ mark_treemap(M, I);\ ++ *H = X;\ ++ X->parent = (tchunkptr)H;\ ++ X->fd = X->bk = X;\ ++ }\ ++ else {\ ++ tchunkptr T = *H;\ ++ size_t K = S << leftshift_for_tree_index(I);\ ++ for (;;) {\ ++ if (chunksize(T) != S) {\ ++ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ ++ K <<= 1;\ ++ if (*C != 0)\ ++ T = *C;\ ++ else if (RTCHECK(ok_address(M, C))) {\ ++ *C = X;\ ++ X->parent = T;\ ++ X->fd = X->bk = X;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr F = T->fd;\ ++ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ ++ T->fd = F->bk = X;\ ++ X->fd = F;\ ++ X->bk = T;\ ++ X->parent = 0;\ ++ break;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ break;\ ++ }\ ++ }\ ++ }\ ++ }\ ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* ++ Unlink steps: + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ 1. If x is a chained node, unlink it from its same-sized fd/bk links ++ and choose its bk node as its replacement. ++ 2. If x was the last node of its size, but not a leaf node, it must ++ be replaced with a leaf node (not merely one with an open left or ++ right), to make sure that lefts and rights of descendants ++ correspond properly to bit masks. We use the rightmost descendant ++ of x. We could use any other leaf, but this is easy to locate and ++ tends to counteract removal of leftmosts elsewhere, and so keeps ++ paths shorter than minimally guaranteed. This doesn't loop much ++ because on average a node in a tree is near the bottom. ++ 3. If x is the base of a chain (i.e., has parent links) relink ++ x's parent and children to x's replacement (or null if none). ++*/ + ++#define unlink_large_chunk(M, X) {\ ++ tchunkptr XP = X->parent;\ ++ tchunkptr R;\ ++ if (X->bk != X) {\ ++ tchunkptr F = X->fd;\ ++ R = X->bk;\ ++ if (RTCHECK(ok_address(M, F))) {\ ++ F->bk = R;\ ++ R->fd = F;\ ++ }\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else {\ ++ tchunkptr* RP;\ ++ if (((R = *(RP = &(X->child[1]))) != 0) ||\ ++ ((R = *(RP = &(X->child[0]))) != 0)) {\ ++ tchunkptr* CP;\ ++ while ((*(CP = &(R->child[1])) != 0) ||\ ++ (*(CP = &(R->child[0])) != 0)) {\ ++ R = *(RP = CP);\ ++ }\ ++ if (RTCHECK(ok_address(M, RP)))\ ++ *RP = 0;\ ++ else {\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ }\ ++ if (XP != 0) {\ ++ tbinptr* H = treebin_at(M, X->index);\ ++ if (X == *H) {\ ++ if ((*H = R) == 0) \ ++ clear_treemap(M, X->index);\ ++ }\ ++ else if (RTCHECK(ok_address(M, XP))) {\ ++ if (XP->child[0] == X) \ ++ XP->child[0] = R;\ ++ else \ ++ XP->child[1] = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ if (R != 0) {\ ++ if (RTCHECK(ok_address(M, R))) {\ ++ tchunkptr C0, C1;\ ++ R->parent = XP;\ ++ if ((C0 = X->child[0]) != 0) {\ ++ if (RTCHECK(ok_address(M, C0))) {\ ++ R->child[0] = C0;\ ++ C0->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ if ((C1 = X->child[1]) != 0) {\ ++ if (RTCHECK(ok_address(M, C1))) {\ ++ R->child[1] = C1;\ ++ C1->parent = R;\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++ else\ ++ CORRUPTION_ERROR_ACTION(M);\ ++ }\ ++ }\ ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Relays to large vs small bin operations */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#define insert_chunk(M, P, S)\ ++ if (is_small(S)) insert_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#define unlink_chunk(M, P, S)\ ++ if (is_small(S)) unlink_small_chunk(M, P, S)\ ++ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } + + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Relays to internal calls to malloc/free from realloc, memalign etc */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if ONLY_MSPACES ++#define internal_malloc(m, b) mspace_malloc(m, b) ++#define internal_free(m, mem) mspace_free(m,mem); ++#else /* ONLY_MSPACES */ ++#if MSPACES ++#define internal_malloc(m, b)\ ++ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) ++#define internal_free(m, mem)\ ++ if (m == gm) dlfree(mem); else mspace_free(m,mem); ++#else /* MSPACES */ ++#define internal_malloc(m, b) dlmalloc(b) ++#define internal_free(m, mem) dlfree(mem) ++#endif /* MSPACES */ ++#endif /* ONLY_MSPACES */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* ----------------------- Direct-mmapping chunks ----------------------- */ + ++/* ++ Directly mmapped chunks are set up with an offset to the start of ++ the mmapped region stored in the prev_foot field of the chunk. This ++ allows reconstruction of the required argument to MUNMAP when freed, ++ and also allows adjustment of the returned chunk to meet alignment ++ requirements (especially in memalign). There is also enough space ++ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain ++ the PINUSE bit so frees can be checked. ++*/ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Malloc using mmap */ ++static void* mmap_alloc(mstate m, size_t nb) { ++ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ if (mmsize > nb) { /* Check for wrap around 0 */ ++ char* mm = (char*)(DIRECT_MMAP(mmsize)); ++ if (mm != CMFAIL) { ++ size_t offset = align_offset(chunk2mem(mm)); ++ size_t psize = mmsize - offset - MMAP_FOOT_PAD; ++ mchunkptr p = (mchunkptr)(mm + offset); ++ p->prev_foot = offset | IS_MMAPPED_BIT; ++ (p)->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, p, psize); ++ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (mm < m->least_addr) ++ m->least_addr = mm; ++ if ((m->footprint += mmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ assert(is_aligned(chunk2mem(p))); ++ check_mmapped_chunk(m, p); ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Realloc using mmap */ ++static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { ++ size_t oldsize = chunksize(oldp); ++ if (is_small(nb)) /* Can't shrink mmap regions below small size */ ++ return 0; ++ /* Keep old chunk if big enough but not too big */ ++ if (oldsize >= nb + SIZE_T_SIZE && ++ (oldsize - nb) <= (mparams.granularity << 1)) ++ return oldp; ++ else { ++ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; ++ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; ++ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + ++ CHUNK_ALIGN_MASK); ++ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, ++ oldmmsize, newmmsize, 1); ++ if (cp != CMFAIL) { ++ mchunkptr newp = (mchunkptr)(cp + offset); ++ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; ++ newp->head = (psize|CINUSE_BIT); ++ mark_inuse_foot(m, newp, psize); ++ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; ++ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; + ++ if (cp < m->least_addr) ++ m->least_addr = cp; ++ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) ++ m->max_footprint = m->footprint; ++ check_mmapped_chunk(m, newp); ++ return newp; ++ } ++ } ++ return 0; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* -------------------------- mspace management -------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* Initialize top chunk and its size */ ++static void init_top(mstate m, mchunkptr p, size_t psize) { ++ /* Ensure alignment */ ++ size_t offset = align_offset(chunk2mem(p)); ++ p = (mchunkptr)((char*)p + offset); ++ psize -= offset; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ m->top = p; ++ m->topsize = psize; ++ p->head = psize | PINUSE_BIT; ++ /* set size of fake trailing chunk holding overhead space only once */ ++ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; ++ m->trim_check = mparams.trim_threshold; /* reset on each update */ ++} + ++/* Initialize bins for a new mstate that is otherwise zeroed out */ ++static void init_bins(mstate m) { ++ /* Establish circular links for smallbins */ ++ bindex_t i; ++ for (i = 0; i < NSMALLBINS; ++i) { ++ sbinptr bin = smallbin_at(m,i); ++ bin->fd = bin->bk = bin; ++ } ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if PROCEED_ON_ERROR + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* default corruption action */ ++static void reset_on_error(mstate m) { ++ int i; ++ ++malloc_corruption_error_count; ++ /* Reinitialize fields to forget about all memory */ ++ m->smallbins = m->treebins = 0; ++ m->dvsize = m->topsize = 0; ++ m->seg.base = 0; ++ m->seg.size = 0; ++ m->seg.next = 0; ++ m->top = m->dv = 0; ++ for (i = 0; i < NTREEBINS; ++i) ++ *treebin_at(m, i) = 0; ++ init_bins(m); ++} ++#endif /* PROCEED_ON_ERROR */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* Allocate chunk and prepend remainder with chunk in successor base. */ ++static void* prepend_alloc(mstate m, char* newbase, char* oldbase, ++ size_t nb) { ++ mchunkptr p = align_as_chunk(newbase); ++ mchunkptr oldfirst = align_as_chunk(oldbase); ++ size_t psize = (char*)oldfirst - (char*)p; ++ mchunkptr q = chunk_plus_offset(p, nb); ++ size_t qsize = psize - nb; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); + ++ assert((char*)oldfirst > (char*)q); ++ assert(pinuse(oldfirst)); ++ assert(qsize >= MIN_CHUNK_SIZE); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* consolidate remainder with first chunk of old base */ ++ if (oldfirst == m->top) { ++ size_t tsize = m->topsize += qsize; ++ m->top = q; ++ q->head = tsize | PINUSE_BIT; ++ check_top_chunk(m, q); ++ } ++ else if (oldfirst == m->dv) { ++ size_t dsize = m->dvsize += qsize; ++ m->dv = q; ++ set_size_and_pinuse_of_free_chunk(q, dsize); ++ } ++ else { ++ if (!cinuse(oldfirst)) { ++ size_t nsize = chunksize(oldfirst); ++ unlink_chunk(m, oldfirst, nsize); ++ oldfirst = chunk_plus_offset(oldfirst, nsize); ++ qsize += nsize; ++ } ++ set_free_with_pinuse(q, qsize, oldfirst); ++ insert_chunk(m, q, qsize); ++ check_free_chunk(m, q); ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] + ++/* Add a segment to hold a new noncontiguous region */ ++static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { ++ /* Determine locations and sizes of segment, fenceposts, old top */ ++ char* old_top = (char*)m->top; ++ msegmentptr oldsp = segment_holding(m, old_top); ++ char* old_end = oldsp->base + oldsp->size; ++ size_t ssize = pad_request(sizeof(struct malloc_segment)); ++ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); ++ size_t offset = align_offset(chunk2mem(rawsp)); ++ char* asp = rawsp + offset; ++ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; ++ mchunkptr sp = (mchunkptr)csp; ++ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); ++ mchunkptr tnext = chunk_plus_offset(sp, ssize); ++ mchunkptr p = tnext; ++ int nfences = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* reset top to new space */ ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Set up segment record */ ++ assert(is_aligned(ss)); ++ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); ++ *ss = m->seg; /* Push current record */ ++ m->seg.base = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmapped); ++ m->seg.next = ss; + ++ /* Insert trailing fenceposts */ ++ for (;;) { ++ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); ++ p->head = FENCEPOST_HEAD; ++ ++nfences; ++ if ((char*)(&(nextp->head)) < old_end) ++ p = nextp; ++ else ++ break; ++ } ++ assert(nfences >= 2); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Insert the rest of old top into a bin as an ordinary free chunk */ ++ if (csp != old_top) { ++ mchunkptr q = (mchunkptr)old_top; ++ size_t psize = csp - old_top; ++ mchunkptr tn = chunk_plus_offset(q, psize); ++ set_free_with_pinuse(q, psize, tn); ++ insert_chunk(m, q, psize); ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ check_top_chunk(m, m->top); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* -------------------------- System allocation -------------------------- */ + ++/* Get memory from system using MORECORE or MMAP */ ++static void* sys_alloc(mstate m, size_t nb) { ++ char* tbase = CMFAIL; ++ size_t tsize = 0; ++ flag_t mmap_flag = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ init_mparams(); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* Directly map large chunks */ ++ if (use_mmap(m) && nb >= mparams.mmap_threshold) { ++ void* mem = mmap_alloc(m, nb); ++ if (mem != 0) ++ return mem; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* ++ Try getting memory in any of three ways (in most-preferred to ++ least-preferred order): ++ 1. A call to MORECORE that can normally contiguously extend memory. ++ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or ++ or main space is mmapped or a previous contiguous call failed) ++ 2. A call to MMAP new space (disabled if not HAVE_MMAP). ++ Note that under the default settings, if MORECORE is unable to ++ fulfill a request, and HAVE_MMAP is true, then mmap is ++ used as a noncontiguous system allocator. This is a useful backup ++ strategy for systems with holes in address spaces -- in this case ++ sbrk cannot contiguously expand the heap, but mmap may be able to ++ find space. ++ 3. A call to MORECORE that cannot usually contiguously extend memory. ++ (disabled if not HAVE_MORECORE) ++ */ + ++ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { ++ char* br = CMFAIL; ++ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); ++ size_t asize = 0; ++ ACQUIRE_MORECORE_LOCK(); + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (ss == 0) { /* First time through or recovery */ ++ char* base = (char*)CALL_MORECORE(0); ++ if (base != CMFAIL) { ++ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Adjust to end on a page boundary */ ++ if (!is_page_aligned(base)) ++ asize += (page_align((size_t)base) - (size_t)base); ++ /* Can't call MORECORE if size is negative when treated as signed */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == base) { ++ tbase = base; ++ tsize = asize; ++ } ++ } ++ } ++ else { ++ /* Subtract out existing available top space from MORECORE request. */ ++ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); ++ /* Use mem here only if it did continuously extend old space */ ++ if (asize < HALF_MAX_SIZE_T && ++ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { ++ tbase = br; ++ tsize = asize; ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (tbase == CMFAIL) { /* Cope with partial failure */ ++ if (br != CMFAIL) { /* Try to use/extend the space we did get */ ++ if (asize < HALF_MAX_SIZE_T && ++ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { ++ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); ++ if (esize < HALF_MAX_SIZE_T) { ++ char* end = (char*)CALL_MORECORE(esize); ++ if (end != CMFAIL) ++ asize += esize; ++ else { /* Can't use; try to release */ ++ (void)CALL_MORECORE(-asize); ++ br = CMFAIL; ++ } ++ } ++ } ++ } ++ if (br != CMFAIL) { /* Use the space we did get */ ++ tbase = br; ++ tsize = asize; ++ } ++ else ++ disable_contiguous(m); /* Don't try contiguous path in the future */ ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ RELEASE_MORECORE_LOCK(); ++ } + ++ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ ++ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; ++ size_t rsize = granularity_align(req); ++ if (rsize > nb) { /* Fail if wraps around zero */ ++ char* mp = (char*)(CALL_MMAP(rsize)); ++ if (mp != CMFAIL) { ++ tbase = mp; ++ tsize = rsize; ++ mmap_flag = IS_MMAPPED_BIT; ++ } ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ ++ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); ++ if (asize < HALF_MAX_SIZE_T) { ++ char* br = CMFAIL; ++ char* end = CMFAIL; ++ ACQUIRE_MORECORE_LOCK(); ++ br = (char*)(CALL_MORECORE(asize)); ++ end = (char*)(CALL_MORECORE(0)); ++ RELEASE_MORECORE_LOCK(); ++ if (br != CMFAIL && end != CMFAIL && br < end) { ++ size_t ssize = end - br; ++ if (ssize > nb + TOP_FOOT_SIZE) { ++ tbase = br; ++ tsize = ssize; ++ } ++ } ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (tbase != CMFAIL) { + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if ((m->footprint += tsize) > m->max_footprint) ++ m->max_footprint = m->footprint; + ++ if (!is_initialized(m)) { /* first-time initialization */ ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = tsize; ++ (void)set_segment_flags(&m->seg, mmap_flag); ++ m->magic = mparams.magic; ++ init_bins(m); ++ if (is_global(m)) ++ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); ++ else { ++ /* Offset top by embedded malloc_state */ ++ mchunkptr mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ else { ++ /* Try to merge with an existing segment */ ++ msegmentptr sp = &m->seg; ++ while (sp != 0 && tbase != sp->base + sp->size) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && ++ segment_holds(sp, m->top)) { /* append */ ++ sp->size += tsize; ++ init_top(m, m->top, m->topsize + tsize); ++ } ++ else { ++ if (tbase < m->least_addr) ++ m->least_addr = tbase; ++ sp = &m->seg; ++ while (sp != 0 && sp->base != tbase + tsize) ++ sp = sp->next; ++ if (sp != 0 && ++ !is_extern_segment(sp) && ++ check_segment_merge(sp, tbase, tsize) && ++ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { ++ char* oldbase = sp->base; ++ sp->base = tbase; ++ sp->size += tsize; ++ return prepend_alloc(m, tbase, oldbase, nb); ++ } ++ else ++ add_segment(m, tbase, tsize, mmap_flag); ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (nb < m->topsize) { /* Allocate from new or extended top space */ ++ size_t rsize = m->topsize -= nb; ++ mchunkptr p = m->top; ++ mchunkptr r = m->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(m, p, nb); ++ check_top_chunk(m, m->top); ++ check_malloced_chunk(m, chunk2mem(p), nb); ++ return chunk2mem(p); ++ } ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ MALLOC_FAILURE_ACTION; ++ return 0; ++} + ++/* ----------------------- system deallocation -------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* Unmap and unlink any mmapped segments that don't contain used chunks */ ++static size_t release_unused_segments(mstate m) { ++ size_t released = 0; ++ msegmentptr pred = &m->seg; ++ msegmentptr sp = pred->next; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ msegmentptr next = sp->next; ++ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { ++ mchunkptr p = align_as_chunk(base); ++ size_t psize = chunksize(p); ++ /* Can unmap if first chunk holds entire segment and not pinned */ ++ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { ++ tchunkptr tp = (tchunkptr)p; ++ assert(segment_holds(sp, (char*)sp)); ++ if (p == m->dv) { ++ m->dv = 0; ++ m->dvsize = 0; ++ } ++ else { ++ unlink_large_chunk(m, tp); ++ } ++ if (CALL_MUNMAP(base, size) == 0) { ++ released += size; ++ m->footprint -= size; ++ /* unlink obsoleted record */ ++ sp = pred; ++ sp->next = next; ++ } ++ else { /* back out if cannot unmap */ ++ insert_large_chunk(m, tp, psize); ++ } ++ } ++ } ++ pred = sp; ++ sp = next; ++ } ++ return released; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static int sys_trim(mstate m, size_t pad) { ++ size_t released = 0; ++ if (pad < MAX_REQUEST && is_initialized(m)) { ++ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (m->topsize > pad) { ++ /* Shrink top space in granularity-size units, keeping at least one */ ++ size_t unit = mparams.granularity; ++ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - ++ SIZE_T_ONE) * unit; ++ msegmentptr sp = segment_holding(m, (char*)m->top); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (!is_extern_segment(sp)) { ++ if (is_mmapped_segment(sp)) { ++ if (HAVE_MMAP && ++ sp->size >= extra && ++ !has_segment_link(m, sp)) { /* can't shrink if pinned */ ++ size_t newsize = sp->size - extra; ++ /* Prefer mremap, fall back to munmap */ ++ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || ++ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { ++ released = extra; ++ } ++ } ++ } ++ else if (HAVE_MORECORE) { ++ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ ++ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; ++ ACQUIRE_MORECORE_LOCK(); ++ { ++ /* Make sure end of memory is where we last set it. */ ++ char* old_br = (char*)(CALL_MORECORE(0)); ++ if (old_br == sp->base + sp->size) { ++ char* rel_br = (char*)(CALL_MORECORE(-extra)); ++ char* new_br = (char*)(CALL_MORECORE(0)); ++ if (rel_br != CMFAIL && new_br < old_br) ++ released = old_br - new_br; ++ } ++ } ++ RELEASE_MORECORE_LOCK(); ++ } ++ } + ++ if (released != 0) { ++ sp->size -= released; ++ m->footprint -= released; ++ init_top(m, m->top, m->topsize - released); ++ check_top_chunk(m, m->top); ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Unmap any unused mmapped segments */ ++ if (HAVE_MMAP) ++ released += release_unused_segments(m); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* On failure, disable autotrim to avoid repeated failed future calls */ ++ if (released == 0) ++ m->trim_check = MAX_SIZE_T; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return (released != 0)? 1 : 0; ++} + ++/* ---------------------------- malloc support --------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* allocate a large request from the best fitting chunk in a treebin */ ++static void* tmalloc_large(mstate m, size_t nb) { ++ tchunkptr v = 0; ++ size_t rsize = -nb; /* Unsigned negation */ ++ tchunkptr t; ++ bindex_t idx; ++ compute_tree_index(nb, idx); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if ((t = *treebin_at(m, idx)) != 0) { ++ /* Traverse tree for this bin looking for node with size == nb */ ++ size_t sizebits = nb << leftshift_for_tree_index(idx); ++ tchunkptr rst = 0; /* The deepest untaken right subtree */ ++ for (;;) { ++ tchunkptr rt; ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ v = t; ++ if ((rsize = trem) == 0) ++ break; ++ } ++ rt = t->child[1]; ++ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; ++ if (rt != 0 && rt != t) ++ rst = rt; ++ if (t == 0) { ++ t = rst; /* set t to least subtree holding sizes > nb */ ++ break; ++ } ++ sizebits <<= 1; ++ } ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ ++ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; ++ if (leftbits != 0) { ++ bindex_t i; ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ t = *treebin_at(m, i); ++ } ++ } + ++ while (t != 0) { /* find smallest of tree or subtree */ ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ t = leftmost_child(t); ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* If dv is a better fit, return 0 so malloc will use it */ ++ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { ++ if (RTCHECK(ok_address(m, v))) { /* split */ ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ insert_chunk(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } ++ CORRUPTION_ERROR_ACTION(m); ++ } ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* allocate a small request from the best fitting chunk in a treebin */ ++static void* tmalloc_small(mstate m, size_t nb) { ++ tchunkptr t, v; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leastbit = least_bit(m->treemap); ++ compute_bit2idx(leastbit, i); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ v = t = *treebin_at(m, i); ++ rsize = chunksize(t) - nb; + ++ while ((t = leftmost_child(t)) != 0) { ++ size_t trem = chunksize(t) - nb; ++ if (trem < rsize) { ++ rsize = trem; ++ v = t; ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (RTCHECK(ok_address(m, v))) { ++ mchunkptr r = chunk_plus_offset(v, nb); ++ assert(chunksize(v) == rsize + nb); ++ if (RTCHECK(ok_next(v, r))) { ++ unlink_large_chunk(m, v); ++ if (rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(m, v, (rsize + nb)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(m, v, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(m, r, rsize); ++ } ++ return chunk2mem(v); ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ CORRUPTION_ERROR_ACTION(m); ++ return 0; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++/* --------------------------- realloc support --------------------------- */ + ++static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { ++ if (bytes >= MAX_REQUEST) { ++ MALLOC_FAILURE_ACTION; ++ return 0; ++ } ++ if (!PREACTION(m)) { ++ mchunkptr oldp = mem2chunk(oldmem); ++ size_t oldsize = chunksize(oldp); ++ mchunkptr next = chunk_plus_offset(oldp, oldsize); ++ mchunkptr newp = 0; ++ void* extra = 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* Try to either shrink or extend into top. Else malloc-copy-free */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && ++ ok_next(oldp, next) && ok_pinuse(next))) { ++ size_t nb = request2size(bytes); ++ if (is_mmapped(oldp)) ++ newp = mmap_resize(m, oldp, nb); ++ else if (oldsize >= nb) { /* already big enough */ ++ size_t rsize = oldsize - nb; ++ newp = oldp; ++ if (rsize >= MIN_CHUNK_SIZE) { ++ mchunkptr remainder = chunk_plus_offset(newp, nb); ++ set_inuse(m, newp, nb); ++ set_inuse(m, remainder, rsize); ++ extra = chunk2mem(remainder); ++ } ++ } ++ else if (next == m->top && oldsize + m->topsize > nb) { ++ /* Expand into top */ ++ size_t newsize = oldsize + m->topsize; ++ size_t newtopsize = newsize - nb; ++ mchunkptr newtop = chunk_plus_offset(oldp, nb); ++ set_inuse(m, oldp, nb); ++ newtop->head = newtopsize |PINUSE_BIT; ++ m->top = newtop; ++ m->topsize = newtopsize; ++ newp = oldp; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(m, oldmem); ++ POSTACTION(m); ++ return 0; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ POSTACTION(m); + ++ if (newp != 0) { ++ if (extra != 0) { ++ internal_free(m, extra); ++ } ++ check_inuse_chunk(m, newp); ++ return chunk2mem(newp); ++ } ++ else { ++ void* newmem = internal_malloc(m, bytes); ++ if (newmem != 0) { ++ size_t oc = oldsize - overhead_for(oldp); ++ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); ++ internal_free(m, oldmem); ++ } ++ return newmem; ++ } ++ } ++ return 0; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* --------------------------- memalign support -------------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { ++ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ ++ return internal_malloc(m, bytes); ++ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ ++ alignment = MIN_CHUNK_SIZE; ++ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ ++ size_t a = MALLOC_ALIGNMENT << 1; ++ while (a < alignment) a <<= 1; ++ alignment = a; ++ } ++ ++ if (bytes >= MAX_REQUEST - alignment) { ++ if (m != 0) { /* Test isn't needed but avoids compiler warning */ ++ MALLOC_FAILURE_ACTION; ++ } ++ } ++ else { ++ size_t nb = request2size(bytes); ++ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; ++ char* mem = (char*)internal_malloc(m, req); ++ if (mem != 0) { ++ void* leader = 0; ++ void* trailer = 0; ++ mchunkptr p = mem2chunk(mem); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (PREACTION(m)) return 0; ++ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ ++ /* ++ Find an aligned spot inside chunk. Since we need to give ++ back leading space in a chunk of at least MIN_CHUNK_SIZE, if ++ the first calculation places us at a spot with less than ++ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. ++ We've allocated enough total room so that this is always ++ possible. ++ */ ++ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + ++ alignment - ++ SIZE_T_ONE)) & ++ -alignment)); ++ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? ++ br : br+alignment; ++ mchunkptr newp = (mchunkptr)pos; ++ size_t leadsize = pos - (char*)(p); ++ size_t newsize = chunksize(p) - leadsize; + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ ++ newp->prev_foot = p->prev_foot + leadsize; ++ newp->head = (newsize|CINUSE_BIT); ++ } ++ else { /* Otherwise, give back leader, use the rest */ ++ set_inuse(m, newp, newsize); ++ set_inuse(m, p, leadsize); ++ leader = chunk2mem(p); ++ } ++ p = newp; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ /* Give back spare room at the end */ ++ if (!is_mmapped(p)) { ++ size_t size = chunksize(p); ++ if (size > nb + MIN_CHUNK_SIZE) { ++ size_t remainder_size = size - nb; ++ mchunkptr remainder = chunk_plus_offset(p, nb); ++ set_inuse(m, p, nb); ++ set_inuse(m, remainder, remainder_size); ++ trailer = chunk2mem(remainder); ++ } ++ } + ++ assert (chunksize(p) >= nb); ++ assert((((size_t)(chunk2mem(p))) % alignment) == 0); ++ check_inuse_chunk(m, p); ++ POSTACTION(m); ++ if (leader != 0) { ++ internal_free(m, leader); ++ } ++ if (trailer != 0) { ++ internal_free(m, trailer); ++ } ++ return chunk2mem(p); ++ } ++ } ++ return 0; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ------------------------ comalloc/coalloc support --------------------- */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static void** ialloc(mstate m, ++ size_t n_elements, ++ size_t* sizes, ++ int opts, ++ void* chunks[]) { ++ /* ++ This provides common support for independent_X routines, handling ++ all of the combinations that can result. + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ The opts arg has: ++ bit 0 set if all elements are same size (using sizes[0]) ++ bit 1 set if elements should be zeroed ++ */ + ++ size_t element_size; /* chunksize of each element, if all same */ ++ size_t contents_size; /* total size of elements */ ++ size_t array_size; /* request size of pointer array */ ++ void* mem; /* malloced aggregate space */ ++ mchunkptr p; /* corresponding chunk */ ++ size_t remainder_size; /* remaining bytes while splitting */ ++ void** marray; /* either "chunks" or malloced ptr array */ ++ mchunkptr array_chunk; /* chunk for malloced ptr array */ ++ flag_t was_enabled; /* to disable mmap */ ++ size_t size; ++ size_t i; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* compute array length, if needed */ ++ if (chunks != 0) { ++ if (n_elements == 0) ++ return chunks; /* nothing to do */ ++ marray = chunks; ++ array_size = 0; ++ } ++ else { ++ /* if empty req, must still return chunk representing empty array */ ++ if (n_elements == 0) ++ return (void**)internal_malloc(m, 0); ++ marray = 0; ++ array_size = request2size(n_elements * (sizeof(void*))); ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ /* compute total element size */ ++ if (opts & 0x1) { /* all-same-size */ ++ element_size = request2size(*sizes); ++ contents_size = n_elements * element_size; ++ } ++ else { /* add up all the sizes */ ++ element_size = 0; ++ contents_size = 0; ++ for (i = 0; i != n_elements; ++i) ++ contents_size += request2size(sizes[i]); ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ size = contents_size + array_size; + ++ /* ++ Allocate the aggregate chunk. First disable direct-mmapping so ++ malloc won't use it, since we would not be able to later ++ free/realloc space internal to a segregated mmap region. ++ */ ++ was_enabled = use_mmap(m); ++ disable_mmap(m); ++ mem = internal_malloc(m, size - CHUNK_OVERHEAD); ++ if (was_enabled) ++ enable_mmap(m); ++ if (mem == 0) ++ return 0; + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (PREACTION(m)) return 0; ++ p = mem2chunk(mem); ++ remainder_size = chunksize(p); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ assert(!is_mmapped(p)); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (opts & 0x2) { /* optionally clear the elements */ ++ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); ++ } + ++ /* If not provided, allocate the pointer array as final part of chunk */ ++ if (marray == 0) { ++ size_t array_chunk_size; ++ array_chunk = chunk_plus_offset(p, contents_size); ++ array_chunk_size = remainder_size - contents_size; ++ marray = (void**) (chunk2mem(array_chunk)); ++ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); ++ remainder_size = contents_size; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ /* split out elements */ ++ for (i = 0; ; ++i) { ++ marray[i] = chunk2mem(p); ++ if (i != n_elements-1) { ++ if (element_size != 0) ++ size = element_size; ++ else ++ size = request2size(sizes[i]); ++ remainder_size -= size; ++ set_size_and_pinuse_of_inuse_chunk(m, p, size); ++ p = chunk_plus_offset(p, size); ++ } ++ else { /* the final element absorbs any overallocation slop */ ++ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); ++ break; ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++#if DEBUG ++ if (marray != chunks) { ++ /* final element must have exactly exhausted chunk */ ++ if (element_size != 0) { ++ assert(remainder_size == element_size); ++ } ++ else { ++ assert(remainder_size == request2size(sizes[i])); ++ } ++ check_inuse_chunk(m, mem2chunk(marray)); ++ } ++ for (i = 0; i != n_elements; ++i) ++ check_inuse_chunk(m, mem2chunk(marray[i])); + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#endif /* DEBUG */ + ++ POSTACTION(m); ++ return marray; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++/* -------------------------- public routines ---------------------------- */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if !ONLY_MSPACES + ++void* dlmalloc(size_t bytes) { ++ /* ++ Basic algorithm: ++ If a small request (< 256 bytes minus per-chunk overhead): ++ 1. If one exists, use a remainderless chunk in associated smallbin. ++ (Remainderless means that there are too few excess bytes to ++ represent as a chunk.) ++ 2. If it is big enough, use the dv chunk, which is normally the ++ chunk adjacent to the one used for the most recent small request. ++ 3. If one exists, split the smallest available chunk in a bin, ++ saving remainder in dv. ++ 4. If it is big enough, use the top chunk. ++ 5. If available, get memory from system and use it ++ Otherwise, for a large request: ++ 1. Find the smallest available binned chunk that fits, and use it ++ if it is better fitting than dv chunk, splitting if necessary. ++ 2. If better fitting than any binned chunk, use the dv chunk. ++ 3. If it is big enough, use the top chunk. ++ 4. If request size >= mmap threshold, try to directly mmap this chunk. ++ 5. If available, get memory from system and use it + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ The ugly goto's here ensure that postaction occurs along all paths. ++ */ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ if (!PREACTION(gm)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = gm->smallmap >> idx; + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(gm, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(gm, b, p, idx); ++ set_inuse_and_pinuse(gm, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } + ++ else if (nb > gm->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(gm, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(gm, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(gm, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(gm, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (nb <= gm->dvsize) { ++ size_t rsize = gm->dvsize - nb; ++ mchunkptr p = gm->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); ++ gm->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = gm->dvsize; ++ gm->dvsize = 0; ++ gm->dv = 0; ++ set_inuse_and_pinuse(gm, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ else if (nb < gm->topsize) { /* Split top */ ++ size_t rsize = gm->topsize -= nb; ++ mchunkptr p = gm->top; ++ mchunkptr r = gm->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(gm, gm->top); ++ check_malloced_chunk(gm, mem, nb); ++ goto postaction; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ mem = sys_alloc(gm, nb); + ++ postaction: ++ POSTACTION(gm); ++ return mem; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void dlfree(void* mem) { ++ /* ++ Consolidate freed chunks with preceding or succeeding bordering ++ free chunks, if they exist, and then place in a bin. Intermixed ++ with special cases for top, dv, mmapped chunks, and usage errors. ++ */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++#else /* FOOTERS */ ++#define fm gm ++#endif /* FOOTERS */ ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } + ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++#if !FOOTERS ++#undef fm ++#endif /* FOOTERS */ ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++void* dlcalloc(size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = dlmalloc(req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void* dlrealloc(void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return dlmalloc(bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ dlfree(oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if ! FOOTERS ++ mstate m = gm; ++#else /* FOOTERS */ ++ mstate m = get_mstate_for(mem2chunk(oldmem)); ++ if (!ok_magic(m)) { ++ USAGE_ERROR_ACTION(m, oldmem); ++ return 0; ++ } ++#endif /* FOOTERS */ ++ return internal_realloc(m, oldmem, bytes); ++ } ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void* dlmemalign(size_t alignment, size_t bytes) { ++ return internal_memalign(gm, alignment, bytes); ++} + ++void** dlindependent_calloc(size_t n_elements, size_t elem_size, ++ void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ return ialloc(gm, n_elements, &sz, 3, chunks); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++void** dlindependent_comalloc(size_t n_elements, size_t sizes[], ++ void* chunks[]) { ++ return ialloc(gm, n_elements, sizes, 0, chunks); ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++void* dlvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, bytes); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void* dlpvalloc(size_t bytes) { ++ size_t pagesz; ++ init_mparams(); ++ pagesz = mparams.page_size; ++ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); ++} + ++int dlmalloc_trim(size_t pad) { ++ int result = 0; ++ if (!PREACTION(gm)) { ++ result = sys_trim(gm, pad); ++ POSTACTION(gm); ++ } ++ return result; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++size_t dlmalloc_footprint(void) { ++ return gm->footprint; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++size_t dlmalloc_max_footprint(void) { ++ return gm->max_footprint; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#if !NO_MALLINFO ++struct mallinfo dlmallinfo(void) { ++ return internal_mallinfo(gm); ++} ++#endif /* NO_MALLINFO */ + ++void dlmalloc_stats() { ++ internal_malloc_stats(gm); ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++size_t dlmalloc_usable_size(void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++ if (cinuse(p)) ++ return chunksize(p) - overhead_for(p); ++ } ++ return 0; ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++int dlmallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++#endif /* !ONLY_MSPACES */ + ++/* ----------------------------- user mspaces ---------------------------- */ + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++#if MSPACES + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++static mstate init_user_mstate(char* tbase, size_t tsize) { ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ mchunkptr mn; ++ mchunkptr msp = align_as_chunk(tbase); ++ mstate m = (mstate)(chunk2mem(msp)); ++ memset(m, 0, msize); ++ INITIAL_LOCK(&m->mutex); ++ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); ++ m->seg.base = m->least_addr = tbase; ++ m->seg.size = m->footprint = m->max_footprint = tsize; ++ m->magic = mparams.magic; ++ m->mflags = mparams.default_mflags; ++ disable_contiguous(m); ++ init_bins(m); ++ mn = next_chunk(mem2chunk(m)); ++ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); ++ check_top_chunk(m, m->top); ++ return m; ++} + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++mspace create_mspace(size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ + ++ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ size_t rs = ((capacity == 0)? mparams.granularity : ++ (capacity + TOP_FOOT_SIZE + msize)); ++ size_t tsize = granularity_align(rs); ++ char* tbase = (char*)(CALL_MMAP(tsize)); ++ if (tbase != CMFAIL) { ++ m = init_user_mstate(tbase, tsize); ++ set_segment_flags(&m->seg, IS_MMAPPED_BIT); ++ set_lock(m, locked); ++ } ++ } ++ return (mspace)m; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++mspace create_mspace_with_base(void* base, size_t capacity, int locked) { ++ mstate m = 0; ++ size_t msize = pad_request(sizeof(struct malloc_state)); ++ init_mparams(); /* Ensure pagesize etc initialized */ + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (capacity > msize + TOP_FOOT_SIZE && ++ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { ++ m = init_user_mstate((char*)base, capacity); ++ set_segment_flags(&m->seg, EXTERN_BIT); ++ set_lock(m, locked); ++ } ++ return (mspace)m; ++} + ++size_t destroy_mspace(mspace msp) { ++ size_t freed = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ msegmentptr sp = &ms->seg; ++ while (sp != 0) { ++ char* base = sp->base; ++ size_t size = sp->size; ++ flag_t flag = get_segment_flags(sp); ++ sp = sp->next; ++ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && ++ CALL_MUNMAP(base, size) == 0) ++ freed += size; ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return freed; ++} + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++/* ++ mspace versions of routines are near-clones of the global ++ versions. This is not so nice but better than the alternatives. ++*/ + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++void* mspace_malloc(mspace msp, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (!PREACTION(ms)) { ++ void* mem; ++ size_t nb; ++ if (bytes <= MAX_SMALL_REQUEST) { ++ bindex_t idx; ++ binmap_t smallbits; ++ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); ++ idx = small_index(nb); ++ smallbits = ms->smallmap >> idx; + ++ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ ++ mchunkptr b, p; ++ idx += ~smallbits & 1; /* Uses next bin if idx empty */ ++ b = smallbin_at(ms, idx); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(idx)); ++ unlink_first_small_chunk(ms, b, p, idx); ++ set_inuse_and_pinuse(ms, p, small_index2size(idx)); ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ else if (nb > ms->dvsize) { ++ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ ++ mchunkptr b, p, r; ++ size_t rsize; ++ bindex_t i; ++ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); ++ binmap_t leastbit = least_bit(leftbits); ++ compute_bit2idx(leastbit, i); ++ b = smallbin_at(ms, i); ++ p = b->fd; ++ assert(chunksize(p) == small_index2size(i)); ++ unlink_first_small_chunk(ms, b, p, i); ++ rsize = small_index2size(i) - nb; ++ /* Fit here cannot be remainderless if 4byte sizes */ ++ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) ++ set_inuse_and_pinuse(ms, p, small_index2size(i)); ++ else { ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ r = chunk_plus_offset(p, nb); ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ replace_dv(ms, r, rsize); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } ++ } ++ else if (bytes >= MAX_REQUEST) ++ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ ++ else { ++ nb = pad_request(bytes); ++ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ if (nb <= ms->dvsize) { ++ size_t rsize = ms->dvsize - nb; ++ mchunkptr p = ms->dv; ++ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ ++ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); ++ ms->dvsize = rsize; ++ set_size_and_pinuse_of_free_chunk(r, rsize); ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ } ++ else { /* exhaust dv */ ++ size_t dvs = ms->dvsize; ++ ms->dvsize = 0; ++ ms->dv = 0; ++ set_inuse_and_pinuse(ms, p, dvs); ++ } ++ mem = chunk2mem(p); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } + ++ else if (nb < ms->topsize) { /* Split top */ ++ size_t rsize = ms->topsize -= nb; ++ mchunkptr p = ms->top; ++ mchunkptr r = ms->top = chunk_plus_offset(p, nb); ++ r->head = rsize | PINUSE_BIT; ++ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); ++ mem = chunk2mem(p); ++ check_top_chunk(ms, ms->top); ++ check_malloced_chunk(ms, mem, nb); ++ goto postaction; ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ mem = sys_alloc(ms, nb); + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] ++ postaction: ++ POSTACTION(ms); ++ return mem; ++ } + -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] ++ return 0; ++} + ++void mspace_free(mspace msp, void* mem) { ++ if (mem != 0) { ++ mchunkptr p = mem2chunk(mem); ++#if FOOTERS ++ mstate fm = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate fm = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(fm)) { ++ USAGE_ERROR_ACTION(fm, p); ++ return; ++ } ++ if (!PREACTION(fm)) { ++ check_inuse_chunk(fm, p); ++ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { ++ size_t psize = chunksize(p); ++ mchunkptr next = chunk_plus_offset(p, psize); ++ if (!pinuse(p)) { ++ size_t prevsize = p->prev_foot; ++ if ((prevsize & IS_MMAPPED_BIT) != 0) { ++ prevsize &= ~IS_MMAPPED_BIT; ++ psize += prevsize + MMAP_FOOT_PAD; ++ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) ++ fm->footprint -= psize; ++ goto postaction; ++ } ++ else { ++ mchunkptr prev = chunk_minus_offset(p, prevsize); ++ psize += prevsize; ++ p = prev; ++ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ ++ if (p != fm->dv) { ++ unlink_chunk(fm, p, prevsize); ++ } ++ else if ((next->head & INUSE_BITS) == INUSE_BITS) { ++ fm->dvsize = psize; ++ set_free_with_pinuse(p, psize, next); ++ goto postaction; ++ } ++ } ++ else ++ goto erroraction; ++ } ++ } + -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} ++ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { ++ if (!cinuse(next)) { /* consolidate forward */ ++ if (next == fm->top) { ++ size_t tsize = fm->topsize += psize; ++ fm->top = p; ++ p->head = tsize | PINUSE_BIT; ++ if (p == fm->dv) { ++ fm->dv = 0; ++ fm->dvsize = 0; ++ } ++ if (should_trim(fm, tsize)) ++ sys_trim(fm, 0); ++ goto postaction; ++ } ++ else if (next == fm->dv) { ++ size_t dsize = fm->dvsize += psize; ++ fm->dv = p; ++ set_size_and_pinuse_of_free_chunk(p, dsize); ++ goto postaction; ++ } ++ else { ++ size_t nsize = chunksize(next); ++ psize += nsize; ++ unlink_chunk(fm, next, nsize); ++ set_size_and_pinuse_of_free_chunk(p, psize); ++ if (p == fm->dv) { ++ fm->dvsize = psize; ++ goto postaction; ++ } ++ } ++ } ++ else ++ set_free_with_pinuse(p, psize, next); ++ insert_chunk(fm, p, psize); ++ check_free_chunk(fm, p); ++ goto postaction; ++ } ++ } ++ erroraction: ++ USAGE_ERROR_ACTION(fm, p); ++ postaction: ++ POSTACTION(fm); ++ } ++ } ++} + -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ // trampoline -+ // Save to stack -+ stmfd sp!, {r0-r3} -+ -+ // Load the context argument from the config page. -+ // This places the first usable config value at _ffi_closure_trampoline_table-4080 -+ // This accounts for the above 4-byte stmfd instruction, plus 8 bytes constant when loading from pc. -+ ldr r0, [pc, #-4092] -+ -+ // Load the jump address from the config page. -+ ldr pc, [pc, #-4092] -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c ---- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-04-26 08:17:59.000000000 +0800 -@@ -0,0 +1,688 @@ -+/* ----------------------------------------------------------------------- -+ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. -+ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ -+ Code to allocate and deallocate memory for closures. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#if defined __linux__ && !defined _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif -+ -+#include -+#include -+ -+#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -+# if __gnu_linux__ && !defined(__ANDROID__) -+/* This macro indicates it may be forbidden to map anonymous memory -+ with both write and execute permission. Code compiled when this -+ option is defined will attempt to map such pages once, but if it -+ fails, it falls back to creating a temporary file in a writable and -+ executable filesystem and mapping pages from it into separate -+ locations in the virtual memory space, one location writable and -+ another executable. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# define HAVE_MNTENT 1 -+# endif -+# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -+/* Windows systems may have Data Execution Protection (DEP) enabled, -+ which requires the use of VirtualMalloc/VirtualFree to alloc/free -+ executable memory. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# endif -+#endif -+ -+#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -+# ifdef __linux__ -+/* When defined to 1 check for SELinux and if SELinux is active, -+ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that -+ might cause audit messages. */ -+# define FFI_MMAP_EXEC_SELINUX 1 -+# endif -+#endif -+ -+#if FFI_CLOSURES -+ -+# if FFI_EXEC_TRAMPOLINE_TABLE -+ -+// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. -+ -+# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+#define USE_LOCKS 1 -+#define USE_DL_PREFIX 1 -+#ifdef __GNUC__ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 1 -+#endif -+#endif -+ -+/* We need to use mmap, not sbrk. */ -+#define HAVE_MORECORE 0 -+ -+/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -+#define HAVE_MREMAP 0 -+ -+/* We have no use for this, so save some code and data. */ -+#define NO_MALLINFO 1 -+ -+/* We need all allocations to be in regular segments, otherwise we -+ lose track of the corresponding code address. */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+ -+/* Don't allocate more than a page unless needed. */ -+#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) -+ -+#if FFI_CLOSURE_TEST -+/* Don't release single pages, to avoid a worst-case scenario of -+ continuously allocating and releasing single pages, but release -+ pairs of pages, which should do just as well given that allocations -+ are likely to be small. */ -+#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) -+#endif -+ -+#include -+#include -+#include -+#include -+#ifndef _MSC_VER -+#include -+#endif -+#include -+#include -+#if !defined(X86_WIN32) && !defined(X86_WIN64) -+#ifdef HAVE_MNTENT -+#include -+#endif /* HAVE_MNTENT */ -+#include -+#include -+ -+/* We don't want sys/mman.h to be included after we redefine mmap and -+ dlmunmap. */ -+#include -+#define LACKS_SYS_MMAN_H 1 -+ -+#if FFI_MMAP_EXEC_SELINUX -+#include -+#include -+ -+static int selinux_enabled = -1; -+ -+static int -+selinux_enabled_check (void) -+{ -+ struct statfs sfs; -+ FILE *f; -+ char *buf = NULL; -+ size_t len = 0; -+ -+ if (statfs ("/selinux", &sfs) >= 0 -+ && (unsigned int) sfs.f_type == 0xf97cff8cU) -+ return 1; -+ f = fopen ("/proc/mounts", "r"); -+ if (f == NULL) -+ return 0; -+ while (getline (&buf, &len, f) >= 0) -+ { -+ char *p = strchr (buf, ' '); -+ if (p == NULL) -+ break; -+ p = strchr (p + 1, ' '); -+ if (p == NULL) -+ break; -+ if (strncmp (p + 1, "selinuxfs ", 10) == 0) -+ { -+ free (buf); -+ fclose (f); -+ return 1; -+ } -+ } -+ free (buf); -+ fclose (f); -+ return 0; -+} -+ -+#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ -+ : (selinux_enabled = selinux_enabled_check ())) -+ -+#else -+ -+#define is_selinux_enabled() 0 -+ -+#endif /* !FFI_MMAP_EXEC_SELINUX */ -+ -+/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ -+#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#include -+ -+static int emutramp_enabled = -1; -+ -+static int -+emutramp_enabled_check (void) -+{ -+ char *buf = NULL; -+ size_t len = 0; -+ FILE *f; -+ int ret; -+ f = fopen ("/proc/self/status", "r"); -+ if (f == NULL) -+ return 0; -+ ret = 0; -+ -+ while (getline (&buf, &len, f) != -1) -+ if (!strncmp (buf, "PaX:", 4)) -+ { -+ char emutramp; -+ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) -+ ret = (emutramp == 'E'); -+ break; -+ } -+ free (buf); -+ fclose (f); -+ return ret; -+} -+ -+#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ -+ : (emutramp_enabled = emutramp_enabled_check ())) -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+#elif defined (__CYGWIN__) || defined(__INTERIX) -+ -+#include -+ -+/* Cygwin is Linux-like, but not quite that Linux-like. */ -+#define is_selinux_enabled() 0 -+ -+#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ -+ -+#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#define is_emutramp_enabled() 0 -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Declare all functions defined in dlmalloc.c as static. */ -+static void *dlmalloc(size_t); -+static void dlfree(void*); -+static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -+static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -+static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -+static void *dlvalloc(size_t) MAYBE_UNUSED; -+static int dlmallopt(int, int) MAYBE_UNUSED; -+static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -+static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -+static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -+static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -+static void *dlpvalloc(size_t) MAYBE_UNUSED; -+static int dlmalloc_trim(size_t) MAYBE_UNUSED; -+static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -+static void dlmalloc_stats(void) MAYBE_UNUSED; -+ -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+/* Use these for mmap and munmap within dlmalloc.c. */ -+static void *dlmmap(void *, size_t, int, int, int, off_t); -+static int dlmunmap(void *, size_t); -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ -+ -+#define mmap dlmmap -+#define munmap dlmunmap -+ -+#include "dlmalloc.c" -+ -+#undef mmap -+#undef munmap -+ -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+ -+/* A mutex used to synchronize access to *exec* variables in this file. */ -+static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; -+ -+/* A file descriptor of a temporary file from which we'll map -+ executable pages. */ -+static int execfd = -1; -+ -+/* The amount of space already allocated from the temporary file. */ -+static size_t execsize = 0; -+ -+/* Open a temporary file name, and immediately unlink it. */ -+static int -+open_temp_exec_file_name (char *name, int flags) -+{ -+ int fd; -+ -+#ifdef HAVE_MKOSTEMP -+ fd = mkostemp (name, flags); -+#else -+ fd = mkstemp (name); -+#endif -+ -+ if (fd != -1) -+ unlink (name); -+ -+ return fd; -+} -+ -+/* Open a temporary file in the named directory. */ -+static int -+open_temp_exec_file_dir (const char *dir) -+{ -+ static const char suffix[] = "/ffiXXXXXX"; -+ int lendir, flags; -+ char *tempname; -+#ifdef O_TMPFILE -+ int fd; -+#endif -+ -+#ifdef O_CLOEXEC -+ flags = O_CLOEXEC; -+#else -+ flags = 0; -+#endif -+ -+#ifdef O_TMPFILE -+ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); -+ /* If the running system does not support the O_TMPFILE flag then retry without it. */ -+ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { -+ return fd; -+ } else { -+ errno = 0; -+ } -+#endif -+ -+ lendir = strlen (dir); -+ tempname = __builtin_alloca (lendir + sizeof (suffix)); -+ -+ if (!tempname) -+ return -1; -+ -+ memcpy (tempname, dir, lendir); -+ memcpy (tempname + lendir, suffix, sizeof (suffix)); -+ -+ return open_temp_exec_file_name (tempname, flags); -+} -+ -+/* Open a temporary file in the directory in the named environment -+ variable. */ -+static int -+open_temp_exec_file_env (const char *envvar) -+{ -+ const char *value = getenv (envvar); -+ -+ if (!value) -+ return -1; -+ -+ return open_temp_exec_file_dir (value); -+} -+ -+#ifdef HAVE_MNTENT -+/* Open a temporary file in an executable and writable mount point -+ listed in the mounts file. Subsequent calls with the same mounts -+ keep searching for mount points in the same file. Providing NULL -+ as the mounts file closes the file. */ -+static int -+open_temp_exec_file_mnt (const char *mounts) -+{ -+ static const char *last_mounts; -+ static FILE *last_mntent; -+ -+ if (mounts != last_mounts) -+ { -+ if (last_mntent) -+ endmntent (last_mntent); -+ -+ last_mounts = mounts; -+ -+ if (mounts) -+ last_mntent = setmntent (mounts, "r"); -+ else -+ last_mntent = NULL; -+ } -+ -+ if (!last_mntent) -+ return -1; -+ -+ for (;;) -+ { -+ int fd; -+ struct mntent mnt; -+ char buf[MAXPATHLEN * 3]; -+ -+ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) -+ return -1; -+ -+ if (hasmntopt (&mnt, "ro") -+ || hasmntopt (&mnt, "noexec") -+ || access (mnt.mnt_dir, W_OK)) -+ continue; -+ -+ fd = open_temp_exec_file_dir (mnt.mnt_dir); -+ -+ if (fd != -1) -+ return fd; -+ } -+} -+#endif /* HAVE_MNTENT */ -+ -+/* Instructions to look for a location to hold a temporary file that -+ can be mapped in for execution. */ -+static struct -+{ -+ int (*func)(const char *); -+ const char *arg; -+ int repeat; -+} open_temp_exec_file_opts[] = { -+ { open_temp_exec_file_env, "TMPDIR", 0 }, -+ { open_temp_exec_file_dir, "/tmp", 0 }, -+ { open_temp_exec_file_dir, "/var/tmp", 0 }, -+ { open_temp_exec_file_dir, "/dev/shm", 0 }, -+ { open_temp_exec_file_env, "HOME", 0 }, -+#ifdef HAVE_MNTENT -+ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, -+ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -+#endif /* HAVE_MNTENT */ -+}; -+ -+/* Current index into open_temp_exec_file_opts. */ -+static int open_temp_exec_file_opts_idx = 0; -+ -+/* Reset a current multi-call func, then advances to the next entry. -+ If we're at the last, go back to the first and return nonzero, -+ otherwise return zero. */ -+static int -+open_temp_exec_file_opts_next (void) -+{ -+ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); -+ -+ open_temp_exec_file_opts_idx++; -+ if (open_temp_exec_file_opts_idx -+ == (sizeof (open_temp_exec_file_opts) -+ / sizeof (*open_temp_exec_file_opts))) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ return 1; -+ } -+ -+ return 0; -+} -+ -+/* Return a file descriptor of a temporary zero-sized file in a -+ writable and executable filesystem. */ -+static int -+open_temp_exec_file (void) -+{ -+ int fd; -+ -+ do -+ { -+ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func -+ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); -+ -+ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat -+ || fd == -1) -+ { -+ if (open_temp_exec_file_opts_next ()) -+ break; -+ } -+ } -+ while (fd == -1); -+ -+ return fd; -+} -+ -+/* Map in a chunk of memory from the temporary exec file into separate -+ locations in the virtual memory address space, one writable and one -+ executable. Returns the address of the writable portion, after -+ storing an offset to the corresponding executable portion at the -+ last word of the requested chunk. */ -+static void * -+dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -+{ -+ void *ptr; -+ -+ if (execfd == -1) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ retry_open: -+ execfd = open_temp_exec_file (); -+ if (execfd == -1) -+ return MFAIL; -+ } -+ -+ offset = execsize; -+ -+ if (ftruncate (execfd, offset + length)) -+ return MFAIL; -+ -+ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); -+ flags |= MAP_SHARED; -+ -+ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, -+ flags, execfd, offset); -+ if (ptr == MFAIL) -+ { -+ if (!offset) -+ { -+ close (execfd); -+ goto retry_open; -+ } -+ ftruncate (execfd, offset); -+ return MFAIL; -+ } -+ else if (!offset -+ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts_next (); -+ -+ start = mmap (start, length, prot, flags, execfd, offset); -+ -+ if (start == MFAIL) -+ { -+ munmap (ptr, length); -+ ftruncate (execfd, offset); -+ return start; -+ } -+ -+ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; -+ -+ execsize += length; -+ -+ return start; -+} -+ -+/* Map in a writable and executable chunk of memory if possible. -+ Failing that, fall back to dlmmap_locked. */ -+static void * -+dlmmap (void *start, size_t length, int prot, -+ int flags, int fd, off_t offset) -+{ -+ void *ptr; -+ -+ assert (start == NULL && length % malloc_getpagesize == 0 -+ && prot == (PROT_READ | PROT_WRITE) -+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) -+ && fd == -1 && offset == 0); -+ -+#if FFI_CLOSURE_TEST -+ printf ("mapping in %zi\n", length); -+#endif -+ -+ if (execfd == -1 && is_emutramp_enabled ()) -+ { -+ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); -+ return ptr; -+ } -+ -+ if (execfd == -1 && !is_selinux_enabled ()) -+ { -+ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); -+ -+ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) -+ /* Cool, no need to mess with separate segments. */ -+ return ptr; -+ -+ /* If MREMAP_DUP is ever introduced and implemented, try mmap -+ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with -+ MREMAP_DUP and prot at this point. */ -+ } -+ -+ if (execsize == 0 || execfd == -1) -+ { -+ pthread_mutex_lock (&open_temp_exec_file_mutex); -+ ptr = dlmmap_locked (start, length, prot, flags, offset); -+ pthread_mutex_unlock (&open_temp_exec_file_mutex); -+ -+ return ptr; -+ } -+ -+ return dlmmap_locked (start, length, prot, flags, offset); -+} -+ -+/* Release memory at the given address, as well as the corresponding -+ executable page if it's separate. */ -+static int -+dlmunmap (void *start, size_t length) -+{ -+ /* We don't bother decreasing execsize or truncating the file, since -+ we can't quite tell whether we're unmapping the end of the file. -+ We don't expect frequent deallocation anyway. If we did, we -+ could locate pages in the file by writing to the pages being -+ deallocated and checking that the file contents change. -+ Yuck. */ -+ msegmentptr seg = segment_holding (gm, start); -+ void *code; -+ -+#if FFI_CLOSURE_TEST -+ printf ("unmapping %zi\n", length); -+#endif -+ -+ if (seg && (code = add_segment_exec_offset (start, seg)) != start) -+ { -+ int ret = munmap (code, length); -+ if (ret) -+ return ret; -+ } -+ -+ return munmap (start, length); -+} -+ -+#if FFI_CLOSURE_FREE_CODE -+/* Return segment holding given code address. */ -+static msegmentptr -+segment_holding_code (mstate m, char* addr) -+{ -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= add_segment_exec_offset (sp->base, sp) -+ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+#endif -+ -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ -+ -+/* Allocate a chunk of memory with the given size. Returns a pointer -+ to the writable address, and sets *CODE to the executable -+ corresponding virtual address. */ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ void *ptr; -+ -+ if (!code) -+ return NULL; -+ -+ ptr = dlmalloc (size); -+ -+ if (ptr) -+ { -+ msegmentptr seg = segment_holding (gm, ptr); -+ -+ *code = add_segment_exec_offset (ptr, seg); -+ } -+ -+ return ptr; -+} -+ -+/* Release a chunk of memory allocated with ffi_closure_alloc. If -+ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the -+ writable or the executable address given. Otherwise, only the -+ writable address can be provided here. */ -+void -+ffi_closure_free (void *ptr) -+{ -+#if FFI_CLOSURE_FREE_CODE -+ msegmentptr seg = segment_holding_code (gm, ptr); -+ -+ if (seg) -+ ptr = sub_segment_exec_offset (ptr, seg); -+#endif -+ -+ dlfree (ptr); -+} -+ -+ -+#if FFI_CLOSURE_TEST -+/* Do some internal sanity testing to make sure allocation and -+ deallocation of pages are working as intended. */ -+int main () -+{ -+ void *p[3]; -+#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -+#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) -+ GET (0, malloc_getpagesize / 2); -+ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); -+ PUT (1); -+ GET (1, 2 * malloc_getpagesize); -+ GET (2, malloc_getpagesize / 2); -+ PUT (1); -+ PUT (0); -+ PUT (2); -+ return 0; -+} -+#endif /* FFI_CLOSURE_TEST */ -+# else /* ! FFI_MMAP_EXEC_WRIT */ -+ -+/* On many systems, memory returned by malloc is writable and -+ executable, so just use it. */ -+ -+#include -+ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ if (!code) -+ return NULL; -+ -+ return *code = malloc (size); -+} -+ -+void -+ffi_closure_free (void *ptr) -+{ -+ free (ptr); -+} -+ -+# endif /* ! FFI_MMAP_EXEC_WRIT */ -+#endif /* FFI_CLOSURES */ -diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c ---- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-04-26 09:40:43.000000000 +0800 -@@ -0,0 +1,5161 @@ -+/* -+ This is a version (aka dlmalloc) of malloc/free/realloc written by -+ Doug Lea and released to the public domain, as explained at -+ http://creativecommons.org/licenses/publicdomain. Send questions, -+ comments, complaints, performance data, etc to dl@cs.oswego.edu -+ -+* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) -+ -+ Note: There may be an updated version of this malloc obtainable at -+ ftp://gee.cs.oswego.edu/pub/misc/malloc.c -+ Check before installing! -+ -+* Quickstart -+ -+ This library is all in one file to simplify the most common usage: -+ ftp it, compile it (-O3), and link it into another program. All of -+ the compile-time options default to reasonable values for use on -+ most platforms. You might later want to step through various -+ compile-time and dynamic tuning options. -+ -+ For convenience, an include file for code using this malloc is at: -+ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h -+ You don't really need this .h file unless you call functions not -+ defined in your system include files. The .h file contains only the -+ excerpts from this file needed for using this malloc on ANSI C/C++ -+ systems, so long as you haven't changed compile-time options about -+ naming and tuning parameters. If you do, then you can create your -+ own malloc.h that does include all settings by cutting at the point -+ indicated below. Note that you may already by default be using a C -+ library containing a malloc that is based on some version of this -+ malloc (for example in linux). You might still want to use the one -+ in this file to customize settings or to avoid overheads associated -+ with library versions. -+ -+* Vital statistics: -+ -+ Supported pointer/size_t representation: 4 or 8 bytes -+ size_t MUST be an unsigned type of the same width as -+ pointers. (If you are using an ancient system that declares -+ size_t as a signed type, or need it to be a different width -+ than pointers, you can use a previous release of this malloc -+ (e.g. 2.7.2) supporting these.) -+ -+ Alignment: 8 bytes (default) -+ This suffices for nearly all current machines and C compilers. -+ However, you can define MALLOC_ALIGNMENT to be wider than this -+ if necessary (up to 128bytes), at the expense of using more space. -+ -+ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) -+ 8 or 16 bytes (if 8byte sizes) -+ Each malloced chunk has a hidden word of overhead holding size -+ and status information, and additional cross-check word -+ if FOOTERS is defined. -+ -+ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) -+ 8-byte ptrs: 32 bytes (including overhead) -+ -+ Even a request for zero bytes (i.e., malloc(0)) returns a -+ pointer to something of the minimum allocatable size. -+ The maximum overhead wastage (i.e., number of extra bytes -+ allocated than were requested in malloc) is less than or equal -+ to the minimum size, except for requests >= mmap_threshold that -+ are serviced via mmap(), where the worst case wastage is about -+ 32 bytes plus the remainder from a system page (the minimal -+ mmap unit); typically 4096 or 8192 bytes. -+ -+ Security: static-safe; optionally more or less -+ The "security" of malloc refers to the ability of malicious -+ code to accentuate the effects of errors (for example, freeing -+ space that is not currently malloc'ed or overwriting past the -+ ends of chunks) in code that calls malloc. This malloc -+ guarantees not to modify any memory locations below the base of -+ heap, i.e., static variables, even in the presence of usage -+ errors. The routines additionally detect most improper frees -+ and reallocs. All this holds as long as the static bookkeeping -+ for malloc itself is not corrupted by some other means. This -+ is only one aspect of security -- these checks do not, and -+ cannot, detect all possible programming errors. -+ -+ If FOOTERS is defined nonzero, then each allocated chunk -+ carries an additional check word to verify that it was malloced -+ from its space. These check words are the same within each -+ execution of a program using malloc, but differ across -+ executions, so externally crafted fake chunks cannot be -+ freed. This improves security by rejecting frees/reallocs that -+ could corrupt heap memory, in addition to the checks preventing -+ writes to statics that are always on. This may further improve -+ security at the expense of time and space overhead. (Note that -+ FOOTERS may also be worth using with MSPACES.) -+ -+ By default detected errors cause the program to abort (calling -+ "abort()"). You can override this to instead proceed past -+ errors by defining PROCEED_ON_ERROR. In this case, a bad free -+ has no effect, and a malloc that encounters a bad address -+ caused by user overwrites will ignore the bad address by -+ dropping pointers and indices to all known memory. This may -+ be appropriate for programs that should continue if at all -+ possible in the face of programming errors, although they may -+ run out of memory because dropped memory is never reclaimed. -+ -+ If you don't like either of these options, you can define -+ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything -+ else. And if if you are sure that your program using malloc has -+ no errors or vulnerabilities, you can define INSECURE to 1, -+ which might (or might not) provide a small performance improvement. -+ -+ Thread-safety: NOT thread-safe unless USE_LOCKS defined -+ When USE_LOCKS is defined, each public call to malloc, free, -+ etc is surrounded with either a pthread mutex or a win32 -+ spinlock (depending on WIN32). This is not especially fast, and -+ can be a major bottleneck. It is designed only to provide -+ minimal protection in concurrent environments, and to provide a -+ basis for extensions. If you are using malloc in a concurrent -+ program, consider instead using ptmalloc, which is derived from -+ a version of this malloc. (See http://www.malloc.de). -+ -+ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP -+ This malloc can use unix sbrk or any emulation (invoked using -+ the CALL_MORECORE macro) and/or mmap/munmap or any emulation -+ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system -+ memory. On most unix systems, it tends to work best if both -+ MORECORE and MMAP are enabled. On Win32, it uses emulations -+ based on VirtualAlloc. It also uses common C library functions -+ like memset. -+ -+ Compliance: I believe it is compliant with the Single Unix Specification -+ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably -+ others as well. -+ -+* Overview of algorithms -+ -+ This is not the fastest, most space-conserving, most portable, or -+ most tunable malloc ever written. However it is among the fastest -+ while also being among the most space-conserving, portable and -+ tunable. Consistent balance across these factors results in a good -+ general-purpose allocator for malloc-intensive programs. -+ -+ In most ways, this malloc is a best-fit allocator. Generally, it -+ chooses the best-fitting existing chunk for a request, with ties -+ broken in approximately least-recently-used order. (This strategy -+ normally maintains low fragmentation.) However, for requests less -+ than 256bytes, it deviates from best-fit when there is not an -+ exactly fitting available chunk by preferring to use space adjacent -+ to that used for the previous small request, as well as by breaking -+ ties in approximately most-recently-used order. (These enhance -+ locality of series of small allocations.) And for very large requests -+ (>= 256Kb by default), it relies on system memory mapping -+ facilities, if supported. (This helps avoid carrying around and -+ possibly fragmenting memory used only for large chunks.) -+ -+ All operations (except malloc_stats and mallinfo) have execution -+ times that are bounded by a constant factor of the number of bits in -+ a size_t, not counting any clearing in calloc or copying in realloc, -+ or actions surrounding MORECORE and MMAP that have times -+ proportional to the number of non-contiguous regions returned by -+ system allocation routines, which is often just 1. -+ -+ The implementation is not very modular and seriously overuses -+ macros. Perhaps someday all C compilers will do as good a job -+ inlining modular code as can now be done by brute-force expansion, -+ but now, enough of them seem not to. -+ -+ Some compilers issue a lot of warnings about code that is -+ dead/unreachable only on some platforms, and also about intentional -+ uses of negation on unsigned types. All known cases of each can be -+ ignored. -+ -+ For a longer but out of date high-level description, see -+ http://gee.cs.oswego.edu/dl/html/malloc.html -+ -+* MSPACES -+ If MSPACES is defined, then in addition to malloc, free, etc., -+ this file also defines mspace_malloc, mspace_free, etc. These -+ are versions of malloc routines that take an "mspace" argument -+ obtained using create_mspace, to control all internal bookkeeping. -+ If ONLY_MSPACES is defined, only these versions are compiled. -+ So if you would like to use this allocator for only some allocations, -+ and your system malloc for others, you can compile with -+ ONLY_MSPACES and then do something like... -+ static mspace mymspace = create_mspace(0,0); // for example -+ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) -+ -+ (Note: If you only need one instance of an mspace, you can instead -+ use "USE_DL_PREFIX" to relabel the global malloc.) -+ -+ You can similarly create thread-local allocators by storing -+ mspaces as thread-locals. For example: -+ static __thread mspace tlms = 0; -+ void* tlmalloc(size_t bytes) { -+ if (tlms == 0) tlms = create_mspace(0, 0); -+ return mspace_malloc(tlms, bytes); -+ } -+ void tlfree(void* mem) { mspace_free(tlms, mem); } -+ -+ Unless FOOTERS is defined, each mspace is completely independent. -+ You cannot allocate from one and free to another (although -+ conformance is only weakly checked, so usage errors are not always -+ caught). If FOOTERS is defined, then each chunk carries around a tag -+ indicating its originating mspace, and frees are directed to their -+ originating spaces. -+ -+ ------------------------- Compile-time options --------------------------- -+ -+Be careful in setting #define values for numerical constants of type -+size_t. On some systems, literal values are not automatically extended -+to size_t precision unless they are explicitly casted. -+ -+WIN32 default: defined if _WIN32 defined -+ Defining WIN32 sets up defaults for MS environment and compilers. -+ Otherwise defaults are for unix. -+ -+MALLOC_ALIGNMENT default: (size_t)8 -+ Controls the minimum alignment for malloc'ed chunks. It must be a -+ power of two and at least 8, even on machines for which smaller -+ alignments would suffice. It may be defined as larger than this -+ though. Note however that code and data structures are optimized for -+ the case of 8-byte alignment. -+ -+MSPACES default: 0 (false) -+ If true, compile in support for independent allocation spaces. -+ This is only supported if HAVE_MMAP is true. -+ -+ONLY_MSPACES default: 0 (false) -+ If true, only compile in mspace versions, not regular versions. -+ -+USE_LOCKS default: 0 (false) -+ Causes each call to each public routine to be surrounded with -+ pthread or WIN32 mutex lock/unlock. (If set true, this can be -+ overridden on a per-mspace basis for mspace versions.) -+ -+FOOTERS default: 0 -+ If true, provide extra checking and dispatching by placing -+ information in the footers of allocated chunks. This adds -+ space and time overhead. -+ -+INSECURE default: 0 -+ If true, omit checks for usage errors and heap space overwrites. -+ -+USE_DL_PREFIX default: NOT defined -+ Causes compiler to prefix all public routines with the string 'dl'. -+ This can be useful when you only want to use this malloc in one part -+ of a program, using your regular system malloc elsewhere. -+ -+ABORT default: defined as abort() -+ Defines how to abort on failed checks. On most systems, a failed -+ check cannot die with an "assert" or even print an informative -+ message, because the underlying print routines in turn call malloc, -+ which will fail again. Generally, the best policy is to simply call -+ abort(). It's not very useful to do more than this because many -+ errors due to overwriting will show up as address faults (null, odd -+ addresses etc) rather than malloc-triggered checks, so will also -+ abort. Also, most compilers know that abort() does not return, so -+ can better optimize code conditionally calling it. -+ -+PROCEED_ON_ERROR default: defined as 0 (false) -+ Controls whether detected bad addresses cause them to bypassed -+ rather than aborting. If set, detected bad arguments to free and -+ realloc are ignored. And all bookkeeping information is zeroed out -+ upon a detected overwrite of freed heap space, thus losing the -+ ability to ever return it from malloc again, but enabling the -+ application to proceed. If PROCEED_ON_ERROR is defined, the -+ static variable malloc_corruption_error_count is compiled in -+ and can be examined to see if errors have occurred. This option -+ generates slower code than the default abort policy. -+ -+DEBUG default: NOT defined -+ The DEBUG setting is mainly intended for people trying to modify -+ this code or diagnose problems when porting to new platforms. -+ However, it may also be able to better isolate user errors than just -+ using runtime checks. The assertions in the check routines spell -+ out in more detail the assumptions and invariants underlying the -+ algorithms. The checking is fairly extensive, and will slow down -+ execution noticeably. Calling malloc_stats or mallinfo with DEBUG -+ set will attempt to check every non-mmapped allocated and free chunk -+ in the course of computing the summaries. -+ -+ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) -+ Debugging assertion failures can be nearly impossible if your -+ version of the assert macro causes malloc to be called, which will -+ lead to a cascade of further failures, blowing the runtime stack. -+ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), -+ which will usually make debugging easier. -+ -+MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 -+ The action to take before "return 0" when malloc fails to be able to -+ return memory because there is none available. -+ -+HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES -+ True if this system supports sbrk or an emulation of it. -+ -+MORECORE default: sbrk -+ The name of the sbrk-style system routine to call to obtain more -+ memory. See below for guidance on writing custom MORECORE -+ functions. The type of the argument to sbrk/MORECORE varies across -+ systems. It cannot be size_t, because it supports negative -+ arguments, so it is normally the signed type of the same width as -+ size_t (sometimes declared as "intptr_t"). It doesn't much matter -+ though. Internally, we only call it with arguments less than half -+ the max value of a size_t, which should work across all reasonable -+ possibilities, although sometimes generating compiler warnings. See -+ near the end of this file for guidelines for creating a custom -+ version of MORECORE. -+ -+MORECORE_CONTIGUOUS default: 1 (true) -+ If true, take advantage of fact that consecutive calls to MORECORE -+ with positive arguments always return contiguous increasing -+ addresses. This is true of unix sbrk. It does not hurt too much to -+ set it true anyway, since malloc copes with non-contiguities. -+ Setting it false when definitely non-contiguous saves time -+ and possibly wasted space it would take to discover this though. -+ -+MORECORE_CANNOT_TRIM default: NOT defined -+ True if MORECORE cannot release space back to the system when given -+ negative arguments. This is generally necessary only if you are -+ using a hand-crafted MORECORE function that cannot handle negative -+ arguments. -+ -+HAVE_MMAP default: 1 (true) -+ True if this system supports mmap or an emulation of it. If so, and -+ HAVE_MORECORE is not true, MMAP is used for all system -+ allocation. If set and HAVE_MORECORE is true as well, MMAP is -+ primarily used to directly allocate very large blocks. It is also -+ used as a backup strategy in cases where MORECORE fails to provide -+ space from system. Note: A single call to MUNMAP is assumed to be -+ able to unmap memory that may have be allocated using multiple calls -+ to MMAP, so long as they are adjacent. -+ -+HAVE_MREMAP default: 1 on linux, else 0 -+ If true realloc() uses mremap() to re-allocate large blocks and -+ extend or shrink allocation spaces. -+ -+MMAP_CLEARS default: 1 on unix -+ True if mmap clears memory so calloc doesn't need to. This is true -+ for standard unix mmap using /dev/zero. -+ -+USE_BUILTIN_FFS default: 0 (i.e., not used) -+ Causes malloc to use the builtin ffs() function to compute indices. -+ Some compilers may recognize and intrinsify ffs to be faster than the -+ supplied C version. Also, the case of x86 using gcc is special-cased -+ to an asm instruction, so is already as fast as it can be, and so -+ this setting has no effect. (On most x86s, the asm version is only -+ slightly faster than the C version.) -+ -+malloc_getpagesize default: derive from system includes, or 4096. -+ The system page size. To the extent possible, this malloc manages -+ memory from the system in page-size units. This may be (and -+ usually is) a function rather than a constant. This is ignored -+ if WIN32, where page size is determined using getSystemInfo during -+ initialization. -+ -+USE_DEV_RANDOM default: 0 (i.e., not used) -+ Causes malloc to use /dev/random to initialize secure magic seed for -+ stamping footers. Otherwise, the current time is used. -+ -+NO_MALLINFO default: 0 -+ If defined, don't compile "mallinfo". This can be a simple way -+ of dealing with mismatches between system declarations and -+ those in this file. -+ -+MALLINFO_FIELD_TYPE default: size_t -+ The type of the fields in the mallinfo struct. This was originally -+ defined as "int" in SVID etc, but is more usefully defined as -+ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set -+ -+REALLOC_ZERO_BYTES_FREES default: not defined -+ This should be set if a call to realloc with zero bytes should -+ be the same as a call to free. Some people think it should. Otherwise, -+ since this malloc returns a unique pointer for malloc(0), so does -+ realloc(p, 0). -+ -+LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -+LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -+LACKS_STDLIB_H default: NOT defined unless on WIN32 -+ Define these if your system does not have these header files. -+ You might need to manually insert some of the declarations they provide. -+ -+DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, -+ system_info.dwAllocationGranularity in WIN32, -+ otherwise 64K. -+ Also settable using mallopt(M_GRANULARITY, x) -+ The unit for allocating and deallocating memory from the system. On -+ most systems with contiguous MORECORE, there is no reason to -+ make this more than a page. However, systems with MMAP tend to -+ either require or encourage larger granularities. You can increase -+ this value to prevent system allocation functions to be called so -+ often, especially if they are slow. The value must be at least one -+ page and must be a power of two. Setting to 0 causes initialization -+ to either page size or win32 region size. (Note: In previous -+ versions of malloc, the equivalent of this option was called -+ "TOP_PAD") -+ -+DEFAULT_TRIM_THRESHOLD default: 2MB -+ Also settable using mallopt(M_TRIM_THRESHOLD, x) -+ The maximum amount of unused top-most memory to keep before -+ releasing via malloc_trim in free(). Automatic trimming is mainly -+ useful in long-lived programs using contiguous MORECORE. Because -+ trimming via sbrk can be slow on some systems, and can sometimes be -+ wasteful (in cases where programs immediately afterward allocate -+ more large chunks) the value should be high enough so that your -+ overall system performance would improve by releasing this much -+ memory. As a rough guide, you might set to a value close to the -+ average size of a process (program) running on your system. -+ Releasing this much memory would allow such a process to run in -+ memory. Generally, it is worth tuning trim thresholds when a -+ program undergoes phases where several large chunks are allocated -+ and released in ways that can reuse each other's storage, perhaps -+ mixed with phases where there are no such chunks at all. The trim -+ value must be greater than page size to have any useful effect. To -+ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick -+ some people use of mallocing a huge space and then freeing it at -+ program startup, in an attempt to reserve system memory, doesn't -+ have the intended effect under automatic trimming, since that memory -+ will immediately be returned to the system. -+ -+DEFAULT_MMAP_THRESHOLD default: 256K -+ Also settable using mallopt(M_MMAP_THRESHOLD, x) -+ The request size threshold for using MMAP to directly service a -+ request. Requests of at least this size that cannot be allocated -+ using already-existing space will be serviced via mmap. (If enough -+ normal freed space already exists it is used instead.) Using mmap -+ segregates relatively large chunks of memory so that they can be -+ individually obtained and released from the host system. A request -+ serviced through mmap is never reused by any other request (at least -+ not directly; the system may just so happen to remap successive -+ requests to the same locations). Segregating space in this way has -+ the benefits that: Mmapped space can always be individually released -+ back to the system, which helps keep the system level memory demands -+ of a long-lived program low. Also, mapped memory doesn't become -+ `locked' between other chunks, as can happen with normally allocated -+ chunks, which means that even trimming via malloc_trim would not -+ release them. However, it has the disadvantage that the space -+ cannot be reclaimed, consolidated, and then used to service later -+ requests, as happens with normal chunks. The advantages of mmap -+ nearly always outweigh disadvantages for "large" chunks, but the -+ value of "large" may vary across systems. The default is an -+ empirically derived value that works well in most systems. You can -+ disable mmap by setting to MAX_SIZE_T. -+ -+*/ -+ -+#ifndef WIN32 -+#ifdef _WIN32 -+#define WIN32 1 -+#endif /* _WIN32 */ -+#endif /* WIN32 */ -+#ifdef WIN32 -+#define WIN32_LEAN_AND_MEAN -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_UNISTD_H -+#define LACKS_SYS_PARAM_H -+#define LACKS_SYS_MMAN_H -+#define LACKS_STRING_H -+#define LACKS_STRINGS_H -+#define LACKS_SYS_TYPES_H -+#define LACKS_ERRNO_H -+#define MALLOC_FAILURE_ACTION -+#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ -+#endif /* WIN32 */ -+ -+#ifdef __OS2__ -+#define INCL_DOS -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_SYS_MMAN_H -+#endif /* __OS2__ */ -+ -+#if defined(DARWIN) || defined(_DARWIN) -+/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -+#ifndef HAVE_MORECORE -+#define HAVE_MORECORE 0 -+#define HAVE_MMAP 1 -+#endif /* HAVE_MORECORE */ -+#endif /* DARWIN */ -+ -+#ifndef LACKS_SYS_TYPES_H -+#include /* For size_t */ -+#endif /* LACKS_SYS_TYPES_H */ -+ -+/* The maximum possible size_t value has all bits set */ -+#define MAX_SIZE_T (~(size_t)0) -+ -+#ifndef ONLY_MSPACES -+#define ONLY_MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#ifndef MSPACES -+#if ONLY_MSPACES -+#define MSPACES 1 -+#else /* ONLY_MSPACES */ -+#define MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#endif /* MSPACES */ -+#ifndef MALLOC_ALIGNMENT -+#define MALLOC_ALIGNMENT ((size_t)8U) -+#endif /* MALLOC_ALIGNMENT */ -+#ifndef FOOTERS -+#define FOOTERS 0 -+#endif /* FOOTERS */ -+#ifndef ABORT -+#define ABORT abort() -+#endif /* ABORT */ -+#ifndef ABORT_ON_ASSERT_FAILURE -+#define ABORT_ON_ASSERT_FAILURE 1 -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#ifndef PROCEED_ON_ERROR -+#define PROCEED_ON_ERROR 0 -+#endif /* PROCEED_ON_ERROR */ -+#ifndef USE_LOCKS -+#define USE_LOCKS 0 -+#endif /* USE_LOCKS */ -+#ifndef INSECURE -+#define INSECURE 0 -+#endif /* INSECURE */ -+#ifndef HAVE_MMAP -+#define HAVE_MMAP 1 -+#endif /* HAVE_MMAP */ -+#ifndef MMAP_CLEARS -+#define MMAP_CLEARS 1 -+#endif /* MMAP_CLEARS */ -+#ifndef HAVE_MREMAP -+#ifdef linux -+#define HAVE_MREMAP 1 -+#else /* linux */ -+#define HAVE_MREMAP 0 -+#endif /* linux */ -+#endif /* HAVE_MREMAP */ -+#ifndef MALLOC_FAILURE_ACTION -+#define MALLOC_FAILURE_ACTION errno = ENOMEM; -+#endif /* MALLOC_FAILURE_ACTION */ -+#ifndef HAVE_MORECORE -+#if ONLY_MSPACES -+#define HAVE_MORECORE 0 -+#else /* ONLY_MSPACES */ -+#define HAVE_MORECORE 1 -+#endif /* ONLY_MSPACES */ -+#endif /* HAVE_MORECORE */ -+#if !HAVE_MORECORE -+#define MORECORE_CONTIGUOUS 0 -+#else /* !HAVE_MORECORE */ -+#ifndef MORECORE -+#define MORECORE sbrk -+#endif /* MORECORE */ -+#ifndef MORECORE_CONTIGUOUS -+#define MORECORE_CONTIGUOUS 1 -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* HAVE_MORECORE */ -+#ifndef DEFAULT_GRANULARITY -+#if MORECORE_CONTIGUOUS -+#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -+#else /* MORECORE_CONTIGUOUS */ -+#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* DEFAULT_GRANULARITY */ -+#ifndef DEFAULT_TRIM_THRESHOLD -+#ifndef MORECORE_CANNOT_TRIM -+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -+#else /* MORECORE_CANNOT_TRIM */ -+#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -+#endif /* MORECORE_CANNOT_TRIM */ -+#endif /* DEFAULT_TRIM_THRESHOLD */ -+#ifndef DEFAULT_MMAP_THRESHOLD -+#if HAVE_MMAP -+#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -+#else /* HAVE_MMAP */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+#endif /* HAVE_MMAP */ -+#endif /* DEFAULT_MMAP_THRESHOLD */ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 0 -+#endif /* USE_BUILTIN_FFS */ -+#ifndef USE_DEV_RANDOM -+#define USE_DEV_RANDOM 0 -+#endif /* USE_DEV_RANDOM */ -+#ifndef NO_MALLINFO -+#define NO_MALLINFO 0 -+#endif /* NO_MALLINFO */ -+#ifndef MALLINFO_FIELD_TYPE -+#define MALLINFO_FIELD_TYPE size_t -+#endif /* MALLINFO_FIELD_TYPE */ -+ -+/* -+ mallopt tuning options. SVID/XPG defines four standard parameter -+ numbers for mallopt, normally defined in malloc.h. None of these -+ are used in this malloc, so setting them has no effect. But this -+ malloc does support the following options. -+*/ -+ -+#define M_TRIM_THRESHOLD (-1) -+#define M_GRANULARITY (-2) -+#define M_MMAP_THRESHOLD (-3) -+ -+/* ------------------------ Mallinfo declarations ------------------------ */ -+ -+#if !NO_MALLINFO -+/* -+ This version of malloc supports the standard SVID/XPG mallinfo -+ routine that returns a struct containing usage properties and -+ statistics. It should work on any system that has a -+ /usr/include/malloc.h defining struct mallinfo. The main -+ declaration needed is the mallinfo struct that is returned (by-copy) -+ by mallinfo(). The malloinfo struct contains a bunch of fields that -+ are not even meaningful in this version of malloc. These fields are -+ are instead filled by mallinfo() with other numbers that might be of -+ interest. -+ -+ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a -+ /usr/include/malloc.h file that includes a declaration of struct -+ mallinfo. If so, it is included; else a compliant version is -+ declared below. These must be precisely the same for mallinfo() to -+ work. The original SVID version of this struct, defined on most -+ systems with mallinfo, declares all fields as ints. But some others -+ define as unsigned long. If your system defines the fields using a -+ type of different width than listed here, you MUST #include your -+ system version and #define HAVE_USR_INCLUDE_MALLOC_H. -+*/ -+ -+/* #define HAVE_USR_INCLUDE_MALLOC_H */ -+ -+#ifdef HAVE_USR_INCLUDE_MALLOC_H -+#include "/usr/include/malloc.h" -+#else /* HAVE_USR_INCLUDE_MALLOC_H */ -+ -+/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ -+#define _STRUCT_MALLINFO -+ -+struct mallinfo { -+ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ -+ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ -+ MALLINFO_FIELD_TYPE smblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ -+ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ -+ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ -+ MALLINFO_FIELD_TYPE fordblks; /* total free space */ -+ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -+}; -+ -+#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -+#endif /* NO_MALLINFO */ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+#if !ONLY_MSPACES -+ -+/* ------------------- Declarations of public routines ------------------- */ -+ -+#ifndef USE_DL_PREFIX -+#define dlcalloc calloc -+#define dlfree free -+#define dlmalloc malloc -+#define dlmemalign memalign -+#define dlrealloc realloc -+#define dlvalloc valloc -+#define dlpvalloc pvalloc -+#define dlmallinfo mallinfo -+#define dlmallopt mallopt -+#define dlmalloc_trim malloc_trim -+#define dlmalloc_stats malloc_stats -+#define dlmalloc_usable_size malloc_usable_size -+#define dlmalloc_footprint malloc_footprint -+#define dlmalloc_max_footprint malloc_max_footprint -+#define dlindependent_calloc independent_calloc -+#define dlindependent_comalloc independent_comalloc -+#endif /* USE_DL_PREFIX */ -+ -+ -+/* -+ malloc(size_t n) -+ Returns a pointer to a newly allocated chunk of at least n bytes, or -+ null if no space is available, in which case errno is set to ENOMEM -+ on ANSI C systems. -+ -+ If n is zero, malloc returns a minimum-sized chunk. (The minimum -+ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit -+ systems.) Note that size_t is an unsigned type, so calls with -+ arguments that would be negative if signed are interpreted as -+ requests for huge amounts of space, which will often fail. The -+ maximum supported value of n differs across systems, but is in all -+ cases less than the maximum representable value of a size_t. -+*/ -+void* dlmalloc(size_t); -+ -+/* -+ free(void* p) -+ Releases the chunk of memory pointed to by p, that had been previously -+ allocated using malloc or a related routine such as realloc. -+ It has no effect if p is null. If p was not malloced or already -+ freed, free(p) will by default cause the current program to abort. -+*/ -+void dlfree(void*); -+ -+/* -+ calloc(size_t n_elements, size_t element_size); -+ Returns a pointer to n_elements * element_size bytes, with all locations -+ set to zero. -+*/ -+void* dlcalloc(size_t, size_t); -+ -+/* -+ realloc(void* p, size_t n) -+ Returns a pointer to a chunk of size n that contains the same data -+ as does chunk p up to the minimum of (n, p's size) bytes, or null -+ if no space is available. -+ -+ The returned pointer may or may not be the same as p. The algorithm -+ prefers extending p in most cases when possible, otherwise it -+ employs the equivalent of a malloc-copy-free sequence. -+ -+ If p is null, realloc is equivalent to malloc. -+ -+ If space is not available, realloc returns null, errno is set (if on -+ ANSI) and p is NOT freed. -+ -+ if n is for fewer bytes than already held by p, the newly unused -+ space is lopped off and freed if possible. realloc with a size -+ argument of zero (re)allocates a minimum-sized chunk. -+ -+ The old unix realloc convention of allowing the last-free'd chunk -+ to be used as an argument to realloc is not supported. -+*/ -+ -+void* dlrealloc(void*, size_t); -+ -+/* -+ memalign(size_t alignment, size_t n); -+ Returns a pointer to a newly allocated chunk of n bytes, aligned -+ in accord with the alignment argument. -+ -+ The alignment argument should be a power of two. If the argument is -+ not a power of two, the nearest greater power is used. -+ 8-byte alignment is guaranteed by normal malloc calls, so don't -+ bother calling memalign with an argument of 8 or less. -+ -+ Overreliance on memalign is a sure way to fragment space. -+*/ -+void* dlmemalign(size_t, size_t); -+ -+/* -+ valloc(size_t n); -+ Equivalent to memalign(pagesize, n), where pagesize is the page -+ size of the system. If the pagesize is unknown, 4096 is used. -+*/ -+void* dlvalloc(size_t); -+ -+/* -+ mallopt(int parameter_number, int parameter_value) -+ Sets tunable parameters The format is to provide a -+ (parameter-number, parameter-value) pair. mallopt then sets the -+ corresponding parameter to the argument value if it can (i.e., so -+ long as the value is meaningful), and returns 1 if successful else -+ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, -+ normally defined in malloc.h. None of these are use in this malloc, -+ so setting them has no effect. But this malloc also supports other -+ options in mallopt. See below for details. Briefly, supported -+ parameters are as follows (listed defaults are for "typical" -+ configurations). -+ -+ Symbol param # default allowed param values -+ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) -+ M_GRANULARITY -2 page size any power of 2 >= page size -+ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -+*/ -+int dlmallopt(int, int); -+ -+/* -+ malloc_footprint(); -+ Returns the number of bytes obtained from the system. The total -+ number of bytes allocated by malloc, realloc etc., is less than this -+ value. Unlike mallinfo, this function returns only a precomputed -+ result, so can be called frequently to monitor memory consumption. -+ Even if locks are otherwise defined, this function does not use them, -+ so results might not be up to date. -+*/ -+size_t dlmalloc_footprint(void); -+ -+/* -+ malloc_max_footprint(); -+ Returns the maximum number of bytes obtained from the system. This -+ value will be greater than current footprint if deallocated space -+ has been reclaimed by the system. The peak number of bytes allocated -+ by malloc, realloc etc., is less than this value. Unlike mallinfo, -+ this function returns only a precomputed result, so can be called -+ frequently to monitor memory consumption. Even if locks are -+ otherwise defined, this function does not use them, so results might -+ not be up to date. -+*/ -+size_t dlmalloc_max_footprint(void); -+ -+#if !NO_MALLINFO -+/* -+ mallinfo() -+ Returns (by copy) a struct containing various summary statistics: -+ -+ arena: current total non-mmapped bytes allocated from system -+ ordblks: the number of free chunks -+ smblks: always zero. -+ hblks: current number of mmapped regions -+ hblkhd: total bytes held in mmapped regions -+ usmblks: the maximum total allocated space. This will be greater -+ than current total if trimming has occurred. -+ fsmblks: always zero -+ uordblks: current total allocated space (normal or mmapped) -+ fordblks: total free space -+ keepcost: the maximum number of bytes that could ideally be released -+ back to system via malloc_trim. ("ideally" means that -+ it ignores page restrictions etc.) -+ -+ Because these fields are ints, but internal bookkeeping may -+ be kept as longs, the reported values may wrap around zero and -+ thus be inaccurate. -+*/ -+struct mallinfo dlmallinfo(void); -+#endif /* NO_MALLINFO */ -+ -+/* -+ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); -+ -+ independent_calloc is similar to calloc, but instead of returning a -+ single cleared space, it returns an array of pointers to n_elements -+ independent elements that can hold contents of size elem_size, each -+ of which starts out cleared, and can be independently freed, -+ realloc'ed etc. The elements are guaranteed to be adjacently -+ allocated (this is not guaranteed to occur with multiple callocs or -+ mallocs), which may also improve cache locality in some -+ applications. -+ -+ The "chunks" argument is optional (i.e., may be null, which is -+ probably the most typical usage). If it is null, the returned array -+ is itself dynamically allocated and should also be freed when it is -+ no longer needed. Otherwise, the chunks array must be of at least -+ n_elements in length. It is filled in with the pointers to the -+ chunks. -+ -+ In either case, independent_calloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and "chunks" -+ is null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). -+ -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use regular calloc and assign pointers into this -+ space to represent elements. (In this case though, you cannot -+ independently free elements.) -+ -+ independent_calloc simplifies and speeds up implementations of many -+ kinds of pools. It may also be useful when constructing large data -+ structures that initially have a fixed number of fixed-sized nodes, -+ but the number is not known at compile time, and some of the nodes -+ may later need to be freed. For example: -+ -+ struct Node { int item; struct Node* next; }; -+ -+ struct Node* build_list() { -+ struct Node** pool; -+ int n = read_number_of_nodes_needed(); -+ if (n <= 0) return 0; -+ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); -+ if (pool == 0) die(); -+ // organize into a linked list... -+ struct Node* first = pool[0]; -+ for (i = 0; i < n-1; ++i) -+ pool[i]->next = pool[i+1]; -+ free(pool); // Can now free the array (or not, if it is needed later) -+ return first; -+ } -+*/ -+void** dlindependent_calloc(size_t, size_t, void**); -+ -+/* -+ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); -+ -+ independent_comalloc allocates, all at once, a set of n_elements -+ chunks with sizes indicated in the "sizes" array. It returns -+ an array of pointers to these elements, each of which can be -+ independently freed, realloc'ed etc. The elements are guaranteed to -+ be adjacently allocated (this is not guaranteed to occur with -+ multiple callocs or mallocs), which may also improve cache locality -+ in some applications. -+ -+ The "chunks" argument is optional (i.e., may be null). If it is null -+ the returned array is itself dynamically allocated and should also -+ be freed when it is no longer needed. Otherwise, the chunks array -+ must be of at least n_elements in length. It is filled in with the -+ pointers to the chunks. -+ -+ In either case, independent_comalloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and chunks is -+ null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). -+ -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use a single regular malloc, and assign pointers at -+ particular offsets in the aggregate space. (In this case though, you -+ cannot independently free elements.) -+ -+ independent_comallac differs from independent_calloc in that each -+ element may have a different size, and also that it does not -+ automatically clear elements. -+ -+ independent_comalloc can be used to speed up allocation in cases -+ where several structs or objects must always be allocated at the -+ same time. For example: -+ -+ struct Head { ... } -+ struct Foot { ... } -+ -+ void send_message(char* msg) { -+ int msglen = strlen(msg); -+ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; -+ void* chunks[3]; -+ if (independent_comalloc(3, sizes, chunks) == 0) -+ die(); -+ struct Head* head = (struct Head*)(chunks[0]); -+ char* body = (char*)(chunks[1]); -+ struct Foot* foot = (struct Foot*)(chunks[2]); -+ // ... -+ } -+ -+ In general though, independent_comalloc is worth using only for -+ larger values of n_elements. For small values, you probably won't -+ detect enough difference from series of malloc calls to bother. -+ -+ Overuse of independent_comalloc can increase overall memory usage, -+ since it cannot reuse existing noncontiguous small chunks that -+ might be available for some of the elements. -+*/ -+void** dlindependent_comalloc(size_t, size_t*, void**); -+ -+ -+/* -+ pvalloc(size_t n); -+ Equivalent to valloc(minimum-page-that-holds(n)), that is, -+ round up n to nearest pagesize. -+ */ -+void* dlpvalloc(size_t); -+ -+/* -+ malloc_trim(size_t pad); -+ -+ If possible, gives memory back to the system (via negative arguments -+ to sbrk) if there is unused memory at the `high' end of the malloc -+ pool or in unused MMAP segments. You can call this after freeing -+ large blocks of memory to potentially reduce the system-level memory -+ requirements of a program. However, it cannot guarantee to reduce -+ memory. Under some allocation patterns, some large free blocks of -+ memory will be locked between two used chunks, so they cannot be -+ given back to the system. -+ -+ The `pad' argument to malloc_trim represents the amount of free -+ trailing space to leave untrimmed. If this argument is zero, only -+ the minimum amount of memory to maintain internal data structures -+ will be left. Non-zero arguments can be supplied to maintain enough -+ trailing space to service future expected allocations without having -+ to re-obtain memory from the system. -+ -+ Malloc_trim returns 1 if it actually released any memory, else 0. -+*/ -+int dlmalloc_trim(size_t); -+ -+/* -+ malloc_usable_size(void* p); -+ -+ Returns the number of bytes you can actually use in -+ an allocated chunk, which may be more than you requested (although -+ often not) due to alignment and minimum size constraints. -+ You can use this many bytes without worrying about -+ overwriting other allocated objects. This is not a particularly great -+ programming practice. malloc_usable_size can be more useful in -+ debugging and assertions, for example: -+ -+ p = malloc(n); -+ assert(malloc_usable_size(p) >= 256); -+*/ -+size_t dlmalloc_usable_size(void*); -+ -+/* -+ malloc_stats(); -+ Prints on stderr the amount of space obtained from the system (both -+ via sbrk and mmap), the maximum amount (which may be more than -+ current if malloc_trim and/or munmap got called), and the current -+ number of bytes allocated via malloc (or realloc, etc) but not yet -+ freed. Note that this is the number of bytes allocated, not the -+ number requested. It will be larger than the number requested -+ because of alignment and bookkeeping overhead. Because it includes -+ alignment wastage as being in use, this figure may be greater than -+ zero even when no user-level chunks are allocated. -+ -+ The reported current and maximum system memory can be inaccurate if -+ a program makes other calls to system memory allocation functions -+ (normally sbrk) outside of malloc. -+ -+ malloc_stats prints only the most commonly interesting statistics. -+ More information can be obtained by calling mallinfo. -+*/ -+void dlmalloc_stats(void); -+ -+#endif /* ONLY_MSPACES */ -+ -+#if MSPACES -+ -+/* -+ mspace is an opaque type representing an independent -+ region of space that supports mspace_malloc, etc. -+*/ -+typedef void* mspace; -+ -+/* -+ create_mspace creates and returns a new independent space with the -+ given initial capacity, or, if 0, the default granularity size. It -+ returns null if there is no system memory available to create the -+ space. If argument locked is non-zero, the space uses a separate -+ lock to control access. The capacity of the space will grow -+ dynamically as needed to service mspace_malloc requests. You can -+ control the sizes of incremental increases of this space by -+ compiling with a different DEFAULT_GRANULARITY or dynamically -+ setting with mallopt(M_GRANULARITY, value). -+*/ -+mspace create_mspace(size_t capacity, int locked); -+ -+/* -+ destroy_mspace destroys the given space, and attempts to return all -+ of its memory back to the system, returning the total number of -+ bytes freed. After destruction, the results of access to all memory -+ used by the space become undefined. -+*/ -+size_t destroy_mspace(mspace msp); -+ -+/* -+ create_mspace_with_base uses the memory supplied as the initial base -+ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this -+ space is used for bookkeeping, so the capacity must be at least this -+ large. (Otherwise 0 is returned.) When this initial space is -+ exhausted, additional memory will be obtained from the system. -+ Destroying this space will deallocate all additionally allocated -+ space (if possible) but not the initial base. -+*/ -+mspace create_mspace_with_base(void* base, size_t capacity, int locked); -+ -+/* -+ mspace_malloc behaves as malloc, but operates within -+ the given space. -+*/ -+void* mspace_malloc(mspace msp, size_t bytes); -+ -+/* -+ mspace_free behaves as free, but operates within -+ the given space. -+ -+ If compiled with FOOTERS==1, mspace_free is not actually needed. -+ free may be called instead of mspace_free because freed chunks from -+ any space are handled by their originating spaces. -+*/ -+void mspace_free(mspace msp, void* mem); -+ -+/* -+ mspace_realloc behaves as realloc, but operates within -+ the given space. -+ -+ If compiled with FOOTERS==1, mspace_realloc is not actually -+ needed. realloc may be called instead of mspace_realloc because -+ realloced chunks from any space are handled by their originating -+ spaces. -+*/ -+void* mspace_realloc(mspace msp, void* mem, size_t newsize); -+ -+/* -+ mspace_calloc behaves as calloc, but operates within -+ the given space. -+*/ -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); -+ -+/* -+ mspace_memalign behaves as memalign, but operates within -+ the given space. -+*/ -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); -+ -+/* -+ mspace_independent_calloc behaves as independent_calloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]); -+ -+/* -+ mspace_independent_comalloc behaves as independent_comalloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]); -+ -+/* -+ mspace_footprint() returns the number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_footprint(mspace msp); -+ -+/* -+ mspace_max_footprint() returns the peak number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_max_footprint(mspace msp); -+ -+ -+#if !NO_MALLINFO -+/* -+ mspace_mallinfo behaves as mallinfo, but reports properties of -+ the given space. -+*/ -+struct mallinfo mspace_mallinfo(mspace msp); -+#endif /* NO_MALLINFO */ -+ -+/* -+ mspace_malloc_stats behaves as malloc_stats, but reports -+ properties of the given space. -+*/ -+void mspace_malloc_stats(mspace msp); -+ -+/* -+ mspace_trim behaves as malloc_trim, but -+ operates within the given space. -+*/ -+int mspace_trim(mspace msp, size_t pad); -+ -+/* -+ An alias for mallopt. -+*/ -+int mspace_mallopt(int, int); -+ -+#endif /* MSPACES */ -+ -+#ifdef __cplusplus -+}; /* end of extern "C" */ -+#endif /* __cplusplus */ -+ -+/* -+ ======================================================================== -+ To make a fully customizable malloc.h header file, cut everything -+ above this line, put into file malloc.h, edit to suit, and #include it -+ on the next line, as well as in programs that use this malloc. -+ ======================================================================== -+*/ -+ -+/* #include "malloc.h" */ -+ -+/*------------------------------ internal #includes ---------------------- */ -+ -+#ifdef _MSC_VER -+#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -+#endif /* _MSC_VER */ -+ -+#include /* for printing in malloc_stats */ -+ -+#ifndef LACKS_ERRNO_H -+#include /* for MALLOC_FAILURE_ACTION */ -+#endif /* LACKS_ERRNO_H */ -+#if FOOTERS -+#include /* for magic initialization */ -+#endif /* FOOTERS */ -+#ifndef LACKS_STDLIB_H -+#include /* for abort() */ -+#endif /* LACKS_STDLIB_H */ -+#ifdef DEBUG -+#if ABORT_ON_ASSERT_FAILURE -+#define assert(x) if(!(x)) ABORT -+#else /* ABORT_ON_ASSERT_FAILURE */ -+#include -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#else /* DEBUG */ -+#define assert(x) -+#endif /* DEBUG */ -+#ifndef LACKS_STRING_H -+#include /* for memset etc */ -+#endif /* LACKS_STRING_H */ -+#if USE_BUILTIN_FFS -+#ifndef LACKS_STRINGS_H -+#include /* for ffs */ -+#endif /* LACKS_STRINGS_H */ -+#endif /* USE_BUILTIN_FFS */ -+#if HAVE_MMAP -+#ifndef LACKS_SYS_MMAN_H -+#include /* for mmap */ -+#endif /* LACKS_SYS_MMAN_H */ -+#ifndef LACKS_FCNTL_H -+#include -+#endif /* LACKS_FCNTL_H */ -+#endif /* HAVE_MMAP */ -+#if HAVE_MORECORE -+#ifndef LACKS_UNISTD_H -+#include /* for sbrk */ -+#else /* LACKS_UNISTD_H */ -+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -+extern void* sbrk(ptrdiff_t); -+#endif /* FreeBSD etc */ -+#endif /* LACKS_UNISTD_H */ -+#endif /* HAVE_MMAP */ -+ -+#ifndef WIN32 -+#ifndef malloc_getpagesize -+# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -+# ifndef _SC_PAGE_SIZE -+# define _SC_PAGE_SIZE _SC_PAGESIZE -+# endif -+# endif -+# ifdef _SC_PAGE_SIZE -+# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -+# else -+# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) -+ extern size_t getpagesize(); -+# define malloc_getpagesize getpagesize() -+# else -+# ifdef WIN32 /* use supplied emulation of getpagesize */ -+# define malloc_getpagesize getpagesize() -+# else -+# ifndef LACKS_SYS_PARAM_H -+# include -+# endif -+# ifdef EXEC_PAGESIZE -+# define malloc_getpagesize EXEC_PAGESIZE -+# else -+# ifdef NBPG -+# ifndef CLSIZE -+# define malloc_getpagesize NBPG -+# else -+# define malloc_getpagesize (NBPG * CLSIZE) -+# endif -+# else -+# ifdef NBPC -+# define malloc_getpagesize NBPC -+# else -+# ifdef PAGESIZE -+# define malloc_getpagesize PAGESIZE -+# else /* just guess */ -+# define malloc_getpagesize ((size_t)4096U) -+# endif -+# endif -+# endif -+# endif -+# endif -+# endif -+# endif -+#endif -+#endif -+ -+/* ------------------- size_t and alignment properties -------------------- */ -+ -+/* The byte and bit size of a size_t */ -+#define SIZE_T_SIZE (sizeof(size_t)) -+#define SIZE_T_BITSIZE (sizeof(size_t) << 3) -+ -+/* Some constants coerced to size_t */ -+/* Annoying but necessary to avoid errors on some platforms */ -+#define SIZE_T_ZERO ((size_t)0) -+#define SIZE_T_ONE ((size_t)1) -+#define SIZE_T_TWO ((size_t)2) -+#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -+#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -+#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -+#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) -+ -+/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -+#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) -+ -+/* True if address a has acceptable alignment */ -+#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) -+ -+/* the number of bytes to offset an address to align it */ -+#define align_offset(A)\ -+ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ -+ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) -+ -+/* -------------------------- MMAP preliminaries ------------------------- */ -+ -+/* -+ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and -+ checks to fail so compiler optimizer can delete code rather than -+ using so many "#if"s. -+*/ -+ -+ -+/* MORECORE and MMAP must return MFAIL on failure */ -+#define MFAIL ((void*)(MAX_SIZE_T)) -+#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ -+ -+#if !HAVE_MMAP -+#define IS_MMAPPED_BIT (SIZE_T_ZERO) -+#define USE_MMAP_BIT (SIZE_T_ZERO) -+#define CALL_MMAP(s) MFAIL -+#define CALL_MUNMAP(a, s) (-1) -+#define DIRECT_MMAP(s) MFAIL -+ -+#else /* HAVE_MMAP */ -+#define IS_MMAPPED_BIT (SIZE_T_ONE) -+#define USE_MMAP_BIT (SIZE_T_ONE) -+ -+#if !defined(WIN32) && !defined (__OS2__) -+#define CALL_MUNMAP(a, s) munmap((a), (s)) -+#define MMAP_PROT (PROT_READ|PROT_WRITE) -+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -+#define MAP_ANONYMOUS MAP_ANON -+#endif /* MAP_ANON */ -+#ifdef MAP_ANONYMOUS -+#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -+#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -+#else /* MAP_ANONYMOUS */ -+/* -+ Nearly all versions of mmap support MAP_ANONYMOUS, so the following -+ is unlikely to be needed, but is supplied just in case. -+*/ -+#define MMAP_FLAGS (MAP_PRIVATE) -+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -+#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ -+ (dev_zero_fd = open("/dev/zero", O_RDWR), \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -+#endif /* MAP_ANONYMOUS */ -+ -+#define DIRECT_MMAP(s) CALL_MMAP(s) -+ -+#elif defined(__OS2__) -+ -+/* OS/2 MMAP via DosAllocMem */ -+static void* os2mmap(size_t size) { -+ void* ptr; -+ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && -+ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) -+ return MFAIL; -+ return ptr; -+} -+ -+#define os2direct_mmap(n) os2mmap(n) -+ -+/* This function supports releasing coalesed segments */ -+static int os2munmap(void* ptr, size_t size) { -+ while (size) { -+ ULONG ulSize = size; -+ ULONG ulFlags = 0; -+ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) -+ return -1; -+ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || -+ ulSize > size) -+ return -1; -+ if (DosFreeMem(ptr) != 0) -+ return -1; -+ ptr = ( void * ) ( ( char * ) ptr + ulSize ); -+ size -= ulSize; -+ } -+ return 0; -+} -+ -+#define CALL_MMAP(s) os2mmap(s) -+#define CALL_MUNMAP(a, s) os2munmap((a), (s)) -+#define DIRECT_MMAP(s) os2direct_mmap(s) -+ -+#else /* WIN32 */ -+ -+/* Win32 MMAP via VirtualAlloc */ -+static void* win32mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} -+ -+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -+static void* win32direct_mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, -+ PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} -+ -+/* This function supports releasing coalesed segments */ -+static int win32munmap(void* ptr, size_t size) { -+ MEMORY_BASIC_INFORMATION minfo; -+ char* cptr = ptr; -+ while (size) { -+ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) -+ return -1; -+ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || -+ minfo.State != MEM_COMMIT || minfo.RegionSize > size) -+ return -1; -+ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) -+ return -1; -+ cptr += minfo.RegionSize; -+ size -= minfo.RegionSize; -+ } -+ return 0; -+} -+ -+#define CALL_MMAP(s) win32mmap(s) -+#define CALL_MUNMAP(a, s) win32munmap((a), (s)) -+#define DIRECT_MMAP(s) win32direct_mmap(s) -+#endif /* WIN32 */ -+#endif /* HAVE_MMAP */ -+ -+#if HAVE_MMAP && HAVE_MREMAP -+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -+#else /* HAVE_MMAP && HAVE_MREMAP */ -+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -+#endif /* HAVE_MMAP && HAVE_MREMAP */ -+ -+#if HAVE_MORECORE -+#define CALL_MORECORE(S) MORECORE(S) -+#else /* HAVE_MORECORE */ -+#define CALL_MORECORE(S) MFAIL -+#endif /* HAVE_MORECORE */ -+ -+/* mstate bit set if contiguous morecore disabled or failed */ -+#define USE_NONCONTIGUOUS_BIT (4U) -+ -+/* segment bit set in create_mspace_with_base */ -+#define EXTERN_BIT (8U) -+ -+ -+/* --------------------------- Lock preliminaries ------------------------ */ -+ -+#if USE_LOCKS -+ -+/* -+ When locks are defined, there are up to two global locks: -+ -+ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to -+ MORECORE. In many cases sys_alloc requires two calls, that should -+ not be interleaved with calls by other threads. This does not -+ protect against direct calls to MORECORE by other threads not -+ using this lock, so there is still code to cope the best we can on -+ interference. -+ -+ * magic_init_mutex ensures that mparams.magic and other -+ unique mparams values are initialized only once. -+*/ -+ -+#if !defined(WIN32) && !defined(__OS2__) -+/* By default use posix locks */ -+#include -+#define MLOCK_T pthread_mutex_t -+#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) -+#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) -+#define RELEASE_LOCK(l) pthread_mutex_unlock(l) -+ -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; -+#endif /* HAVE_MORECORE */ -+ -+static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; -+ -+#elif defined(__OS2__) -+#define MLOCK_T HMTX -+#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) -+#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) -+#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; -+ -+#else /* WIN32 */ -+/* -+ Because lock-protected regions have bounded times, and there -+ are no recursive lock calls, we can use simple spinlocks. -+*/ -+ -+#define MLOCK_T long -+static int win32_acquire_lock (MLOCK_T *sl) { -+ for (;;) { -+#ifdef InterlockedCompareExchangePointer -+ if (!InterlockedCompareExchange(sl, 1, 0)) -+ return 0; -+#else /* Use older void* version */ -+ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) -+ return 0; -+#endif /* InterlockedCompareExchangePointer */ -+ Sleep (0); -+ } -+} -+ -+static void win32_release_lock (MLOCK_T *sl) { -+ InterlockedExchange (sl, 0); -+} -+ -+#define INITIAL_LOCK(l) *(l)=0 -+#define ACQUIRE_LOCK(l) win32_acquire_lock(l) -+#define RELEASE_LOCK(l) win32_release_lock(l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; -+#endif /* WIN32 */ -+ -+#define USE_LOCK_BIT (2U) -+#else /* USE_LOCKS */ -+#define USE_LOCK_BIT (0U) -+#define INITIAL_LOCK(l) -+#endif /* USE_LOCKS */ -+ -+#if USE_LOCKS && HAVE_MORECORE -+#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); -+#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); -+#else /* USE_LOCKS && HAVE_MORECORE */ -+#define ACQUIRE_MORECORE_LOCK() -+#define RELEASE_MORECORE_LOCK() -+#endif /* USE_LOCKS && HAVE_MORECORE */ -+ -+#if USE_LOCKS -+#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); -+#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); -+#else /* USE_LOCKS */ -+#define ACQUIRE_MAGIC_INIT_LOCK() -+#define RELEASE_MAGIC_INIT_LOCK() -+#endif /* USE_LOCKS */ -+ -+ -+/* ----------------------- Chunk representations ------------------------ */ -+ -+/* -+ (The following includes lightly edited explanations by Colin Plumb.) -+ -+ The malloc_chunk declaration below is misleading (but accurate and -+ necessary). It declares a "view" into memory allowing access to -+ necessary fields at known offsets from a given base. -+ -+ Chunks of memory are maintained using a `boundary tag' method as -+ originally described by Knuth. (See the paper by Paul Wilson -+ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such -+ techniques.) Sizes of free chunks are stored both in the front of -+ each chunk and at the end. This makes consolidating fragmented -+ chunks into bigger chunks fast. The head fields also hold bits -+ representing whether chunks are free or in use. -+ -+ Here are some pictures to make it clearer. They are "exploded" to -+ show that the state of a chunk can be thought of as extending from -+ the high 31 bits of the head field of its header through the -+ prev_foot and PINUSE_BIT bit of the following chunk header. -+ -+ A chunk that's in use looks like: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk (if P = 1) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 1| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | | -+ +- -+ -+ | | -+ +- -+ -+ | : -+ +- size - sizeof(size_t) available payload bytes -+ -+ : | -+ chunk-> +- -+ -+ | | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| -+ | Size of next chunk (may or may not be in use) | +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ And if it's free, it looks like this: -+ -+ chunk-> +- -+ -+ | User payload (must be in use, or we would have merged!) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 0| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Next pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Prev pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- size - sizeof(struct chunk) unused bytes -+ -+ : | -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| -+ | Size of next chunk (must be in use, or we would have merged)| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- User payload -+ -+ : | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ |0| -+ +-+ -+ Note that since we always merge adjacent free chunks, the chunks -+ adjacent to a free chunk must be in use. -+ -+ Given a pointer to a chunk (which can be derived trivially from the -+ payload pointer) we can, in O(1) time, find out whether the adjacent -+ chunks are free, and if so, unlink them from the lists that they -+ are on and merge them with the current chunk. -+ -+ Chunks always begin on even word boundaries, so the mem portion -+ (which is returned to the user) is also on an even word boundary, and -+ thus at least double-word aligned. -+ -+ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the -+ chunk size (which is always a multiple of two words), is an in-use -+ bit for the *previous* chunk. If that bit is *clear*, then the -+ word before the current chunk size contains the previous chunk -+ size, and can be used to find the front of the previous chunk. -+ The very first chunk allocated always has this bit set, preventing -+ access to non-existent (or non-owned) memory. If pinuse is set for -+ any given chunk, then you CANNOT determine the size of the -+ previous chunk, and might even get a memory addressing fault when -+ trying to do so. -+ -+ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of -+ the chunk size redundantly records whether the current chunk is -+ inuse. This redundancy enables usage checks within free and realloc, -+ and reduces indirection when freeing and consolidating chunks. -+ -+ Each freshly allocated chunk must have both cinuse and pinuse set. -+ That is, each allocated chunk borders either a previously allocated -+ and still in-use chunk, or the base of its memory arena. This is -+ ensured by making all allocations from the the `lowest' part of any -+ found chunk. Further, no free chunk physically borders another one, -+ so each free chunk is known to be preceded and followed by either -+ inuse chunks or the ends of memory. -+ -+ Note that the `foot' of the current chunk is actually represented -+ as the prev_foot of the NEXT chunk. This makes it easier to -+ deal with alignments etc but can be very confusing when trying -+ to extend or adapt this code. -+ -+ The exceptions to all this are -+ -+ 1. The special chunk `top' is the top-most available chunk (i.e., -+ the one bordering the end of available memory). It is treated -+ specially. Top is never included in any bin, is used only if -+ no other chunk is available, and is released back to the -+ system if it is very large (see M_TRIM_THRESHOLD). In effect, -+ the top chunk is treated as larger (and thus less well -+ fitting) than any other available chunk. The top chunk -+ doesn't update its trailing size field since there is no next -+ contiguous chunk that would have to index off it. However, -+ space is still allocated for it (TOP_FOOT_SIZE) to enable -+ separation or merging when space is extended. -+ -+ 3. Chunks allocated via mmap, which have the lowest-order bit -+ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set -+ PINUSE_BIT in their head fields. Because they are allocated -+ one-by-one, each must carry its own prev_foot field, which is -+ also used to hold the offset this chunk has within its mmapped -+ region, which is needed to preserve alignment. Each mmapped -+ chunk is trailed by the first two fields of a fake next-chunk -+ for sake of usage checks. -+ -+*/ -+ -+struct malloc_chunk { -+ size_t prev_foot; /* Size of previous chunk (if free). */ -+ size_t head; /* Size and inuse bits. */ -+ struct malloc_chunk* fd; /* double links -- used only if free. */ -+ struct malloc_chunk* bk; -+}; -+ -+typedef struct malloc_chunk mchunk; -+typedef struct malloc_chunk* mchunkptr; -+typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -+typedef size_t bindex_t; /* Described below */ -+typedef unsigned int binmap_t; /* Described below */ -+typedef unsigned int flag_t; /* The type of various bit flag sets */ -+ -+/* ------------------- Chunks sizes and alignments ----------------------- */ -+ -+#define MCHUNK_SIZE (sizeof(mchunk)) -+ -+#if FOOTERS -+#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+#else /* FOOTERS */ -+#define CHUNK_OVERHEAD (SIZE_T_SIZE) -+#endif /* FOOTERS */ -+ -+/* MMapped chunks need a second word of overhead ... */ -+#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+/* ... and additional padding for fake next-chunk at foot */ -+#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) -+ -+/* The smallest size we can malloc is an aligned minimal chunk */ -+#define MIN_CHUNK_SIZE\ -+ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) -+ -+/* conversion from malloc headers to user pointers, and back */ -+#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -+#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -+/* chunk associated with aligned address A */ -+#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) -+ -+/* Bounds on request (not chunk) sizes. */ -+#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -+#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) -+ -+/* pad request bytes into a usable size */ -+#define pad_request(req) \ -+ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) -+ -+/* pad request, checking for minimum (but not maximum) */ -+#define request2size(req) \ -+ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) -+ -+ -+/* ------------------ Operations on head and foot fields ----------------- */ -+ -+/* -+ The head field of a chunk is or'ed with PINUSE_BIT when previous -+ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in -+ use. If the chunk was obtained with mmap, the prev_foot field has -+ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the -+ mmapped region to the base of the chunk. -+*/ -+ -+#define PINUSE_BIT (SIZE_T_ONE) -+#define CINUSE_BIT (SIZE_T_TWO) -+#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) -+ -+/* Head value for fenceposts */ -+#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) -+ -+/* extraction of fields from head words */ -+#define cinuse(p) ((p)->head & CINUSE_BIT) -+#define pinuse(p) ((p)->head & PINUSE_BIT) -+#define chunksize(p) ((p)->head & ~(INUSE_BITS)) -+ -+#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -+#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) -+ -+/* Treat space at ptr +/- offset as a chunk */ -+#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -+#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) -+ -+/* Ptr to next or previous physical malloc_chunk. */ -+#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) -+#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) -+ -+/* extract next chunk's pinuse bit */ -+#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) -+ -+/* Get/set size at footer */ -+#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -+#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) -+ -+/* Set size, pinuse bit, and foot */ -+#define set_size_and_pinuse_of_free_chunk(p, s)\ -+ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) -+ -+/* Set size, pinuse bit, foot, and clear next pinuse */ -+#define set_free_with_pinuse(p, s, n)\ -+ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) -+ -+#define is_mmapped(p)\ -+ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) -+ -+/* Get the internal overhead associated with chunk p */ -+#define overhead_for(p)\ -+ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) -+ -+/* Return true if malloced space is not necessarily cleared */ -+#if MMAP_CLEARS -+#define calloc_must_clear(p) (!is_mmapped(p)) -+#else /* MMAP_CLEARS */ -+#define calloc_must_clear(p) (1) -+#endif /* MMAP_CLEARS */ -+ -+/* ---------------------- Overlaid data structures ----------------------- */ -+ -+/* -+ When chunks are not in use, they are treated as nodes of either -+ lists or trees. -+ -+ "Small" chunks are stored in circular doubly-linked lists, and look -+ like this: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space (may be 0 bytes long) . -+ . . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ Larger chunks are kept in a form of bitwise digital trees (aka -+ tries) keyed on chunksizes. Because malloc_tree_chunks are only for -+ free chunks greater than 256 bytes, their size doesn't impose any -+ constraints on user chunk sizes. Each node looks like: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to left child (child[0]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to right child (child[1]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to parent | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | bin index of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ Each tree holding treenodes is a tree of unique chunk sizes. Chunks -+ of the same size are arranged in a circularly-linked list, with only -+ the oldest chunk (the next to be used, in our FIFO ordering) -+ actually in the tree. (Tree members are distinguished by a non-null -+ parent pointer.) If a chunk with the same size an an existing node -+ is inserted, it is linked off the existing node using pointers that -+ work in the same way as fd/bk pointers of small chunks. -+ -+ Each tree contains a power of 2 sized range of chunk sizes (the -+ smallest is 0x100 <= x < 0x180), which is is divided in half at each -+ tree level, with the chunks in the smaller half of the range (0x100 -+ <= x < 0x140 for the top nose) in the left subtree and the larger -+ half (0x140 <= x < 0x180) in the right subtree. This is, of course, -+ done by inspecting individual bits. -+ -+ Using these rules, each node's left subtree contains all smaller -+ sizes than its right subtree. However, the node at the root of each -+ subtree has no particular ordering relationship to either. (The -+ dividing line between the subtree sizes is based on trie relation.) -+ If we remove the last chunk of a given size from the interior of the -+ tree, we need to replace it with a leaf node. The tree ordering -+ rules permit a node to be replaced by any leaf below it. -+ -+ The smallest chunk in a tree (a common operation in a best-fit -+ allocator) can be found by walking a path to the leftmost leaf in -+ the tree. Unlike a usual binary tree, where we follow left child -+ pointers until we reach a null, here we follow the right child -+ pointer any time the left one is null, until we reach a leaf with -+ both child pointers null. The smallest chunk in the tree will be -+ somewhere along that path. -+ -+ The worst case number of steps to add, find, or remove a node is -+ bounded by the number of bits differentiating chunks within -+ bins. Under current bin calculations, this ranges from 6 up to 21 -+ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case -+ is of course much better. -+*/ -+ -+struct malloc_tree_chunk { -+ /* The first four fields must be compatible with malloc_chunk */ -+ size_t prev_foot; -+ size_t head; -+ struct malloc_tree_chunk* fd; -+ struct malloc_tree_chunk* bk; -+ -+ struct malloc_tree_chunk* child[2]; -+ struct malloc_tree_chunk* parent; -+ bindex_t index; -+}; -+ -+typedef struct malloc_tree_chunk tchunk; -+typedef struct malloc_tree_chunk* tchunkptr; -+typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ -+ -+/* A little helper macro for trees */ -+#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) -+ -+/* ----------------------------- Segments -------------------------------- */ -+ -+/* -+ Each malloc space may include non-contiguous segments, held in a -+ list headed by an embedded malloc_segment record representing the -+ top-most space. Segments also include flags holding properties of -+ the space. Large chunks that are directly allocated by mmap are not -+ included in this list. They are instead independently created and -+ destroyed without otherwise keeping track of them. -+ -+ Segment management mainly comes into play for spaces allocated by -+ MMAP. Any call to MMAP might or might not return memory that is -+ adjacent to an existing segment. MORECORE normally contiguously -+ extends the current space, so this space is almost always adjacent, -+ which is simpler and faster to deal with. (This is why MORECORE is -+ used preferentially to MMAP when both are available -- see -+ sys_alloc.) When allocating using MMAP, we don't use any of the -+ hinting mechanisms (inconsistently) supported in various -+ implementations of unix mmap, or distinguish reserving from -+ committing memory. Instead, we just ask for space, and exploit -+ contiguity when we get it. It is probably possible to do -+ better than this on some systems, but no general scheme seems -+ to be significantly better. -+ -+ Management entails a simpler variant of the consolidation scheme -+ used for chunks to reduce fragmentation -- new adjacent memory is -+ normally prepended or appended to an existing segment. However, -+ there are limitations compared to chunk consolidation that mostly -+ reflect the fact that segment processing is relatively infrequent -+ (occurring only when getting memory from system) and that we -+ don't expect to have huge numbers of segments: -+ -+ * Segments are not indexed, so traversal requires linear scans. (It -+ would be possible to index these, but is not worth the extra -+ overhead and complexity for most programs on most platforms.) -+ * New segments are only appended to old ones when holding top-most -+ memory; if they cannot be prepended to others, they are held in -+ different segments. -+ -+ Except for the top-most segment of an mstate, each segment record -+ is kept at the tail of its segment. Segments are added by pushing -+ segment records onto the list headed by &mstate.seg for the -+ containing mstate. -+ -+ Segment flags control allocation/merge/deallocation policies: -+ * If EXTERN_BIT set, then we did not allocate this segment, -+ and so should not try to deallocate or merge with others. -+ (This currently holds only for the initial segment passed -+ into create_mspace_with_base.) -+ * If IS_MMAPPED_BIT set, the segment may be merged with -+ other surrounding mmapped segments and trimmed/de-allocated -+ using munmap. -+ * If neither bit is set, then the segment was obtained using -+ MORECORE so can be merged with surrounding MORECORE'd segments -+ and deallocated/trimmed using MORECORE with negative arguments. -+*/ -+ -+struct malloc_segment { -+ char* base; /* base address */ -+ size_t size; /* allocated size */ -+ struct malloc_segment* next; /* ptr to next segment */ -+#if FFI_MMAP_EXEC_WRIT -+ /* The mmap magic is supposed to store the address of the executable -+ segment at the very end of the requested block. */ -+ -+# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) -+ -+ /* We can only merge segments if their corresponding executable -+ segments are at identical offsets. */ -+# define check_segment_merge(S,b,s) \ -+ (mmap_exec_offset((b),(s)) == (S)->exec_offset) -+ -+# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) -+# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) -+ -+ /* The removal of sflags only works with HAVE_MORECORE == 0. */ -+ -+# define get_segment_flags(S) (IS_MMAPPED_BIT) -+# define set_segment_flags(S,v) \ -+ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ -+ (((S)->exec_offset = \ -+ mmap_exec_offset((S)->base, (S)->size)), \ -+ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ -+ (S)->exec_offset) ? (ABORT, (v)) : \ -+ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) -+ -+ /* We use an offset here, instead of a pointer, because then, when -+ base changes, we don't have to modify this. On architectures -+ with segmented addresses, this might not work. */ -+ ptrdiff_t exec_offset; -+#else -+ -+# define get_segment_flags(S) ((S)->sflags) -+# define set_segment_flags(S,v) ((S)->sflags = (v)) -+# define check_segment_merge(S,b,s) (1) -+ -+ flag_t sflags; /* mmap and extern flag */ -+#endif -+}; -+ -+#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) -+#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) -+ -+typedef struct malloc_segment msegment; -+typedef struct malloc_segment* msegmentptr; -+ -+/* ---------------------------- malloc_state ----------------------------- */ -+ -+/* -+ A malloc_state holds all of the bookkeeping for a space. -+ The main fields are: -+ -+ Top -+ The topmost chunk of the currently active segment. Its size is -+ cached in topsize. The actual size of topmost space is -+ topsize+TOP_FOOT_SIZE, which includes space reserved for adding -+ fenceposts and segment records if necessary when getting more -+ space from the system. The size at which to autotrim top is -+ cached from mparams in trim_check, except that it is disabled if -+ an autotrim fails. -+ -+ Designated victim (dv) -+ This is the preferred chunk for servicing small requests that -+ don't have exact fits. It is normally the chunk split off most -+ recently to service another small request. Its size is cached in -+ dvsize. The link fields of this chunk are not maintained since it -+ is not kept in a bin. -+ -+ SmallBins -+ An array of bin headers for free chunks. These bins hold chunks -+ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains -+ chunks of all the same size, spaced 8 bytes apart. To simplify -+ use in double-linked lists, each bin header acts as a malloc_chunk -+ pointing to the real first node, if it exists (else pointing to -+ itself). This avoids special-casing for headers. But to avoid -+ waste, we allocate only the fd/bk pointers of bins, and then use -+ repositioning tricks to treat these as the fields of a chunk. -+ -+ TreeBins -+ Treebins are pointers to the roots of trees holding a range of -+ sizes. There are 2 equally spaced treebins for each power of two -+ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything -+ larger. -+ -+ Bin maps -+ There is one bit map for small bins ("smallmap") and one for -+ treebins ("treemap). Each bin sets its bit when non-empty, and -+ clears the bit when empty. Bit operations are then used to avoid -+ bin-by-bin searching -- nearly all "search" is done without ever -+ looking at bins that won't be selected. The bit maps -+ conservatively use 32 bits per map word, even if on 64bit system. -+ For a good description of some of the bit-based techniques used -+ here, see Henry S. Warren Jr's book "Hacker's Delight" (and -+ supplement at http://hackersdelight.org/). Many of these are -+ intended to reduce the branchiness of paths through malloc etc, as -+ well as to reduce the number of memory locations read or written. -+ -+ Segments -+ A list of segments headed by an embedded malloc_segment record -+ representing the initial space. -+ -+ Address check support -+ The least_addr field is the least address ever obtained from -+ MORECORE or MMAP. Attempted frees and reallocs of any address less -+ than this are trapped (unless INSECURE is defined). -+ -+ Magic tag -+ A cross-check field that should always hold same value as mparams.magic. -+ -+ Flags -+ Bits recording whether to use MMAP, locks, or contiguous MORECORE -+ -+ Statistics -+ Each space keeps track of current and maximum system memory -+ obtained via MORECORE or MMAP. -+ -+ Locking -+ If USE_LOCKS is defined, the "mutex" lock is acquired and released -+ around every public call using this mspace. -+*/ -+ -+/* Bin types, widths and sizes */ -+#define NSMALLBINS (32U) -+#define NTREEBINS (32U) -+#define SMALLBIN_SHIFT (3U) -+#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -+#define TREEBIN_SHIFT (8U) -+#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -+#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -+#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) -+ -+struct malloc_state { -+ binmap_t smallmap; -+ binmap_t treemap; -+ size_t dvsize; -+ size_t topsize; -+ char* least_addr; -+ mchunkptr dv; -+ mchunkptr top; -+ size_t trim_check; -+ size_t magic; -+ mchunkptr smallbins[(NSMALLBINS+1)*2]; -+ tbinptr treebins[NTREEBINS]; -+ size_t footprint; -+ size_t max_footprint; -+ flag_t mflags; -+#if USE_LOCKS -+ MLOCK_T mutex; /* locate lock among fields that rarely change */ -+#endif /* USE_LOCKS */ -+ msegment seg; -+}; -+ -+typedef struct malloc_state* mstate; -+ -+/* ------------- Global malloc_state and malloc_params ------------------- */ -+ -+/* -+ malloc_params holds global properties, including those that can be -+ dynamically set using mallopt. There is a single instance, mparams, -+ initialized in init_mparams. -+*/ -+ -+struct malloc_params { -+ size_t magic; -+ size_t page_size; -+ size_t granularity; -+ size_t mmap_threshold; -+ size_t trim_threshold; -+ flag_t default_mflags; -+}; -+ -+static struct malloc_params mparams; -+ -+/* The global malloc_state used for all non-"mspace" calls */ -+static struct malloc_state _gm_; -+#define gm (&_gm_) -+#define is_global(M) ((M) == &_gm_) -+#define is_initialized(M) ((M)->top != 0) -+ -+/* -------------------------- system alloc setup ------------------------- */ -+ -+/* Operations on mflags */ -+ -+#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -+#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -+#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) -+ -+#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -+#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -+#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) -+ -+#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -+#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) -+ -+#define set_lock(M,L)\ -+ ((M)->mflags = (L)?\ -+ ((M)->mflags | USE_LOCK_BIT) :\ -+ ((M)->mflags & ~USE_LOCK_BIT)) -+ -+/* page-align a size */ -+#define page_align(S)\ -+ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) -+ -+/* granularity-align a size */ -+#define granularity_align(S)\ -+ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) -+ -+#define is_page_aligned(S)\ -+ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -+#define is_granularity_aligned(S)\ -+ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) -+ -+/* True if segment S holds address A */ -+#define segment_holds(S, A)\ -+ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) -+ -+/* Return segment holding given address */ -+static msegmentptr segment_holding(mstate m, char* addr) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= sp->base && addr < sp->base + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+ -+/* Return true if segment contains a segment link */ -+static int has_segment_link(mstate m, msegmentptr ss) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) -+ return 1; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+ -+#ifndef MORECORE_CANNOT_TRIM -+#define should_trim(M,s) ((s) > (M)->trim_check) -+#else /* MORECORE_CANNOT_TRIM */ -+#define should_trim(M,s) (0) -+#endif /* MORECORE_CANNOT_TRIM */ -+ -+/* -+ TOP_FOOT_SIZE is padding at the end of a segment, including space -+ that may be needed to place segment records and fenceposts when new -+ noncontiguous segments are added. -+*/ -+#define TOP_FOOT_SIZE\ -+ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) -+ -+ -+/* ------------------------------- Hooks -------------------------------- */ -+ -+/* -+ PREACTION should be defined to return 0 on success, and nonzero on -+ failure. If you are not using locking, you can redefine these to do -+ anything you like. -+*/ -+ -+#if USE_LOCKS -+ -+/* Ensure locks are initialized */ -+#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) -+ -+#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -+#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -+#else /* USE_LOCKS */ -+ -+#ifndef PREACTION -+#define PREACTION(M) (0) -+#endif /* PREACTION */ -+ -+#ifndef POSTACTION -+#define POSTACTION(M) -+#endif /* POSTACTION */ -+ -+#endif /* USE_LOCKS */ -+ -+/* -+ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. -+ USAGE_ERROR_ACTION is triggered on detected bad frees and -+ reallocs. The argument p is an address that might have triggered the -+ fault. It is ignored by the two predefined actions, but might be -+ useful in custom actions that try to help diagnose errors. -+*/ -+ -+#if PROCEED_ON_ERROR -+ -+/* A count of the number of corruption errors causing resets */ -+int malloc_corruption_error_count; -+ -+/* default corruption action */ -+static void reset_on_error(mstate m); -+ -+#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -+#define USAGE_ERROR_ACTION(m, p) -+ -+#else /* PROCEED_ON_ERROR */ -+ -+#ifndef CORRUPTION_ERROR_ACTION -+#define CORRUPTION_ERROR_ACTION(m) ABORT -+#endif /* CORRUPTION_ERROR_ACTION */ -+ -+#ifndef USAGE_ERROR_ACTION -+#define USAGE_ERROR_ACTION(m,p) ABORT -+#endif /* USAGE_ERROR_ACTION */ -+ -+#endif /* PROCEED_ON_ERROR */ -+ -+/* -------------------------- Debugging setup ---------------------------- */ -+ -+#if ! DEBUG -+ -+#define check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) -+#define check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) -+#define check_malloc_state(M) -+#define check_top_chunk(M,P) -+ -+#else /* DEBUG */ -+#define check_free_chunk(M,P) do_check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -+#define check_top_chunk(M,P) do_check_top_chunk(M,P) -+#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -+#define check_malloc_state(M) do_check_malloc_state(M) -+ -+static void do_check_any_chunk(mstate m, mchunkptr p); -+static void do_check_top_chunk(mstate m, mchunkptr p); -+static void do_check_mmapped_chunk(mstate m, mchunkptr p); -+static void do_check_inuse_chunk(mstate m, mchunkptr p); -+static void do_check_free_chunk(mstate m, mchunkptr p); -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -+static void do_check_tree(mstate m, tchunkptr t); -+static void do_check_treebin(mstate m, bindex_t i); -+static void do_check_smallbin(mstate m, bindex_t i); -+static void do_check_malloc_state(mstate m); -+static int bin_find(mstate m, mchunkptr x); -+static size_t traverse_and_check(mstate m); -+#endif /* DEBUG */ -+ -+/* ---------------------------- Indexing Bins ---------------------------- */ -+ -+#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -+#define small_index(s) ((s) >> SMALLBIN_SHIFT) -+#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -+#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) -+ -+/* addressing by index. See above about smallbin repositioning */ -+#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -+#define treebin_at(M,i) (&((M)->treebins[i])) -+ -+/* assign tree index for size S to variable I */ -+#if defined(__GNUC__) && defined(i386) -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int K;\ -+ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ -+ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ -+ }\ -+} -+#else /* GNUC */ -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int Y = (unsigned int)X;\ -+ unsigned int N = ((Y - 0x100) >> 16) & 8;\ -+ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ -+ N += K;\ -+ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ -+ K = 14 - N + ((Y <<= K) >> 15);\ -+ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ -+ }\ -+} -+#endif /* GNUC */ -+ -+/* Bit representing maximum resolved size in a treebin at i */ -+#define bit_for_tree_index(i) \ -+ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) -+ -+/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -+#define leftshift_for_tree_index(i) \ -+ ((i == NTREEBINS-1)? 0 : \ -+ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) -+ -+/* The size of the smallest chunk held in bin with index i */ -+#define minsize_for_tree_index(i) \ -+ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ -+ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) -+ -+ -+/* ------------------------ Operations on bin maps ----------------------- */ -+ -+/* bit corresponding to given index */ -+#define idx2bit(i) ((binmap_t)(1) << (i)) -+ -+/* Mark/Clear bits with given index */ -+#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -+#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -+#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) -+ -+#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -+#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -+#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) -+ -+/* index corresponding to given bit */ -+ -+#if defined(__GNUC__) && defined(i386) -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int J;\ -+ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ -+ I = (bindex_t)J;\ -+} -+ -+#else /* GNUC */ -+#if USE_BUILTIN_FFS -+#define compute_bit2idx(X, I) I = ffs(X)-1 -+ -+#else /* USE_BUILTIN_FFS */ -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int Y = X - 1;\ -+ unsigned int K = Y >> (16-4) & 16;\ -+ unsigned int N = K; Y >>= K;\ -+ N += K = Y >> (8-3) & 8; Y >>= K;\ -+ N += K = Y >> (4-2) & 4; Y >>= K;\ -+ N += K = Y >> (2-1) & 2; Y >>= K;\ -+ N += K = Y >> (1-0) & 1; Y >>= K;\ -+ I = (bindex_t)(N + Y);\ -+} -+#endif /* USE_BUILTIN_FFS */ -+#endif /* GNUC */ -+ -+/* isolate the least set bit of a bitmap */ -+#define least_bit(x) ((x) & -(x)) -+ -+/* mask with all bits to left of least bit of x on */ -+#define left_bits(x) ((x<<1) | -(x<<1)) -+ -+/* mask with all bits to left of or equal to least bit of x on */ -+#define same_or_left_bits(x) ((x) | -(x)) -+ -+ -+/* ----------------------- Runtime Check Support ------------------------- */ -+ -+/* -+ For security, the main invariant is that malloc/free/etc never -+ writes to a static address other than malloc_state, unless static -+ malloc_state itself has been corrupted, which cannot occur via -+ malloc (because of these checks). In essence this means that we -+ believe all pointers, sizes, maps etc held in malloc_state, but -+ check all of those linked or offsetted from other embedded data -+ structures. These checks are interspersed with main code in a way -+ that tends to minimize their run-time cost. -+ -+ When FOOTERS is defined, in addition to range checking, we also -+ verify footer fields of inuse chunks, which can be used guarantee -+ that the mstate controlling malloc/free is intact. This is a -+ streamlined version of the approach described by William Robertson -+ et al in "Run-time Detection of Heap-based Overflows" LISA'03 -+ http://www.usenix.org/events/lisa03/tech/robertson.html The footer -+ of an inuse chunk holds the xor of its mstate and a random seed, -+ that is checked upon calls to free() and realloc(). This is -+ (probablistically) unguessable from outside the program, but can be -+ computed by any code successfully malloc'ing any chunk, so does not -+ itself provide protection against code that has already broken -+ security through some other means. Unlike Robertson et al, we -+ always dynamically check addresses of all offset chunks (previous, -+ next, etc). This turns out to be cheaper than relying on hashes. -+*/ -+ -+#if !INSECURE -+/* Check if address a is at least as high as any from MORECORE or MMAP */ -+#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -+/* Check if address of next chunk n is higher than base chunk p */ -+#define ok_next(p, n) ((char*)(p) < (char*)(n)) -+/* Check if p has its cinuse bit on */ -+#define ok_cinuse(p) cinuse(p) -+/* Check if p has its pinuse bit on */ -+#define ok_pinuse(p) pinuse(p) -+ -+#else /* !INSECURE */ -+#define ok_address(M, a) (1) -+#define ok_next(b, n) (1) -+#define ok_cinuse(p) (1) -+#define ok_pinuse(p) (1) -+#endif /* !INSECURE */ -+ -+#if (FOOTERS && !INSECURE) -+/* Check if (alleged) mstate m has expected magic field */ -+#define ok_magic(M) ((M)->magic == mparams.magic) -+#else /* (FOOTERS && !INSECURE) */ -+#define ok_magic(M) (1) -+#endif /* (FOOTERS && !INSECURE) */ -+ -+ -+/* In gcc, use __builtin_expect to minimize impact of checks */ -+#if !INSECURE -+#if defined(__GNUC__) && __GNUC__ >= 3 -+#define RTCHECK(e) __builtin_expect(e, 1) -+#else /* GNUC */ -+#define RTCHECK(e) (e) -+#endif /* GNUC */ -+#else /* !INSECURE */ -+#define RTCHECK(e) (1) -+#endif /* !INSECURE */ -+ -+/* macros to set up inuse chunks with or without footers */ -+ -+#if !FOOTERS -+ -+#define mark_inuse_foot(M,p,s) -+ -+/* Set cinuse bit and pinuse bit of next chunk */ -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) -+ -+/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) -+ -+/* Set size, cinuse and pinuse bit of this chunk */ -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) -+ -+#else /* FOOTERS */ -+ -+/* Set foot of inuse chunk to be xor of mstate and seed */ -+#define mark_inuse_foot(M,p,s)\ -+ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) -+ -+#define get_mstate_for(p)\ -+ ((mstate)(((mchunkptr)((char*)(p) +\ -+ (chunksize(p))))->prev_foot ^ mparams.magic)) -+ -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ -+ mark_inuse_foot(M,p,s)) -+ -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ -+ mark_inuse_foot(M,p,s)) -+ -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ mark_inuse_foot(M, p, s)) -+ -+#endif /* !FOOTERS */ -+ -+/* ---------------------------- setting mparams -------------------------- */ -+ -+/* Initialize mparams */ -+static int init_mparams(void) { -+ if (mparams.page_size == 0) { -+ size_t s; -+ -+ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; -+ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -+#if MORECORE_CONTIGUOUS -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -+#else /* MORECORE_CONTIGUOUS */ -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -+#endif /* MORECORE_CONTIGUOUS */ -+ -+#if (FOOTERS && !INSECURE) -+ { -+#if USE_DEV_RANDOM -+ int fd; -+ unsigned char buf[sizeof(size_t)]; -+ /* Try to use /dev/urandom, else fall back on using time */ -+ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && -+ read(fd, buf, sizeof(buf)) == sizeof(buf)) { -+ s = *((size_t *) buf); -+ close(fd); -+ } -+ else -+#endif /* USE_DEV_RANDOM */ -+ s = (size_t)(time(0) ^ (size_t)0x55555555U); -+ -+ s |= (size_t)8U; /* ensure nonzero */ -+ s &= ~(size_t)7U; /* improve chances of fault for bad values */ -+ -+ } -+#else /* (FOOTERS && !INSECURE) */ -+ s = (size_t)0x58585858U; -+#endif /* (FOOTERS && !INSECURE) */ -+ ACQUIRE_MAGIC_INIT_LOCK(); -+ if (mparams.magic == 0) { -+ mparams.magic = s; -+ /* Set up lock for main malloc area */ -+ INITIAL_LOCK(&gm->mutex); -+ gm->mflags = mparams.default_mflags; -+ } -+ RELEASE_MAGIC_INIT_LOCK(); -+ -+#if !defined(WIN32) && !defined(__OS2__) -+ mparams.page_size = malloc_getpagesize; -+ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? -+ DEFAULT_GRANULARITY : mparams.page_size); -+#elif defined (__OS2__) -+ /* if low-memory is used, os2munmap() would break -+ if it were anything other than 64k */ -+ mparams.page_size = 4096u; -+ mparams.granularity = 65536u; -+#else /* WIN32 */ -+ { -+ SYSTEM_INFO system_info; -+ GetSystemInfo(&system_info); -+ mparams.page_size = system_info.dwPageSize; -+ mparams.granularity = system_info.dwAllocationGranularity; -+ } -+#endif /* WIN32 */ -+ -+ /* Sanity-check configuration: -+ size_t must be unsigned and as wide as pointer type. -+ ints must be at least 4 bytes. -+ alignment must be at least 8. -+ Alignment, min chunk size, and page size must all be powers of 2. -+ */ -+ if ((sizeof(size_t) != sizeof(char*)) || -+ (MAX_SIZE_T < MIN_CHUNK_SIZE) || -+ (sizeof(int) < 4) || -+ (MALLOC_ALIGNMENT < (size_t)8U) || -+ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || -+ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || -+ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || -+ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) -+ ABORT; -+ } -+ return 0; -+} -+ -+/* support for mallopt */ -+static int change_mparam(int param_number, int value) { -+ size_t val = (size_t)value; -+ init_mparams(); -+ switch(param_number) { -+ case M_TRIM_THRESHOLD: -+ mparams.trim_threshold = val; -+ return 1; -+ case M_GRANULARITY: -+ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { -+ mparams.granularity = val; -+ return 1; -+ } -+ else -+ return 0; -+ case M_MMAP_THRESHOLD: -+ mparams.mmap_threshold = val; -+ return 1; -+ default: -+ return 0; -+ } -+} -+ -+#if DEBUG -+/* ------------------------- Debugging Support --------------------------- */ -+ -+/* Check properties of any chunk, whether free, inuse, mmapped etc */ -+static void do_check_any_chunk(mstate m, mchunkptr p) { -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+} -+ -+/* Check properties of top chunk */ -+static void do_check_top_chunk(mstate m, mchunkptr p) { -+ msegmentptr sp = segment_holding(m, (char*)p); -+ size_t sz = chunksize(p); -+ assert(sp != 0); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(sz == m->topsize); -+ assert(sz > 0); -+ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); -+ assert(pinuse(p)); -+ assert(!next_pinuse(p)); -+} -+ -+/* Check properties of (inuse) mmapped chunks */ -+static void do_check_mmapped_chunk(mstate m, mchunkptr p) { -+ size_t sz = chunksize(p); -+ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); -+ assert(is_mmapped(p)); -+ assert(use_mmap(m)); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(!is_small(sz)); -+ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); -+ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); -+ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -+} -+ -+/* Check properties of inuse chunks */ -+static void do_check_inuse_chunk(mstate m, mchunkptr p) { -+ do_check_any_chunk(m, p); -+ assert(cinuse(p)); -+ assert(next_pinuse(p)); -+ /* If not pinuse and not mmapped, previous chunk has OK offset */ -+ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); -+ if (is_mmapped(p)) -+ do_check_mmapped_chunk(m, p); -+} -+ -+/* Check properties of free chunks */ -+static void do_check_free_chunk(mstate m, mchunkptr p) { -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ mchunkptr next = chunk_plus_offset(p, sz); -+ do_check_any_chunk(m, p); -+ assert(!cinuse(p)); -+ assert(!next_pinuse(p)); -+ assert (!is_mmapped(p)); -+ if (p != m->dv && p != m->top) { -+ if (sz >= MIN_CHUNK_SIZE) { -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(is_aligned(chunk2mem(p))); -+ assert(next->prev_foot == sz); -+ assert(pinuse(p)); -+ assert (next == m->top || cinuse(next)); -+ assert(p->fd->bk == p); -+ assert(p->bk->fd == p); -+ } -+ else /* markers are always of size SIZE_T_SIZE */ -+ assert(sz == SIZE_T_SIZE); -+ } -+} -+ -+/* Check properties of malloced chunks at the point they are malloced */ -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ do_check_inuse_chunk(m, p); -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(sz >= MIN_CHUNK_SIZE); -+ assert(sz >= s); -+ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ -+ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); -+ } -+} -+ -+/* Check a tree and its subtrees. */ -+static void do_check_tree(mstate m, tchunkptr t) { -+ tchunkptr head = 0; -+ tchunkptr u = t; -+ bindex_t tindex = t->index; -+ size_t tsize = chunksize(t); -+ bindex_t idx; -+ compute_tree_index(tsize, idx); -+ assert(tindex == idx); -+ assert(tsize >= MIN_LARGE_SIZE); -+ assert(tsize >= minsize_for_tree_index(idx)); -+ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); -+ -+ do { /* traverse through chain of same-sized nodes */ -+ do_check_any_chunk(m, ((mchunkptr)u)); -+ assert(u->index == tindex); -+ assert(chunksize(u) == tsize); -+ assert(!cinuse(u)); -+ assert(!next_pinuse(u)); -+ assert(u->fd->bk == u); -+ assert(u->bk->fd == u); -+ if (u->parent == 0) { -+ assert(u->child[0] == 0); -+ assert(u->child[1] == 0); -+ } -+ else { -+ assert(head == 0); /* only one node on chain has parent */ -+ head = u; -+ assert(u->parent != u); -+ assert (u->parent->child[0] == u || -+ u->parent->child[1] == u || -+ *((tbinptr*)(u->parent)) == u); -+ if (u->child[0] != 0) { -+ assert(u->child[0]->parent == u); -+ assert(u->child[0] != u); -+ do_check_tree(m, u->child[0]); -+ } -+ if (u->child[1] != 0) { -+ assert(u->child[1]->parent == u); -+ assert(u->child[1] != u); -+ do_check_tree(m, u->child[1]); -+ } -+ if (u->child[0] != 0 && u->child[1] != 0) { -+ assert(chunksize(u->child[0]) < chunksize(u->child[1])); -+ } -+ } -+ u = u->fd; -+ } while (u != t); -+ assert(head != 0); -+} -+ -+/* Check all the chunks in a treebin. */ -+static void do_check_treebin(mstate m, bindex_t i) { -+ tbinptr* tb = treebin_at(m, i); -+ tchunkptr t = *tb; -+ int empty = (m->treemap & (1U << i)) == 0; -+ if (t == 0) -+ assert(empty); -+ if (!empty) -+ do_check_tree(m, t); -+} -+ -+/* Check all the chunks in a smallbin. */ -+static void do_check_smallbin(mstate m, bindex_t i) { -+ sbinptr b = smallbin_at(m, i); -+ mchunkptr p = b->bk; -+ unsigned int empty = (m->smallmap & (1U << i)) == 0; -+ if (p == b) -+ assert(empty); -+ if (!empty) { -+ for (; p != b; p = p->bk) { -+ size_t size = chunksize(p); -+ mchunkptr q; -+ /* each chunk claims to be free */ -+ do_check_free_chunk(m, p); -+ /* chunk belongs in bin */ -+ assert(small_index(size) == i); -+ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); -+ /* chunk is followed by an inuse chunk */ -+ q = next_chunk(p); -+ if (q->head != FENCEPOST_HEAD) -+ do_check_inuse_chunk(m, q); -+ } -+ } -+} -+ -+/* Find x in a bin. Used in other check functions. */ -+static int bin_find(mstate m, mchunkptr x) { -+ size_t size = chunksize(x); -+ if (is_small(size)) { -+ bindex_t sidx = small_index(size); -+ sbinptr b = smallbin_at(m, sidx); -+ if (smallmap_is_marked(m, sidx)) { -+ mchunkptr p = b; -+ do { -+ if (p == x) -+ return 1; -+ } while ((p = p->fd) != b); -+ } -+ } -+ else { -+ bindex_t tidx; -+ compute_tree_index(size, tidx); -+ if (treemap_is_marked(m, tidx)) { -+ tchunkptr t = *treebin_at(m, tidx); -+ size_t sizebits = size << leftshift_for_tree_index(tidx); -+ while (t != 0 && chunksize(t) != size) { -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ sizebits <<= 1; -+ } -+ if (t != 0) { -+ tchunkptr u = t; -+ do { -+ if (u == (tchunkptr)x) -+ return 1; -+ } while ((u = u->fd) != t); -+ } -+ } -+ } -+ return 0; -+} -+ -+/* Traverse each chunk and check it; return total */ -+static size_t traverse_and_check(mstate m) { -+ size_t sum = 0; -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ sum += m->topsize + TOP_FOOT_SIZE; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ mchunkptr lastq = 0; -+ assert(pinuse(q)); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ sum += chunksize(q); -+ if (cinuse(q)) { -+ assert(!bin_find(m, q)); -+ do_check_inuse_chunk(m, q); -+ } -+ else { -+ assert(q == m->dv || bin_find(m, q)); -+ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ -+ do_check_free_chunk(m, q); -+ } -+ lastq = q; -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } -+ return sum; -+} -+ -+/* Check all properties of malloc_state. */ -+static void do_check_malloc_state(mstate m) { -+ bindex_t i; -+ size_t total; -+ /* check bins */ -+ for (i = 0; i < NSMALLBINS; ++i) -+ do_check_smallbin(m, i); -+ for (i = 0; i < NTREEBINS; ++i) -+ do_check_treebin(m, i); -+ -+ if (m->dvsize != 0) { /* check dv chunk */ -+ do_check_any_chunk(m, m->dv); -+ assert(m->dvsize == chunksize(m->dv)); -+ assert(m->dvsize >= MIN_CHUNK_SIZE); -+ assert(bin_find(m, m->dv) == 0); -+ } -+ -+ if (m->top != 0) { /* check top chunk */ -+ do_check_top_chunk(m, m->top); -+ assert(m->topsize == chunksize(m->top)); -+ assert(m->topsize > 0); -+ assert(bin_find(m, m->top) == 0); -+ } -+ -+ total = traverse_and_check(m); -+ assert(total <= m->footprint); -+ assert(m->footprint <= m->max_footprint); -+} -+#endif /* DEBUG */ -+ -+/* ----------------------------- statistics ------------------------------ */ -+ -+#if !NO_MALLINFO -+static struct mallinfo internal_mallinfo(mstate m) { -+ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -+ if (!PREACTION(m)) { -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ size_t nfree = SIZE_T_ONE; /* top always free */ -+ size_t mfree = m->topsize + TOP_FOOT_SIZE; -+ size_t sum = mfree; -+ msegmentptr s = &m->seg; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ size_t sz = chunksize(q); -+ sum += sz; -+ if (!cinuse(q)) { -+ mfree += sz; -+ ++nfree; -+ } -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ -+ nm.arena = sum; -+ nm.ordblks = nfree; -+ nm.hblkhd = m->footprint - sum; -+ nm.usmblks = m->max_footprint; -+ nm.uordblks = m->footprint - mfree; -+ nm.fordblks = mfree; -+ nm.keepcost = m->topsize; -+ } -+ -+ POSTACTION(m); -+ } -+ return nm; -+} -+#endif /* !NO_MALLINFO */ -+ -+static void internal_malloc_stats(mstate m) { -+ if (!PREACTION(m)) { -+ size_t maxfp = 0; -+ size_t fp = 0; -+ size_t used = 0; -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ maxfp = m->max_footprint; -+ fp = m->footprint; -+ used = fp - (m->topsize + TOP_FOOT_SIZE); -+ -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ if (!cinuse(q)) -+ used -= chunksize(q); -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } -+ -+ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); -+ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); -+ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); -+ -+ POSTACTION(m); -+ } -+} -+ -+/* ----------------------- Operations on smallbins ----------------------- */ -+ -+/* -+ Various forms of linking and unlinking are defined as macros. Even -+ the ones for trees, which are very long but have very short typical -+ paths. This is ugly but reduces reliance on inlining support of -+ compilers. -+*/ -+ -+/* Link a free chunk into a smallbin */ -+#define insert_small_chunk(M, P, S) {\ -+ bindex_t I = small_index(S);\ -+ mchunkptr B = smallbin_at(M, I);\ -+ mchunkptr F = B;\ -+ assert(S >= MIN_CHUNK_SIZE);\ -+ if (!smallmap_is_marked(M, I))\ -+ mark_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, B->fd)))\ -+ F = B->fd;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ B->fd = P;\ -+ F->bk = P;\ -+ P->fd = F;\ -+ P->bk = B;\ -+} -+ -+/* Unlink a chunk from a smallbin */ -+#define unlink_small_chunk(M, P, S) {\ -+ mchunkptr F = P->fd;\ -+ mchunkptr B = P->bk;\ -+ bindex_t I = small_index(S);\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (F == B)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ -+ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ -+ F->bk = B;\ -+ B->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} -+ -+/* Unlink the first chunk from a smallbin */ -+#define unlink_first_small_chunk(M, B, P, I) {\ -+ mchunkptr F = P->fd;\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (B == F)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, F))) {\ -+ B->fd = F;\ -+ F->bk = B;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} -+ -+/* Replace dv node, binning the old one */ -+/* Used only when dvsize known to be small */ -+#define replace_dv(M, P, S) {\ -+ size_t DVS = M->dvsize;\ -+ if (DVS != 0) {\ -+ mchunkptr DV = M->dv;\ -+ assert(is_small(DVS));\ -+ insert_small_chunk(M, DV, DVS);\ -+ }\ -+ M->dvsize = S;\ -+ M->dv = P;\ -+} -+ -+/* ------------------------- Operations on trees ------------------------- */ -+ -+/* Insert chunk into tree */ -+#define insert_large_chunk(M, X, S) {\ -+ tbinptr* H;\ -+ bindex_t I;\ -+ compute_tree_index(S, I);\ -+ H = treebin_at(M, I);\ -+ X->index = I;\ -+ X->child[0] = X->child[1] = 0;\ -+ if (!treemap_is_marked(M, I)) {\ -+ mark_treemap(M, I);\ -+ *H = X;\ -+ X->parent = (tchunkptr)H;\ -+ X->fd = X->bk = X;\ -+ }\ -+ else {\ -+ tchunkptr T = *H;\ -+ size_t K = S << leftshift_for_tree_index(I);\ -+ for (;;) {\ -+ if (chunksize(T) != S) {\ -+ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ -+ K <<= 1;\ -+ if (*C != 0)\ -+ T = *C;\ -+ else if (RTCHECK(ok_address(M, C))) {\ -+ *C = X;\ -+ X->parent = T;\ -+ X->fd = X->bk = X;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr F = T->fd;\ -+ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ -+ T->fd = F->bk = X;\ -+ X->fd = F;\ -+ X->bk = T;\ -+ X->parent = 0;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ }\ -+ }\ -+} -+ -+/* -+ Unlink steps: -+ -+ 1. If x is a chained node, unlink it from its same-sized fd/bk links -+ and choose its bk node as its replacement. -+ 2. If x was the last node of its size, but not a leaf node, it must -+ be replaced with a leaf node (not merely one with an open left or -+ right), to make sure that lefts and rights of descendants -+ correspond properly to bit masks. We use the rightmost descendant -+ of x. We could use any other leaf, but this is easy to locate and -+ tends to counteract removal of leftmosts elsewhere, and so keeps -+ paths shorter than minimally guaranteed. This doesn't loop much -+ because on average a node in a tree is near the bottom. -+ 3. If x is the base of a chain (i.e., has parent links) relink -+ x's parent and children to x's replacement (or null if none). -+*/ -+ -+#define unlink_large_chunk(M, X) {\ -+ tchunkptr XP = X->parent;\ -+ tchunkptr R;\ -+ if (X->bk != X) {\ -+ tchunkptr F = X->fd;\ -+ R = X->bk;\ -+ if (RTCHECK(ok_address(M, F))) {\ -+ F->bk = R;\ -+ R->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr* RP;\ -+ if (((R = *(RP = &(X->child[1]))) != 0) ||\ -+ ((R = *(RP = &(X->child[0]))) != 0)) {\ -+ tchunkptr* CP;\ -+ while ((*(CP = &(R->child[1])) != 0) ||\ -+ (*(CP = &(R->child[0])) != 0)) {\ -+ R = *(RP = CP);\ -+ }\ -+ if (RTCHECK(ok_address(M, RP)))\ -+ *RP = 0;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ }\ -+ if (XP != 0) {\ -+ tbinptr* H = treebin_at(M, X->index);\ -+ if (X == *H) {\ -+ if ((*H = R) == 0) \ -+ clear_treemap(M, X->index);\ -+ }\ -+ else if (RTCHECK(ok_address(M, XP))) {\ -+ if (XP->child[0] == X) \ -+ XP->child[0] = R;\ -+ else \ -+ XP->child[1] = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ if (R != 0) {\ -+ if (RTCHECK(ok_address(M, R))) {\ -+ tchunkptr C0, C1;\ -+ R->parent = XP;\ -+ if ((C0 = X->child[0]) != 0) {\ -+ if (RTCHECK(ok_address(M, C0))) {\ -+ R->child[0] = C0;\ -+ C0->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ if ((C1 = X->child[1]) != 0) {\ -+ if (RTCHECK(ok_address(M, C1))) {\ -+ R->child[1] = C1;\ -+ C1->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+} -+ -+/* Relays to large vs small bin operations */ -+ -+#define insert_chunk(M, P, S)\ -+ if (is_small(S)) insert_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } -+ -+#define unlink_chunk(M, P, S)\ -+ if (is_small(S)) unlink_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } -+ -+ -+/* Relays to internal calls to malloc/free from realloc, memalign etc */ -+ -+#if ONLY_MSPACES -+#define internal_malloc(m, b) mspace_malloc(m, b) -+#define internal_free(m, mem) mspace_free(m,mem); -+#else /* ONLY_MSPACES */ -+#if MSPACES -+#define internal_malloc(m, b)\ -+ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -+#define internal_free(m, mem)\ -+ if (m == gm) dlfree(mem); else mspace_free(m,mem); -+#else /* MSPACES */ -+#define internal_malloc(m, b) dlmalloc(b) -+#define internal_free(m, mem) dlfree(mem) -+#endif /* MSPACES */ -+#endif /* ONLY_MSPACES */ -+ -+/* ----------------------- Direct-mmapping chunks ----------------------- */ -+ -+/* -+ Directly mmapped chunks are set up with an offset to the start of -+ the mmapped region stored in the prev_foot field of the chunk. This -+ allows reconstruction of the required argument to MUNMAP when freed, -+ and also allows adjustment of the returned chunk to meet alignment -+ requirements (especially in memalign). There is also enough space -+ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain -+ the PINUSE bit so frees can be checked. -+*/ -+ -+/* Malloc using mmap */ -+static void* mmap_alloc(mstate m, size_t nb) { -+ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ if (mmsize > nb) { /* Check for wrap around 0 */ -+ char* mm = (char*)(DIRECT_MMAP(mmsize)); -+ if (mm != CMFAIL) { -+ size_t offset = align_offset(chunk2mem(mm)); -+ size_t psize = mmsize - offset - MMAP_FOOT_PAD; -+ mchunkptr p = (mchunkptr)(mm + offset); -+ p->prev_foot = offset | IS_MMAPPED_BIT; -+ (p)->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, p, psize); -+ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; -+ -+ if (mm < m->least_addr) -+ m->least_addr = mm; -+ if ((m->footprint += mmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ assert(is_aligned(chunk2mem(p))); -+ check_mmapped_chunk(m, p); -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} -+ -+/* Realloc using mmap */ -+static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { -+ size_t oldsize = chunksize(oldp); -+ if (is_small(nb)) /* Can't shrink mmap regions below small size */ -+ return 0; -+ /* Keep old chunk if big enough but not too big */ -+ if (oldsize >= nb + SIZE_T_SIZE && -+ (oldsize - nb) <= (mparams.granularity << 1)) -+ return oldp; -+ else { -+ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; -+ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; -+ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + -+ CHUNK_ALIGN_MASK); -+ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, -+ oldmmsize, newmmsize, 1); -+ if (cp != CMFAIL) { -+ mchunkptr newp = (mchunkptr)(cp + offset); -+ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; -+ newp->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, newp, psize); -+ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; -+ -+ if (cp < m->least_addr) -+ m->least_addr = cp; -+ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ check_mmapped_chunk(m, newp); -+ return newp; -+ } -+ } -+ return 0; -+} -+ -+/* -------------------------- mspace management -------------------------- */ -+ -+/* Initialize top chunk and its size */ -+static void init_top(mstate m, mchunkptr p, size_t psize) { -+ /* Ensure alignment */ -+ size_t offset = align_offset(chunk2mem(p)); -+ p = (mchunkptr)((char*)p + offset); -+ psize -= offset; -+ -+ m->top = p; -+ m->topsize = psize; -+ p->head = psize | PINUSE_BIT; -+ /* set size of fake trailing chunk holding overhead space only once */ -+ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; -+ m->trim_check = mparams.trim_threshold; /* reset on each update */ -+} -+ -+/* Initialize bins for a new mstate that is otherwise zeroed out */ -+static void init_bins(mstate m) { -+ /* Establish circular links for smallbins */ -+ bindex_t i; -+ for (i = 0; i < NSMALLBINS; ++i) { -+ sbinptr bin = smallbin_at(m,i); -+ bin->fd = bin->bk = bin; -+ } -+} -+ -+#if PROCEED_ON_ERROR -+ -+/* default corruption action */ -+static void reset_on_error(mstate m) { -+ int i; -+ ++malloc_corruption_error_count; -+ /* Reinitialize fields to forget about all memory */ -+ m->smallbins = m->treebins = 0; -+ m->dvsize = m->topsize = 0; -+ m->seg.base = 0; -+ m->seg.size = 0; -+ m->seg.next = 0; -+ m->top = m->dv = 0; -+ for (i = 0; i < NTREEBINS; ++i) -+ *treebin_at(m, i) = 0; -+ init_bins(m); -+} -+#endif /* PROCEED_ON_ERROR */ -+ -+/* Allocate chunk and prepend remainder with chunk in successor base. */ -+static void* prepend_alloc(mstate m, char* newbase, char* oldbase, -+ size_t nb) { -+ mchunkptr p = align_as_chunk(newbase); -+ mchunkptr oldfirst = align_as_chunk(oldbase); -+ size_t psize = (char*)oldfirst - (char*)p; -+ mchunkptr q = chunk_plus_offset(p, nb); -+ size_t qsize = psize - nb; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); -+ -+ assert((char*)oldfirst > (char*)q); -+ assert(pinuse(oldfirst)); -+ assert(qsize >= MIN_CHUNK_SIZE); -+ -+ /* consolidate remainder with first chunk of old base */ -+ if (oldfirst == m->top) { -+ size_t tsize = m->topsize += qsize; -+ m->top = q; -+ q->head = tsize | PINUSE_BIT; -+ check_top_chunk(m, q); -+ } -+ else if (oldfirst == m->dv) { -+ size_t dsize = m->dvsize += qsize; -+ m->dv = q; -+ set_size_and_pinuse_of_free_chunk(q, dsize); -+ } -+ else { -+ if (!cinuse(oldfirst)) { -+ size_t nsize = chunksize(oldfirst); -+ unlink_chunk(m, oldfirst, nsize); -+ oldfirst = chunk_plus_offset(oldfirst, nsize); -+ qsize += nsize; -+ } -+ set_free_with_pinuse(q, qsize, oldfirst); -+ insert_chunk(m, q, qsize); -+ check_free_chunk(m, q); -+ } -+ -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+} -+ -+ -+/* Add a segment to hold a new noncontiguous region */ -+static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { -+ /* Determine locations and sizes of segment, fenceposts, old top */ -+ char* old_top = (char*)m->top; -+ msegmentptr oldsp = segment_holding(m, old_top); -+ char* old_end = oldsp->base + oldsp->size; -+ size_t ssize = pad_request(sizeof(struct malloc_segment)); -+ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ size_t offset = align_offset(chunk2mem(rawsp)); -+ char* asp = rawsp + offset; -+ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; -+ mchunkptr sp = (mchunkptr)csp; -+ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); -+ mchunkptr tnext = chunk_plus_offset(sp, ssize); -+ mchunkptr p = tnext; -+ int nfences = 0; -+ -+ /* reset top to new space */ -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); -+ -+ /* Set up segment record */ -+ assert(is_aligned(ss)); -+ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); -+ *ss = m->seg; /* Push current record */ -+ m->seg.base = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmapped); -+ m->seg.next = ss; -+ -+ /* Insert trailing fenceposts */ -+ for (;;) { -+ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); -+ p->head = FENCEPOST_HEAD; -+ ++nfences; -+ if ((char*)(&(nextp->head)) < old_end) -+ p = nextp; -+ else -+ break; -+ } -+ assert(nfences >= 2); -+ -+ /* Insert the rest of old top into a bin as an ordinary free chunk */ -+ if (csp != old_top) { -+ mchunkptr q = (mchunkptr)old_top; -+ size_t psize = csp - old_top; -+ mchunkptr tn = chunk_plus_offset(q, psize); -+ set_free_with_pinuse(q, psize, tn); -+ insert_chunk(m, q, psize); -+ } -+ -+ check_top_chunk(m, m->top); -+} -+ -+/* -------------------------- System allocation -------------------------- */ -+ -+/* Get memory from system using MORECORE or MMAP */ -+static void* sys_alloc(mstate m, size_t nb) { -+ char* tbase = CMFAIL; -+ size_t tsize = 0; -+ flag_t mmap_flag = 0; -+ -+ init_mparams(); -+ -+ /* Directly map large chunks */ -+ if (use_mmap(m) && nb >= mparams.mmap_threshold) { -+ void* mem = mmap_alloc(m, nb); -+ if (mem != 0) -+ return mem; -+ } -+ -+ /* -+ Try getting memory in any of three ways (in most-preferred to -+ least-preferred order): -+ 1. A call to MORECORE that can normally contiguously extend memory. -+ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or -+ or main space is mmapped or a previous contiguous call failed) -+ 2. A call to MMAP new space (disabled if not HAVE_MMAP). -+ Note that under the default settings, if MORECORE is unable to -+ fulfill a request, and HAVE_MMAP is true, then mmap is -+ used as a noncontiguous system allocator. This is a useful backup -+ strategy for systems with holes in address spaces -- in this case -+ sbrk cannot contiguously expand the heap, but mmap may be able to -+ find space. -+ 3. A call to MORECORE that cannot usually contiguously extend memory. -+ (disabled if not HAVE_MORECORE) -+ */ -+ -+ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { -+ char* br = CMFAIL; -+ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); -+ size_t asize = 0; -+ ACQUIRE_MORECORE_LOCK(); -+ -+ if (ss == 0) { /* First time through or recovery */ -+ char* base = (char*)CALL_MORECORE(0); -+ if (base != CMFAIL) { -+ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Adjust to end on a page boundary */ -+ if (!is_page_aligned(base)) -+ asize += (page_align((size_t)base) - (size_t)base); -+ /* Can't call MORECORE if size is negative when treated as signed */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == base) { -+ tbase = base; -+ tsize = asize; -+ } -+ } -+ } -+ else { -+ /* Subtract out existing available top space from MORECORE request. */ -+ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Use mem here only if it did continuously extend old space */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { -+ tbase = br; -+ tsize = asize; -+ } -+ } -+ -+ if (tbase == CMFAIL) { /* Cope with partial failure */ -+ if (br != CMFAIL) { /* Try to use/extend the space we did get */ -+ if (asize < HALF_MAX_SIZE_T && -+ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { -+ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); -+ if (esize < HALF_MAX_SIZE_T) { -+ char* end = (char*)CALL_MORECORE(esize); -+ if (end != CMFAIL) -+ asize += esize; -+ else { /* Can't use; try to release */ -+ (void)CALL_MORECORE(-asize); -+ br = CMFAIL; -+ } -+ } -+ } -+ } -+ if (br != CMFAIL) { /* Use the space we did get */ -+ tbase = br; -+ tsize = asize; -+ } -+ else -+ disable_contiguous(m); /* Don't try contiguous path in the future */ -+ } -+ -+ RELEASE_MORECORE_LOCK(); -+ } -+ -+ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ -+ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; -+ size_t rsize = granularity_align(req); -+ if (rsize > nb) { /* Fail if wraps around zero */ -+ char* mp = (char*)(CALL_MMAP(rsize)); -+ if (mp != CMFAIL) { -+ tbase = mp; -+ tsize = rsize; -+ mmap_flag = IS_MMAPPED_BIT; -+ } -+ } -+ } -+ -+ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ -+ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ if (asize < HALF_MAX_SIZE_T) { -+ char* br = CMFAIL; -+ char* end = CMFAIL; -+ ACQUIRE_MORECORE_LOCK(); -+ br = (char*)(CALL_MORECORE(asize)); -+ end = (char*)(CALL_MORECORE(0)); -+ RELEASE_MORECORE_LOCK(); -+ if (br != CMFAIL && end != CMFAIL && br < end) { -+ size_t ssize = end - br; -+ if (ssize > nb + TOP_FOOT_SIZE) { -+ tbase = br; -+ tsize = ssize; -+ } -+ } -+ } -+ } -+ -+ if (tbase != CMFAIL) { -+ -+ if ((m->footprint += tsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ -+ if (!is_initialized(m)) { /* first-time initialization */ -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmap_flag); -+ m->magic = mparams.magic; -+ init_bins(m); -+ if (is_global(m)) -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); -+ else { -+ /* Offset top by embedded malloc_state */ -+ mchunkptr mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); -+ } -+ } -+ -+ else { -+ /* Try to merge with an existing segment */ -+ msegmentptr sp = &m->seg; -+ while (sp != 0 && tbase != sp->base + sp->size) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && -+ segment_holds(sp, m->top)) { /* append */ -+ sp->size += tsize; -+ init_top(m, m->top, m->topsize + tsize); -+ } -+ else { -+ if (tbase < m->least_addr) -+ m->least_addr = tbase; -+ sp = &m->seg; -+ while (sp != 0 && sp->base != tbase + tsize) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { -+ char* oldbase = sp->base; -+ sp->base = tbase; -+ sp->size += tsize; -+ return prepend_alloc(m, tbase, oldbase, nb); -+ } -+ else -+ add_segment(m, tbase, tsize, mmap_flag); -+ } -+ } -+ -+ if (nb < m->topsize) { /* Allocate from new or extended top space */ -+ size_t rsize = m->topsize -= nb; -+ mchunkptr p = m->top; -+ mchunkptr r = m->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); -+ check_top_chunk(m, m->top); -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+ } -+ } -+ -+ MALLOC_FAILURE_ACTION; -+ return 0; -+} -+ -+/* ----------------------- system deallocation -------------------------- */ -+ -+/* Unmap and unlink any mmapped segments that don't contain used chunks */ -+static size_t release_unused_segments(mstate m) { -+ size_t released = 0; -+ msegmentptr pred = &m->seg; -+ msegmentptr sp = pred->next; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ msegmentptr next = sp->next; -+ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { -+ mchunkptr p = align_as_chunk(base); -+ size_t psize = chunksize(p); -+ /* Can unmap if first chunk holds entire segment and not pinned */ -+ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { -+ tchunkptr tp = (tchunkptr)p; -+ assert(segment_holds(sp, (char*)sp)); -+ if (p == m->dv) { -+ m->dv = 0; -+ m->dvsize = 0; -+ } -+ else { -+ unlink_large_chunk(m, tp); -+ } -+ if (CALL_MUNMAP(base, size) == 0) { -+ released += size; -+ m->footprint -= size; -+ /* unlink obsoleted record */ -+ sp = pred; -+ sp->next = next; -+ } -+ else { /* back out if cannot unmap */ -+ insert_large_chunk(m, tp, psize); -+ } -+ } -+ } -+ pred = sp; -+ sp = next; -+ } -+ return released; -+} -+ -+static int sys_trim(mstate m, size_t pad) { -+ size_t released = 0; -+ if (pad < MAX_REQUEST && is_initialized(m)) { -+ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ -+ -+ if (m->topsize > pad) { -+ /* Shrink top space in granularity-size units, keeping at least one */ -+ size_t unit = mparams.granularity; -+ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - -+ SIZE_T_ONE) * unit; -+ msegmentptr sp = segment_holding(m, (char*)m->top); -+ -+ if (!is_extern_segment(sp)) { -+ if (is_mmapped_segment(sp)) { -+ if (HAVE_MMAP && -+ sp->size >= extra && -+ !has_segment_link(m, sp)) { /* can't shrink if pinned */ -+ size_t newsize = sp->size - extra; -+ /* Prefer mremap, fall back to munmap */ -+ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || -+ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { -+ released = extra; -+ } -+ } -+ } -+ else if (HAVE_MORECORE) { -+ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ -+ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; -+ ACQUIRE_MORECORE_LOCK(); -+ { -+ /* Make sure end of memory is where we last set it. */ -+ char* old_br = (char*)(CALL_MORECORE(0)); -+ if (old_br == sp->base + sp->size) { -+ char* rel_br = (char*)(CALL_MORECORE(-extra)); -+ char* new_br = (char*)(CALL_MORECORE(0)); -+ if (rel_br != CMFAIL && new_br < old_br) -+ released = old_br - new_br; -+ } -+ } -+ RELEASE_MORECORE_LOCK(); -+ } -+ } -+ -+ if (released != 0) { -+ sp->size -= released; -+ m->footprint -= released; -+ init_top(m, m->top, m->topsize - released); -+ check_top_chunk(m, m->top); -+ } -+ } -+ -+ /* Unmap any unused mmapped segments */ -+ if (HAVE_MMAP) -+ released += release_unused_segments(m); -+ -+ /* On failure, disable autotrim to avoid repeated failed future calls */ -+ if (released == 0) -+ m->trim_check = MAX_SIZE_T; -+ } -+ -+ return (released != 0)? 1 : 0; -+} -+ -+/* ---------------------------- malloc support --------------------------- */ -+ -+/* allocate a large request from the best fitting chunk in a treebin */ -+static void* tmalloc_large(mstate m, size_t nb) { -+ tchunkptr v = 0; -+ size_t rsize = -nb; /* Unsigned negation */ -+ tchunkptr t; -+ bindex_t idx; -+ compute_tree_index(nb, idx); -+ -+ if ((t = *treebin_at(m, idx)) != 0) { -+ /* Traverse tree for this bin looking for node with size == nb */ -+ size_t sizebits = nb << leftshift_for_tree_index(idx); -+ tchunkptr rst = 0; /* The deepest untaken right subtree */ -+ for (;;) { -+ tchunkptr rt; -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ v = t; -+ if ((rsize = trem) == 0) -+ break; -+ } -+ rt = t->child[1]; -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ if (rt != 0 && rt != t) -+ rst = rt; -+ if (t == 0) { -+ t = rst; /* set t to least subtree holding sizes > nb */ -+ break; -+ } -+ sizebits <<= 1; -+ } -+ } -+ -+ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ -+ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; -+ if (leftbits != 0) { -+ bindex_t i; -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ t = *treebin_at(m, i); -+ } -+ } -+ -+ while (t != 0) { /* find smallest of tree or subtree */ -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ t = leftmost_child(t); -+ } -+ -+ /* If dv is a better fit, return 0 so malloc will use it */ -+ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { -+ if (RTCHECK(ok_address(m, v))) { /* split */ -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ insert_chunk(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } -+ CORRUPTION_ERROR_ACTION(m); -+ } -+ return 0; -+} -+ -+/* allocate a small request from the best fitting chunk in a treebin */ -+static void* tmalloc_small(mstate m, size_t nb) { -+ tchunkptr t, v; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leastbit = least_bit(m->treemap); -+ compute_bit2idx(leastbit, i); -+ -+ v = t = *treebin_at(m, i); -+ rsize = chunksize(t) - nb; -+ -+ while ((t = leftmost_child(t)) != 0) { -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ } -+ -+ if (RTCHECK(ok_address(m, v))) { -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } -+ -+ CORRUPTION_ERROR_ACTION(m); -+ return 0; -+} -+ -+/* --------------------------- realloc support --------------------------- */ -+ -+static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { -+ if (bytes >= MAX_REQUEST) { -+ MALLOC_FAILURE_ACTION; -+ return 0; -+ } -+ if (!PREACTION(m)) { -+ mchunkptr oldp = mem2chunk(oldmem); -+ size_t oldsize = chunksize(oldp); -+ mchunkptr next = chunk_plus_offset(oldp, oldsize); -+ mchunkptr newp = 0; -+ void* extra = 0; -+ -+ /* Try to either shrink or extend into top. Else malloc-copy-free */ -+ -+ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && -+ ok_next(oldp, next) && ok_pinuse(next))) { -+ size_t nb = request2size(bytes); -+ if (is_mmapped(oldp)) -+ newp = mmap_resize(m, oldp, nb); -+ else if (oldsize >= nb) { /* already big enough */ -+ size_t rsize = oldsize - nb; -+ newp = oldp; -+ if (rsize >= MIN_CHUNK_SIZE) { -+ mchunkptr remainder = chunk_plus_offset(newp, nb); -+ set_inuse(m, newp, nb); -+ set_inuse(m, remainder, rsize); -+ extra = chunk2mem(remainder); -+ } -+ } -+ else if (next == m->top && oldsize + m->topsize > nb) { -+ /* Expand into top */ -+ size_t newsize = oldsize + m->topsize; -+ size_t newtopsize = newsize - nb; -+ mchunkptr newtop = chunk_plus_offset(oldp, nb); -+ set_inuse(m, oldp, nb); -+ newtop->head = newtopsize |PINUSE_BIT; -+ m->top = newtop; -+ m->topsize = newtopsize; -+ newp = oldp; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(m, oldmem); -+ POSTACTION(m); -+ return 0; -+ } -+ -+ POSTACTION(m); -+ -+ if (newp != 0) { -+ if (extra != 0) { -+ internal_free(m, extra); -+ } -+ check_inuse_chunk(m, newp); -+ return chunk2mem(newp); -+ } -+ else { -+ void* newmem = internal_malloc(m, bytes); -+ if (newmem != 0) { -+ size_t oc = oldsize - overhead_for(oldp); -+ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); -+ internal_free(m, oldmem); -+ } -+ return newmem; -+ } -+ } -+ return 0; -+} -+ -+/* --------------------------- memalign support -------------------------- */ -+ -+static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { -+ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ -+ return internal_malloc(m, bytes); -+ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ -+ alignment = MIN_CHUNK_SIZE; -+ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ -+ size_t a = MALLOC_ALIGNMENT << 1; -+ while (a < alignment) a <<= 1; -+ alignment = a; -+ } -+ -+ if (bytes >= MAX_REQUEST - alignment) { -+ if (m != 0) { /* Test isn't needed but avoids compiler warning */ -+ MALLOC_FAILURE_ACTION; -+ } -+ } -+ else { -+ size_t nb = request2size(bytes); -+ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; -+ char* mem = (char*)internal_malloc(m, req); -+ if (mem != 0) { -+ void* leader = 0; -+ void* trailer = 0; -+ mchunkptr p = mem2chunk(mem); -+ -+ if (PREACTION(m)) return 0; -+ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ -+ /* -+ Find an aligned spot inside chunk. Since we need to give -+ back leading space in a chunk of at least MIN_CHUNK_SIZE, if -+ the first calculation places us at a spot with less than -+ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. -+ We've allocated enough total room so that this is always -+ possible. -+ */ -+ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + -+ alignment - -+ SIZE_T_ONE)) & -+ -alignment)); -+ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? -+ br : br+alignment; -+ mchunkptr newp = (mchunkptr)pos; -+ size_t leadsize = pos - (char*)(p); -+ size_t newsize = chunksize(p) - leadsize; -+ -+ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ -+ newp->prev_foot = p->prev_foot + leadsize; -+ newp->head = (newsize|CINUSE_BIT); -+ } -+ else { /* Otherwise, give back leader, use the rest */ -+ set_inuse(m, newp, newsize); -+ set_inuse(m, p, leadsize); -+ leader = chunk2mem(p); -+ } -+ p = newp; -+ } -+ -+ /* Give back spare room at the end */ -+ if (!is_mmapped(p)) { -+ size_t size = chunksize(p); -+ if (size > nb + MIN_CHUNK_SIZE) { -+ size_t remainder_size = size - nb; -+ mchunkptr remainder = chunk_plus_offset(p, nb); -+ set_inuse(m, p, nb); -+ set_inuse(m, remainder, remainder_size); -+ trailer = chunk2mem(remainder); -+ } -+ } -+ -+ assert (chunksize(p) >= nb); -+ assert((((size_t)(chunk2mem(p))) % alignment) == 0); -+ check_inuse_chunk(m, p); -+ POSTACTION(m); -+ if (leader != 0) { -+ internal_free(m, leader); -+ } -+ if (trailer != 0) { -+ internal_free(m, trailer); -+ } -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} -+ -+/* ------------------------ comalloc/coalloc support --------------------- */ -+ -+static void** ialloc(mstate m, -+ size_t n_elements, -+ size_t* sizes, -+ int opts, -+ void* chunks[]) { -+ /* -+ This provides common support for independent_X routines, handling -+ all of the combinations that can result. -+ -+ The opts arg has: -+ bit 0 set if all elements are same size (using sizes[0]) -+ bit 1 set if elements should be zeroed -+ */ -+ -+ size_t element_size; /* chunksize of each element, if all same */ -+ size_t contents_size; /* total size of elements */ -+ size_t array_size; /* request size of pointer array */ -+ void* mem; /* malloced aggregate space */ -+ mchunkptr p; /* corresponding chunk */ -+ size_t remainder_size; /* remaining bytes while splitting */ -+ void** marray; /* either "chunks" or malloced ptr array */ -+ mchunkptr array_chunk; /* chunk for malloced ptr array */ -+ flag_t was_enabled; /* to disable mmap */ -+ size_t size; -+ size_t i; -+ -+ /* compute array length, if needed */ -+ if (chunks != 0) { -+ if (n_elements == 0) -+ return chunks; /* nothing to do */ -+ marray = chunks; -+ array_size = 0; -+ } -+ else { -+ /* if empty req, must still return chunk representing empty array */ -+ if (n_elements == 0) -+ return (void**)internal_malloc(m, 0); -+ marray = 0; -+ array_size = request2size(n_elements * (sizeof(void*))); -+ } -+ -+ /* compute total element size */ -+ if (opts & 0x1) { /* all-same-size */ -+ element_size = request2size(*sizes); -+ contents_size = n_elements * element_size; -+ } -+ else { /* add up all the sizes */ -+ element_size = 0; -+ contents_size = 0; -+ for (i = 0; i != n_elements; ++i) -+ contents_size += request2size(sizes[i]); -+ } -+ -+ size = contents_size + array_size; -+ -+ /* -+ Allocate the aggregate chunk. First disable direct-mmapping so -+ malloc won't use it, since we would not be able to later -+ free/realloc space internal to a segregated mmap region. -+ */ -+ was_enabled = use_mmap(m); -+ disable_mmap(m); -+ mem = internal_malloc(m, size - CHUNK_OVERHEAD); -+ if (was_enabled) -+ enable_mmap(m); -+ if (mem == 0) -+ return 0; -+ -+ if (PREACTION(m)) return 0; -+ p = mem2chunk(mem); -+ remainder_size = chunksize(p); -+ -+ assert(!is_mmapped(p)); -+ -+ if (opts & 0x2) { /* optionally clear the elements */ -+ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); -+ } -+ -+ /* If not provided, allocate the pointer array as final part of chunk */ -+ if (marray == 0) { -+ size_t array_chunk_size; -+ array_chunk = chunk_plus_offset(p, contents_size); -+ array_chunk_size = remainder_size - contents_size; -+ marray = (void**) (chunk2mem(array_chunk)); -+ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); -+ remainder_size = contents_size; -+ } -+ -+ /* split out elements */ -+ for (i = 0; ; ++i) { -+ marray[i] = chunk2mem(p); -+ if (i != n_elements-1) { -+ if (element_size != 0) -+ size = element_size; -+ else -+ size = request2size(sizes[i]); -+ remainder_size -= size; -+ set_size_and_pinuse_of_inuse_chunk(m, p, size); -+ p = chunk_plus_offset(p, size); -+ } -+ else { /* the final element absorbs any overallocation slop */ -+ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); -+ break; -+ } -+ } -+ -+#if DEBUG -+ if (marray != chunks) { -+ /* final element must have exactly exhausted chunk */ -+ if (element_size != 0) { -+ assert(remainder_size == element_size); -+ } -+ else { -+ assert(remainder_size == request2size(sizes[i])); -+ } -+ check_inuse_chunk(m, mem2chunk(marray)); -+ } -+ for (i = 0; i != n_elements; ++i) -+ check_inuse_chunk(m, mem2chunk(marray[i])); -+ -+#endif /* DEBUG */ -+ -+ POSTACTION(m); -+ return marray; -+} -+ -+ -+/* -------------------------- public routines ---------------------------- */ -+ -+#if !ONLY_MSPACES -+ -+void* dlmalloc(size_t bytes) { -+ /* -+ Basic algorithm: -+ If a small request (< 256 bytes minus per-chunk overhead): -+ 1. If one exists, use a remainderless chunk in associated smallbin. -+ (Remainderless means that there are too few excess bytes to -+ represent as a chunk.) -+ 2. If it is big enough, use the dv chunk, which is normally the -+ chunk adjacent to the one used for the most recent small request. -+ 3. If one exists, split the smallest available chunk in a bin, -+ saving remainder in dv. -+ 4. If it is big enough, use the top chunk. -+ 5. If available, get memory from system and use it -+ Otherwise, for a large request: -+ 1. Find the smallest available binned chunk that fits, and use it -+ if it is better fitting than dv chunk, splitting if necessary. -+ 2. If better fitting than any binned chunk, use the dv chunk. -+ 3. If it is big enough, use the top chunk. -+ 4. If request size >= mmap threshold, try to directly mmap this chunk. -+ 5. If available, get memory from system and use it -+ -+ The ugly goto's here ensure that postaction occurs along all paths. -+ */ -+ -+ if (!PREACTION(gm)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = gm->smallmap >> idx; -+ -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(gm, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(gm, b, p, idx); -+ set_inuse_and_pinuse(gm, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb > gm->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(gm, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(gm, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(gm, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(gm, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } -+ -+ if (nb <= gm->dvsize) { -+ size_t rsize = gm->dvsize - nb; -+ mchunkptr p = gm->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); -+ gm->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = gm->dvsize; -+ gm->dvsize = 0; -+ gm->dv = 0; -+ set_inuse_and_pinuse(gm, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb < gm->topsize) { /* Split top */ -+ size_t rsize = gm->topsize -= nb; -+ mchunkptr p = gm->top; -+ mchunkptr r = gm->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(gm, gm->top); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ mem = sys_alloc(gm, nb); -+ -+ postaction: -+ POSTACTION(gm); -+ return mem; -+ } -+ -+ return 0; -+} -+ -+void dlfree(void* mem) { -+ /* -+ Consolidate freed chunks with preceding or succeeding bordering -+ free chunks, if they exist, and then place in a bin. Intermixed -+ with special cases for top, dv, mmapped chunks, and usage errors. -+ */ -+ -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+#else /* FOOTERS */ -+#define fm gm -+#endif /* FOOTERS */ -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } -+ -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+#if !FOOTERS -+#undef fm -+#endif /* FOOTERS */ -+} -+ -+void* dlcalloc(size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = dlmalloc(req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} -+ -+void* dlrealloc(void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return dlmalloc(bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ dlfree(oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if ! FOOTERS -+ mstate m = gm; -+#else /* FOOTERS */ -+ mstate m = get_mstate_for(mem2chunk(oldmem)); -+ if (!ok_magic(m)) { -+ USAGE_ERROR_ACTION(m, oldmem); -+ return 0; -+ } -+#endif /* FOOTERS */ -+ return internal_realloc(m, oldmem, bytes); -+ } -+} -+ -+void* dlmemalign(size_t alignment, size_t bytes) { -+ return internal_memalign(gm, alignment, bytes); -+} -+ -+void** dlindependent_calloc(size_t n_elements, size_t elem_size, -+ void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ return ialloc(gm, n_elements, &sz, 3, chunks); -+} -+ -+void** dlindependent_comalloc(size_t n_elements, size_t sizes[], -+ void* chunks[]) { -+ return ialloc(gm, n_elements, sizes, 0, chunks); -+} -+ -+void* dlvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, bytes); -+} -+ -+void* dlpvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -+} -+ -+int dlmalloc_trim(size_t pad) { -+ int result = 0; -+ if (!PREACTION(gm)) { -+ result = sys_trim(gm, pad); -+ POSTACTION(gm); -+ } -+ return result; -+} -+ -+size_t dlmalloc_footprint(void) { -+ return gm->footprint; -+} -+ -+size_t dlmalloc_max_footprint(void) { -+ return gm->max_footprint; -+} -+ -+#if !NO_MALLINFO -+struct mallinfo dlmallinfo(void) { -+ return internal_mallinfo(gm); -+} -+#endif /* NO_MALLINFO */ -+ -+void dlmalloc_stats() { -+ internal_malloc_stats(gm); -+} -+ -+size_t dlmalloc_usable_size(void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ if (cinuse(p)) -+ return chunksize(p) - overhead_for(p); -+ } -+ return 0; -+} -+ -+int dlmallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} -+ -+#endif /* !ONLY_MSPACES */ -+ -+/* ----------------------------- user mspaces ---------------------------- */ -+ -+#if MSPACES -+ -+static mstate init_user_mstate(char* tbase, size_t tsize) { -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ mchunkptr mn; -+ mchunkptr msp = align_as_chunk(tbase); -+ mstate m = (mstate)(chunk2mem(msp)); -+ memset(m, 0, msize); -+ INITIAL_LOCK(&m->mutex); -+ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = m->footprint = m->max_footprint = tsize; -+ m->magic = mparams.magic; -+ m->mflags = mparams.default_mflags; -+ disable_contiguous(m); -+ init_bins(m); -+ mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); -+ check_top_chunk(m, m->top); -+ return m; -+} -+ -+mspace create_mspace(size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ -+ -+ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ size_t rs = ((capacity == 0)? mparams.granularity : -+ (capacity + TOP_FOOT_SIZE + msize)); -+ size_t tsize = granularity_align(rs); -+ char* tbase = (char*)(CALL_MMAP(tsize)); -+ if (tbase != CMFAIL) { -+ m = init_user_mstate(tbase, tsize); -+ set_segment_flags(&m->seg, IS_MMAPPED_BIT); -+ set_lock(m, locked); -+ } -+ } -+ return (mspace)m; -+} -+ -+mspace create_mspace_with_base(void* base, size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ -+ -+ if (capacity > msize + TOP_FOOT_SIZE && -+ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ m = init_user_mstate((char*)base, capacity); -+ set_segment_flags(&m->seg, EXTERN_BIT); -+ set_lock(m, locked); -+ } -+ return (mspace)m; -+} -+ -+size_t destroy_mspace(mspace msp) { -+ size_t freed = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ msegmentptr sp = &ms->seg; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ flag_t flag = get_segment_flags(sp); -+ sp = sp->next; -+ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && -+ CALL_MUNMAP(base, size) == 0) -+ freed += size; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return freed; -+} -+ -+/* -+ mspace versions of routines are near-clones of the global -+ versions. This is not so nice but better than the alternatives. -+*/ -+ -+ -+void* mspace_malloc(mspace msp, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (!PREACTION(ms)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = ms->smallmap >> idx; -+ -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(ms, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(ms, b, p, idx); -+ set_inuse_and_pinuse(ms, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb > ms->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(ms, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(ms, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(ms, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(ms, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } -+ -+ if (nb <= ms->dvsize) { -+ size_t rsize = ms->dvsize - nb; -+ mchunkptr p = ms->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); -+ ms->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = ms->dvsize; -+ ms->dvsize = 0; -+ ms->dv = 0; -+ set_inuse_and_pinuse(ms, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb < ms->topsize) { /* Split top */ -+ size_t rsize = ms->topsize -= nb; -+ mchunkptr p = ms->top; -+ mchunkptr r = ms->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(ms, ms->top); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ mem = sys_alloc(ms, nb); -+ -+ postaction: -+ POSTACTION(ms); -+ return mem; -+ } -+ -+ return 0; -+} -+ -+void mspace_free(mspace msp, void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate fm = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } -+ -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+} -+ -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = internal_malloc(ms, req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} -+ -+void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return mspace_malloc(msp, bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ mspace_free(msp, oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if FOOTERS -+ mchunkptr p = mem2chunk(oldmem); -+ mstate ms = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate ms = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_realloc(ms, oldmem, bytes); -+ } -+} -+ -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_memalign(ms, alignment, bytes); -+} -+ -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, &sz, 3, chunks); -+} -+ -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, sizes, 0, chunks); -+} -+ -+int mspace_trim(mspace msp, size_t pad) { -+ int result = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ if (!PREACTION(ms)) { -+ result = sys_trim(ms, pad); -+ POSTACTION(ms); -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return result; -+} -+ -+void mspace_malloc_stats(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ internal_malloc_stats(ms); -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+} -+ -+size_t mspace_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} -+ -+ -+size_t mspace_max_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->max_footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} -+ -+ -+#if !NO_MALLINFO -+struct mallinfo mspace_mallinfo(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return internal_mallinfo(ms); -+} -+#endif /* NO_MALLINFO */ -+ -+int mspace_mallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} -+ -+#endif /* MSPACES */ -+ -+/* -------------------- Alternative MORECORE functions ------------------- */ -+ -+/* -+ Guidelines for creating a custom version of MORECORE: -+ -+ * For best performance, MORECORE should allocate in multiples of pagesize. -+ * MORECORE may allocate more memory than requested. (Or even less, -+ but this will usually result in a malloc failure.) -+ * MORECORE must not allocate memory when given argument zero, but -+ instead return one past the end address of memory from previous -+ nonzero call. -+ * For best performance, consecutive calls to MORECORE with positive -+ arguments should return increasing addresses, indicating that -+ space has been contiguously extended. -+ * Even though consecutive calls to MORECORE need not return contiguous -+ addresses, it must be OK for malloc'ed chunks to span multiple -+ regions in those cases where they do happen to be contiguous. -+ * MORECORE need not handle negative arguments -- it may instead -+ just return MFAIL when given negative arguments. -+ Negative arguments are always multiples of pagesize. MORECORE -+ must not misinterpret negative args as large positive unsigned -+ args. You can suppress all such calls from even occurring by defining -+ MORECORE_CANNOT_TRIM, -+ -+ As an example alternative MORECORE, here is a custom allocator -+ kindly contributed for pre-OSX macOS. It uses virtually but not -+ necessarily physically contiguous non-paged memory (locked in, -+ present and won't get swapped out). You can use it by uncommenting -+ this section, adding some #includes, and setting up the appropriate -+ defines above: -+ -+ #define MORECORE osMoreCore -+ -+ There is also a shutdown routine that should somehow be called for -+ cleanup upon program exit. -+ -+ #define MAX_POOL_ENTRIES 100 -+ #define MINIMUM_MORECORE_SIZE (64 * 1024U) -+ static int next_os_pool; -+ void *our_os_pools[MAX_POOL_ENTRIES]; -+ -+ void *osMoreCore(int size) -+ { -+ void *ptr = 0; -+ static void *sbrk_top = 0; -+ -+ if (size > 0) -+ { -+ if (size < MINIMUM_MORECORE_SIZE) -+ size = MINIMUM_MORECORE_SIZE; -+ if (CurrentExecutionLevel() == kTaskLevel) -+ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); -+ if (ptr == 0) -+ { -+ return (void *) MFAIL; -+ } -+ // save ptrs so they can be freed during cleanup -+ our_os_pools[next_os_pool] = ptr; -+ next_os_pool++; -+ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); -+ sbrk_top = (char *) ptr + size; -+ return ptr; -+ } -+ else if (size < 0) -+ { -+ // we don't currently support shrink behavior -+ return (void *) MFAIL; -+ } -+ else -+ { -+ return sbrk_top; -+ } -+ } -+ -+ // cleanup any allocated memory pools -+ // called as last thing before shutting down driver -+ -+ void osCleanupMem(void) -+ { -+ void **ptr; -+ -+ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) -+ if (*ptr) -+ { -+ PoolDeallocate(*ptr); -+ *ptr = 0; -+ } -+ } -+ -+*/ -+ -+ -+/* ----------------------------------------------------------------------- -+History: -+ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) -+ * Add max_footprint functions -+ * Ensure all appropriate literals are size_t -+ * Fix conditional compilation problem for some #define settings -+ * Avoid concatenating segments with the one provided -+ in create_mspace_with_base -+ * Rename some variables to avoid compiler shadowing warnings -+ * Use explicit lock initialization. -+ * Better handling of sbrk interference. -+ * Simplify and fix segment insertion, trimming and mspace_destroy -+ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x -+ * Thanks especially to Dennis Flanagan for help on these. -+ -+ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) -+ * Fix memalign brace error. -+ -+ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) -+ * Fix improper #endif nesting in C++ -+ * Add explicit casts needed for C++ -+ -+ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) -+ * Use trees for large bins -+ * Support mspaces -+ * Use segments to unify sbrk-based and mmap-based system allocation, -+ removing need for emulation on most platforms without sbrk. -+ * Default safety checks -+ * Optional footer checks. Thanks to William Robertson for the idea. -+ * Internal code refactoring -+ * Incorporate suggestions and platform-specific changes. -+ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, -+ Aaron Bachmann, Emery Berger, and others. -+ * Speed up non-fastbin processing enough to remove fastbins. -+ * Remove useless cfree() to avoid conflicts with other apps. -+ * Remove internal memcpy, memset. Compilers handle builtins better. -+ * Remove some options that no one ever used and rename others. -+ -+ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) -+ * Fix malloc_state bitmap array misdeclaration -+ -+ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) -+ * Allow tuning of FIRST_SORTED_BIN_SIZE -+ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. -+ * Better detection and support for non-contiguousness of MORECORE. -+ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger -+ * Bypass most of malloc if no frees. Thanks To Emery Berger. -+ * Fix freeing of old top non-contiguous chunk im sysmalloc. -+ * Raised default trim and map thresholds to 256K. -+ * Fix mmap-related #defines. Thanks to Lubos Lunak. -+ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. -+ * Branch-free bin calculation -+ * Default trim and mmap thresholds now 256K. -+ -+ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) -+ * Introduce independent_comalloc and independent_calloc. -+ Thanks to Michael Pachos for motivation and help. -+ * Make optional .h file available -+ * Allow > 2GB requests on 32bit systems. -+ * new WIN32 sbrk, mmap, munmap, lock code from . -+ Thanks also to Andreas Mueller , -+ and Anonymous. -+ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for -+ helping test this.) -+ * memalign: check alignment arg -+ * realloc: don't try to shift chunks backwards, since this -+ leads to more fragmentation in some programs and doesn't -+ seem to help in any others. -+ * Collect all cases in malloc requiring system memory into sysmalloc -+ * Use mmap as backup to sbrk -+ * Place all internal state in malloc_state -+ * Introduce fastbins (although similar to 2.5.1) -+ * Many minor tunings and cosmetic improvements -+ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK -+ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS -+ Thanks to Tony E. Bennett and others. -+ * Include errno.h to support default failure action. -+ -+ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) -+ * return null for negative arguments -+ * Added Several WIN32 cleanups from Martin C. Fong -+ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' -+ (e.g. WIN32 platforms) -+ * Cleanup header file inclusion for WIN32 platforms -+ * Cleanup code to avoid Microsoft Visual C++ compiler complaints -+ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing -+ memory allocation routines -+ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) -+ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to -+ usage of 'assert' in non-WIN32 code -+ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to -+ avoid infinite loop -+ * Always call 'fREe()' rather than 'free()' -+ -+ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) -+ * Fixed ordering problem with boundary-stamping -+ -+ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) -+ * Added pvalloc, as recommended by H.J. Liu -+ * Added 64bit pointer support mainly from Wolfram Gloger -+ * Added anonymously donated WIN32 sbrk emulation -+ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen -+ * malloc_extend_top: fix mask error that caused wastage after -+ foreign sbrks -+ * Add linux mremap support code from HJ Liu -+ -+ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) -+ * Integrated most documentation with the code. -+ * Add support for mmap, with help from -+ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Use last_remainder in more cases. -+ * Pack bins using idea from colin@nyx10.cs.du.edu -+ * Use ordered bins instead of best-fit threshold -+ * Eliminate block-local decls to simplify tracing and debugging. -+ * Support another case of realloc via move into top -+ * Fix error occurring when initial sbrk_base not word-aligned. -+ * Rely on page size for units instead of SBRK_UNIT to -+ avoid surprises about sbrk alignment conventions. -+ * Add mallinfo, mallopt. Thanks to Raymond Nijssen -+ (raymond@es.ele.tue.nl) for the suggestion. -+ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. -+ * More precautions for cases where other routines call sbrk, -+ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Added macros etc., allowing use in linux libc from -+ H.J. Lu (hjl@gnu.ai.mit.edu) -+ * Inverted this history list -+ -+ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) -+ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. -+ * Removed all preallocation code since under current scheme -+ the work required to undo bad preallocations exceeds -+ the work saved in good cases for most test programs. -+ * No longer use return list or unconsolidated bins since -+ no scheme using them consistently outperforms those that don't -+ given above changes. -+ * Use best fit for very large chunks to prevent some worst-cases. -+ * Added some support for debugging -+ -+ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) -+ * Removed footers when chunks are in use. Thanks to -+ Paul Wilson (wilson@cs.texas.edu) for the suggestion. -+ -+ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) -+ * Added malloc_trim, with help from Wolfram Gloger -+ (wmglo@Dent.MED.Uni-Muenchen.DE). -+ -+ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) -+ -+ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) -+ * realloc: try to expand in both directions -+ * malloc: swap order of clean-bin strategy; -+ * realloc: only conditionally expand backwards -+ * Try not to scavenge used bins -+ * Use bin counts as a guide to preallocation -+ * Occasionally bin return list chunks in first scan -+ * Add a few optimizations from colin@nyx10.cs.du.edu -+ -+ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) -+ * faster bin computation & slightly different binning -+ * merged all consolidations to one part of malloc proper -+ (eliminating old malloc_find_space & malloc_clean_bin) -+ * Scan 2 returns chunks (not just 1) -+ * Propagate failure in realloc if malloc returns 0 -+ * Add stuff to allow compilation on non-ANSI compilers -+ from kpv@research.att.com -+ -+ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) -+ * removed potential for odd address access in prev_chunk -+ * removed dependency on getpagesize.h -+ * misc cosmetics and a bit more internal documentation -+ * anticosmetics: mangled names in macros to evade debugger strangeness -+ * tested on sparc, hp-700, dec-mips, rs6000 -+ with gcc & native cc (hp, dec only) allowing -+ Detlefs & Zorn comparison study (in SIGPLAN Notices.) -+ -+ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) -+ * Based loosely on libg++-1.2X malloc. (It retains some of the overall -+ structure of old version, but most details differ.) -+ -+*/ -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-04-26 08:17:42.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,492 @@ -+#ifdef __arm64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef AARCH64 -+#define AARCH64 -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,492 @@ -+#ifdef __arm__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef ARM -+#define ARM -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-04-26 08:17:42.000000000 +0800 -@@ -0,0 +1,132 @@ -+/* ----------------------------------------------------------------------- -+ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green -+ Copyright (C) 2007 Free Software Foundation, Inc -+ Copyright (c) 1996 Red Hat, Inc. -+ -+ Common internal definitions and macros. Only necessary for building -+ libffi. -+ ----------------------------------------------------------------------- */ -+ -+#ifndef FFI_COMMON_H -+#define FFI_COMMON_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#include -+ -+/* Do not move this. Some versions of AIX are very picky about where -+ this is positioned. */ -+#ifdef __GNUC__ -+# if HAVE_ALLOCA_H -+# include -+# else -+ /* mingw64 defines this already in malloc.h. */ -+# ifndef alloca -+# define alloca __builtin_alloca -+# endif -+# endif -+# define MAYBE_UNUSED __attribute__((__unused__)) -+#else -+# define MAYBE_UNUSED -+# if HAVE_ALLOCA_H -+# include -+# else -+# ifdef _AIX -+# pragma alloca -+# else -+# ifndef alloca /* predefined by HP cc +Olibcalls */ -+# ifdef _MSC_VER -+# define alloca _alloca -+# else -+char *alloca (); -+# endif -+# endif -+# endif -+# endif -+#endif -+ -+/* Check for the existence of memcpy. */ -+#if STDC_HEADERS -+# include -+#else -+# ifndef HAVE_MEMCPY -+# define memcpy(d, s, n) bcopy ((s), (d), (n)) -+# endif -+#endif -+ -+#if defined(FFI_DEBUG) -+#include -+#endif -+ -+#ifdef FFI_DEBUG -+void ffi_assert(char *expr, char *file, int line); -+void ffi_stop_here(void); -+void ffi_type_test(ffi_type *a, char *file, int line); -+ -+#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -+#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -+#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -+#else -+#define FFI_ASSERT(x) -+#define FFI_ASSERT_AT(x, f, l) -+#define FFI_ASSERT_VALID_TYPE(x) -+#endif -+ -+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -+#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) -+ -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif); -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, unsigned int ntotalargs); -+ -+/* Extended cif, used in callback from assembly routine */ -+typedef struct -+{ -+ ffi_cif *cif; -+ void *rvalue; -+ void **avalue; -+} extended_cif; -+ -+/* Terse sized type definitions. */ -+#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) -+typedef unsigned char UINT8; -+typedef signed char SINT8; -+typedef unsigned short UINT16; -+typedef signed short SINT16; -+typedef unsigned int UINT32; -+typedef signed int SINT32; -+# ifdef _MSC_VER -+typedef unsigned __int64 UINT64; -+typedef signed __int64 SINT64; -+# else -+# include -+typedef uint64_t UINT64; -+typedef int64_t SINT64; -+# endif -+#else -+typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -+typedef signed int SINT8 __attribute__((__mode__(__QI__))); -+typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -+typedef signed int SINT16 __attribute__((__mode__(__HI__))); -+typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -+typedef signed int SINT32 __attribute__((__mode__(__SI__))); -+typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -+typedef signed int SINT64 __attribute__((__mode__(__DI__))); -+#endif -+ -+typedef float FLOAT32; -+ -+#ifndef __GNUC__ -+#define __builtin_expect(x, expected_value) (x) -+#endif -+#define LIKELY(x) __builtin_expect(!!(x),1) -+#define UNLIKELY(x) __builtin_expect((x)!=0,0) -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,492 @@ -+#ifdef __i386__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_DARWIN -+#define X86_DARWIN -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,492 @@ -+#ifdef __x86_64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.2.1 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_DARWIN -+#define X86_DARWIN -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-04-26 08:17:42.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,220 @@ -+#ifdef __arm64__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .ascii. */ -+/* #undef HAVE_AS_ASCII_PSEUDO_OP */ -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports .string. */ -+/* #undef HAVE_AS_STRING_PSEUDO_OP */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -+/* #undef NO_MINUS_C_MINUS_O */ -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.2.1" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.2.1" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.2.1" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,220 @@ -+#ifdef __arm__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .ascii. */ -+/* #undef HAVE_AS_ASCII_PSEUDO_OP */ -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports .string. */ -+/* #undef HAVE_AS_STRING_PSEUDO_OP */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -+/* #undef NO_MINUS_C_MINUS_O */ -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.2.1" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.2.1" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.2.1" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,220 @@ -+#ifdef __i386__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .ascii. */ -+/* #undef HAVE_AS_ASCII_PSEUDO_OP */ -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports .string. */ -+/* #undef HAVE_AS_STRING_PSEUDO_OP */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -+/* #undef NO_MINUS_C_MINUS_O */ -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.2.1" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.2.1" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.2.1" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,220 @@ -+#ifdef __x86_64__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .ascii. */ -+/* #undef HAVE_AS_ASCII_PSEUDO_OP */ -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports .string. */ -+/* #undef HAVE_AS_STRING_PSEUDO_OP */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -+/* #undef NO_MINUS_C_MINUS_O */ -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.2.1" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.2.1" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.2.1" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-04-26 08:17:42.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,68 @@ -+#ifdef __arm64__ -+ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. -+ -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+#ifndef LIBFFI_ASM -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+ -+typedef enum ffi_abi -+ { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+ } ffi_abi; -+#endif -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_TRAMPOLINE_SIZE 36 -+#define FFI_NATIVE_RAW_API 0 -+ -+/* ---- Internal ---- */ -+ -+#if defined (__APPLE__) -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags; unsigned aarch64_nfixedargs -+#else -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_flags -+#endif -+ -+#define AARCH64_FFI_WITH_V_BIT 0 -+ -+#define AARCH64_N_XREG 32 -+#define AARCH64_N_VREG 32 -+#define AARCH64_CALL_CONTEXT_SIZE (AARCH64_N_XREG * 8 + AARCH64_N_VREG * 16) -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,76 @@ -+#ifdef __arm__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012 Anthony Green -+ Copyright (c) 2010 CodeSourcery -+ Copyright (c) 1996-2003 Red Hat, Inc. -+ -+ Target configuration macros for ARM. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+#ifndef LIBFFI_ASM -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+ -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_VFP, -+ FFI_LAST_ABI, -+#ifdef __ARM_PCS_VFP -+ FFI_DEFAULT_ABI = FFI_VFP, -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV, -+#endif -+} ffi_abi; -+#endif -+ -+#define FFI_EXTRA_CIF_FIELDS \ -+ int vfp_used; \ -+ short vfp_reg_free, vfp_nargs; \ -+ signed char vfp_args[16] \ -+ -+/* Internally used. */ -+#define FFI_TYPE_STRUCT_VFP_FLOAT (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_STRUCT_VFP_DOUBLE (FFI_TYPE_LAST + 2) -+ -+#define FFI_TARGET_SPECIFIC_VARIADIC -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_TRAMPOLINE_SIZE 20 -+#define FFI_NATIVE_RAW_API 0 -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,155 @@ -+#ifdef __i386__ ++void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { ++ void* mem; ++ size_t req = 0; ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ if (n_elements != 0) { ++ req = n_elements * elem_size; ++ if (((n_elements | elem_size) & ~(size_t)0xffff) && ++ (req / n_elements != elem_size)) ++ req = MAX_SIZE_T; /* force downstream failure on overflow */ ++ } ++ mem = internal_malloc(ms, req); ++ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) ++ memset(mem, 0, req); ++ return mem; ++} + -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. ++void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { ++ if (oldmem == 0) ++ return mspace_malloc(msp, bytes); ++#ifdef REALLOC_ZERO_BYTES_FREES ++ if (bytes == 0) { ++ mspace_free(msp, oldmem); ++ return 0; ++ } ++#endif /* REALLOC_ZERO_BYTES_FREES */ ++ else { ++#if FOOTERS ++ mchunkptr p = mem2chunk(oldmem); ++ mstate ms = get_mstate_for(p); ++#else /* FOOTERS */ ++ mstate ms = (mstate)msp; ++#endif /* FOOTERS */ ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_realloc(ms, oldmem, bytes); ++ } ++} + -+ Target configuration macros for x86 and x86-64. ++void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return internal_memalign(ms, alignment, bytes); ++} + -+ 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: ++void** mspace_independent_calloc(mspace msp, size_t n_elements, ++ size_t elem_size, void* chunks[]) { ++ size_t sz = elem_size; /* serves as 1-element array */ ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, &sz, 3, chunks); ++} + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++void** mspace_independent_comalloc(mspace msp, size_t n_elements, ++ size_t sizes[], void* chunks[]) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ return 0; ++ } ++ return ialloc(ms, n_elements, sizes, 0, chunks); ++} + -+ 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. ++int mspace_trim(mspace msp, size_t pad) { ++ int result = 0; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ if (!PREACTION(ms)) { ++ result = sys_trim(ms, pad); ++ POSTACTION(ms); ++ } ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return result; ++} + -+ ----------------------------------------------------------------------- */ ++void mspace_malloc_stats(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ internal_malloc_stats(ms); ++ } ++ else { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++} + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++size_t mspace_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif + -+/* ---- System specific configurations ----------------------------------- */ ++size_t mspace_max_footprint(mspace msp) { ++ size_t result; ++ mstate ms = (mstate)msp; ++ if (ok_magic(ms)) { ++ result = ms->max_footprint; ++ } ++ USAGE_ERROR_ACTION(ms,ms); ++ return result; ++} + -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY + -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif ++#if !NO_MALLINFO ++struct mallinfo mspace_mallinfo(mspace msp) { ++ mstate ms = (mstate)msp; ++ if (!ok_magic(ms)) { ++ USAGE_ERROR_ACTION(ms,ms); ++ } ++ return internal_mallinfo(ms); ++} ++#endif /* NO_MALLINFO */ + -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif ++int mspace_mallopt(int param_number, int value) { ++ return change_mparam(param_number, value); ++} + -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++#endif /* MSPACES */ + -+/* ---- Generic type definitions ----------------------------------------- */ ++/* -------------------- Alternative MORECORE functions ------------------- */ + -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif ++/* ++ Guidelines for creating a custom version of MORECORE: + -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, ++ * For best performance, MORECORE should allocate in multiples of pagesize. ++ * MORECORE may allocate more memory than requested. (Or even less, ++ but this will usually result in a malloc failure.) ++ * MORECORE must not allocate memory when given argument zero, but ++ instead return one past the end address of memory from previous ++ nonzero call. ++ * For best performance, consecutive calls to MORECORE with positive ++ arguments should return increasing addresses, indicating that ++ space has been contiguously extended. ++ * Even though consecutive calls to MORECORE need not return contiguous ++ addresses, it must be OK for malloc'ed chunks to span multiple ++ regions in those cases where they do happen to be contiguous. ++ * MORECORE need not handle negative arguments -- it may instead ++ just return MFAIL when given negative arguments. ++ Negative arguments are always multiples of pagesize. MORECORE ++ must not misinterpret negative args as large positive unsigned ++ args. You can suppress all such calls from even occurring by defining ++ MORECORE_CANNOT_TRIM, + -+ /* ---- Intel x86 Win32 ---------- */ -+#ifdef X86_WIN32 -+ FFI_SYSV, -+ FFI_STDCALL, -+ FFI_THISCALL, -+ FFI_FASTCALL, -+ FFI_MS_CDECL, -+ FFI_PASCAL, -+ FFI_REGISTER, -+ FFI_LAST_ABI, -+#ifdef _MSC_VER -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif ++ As an example alternative MORECORE, here is a custom allocator ++ kindly contributed for pre-OSX macOS. It uses virtually but not ++ necessarily physically contiguous non-paged memory (locked in, ++ present and won't get swapped out). You can use it by uncommenting ++ this section, adding some #includes, and setting up the appropriate ++ defines above: + -+#elif defined(X86_WIN64) -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 ++ #define MORECORE osMoreCore + -+#else -+ /* ---- Intel x86 and AMD x86-64 - */ -+ FFI_SYSV, -+ FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ -+ FFI_THISCALL, -+ FFI_FASTCALL, -+ FFI_STDCALL, -+ FFI_PASCAL, -+ FFI_REGISTER, -+ FFI_LAST_ABI, -+#if defined(__i386__) || defined(__i386) -+ FFI_DEFAULT_ABI = FFI_SYSV -+#else -+ FFI_DEFAULT_ABI = FFI_UNIX64 -+#endif -+#endif -+} ffi_abi; -+#endif ++ There is also a shutdown routine that should somehow be called for ++ cleanup upon program exit. + -+/* ---- Definitions for closures ----------------------------------------- */ ++ #define MAX_POOL_ENTRIES 100 ++ #define MINIMUM_MORECORE_SIZE (64 * 1024U) ++ static int next_os_pool; ++ void *our_os_pools[MAX_POOL_ENTRIES]; + -+#define FFI_CLOSURES 1 -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ void *osMoreCore(int size) ++ { ++ void *ptr = 0; ++ static void *sbrk_top = 0; + -+#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_NATIVE_RAW_API 0 -+#else -+#ifdef X86_WIN32 -+#define FFI_TRAMPOLINE_SIZE 52 -+#else -+#ifdef X86_WIN64 -+#define FFI_TRAMPOLINE_SIZE 29 -+#define FFI_NATIVE_RAW_API 0 -+#define FFI_NO_RAW_API 1 -+#else -+#define FFI_TRAMPOLINE_SIZE 10 -+#endif -+#endif -+#ifndef X86_WIN64 -+#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif -+#endif ++ if (size > 0) ++ { ++ if (size < MINIMUM_MORECORE_SIZE) ++ size = MINIMUM_MORECORE_SIZE; ++ if (CurrentExecutionLevel() == kTaskLevel) ++ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); ++ if (ptr == 0) ++ { ++ return (void *) MFAIL; ++ } ++ // save ptrs so they can be freed during cleanup ++ our_os_pools[next_os_pool] = ptr; ++ next_os_pool++; ++ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); ++ sbrk_top = (char *) ptr + size; ++ return ptr; ++ } ++ else if (size < 0) ++ { ++ // we don't currently support shrink behavior ++ return (void *) MFAIL; ++ } ++ else ++ { ++ return sbrk_top; ++ } ++ } + -+#endif ++ // cleanup any allocated memory pools ++ // called as last thing before shutting down driver + ++ void osCleanupMem(void) ++ { ++ void **ptr; ++ ++ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) ++ if (*ptr) ++ { ++ PoolDeallocate(*ptr); ++ *ptr = 0; ++ } ++ } + ++*/ + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-04-26 08:18:27.000000000 +0800 -@@ -0,0 +1,155 @@ -+#ifdef __x86_64__ + -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. ++/* ----------------------------------------------------------------------- ++History: ++ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) ++ * Add max_footprint functions ++ * Ensure all appropriate literals are size_t ++ * Fix conditional compilation problem for some #define settings ++ * Avoid concatenating segments with the one provided ++ in create_mspace_with_base ++ * Rename some variables to avoid compiler shadowing warnings ++ * Use explicit lock initialization. ++ * Better handling of sbrk interference. ++ * Simplify and fix segment insertion, trimming and mspace_destroy ++ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x ++ * Thanks especially to Dennis Flanagan for help on these. + -+ Target configuration macros for x86 and x86-64. ++ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) ++ * Fix memalign brace error. + -+ 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: ++ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) ++ * Fix improper #endif nesting in C++ ++ * Add explicit casts needed for C++ + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) ++ * Use trees for large bins ++ * Support mspaces ++ * Use segments to unify sbrk-based and mmap-based system allocation, ++ removing need for emulation on most platforms without sbrk. ++ * Default safety checks ++ * Optional footer checks. Thanks to William Robertson for the idea. ++ * Internal code refactoring ++ * Incorporate suggestions and platform-specific changes. ++ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, ++ Aaron Bachmann, Emery Berger, and others. ++ * Speed up non-fastbin processing enough to remove fastbins. ++ * Remove useless cfree() to avoid conflicts with other apps. ++ * Remove internal memcpy, memset. Compilers handle builtins better. ++ * Remove some options that no one ever used and rename others. + -+ 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. ++ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) ++ * Fix malloc_state bitmap array misdeclaration + -+ ----------------------------------------------------------------------- */ ++ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) ++ * Allow tuning of FIRST_SORTED_BIN_SIZE ++ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. ++ * Better detection and support for non-contiguousness of MORECORE. ++ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger ++ * Bypass most of malloc if no frees. Thanks To Emery Berger. ++ * Fix freeing of old top non-contiguous chunk im sysmalloc. ++ * Raised default trim and map thresholds to 256K. ++ * Fix mmap-related #defines. Thanks to Lubos Lunak. ++ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. ++ * Branch-free bin calculation ++ * Default trim and mmap thresholds now 256K. + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) ++ * Introduce independent_comalloc and independent_calloc. ++ Thanks to Michael Pachos for motivation and help. ++ * Make optional .h file available ++ * Allow > 2GB requests on 32bit systems. ++ * new WIN32 sbrk, mmap, munmap, lock code from . ++ Thanks also to Andreas Mueller , ++ and Anonymous. ++ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for ++ helping test this.) ++ * memalign: check alignment arg ++ * realloc: don't try to shift chunks backwards, since this ++ leads to more fragmentation in some programs and doesn't ++ seem to help in any others. ++ * Collect all cases in malloc requiring system memory into sysmalloc ++ * Use mmap as backup to sbrk ++ * Place all internal state in malloc_state ++ * Introduce fastbins (although similar to 2.5.1) ++ * Many minor tunings and cosmetic improvements ++ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK ++ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS ++ Thanks to Tony E. Bennett and others. ++ * Include errno.h to support default failure action. + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif ++ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) ++ * return null for negative arguments ++ * Added Several WIN32 cleanups from Martin C. Fong ++ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' ++ (e.g. WIN32 platforms) ++ * Cleanup header file inclusion for WIN32 platforms ++ * Cleanup code to avoid Microsoft Visual C++ compiler complaints ++ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing ++ memory allocation routines ++ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) ++ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to ++ usage of 'assert' in non-WIN32 code ++ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to ++ avoid infinite loop ++ * Always call 'fREe()' rather than 'free()' + -+/* ---- System specific configurations ----------------------------------- */ ++ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) ++ * Fixed ordering problem with boundary-stamping + -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY ++ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) ++ * Added pvalloc, as recommended by H.J. Liu ++ * Added 64bit pointer support mainly from Wolfram Gloger ++ * Added anonymously donated WIN32 sbrk emulation ++ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen ++ * malloc_extend_top: fix mask error that caused wastage after ++ foreign sbrks ++ * Add linux mremap support code from HJ Liu + -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif ++ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) ++ * Integrated most documentation with the code. ++ * Add support for mmap, with help from ++ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Use last_remainder in more cases. ++ * Pack bins using idea from colin@nyx10.cs.du.edu ++ * Use ordered bins instead of best-fit threshold ++ * Eliminate block-local decls to simplify tracing and debugging. ++ * Support another case of realloc via move into top ++ * Fix error occurring when initial sbrk_base not word-aligned. ++ * Rely on page size for units instead of SBRK_UNIT to ++ avoid surprises about sbrk alignment conventions. ++ * Add mallinfo, mallopt. Thanks to Raymond Nijssen ++ (raymond@es.ele.tue.nl) for the suggestion. ++ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. ++ * More precautions for cases where other routines call sbrk, ++ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). ++ * Added macros etc., allowing use in linux libc from ++ H.J. Lu (hjl@gnu.ai.mit.edu) ++ * Inverted this history list + -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif ++ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) ++ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. ++ * Removed all preallocation code since under current scheme ++ the work required to undo bad preallocations exceeds ++ the work saved in good cases for most test programs. ++ * No longer use return list or unconsolidated bins since ++ no scheme using them consistently outperforms those that don't ++ given above changes. ++ * Use best fit for very large chunks to prevent some worst-cases. ++ * Added some support for debugging + -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) ++ * Removed footers when chunks are in use. Thanks to ++ Paul Wilson (wilson@cs.texas.edu) for the suggestion. + -+/* ---- Generic type definitions ----------------------------------------- */ ++ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) ++ * Added malloc_trim, with help from Wolfram Gloger ++ (wmglo@Dent.MED.Uni-Muenchen.DE). + -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif ++ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) + -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, ++ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) ++ * realloc: try to expand in both directions ++ * malloc: swap order of clean-bin strategy; ++ * realloc: only conditionally expand backwards ++ * Try not to scavenge used bins ++ * Use bin counts as a guide to preallocation ++ * Occasionally bin return list chunks in first scan ++ * Add a few optimizations from colin@nyx10.cs.du.edu + -+ /* ---- Intel x86 Win32 ---------- */ -+#ifdef X86_WIN32 -+ FFI_SYSV, -+ FFI_STDCALL, -+ FFI_THISCALL, -+ FFI_FASTCALL, -+ FFI_MS_CDECL, -+ FFI_PASCAL, -+ FFI_REGISTER, -+ FFI_LAST_ABI, -+#ifdef _MSC_VER -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif ++ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) ++ * faster bin computation & slightly different binning ++ * merged all consolidations to one part of malloc proper ++ (eliminating old malloc_find_space & malloc_clean_bin) ++ * Scan 2 returns chunks (not just 1) ++ * Propagate failure in realloc if malloc returns 0 ++ * Add stuff to allow compilation on non-ANSI compilers ++ from kpv@research.att.com + -+#elif defined(X86_WIN64) -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 ++ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) ++ * removed potential for odd address access in prev_chunk ++ * removed dependency on getpagesize.h ++ * misc cosmetics and a bit more internal documentation ++ * anticosmetics: mangled names in macros to evade debugger strangeness ++ * tested on sparc, hp-700, dec-mips, rs6000 ++ with gcc & native cc (hp, dec only) allowing ++ Detlefs & Zorn comparison study (in SIGPLAN Notices.) + -+#else -+ /* ---- Intel x86 and AMD x86-64 - */ -+ FFI_SYSV, -+ FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ -+ FFI_THISCALL, -+ FFI_FASTCALL, -+ FFI_STDCALL, -+ FFI_PASCAL, -+ FFI_REGISTER, -+ FFI_LAST_ABI, -+#if defined(__i386__) || defined(__i386) -+ FFI_DEFAULT_ABI = FFI_SYSV -+#else -+ FFI_DEFAULT_ABI = FFI_UNIX64 -+#endif -+#endif -+} ffi_abi; -+#endif ++ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) ++ * Based loosely on libg++-1.2X malloc. (It retains some of the overall ++ structure of old version, but most details differ.) ++ ++*/ +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-12-20 18:55:19.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+/* ---- Definitions for closures ----------------------------------------- */ ++#include + -+#define FFI_CLOSURES 1 -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) + -+#if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_NATIVE_RAW_API 0 -+#else -+#ifdef X86_WIN32 -+#define FFI_TRAMPOLINE_SIZE 52 -+#else -+#ifdef X86_WIN64 -+#define FFI_TRAMPOLINE_SIZE 29 -+#define FFI_NATIVE_RAW_API 0 -+#define FFI_NO_RAW_API 1 -+#else -+#define FFI_TRAMPOLINE_SIZE 10 -+#endif -+#endif -+#ifndef X86_WIN64 -+#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif +#endif ++#ifdef __i386__ ++ ++#include ++ + +#endif ++#ifdef __arm__ + ++#include + + +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c ---- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-04-26 08:17:59.000000000 +0800 -@@ -0,0 +1,374 @@ -+/* ----------------------------------------------------------------------- -+ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. ++#ifdef __x86_64__ + -+ Cloned from raw_api.c ++#include + -+ Raw_api.c author: Kresten Krab Thorup -+ Java_raw_api.c author: Hans-J. Boehm + -+ $Id $ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __arm64__ + -+ 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: ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ 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: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -29490,627 +23031,510 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctype + 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. -+ ----------------------------------------------------------------------- */ -+ -+/* This defines a Java- and 64-bit specific variant of the raw API. */ -+/* It assumes that "raw" argument blocks look like Java stacks on a */ -+/* 64-bit machine. Arguments that can be stored in a single stack */ -+/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -+/* 64 bits are actually used. */ + -+#include -+#include -+#include ++ ----------------------------------------------------------------------- */ + -+#if !defined(NO_JAVA_RAW_API) ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+size_t -+ffi_java_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+ ffi_type **at = cif->arg_types; ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+ switch((*at) -> type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ result += 2 * FFI_SIZEOF_JAVA_RAW; -+ break; -+ case FFI_TYPE_STRUCT: -+ /* No structure parameters in Java. */ -+ abort(); -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ result += FFI_SIZEOF_JAVA_RAW; -+ } -+ } ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+ return result; -+} ++ More details on the raw and cloure API can be found in: + ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+void -+ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ and + -+#if WORDS_BIGENDIAN ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + 3); -+ break; ++#ifndef LIBFFI_H ++#define LIBFFI_H + -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + 2); -+ break; ++#ifdef __cplusplus ++extern "C" { ++#endif + -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void *)raw; -+ raw += 2; -+ break; ++/* Specify which architecture libffi is configured for. */ ++#ifndef AARCH64 ++#define AARCH64 +#endif + -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; ++/* ---- System configuration information --------------------------------- */ + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++#include + -+ default: -+ *args = raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+ } -+ } ++#ifndef LIBFFI_ASM + -+#else /* WORDS_BIGENDIAN */ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif + -+#if !PDP ++#include ++#include + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ switch((*tp)->type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void*) raw; -+ raw += 2; -+ break; -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ *args = (void*) raw++; -+ } -+#else /* FFI_SIZEOF_JAVA_RAW != 8 */ -+ *args = (void*) raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ -+ } ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ + ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif + -+#endif /* WORDS_BIGENDIAN */ -+} ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ + -+void -+ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) ++typedef struct _ffi_type +{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT8*) (*args); ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 +#else -+ (raw++)->uint = *(UINT8*) (*args); ++ #error "char size not supported" +#endif -+ break; + -+ case FFI_TYPE_SINT8: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT8*) (*args); ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 +#else -+ (raw++)->sint = *(SINT8*) (*args); ++ #error "short size not supported" +#endif -+ break; + -+ case FFI_TYPE_UINT16: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT16*) (*args); ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 +#else -+ (raw++)->uint = *(UINT16*) (*args); ++ #error "int size not supported" +#endif -+ break; + -+ case FFI_TYPE_SINT16: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT16*) (*args); -+#else -+ (raw++)->sint = *(SINT16*) (*args); ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" +#endif -+ break; + -+ case FFI_TYPE_UINT32: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT32*) (*args); ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 +#else -+ (raw++)->uint = *(UINT32*) (*args); ++ #error "long size not supported" +#endif -+ break; + -+ case FFI_TYPE_SINT32: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT32*) (*args); ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) +#else -+ (raw++)->sint = *(SINT32*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ (raw++)->flt = *(FLOAT32*) (*args); -+ break; -+ -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ raw->uint = *(UINT64*) (*args); -+ raw += 2; -+ break; ++#define FFI_EXTERN extern +#endif + -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+ default: -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ FFI_ASSERT(0); /* Should have covered all cases */ ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; +#else -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#define ffi_type_longdouble ffi_type_double +#endif -+ } -+ } -+} -+ -+#if !FFI_NATIVE_RAW_API -+ -+static void -+ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) -+{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue <<= 32; -+ break; + -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+#if FFI_SIZEOF_JAVA_RAW == 4 -+ case FFI_TYPE_POINTER: ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double +#endif -+ *(SINT64 *)rvalue <<= 32; -+ break; -+ -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ -+ default: -+ break; -+ } +#endif -+} -+ -+static void -+ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) -+{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue >>= 32; -+ break; ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+ *(SINT64 *)rvalue >>= 32; -+ break; ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++typedef unsigned FFI_TYPE; + -+ default: -+ break; -+ } ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; +#endif -+} -+ -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ ffi_java_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_java_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+ ffi_java_rvalue_to_raw (cif, rvalue); -+} -+ -+#if FFI_CLOSURES /* base system provides closures */ ++} ffi_cif; + -+static void -+ffi_java_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+ ffi_java_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); -+ ffi_java_raw_to_rvalue (cif, rvalue); -+} ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; ++/* ---- Definitions for the raw API -------------------------------------- */ + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_java_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ return status; -+} ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); -+} ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ -+#endif /* !NO_JAVA_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c ---- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-04-26 08:17:59.000000000 +0800 -@@ -0,0 +1,253 @@ -+/* ----------------------------------------------------------------------- -+ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green -+ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. + -+ 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: ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ 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. -+ ----------------------------------------------------------------------- */ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+#include -+#include -+#include ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+/* Round up to FFI_SIZEOF_ARG. */ ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) ++/* ---- Definitions for closures ----------------------------------------- */ + -+/* Perform machine independent initialization of aggregate type -+ specifications. */ ++#if FFI_CLOSURES + -+static ffi_status initialize_aggregate(ffi_type *arg) -+{ -+ ffi_type **ptr; ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+ if (UNLIKELY(arg == NULL || arg->elements == NULL)) -+ return FFI_BAD_TYPEDEF; ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ arg->size = 0; -+ arg->alignment = 0; ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+ ptr = &(arg->elements[0]); ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+ if (UNLIKELY(ptr == 0)) -+ return FFI_BAD_TYPEDEF; ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+ while ((*ptr) != NULL) -+ { -+ if (UNLIKELY(((*ptr)->size == 0) -+ && (initialize_aggregate((*ptr)) != FFI_OK))) -+ return FFI_BAD_TYPEDEF; ++#if !FFI_NATIVE_RAW_API + -+ /* Perform a sanity check on the argument type */ -+ FFI_ASSERT_VALID_TYPE(*ptr); ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ arg->size = ALIGN(arg->size, (*ptr)->alignment); -+ arg->size += (*ptr)->size; ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ arg->alignment = (arg->alignment > (*ptr)->alignment) ? -+ arg->alignment : (*ptr)->alignment; ++#endif + -+ ptr++; -+ } ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ /* Structure size includes tail padding. This is important for -+ structures that fit in one register on ABIs like the PowerPC64 -+ Linux ABI that right justify small structs in a register. -+ It's also needed for nested structure layout, for example -+ struct A { long a; char b; }; struct B { struct A x; char y; }; -+ should find y at an offset of 2*sizeof(long) and result in a -+ total size of 3*sizeof(long). */ -+ arg->size = ALIGN (arg->size, arg->alignment); ++} ffi_raw_closure; + -+ /* On some targets, the ABI defines that structures have an additional -+ alignment beyond the "natural" one based on their elements. */ -+#ifdef FFI_AGGREGATE_ALIGNMENT -+ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) -+ arg->alignment = FFI_AGGREGATE_ALIGNMENT; ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; +#endif + -+ if (arg->size == 0) -+ return FFI_BAD_TYPEDEF; -+ else -+ return FFI_OK; -+} ++ ffi_cif *cif; + -+#ifndef __CRIS__ -+/* The CRIS ABI specifies structure elements to have byte -+ alignment only, so it completely overrides this functions, -+ which assumes "natural" alignment and padding. */ ++#if !FFI_NATIVE_RAW_API + -+/* Perform machine independent ffi_cif preparation, then call -+ machine dependent routine. */ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+/* For non variadic functions isvariadic should be 0 and -+ nfixedargs==ntotalargs. ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ For variadic calls, isvariadic should be 1 and nfixedargs -+ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ ++#endif + ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + -+ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ unsigned bytes = 0; -+ unsigned int i; -+ ffi_type **ptr; ++} ffi_java_raw_closure; + -+ FFI_ASSERT(cif != NULL); -+ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); -+ FFI_ASSERT(nfixedargs <= ntotalargs); ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + -+ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) -+ return FFI_BAD_ABI; ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ cif->abi = abi; -+ cif->arg_types = atypes; -+ cif->nargs = ntotalargs; -+ cif->rtype = rtype; ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+ cif->flags = 0; ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+#if HAVE_LONG_DOUBLE_VARIANT -+ ffi_prep_types (abi); -+#endif ++#endif /* FFI_CLOSURES */ + -+ /* Initialize the return type if necessary */ -+ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; ++#if FFI_GO_CLOSURES + -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if (rtype->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the return type */ -+ FFI_ASSERT_VALID_TYPE(cif->rtype); ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; + -+ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ /* Make space for the return structure pointer */ -+ if (cif->rtype->type == FFI_TYPE_STRUCT -+#ifdef SPARC -+ && (cif->abi != FFI_V9 || cif->rtype->size > 32) -+#endif -+#ifdef TILE -+ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) -+#endif -+#ifdef XTENSA -+ && (cif->rtype->size > 16) -+#endif -+#ifdef NIOS2 -+ && (cif->rtype->size > 8) -+#endif -+ ) -+ bytes = STACK_ARG_SIZE(sizeof(void*)); -+#endif ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); + -+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) -+ { ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); + -+ /* Initialize any uninitialized aggregate type definitions */ -+ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; ++#endif /* FFI_GO_CLOSURES */ + -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if ((*ptr)->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the argument type, do this -+ check after the initialization. */ -+ FFI_ASSERT_VALID_TYPE(*ptr); ++/* ---- Public interface definition -------------------------------------- */ + -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifdef SPARC -+ if (((*ptr)->type == FFI_TYPE_STRUCT -+ && ((*ptr)->size > 16 || cif->abi != FFI_V9)) -+ || ((*ptr)->type == FFI_TYPE_LONGDOUBLE -+ && cif->abi != FFI_V9)) -+ bytes += sizeof(void*); -+ else -+#endif -+ { -+ /* Add any padding if necessary */ -+ if (((*ptr)->alignment - 1) & bytes) -+ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#ifdef TILE -+ if (bytes < 10 * FFI_SIZEOF_ARG && -+ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) -+ { -+ /* An argument is never split between the 10 parameter -+ registers and the stack. */ -+ bytes = 10 * FFI_SIZEOF_ARG; -+ } -+#endif -+#ifdef XTENSA -+ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) -+ bytes = 6*4; -+#endif ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ bytes += STACK_ARG_SIZE((*ptr)->size); -+ } -+#endif -+ } ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+ cif->bytes = bytes; ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) ++ ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+ /* Perform machine dependent cif processing */ -+#ifdef FFI_TARGET_SPECIFIC_VARIADIC -+ if (isvariadic) -+ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); +#endif + -+ return ffi_prep_cif_machdep(cif); -+} -+#endif /* not __CRIS__ */ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); -+} ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); ++#ifdef __cplusplus +} ++#endif + -+#if FFI_CLOSURES ++#endif + -+ffi_status -+ffi_prep_closure (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data) -+{ -+ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -+} + +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c ---- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-04-26 08:17:59.000000000 +0800 -@@ -0,0 +1,267 @@ -+/* ----------------------------------------------------------------------- -+ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __arm__ + -+ Author: Kresten Krab Thorup ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -30120,1153 +23544,705 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/lib + 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. -+ ----------------------------------------------------------------------- */ -+ -+/* This file defines generic functions for use with the raw api. */ -+ -+#include -+#include -+ -+#if !FFI_NO_RAW_API -+ -+size_t -+ffi_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; -+ -+ ffi_type **at = cif->arg_types; -+ -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*at)->type == FFI_TYPE_STRUCT) -+ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); -+ else -+#endif -+ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); -+ } + -+ return result; -+} ++ ----------------------------------------------------------------------- */ + ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+void -+ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+#if WORDS_BIGENDIAN ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); -+ break; ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); -+ break; -+#endif -+ -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ *args = (raw++)->ptr; -+ break; -+#endif ++ More details on the raw and cloure API can be found in: + -+ case FFI_TYPE_COMPLEX: -+ *args = (raw++)->ptr; -+ break; ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; -+ -+ default: -+ *args = raw; -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } ++ and + -+#else /* WORDS_BIGENDIAN */ ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+#if !PDP ++#ifndef LIBFFI_H ++#define LIBFFI_H + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*tp)->type == FFI_TYPE_STRUCT) -+ { -+ *args = (raw++)->ptr; -+ } -+ else ++#ifdef __cplusplus ++extern "C" { +#endif -+ if ((*tp)->type == FFI_TYPE_COMPLEX) -+ { -+ *args = (raw++)->ptr; -+ } -+ else -+ { -+ *args = (void*) raw; -+ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); -+ } -+ } + -+#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++/* Specify which architecture libffi is configured for. */ ++#ifndef ARM ++#define ARM ++#endif + -+#endif /* WORDS_BIGENDIAN */ -+} ++/* ---- System configuration information --------------------------------- */ + -+void -+ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++#include + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ (raw++)->uint = *(UINT8*) (*args); -+ break; ++#ifndef LIBFFI_ASM + -+ case FFI_TYPE_SINT8: -+ (raw++)->sint = *(SINT8*) (*args); -+ break; ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif + -+ case FFI_TYPE_UINT16: -+ (raw++)->uint = *(UINT16*) (*args); -+ break; ++#include ++#include + -+ case FFI_TYPE_SINT16: -+ (raw++)->sint = *(SINT16*) (*args); -+ break; ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ + -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ (raw++)->uint = *(UINT32*) (*args); -+ break; ++#define FFI_64_BIT_MAX 9223372036854775807 + -+ case FFI_TYPE_SINT32: -+ (raw++)->sint = *(SINT32*) (*args); -+ break; ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif +#endif + -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ (raw++)->ptr = *args; -+ break; -+#endif ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ + -+ case FFI_TYPE_COMPLEX: -+ (raw++)->ptr = *args; -+ break; ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif + -+ default: -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+} ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif + -+#if !FFI_NATIVE_RAW_API ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif + ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif + -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif + -+void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+} ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+#if FFI_CLOSURES /* base system provides closures */ ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+static void -+ffi_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif + -+ ffi_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, raw, cl->user_data); -+} ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 0 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } ++typedef unsigned FFI_TYPE; + -+ return status; -+} ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+#if FFI_CLOSURES ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++/* ---- Definitions for the raw API -------------------------------------- */ + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -+} ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+#endif /* FFI_CLOSURES */ ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+#endif /* !FFI_NO_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S ---- orig/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/darwin64_x86_64.S 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,421 @@ -+#ifdef __x86_64__ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+/* ----------------------------------------------------------------------- -+ darwin64.S - Copyright (c) 2006 Free Software Foundation, Inc. -+ Copyright (c) 2008 Red Hat, Inc. -+ derived from unix64.S ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+ x86-64 Foreign Function Interface for Darwin. + -+ 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: ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ 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 AUTHOR 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. -+ ----------------------------------------------------------------------- */ ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+#ifdef __x86_64__ -+#define LIBFFI_ASM -+#include -+#include ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+ .file "darwin64.S" -+.text ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void)); ++/* ---- Definitions for closures ----------------------------------------- */ + -+ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame -+ for this function. This has been allocated by ffi_call. We also -+ deallocate some of the stack that has been alloca'd. */ ++#if FFI_CLOSURES + -+ .align 3 -+ .globl _ffi_call_unix64 ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+_ffi_call_unix64: -+LUW0: -+ movq (%rsp), %r10 /* Load return address. */ -+ leaq (%rdi, %rsi), %rax /* Find local stack base. */ -+ movq %rdx, (%rax) /* Save flags. */ -+ movq %rcx, 8(%rax) /* Save raddr. */ -+ movq %rbp, 16(%rax) /* Save old frame pointer. */ -+ movq %r10, 24(%rax) /* Relocate return address. */ -+ movq %rax, %rbp /* Finalize local stack frame. */ -+LUW1: -+ movq %rdi, %r10 /* Save a copy of the register area. */ -+ movq %r8, %r11 /* Save a copy of the target fn. */ -+ movl %r9d, %eax /* Set number of SSE registers. */ ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ /* Load up all argument registers. */ -+ movq (%r10), %rdi -+ movq 8(%r10), %rsi -+ movq 16(%r10), %rdx -+ movq 24(%r10), %rcx -+ movq 32(%r10), %r8 -+ movq 40(%r10), %r9 -+ testl %eax, %eax -+ jnz Lload_sse -+Lret_from_load_sse: ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+ /* Deallocate the reg arg area. */ -+ leaq 176(%r10), %rsp ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+ /* Call the user function. */ -+ call *%r11 ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+ /* Deallocate stack arg area; local stack frame in redzone. */ -+ leaq 24(%rbp), %rsp ++#if !FFI_NATIVE_RAW_API + -+ movq 0(%rbp), %rcx /* Reload flags. */ -+ movq 8(%rbp), %rdi /* Reload raddr. */ -+ movq 16(%rbp), %rbp /* Reload old frame pointer. */ -+LUW2: ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ /* The first byte of the flags contains the FFI_TYPE. */ -+ movzbl %cl, %r10d -+ leaq Lstore_table(%rip), %r11 -+ movslq (%r11, %r10, 4), %r10 -+ addq %r11, %r10 -+ jmp *%r10 ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+Lstore_table: -+ .long Lst_void-Lstore_table /* FFI_TYPE_VOID */ -+ .long Lst_sint32-Lstore_table /* FFI_TYPE_INT */ -+ .long Lst_float-Lstore_table /* FFI_TYPE_FLOAT */ -+ .long Lst_double-Lstore_table /* FFI_TYPE_DOUBLE */ -+ .long Lst_ldouble-Lstore_table /* FFI_TYPE_LONGDOUBLE */ -+ .long Lst_uint8-Lstore_table /* FFI_TYPE_UINT8 */ -+ .long Lst_sint8-Lstore_table /* FFI_TYPE_SINT8 */ -+ .long Lst_uint16-Lstore_table /* FFI_TYPE_UINT16 */ -+ .long Lst_sint16-Lstore_table /* FFI_TYPE_SINT16 */ -+ .long Lst_uint32-Lstore_table /* FFI_TYPE_UINT32 */ -+ .long Lst_sint32-Lstore_table /* FFI_TYPE_SINT32 */ -+ .long Lst_int64-Lstore_table /* FFI_TYPE_UINT64 */ -+ .long Lst_int64-Lstore_table /* FFI_TYPE_SINT64 */ -+ .long Lst_struct-Lstore_table /* FFI_TYPE_STRUCT */ -+ .long Lst_int64-Lstore_table /* FFI_TYPE_POINTER */ ++#endif + -+ .text -+ .align 3 -+Lst_void: -+ ret -+ .align 3 -+Lst_uint8: -+ movzbq %al, %rax -+ movq %rax, (%rdi) -+ ret -+ .align 3 -+Lst_sint8: -+ movsbq %al, %rax -+ movq %rax, (%rdi) -+ ret -+ .align 3 -+Lst_uint16: -+ movzwq %ax, %rax -+ movq %rax, (%rdi) -+ .align 3 -+Lst_sint16: -+ movswq %ax, %rax -+ movq %rax, (%rdi) -+ ret -+ .align 3 -+Lst_uint32: -+ movl %eax, %eax -+ movq %rax, (%rdi) -+ .align 3 -+Lst_sint32: -+ cltq -+ movq %rax, (%rdi) -+ ret -+ .align 3 -+Lst_int64: -+ movq %rax, (%rdi) -+ ret -+ .align 3 -+Lst_float: -+ movss %xmm0, (%rdi) -+ ret -+ .align 3 -+Lst_double: -+ movsd %xmm0, (%rdi) -+ ret -+Lst_ldouble: -+ fstpt (%rdi) -+ ret -+ .align 3 -+Lst_struct: -+ leaq -20(%rsp), %rsi /* Scratch area in redzone. */ -+ -+ /* We have to locate the values now, and since we don't want to -+ write too much data into the user's return value, we spill the -+ value to a 16 byte scratch area first. Bits 8, 9, and 10 -+ control where the values are located. Only one of the three -+ bits will be set; see ffi_prep_cif_machdep for the pattern. */ -+ movd %xmm0, %r10 -+ movd %xmm1, %r11 -+ testl $0x100, %ecx -+ cmovnz %rax, %rdx -+ cmovnz %r10, %rax -+ testl $0x200, %ecx -+ cmovnz %r10, %rdx -+ testl $0x400, %ecx -+ cmovnz %r10, %rax -+ cmovnz %r11, %rdx -+ movq %rax, (%rsi) -+ movq %rdx, 8(%rsi) ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ /* Bits 12-31 contain the true size of the structure. Copy from -+ the scratch area to the true destination. */ -+ shrl $12, %ecx -+ rep movsb -+ ret ++} ffi_raw_closure; + -+ /* Many times we can avoid loading any SSE registers at all. -+ It's not worth an indirect jump to load the exact set of -+ SSE registers needed; zero or all is a good compromise. */ -+ .align 3 -+LUW3: -+Lload_sse: -+ movdqa 48(%r10), %xmm0 -+ movdqa 64(%r10), %xmm1 -+ movdqa 80(%r10), %xmm2 -+ movdqa 96(%r10), %xmm3 -+ movdqa 112(%r10), %xmm4 -+ movdqa 128(%r10), %xmm5 -+ movdqa 144(%r10), %xmm6 -+ movdqa 160(%r10), %xmm7 -+ jmp Lret_from_load_sse -+ -+LUW4: -+ .align 3 -+ .globl _ffi_closure_unix64 -+ -+_ffi_closure_unix64: -+LUW5: -+ /* The carry flag is set by the trampoline iff SSE registers -+ are used. Don't clobber it before the branch instruction. */ -+ leaq -200(%rsp), %rsp -+LUW6: -+ movq %rdi, (%rsp) -+ movq %rsi, 8(%rsp) -+ movq %rdx, 16(%rsp) -+ movq %rcx, 24(%rsp) -+ movq %r8, 32(%rsp) -+ movq %r9, 40(%rsp) -+ jc Lsave_sse -+Lret_from_save_sse: -+ -+ movq %r10, %rdi -+ leaq 176(%rsp), %rsi -+ movq %rsp, %rdx -+ leaq 208(%rsp), %rcx -+ call _ffi_closure_unix64_inner ++typedef struct { ++#if 1 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+ /* Deallocate stack frame early; return value is now in redzone. */ -+ addq $200, %rsp -+LUW7: ++ ffi_cif *cif; + -+ /* The first byte of the return value contains the FFI_TYPE. */ -+ movzbl %al, %r10d -+ leaq Lload_table(%rip), %r11 -+ movslq (%r11, %r10, 4), %r10 -+ addq %r11, %r10 -+ jmp *%r10 ++#if !FFI_NATIVE_RAW_API + -+Lload_table: -+ .long Lld_void-Lload_table /* FFI_TYPE_VOID */ -+ .long Lld_int32-Lload_table /* FFI_TYPE_INT */ -+ .long Lld_float-Lload_table /* FFI_TYPE_FLOAT */ -+ .long Lld_double-Lload_table /* FFI_TYPE_DOUBLE */ -+ .long Lld_ldouble-Lload_table /* FFI_TYPE_LONGDOUBLE */ -+ .long Lld_int8-Lload_table /* FFI_TYPE_UINT8 */ -+ .long Lld_int8-Lload_table /* FFI_TYPE_SINT8 */ -+ .long Lld_int16-Lload_table /* FFI_TYPE_UINT16 */ -+ .long Lld_int16-Lload_table /* FFI_TYPE_SINT16 */ -+ .long Lld_int32-Lload_table /* FFI_TYPE_UINT32 */ -+ .long Lld_int32-Lload_table /* FFI_TYPE_SINT32 */ -+ .long Lld_int64-Lload_table /* FFI_TYPE_UINT64 */ -+ .long Lld_int64-Lload_table /* FFI_TYPE_SINT64 */ -+ .long Lld_struct-Lload_table /* FFI_TYPE_STRUCT */ -+ .long Lld_int64-Lload_table /* FFI_TYPE_POINTER */ ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ .text -+ .align 3 -+Lld_void: -+ ret -+ .align 3 -+Lld_int8: -+ movzbl -24(%rsp), %eax -+ ret -+ .align 3 -+Lld_int16: -+ movzwl -24(%rsp), %eax -+ ret -+ .align 3 -+Lld_int32: -+ movl -24(%rsp), %eax -+ ret -+ .align 3 -+Lld_int64: -+ movq -24(%rsp), %rax -+ ret -+ .align 3 -+Lld_float: -+ movss -24(%rsp), %xmm0 -+ ret -+ .align 3 -+Lld_double: -+ movsd -24(%rsp), %xmm0 -+ ret -+ .align 3 -+Lld_ldouble: -+ fldt -24(%rsp) -+ ret -+ .align 3 -+Lld_struct: -+ /* There are four possibilities here, %rax/%rdx, %xmm0/%rax, -+ %rax/%xmm0, %xmm0/%xmm1. We collapse two by always loading -+ both rdx and xmm1 with the second word. For the remaining, -+ bit 8 set means xmm0 gets the second word, and bit 9 means -+ that rax gets the second word. */ -+ movq -24(%rsp), %rcx -+ movq -16(%rsp), %rdx -+ movq -16(%rsp), %xmm1 -+ testl $0x100, %eax -+ cmovnz %rdx, %rcx -+ movd %rcx, %xmm0 -+ testl $0x200, %eax -+ movq -24(%rsp), %rax -+ cmovnz %rdx, %rax -+ ret ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ /* See the comment above Lload_sse; the same logic applies here. */ -+ .align 3 -+LUW8: -+Lsave_sse: -+ movdqa %xmm0, 48(%rsp) -+ movdqa %xmm1, 64(%rsp) -+ movdqa %xmm2, 80(%rsp) -+ movdqa %xmm3, 96(%rsp) -+ movdqa %xmm4, 112(%rsp) -+ movdqa %xmm5, 128(%rsp) -+ movdqa %xmm6, 144(%rsp) -+ movdqa %xmm7, 160(%rsp) -+ jmp Lret_from_save_sse -+ -+LUW9: -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EH_frame1: -+ .set L$set$0,LECIE1-LSCIE1 /* CIE Length */ -+ .long L$set$0 -+LSCIE1: -+ .long 0x0 /* CIE Identifier Tag */ -+ .byte 0x1 /* CIE Version */ -+ .ascii "zR\0" /* CIE Augmentation */ -+ .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ -+ .byte 0x78 /* sleb128 -8; CIE Data Alignment Factor */ -+ .byte 0x10 /* CIE RA Column */ -+ .byte 0x1 /* uleb128 0x1; Augmentation size */ -+ .byte 0x10 /* FDE Encoding (pcrel sdata4) */ -+ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ -+ .byte 0x7 /* uleb128 0x7 */ -+ .byte 0x8 /* uleb128 0x8 */ -+ .byte 0x90 /* DW_CFA_offset, column 0x10 */ -+ .byte 0x1 -+ .align 3 -+LECIE1: -+ .globl _ffi_call_unix64.eh -+_ffi_call_unix64.eh: -+LSFDE1: -+ .set L$set$1,LEFDE1-LASFDE1 /* FDE Length */ -+ .long L$set$1 -+LASFDE1: -+ .long LASFDE1-EH_frame1 /* FDE CIE offset */ -+ .quad LUW0-. /* FDE initial location */ -+ .set L$set$2,LUW4-LUW0 /* FDE address range */ -+ .quad L$set$2 -+ .byte 0x0 /* Augmentation size */ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$3,LUW1-LUW0 -+ .long L$set$3 ++#endif + -+ /* New stack frame based off rbp. This is a itty bit of unwind -+ trickery in that the CFA *has* changed. There is no easy way -+ to describe it correctly on entry to the function. Fortunately, -+ it doesn't matter too much since at all points we can correctly -+ unwind back to ffi_call. Note that the location to which we -+ moved the return address is (the new) CFA-8, so from the -+ perspective of the unwind info, it hasn't moved. */ -+ .byte 0xc /* DW_CFA_def_cfa, %rbp offset 32 */ -+ .byte 0x6 -+ .byte 0x20 -+ .byte 0x80+6 /* DW_CFA_offset, %rbp offset 2*-8 */ -+ .byte 0x2 -+ .byte 0xa /* DW_CFA_remember_state */ ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$4,LUW2-LUW1 -+ .long L$set$4 -+ .byte 0xc /* DW_CFA_def_cfa, %rsp offset 8 */ -+ .byte 0x7 -+ .byte 0x8 -+ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ ++} ffi_java_raw_closure; + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$5,LUW3-LUW2 -+ .long L$set$5 -+ .byte 0xb /* DW_CFA_restore_state */ ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + -+ .align 3 -+LEFDE1: -+ .globl _ffi_closure_unix64.eh -+_ffi_closure_unix64.eh: -+LSFDE3: -+ .set L$set$6,LEFDE3-LASFDE3 /* FDE Length */ -+ .long L$set$6 -+LASFDE3: -+ .long LASFDE3-EH_frame1 /* FDE CIE offset */ -+ .quad LUW5-. /* FDE initial location */ -+ .set L$set$7,LUW9-LUW5 /* FDE address range */ -+ .quad L$set$7 -+ .byte 0x0 /* Augmentation size */ -+ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$8,LUW6-LUW5 -+ .long L$set$8 -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte 208,1 /* uleb128 208 */ -+ .byte 0xa /* DW_CFA_remember_state */ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$9,LUW7-LUW6 -+ .long L$set$9 -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte 0x8 ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .set L$set$10,LUW8-LUW7 -+ .long L$set$10 -+ .byte 0xb /* DW_CFA_restore_state */ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ .align 3 -+LEFDE3: -+ .subsections_via_symbols ++#endif /* FFI_CLOSURES */ + -+#endif /* __x86_64__ */ ++#if FFI_GO_CLOSURES + ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/darwin_i386.S modified/Modules/_ctypes/libffi_ios/x86/darwin_i386.S ---- orig/Modules/_ctypes/libffi_ios/x86/darwin_i386.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/darwin_i386.S 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,449 @@ -+#ifdef __i386__ ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); + -+/* ----------------------------------------------------------------------- -+ darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); + -+ X86 Foreign Function Interface ++#endif /* FFI_GO_CLOSURES */ + -+ 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: ++/* ---- Public interface definition -------------------------------------- */ + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ 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. -+ ----------------------------------------------------------------------- -+ */ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#ifndef __x86_64__ ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+#define LIBFFI_ASM -+#include -+#include ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+.text ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+.globl _ffi_prep_args ++#endif + -+ .align 4 -+.globl _ffi_call_SYSV ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 0 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+_ffi_call_SYSV: -+.LFB1: -+ pushl %ebp -+.LCFI0: -+ movl %esp,%ebp -+.LCFI1: -+ subl $8,%esp -+ /* Make room for all of the new args. */ -+ movl 16(%ebp),%ecx -+ subl %ecx,%esp ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ movl %esp,%eax ++#ifdef __cplusplus ++} ++#endif + -+ /* Place all of the ffi_prep_args in position */ -+ subl $8,%esp -+ pushl 12(%ebp) -+ pushl %eax -+ call *8(%ebp) ++#endif + -+ /* Return stack to previous state and call the function */ -+ addl $16,%esp + -+ call *28(%ebp) ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-12-20 18:55:19.000000000 +0800 +@@ -0,0 +1,55 @@ ++/* ----------------------------------------------------------------------- ++ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. + -+ /* Load %ecx with the return type code */ -+ movl 20(%ebp),%ecx ++ Conditionally assemble cfi directives. Only necessary for building libffi. ++ ----------------------------------------------------------------------- */ + -+ /* Protect %esi. We're going to pop it in the epilogue. */ -+ pushl %esi ++#ifndef FFI_CFI_H ++#define FFI_CFI_H + -+ /* If the return value pointer is NULL, assume no return value. */ -+ cmpl $0,24(%ebp) -+ jne 0f ++#ifdef HAVE_AS_CFI_PSEUDO_OP + -+ /* Even if there is no space for the return value, we are -+ obliged to handle floating-point values. */ -+ cmpl $FFI_TYPE_FLOAT,%ecx -+ jne noretval -+ fstp %st(0) ++# define cfi_startproc .cfi_startproc ++# define cfi_endproc .cfi_endproc ++# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off ++# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg ++# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off ++# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off ++# define cfi_offset(reg, off) .cfi_offset reg, off ++# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off ++# define cfi_register(r1, r2) .cfi_register r1, r2 ++# define cfi_return_column(reg) .cfi_return_column reg ++# define cfi_restore(reg) .cfi_restore reg ++# define cfi_same_value(reg) .cfi_same_value reg ++# define cfi_undefined(reg) .cfi_undefined reg ++# define cfi_remember_state .cfi_remember_state ++# define cfi_restore_state .cfi_restore_state ++# define cfi_window_save .cfi_window_save ++# define cfi_personality(enc, exp) .cfi_personality enc, exp ++# define cfi_lsda(enc, exp) .cfi_lsda enc, exp ++# define cfi_escape(...) .cfi_escape __VA_ARGS__ + -+ jmp epilogue -+0: -+ .align 4 -+ call 1f -+.Lstore_table: -+ .long noretval-.Lstore_table /* FFI_TYPE_VOID */ -+ .long retint-.Lstore_table /* FFI_TYPE_INT */ -+ .long retfloat-.Lstore_table /* FFI_TYPE_FLOAT */ -+ .long retdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ -+ .long retlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ -+ .long retuint8-.Lstore_table /* FFI_TYPE_UINT8 */ -+ .long retsint8-.Lstore_table /* FFI_TYPE_SINT8 */ -+ .long retuint16-.Lstore_table /* FFI_TYPE_UINT16 */ -+ .long retsint16-.Lstore_table /* FFI_TYPE_SINT16 */ -+ .long retint-.Lstore_table /* FFI_TYPE_UINT32 */ -+ .long retint-.Lstore_table /* FFI_TYPE_SINT32 */ -+ .long retint64-.Lstore_table /* FFI_TYPE_UINT64 */ -+ .long retint64-.Lstore_table /* FFI_TYPE_SINT64 */ -+ .long retstruct-.Lstore_table /* FFI_TYPE_STRUCT */ -+ .long retint-.Lstore_table /* FFI_TYPE_POINTER */ -+ .long retstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ -+ .long retstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ -+1: -+ pop %esi -+ add (%esi, %ecx, 4), %esi -+ jmp *%esi ++#else + -+ /* Sign/zero extend as appropriate. */ -+retsint8: -+ movsbl %al, %eax -+ jmp retint ++# define cfi_startproc ++# define cfi_endproc ++# define cfi_def_cfa(reg, off) ++# define cfi_def_cfa_register(reg) ++# define cfi_def_cfa_offset(off) ++# define cfi_adjust_cfa_offset(off) ++# define cfi_offset(reg, off) ++# define cfi_rel_offset(reg, off) ++# define cfi_register(r1, r2) ++# define cfi_return_column(reg) ++# define cfi_restore(reg) ++# define cfi_same_value(reg) ++# define cfi_undefined(reg) ++# define cfi_remember_state ++# define cfi_restore_state ++# define cfi_window_save ++# define cfi_personality(enc, exp) ++# define cfi_lsda(enc, exp) ++# define cfi_escape(...) + -+retsint16: -+ movswl %ax, %eax -+ jmp retint ++#endif /* HAVE_AS_CFI_PSEUDO_OP */ ++#endif /* FFI_CFI_H */ +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-12-20 18:55:19.000000000 +0800 +@@ -0,0 +1,132 @@ ++/* ----------------------------------------------------------------------- ++ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green ++ Copyright (C) 2007 Free Software Foundation, Inc ++ Copyright (c) 1996 Red Hat, Inc. ++ ++ Common internal definitions and macros. Only necessary for building ++ libffi. ++ ----------------------------------------------------------------------- */ + -+retuint8: -+ movzbl %al, %eax -+ jmp retint ++#ifndef FFI_COMMON_H ++#define FFI_COMMON_H + -+retuint16: -+ movzwl %ax, %eax -+ jmp retint -+ -+retfloat: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ fstps (%ecx) -+ jmp epilogue -+ -+retdouble: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ fstpl (%ecx) -+ jmp epilogue -+ -+retlongdouble: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ fstpt (%ecx) -+ jmp epilogue -+ -+retint64: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ movl %eax,0(%ecx) -+ movl %edx,4(%ecx) -+ jmp epilogue -+ -+retstruct1b: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ movb %al,0(%ecx) -+ jmp epilogue -+ -+retstruct2b: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ movw %ax,0(%ecx) -+ jmp epilogue -+ -+retint: -+ /* Load %ecx with the pointer to storage for the return value */ -+ movl 24(%ebp),%ecx -+ movl %eax,0(%ecx) -+ -+retstruct: -+ /* Nothing to do! */ -+ -+noretval: -+epilogue: -+ popl %esi -+ movl %ebp,%esp -+ popl %ebp -+ ret ++#ifdef __cplusplus ++extern "C" { ++#endif + -+.LFE1: -+.ffi_call_SYSV_end: ++#include + -+ .align 4 -+FFI_HIDDEN (ffi_closure_SYSV) -+.globl _ffi_closure_SYSV -+ -+_ffi_closure_SYSV: -+.LFB2: -+ pushl %ebp -+.LCFI2: -+ movl %esp, %ebp -+.LCFI3: -+ subl $40, %esp -+ leal -24(%ebp), %edx -+ movl %edx, -12(%ebp) /* resp */ -+ leal 8(%ebp), %edx -+ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ -+ leal -12(%ebp), %edx -+ movl %edx, (%esp) /* &resp */ -+ movl %ebx, 8(%esp) -+.LCFI7: -+ call L_ffi_closure_SYSV_inner$stub -+ movl 8(%esp), %ebx -+ movl -12(%ebp), %ecx -+ cmpl $FFI_TYPE_INT, %eax -+ je .Lcls_retint -+ -+ /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, -+ FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ -+ cmpl $FFI_TYPE_UINT64, %eax -+ jge 0f -+ cmpl $FFI_TYPE_UINT8, %eax -+ jge .Lcls_retint -+ -+0: cmpl $FFI_TYPE_FLOAT, %eax -+ je .Lcls_retfloat -+ cmpl $FFI_TYPE_DOUBLE, %eax -+ je .Lcls_retdouble -+ cmpl $FFI_TYPE_LONGDOUBLE, %eax -+ je .Lcls_retldouble -+ cmpl $FFI_TYPE_SINT64, %eax -+ je .Lcls_retllong -+ cmpl $FFI_TYPE_SMALL_STRUCT_1B, %eax -+ je .Lcls_retstruct1b -+ cmpl $FFI_TYPE_SMALL_STRUCT_2B, %eax -+ je .Lcls_retstruct2b -+ cmpl $FFI_TYPE_STRUCT, %eax -+ je .Lcls_retstruct -+.Lcls_epilogue: -+ movl %ebp, %esp -+ popl %ebp -+ ret -+.Lcls_retint: -+ movl (%ecx), %eax -+ jmp .Lcls_epilogue -+.Lcls_retfloat: -+ flds (%ecx) -+ jmp .Lcls_epilogue -+.Lcls_retdouble: -+ fldl (%ecx) -+ jmp .Lcls_epilogue -+.Lcls_retldouble: -+ fldt (%ecx) -+ jmp .Lcls_epilogue -+.Lcls_retllong: -+ movl (%ecx), %eax -+ movl 4(%ecx), %edx -+ jmp .Lcls_epilogue -+.Lcls_retstruct1b: -+ movsbl (%ecx), %eax -+ jmp .Lcls_epilogue -+.Lcls_retstruct2b: -+ movswl (%ecx), %eax -+ jmp .Lcls_epilogue -+.Lcls_retstruct: -+ lea -8(%ebp),%esp -+ movl %ebp, %esp -+ popl %ebp -+ ret $4 -+.LFE2: ++/* Do not move this. Some versions of AIX are very picky about where ++ this is positioned. */ ++#ifdef __GNUC__ ++# if HAVE_ALLOCA_H ++# include ++# else ++ /* mingw64 defines this already in malloc.h. */ ++# ifndef alloca ++# define alloca __builtin_alloca ++# endif ++# endif ++# define MAYBE_UNUSED __attribute__((__unused__)) ++#else ++# define MAYBE_UNUSED ++# if HAVE_ALLOCA_H ++# include ++# else ++# ifdef _AIX ++# pragma alloca ++# else ++# ifndef alloca /* predefined by HP cc +Olibcalls */ ++# ifdef _MSC_VER ++# define alloca _alloca ++# else ++char *alloca (); ++# endif ++# endif ++# endif ++# endif ++#endif + -+#if !FFI_NO_RAW_API ++/* Check for the existence of memcpy. */ ++#if STDC_HEADERS ++# include ++#else ++# ifndef HAVE_MEMCPY ++# define memcpy(d, s, n) bcopy ((s), (d), (n)) ++# endif ++#endif + -+#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -+#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -+#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -+#define CIF_FLAGS_OFFSET 20 ++#if defined(FFI_DEBUG) ++#include ++#endif + -+ .align 4 -+FFI_HIDDEN (ffi_closure_raw_SYSV) -+.globl _ffi_closure_raw_SYSV -+ -+_ffi_closure_raw_SYSV: -+.LFB3: -+ pushl %ebp -+.LCFI4: -+ movl %esp, %ebp -+.LCFI5: -+ pushl %esi -+.LCFI6: -+ subl $36, %esp -+ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ -+ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ -+ movl %edx, 12(%esp) /* user_data */ -+ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ -+ movl %edx, 8(%esp) /* raw_args */ -+ leal -24(%ebp), %edx -+ movl %edx, 4(%esp) /* &res */ -+ movl %esi, (%esp) /* cif */ -+ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ -+ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ -+ cmpl $FFI_TYPE_INT, %eax -+ je .Lrcls_retint -+ -+ /* Handle FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16, -+ FFI_TYPE_SINT16, FFI_TYPE_UINT32, FFI_TYPE_SINT32. */ -+ cmpl $FFI_TYPE_UINT64, %eax -+ jge 0f -+ cmpl $FFI_TYPE_UINT8, %eax -+ jge .Lrcls_retint -+0: -+ cmpl $FFI_TYPE_FLOAT, %eax -+ je .Lrcls_retfloat -+ cmpl $FFI_TYPE_DOUBLE, %eax -+ je .Lrcls_retdouble -+ cmpl $FFI_TYPE_LONGDOUBLE, %eax -+ je .Lrcls_retldouble -+ cmpl $FFI_TYPE_SINT64, %eax -+ je .Lrcls_retllong -+.Lrcls_epilogue: -+ addl $36, %esp -+ popl %esi -+ popl %ebp -+ ret -+.Lrcls_retint: -+ movl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+.Lrcls_retfloat: -+ flds -24(%ebp) -+ jmp .Lrcls_epilogue -+.Lrcls_retdouble: -+ fldl -24(%ebp) -+ jmp .Lrcls_epilogue -+.Lrcls_retldouble: -+ fldt -24(%ebp) -+ jmp .Lrcls_epilogue -+.Lrcls_retllong: -+ movl -24(%ebp), %eax -+ movl -20(%ebp), %edx -+ jmp .Lrcls_epilogue -+.LFE3: -+#endif -+ -+.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 -+L_ffi_closure_SYSV_inner$stub: -+ .indirect_symbol _ffi_closure_SYSV_inner -+ hlt ; hlt ; hlt ; hlt ; hlt ++#ifdef FFI_DEBUG ++void ffi_assert(char *expr, char *file, int line); ++void ffi_stop_here(void); ++void ffi_type_test(ffi_type *a, char *file, int line); + ++#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) ++#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) ++#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) ++#else ++#define FFI_ASSERT(x) ++#define FFI_ASSERT_AT(x, f, l) ++#define FFI_ASSERT_VALID_TYPE(x) ++#endif + -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EH_frame1: -+ .set L$set$0,LECIE1-LSCIE1 -+ .long L$set$0 -+LSCIE1: -+ .long 0x0 -+ .byte 0x1 -+ .ascii "zR\0" -+ .byte 0x1 -+ .byte 0x7c -+ .byte 0x8 -+ .byte 0x1 -+ .byte 0x10 -+ .byte 0xc -+ .byte 0x5 -+ .byte 0x4 -+ .byte 0x88 -+ .byte 0x1 -+ .align 2 -+LECIE1: -+.globl _ffi_call_SYSV.eh -+_ffi_call_SYSV.eh: -+LSFDE1: -+ .set L$set$1,LEFDE1-LASFDE1 -+ .long L$set$1 -+LASFDE1: -+ .long LASFDE1-EH_frame1 -+ .long .LFB1-. -+ .set L$set$2,.LFE1-.LFB1 -+ .long L$set$2 -+ .byte 0x0 -+ .byte 0x4 -+ .set L$set$3,.LCFI0-.LFB1 -+ .long L$set$3 -+ .byte 0xe -+ .byte 0x8 -+ .byte 0x84 -+ .byte 0x2 -+ .byte 0x4 -+ .set L$set$4,.LCFI1-.LCFI0 -+ .long L$set$4 -+ .byte 0xd -+ .byte 0x4 -+ .align 2 -+LEFDE1: -+.globl _ffi_closure_SYSV.eh -+_ffi_closure_SYSV.eh: -+LSFDE2: -+ .set L$set$5,LEFDE2-LASFDE2 -+ .long L$set$5 -+LASFDE2: -+ .long LASFDE2-EH_frame1 -+ .long .LFB2-. -+ .set L$set$6,.LFE2-.LFB2 -+ .long L$set$6 -+ .byte 0x0 -+ .byte 0x4 -+ .set L$set$7,.LCFI2-.LFB2 -+ .long L$set$7 -+ .byte 0xe -+ .byte 0x8 -+ .byte 0x84 -+ .byte 0x2 -+ .byte 0x4 -+ .set L$set$8,.LCFI3-.LCFI2 -+ .long L$set$8 -+ .byte 0xd -+ .byte 0x4 -+ .align 2 -+LEFDE2: ++#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) ++#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) + -+#if !FFI_NO_RAW_API ++/* Perform machine dependent cif processing */ ++ffi_status ffi_prep_cif_machdep(ffi_cif *cif); ++ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, ++ unsigned int nfixedargs, unsigned int ntotalargs); + -+.globl _ffi_closure_raw_SYSV.eh -+_ffi_closure_raw_SYSV.eh: -+LSFDE3: -+ .set L$set$10,LEFDE3-LASFDE3 -+ .long L$set$10 -+LASFDE3: -+ .long LASFDE3-EH_frame1 -+ .long .LFB3-. -+ .set L$set$11,.LFE3-.LFB3 -+ .long L$set$11 -+ .byte 0x0 -+ .byte 0x4 -+ .set L$set$12,.LCFI4-.LFB3 -+ .long L$set$12 -+ .byte 0xe -+ .byte 0x8 -+ .byte 0x84 -+ .byte 0x2 -+ .byte 0x4 -+ .set L$set$13,.LCFI5-.LCFI4 -+ .long L$set$13 -+ .byte 0xd -+ .byte 0x4 -+ .byte 0x4 -+ .set L$set$14,.LCFI6-.LCFI5 -+ .long L$set$14 -+ .byte 0x85 -+ .byte 0x3 -+ .align 2 -+LEFDE3: ++/* Extended cif, used in callback from assembly routine */ ++typedef struct ++{ ++ ffi_cif *cif; ++ void *rvalue; ++ void **avalue; ++} extended_cif; + ++/* Terse sized type definitions. */ ++#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) ++typedef unsigned char UINT8; ++typedef signed char SINT8; ++typedef unsigned short UINT16; ++typedef signed short SINT16; ++typedef unsigned int UINT32; ++typedef signed int SINT32; ++# ifdef _MSC_VER ++typedef unsigned __int64 UINT64; ++typedef signed __int64 SINT64; ++# else ++# include ++typedef uint64_t UINT64; ++typedef int64_t SINT64; ++# endif ++#else ++typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); ++typedef signed int SINT8 __attribute__((__mode__(__QI__))); ++typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); ++typedef signed int SINT16 __attribute__((__mode__(__HI__))); ++typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); ++typedef signed int SINT32 __attribute__((__mode__(__SI__))); ++typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); ++typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif + -+#endif /* ifndef __x86_64__ */ ++typedef float FLOAT32; + ++#ifndef __GNUC__ ++#define __builtin_expect(x, expected_value) (x) ++#endif ++#define LIKELY(x) __builtin_expect(!!(x),1) ++#define UNLIKELY(x) __builtin_expect((x)!=0,0) + ++#ifdef __cplusplus ++} +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,681 @@ -+#ifdef __x86_64__ + -+/* ----------------------------------------------------------------------- -+ ffi64.c - Copyright (c) 2013 The Written Word, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2008, 2010 Red Hat, Inc. -+ Copyright (c) 2002, 2007 Bo Thorsen ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __i386__ + -+ x86-64 Foreign Function Interface ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -31276,684 +24252,510 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_c + 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. ++ + ----------------------------------------------------------------------- */ + -+#include -+#include ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+#include -+#include ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+#ifdef __x86_64__ ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+#define MAX_GPR_REGS 6 -+#define MAX_SSE_REGS 8 ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+#if defined(__INTEL_COMPILER) -+#include "xmmintrin.h" -+#define UINT128 __m128 -+#else -+#if defined(__SUNPRO_C) -+#include -+#define UINT128 __m128i -+#else -+#define UINT128 __int128_t -+#endif -+#endif ++ More details on the raw and cloure API can be found in: + -+union big_int_union -+{ -+ UINT32 i32; -+ UINT64 i64; -+ UINT128 i128; -+}; ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+struct register_args -+{ -+ /* Registers for argument passing. */ -+ UINT64 gpr[MAX_GPR_REGS]; -+ union big_int_union sse[MAX_SSE_REGS]; -+}; ++ and + -+extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void), unsigned ssecount); ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+/* All reference to register classes here is identical to the code in -+ gcc/config/i386/i386.c. Do *not* change one without the other. */ ++#ifndef LIBFFI_H ++#define LIBFFI_H + -+/* Register class used for passing given 64bit part of the argument. -+ These represent classes as documented by the PS ABI, with the -+ exception of SSESF, SSEDF classes, that are basically SSE class, -+ just gcc will use SF or DFmode move instead of DImode to avoid -+ reformatting penalties. ++#ifdef __cplusplus ++extern "C" { ++#endif + -+ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves -+ whenever possible (upper half does contain padding). */ -+enum x86_64_reg_class -+ { -+ X86_64_NO_CLASS, -+ X86_64_INTEGER_CLASS, -+ X86_64_INTEGERSI_CLASS, -+ X86_64_SSE_CLASS, -+ X86_64_SSESF_CLASS, -+ X86_64_SSEDF_CLASS, -+ X86_64_SSEUP_CLASS, -+ X86_64_X87_CLASS, -+ X86_64_X87UP_CLASS, -+ X86_64_COMPLEX_X87_CLASS, -+ X86_64_MEMORY_CLASS -+ }; ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_DARWIN ++#define X86_DARWIN ++#endif + -+#define MAX_CLASSES 4 ++/* ---- System configuration information --------------------------------- */ + -+#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) ++#include + -+/* x86-64 register passing implementation. See x86-64 ABI for details. Goal -+ of this code is to classify each 8bytes of incoming argument by the register -+ class and assign registers accordingly. */ ++#ifndef LIBFFI_ASM + -+/* Return the union class of CLASS1 and CLASS2. -+ See the x86-64 PS ABI for details. */ ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) ++#endif + -+static enum x86_64_reg_class -+merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) -+{ -+ /* Rule #1: If both classes are equal, this is the resulting class. */ -+ if (class1 == class2) -+ return class1; ++#include ++#include + -+ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is -+ the other class. */ -+ if (class1 == X86_64_NO_CLASS) -+ return class2; -+ if (class2 == X86_64_NO_CLASS) -+ return class1; ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ + -+ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ -+ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) -+ return X86_64_MEMORY_CLASS; ++#define FFI_64_BIT_MAX 9223372036854775807 ++ ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX ++#else ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif ++#endif + -+ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ -+ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) -+ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) -+ return X86_64_INTEGERSI_CLASS; -+ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS -+ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) -+ return X86_64_INTEGER_CLASS; ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ + -+ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, -+ MEMORY is used. */ -+ if (class1 == X86_64_X87_CLASS -+ || class1 == X86_64_X87UP_CLASS -+ || class1 == X86_64_COMPLEX_X87_CLASS -+ || class2 == X86_64_X87_CLASS -+ || class2 == X86_64_X87UP_CLASS -+ || class2 == X86_64_COMPLEX_X87_CLASS) -+ return X86_64_MEMORY_CLASS; ++typedef struct _ffi_type ++{ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+ /* Rule #6: Otherwise class SSE is used. */ -+ return X86_64_SSE_CLASS; -+} ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 ++#else ++ #error "char size not supported" ++#endif + -+/* Classify the argument of type TYPE and mode MODE. -+ CLASSES will be filled by the register class used to pass each word -+ of the operand. The number of words is returned. In case the parameter -+ should be passed in memory, 0 is returned. As a special case for zero -+ sized containers, classes[0] will be NO_CLASS and 1 is returned. ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" ++#endif + -+ See the x86-64 PS ABI for details. -+*/ -+static size_t -+classify_argument (ffi_type *type, enum x86_64_reg_class classes[], -+ size_t byte_offset) -+{ -+ switch (type->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ { -+ size_t size = byte_offset + type->size; ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif + -+ if (size <= 4) -+ { -+ classes[0] = X86_64_INTEGERSI_CLASS; -+ return 1; -+ } -+ else if (size <= 8) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ return 1; -+ } -+ else if (size <= 12) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ classes[1] = X86_64_INTEGERSI_CLASS; -+ return 2; -+ } -+ else if (size <= 16) -+ { -+ classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; -+ return 2; -+ } -+ else -+ FFI_ASSERT (0); -+ } -+ case FFI_TYPE_FLOAT: -+ if (!(byte_offset % 8)) -+ classes[0] = X86_64_SSESF_CLASS; -+ else -+ classes[0] = X86_64_SSE_CLASS; -+ return 1; -+ case FFI_TYPE_DOUBLE: -+ classes[0] = X86_64_SSEDF_CLASS; -+ return 1; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ classes[0] = X86_64_X87_CLASS; -+ classes[1] = X86_64_X87UP_CLASS; -+ return 2; ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" +#endif -+ case FFI_TYPE_STRUCT: -+ { -+ const size_t UNITS_PER_WORD = 8; -+ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; -+ ffi_type **ptr; -+ int i; -+ enum x86_64_reg_class subclasses[MAX_CLASSES]; + -+ /* If the struct is larger than 32 bytes, pass it on the stack. */ -+ if (type->size > 32) -+ return 0; ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 ++#else ++ #error "long size not supported" ++#endif + -+ for (i = 0; i < words; i++) -+ classes[i] = X86_64_NO_CLASS; ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+ /* Zero sized arrays or structures are NO_CLASS. We return 0 to -+ signalize memory class, so handle it as special case. */ -+ if (!words) -+ { -+ classes[0] = X86_64_NO_CLASS; -+ return 1; -+ } ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + -+ /* Merge the fields of structure. */ -+ for (ptr = type->elements; *ptr != NULL; ptr++) -+ { -+ size_t num; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; ++#else ++#define ffi_type_longdouble ffi_type_double ++#endif + -+ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+ num = classify_argument (*ptr, subclasses, byte_offset % 8); -+ if (num == 0) -+ return 0; -+ for (i = 0; i < num; i++) -+ { -+ size_t pos = byte_offset / 8; -+ classes[i + pos] = -+ merge_classes (subclasses[i], classes[i + pos]); -+ } ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+ byte_offset += (*ptr)->size; -+ } ++typedef unsigned FFI_TYPE; + -+ if (words > 2) -+ { -+ /* When size > 16 bytes, if the first one isn't -+ X86_64_SSE_CLASS or any other ones aren't -+ X86_64_SSEUP_CLASS, everything should be passed in -+ memory. */ -+ if (classes[0] != X86_64_SSE_CLASS) -+ return 0; ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+ for (i = 1; i < words; i++) -+ if (classes[i] != X86_64_SSEUP_CLASS) -+ return 0; -+ } ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+ /* Final merger cleanup. */ -+ for (i = 0; i < words; i++) -+ { -+ /* If one class is MEMORY, everything should be passed in -+ memory. */ -+ if (classes[i] == X86_64_MEMORY_CLASS) -+ return 0; ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ /* The X86_64_SSEUP_CLASS should be always preceded by -+ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ -+ if (classes[i] == X86_64_SSEUP_CLASS -+ && classes[i - 1] != X86_64_SSE_CLASS -+ && classes[i - 1] != X86_64_SSEUP_CLASS) -+ { -+ /* The first one should never be X86_64_SSEUP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ classes[i] = X86_64_SSE_CLASS; -+ } ++/* ---- Definitions for the raw API -------------------------------------- */ + -+ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, -+ everything should be passed in memory. */ -+ if (classes[i] == X86_64_X87UP_CLASS -+ && (classes[i - 1] != X86_64_X87_CLASS)) -+ { -+ /* The first one should never be X86_64_X87UP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ return 0; -+ } -+ } -+ return words; -+ } ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ default: -+ FFI_ASSERT(0); -+ } -+ return 0; /* Never reached. */ -+} ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+/* Examine the argument and return set number of register required in each -+ class. Return zero iff parameter should be passed in memory, otherwise -+ the number of registers. */ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+static size_t -+examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], -+ _Bool in_return, int *pngpr, int *pnsse) -+{ -+ size_t n; -+ int i, ngpr, nsse; ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; ++#else ++typedef ffi_raw ffi_java_raw; ++#endif + -+ n = classify_argument (type, classes, 0); -+ if (n == 0) -+ return 0; + -+ ngpr = nsse = 0; -+ for (i = 0; i < n; ++i) -+ switch (classes[i]) -+ { -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ ngpr++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSESF_CLASS: -+ case X86_64_SSEDF_CLASS: -+ nsse++; -+ break; -+ case X86_64_NO_CLASS: -+ case X86_64_SSEUP_CLASS: -+ break; -+ case X86_64_X87_CLASS: -+ case X86_64_X87UP_CLASS: -+ case X86_64_COMPLEX_X87_CLASS: -+ return in_return != 0; -+ default: -+ abort (); -+ } ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+ *pngpr = ngpr; -+ *pnsse = nsse; ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ return n; -+} ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+/* Perform machine dependent cif processing. */ ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int gprcount, ssecount, i, avn, ngpr, nsse, flags; -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t bytes, n; ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+ gprcount = ssecount = 0; ++/* ---- Definitions for closures ----------------------------------------- */ + -+ flags = cif->rtype->type; -+ if (flags != FFI_TYPE_VOID) -+ { -+ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); -+ if (n == 0) -+ { -+ /* The return value is passed in memory. A pointer to that -+ memory is the first argument. Allocate a register for it. */ -+ gprcount++; -+ /* We don't have to do anything in asm for the return. */ -+ flags = FFI_TYPE_VOID; -+ } -+ else if (flags == FFI_TYPE_STRUCT) -+ { -+ /* Mark which registers the result appears in. */ -+ _Bool sse0 = SSE_CLASS_P (classes[0]); -+ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); -+ if (sse0 && !sse1) -+ flags |= 1 << 8; -+ else if (!sse0 && sse1) -+ flags |= 1 << 9; -+ else if (sse0 && sse1) -+ flags |= 1 << 10; -+ /* Mark the true size of the structure. */ -+ flags |= cif->rtype->size << 12; -+ } -+ } ++#if FFI_CLOSURES + -+ /* Go over all arguments and determine the way they should be passed. -+ If it's in a register and there is space for it, let that be so. If -+ not, add it's size to the stack byte count. */ -+ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) -+ { -+ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = cif->arg_types[i]->alignment; ++#ifdef _MSC_VER ++__declspec(align(8)) ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); ++#else ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+ if (align < 8) -+ align = 8; ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + -+ bytes = ALIGN (bytes, align); -+ bytes += cif->arg_types[i]->size; -+ } -+ else -+ { -+ gprcount += ngpr; -+ ssecount += nsse; -+ } -+ } -+ if (ssecount) -+ flags |= 1 << 11; -+ cif->flags = flags; -+ cif->bytes = (unsigned)ALIGN (bytes, 8); ++ffi_status ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+ return FFI_OK; -+} ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int gprcount, ssecount, ngpr, nsse, i, avn; -+ _Bool ret_in_memory; -+ struct register_args *reg_args; ++#ifdef __sgi ++# pragma pack 8 ++#endif ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif ++ ffi_cif *cif; + -+ /* Can't call 32-bit mode from 64-bit mode. */ -+ FFI_ASSERT (cif->abi == FFI_UNIX64); ++#if !FFI_NATIVE_RAW_API + -+ /* If the return value is a struct and we don't have a return value -+ address then we need to make one. Note the setting of flags to -+ VOID above in ffi_prep_cif_machdep. */ -+ ret_in_memory = (cif->rtype->type == FFI_TYPE_STRUCT -+ && (cif->flags & 0xff) == FFI_TYPE_VOID); -+ if (rvalue == NULL && ret_in_memory) -+ rvalue = alloca (cif->rtype->size); ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ /* Allocate the space for the arguments, plus 4 words of temp space. */ -+ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); -+ reg_args = (struct register_args *) stack; -+ argp = stack + sizeof (struct register_args); ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ gprcount = ssecount = 0; ++#endif + -+ /* If the return value is passed in memory, add the pointer as the -+ first integer argument. */ -+ if (ret_in_memory) -+ reg_args->gpr[gprcount++] = (unsigned long) rvalue; ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ avn = cif->nargs; -+ arg_types = cif->arg_types; ++} ffi_raw_closure; ++ ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; ++#endif + -+ for (i = 0; i < avn; ++i) -+ { -+ size_t n, size = arg_types[i]->size; ++ ffi_cif *cif; + -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = arg_types[i]->alignment; ++#if !FFI_NATIVE_RAW_API + -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ memcpy (argp, avalue[i], size); -+ argp += size; -+ } -+ else -+ { -+ /* The argument is passed entirely in registers. */ -+ char *a = (char *) avalue[i]; -+ int j; ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ for (j = 0; j < n; j++, a += 8, size -= 8) -+ { -+ switch (classes[j]) -+ { -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ /* Sign-extend integer arguments passed in general -+ purpose registers, to cope with the fact that -+ LLVM incorrectly assumes that this will be done -+ (the x86-64 PS ABI does not specify this). */ -+ switch (arg_types[i]->type) -+ { -+ case FFI_TYPE_SINT8: -+ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); -+ break; -+ case FFI_TYPE_SINT16: -+ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); -+ break; -+ case FFI_TYPE_SINT32: -+ *(SINT64 *)®_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); -+ break; -+ default: -+ reg_args->gpr[gprcount] = 0; -+ memcpy (®_args->gpr[gprcount], a, size < 8 ? size : 8); -+ } -+ gprcount++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSEDF_CLASS: -+ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; -+ break; -+ case X86_64_SSESF_CLASS: -+ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; -+ break; -+ default: -+ abort(); -+ } -+ } -+ } -+ } ++#endif + -+ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), -+ cif->flags, rvalue, fn, ssecount); -+} ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + ++} ffi_java_raw_closure; + -+extern void ffi_closure_unix64(void); ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + +ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *codeloc) -+{ -+ volatile unsigned short *tramp; ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ /* Sanity check on the cif ABI. */ -+ { -+ int abi = cif->abi; -+ if (UNLIKELY (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI))) -+ return FFI_BAD_ABI; -+ } ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+ tramp = (volatile unsigned short *) &closure->tramp[0]; ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ tramp[0] = 0xbb49; /* mov , %r11 */ -+ *((unsigned long long * volatile) &tramp[1]) -+ = (unsigned long) ffi_closure_unix64; -+ tramp[5] = 0xba49; /* mov , %r10 */ -+ *((unsigned long long * volatile) &tramp[6]) -+ = (unsigned long) codeloc; ++#endif /* FFI_CLOSURES */ + -+ /* Set the carry bit iff the function uses any sse registers. -+ This is clc or stc, together with the first byte of the jmp. */ -+ tramp[10] = cif->flags & (1 << 11) ? 0x49f9 : 0x49f8; ++#if FFI_GO_CLOSURES + -+ tramp[11] = 0xe3ff; /* jmp *%r11 */ ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); + -+ return FFI_OK; -+} ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); + -+int -+ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue, -+ struct register_args *reg_args, char *argp) -+{ -+ ffi_cif *cif; -+ void **avalue; -+ ffi_type **arg_types; -+ long i, avn; -+ int gprcount, ssecount, ngpr, nsse; -+ int ret; ++#endif /* FFI_GO_CLOSURES */ + -+ cif = closure->cif; -+ avalue = alloca(cif->nargs * sizeof(void *)); -+ gprcount = ssecount = 0; ++/* ---- Public interface definition -------------------------------------- */ + -+ ret = cif->rtype->type; -+ if (ret != FFI_TYPE_VOID) -+ { -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); -+ if (n == 0) -+ { -+ /* The return value goes in memory. Arrange for the closure -+ return value to go directly back to the original caller. */ -+ rvalue = (void *) (unsigned long) reg_args->gpr[gprcount++]; -+ /* We don't have to do anything in asm for the return. */ -+ ret = FFI_TYPE_VOID; -+ } -+ else if (ret == FFI_TYPE_STRUCT && n == 2) -+ { -+ /* Mark which register the second word of the structure goes in. */ -+ _Bool sse0 = SSE_CLASS_P (classes[0]); -+ _Bool sse1 = SSE_CLASS_P (classes[1]); -+ if (!sse0 && sse1) -+ ret |= 1 << 8; -+ else if (sse0 && !sse1) -+ ret |= 1 << 9; -+ } -+ } ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ avn = cif->nargs; -+ arg_types = cif->arg_types; ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ for (i = 0; i < avn; ++i) -+ { -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t n; ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = arg_types[i]->alignment; ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ avalue[i] = argp; -+ argp += arg_types[i]->size; -+ } -+ /* If the argument is in a single register, or two consecutive -+ integer registers, then we can use that address directly. */ -+ else if (n == 1 -+ || (n == 2 && !(SSE_CLASS_P (classes[0]) -+ || SSE_CLASS_P (classes[1])))) -+ { -+ /* The argument is in a single register. */ -+ if (SSE_CLASS_P (classes[0])) -+ { -+ avalue[i] = ®_args->sse[ssecount]; -+ ssecount += n; -+ } -+ else -+ { -+ avalue[i] = ®_args->gpr[gprcount]; -+ gprcount += n; -+ } -+ } -+ /* Otherwise, allocate space to make them consecutive. */ -+ else -+ { -+ char *a = alloca (16); -+ int j; ++#endif + -+ avalue[i] = a; -+ for (j = 0; j < n; j++, a += 8) -+ { -+ if (SSE_CLASS_P (classes[j])) -+ memcpy (a, ®_args->sse[ssecount++], 8); -+ else -+ memcpy (a, ®_args->gpr[gprcount++], 8); -+ } -+ } -+ } ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 ++#else ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++#endif ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 + -+ /* Invoke the closure. */ -+ closure->fun (cif, rvalue, avalue, closure->user_data); ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+ /* Tell assembly how to perform return type promotions. */ -+ return ret; ++#ifdef __cplusplus +} ++#endif + -+#endif /* __x86_64__ */ ++#endif + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,936 @@ -+#ifdef __i386__ -+ -+/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. -+ Copyright (c) 2002 Ranjit Mathew -+ Copyright (c) 2002 Bo Thorsen -+ Copyright (c) 2002 Roger Sayle -+ Copyright (C) 2008, 2010 Free Software Foundation, Inc. +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,508 @@ ++#ifdef __x86_64__ + -+ x86 Foreign Function Interface ++/* -----------------------------------------------------------------*-C-*- ++ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green ++ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -31963,4011 +24765,1426 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctype + 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. -+ ----------------------------------------------------------------------- */ -+ -+#if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__) -+ -+#ifdef _WIN64 -+#include -+#endif -+ -+#include -+#include + -+#include ++ ----------------------------------------------------------------------- */ + ++/* ------------------------------------------------------------------- ++ The basic API is described in the README file. + -+/* ffi_prep_args is called by the assembly routine once stack space -+ has been allocated for the function's arguments */ ++ The raw API is designed to bypass some of the argument packing ++ and unpacking on architectures for which it can be avoided. + -+unsigned int ffi_prep_args(char *stack, extended_cif *ecif); -+unsigned int ffi_prep_args(char *stack, extended_cif *ecif) -+{ -+ register unsigned int i; -+ register void **p_argv; -+ register char *argp; -+ register ffi_type **p_arg; -+#ifndef X86_WIN64 -+ const int cabi = ecif->cif->abi; -+ const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; -+ unsigned int stack_args_count = 0; -+ void *p_stack_data[3]; -+ char *argp2 = stack; -+#else -+ #define dir 1 -+#endif ++ The closure API allows interpreted functions to be packaged up ++ inside a C function pointer, so that they can be called as C functions, ++ with no understanding on the client side that they are interpreted. ++ It can also be used in other cases in which it is necessary to package ++ up a user specified parameter and a function pointer as a single ++ function pointer. + -+ argp = stack; ++ The closure API must be implemented in order to get its functionality, ++ e.g. for use by gij. Routines are provided to emulate the raw API ++ if the underlying platform doesn't allow faster implementation. + -+ if ((ecif->cif->flags == FFI_TYPE_STRUCT -+ || ecif->cif->flags == FFI_TYPE_MS_STRUCT) -+#ifdef X86_WIN64 -+ && ((ecif->cif->rtype->size & (1 | 2 | 4 | 8)) == 0) -+#endif -+ ) -+ { -+#ifndef X86_WIN64 -+ /* For fastcall/thiscall/register this is first register-passed -+ argument. */ -+ if (cabi == FFI_THISCALL || cabi == FFI_FASTCALL || cabi == FFI_REGISTER) -+ { -+ p_stack_data[stack_args_count] = argp; -+ ++stack_args_count; -+ } -+#endif ++ More details on the raw and cloure API can be found in: + -+ *(void **) argp = ecif->rvalue; -+ argp += sizeof(void*); -+ } ++ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html + -+ p_arg = ecif->cif->arg_types; -+ p_argv = ecif->avalue; -+ if (dir < 0) -+ { -+ const int nargs = ecif->cif->nargs - 1; -+ if (nargs > 0) -+ { -+ p_arg += nargs; -+ p_argv += nargs; -+ } -+ } ++ and + -+ for (i = ecif->cif->nargs; -+ i != 0; -+ i--, p_arg += dir, p_argv += dir) -+ { -+ /* Align if necessary */ -+ if ((sizeof(void*) - 1) & (size_t) argp) -+ argp = (char *) ALIGN(argp, sizeof(void*)); ++ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html ++ -------------------------------------------------------------------- */ + -+ size_t z = (*p_arg)->size; ++#ifndef LIBFFI_H ++#define LIBFFI_H + -+#ifdef X86_WIN64 -+ if (z > FFI_SIZEOF_ARG -+ || ((*p_arg)->type == FFI_TYPE_STRUCT -+ && (z & (1 | 2 | 4 | 8)) == 0) -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+ || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) -+#endif -+ ) -+ { -+ z = FFI_SIZEOF_ARG; -+ *(void **)argp = *p_argv; -+ } -+ else if ((*p_arg)->type == FFI_TYPE_FLOAT) -+ { -+ memcpy(argp, *p_argv, z); -+ } -+ else ++#ifdef __cplusplus ++extern "C" { +#endif -+ if (z < FFI_SIZEOF_ARG) -+ { -+ z = FFI_SIZEOF_ARG; -+ switch ((*p_arg)->type) -+ { -+ case FFI_TYPE_SINT8: -+ *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_UINT8: -+ *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_SINT16: -+ *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_SINT32: -+ *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_UINT32: -+ *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); -+ break; -+ -+ case FFI_TYPE_STRUCT: -+ *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); -+ break; -+ -+ default: -+ FFI_ASSERT(0); -+ } -+ } -+ else -+ { -+ memcpy(argp, *p_argv, z); -+ } -+ -+#ifndef X86_WIN64 -+ /* For thiscall/fastcall/register convention register-passed arguments -+ are the first two none-floating-point arguments with a size -+ smaller or equal to sizeof (void*). */ -+ if ((z == FFI_SIZEOF_ARG) -+ && ((cabi == FFI_REGISTER) -+ || (cabi == FFI_THISCALL && stack_args_count < 1) -+ || (cabi == FFI_FASTCALL && stack_args_count < 2)) -+ && ((*p_arg)->type != FFI_TYPE_FLOAT && (*p_arg)->type != FFI_TYPE_STRUCT) -+ ) -+ { -+ if (dir < 0 && stack_args_count > 2) -+ { -+ /* Iterating arguments backwards, so first register-passed argument -+ will be passed last. Shift temporary values to make place. */ -+ p_stack_data[0] = p_stack_data[1]; -+ p_stack_data[1] = p_stack_data[2]; -+ stack_args_count = 2; -+ } + -+ p_stack_data[stack_args_count] = argp; -+ ++stack_args_count; -+ } ++/* Specify which architecture libffi is configured for. */ ++#ifndef X86_64 ++#define X86_64 +#endif + -+#ifdef X86_WIN64 -+ argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); -+#else -+ argp += z; -+#endif -+ } ++/* ---- System configuration information --------------------------------- */ + -+#ifndef X86_WIN64 -+ /* We need to move the register-passed arguments for thiscall/fastcall/register -+ on top of stack, so that those can be moved to registers by call-handler. */ -+ if (stack_args_count > 0) -+ { -+ if (dir < 0 && stack_args_count > 1) -+ { -+ /* Reverse order if iterating arguments backwards */ -+ ffi_arg tmp = *(ffi_arg*) p_stack_data[0]; -+ *(ffi_arg*) p_stack_data[0] = *(ffi_arg*) p_stack_data[stack_args_count - 1]; -+ *(ffi_arg*) p_stack_data[stack_args_count - 1] = tmp; -+ } -+ -+ int i; -+ for (i = 0; i < stack_args_count; i++) -+ { -+ if (p_stack_data[i] != argp2) -+ { -+ ffi_arg tmp = *(ffi_arg*) p_stack_data[i]; -+ memmove (argp2 + FFI_SIZEOF_ARG, argp2, (size_t) ((char*) p_stack_data[i] - (char*)argp2)); -+ *(ffi_arg *) argp2 = tmp; -+ } ++#include + -+ argp2 += FFI_SIZEOF_ARG; -+ } -+ } ++#ifndef LIBFFI_ASM + -+ return stack_args_count; ++#if defined(_MSC_VER) && !defined(__clang__) ++#define __attribute__(X) +#endif -+ return 0; -+} -+ -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif) -+{ -+ unsigned int i; -+ ffi_type **ptr; + -+ /* Set the return type flag */ -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+#ifdef X86_WIN64 -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+#endif -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+#ifndef X86_WIN64 -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+#endif -+#endif -+ cif->flags = (unsigned) cif->rtype->type; -+ break; ++#include ++#include + -+ case FFI_TYPE_UINT64: -+#ifdef X86_WIN64 -+ case FFI_TYPE_POINTER: -+#endif -+ cif->flags = FFI_TYPE_SINT64; -+ break; ++/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). ++ But we can find it either under the correct ANSI name, or under GNU ++ C's internal name. */ + -+ case FFI_TYPE_STRUCT: -+#ifndef X86 -+ if (cif->rtype->size == 1) -+ { -+ cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ -+ } -+ else if (cif->rtype->size == 2) -+ { -+ cif->flags = FFI_TYPE_SMALL_STRUCT_2B; /* same as short size */ -+ } -+ else if (cif->rtype->size == 4) -+ { -+#ifdef X86_WIN64 -+ cif->flags = FFI_TYPE_SMALL_STRUCT_4B; -+#else -+ cif->flags = FFI_TYPE_INT; /* same as int type */ -+#endif -+ } -+ else if (cif->rtype->size == 8) -+ { -+ cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ -+ } -+ else -+#endif -+ { -+#ifdef X86_WIN32 -+ if (cif->abi == FFI_MS_CDECL) -+ cif->flags = FFI_TYPE_MS_STRUCT; -+ else -+#endif -+ cif->flags = FFI_TYPE_STRUCT; -+ /* allocate space for return value pointer */ -+ cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); -+ } -+ break; ++#define FFI_64_BIT_MAX 9223372036854775807 + -+ default: -+#ifdef X86_WIN64 -+ cif->flags = FFI_TYPE_SINT64; -+ break; -+ case FFI_TYPE_INT: -+ cif->flags = FFI_TYPE_SINT32; ++#ifdef LONG_LONG_MAX ++# define FFI_LONG_LONG_MAX LONG_LONG_MAX +#else -+ cif->flags = FFI_TYPE_INT; -+#endif -+ break; -+ } -+ -+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) -+ { -+ if (((*ptr)->alignment - 1) & cif->bytes) -+ cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); -+ cif->bytes += (unsigned)ALIGN((*ptr)->size, FFI_SIZEOF_ARG); -+ } -+ -+#ifdef X86_WIN64 -+ /* ensure space for storing four registers */ -+ cif->bytes += 4 * FFI_SIZEOF_ARG; -+#endif -+ -+#ifndef X86_WIN32 -+#ifndef X86_WIN64 -+ if (cif->abi == FFI_SYSV || cif->abi == FFI_UNIX64) -+#endif -+ cif->bytes = (cif->bytes + 15) & ~0xF; ++# ifdef LLONG_MAX ++# define FFI_LONG_LONG_MAX LLONG_MAX ++# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif /* _AIX52 or newer */ ++# else ++# ifdef __GNUC__ ++# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ ++# endif ++# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ ++# ifndef __PPC64__ ++# if defined (__IBMC__) || defined (__IBMCPP__) ++# define FFI_LONG_LONG_MAX LONGLONG_MAX ++# endif ++# endif /* __PPC64__ */ ++# undef FFI_64_BIT_MAX ++# define FFI_64_BIT_MAX 9223372036854775807LL ++# endif ++# endif +#endif + -+ return FFI_OK; -+} -+ -+#ifdef X86_WIN64 -+extern int -+ffi_call_win64(unsigned int (*)(char *, extended_cif *), extended_cif *, -+ unsigned, unsigned, unsigned *, void (*fn)(void)); -+#else -+extern void -+ffi_call_win32(unsigned int (*)(char *, extended_cif *), extended_cif *, -+ unsigned, unsigned, unsigned, unsigned *, void (*fn)(void)); -+extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, -+ unsigned, unsigned, unsigned *, void (*fn)(void)); -+#endif ++/* The closure code assumes that this works on pointers, i.e. a size_t */ ++/* can hold a pointer. */ + -+void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++typedef struct _ffi_type +{ -+ extended_cif ecif; -+ -+ ecif.cif = cif; -+ ecif.avalue = avalue; -+ -+ /* If the return value is a struct and we don't have a return */ -+ /* value address then we need to make one */ ++ size_t size; ++ unsigned short alignment; ++ unsigned short type; ++ struct _ffi_type **elements; ++} ffi_type; + -+#ifdef X86_WIN64 -+ if (rvalue == NULL -+ && cif->flags == FFI_TYPE_STRUCT -+ && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0)) -+ { -+ ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); -+ } -+#else -+ if (rvalue == NULL -+ && (cif->flags == FFI_TYPE_STRUCT -+ || cif->flags == FFI_TYPE_MS_STRUCT)) -+ { -+ ecif.rvalue = alloca(cif->rtype->size); -+ } -+#endif -+ else -+ ecif.rvalue = rvalue; -+ -+ -+ switch (cif->abi) -+ { -+#ifdef X86_WIN64 -+ case FFI_WIN64: -+ ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, -+ cif->flags, ecif.rvalue, fn); -+ break; -+#else -+#ifndef X86_WIN32 -+ case FFI_SYSV: -+ ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, -+ fn); -+ break; ++#ifndef LIBFFI_HIDE_BASIC_TYPES ++#if SCHAR_MAX == 127 ++# define ffi_type_uchar ffi_type_uint8 ++# define ffi_type_schar ffi_type_sint8 +#else -+ case FFI_SYSV: -+ case FFI_MS_CDECL: ++ #error "char size not supported" +#endif -+ case FFI_STDCALL: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_PASCAL: -+ case FFI_REGISTER: -+ ffi_call_win32(ffi_prep_args, &ecif, cif->abi, cif->bytes, cif->flags, -+ ecif.rvalue, fn); -+ break; ++ ++#if SHRT_MAX == 32767 ++# define ffi_type_ushort ffi_type_uint16 ++# define ffi_type_sshort ffi_type_sint16 ++#elif SHRT_MAX == 2147483647 ++# define ffi_type_ushort ffi_type_uint32 ++# define ffi_type_sshort ffi_type_sint32 ++#else ++ #error "short size not supported" +#endif -+ default: -+ FFI_ASSERT(0); -+ break; -+ } -+} + ++#if INT_MAX == 32767 ++# define ffi_type_uint ffi_type_uint16 ++# define ffi_type_sint ffi_type_sint16 ++#elif INT_MAX == 2147483647 ++# define ffi_type_uint ffi_type_uint32 ++# define ffi_type_sint ffi_type_sint32 ++#elif INT_MAX == 9223372036854775807 ++# define ffi_type_uint ffi_type_uint64 ++# define ffi_type_sint ffi_type_sint64 ++#else ++ #error "int size not supported" ++#endif + -+/** private members **/ ++#if LONG_MAX == 2147483647 ++# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX ++ #error "no 64-bit data type supported" ++# endif ++#elif LONG_MAX != FFI_64_BIT_MAX ++ #error "long size not supported" ++#endif + -+/* The following __attribute__((regparm(1))) decorations will have no effect -+ on MSVC or SUNPRO_C -- standard conventions apply. */ -+static unsigned int ffi_prep_incoming_args (char *stack, void **ret, -+ void** args, ffi_cif* cif); -+void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) -+ __attribute__ ((regparm(1))); -+unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) -+ __attribute__ ((regparm(1))); -+unsigned int FFI_HIDDEN ffi_closure_WIN32_inner (ffi_closure *, void **, void *) -+ __attribute__ ((regparm(1))); -+void FFI_HIDDEN ffi_closure_raw_SYSV (ffi_raw_closure *) -+ __attribute__ ((regparm(1))); -+#ifdef X86_WIN32 -+void FFI_HIDDEN ffi_closure_raw_THISCALL (ffi_raw_closure *) -+ __attribute__ ((regparm(1))); -+#endif -+#ifndef X86_WIN64 -+void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *); -+void FFI_HIDDEN ffi_closure_THISCALL (ffi_closure *); -+void FFI_HIDDEN ffi_closure_FASTCALL (ffi_closure *); -+void FFI_HIDDEN ffi_closure_REGISTER (ffi_closure *); ++#if LONG_MAX == 2147483647 ++# define ffi_type_ulong ffi_type_uint32 ++# define ffi_type_slong ffi_type_sint32 ++#elif LONG_MAX == FFI_64_BIT_MAX ++# define ffi_type_ulong ffi_type_uint64 ++# define ffi_type_slong ffi_type_sint64 +#else -+void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); ++ #error "long size not supported" +#endif + -+/* This function is jumped to by the trampoline */ -+ -+#ifdef X86_WIN64 -+void * FFI_HIDDEN -+ffi_closure_win64_inner (ffi_closure *closure, void *args) { -+ ffi_cif *cif; -+ void **arg_area; -+ void *result; -+ void *resp = &result; -+ -+ cif = closure->cif; -+ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); -+ -+ /* this call will initialize ARG_AREA, such that each -+ * element in that array points to the corresponding -+ * value on the stack; and if the function returns -+ * a structure, it will change RESP to point to the -+ * structure return address. */ -+ -+ ffi_prep_incoming_args(args, &resp, arg_area, cif); -+ -+ (closure->fun) (cif, resp, arg_area, closure->user_data); ++/* Need minimal decorations for DLLs to works on Windows. */ ++/* GCC has autoimport and autoexport. Rely on Libtool to */ ++/* help MSVC export from a DLL, but always declare data */ ++/* to be imported for MSVC clients. This costs an extra */ ++/* indirection for MSVC clients using the static version */ ++/* of the library, but don't worry about that. Besides, */ ++/* as a workaround, they can define FFI_BUILDING if they */ ++/* *know* they are going to link with the static library. */ ++#if defined _MSC_VER && !defined FFI_BUILDING ++#define FFI_EXTERN extern __declspec(dllimport) ++#else ++#define FFI_EXTERN extern ++#endif + -+ /* The result is returned in rax. This does the right thing for -+ result types except for floats; we have to 'mov xmm0, rax' in the -+ caller to correct this. -+ TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! -+ */ -+ return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; -+} ++/* These are defined in types.c */ ++FFI_EXTERN ffi_type ffi_type_void; ++FFI_EXTERN ffi_type ffi_type_uint8; ++FFI_EXTERN ffi_type ffi_type_sint8; ++FFI_EXTERN ffi_type ffi_type_uint16; ++FFI_EXTERN ffi_type ffi_type_sint16; ++FFI_EXTERN ffi_type ffi_type_uint32; ++FFI_EXTERN ffi_type ffi_type_sint32; ++FFI_EXTERN ffi_type ffi_type_uint64; ++FFI_EXTERN ffi_type ffi_type_sint64; ++FFI_EXTERN ffi_type ffi_type_float; ++FFI_EXTERN ffi_type ffi_type_double; ++FFI_EXTERN ffi_type ffi_type_pointer; + ++#if 1 ++FFI_EXTERN ffi_type ffi_type_longdouble; +#else -+unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) -+ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) -+{ -+ /* our various things... */ -+ ffi_cif *cif; -+ void **arg_area; -+ -+ cif = closure->cif; -+ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); ++#define ffi_type_longdouble ffi_type_double ++#endif + -+ /* this call will initialize ARG_AREA, such that each -+ * element in that array points to the corresponding -+ * value on the stack; and if the function returns -+ * a structure, it will change RESP to point to the -+ * structure return address. */ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_EXTERN ffi_type ffi_type_complex_float; ++FFI_EXTERN ffi_type ffi_type_complex_double; ++#if 1 ++FFI_EXTERN ffi_type ffi_type_complex_longdouble; ++#else ++#define ffi_type_complex_longdouble ffi_type_complex_double ++#endif ++#endif ++#endif /* LIBFFI_HIDE_BASIC_TYPES */ + -+ ffi_prep_incoming_args(args, respp, arg_area, cif); ++typedef enum { ++ FFI_OK = 0, ++ FFI_BAD_TYPEDEF, ++ FFI_BAD_ABI ++} ffi_status; + -+ (closure->fun) (cif, *respp, arg_area, closure->user_data); ++typedef unsigned FFI_TYPE; + -+ return cif->flags; -+} ++typedef struct { ++ ffi_abi abi; ++ unsigned nargs; ++ ffi_type **arg_types; ++ ffi_type *rtype; ++ unsigned bytes; ++ unsigned flags; ++#ifdef FFI_EXTRA_CIF_FIELDS ++ FFI_EXTRA_CIF_FIELDS; ++#endif ++} ffi_cif; + -+unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) -+ffi_closure_WIN32_inner (ffi_closure *closure, void **respp, void *args) -+{ -+ /* our various things... */ -+ ffi_cif *cif; -+ void **arg_area; -+ unsigned int ret; ++#if 0 ++/* Used to adjust size/alignment of ffi types. */ ++void ffi_prep_types (ffi_abi abi); ++#endif + -+ cif = closure->cif; -+ arg_area = (void**) alloca (cif->nargs * sizeof (void*)); ++/* Used internally, but overridden by some architectures */ ++ffi_status ffi_prep_cif_core(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+ /* this call will initialize ARG_AREA, such that each -+ * element in that array points to the corresponding -+ * value on the stack; and if the function returns -+ * a structure, it will change RESP to point to the -+ * structure return address. */ ++/* ---- Definitions for the raw API -------------------------------------- */ + -+ ret = ffi_prep_incoming_args(args, respp, arg_area, cif); ++#ifndef FFI_SIZEOF_ARG ++# if LONG_MAX == 2147483647 ++# define FFI_SIZEOF_ARG 4 ++# elif LONG_MAX == FFI_64_BIT_MAX ++# define FFI_SIZEOF_ARG 8 ++# endif ++#endif + -+ (closure->fun) (cif, *respp, arg_area, closure->user_data); ++#ifndef FFI_SIZEOF_JAVA_RAW ++# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#endif + -+ return ret; -+} -+#endif /* !X86_WIN64 */ ++typedef union { ++ ffi_sarg sint; ++ ffi_arg uint; ++ float flt; ++ char data[FFI_SIZEOF_ARG]; ++ void* ptr; ++} ffi_raw; + -+static unsigned int -+ffi_prep_incoming_args(char *stack, void **rvalue, void **avalue, -+ ffi_cif *cif) -+{ -+ register unsigned int i; -+ register void **p_argv; -+ register char *argp; -+ register ffi_type **p_arg; -+#ifndef X86_WIN64 -+ const int cabi = cif->abi; -+ const int dir = (cabi == FFI_PASCAL || cabi == FFI_REGISTER) ? -1 : +1; -+ const unsigned int max_stack_count = (cabi == FFI_THISCALL) ? 1 -+ : (cabi == FFI_FASTCALL) ? 2 -+ : (cabi == FFI_REGISTER) ? 3 -+ : 0; -+ unsigned int passed_regs = 0; -+ void *p_stack_data[3] = { stack - 1 }; ++#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 ++/* This is a special case for mips64/n32 ABI (and perhaps others) where ++ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ ++typedef union { ++ signed int sint; ++ unsigned int uint; ++ float flt; ++ char data[FFI_SIZEOF_JAVA_RAW]; ++ void* ptr; ++} ffi_java_raw; +#else -+ #define dir 1 ++typedef ffi_raw ffi_java_raw; +#endif + -+ argp = stack; -+#ifndef X86_WIN64 -+ argp += max_stack_count * FFI_SIZEOF_ARG; -+#endif + -+ if ((cif->flags == FFI_TYPE_STRUCT -+ || cif->flags == FFI_TYPE_MS_STRUCT) -+#ifdef X86_WIN64 -+ && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0) -+#endif -+ ) -+ { -+#ifndef X86_WIN64 -+ if (passed_regs < max_stack_count) -+ { -+ *rvalue = *(void**) (stack + (passed_regs*FFI_SIZEOF_ARG)); -+ ++passed_regs; -+ } -+ else -+#endif -+ { -+ *rvalue = *(void **) argp; -+ argp += sizeof(void *); -+ } -+ } ++void ffi_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_raw *avalue); + -+#ifndef X86_WIN64 -+ /* Do register arguments first */ -+ for (i = 0, p_arg = cif->arg_types; -+ i < cif->nargs && passed_regs < max_stack_count; -+ i++, p_arg++) -+ { -+ if ((*p_arg)->type == FFI_TYPE_FLOAT -+ || (*p_arg)->type == FFI_TYPE_STRUCT) -+ continue; ++void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); ++void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); ++size_t ffi_raw_size (ffi_cif *cif); + -+ size_t sz = (*p_arg)->size; -+ if(sz == 0 || sz > FFI_SIZEOF_ARG) -+ continue; ++/* This is analogous to the raw API, except it uses Java parameter */ ++/* packing, even on 64-bit machines. I.e. on 64-bit machines */ ++/* longs and doubles are followed by an empty 64-bit word. */ + -+ p_stack_data[passed_regs] = avalue + i; -+ avalue[i] = stack + (passed_regs*FFI_SIZEOF_ARG); -+ ++passed_regs; -+ } -+#endif ++void ffi_java_raw_call (ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ ffi_java_raw *avalue); + -+ p_arg = cif->arg_types; -+ p_argv = avalue; -+ if (dir < 0) -+ { -+ const int nargs = cif->nargs - 1; -+ if (nargs > 0) -+ { -+ p_arg += nargs; -+ p_argv += nargs; -+ } -+ } ++void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); ++void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); ++size_t ffi_java_raw_size (ffi_cif *cif); + -+ for (i = cif->nargs; -+ i != 0; -+ i--, p_arg += dir, p_argv += dir) -+ { -+ /* Align if necessary */ -+ if ((sizeof(void*) - 1) & (size_t) argp) -+ argp = (char *) ALIGN(argp, sizeof(void*)); ++/* ---- Definitions for closures ----------------------------------------- */ + -+ size_t z = (*p_arg)->size; ++#if FFI_CLOSURES + -+#ifdef X86_WIN64 -+ if (z > FFI_SIZEOF_ARG -+ || ((*p_arg)->type == FFI_TYPE_STRUCT -+ && (z & (1 | 2 | 4 | 8)) == 0) -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+ || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) -+#endif -+ ) -+ { -+ z = FFI_SIZEOF_ARG; -+ *p_argv = *(void **)argp; -+ } -+ else -+#else -+ if (passed_regs > 0 -+ && z <= FFI_SIZEOF_ARG -+ && (p_argv == p_stack_data[0] -+ || p_argv == p_stack_data[1] -+ || p_argv == p_stack_data[2])) -+ { -+ /* Already assigned a register value */ -+ continue; -+ } -+ else ++#ifdef _MSC_VER ++__declspec(align(8)) +#endif -+ { -+ /* because we're little endian, this is what it turns into. */ -+ *p_argv = (void*) argp; -+ } -+ -+#ifdef X86_WIN64 -+ argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; +#else -+ argp += z; ++ char tramp[FFI_TRAMPOLINE_SIZE]; +#endif -+ } -+ -+ return (size_t)argp - (size_t)stack; -+} -+ -+#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ -+{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ -+ void* __fun = (void*)(FUN); \ -+ void* __ctx = (void*)(CTX); \ -+ *(unsigned char*) &__tramp[0] = 0x41; \ -+ *(unsigned char*) &__tramp[1] = 0xbb; \ -+ *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ -+ *(unsigned char*) &__tramp[6] = 0x48; \ -+ *(unsigned char*) &__tramp[7] = 0xb8; \ -+ *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ -+ *(unsigned char *) &__tramp[16] = 0x49; \ -+ *(unsigned char *) &__tramp[17] = 0xba; \ -+ *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ -+ *(unsigned char *) &__tramp[26] = 0x41; \ -+ *(unsigned char *) &__tramp[27] = 0xff; \ -+ *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ -+ } -+ -+/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ -+ -+#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -+{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ -+ unsigned int __fun = (unsigned int)(FUN); \ -+ unsigned int __ctx = (unsigned int)(CTX); \ -+ unsigned int __dis = __fun - (__ctx + 10); \ -+ *(unsigned char*) &__tramp[0] = 0xb8; \ -+ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ -+ *(unsigned char*) &__tramp[5] = 0xe9; \ -+ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ -+ } -+ -+#define FFI_INIT_TRAMPOLINE_RAW_THISCALL(TRAMP,FUN,CTX,SIZE) \ -+{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ -+ unsigned int __fun = (unsigned int)(FUN); \ -+ unsigned int __ctx = (unsigned int)(CTX); \ -+ unsigned int __dis = __fun - (__ctx + 49); \ -+ unsigned short __size = (unsigned short)(SIZE); \ -+ *(unsigned int *) &__tramp[0] = 0x8324048b; /* mov (%esp), %eax */ \ -+ *(unsigned int *) &__tramp[4] = 0x4c890cec; /* sub $12, %esp */ \ -+ *(unsigned int *) &__tramp[8] = 0x04890424; /* mov %ecx, 4(%esp) */ \ -+ *(unsigned char*) &__tramp[12] = 0x24; /* mov %eax, (%esp) */ \ -+ *(unsigned char*) &__tramp[13] = 0xb8; \ -+ *(unsigned int *) &__tramp[14] = __size; /* mov __size, %eax */ \ -+ *(unsigned int *) &__tramp[18] = 0x08244c8d; /* lea 8(%esp), %ecx */ \ -+ *(unsigned int *) &__tramp[22] = 0x4802e8c1; /* shr $2, %eax ; dec %eax */ \ -+ *(unsigned short*) &__tramp[26] = 0x0b74; /* jz 1f */ \ -+ *(unsigned int *) &__tramp[28] = 0x8908518b; /* 2b: mov 8(%ecx), %edx */ \ -+ *(unsigned int *) &__tramp[32] = 0x04c18311; /* mov %edx, (%ecx) ; add $4, %ecx */ \ -+ *(unsigned char*) &__tramp[36] = 0x48; /* dec %eax */ \ -+ *(unsigned short*) &__tramp[37] = 0xf575; /* jnz 2b ; 1f: */ \ -+ *(unsigned char*) &__tramp[39] = 0xb8; \ -+ *(unsigned int*) &__tramp[40] = __ctx; /* movl __ctx, %eax */ \ -+ *(unsigned char *) &__tramp[44] = 0xe8; \ -+ *(unsigned int*) &__tramp[45] = __dis; /* call __fun */ \ -+ *(unsigned char*) &__tramp[49] = 0xc2; /* ret */ \ -+ *(unsigned short*) &__tramp[50] = (__size + 8); /* ret (__size + 8) */ \ -+ } -+ -+#define FFI_INIT_TRAMPOLINE_WIN32(TRAMP,FUN,CTX) \ -+{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ -+ unsigned int __fun = (unsigned int)(FUN); \ -+ unsigned int __ctx = (unsigned int)(CTX); \ -+ unsigned int __dis = __fun - (__ctx + 10); \ -+ *(unsigned char*) &__tramp[0] = 0x68; \ -+ *(unsigned int*) &__tramp[1] = __ctx; /* push __ctx */ \ -+ *(unsigned char*) &__tramp[5] = 0xe9; \ -+ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ -+ } -+ -+/* the cif must already be prep'ed */ -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+#ifdef X86_WIN64 -+#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) -+#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) -+ if (cif->abi == FFI_WIN64) -+ { -+ int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); -+ FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], -+ &ffi_closure_win64, -+ codeloc, mask); -+ /* make sure we can execute here */ -+ } ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++ void *user_data; ++#ifdef __GNUC__ ++} ffi_closure __attribute__((aligned (8))); +#else -+ if (cif->abi == FFI_SYSV) -+ { -+ FFI_INIT_TRAMPOLINE (&closure->tramp[0], -+ &ffi_closure_SYSV, -+ (void*)codeloc); -+ } -+ else if (cif->abi == FFI_REGISTER) -+ { -+ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], -+ &ffi_closure_REGISTER, -+ (void*)codeloc); -+ } -+ else if (cif->abi == FFI_FASTCALL) -+ { -+ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], -+ &ffi_closure_FASTCALL, -+ (void*)codeloc); -+ } -+ else if (cif->abi == FFI_THISCALL) -+ { -+ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], -+ &ffi_closure_THISCALL, -+ (void*)codeloc); -+ } -+ else if (cif->abi == FFI_STDCALL || cif->abi == FFI_PASCAL) -+ { -+ FFI_INIT_TRAMPOLINE_WIN32 (&closure->tramp[0], -+ &ffi_closure_STDCALL, -+ (void*)codeloc); -+ } -+#ifdef X86_WIN32 -+ else if (cif->abi == FFI_MS_CDECL) -+ { -+ FFI_INIT_TRAMPOLINE (&closure->tramp[0], -+ &ffi_closure_SYSV, -+ (void*)codeloc); -+ } -+#endif /* X86_WIN32 */ -+#endif /* !X86_WIN64 */ -+ else -+ { -+ return FFI_BAD_ABI; -+ } -+ -+ closure->cif = cif; -+ closure->user_data = user_data; -+ closure->fun = fun; -+ -+ return FFI_OK; -+} -+ -+/* ------- Native raw API support -------------------------------- */ ++} ffi_closure; ++# ifdef __sgi ++# pragma pack 0 ++# endif ++#endif + -+#if !FFI_NO_RAW_API ++void *ffi_closure_alloc (size_t size, void **code); ++void ffi_closure_free (void *); + +ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ int i; -+ -+ if (cif->abi != FFI_SYSV -+#ifdef X86_WIN32 -+ && cif->abi != FFI_THISCALL -+#endif -+ ) -+ return FFI_BAD_ABI; ++ffi_prep_closure (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data); + -+ /* we currently don't support certain kinds of arguments for raw -+ closures. This should be implemented by a separate assembly -+ language routine, since it would require argument processing, -+ something we don't do now for performance. */ ++ffi_status ++ffi_prep_closure_loc (ffi_closure*, ++ ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void*codeloc); + -+ for (i = cif->nargs-1; i >= 0; i--) -+ { -+ FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT); -+ FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE); -+ } -+ -+#ifdef X86_WIN32 -+ if (cif->abi == FFI_SYSV) -+ { ++#ifdef __sgi ++# pragma pack 8 +#endif -+ FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, -+ codeloc); -+#ifdef X86_WIN32 -+ } -+ else if (cif->abi == FFI_THISCALL) -+ { -+ FFI_INIT_TRAMPOLINE_RAW_THISCALL (&closure->tramp[0], &ffi_closure_raw_THISCALL, codeloc, cif->bytes); -+ } ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; ++#else ++ char tramp[FFI_TRAMPOLINE_SIZE]; +#endif -+ closure->cif = cif; -+ closure->user_data = user_data; -+ closure->fun = fun; ++ ffi_cif *cif; + -+ return FFI_OK; -+} ++#if !FFI_NATIVE_RAW_API + -+static unsigned int -+ffi_prep_args_raw(char *stack, extended_cif *ecif) -+{ -+ const ffi_cif *cif = ecif->cif; -+ unsigned int i, passed_regs = 0; -+ -+#ifndef X86_WIN64 -+ const unsigned int abi = cif->abi; -+ const unsigned int max_regs = (abi == FFI_THISCALL) ? 1 -+ : (abi == FFI_FASTCALL) ? 2 -+ : (abi == FFI_REGISTER) ? 3 -+ : 0; -+ -+ if (cif->flags == FFI_TYPE_STRUCT) -+ ++passed_regs; -+ -+ for (i = 0; i < cif->nargs && passed_regs <= max_regs; i++) -+ { -+ if (cif->arg_types[i]->type == FFI_TYPE_FLOAT -+ || cif->arg_types[i]->type == FFI_TYPE_STRUCT) -+ continue; ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + -+ size_t sz = cif->arg_types[i]->size; -+ if (sz == 0 || sz > FFI_SIZEOF_ARG) -+ continue; ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + -+ ++passed_regs; -+ } +#endif + -+ memcpy (stack, ecif->avalue, cif->bytes); -+ return passed_regs; -+} -+ -+/* we borrow this routine from libffi (it must be changed, though, to -+ * actually call the function passed in the first argument. as of -+ * libffi-1.20, this is not the case.) -+ */ -+ -+void -+ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) -+{ -+ extended_cif ecif; -+ void **avalue = (void **)fake_avalue; ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); ++ void *user_data; + -+ ecif.cif = cif; -+ ecif.avalue = avalue; -+ -+ /* If the return value is a struct and we don't have a return */ -+ /* value address then we need to make one */ ++} ffi_raw_closure; + -+ if (rvalue == NULL -+ && (cif->flags == FFI_TYPE_STRUCT -+ || cif->flags == FFI_TYPE_MS_STRUCT)) -+ { -+ ecif.rvalue = alloca(cif->rtype->size); -+ } -+ else -+ ecif.rvalue = rvalue; -+ -+ -+ switch (cif->abi) -+ { -+#ifndef X86_WIN32 -+ case FFI_SYSV: -+ ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, -+ ecif.rvalue, fn); -+ break; ++typedef struct { ++#if 0 ++ void *trampoline_table; ++ void *trampoline_table_entry; +#else -+ case FFI_SYSV: -+ case FFI_MS_CDECL: -+#endif -+#ifndef X86_WIN64 -+ case FFI_STDCALL: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_PASCAL: -+ case FFI_REGISTER: -+ ffi_call_win32(ffi_prep_args_raw, &ecif, cif->abi, cif->bytes, cif->flags, -+ ecif.rvalue, fn); -+ break; ++ char tramp[FFI_TRAMPOLINE_SIZE]; +#endif -+ default: -+ FFI_ASSERT(0); -+ break; -+ } -+} + -+#endif ++ ffi_cif *cif; + -+#endif /* !__x86_64__ || X86_WIN64 */ ++#if !FFI_NATIVE_RAW_API + ++ /* if this is enabled, then a raw closure has the same layout ++ as a regular closure. We use this to install an intermediate ++ handler to do the transaltion, void** -> ffi_raw*. */ + ++ void (*translate_args)(ffi_cif*,void*,void**,void*); ++ void *this_closure; + +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/win32_i386.S modified/Modules/_ctypes/libffi_ios/x86/win32_i386.S ---- orig/Modules/_ctypes/libffi_ios/x86/win32_i386.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/win32_i386.S 2015-04-26 08:18:45.000000000 +0800 -@@ -0,0 +1,1356 @@ -+#ifdef __i386__ -+ -+/* ----------------------------------------------------------------------- -+ win32.S - Copyright (c) 2014 Anthony Green -+ Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. -+ Copyright (c) 2001 John Beniton -+ Copyright (c) 2002 Ranjit Mathew -+ Copyright (c) 2009 Daniel Witte -+ -+ -+ X86 Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- -+ */ -+ -+#define LIBFFI_ASM -+#include -+#include + -+#define CIF_BYTES_OFFSET 16 -+#define CIF_FLAGS_OFFSET 20 ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); ++ void *user_data; + -+#ifdef _MSC_VER ++} ffi_java_raw_closure; + -+#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) -+ -+.386 -+.MODEL FLAT, C -+ -+EXTRN ffi_closure_SYSV_inner:NEAR -+EXTRN ffi_closure_WIN32_inner:NEAR -+ -+_TEXT SEGMENT -+ -+ffi_call_win32 PROC NEAR, -+ ffi_prep_args : NEAR PTR DWORD, -+ ecif : NEAR PTR DWORD, -+ cif_abi : DWORD, -+ cif_bytes : DWORD, -+ cif_flags : DWORD, -+ rvalue : NEAR PTR DWORD, -+ fn : NEAR PTR DWORD -+ -+ ;; Make room for all of the new args. -+ mov ecx, cif_bytes -+ sub esp, ecx -+ -+ mov eax, esp -+ -+ ;; Call ffi_prep_args -+ push ecif -+ push eax -+ call ffi_prep_args -+ add esp, 8 -+ -+ ;; Prepare registers -+ ;; EAX stores the number of register arguments -+ cmp eax, 0 -+ je fun -+ cmp eax, 3 -+ jl prepr_two_cmp -+ -+ mov ecx, esp -+ add esp, 12 -+ mov eax, DWORD PTR [ecx+8] -+ jmp prepr_two -+prepr_two_cmp: -+ cmp eax, 2 -+ jl prepr_one_prep -+ mov ecx, esp -+ add esp, 8 -+prepr_two: -+ mov edx, DWORD PTR [ecx+4] -+ jmp prepr_one -+prepr_one_prep: -+ mov ecx, esp -+ add esp, 4 -+prepr_one: -+ mov ecx, DWORD PTR [ecx] -+ cmp cif_abi, 7 ;; FFI_REGISTER -+ jne fun -+ -+ xchg ecx, eax -+ -+fun: -+ ;; Call function -+ call fn -+ -+ ;; Load ecx with the return type code -+ mov ecx, cif_flags -+ -+ ;; If the return value pointer is NULL, assume no return value. -+ cmp rvalue, 0 -+ jne ca_jumptable -+ -+ ;; Even if there is no space for the return value, we are -+ ;; obliged to handle floating-point values. -+ cmp ecx, FFI_TYPE_FLOAT -+ jne ca_epilogue -+ fstp st(0) -+ -+ jmp ca_epilogue -+ -+ca_jumptable: -+ jmp [ca_jumpdata + 4 * ecx] -+ca_jumpdata: -+ ;; Do not insert anything here between label and jump table. -+ dd offset ca_epilogue ;; FFI_TYPE_VOID -+ dd offset ca_retint ;; FFI_TYPE_INT -+ dd offset ca_retfloat ;; FFI_TYPE_FLOAT -+ dd offset ca_retdouble ;; FFI_TYPE_DOUBLE -+ dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE -+ dd offset ca_retuint8 ;; FFI_TYPE_UINT8 -+ dd offset ca_retsint8 ;; FFI_TYPE_SINT8 -+ dd offset ca_retuint16 ;; FFI_TYPE_UINT16 -+ dd offset ca_retsint16 ;; FFI_TYPE_SINT16 -+ dd offset ca_retint ;; FFI_TYPE_UINT32 -+ dd offset ca_retint ;; FFI_TYPE_SINT32 -+ dd offset ca_retint64 ;; FFI_TYPE_UINT64 -+ dd offset ca_retint64 ;; FFI_TYPE_SINT64 -+ dd offset ca_epilogue ;; FFI_TYPE_STRUCT -+ dd offset ca_retint ;; FFI_TYPE_POINTER -+ dd offset ca_retstruct1b ;; FFI_TYPE_SMALL_STRUCT_1B -+ dd offset ca_retstruct2b ;; FFI_TYPE_SMALL_STRUCT_2B -+ dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B -+ dd offset ca_epilogue ;; FFI_TYPE_MS_STRUCT -+ -+ /* Sign/zero extend as appropriate. */ -+ca_retuint8: -+ movzx eax, al -+ jmp ca_retint -+ -+ca_retsint8: -+ movsx eax, al -+ jmp ca_retint -+ -+ca_retuint16: -+ movzx eax, ax -+ jmp ca_retint -+ -+ca_retsint16: -+ movsx eax, ax -+ jmp ca_retint -+ -+ca_retint: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ mov [ecx + 0], eax -+ jmp ca_epilogue -+ -+ca_retint64: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ mov [ecx + 0], eax -+ mov [ecx + 4], edx -+ jmp ca_epilogue -+ -+ca_retfloat: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ fstp DWORD PTR [ecx] -+ jmp ca_epilogue -+ -+ca_retdouble: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ fstp QWORD PTR [ecx] -+ jmp ca_epilogue -+ -+ca_retlongdouble: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ fstp TBYTE PTR [ecx] -+ jmp ca_epilogue -+ -+ca_retstruct1b: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ mov [ecx + 0], al -+ jmp ca_epilogue -+ -+ca_retstruct2b: -+ ;; Load %ecx with the pointer to storage for the return value -+ mov ecx, rvalue -+ mov [ecx + 0], ax -+ jmp ca_epilogue -+ -+ca_epilogue: -+ ;; Epilogue code is autogenerated. -+ ret -+ffi_call_win32 ENDP -+ -+ffi_closure_THISCALL PROC NEAR -+ ;; Insert the register argument on the stack as the first argument -+ xchg DWORD PTR [esp+4], ecx -+ xchg DWORD PTR [esp], ecx -+ push ecx -+ jmp ffi_closure_STDCALL -+ffi_closure_THISCALL ENDP -+ -+ffi_closure_FASTCALL PROC NEAR -+ ;; Insert the 2 register arguments on the stack as the first argument -+ xchg DWORD PTR [esp+4], edx -+ xchg DWORD PTR [esp], ecx -+ push edx -+ push ecx -+ jmp ffi_closure_STDCALL -+ffi_closure_FASTCALL ENDP -+ -+ffi_closure_REGISTER PROC NEAR -+ ;; Insert the 3 register arguments on the stack as the first argument -+ push eax -+ xchg DWORD PTR [esp+8], ecx -+ xchg DWORD PTR [esp+4], edx -+ push ecx -+ push edx -+ jmp ffi_closure_STDCALL -+ffi_closure_REGISTER ENDP -+ -+ffi_closure_SYSV PROC NEAR FORCEFRAME -+ ;; the ffi_closure ctx is passed in eax by the trampoline. -+ -+ sub esp, 40 -+ lea edx, [ebp - 24] -+ mov [ebp - 12], edx ;; resp -+ lea edx, [ebp + 8] -+stub:: -+ mov [esp + 8], edx ;; args -+ lea edx, [ebp - 12] -+ mov [esp + 4], edx ;; &resp -+ mov [esp], eax ;; closure -+ call ffi_closure_SYSV_inner -+ mov ecx, [ebp - 12] -+ -+cs_jumptable: -+ jmp [cs_jumpdata + 4 * eax] -+cs_jumpdata: -+ ;; Do not insert anything here between the label and jump table. -+ dd offset cs_epilogue ;; FFI_TYPE_VOID -+ dd offset cs_retint ;; FFI_TYPE_INT -+ dd offset cs_retfloat ;; FFI_TYPE_FLOAT -+ dd offset cs_retdouble ;; FFI_TYPE_DOUBLE -+ dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE -+ dd offset cs_retuint8 ;; FFI_TYPE_UINT8 -+ dd offset cs_retsint8 ;; FFI_TYPE_SINT8 -+ dd offset cs_retuint16 ;; FFI_TYPE_UINT16 -+ dd offset cs_retsint16 ;; FFI_TYPE_SINT16 -+ dd offset cs_retint ;; FFI_TYPE_UINT32 -+ dd offset cs_retint ;; FFI_TYPE_SINT32 -+ dd offset cs_retint64 ;; FFI_TYPE_UINT64 -+ dd offset cs_retint64 ;; FFI_TYPE_SINT64 -+ dd offset cs_retstruct ;; FFI_TYPE_STRUCT -+ dd offset cs_retint ;; FFI_TYPE_POINTER -+ dd offset cs_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B -+ dd offset cs_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B -+ dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B -+ dd offset cs_retmsstruct ;; FFI_TYPE_MS_STRUCT -+ -+cs_retuint8: -+ movzx eax, BYTE PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retsint8: -+ movsx eax, BYTE PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retuint16: -+ movzx eax, WORD PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retsint16: -+ movsx eax, WORD PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retint: -+ mov eax, [ecx] -+ jmp cs_epilogue -+ -+cs_retint64: -+ mov eax, [ecx + 0] -+ mov edx, [ecx + 4] -+ jmp cs_epilogue -+ -+cs_retfloat: -+ fld DWORD PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retdouble: -+ fld QWORD PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retlongdouble: -+ fld TBYTE PTR [ecx] -+ jmp cs_epilogue -+ -+cs_retstruct: -+ ;; Caller expects us to pop struct return value pointer hidden arg. -+ ;; Epilogue code is autogenerated. -+ ret 4 -+ -+cs_retmsstruct: -+ ;; Caller expects us to return a pointer to the real return value. -+ mov eax, ecx -+ ;; Caller doesn't expects us to pop struct return value pointer hidden arg. -+ jmp cs_epilogue -+ -+cs_epilogue: -+ ;; Epilogue code is autogenerated. -+ ret -+ffi_closure_SYSV ENDP ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data); + -+#if !FFI_NO_RAW_API ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) -+#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -+#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) -+ -+ffi_closure_raw_THISCALL PROC NEAR USES esi FORCEFRAME -+ sub esp, 36 -+ mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif -+ mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data -+ mov [esp + 12], edx -+ lea edx, [ebp + 12] -+ jmp stubraw -+ffi_closure_raw_THISCALL ENDP -+ -+ffi_closure_raw_SYSV PROC NEAR USES esi FORCEFRAME -+ ;; the ffi_closure ctx is passed in eax by the trampoline. -+ -+ sub esp, 40 -+ mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif -+ mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data -+ mov [esp + 12], edx ;; user_data -+ lea edx, [ebp + 8] -+stubraw:: -+ mov [esp + 8], edx ;; raw_args -+ lea edx, [ebp - 24] -+ mov [esp + 4], edx ;; &res -+ mov [esp], esi ;; cif -+ call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun -+ mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags -+ lea ecx, [ebp - 24] -+ -+cr_jumptable: -+ jmp [cr_jumpdata + 4 * eax] -+cr_jumpdata: -+ ;; Do not insert anything here between the label and jump table. -+ dd offset cr_epilogue ;; FFI_TYPE_VOID -+ dd offset cr_retint ;; FFI_TYPE_INT -+ dd offset cr_retfloat ;; FFI_TYPE_FLOAT -+ dd offset cr_retdouble ;; FFI_TYPE_DOUBLE -+ dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE -+ dd offset cr_retuint8 ;; FFI_TYPE_UINT8 -+ dd offset cr_retsint8 ;; FFI_TYPE_SINT8 -+ dd offset cr_retuint16 ;; FFI_TYPE_UINT16 -+ dd offset cr_retsint16 ;; FFI_TYPE_SINT16 -+ dd offset cr_retint ;; FFI_TYPE_UINT32 -+ dd offset cr_retint ;; FFI_TYPE_SINT32 -+ dd offset cr_retint64 ;; FFI_TYPE_UINT64 -+ dd offset cr_retint64 ;; FFI_TYPE_SINT64 -+ dd offset cr_epilogue ;; FFI_TYPE_STRUCT -+ dd offset cr_retint ;; FFI_TYPE_POINTER -+ dd offset cr_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B -+ dd offset cr_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B -+ dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B -+ dd offset cr_epilogue ;; FFI_TYPE_MS_STRUCT -+ -+cr_retuint8: -+ movzx eax, BYTE PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retsint8: -+ movsx eax, BYTE PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retuint16: -+ movzx eax, WORD PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retsint16: -+ movsx eax, WORD PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retint: -+ mov eax, [ecx] -+ jmp cr_epilogue -+ -+cr_retint64: -+ mov eax, [ecx + 0] -+ mov edx, [ecx + 4] -+ jmp cr_epilogue -+ -+cr_retfloat: -+ fld DWORD PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retdouble: -+ fld QWORD PTR [ecx] -+ jmp cr_epilogue -+ -+cr_retlongdouble: -+ fld TBYTE PTR [ecx] -+ jmp cr_epilogue -+ -+cr_epilogue: -+ ;; Epilogue code is autogenerated. -+ ret -+ffi_closure_raw_SYSV ENDP ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data); + -+#endif /* !FFI_NO_RAW_API */ ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc); + -+ffi_closure_STDCALL PROC NEAR FORCEFRAME -+ mov eax, [esp] ;; the ffi_closure ctx passed by the trampoline. -+ -+ sub esp, 40 -+ lea edx, [ebp - 24] -+ mov [ebp - 12], edx ;; resp -+ lea edx, [ebp + 12] ;; account for stub return address on stack -+ mov [esp + 8], edx ;; args -+ lea edx, [ebp - 12] -+ mov [esp + 4], edx ;; &resp -+ mov [esp], eax ;; closure -+ call ffi_closure_WIN32_inner -+ mov ecx, [ebp - 12] -+ -+ xchg [ebp + 4], eax ;;xchg size of stack parameters and ffi_closure ctx -+ mov eax, DWORD PTR [eax + CLOSURE_CIF_OFFSET] -+ mov eax, DWORD PTR [eax + CIF_FLAGS_OFFSET] -+ -+cd_jumptable: -+ jmp [cd_jumpdata + 4 * eax] -+cd_jumpdata: -+ ;; Do not insert anything here between the label and jump table. -+ dd offset cd_epilogue ;; FFI_TYPE_VOID -+ dd offset cd_retint ;; FFI_TYPE_INT -+ dd offset cd_retfloat ;; FFI_TYPE_FLOAT -+ dd offset cd_retdouble ;; FFI_TYPE_DOUBLE -+ dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE -+ dd offset cd_retuint8 ;; FFI_TYPE_UINT8 -+ dd offset cd_retsint8 ;; FFI_TYPE_SINT8 -+ dd offset cd_retuint16 ;; FFI_TYPE_UINT16 -+ dd offset cd_retsint16 ;; FFI_TYPE_SINT16 -+ dd offset cd_retint ;; FFI_TYPE_UINT32 -+ dd offset cd_retint ;; FFI_TYPE_SINT32 -+ dd offset cd_retint64 ;; FFI_TYPE_UINT64 -+ dd offset cd_retint64 ;; FFI_TYPE_SINT64 -+ dd offset cd_epilogue ;; FFI_TYPE_STRUCT -+ dd offset cd_retint ;; FFI_TYPE_POINTER -+ dd offset cd_retsint8 ;; FFI_TYPE_SMALL_STRUCT_1B -+ dd offset cd_retsint16 ;; FFI_TYPE_SMALL_STRUCT_2B -+ dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B -+ -+cd_retuint8: -+ movzx eax, BYTE PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retsint8: -+ movsx eax, BYTE PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retuint16: -+ movzx eax, WORD PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retsint16: -+ movsx eax, WORD PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retint: -+ mov eax, [ecx] -+ jmp cd_epilogue -+ -+cd_retint64: -+ mov eax, [ecx + 0] -+ mov edx, [ecx + 4] -+ jmp cd_epilogue -+ -+cd_retfloat: -+ fld DWORD PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retdouble: -+ fld QWORD PTR [ecx] -+ jmp cd_epilogue -+ -+cd_retlongdouble: -+ fld TBYTE PTR [ecx] -+ jmp cd_epilogue -+ -+cd_epilogue: -+ mov esp, ebp -+ pop ebp -+ mov ecx, [esp + 4] ;; Return address -+ add esp, [esp] ;; Parameters stack size -+ add esp, 8 -+ jmp ecx -+ffi_closure_STDCALL ENDP -+ -+_TEXT ENDS -+END ++#endif /* FFI_CLOSURES */ + -+#else ++#if FFI_GO_CLOSURES + -+#define CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) ++typedef struct { ++ void *tramp; ++ ffi_cif *cif; ++ void (*fun)(ffi_cif*,void*,void**,void*); ++} ffi_go_closure; + -+#if defined(SYMBOL_UNDERSCORE) -+#define USCORE_SYMBOL(x) _##x -+#else -+#define USCORE_SYMBOL(x) x -+#endif -+ .text -+ -+ # This assumes we are using gas. -+ .balign 16 -+FFI_HIDDEN(ffi_call_win32) -+ .globl USCORE_SYMBOL(ffi_call_win32) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_call_win32; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_call_win32): -+.LFB1: -+ pushl %ebp -+.LCFI0: -+ movl %esp,%ebp -+.LCFI1: -+ # Make room for all of the new args. -+ movl 20(%ebp),%ecx -+ subl %ecx,%esp -+ -+ movl %esp,%eax -+ -+ # Call ffi_prep_args -+ pushl 12(%ebp) -+ pushl %eax -+ call *8(%ebp) -+ addl $8,%esp -+ -+ # Prepare registers -+ # EAX stores the number of register arguments -+ cmpl $0, %eax -+ je .fun -+ cmpl $3, %eax -+ jl .prepr_two_cmp -+ -+ movl %esp, %ecx -+ addl $12, %esp -+ movl 8(%ecx), %eax -+ jmp .prepr_two -+.prepr_two_cmp: -+ cmpl $2, %eax -+ jl .prepr_one_prep -+ movl %esp, %ecx -+ addl $8, %esp -+.prepr_two: -+ movl 4(%ecx), %edx -+ jmp .prepr_one -+.prepr_one_prep: -+ movl %esp, %ecx -+ addl $4, %esp -+.prepr_one: -+ movl (%ecx), %ecx -+ cmpl $7, 16(%ebp) # FFI_REGISTER -+ jne .fun -+ -+ xchgl %eax, %ecx -+ -+.fun: -+ # FIXME: Align the stack to a 128-bit boundary to avoid -+ # potential performance hits. -+ -+ # Call function -+ call *32(%ebp) -+ -+ # stdcall functions pop arguments off the stack themselves ++ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, ++ void (*fun)(ffi_cif*,void*,void**,void*)); + -+ # Load %ecx with the return type code -+ movl 24(%ebp),%ecx -+ -+ # If the return value pointer is NULL, assume no return value. -+ cmpl $0,28(%ebp) -+ jne 0f -+ -+ # Even if there is no space for the return value, we are -+ # obliged to handle floating-point values. -+ cmpl $FFI_TYPE_FLOAT,%ecx -+ jne .Lnoretval -+ fstp %st(0) -+ -+ jmp .Lepilogue ++void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure); + -+0: -+ call 1f -+ # Do not insert anything here between the call and the jump table. -+.Lstore_table: -+ .long .Lnoretval-.Lstore_table /* FFI_TYPE_VOID */ -+ .long .Lretint-.Lstore_table /* FFI_TYPE_INT */ -+ .long .Lretfloat-.Lstore_table /* FFI_TYPE_FLOAT */ -+ .long .Lretdouble-.Lstore_table /* FFI_TYPE_DOUBLE */ -+ .long .Lretlongdouble-.Lstore_table /* FFI_TYPE_LONGDOUBLE */ -+ .long .Lretuint8-.Lstore_table /* FFI_TYPE_UINT8 */ -+ .long .Lretsint8-.Lstore_table /* FFI_TYPE_SINT8 */ -+ .long .Lretuint16-.Lstore_table /* FFI_TYPE_UINT16 */ -+ .long .Lretsint16-.Lstore_table /* FFI_TYPE_SINT16 */ -+ .long .Lretint-.Lstore_table /* FFI_TYPE_UINT32 */ -+ .long .Lretint-.Lstore_table /* FFI_TYPE_SINT32 */ -+ .long .Lretint64-.Lstore_table /* FFI_TYPE_UINT64 */ -+ .long .Lretint64-.Lstore_table /* FFI_TYPE_SINT64 */ -+ .long .Lretstruct-.Lstore_table /* FFI_TYPE_STRUCT */ -+ .long .Lretint-.Lstore_table /* FFI_TYPE_POINTER */ -+ .long .Lretstruct1b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_1B */ -+ .long .Lretstruct2b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_2B */ -+ .long .Lretstruct4b-.Lstore_table /* FFI_TYPE_SMALL_STRUCT_4B */ -+ .long .Lretstruct-.Lstore_table /* FFI_TYPE_MS_STRUCT */ -+1: -+ shl $2, %ecx -+ add (%esp),%ecx -+ mov (%ecx),%ecx -+ add (%esp),%ecx -+ add $4, %esp -+ jmp *%ecx -+ -+ /* Sign/zero extend as appropriate. */ -+.Lretsint8: -+ movsbl %al, %eax -+ jmp .Lretint -+ -+.Lretsint16: -+ movswl %ax, %eax -+ jmp .Lretint -+ -+.Lretuint8: -+ movzbl %al, %eax -+ jmp .Lretint -+ -+.Lretuint16: -+ movzwl %ax, %eax -+ jmp .Lretint -+ -+.Lretint: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ movl %eax,0(%ecx) -+ jmp .Lepilogue -+ -+.Lretfloat: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ fstps (%ecx) -+ jmp .Lepilogue -+ -+.Lretdouble: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ fstpl (%ecx) -+ jmp .Lepilogue -+ -+.Lretlongdouble: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ fstpt (%ecx) -+ jmp .Lepilogue -+ -+.Lretint64: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ movl %eax,0(%ecx) -+ movl %edx,4(%ecx) -+ jmp .Lepilogue -+ -+.Lretstruct1b: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ movb %al,0(%ecx) -+ jmp .Lepilogue -+ -+.Lretstruct2b: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ movw %ax,0(%ecx) -+ jmp .Lepilogue -+ -+.Lretstruct4b: -+ # Load %ecx with the pointer to storage for the return value -+ movl 28(%ebp),%ecx -+ movl %eax,0(%ecx) -+ jmp .Lepilogue -+ -+.Lretstruct: -+ # Nothing to do! -+ -+.Lnoretval: -+.Lepilogue: -+ movl %ebp,%esp -+ popl %ebp -+ ret -+.ffi_call_win32_end: -+ .balign 16 -+FFI_HIDDEN(ffi_closure_THISCALL) -+ .globl USCORE_SYMBOL(ffi_closure_THISCALL) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_THISCALL; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_THISCALL): -+ /* Insert the register argument on the stack as the first argument */ -+ xchg %ecx, 4(%esp) -+ xchg %ecx, (%esp) -+ push %ecx -+ jmp .ffi_closure_STDCALL_internal -+ -+ .balign 16 -+FFI_HIDDEN(ffi_closure_FASTCALL) -+ .globl USCORE_SYMBOL(ffi_closure_FASTCALL) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_FASTCALL; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_FASTCALL): -+ /* Insert the 2 register arguments on the stack as the first two arguments */ -+ xchg %edx, 4(%esp) -+ xchg %ecx, (%esp) -+ push %edx -+ push %ecx -+ jmp .ffi_closure_STDCALL_internal -+FFI_HIDDEN(ffi_closure_REGISTER) -+ .globl USCORE_SYMBOL(ffi_closure_REGISTER) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_REGISTER; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_REGISTER): -+ /* Insert the 3 register arguments on the stack as the first two arguments */ -+ push %eax -+ xchg %ecx, 8(%esp) -+ xchg %edx, 4(%esp) -+ push %ecx -+ push %edx -+ jmp .ffi_closure_STDCALL_internal -+ -+.LFE1: -+ # This assumes we are using gas. -+ .balign 16 -+FFI_HIDDEN(ffi_closure_SYSV) -+#if defined(X86_WIN32) -+ .globl USCORE_SYMBOL(ffi_closure_SYSV) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_SYSV; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_SYSV): -+#endif -+.LFB3: -+ pushl %ebp -+.LCFI4: -+ movl %esp, %ebp -+.LCFI5: -+ subl $40, %esp -+ leal -24(%ebp), %edx -+ movl %edx, -12(%ebp) /* resp */ -+ leal 8(%ebp), %edx -+ movl %edx, 4(%esp) /* args = __builtin_dwarf_cfa () */ -+ leal -12(%ebp), %edx -+ movl %edx, (%esp) /* &resp */ -+#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) -+ call USCORE_SYMBOL(ffi_closure_SYSV_inner) -+#elif defined(X86_DARWIN) -+ calll L_ffi_closure_SYSV_inner$stub -+#else -+ movl %ebx, 8(%esp) -+ call 1f -+1: popl %ebx -+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx -+ call ffi_closure_SYSV_inner@PLT -+ movl 8(%esp), %ebx -+#endif -+ movl -12(%ebp), %ecx ++#endif /* FFI_GO_CLOSURES */ + -+0: -+ call 1f -+ # Do not insert anything here between the call and the jump table. -+.Lcls_store_table: -+ .long .Lcls_noretval-.Lcls_store_table /* FFI_TYPE_VOID */ -+ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_INT */ -+ .long .Lcls_retfloat-.Lcls_store_table /* FFI_TYPE_FLOAT */ -+ .long .Lcls_retdouble-.Lcls_store_table /* FFI_TYPE_DOUBLE */ -+ .long .Lcls_retldouble-.Lcls_store_table /* FFI_TYPE_LONGDOUBLE */ -+ .long .Lcls_retuint8-.Lcls_store_table /* FFI_TYPE_UINT8 */ -+ .long .Lcls_retsint8-.Lcls_store_table /* FFI_TYPE_SINT8 */ -+ .long .Lcls_retuint16-.Lcls_store_table /* FFI_TYPE_UINT16 */ -+ .long .Lcls_retsint16-.Lcls_store_table /* FFI_TYPE_SINT16 */ -+ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_UINT32 */ -+ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_SINT32 */ -+ .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_UINT64 */ -+ .long .Lcls_retllong-.Lcls_store_table /* FFI_TYPE_SINT64 */ -+ .long .Lcls_retstruct-.Lcls_store_table /* FFI_TYPE_STRUCT */ -+ .long .Lcls_retint-.Lcls_store_table /* FFI_TYPE_POINTER */ -+ .long .Lcls_retstruct1-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ -+ .long .Lcls_retstruct2-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ -+ .long .Lcls_retstruct4-.Lcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ -+ .long .Lcls_retmsstruct-.Lcls_store_table /* FFI_TYPE_MS_STRUCT */ ++/* ---- Public interface definition -------------------------------------- */ + -+1: -+ shl $2, %eax -+ add (%esp),%eax -+ mov (%eax),%eax -+ add (%esp),%eax -+ add $4, %esp -+ jmp *%eax -+ -+ /* Sign/zero extend as appropriate. */ -+.Lcls_retsint8: -+ movsbl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retsint16: -+ movswl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retuint8: -+ movzbl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retuint16: -+ movzwl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retint: -+ movl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retfloat: -+ flds (%ecx) -+ jmp .Lcls_epilogue -+ -+.Lcls_retdouble: -+ fldl (%ecx) -+ jmp .Lcls_epilogue -+ -+.Lcls_retldouble: -+ fldt (%ecx) -+ jmp .Lcls_epilogue -+ -+.Lcls_retllong: -+ movl (%ecx), %eax -+ movl 4(%ecx), %edx -+ jmp .Lcls_epilogue -+ -+.Lcls_retstruct1: -+ movsbl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retstruct2: -+ movswl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retstruct4: -+ movl (%ecx), %eax -+ jmp .Lcls_epilogue -+ -+.Lcls_retstruct: -+ # Caller expects us to pop struct return value pointer hidden arg. -+ movl %ebp, %esp -+ popl %ebp -+ ret $0x4 -+ -+.Lcls_retmsstruct: -+ # Caller expects us to return a pointer to the real return value. -+ mov %ecx, %eax -+ # Caller doesn't expects us to pop struct return value pointer hidden arg. -+ jmp .Lcls_epilogue -+ -+.Lcls_noretval: -+.Lcls_epilogue: -+ movl %ebp, %esp -+ popl %ebp -+ ret -+.ffi_closure_SYSV_end: -+.LFE3: ++ffi_status ffi_prep_cif(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#if !FFI_NO_RAW_API ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes); + -+#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) -+#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) -+#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) ++void ffi_call(ffi_cif *cif, ++ void (*fn)(void), ++ void *rvalue, ++ void **avalue); + -+#ifdef X86_WIN32 -+ .balign 16 -+FFI_HIDDEN(ffi_closure_raw_THISCALL) -+ .globl USCORE_SYMBOL(ffi_closure_raw_THISCALL) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_raw_THISCALL; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_raw_THISCALL): -+ pushl %ebp -+ movl %esp, %ebp -+ pushl %esi -+ subl $36, %esp -+ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ -+ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ -+ movl %edx, 12(%esp) /* user_data */ -+ leal 12(%ebp), %edx /* __builtin_dwarf_cfa () */ -+ jmp .stubraw -+#endif /* X86_WIN32 */ -+ -+ # This assumes we are using gas. -+ .balign 16 -+#if defined(X86_WIN32) -+ .globl USCORE_SYMBOL(ffi_closure_raw_SYSV) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_raw_SYSV): -+#endif /* defined(X86_WIN32) */ -+.LFB4: -+ pushl %ebp -+.LCFI6: -+ movl %esp, %ebp -+.LCFI7: -+ pushl %esi -+.LCFI8: -+ subl $36, %esp -+ movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ -+ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ -+ movl %edx, 12(%esp) /* user_data */ -+ leal 8(%ebp), %edx /* __builtin_dwarf_cfa () */ -+.stubraw: -+ movl %edx, 8(%esp) /* raw_args */ -+ leal -24(%ebp), %edx -+ movl %edx, 4(%esp) /* &res */ -+ movl %esi, (%esp) /* cif */ -+ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ -+ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ -+0: -+ call 1f -+ # Do not insert anything here between the call and the jump table. -+.Lrcls_store_table: -+ .long .Lrcls_noretval-.Lrcls_store_table /* FFI_TYPE_VOID */ -+ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_INT */ -+ .long .Lrcls_retfloat-.Lrcls_store_table /* FFI_TYPE_FLOAT */ -+ .long .Lrcls_retdouble-.Lrcls_store_table /* FFI_TYPE_DOUBLE */ -+ .long .Lrcls_retldouble-.Lrcls_store_table /* FFI_TYPE_LONGDOUBLE */ -+ .long .Lrcls_retuint8-.Lrcls_store_table /* FFI_TYPE_UINT8 */ -+ .long .Lrcls_retsint8-.Lrcls_store_table /* FFI_TYPE_SINT8 */ -+ .long .Lrcls_retuint16-.Lrcls_store_table /* FFI_TYPE_UINT16 */ -+ .long .Lrcls_retsint16-.Lrcls_store_table /* FFI_TYPE_SINT16 */ -+ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_UINT32 */ -+ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_SINT32 */ -+ .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_UINT64 */ -+ .long .Lrcls_retllong-.Lrcls_store_table /* FFI_TYPE_SINT64 */ -+ .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_STRUCT */ -+ .long .Lrcls_retint-.Lrcls_store_table /* FFI_TYPE_POINTER */ -+ .long .Lrcls_retstruct1-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ -+ .long .Lrcls_retstruct2-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ -+ .long .Lrcls_retstruct4-.Lrcls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ -+ .long .Lrcls_retstruct-.Lrcls_store_table /* FFI_TYPE_MS_STRUCT */ -+1: -+ shl $2, %eax -+ add (%esp),%eax -+ mov (%eax),%eax -+ add (%esp),%eax -+ add $4, %esp -+ jmp *%eax -+ -+ /* Sign/zero extend as appropriate. */ -+.Lrcls_retsint8: -+ movsbl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retsint16: -+ movswl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retuint8: -+ movzbl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retuint16: -+ movzwl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retint: -+ movl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retfloat: -+ flds -24(%ebp) -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retdouble: -+ fldl -24(%ebp) -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retldouble: -+ fldt -24(%ebp) -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retllong: -+ movl -24(%ebp), %eax -+ movl -20(%ebp), %edx -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retstruct1: -+ movsbl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retstruct2: -+ movswl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retstruct4: -+ movl -24(%ebp), %eax -+ jmp .Lrcls_epilogue -+ -+.Lrcls_retstruct: -+ # Nothing to do! -+ -+.Lrcls_noretval: -+.Lrcls_epilogue: -+ addl $36, %esp -+ popl %esi -+ popl %ebp -+ ret -+.ffi_closure_raw_SYSV_end: -+.LFE4: ++/* Useful for eliminating compiler warnings */ ++#define FFI_FN(f) ((void (*)(void))f) + -+#endif /* !FFI_NO_RAW_API */ ++/* ---- Definitions shared with assembly code ---------------------------- */ + -+ # This assumes we are using gas. -+ .balign 16 -+FFI_HIDDEN(ffi_closure_STDCALL) -+ .globl USCORE_SYMBOL(ffi_closure_STDCALL) -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef -+#endif -+USCORE_SYMBOL(ffi_closure_STDCALL): -+.ffi_closure_STDCALL_internal: -+ /* ffi_closure ctx is at top of the stack */ -+ movl (%esp), %eax -+.LFB5: -+ pushl %ebp -+.LCFI9: -+ movl %esp, %ebp -+.LCFI10: -+ subl $40, %esp -+ leal -24(%ebp), %edx -+ movl %edx, -12(%ebp) /* resp */ -+ leal 12(%ebp), %edx /* account for stub return address on stack */ -+ movl %edx, 4(%esp) /* args */ -+ leal -12(%ebp), %edx -+ movl %edx, (%esp) /* &resp */ -+#if defined(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE) || !defined(__PIC__) -+ call USCORE_SYMBOL(ffi_closure_WIN32_inner) -+#elif defined(X86_DARWIN) -+ calll L_ffi_closure_WIN32_inner$stub -+#else -+ movl %ebx, 8(%esp) -+ call 1f -+1: popl %ebx -+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx -+ call ffi_closure_WIN32_inner@PLT -+ movl 8(%esp), %ebx -+#endif -+ movl -12(%ebp), %ecx -+0: -+ xchgl 4(%ebp), %eax /* xchg size of stack parameters and ffi_closure ctx */ -+ movl CLOSURE_CIF_OFFSET(%eax), %eax -+ movl CIF_FLAGS_OFFSET(%eax), %eax -+ -+ call 1f -+ # Do not insert anything here between the call and the jump table. -+.Lscls_store_table: -+ .long .Lscls_noretval-.Lscls_store_table /* FFI_TYPE_VOID */ -+ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_INT */ -+ .long .Lscls_retfloat-.Lscls_store_table /* FFI_TYPE_FLOAT */ -+ .long .Lscls_retdouble-.Lscls_store_table /* FFI_TYPE_DOUBLE */ -+ .long .Lscls_retldouble-.Lscls_store_table /* FFI_TYPE_LONGDOUBLE */ -+ .long .Lscls_retuint8-.Lscls_store_table /* FFI_TYPE_UINT8 */ -+ .long .Lscls_retsint8-.Lscls_store_table /* FFI_TYPE_SINT8 */ -+ .long .Lscls_retuint16-.Lscls_store_table /* FFI_TYPE_UINT16 */ -+ .long .Lscls_retsint16-.Lscls_store_table /* FFI_TYPE_SINT16 */ -+ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_UINT32 */ -+ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_SINT32 */ -+ .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_UINT64 */ -+ .long .Lscls_retllong-.Lscls_store_table /* FFI_TYPE_SINT64 */ -+ .long .Lscls_retstruct-.Lscls_store_table /* FFI_TYPE_STRUCT */ -+ .long .Lscls_retint-.Lscls_store_table /* FFI_TYPE_POINTER */ -+ .long .Lscls_retstruct1-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_1B */ -+ .long .Lscls_retstruct2-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_2B */ -+ .long .Lscls_retstruct4-.Lscls_store_table /* FFI_TYPE_SMALL_STRUCT_4B */ -+1: -+ shl $2, %eax -+ add (%esp),%eax -+ mov (%eax),%eax -+ add (%esp),%eax -+ add $4, %esp -+ jmp *%eax -+ -+ /* Sign/zero extend as appropriate. */ -+.Lscls_retsint8: -+ movsbl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retsint16: -+ movswl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retuint8: -+ movzbl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retuint16: -+ movzwl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retint: -+ movl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retfloat: -+ flds (%ecx) -+ jmp .Lscls_epilogue -+ -+.Lscls_retdouble: -+ fldl (%ecx) -+ jmp .Lscls_epilogue -+ -+.Lscls_retldouble: -+ fldt (%ecx) -+ jmp .Lscls_epilogue -+ -+.Lscls_retllong: -+ movl (%ecx), %eax -+ movl 4(%ecx), %edx -+ jmp .Lscls_epilogue -+ -+.Lscls_retstruct1: -+ movsbl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retstruct2: -+ movswl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retstruct4: -+ movl (%ecx), %eax -+ jmp .Lscls_epilogue -+ -+.Lscls_retstruct: -+ # Nothing to do! -+ -+.Lscls_noretval: -+.Lscls_epilogue: -+ movl %ebp, %esp -+ popl %ebp -+ movl 4(%esp), %ecx /* Return address */ -+ addl (%esp), %esp /* Parameters stack size */ -+ addl $8, %esp -+ jmp *%ecx -+.ffi_closure_STDCALL_end: -+.LFE5: -+ -+#if defined(X86_DARWIN) -+.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 -+L_ffi_closure_SYSV_inner$stub: -+ .indirect_symbol _ffi_closure_SYSV_inner -+ hlt ; hlt ; hlt ; hlt ; hlt -+L_ffi_closure_WIN32_inner$stub: -+ .indirect_symbol _ffi_closure_WIN32_inner -+ hlt ; hlt ; hlt ; hlt ; hlt -+#endif -+ -+#if defined(X86_WIN32) && !defined(__OS2__) -+ .section .eh_frame,"w" -+#endif -+.Lframe1: -+.LSCIE1: -+ .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ -+.LASCIE1: -+ .long 0x0 /* CIE Identifier Tag */ -+ .byte 0x1 /* CIE Version */ -+#ifdef __PIC__ -+ .ascii "zR\0" /* CIE Augmentation */ -+#else -+ .ascii "\0" /* CIE Augmentation */ +#endif -+ .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ -+ .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ -+ .byte 0x8 /* CIE RA Column */ -+#ifdef __PIC__ -+ .byte 0x1 /* .uleb128 0x1; Augmentation size */ -+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -+#endif -+ .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ -+ .byte 0x4 /* .uleb128 0x4 */ -+ .byte 0x4 /* .uleb128 0x4 */ -+ .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ -+ .byte 0x1 /* .uleb128 0x1 */ -+ .align 4 -+.LECIE1: -+ -+.LSFDE1: -+ .long .LEFDE1-.LASFDE1 /* FDE Length */ -+.LASFDE1: -+ .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -+#if defined __PIC__ && defined HAVE_AS_X86_PCREL -+ .long .LFB1-. /* FDE initial location */ ++ ++/* If these change, update src/mips/ffitarget.h. */ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_INT 1 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#if 1 ++#define FFI_TYPE_LONGDOUBLE 4 +#else -+ .long .LFB1 ++#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE +#endif -+ .long .LFE1-.LFB1 /* FDE address range */ -+#ifdef __PIC__ -+ .byte 0x0 /* .uleb128 0x0; Augmentation size */ -+#endif -+ /* DW_CFA_xxx CFI instructions go here. */ -+ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI0-.LFB1 -+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ -+ .byte 0x8 /* .uleb128 0x8 */ -+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ -+ .byte 0x2 /* .uleb128 0x2 */ -+ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI1-.LCFI0 -+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ -+ .byte 0x5 /* .uleb128 0x5 */ -+ -+ /* End of DW_CFA_xxx CFI instructions. */ -+ .align 4 -+.LEFDE1: -+ -+.LSFDE3: -+ .long .LEFDE3-.LASFDE3 /* FDE Length */ -+.LASFDE3: -+ .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -+#if defined __PIC__ && defined HAVE_AS_X86_PCREL -+ .long .LFB3-. /* FDE initial location */ -+#else -+ .long .LFB3 ++#define FFI_TYPE_UINT8 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_UINT32 9 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_UINT64 11 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_STRUCT 13 ++#define FFI_TYPE_POINTER 14 ++#define FFI_TYPE_COMPLEX 15 ++ ++/* This should always refer to the last type code (for sanity checks) */ ++#define FFI_TYPE_LAST FFI_TYPE_COMPLEX ++ ++#ifdef __cplusplus ++} +#endif -+ .long .LFE3-.LFB3 /* FDE address range */ -+#ifdef __PIC__ -+ .byte 0x0 /* .uleb128 0x0; Augmentation size */ ++ +#endif -+ /* DW_CFA_xxx CFI instructions go here. */ + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI4-.LFB3 -+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ -+ .byte 0x8 /* .uleb128 0x8 */ -+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ -+ .byte 0x2 /* .uleb128 0x2 */ + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI5-.LCFI4 -+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ -+ .byte 0x5 /* .uleb128 0x5 */ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-12-20 18:55:19.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ + -+ /* End of DW_CFA_xxx CFI instructions. */ -+ .align 4 -+.LEFDE3: ++#include + -+#if !FFI_NO_RAW_API + -+.LSFDE4: -+ .long .LEFDE4-.LASFDE4 /* FDE Length */ -+.LASFDE4: -+ .long .LASFDE4-.Lframe1 /* FDE CIE offset */ -+#if defined __PIC__ && defined HAVE_AS_X86_PCREL -+ .long .LFB4-. /* FDE initial location */ -+#else -+ .long .LFB4 -+#endif -+ .long .LFE4-.LFB4 /* FDE address range */ -+#ifdef __PIC__ -+ .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif -+ /* DW_CFA_xxx CFI instructions go here. */ ++#ifdef __i386__ + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI6-.LFB4 -+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ -+ .byte 0x8 /* .uleb128 0x8 */ -+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ -+ .byte 0x2 /* .uleb128 0x2 */ ++#include + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI7-.LCFI6 -+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ -+ .byte 0x5 /* .uleb128 0x5 */ + -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI8-.LCFI7 -+ .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ -+ .byte 0x3 /* .uleb128 0x3 */ ++#endif ++#ifdef __arm__ + -+ /* End of DW_CFA_xxx CFI instructions. */ -+ .align 4 -+.LEFDE4: ++#include + -+#endif /* !FFI_NO_RAW_API */ + -+.LSFDE5: -+ .long .LEFDE5-.LASFDE5 /* FDE Length */ -+.LASFDE5: -+ .long .LASFDE5-.Lframe1 /* FDE CIE offset */ -+#if defined __PIC__ && defined HAVE_AS_X86_PCREL -+ .long .LFB5-. /* FDE initial location */ -+#else -+ .long .LFB5 -+#endif -+ .long .LFE5-.LFB5 /* FDE address range */ -+#ifdef __PIC__ -+ .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif -+ /* DW_CFA_xxx CFI instructions go here. */ -+ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI9-.LFB5 -+ .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ -+ .byte 0x8 /* .uleb128 0x8 */ -+ .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ -+ .byte 0x2 /* .uleb128 0x2 */ -+ -+ .byte 0x4 /* DW_CFA_advance_loc4 */ -+ .long .LCFI10-.LCFI9 -+ .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ -+ .byte 0x5 /* .uleb128 0x5 */ ++#ifdef __x86_64__ + -+ /* End of DW_CFA_xxx CFI instructions. */ -+ .align 4 -+.LEFDE5: ++#include + -+#endif /* !_MSC_VER */ + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",@progbits +#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __arm64__ + ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/LICENSE modified/Modules/_ctypes/libffi_ios_aarch64/LICENSE ---- orig/Modules/_ctypes/libffi_ios_aarch64/LICENSE 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/LICENSE 2015-02-26 10:00:15.000000000 +0800 -@@ -0,0 +1,21 @@ -+libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. -+See source files for details. ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+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: ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+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. -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/README modified/Modules/_ctypes/libffi_ios_aarch64/README ---- orig/Modules/_ctypes/libffi_ios_aarch64/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/README 2015-04-26 08:51:27.000000000 +0800 -@@ -0,0 +1,450 @@ -+Status -+====== ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+libffi-4?? was released on TBD. Check the libffi web -+page for updates: . ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 + -+What is libffi? -+=============== ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+Compilers for high level languages generate code that follow certain -+conventions. These conventions are necessary, in part, for separate -+compilation to work. One such convention is the "calling -+convention". The "calling convention" is essentially a set of -+assumptions made by the compiler about where function arguments will -+be found on entry to a function. A "calling convention" also specifies -+where the return value for a function is found. ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ + -+Some programs may not know at the time of compilation what arguments -+are to be passed to a function. For instance, an interpreter may be -+told at run-time about the number and types of arguments used to call -+a given function. Libffi can be used in such programs to provide a -+bridge from the interpreter program to compiled code. ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+The libffi library provides a portable, high level programming -+interface to various calling conventions. This allows a programmer to -+call any function specified by a call interface description at run -+time. ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+FFI stands for Foreign Function Interface. A foreign function -+interface is the popular name for the interface that allows code -+written in one language to call code written in another language. The -+libffi library really only provides the lowest, machine dependent -+layer of a fully featured foreign function interface. A layer must -+exist above libffi that handles type conversions for values passed -+between the two languages. ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+Supported Platforms -+=================== ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+Libffi has been ported to many different platforms. -+For specific configuration details and testing status, please -+refer to the wiki page here: ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ + -+At the time of release, the following basic configurations have been -+tested: ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+|-----------------+------------------+-------------------------| -+| Architecture | Operating System | Compiler | -+|-----------------+------------------+-------------------------| -+| AArch64 (ARM64) | iOS | Clang | -+| AArch64 | Linux | GCC | -+| Alpha | Linux | GCC | -+| Alpha | Tru64 | GCC | -+| ARC | Linux | GCC | -+| ARM | Linux | GCC | -+| ARM | iOS | GCC | -+| AVR32 | Linux | GCC | -+| Blackfin | uClinux | GCC | -+| HPPA | HPUX | GCC | -+| IA-64 | Linux | GCC | -+| M68K | FreeMiNT | GCC | -+| M68K | Linux | GCC | -+| M68K | RTEMS | GCC | -+| M88K | OpenBSD/mvme88k | GCC | -+| Meta | Linux | GCC | -+| MicroBlaze | Linux | GCC | -+| MIPS | IRIX | GCC | -+| MIPS | Linux | GCC | -+| MIPS | RTEMS | GCC | -+| MIPS64 | Linux | GCC | -+| Moxie | Bare metal | GCC | -+| Nios II | Linux | GCC | -+| OpenRISC | Linux | GCC | -+| PowerPC 32-bit | AIX | IBM XL C | -+| PowerPC 64-bit | AIX | IBM XL C | -+| PowerPC | AMIGA | GCC | -+| PowerPC | Linux | GCC | -+| PowerPC | Mac OSX | GCC | -+| PowerPC | FreeBSD | GCC | -+| PowerPC 64-bit | FreeBSD | GCC | -+| PowerPC 64-bit | Linux ELFv1 | GCC | -+| PowerPC 64-bit | Linux ELFv2 | GCC | -+| S390 | Linux | GCC | -+| S390X | Linux | GCC | -+| SPARC | Linux | GCC | -+| SPARC | Solaris | GCC | -+| SPARC | Solaris | Oracle Solaris Studio C | -+| SPARC64 | Linux | GCC | -+| SPARC64 | FreeBSD | GCC | -+| SPARC64 | Solaris | Oracle Solaris Studio C | -+| TILE-Gx/TILEPro | Linux | GCC | -+| VAX | OpenBSD/vax | GCC | -+| X86 | FreeBSD | GCC | -+| X86 | GNU HURD | GCC | -+| X86 | Interix | GCC | -+| X86 | kFreeBSD | GCC | -+| X86 | Linux | GCC | -+| X86 | Mac OSX | GCC | -+| X86 | OpenBSD | GCC | -+| X86 | OS/2 | GCC | -+| X86 | Solaris | GCC | -+| X86 | Solaris | Oracle Solaris Studio C | -+| X86 | Windows/Cygwin | GCC | -+| X86 | Windows/MingW | GCC | -+| X86-64 | FreeBSD | GCC | -+| X86-64 | Linux | GCC | -+| X86-64 | Linux/x32 | GCC | -+| X86-64 | OpenBSD | GCC | -+| X86-64 | Solaris | Oracle Solaris Studio C | -+| X86-64 | Windows/Cygwin | GCC | -+| X86-64 | Windows/MingW | GCC | -+| Xtensa | Linux | GCC | -+|-----------------+------------------+-------------------------| ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+Please send additional platform test results to -+libffi-discuss@sourceware.org and feel free to update the wiki page -+above. ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+Installing libffi -+================= ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+First you must configure the distribution for your particular -+system. Go to the directory you wish to build libffi in and run the -+"configure" program found in the root directory of the libffi source -+distribution. ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+If you're building libffi directly from version control, configure won't -+exist yet; run ./autogen.sh first. ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+You may want to tell configure where to install the libffi library and -+header files. To do that, use the --prefix configure switch. Libffi -+will install under /usr/local by default. ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ + -+If you want to enable extra run-time debugging checks use the the -+--enable-debug configure switch. This is useful when your program dies -+mysteriously while using libffi. ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+Another useful configure switch is --enable-purify-safety. Using this -+will add some extra code which will suppress certain warnings when you -+are using Purify with libffi. Only use this switch when using -+Purify, as it will slow down the library. ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+It's also possible to build libffi on Windows platforms with -+Microsoft's Visual C++ compiler. In this case, use the msvcc.sh -+wrapper script during configuration like so: ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and -+CXX="path/to/msvcc.sh -m64". You may also need to specify --build -+appropriately. ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+It is also possible to build libffi on Windows platforms with the LLVM -+project's clang-cl compiler, like below: ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+When building with MSVC under a MingW environment, you may need to -+remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' -+command. ('cygpath' is not present in MingW, and is not required when -+using MingW-style paths.) ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+For iOS builds, the 'libffi.xcodeproj' Xcode project is available. ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+Configure has many other options. Use "configure --help" to see them all. ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+Once configure has finished, type "make". Note that you must be using -+GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+To ensure that libffi is working as advertised, type "make check". -+This will require that you have DejaGNU installed. ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+To install the library and header files, type "make install". ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+History -+======= ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+See the git log for details at http://github.com/atgreen/libffi. ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+4.0 TBD -+ New API in support of GO closures. ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+3.2.1 Nov-12-14 -+ Build fix for non-iOS AArch64 targets. ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+3.2 Nov-11-14 -+ Add C99 Complex Type support (currently only supported on -+ s390). -+ Add support for PASCAL and REGISTER calling conventions on x86 -+ Windows/Linux. -+ Add OpenRISC and Cygwin-64 support. -+ Bug fixes. ++/* Name of package */ ++#define PACKAGE "libffi" + -+3.1 May-19-14 -+ Add AArch64 (ARM64) iOS support. -+ Add Nios II support. -+ Add m88k and DEC VAX support. -+ Add support for stdcall, thiscall, and fastcall on non-Windows -+ 32-bit x86 targets such as Linux. -+ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi -+ fixes. -+ Make the testsuite more robust: eliminate several spurious -+ failures, and respect the $CC and $CXX environment variables. -+ Archive off the manually maintained ChangeLog in favor of git -+ log. ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+3.0.13 Mar-17-13 -+ Add Meta support. -+ Add missing Moxie bits. -+ Fix stack alignment bug on 32-bit x86. -+ Build fix for m68000 targets. -+ Build fix for soft-float Power targets. -+ Fix the install dir location for some platforms when building -+ with GCC (OS X, Solaris). -+ Fix Cygwin regression. ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+3.0.12 Feb-11-13 -+ Add Moxie support. -+ Add AArch64 support. -+ Add Blackfin support. -+ Add TILE-Gx/TILEPro support. -+ Add MicroBlaze support. -+ Add Xtensa support. -+ Add support for PaX enabled kernels with MPROTECT. -+ Add support for native vendor compilers on -+ Solaris and AIX. -+ Work around LLVM/GCC interoperability issue on x86_64. ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" + -+3.0.11 Apr-11-12 -+ Lots of build fixes. -+ Add support for variadic functions (ffi_prep_cif_var). -+ Add Linux/x32 support. -+ Add thiscall, fastcall and MSVC cdecl support on Windows. -+ Add Amiga and newer MacOS support. -+ Add m68k FreeMiNT support. -+ Integration with iOS' xcode build tools. -+ Fix Octeon and MC68881 support. -+ Fix code pessimizations. ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+3.0.10 Aug-23-11 -+ Add support for Apple's iOS. -+ Add support for ARM VFP ABI. -+ Add RTEMS support for MIPS and M68K. -+ Fix instruction cache clearing problems on -+ ARM and SPARC. -+ Fix the N64 build on mips-sgi-irix6.5. -+ Enable builds with Microsoft's compiler. -+ Enable x86 builds with Oracle's Solaris compiler. -+ Fix support for calling code compiled with Oracle's Sparc -+ Solaris compiler. -+ Testsuite fixes for Tru64 Unix. -+ Additional platform support. ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+3.0.9 Dec-31-09 -+ Add AVR32 and win64 ports. Add ARM softfp support. -+ Many fixes for AIX, Solaris, HP-UX, *BSD. -+ Several PowerPC and x86-64 bug fixes. -+ Build DLL for windows. ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" + -+3.0.8 Dec-19-08 -+ Add *BSD, BeOS, and PA-Linux support. ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+3.0.7 Nov-11-08 -+ Fix for ppc FreeBSD. -+ (thanks to Andreas Tobler) ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 + -+3.0.6 Jul-17-08 -+ Fix for closures on sh. -+ Mark the sh/sh64 stack as non-executable. -+ (both thanks to Kaz Kojima) ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 + -+3.0.5 Apr-3-08 -+ Fix libffi.pc file. -+ Fix #define ARM for IcedTea users. -+ Fix x86 closure bug. ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+3.0.4 Feb-24-08 -+ Fix x86 OpenBSD configury. ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+3.0.3 Feb-22-08 -+ Enable x86 OpenBSD thanks to Thomas Heller, and -+ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. -+ Clean up test instruction in README. ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+3.0.2 Feb-21-08 -+ Improved x86 FreeBSD support. -+ Thanks to Björn König. ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+3.0.1 Feb-15-08 -+ Fix instruction cache flushing bug on MIPS. -+ Thanks to David Daney. ++/* Version number of package */ ++#define VERSION "3.99999" + -+3.0.0 Feb-15-08 -+ Many changes, mostly thanks to the GCC project. -+ Cygnus Solutions is now Red Hat. ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+ [10 years go by...] ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+1.20 Oct-5-98 -+ Raffaele Sena produces ARM port. + -+1.19 Oct-5-98 -+ Fixed x86 long double and long long return support. -+ m68k bug fixes from Andreas Schwab. -+ Patch for DU assembler compatibility for the Alpha from Richard -+ Henderson. ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+1.18 Apr-17-98 -+ Bug fixes and MIPS configuration changes. + -+1.17 Feb-24-98 -+ Bug fixes and m68k port from Andreas Schwab. PowerPC port from -+ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. + -+1.16 Feb-11-98 -+ Richard Henderson produces Alpha port. ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __arm__ + -+1.15 Dec-4-97 -+ Fixed an n32 ABI bug. New libtool, auto* support. ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+1.14 May-13-97 -+ libtool is now used to generate shared and static libraries. -+ Fixed a minor portability problem reported by Russ McManus -+ . ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+1.13 Dec-2-96 -+ Added --enable-purify-safety to keep Purify from complaining -+ about certain low level code. -+ Sparc fix for calling functions with < 6 args. -+ Linux x86 a.out fix. ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+1.12 Nov-22-96 -+ Added missing ffi_type_void, needed for supporting void return -+ types. Fixed test case for non MIPS machines. Cygnus Support -+ is now Cygnus Solutions. ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+1.11 Oct-30-96 -+ Added notes about GNU make. ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+1.10 Oct-29-96 -+ Added configuration fix for non GNU compilers. ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+1.09 Oct-29-96 -+ Added --enable-debug configure switch. Clean-ups based on LCLint -+ feedback. ffi_mips.h is always installed. Many configuration -+ fixes. Fixed ffitest.c for sparc builds. ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++ ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+1.08 Oct-15-96 -+ Fixed n32 problem. Many clean-ups. ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++/* #undef FFI_MMAP_EXEC_WRIT */ + -+1.07 Oct-14-96 -+ Gordon Irlam rewrites v8.S again. Bug fixes. ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+1.06 Oct-14-96 -+ Gordon Irlam improved the sparc port. ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+1.05 Oct-14-96 -+ Interface changes based on feedback. ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+1.04 Oct-11-96 -+ Sparc port complete (modulo struct passing bug). ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+1.03 Oct-10-96 -+ Passing struct args, and returning struct values works for -+ all architectures/calling conventions. Expanded tests. ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+1.02 Oct-9-96 -+ Added SGI n32 support. Fixed bugs in both o32 and Linux support. -+ Added "make test". ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+1.01 Oct-8-96 -+ Fixed float passing bug in mips version. Restructured some -+ of the code. Builds cleanly with SGI tools. ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ + -+1.00 Oct-7-96 -+ First release. No public announcement. ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+Authors & Credits -+================= ++/* Define if your assembler supports PC relative relocs. */ ++/* #undef HAVE_AS_X86_PCREL */ + -+libffi was originally written by Anthony Green . ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+The developers of the GNU Compiler Collection project have made -+innumerable valuable contributions. See the ChangeLog file for -+details. ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+Some of the ideas behind libffi were inspired by Gianni Mariani's free -+gencall library for Silicon Graphics machines. ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+The closure mechanism was designed and implemented by Kresten Krab -+Thorup. ++/* Define if you have the long double type and it is bigger than a double */ ++/* #undef HAVE_LONG_DOUBLE */ + -+Major processor architecture ports were contributed by the following -+developers: ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+aarch64 Marcus Shawcroft, James Greenhalgh -+alpha Richard Henderson -+arm Raffaele Sena -+blackfin Alexandre Keunecke I. de Mendonca -+cris Simon Posnjak, Hans-Peter Nilsson -+frv Anthony Green -+ia64 Hans Boehm -+m32r Kazuhiro Inaoka -+m68k Andreas Schwab -+m88k Miod Vallat -+microblaze Nathan Rossi -+mips Anthony Green, Casey Marshall -+mips64 David Daney -+moxie Anthony Green -+nios ii Sandra Loosemore -+openrisc Sebastian Macke -+pa Randolph Chung, Dave Anglin, Andreas Tobler -+powerpc Geoffrey Keating, Andreas Tobler, -+ David Edelsohn, John Hornkvist -+powerpc64 Jakub Jelinek -+s390 Gerhard Tonn, Ulrich Weigand -+sh Kaz Kojima -+sh64 Kaz Kojima -+sparc Anthony Green, Gordon Irlam -+tile-gx/tilepro Walter Lee -+vax Miod Vallat -+x86 Anthony Green, Jon Beniston -+x86-64 Bo Thorsen -+xtensa Chris Zankel ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+Jesper Skov and Andrew Haley both did more than their fair share of -+stepping through the code and tracking down bugs. ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+Thanks also to Tom Tromey for bug fixes, documentation and -+configuration help. ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+Thanks to Jim Blandy, who provided some useful feedback on the libffi -+interface. ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+Andreas Tobler has done a tremendous amount of work on the testsuite. ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+Alex Oliva solved the executable page problem for SElinux. ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+The list above is almost certainly incomplete and inaccurate. I'm -+happy to make corrections or additions upon request. ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+If you have a problem, or have found a bug, please send a note to the -+author at green@moxielogic.com, or the project mailing list at -+libffi-discuss@sourceware.org. -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/README.python modified/Modules/_ctypes/libffi_ios_aarch64/README.python ---- orig/Modules/_ctypes/libffi_ios_aarch64/README.python 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/README.python 2015-04-26 08:58:26.000000000 +0800 -@@ -0,0 +1,17 @@ -+This directory contains the generated source code for running libffi -+on iOS platforms (physical and simulator). It contains support for -+ARM64 (referred to as `aarch64` by libffi). ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+libffi requires a code-generation step for Apple platforms. This code -+generation is performed using the `generate-darwin-source-and-headers.py` -+script in the home directory of the libffi project. ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+This directory is the combined output of the darwin_common and darwin_ios -+generated code directories. It has been pruned of source files that are -+not needed for ctypes. ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+The code in this directory comes from a pre-release version of libffi 4.0. -+March 29 2015, Git hash 17ffc3655a531c116e9eb9cc933e50bb1e5c47f8. ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+The pre-release version is necessary because the stable 3.2.1 release -+contains bugs on the ARM64 platform. -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c ---- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/ffi_arm64.c 2015-04-26 08:39:44.000000000 +0800 -@@ -0,0 +1,1157 @@ -+#ifdef __arm64__ ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+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: ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+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. */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+#include -+#include -+#include -+#include -+#include -+#include "internal.h" ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; -+ all further uses in this file will refer to the 128-bit type. */ -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+# if FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+#else -+# undef FFI_TYPE_LONGDOUBLE -+# define FFI_TYPE_LONGDOUBLE 4 -+#endif ++/* Name of package */ ++#define PACKAGE "libffi" + -+union _d -+{ -+ UINT64 d; -+ UINT32 s[2]; -+}; ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+struct _v -+{ -+ union _d d[2] __attribute__((aligned(16))); -+}; ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+struct call_context -+{ -+ struct _v v[N_V_ARG_REG]; -+ UINT64 x[N_X_ARG_REG]; -+}; ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" + -+#if defined (__clang__) && defined (__APPLE__) -+extern void sys_icache_invalidate (void *start, size_t len); -+#endif ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+static inline void -+ffi_clear_cache (void *start, void *end) -+{ -+#if defined (__clang__) && defined (__APPLE__) -+ sys_icache_invalidate (start, (char *)end - (char *)start); -+#elif defined (__GNUC__) -+ __builtin___clear_cache (start, end); -+#else -+#error "Missing builtin to flush instruction cache" -+#endif -+} ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+/* A subroutine of is_vfp_type. Given a structure type, return the type code -+ of the first non-structure element. Recurse for structure elements. -+ Return -1 if the structure is in fact empty, i.e. no nested elements. */ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" + -+static int -+is_hfa0 (const ffi_type *ty) -+{ -+ ffi_type **elements = ty->elements; -+ int i, ret = -1; ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ ret = elements[i]->type; -+ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) -+ { -+ ret = is_hfa0 (elements[i]); -+ if (ret < 0) -+ continue; -+ } -+ break; -+ } ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 8 + -+ return ret; -+} ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 + -+/* A subroutine of is_vfp_type. Given a structure type, return true if all -+ of the non-structure elements are the same as CANDIDATE. */ ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+static int -+is_hfa1 (const ffi_type *ty, int candidate) -+{ -+ ffi_type **elements = ty->elements; -+ int i; ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+ return 1; -+} ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+/* Determine if TY may be allocated to the FP registers. This is both an -+ fp scalar type as well as an homogenous floating point aggregate (HFA). -+ That is, a structure consisting of 1 to 4 members of all the same type, -+ where that type is an fp scalar. ++/* Version number of package */ ++#define VERSION "3.99999" + -+ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* -+ constant for the type. */ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+static int -+is_vfp_type (const ffi_type *ty) -+{ -+ ffi_type **elements; -+ int candidate, i; -+ size_t size, ele_count; ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+ /* Quickest tests first. */ -+ candidate = ty->type; -+ switch (candidate) -+ { -+ default: -+ return 0; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 1; -+ goto done; -+ case FFI_TYPE_COMPLEX: -+ candidate = ty->elements[0]->type; -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 2; -+ goto done; -+ } -+ return 0; -+ case FFI_TYPE_STRUCT: -+ break; -+ } + -+ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ -+ size = ty->size; -+ if (size < 4 || size > 64) -+ return 0; ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+ /* Find the type of the first non-structure member. */ -+ elements = ty->elements; -+ candidate = elements[0]->type; -+ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) -+ { -+ for (i = 0; ; ++i) -+ { -+ candidate = is_hfa0 (elements[i]); -+ if (candidate >= 0) -+ break; -+ } -+ } + -+ /* If the first member is not a floating point type, it's not an HFA. -+ Also quickly re-check the size of the structure. */ -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ ele_count = size / sizeof(float); -+ if (size != ele_count * sizeof(float)) -+ return 0; -+ break; -+ case FFI_TYPE_DOUBLE: -+ ele_count = size / sizeof(double); -+ if (size != ele_count * sizeof(double)) -+ return 0; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = size / sizeof(long double); -+ if (size != ele_count * sizeof(long double)) -+ return 0; -+ break; -+ default: -+ return 0; -+ } -+ if (ele_count > 4) -+ return 0; + -+ /* Finally, make sure that all scalar elements are the same type. */ -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __i386__ + -+ /* All tests succeeded. Encode the result. */ -+ done: -+ return candidate * 4 + (4 - ele_count); -+} ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+/* Representation of the procedure call argument marshalling -+ state. ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+ The terse state variable names match the names used in the AARCH64 -+ PCS. */ ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+struct arg_state -+{ -+ unsigned ngrn; /* Next general-purpose register number. */ -+ unsigned nsrn; /* Next vector register number. */ -+ size_t nsaa; /* Next stack offset. */ ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+#if defined (__APPLE__) -+ unsigned allocating_variadic; -+#endif -+}; ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+/* Initialize a procedure call argument marshalling state. */ -+static void -+arg_init (struct arg_state *state) -+{ -+ state->ngrn = 0; -+ state->nsrn = 0; -+ state->nsaa = 0; -+#if defined (__APPLE__) -+ state->allocating_variadic = 0; -+#endif -+} ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+/* Allocate an aligned slot on the stack and return a pointer to it. */ -+static void * -+allocate_to_stack (struct arg_state *state, void *stack, -+ size_t alignment, size_t size) -+{ -+ size_t nsaa = state->nsaa; ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + -+ /* Round up the NSAA to the larger of 8 or the natural -+ alignment of the argument's type. */ -+#if defined (__APPLE__) -+ if (state->allocating_variadic && alignment < 8) -+ alignment = 8; -+#else -+ if (alignment < 8) -+ alignment = 8; -+#endif -+ -+ nsaa = ALIGN (nsaa, alignment); -+ state->nsaa = nsaa + size; ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ return (char *)stack + nsaa; -+} ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 + -+static ffi_arg -+extend_integer_type (void *source, int type) -+{ -+ switch (type) -+ { -+ case FFI_TYPE_UINT8: -+ return *(UINT8 *) source; -+ case FFI_TYPE_SINT8: -+ return *(SINT8 *) source; -+ case FFI_TYPE_UINT16: -+ return *(UINT16 *) source; -+ case FFI_TYPE_SINT16: -+ return *(SINT16 *) source; -+ case FFI_TYPE_UINT32: -+ return *(UINT32 *) source; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ return *(SINT32 *) source; -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ return *(UINT64 *) source; -+ break; -+ case FFI_TYPE_POINTER: -+ return *(uintptr_t *) source; -+ default: -+ abort(); -+ } -+} ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+static void -+extend_hfa_type (void *dest, void *src, int h) -+{ -+ int f = h - AARCH64_RET_S4; -+ void *x0; ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+ asm volatile ( -+ "adr %0, 0f\n" -+" add %0, %0, %1\n" -+" br %0\n" -+"0: ldp s16, s17, [%3]\n" /* S4 */ -+" ldp s18, s19, [%3, #8]\n" -+" b 4f\n" -+" ldp s16, s17, [%3]\n" /* S3 */ -+" ldr s18, [%3, #8]\n" -+" b 3f\n" -+" ldp s16, s17, [%3]\n" /* S2 */ -+" b 2f\n" -+" nop\n" -+" ldr s16, [%3]\n" /* S1 */ -+" b 1f\n" -+" nop\n" -+" ldp d16, d17, [%3]\n" /* D4 */ -+" ldp d18, d19, [%3, #16]\n" -+" b 4f\n" -+" ldp d16, d17, [%3]\n" /* D3 */ -+" ldr d18, [%3, #16]\n" -+" b 3f\n" -+" ldp d16, d17, [%3]\n" /* D2 */ -+" b 2f\n" -+" nop\n" -+" ldr d16, [%3]\n" /* D1 */ -+" b 1f\n" -+" nop\n" -+" ldp q16, q17, [%3]\n" /* Q4 */ -+" ldp q18, q19, [%3, #16]\n" -+" b 4f\n" -+" ldp q16, q17, [%3]\n" /* Q3 */ -+" ldr q18, [%3, #16]\n" -+" b 3f\n" -+" ldp q16, q17, [%3]\n" /* Q2 */ -+" b 2f\n" -+" nop\n" -+" ldr q16, [%3]\n" /* Q1 */ -+" b 1f\n" -+"4: str q19, [%2, #48]\n" -+"3: str q18, [%2, #32]\n" -+"2: str q17, [%2, #16]\n" -+"1: str q16, [%2]" -+ : "=&r"(x0) -+ : "r"(f * 12), "r"(dest), "r"(src) -+ : "memory", "v16", "v17", "v18", "v19"); -+} ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+static void * -+compress_hfa_type (void *dest, void *reg, int h) -+{ -+ switch (h) -+ { -+ case AARCH64_RET_S1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 12; -+#endif -+ } -+ else -+ *(float *)dest = *(float *)reg; -+ break; -+ case AARCH64_RET_S2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.s, v17.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_S3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.s, v17.s, v18.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_S4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+ case AARCH64_RET_D1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 8; -+#endif -+ } -+ else -+ *(double *)dest = *(double *)reg; -+ break; -+ case AARCH64_RET_D2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.d, v17.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_D3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.d, v17.d, v18.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_D4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+ default: -+ if (dest != reg) -+ return memcpy (dest, reg, 16 * (4 - (h & 3))); -+ break; -+ } -+ return dest; -+} ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+/* Either allocate an appropriate register for the argument type, or if -+ none are available, allocate a stack slot and return a pointer -+ to the allocated space. */ ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ + -+static void * -+allocate_int_to_reg_or_stack (struct call_context *context, -+ struct arg_state *state, -+ void *stack, size_t size) -+{ -+ if (state->ngrn < N_X_ARG_REG) -+ return &context->x[state->ngrn++]; ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+ state->ngrn = N_X_ARG_REG; -+ return allocate_to_stack (state, stack, size, size); -+} ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ ffi_type *rtype = cif->rtype; -+ size_t bytes = cif->bytes; -+ int flags, i, n; ++/* Define if your assembler supports PC relative relocs. */ ++#define HAVE_AS_X86_PCREL 1 + -+ switch (rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = AARCH64_RET_VOID; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = AARCH64_RET_UINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = AARCH64_RET_UINT16; -+ break; -+ case FFI_TYPE_UINT32: -+ flags = AARCH64_RET_UINT32; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = AARCH64_RET_SINT8; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = AARCH64_RET_SINT16; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ flags = AARCH64_RET_SINT32; -+ break; -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = AARCH64_RET_INT64; -+ break; -+ case FFI_TYPE_POINTER: -+ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); -+ break; ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ flags = is_vfp_type (rtype); -+ if (flags == 0) -+ { -+ size_t s = rtype->size; -+ if (s > 16) -+ { -+ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; -+ bytes += 8; -+ } -+ else if (s == 16) -+ flags = AARCH64_RET_INT128; -+ else if (s == 8) -+ flags = AARCH64_RET_INT64; -+ else -+ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; -+ } -+ break; ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+ default: -+ abort(); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+ for (i = 0, n = cif->nargs; i < n; i++) -+ if (is_vfp_type (cif->arg_types[i])) -+ { -+ flags |= AARCH64_FLAG_ARG_V; -+ break; -+ } ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 + -+ /* Round the stack up to a multiple of the stack alignment requirement. */ -+ cif->bytes = ALIGN(bytes, 16); -+ cif->flags = flags; -+#if defined (__APPLE__) -+ cif->aarch64_nfixedargs = 0; -+#endif ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+ return FFI_OK; -+} ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+#if defined (__APPLE__) -+/* Perform Apple-specific cif processing for variadic calls */ -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs) -+{ -+ ffi_status status = ffi_prep_cif_machdep (cif); -+ cif->aarch64_nfixedargs = nfixedargs; -+ return status; -+} -+#endif /* __APPLE__ */ ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+extern void ffi_call_SYSV (struct call_context *context, void *frame, -+ void (*fn)(void), void *rvalue, int flags, -+ void *closure) FFI_HIDDEN; ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+/* Call a function with the provided arguments and capture the return -+ value. */ -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, -+ void **avalue, void *closure) -+{ -+ struct call_context *context; -+ void *stack, *frame, *rvalue; -+ struct arg_state state; -+ size_t stack_bytes, rtype_size, rsize; -+ int i, nargs, flags; -+ ffi_type *rtype; ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+ flags = cif->flags; -+ rtype = cif->rtype; -+ rtype_size = rtype->size; -+ stack_bytes = cif->bytes; ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+ /* If the target function returns a structure via hidden pointer, -+ then we cannot allow a null rvalue. Otherwise, mash a null -+ rvalue to void return type. */ -+ rsize = 0; -+ if (flags & AARCH64_RET_IN_MEM) -+ { -+ if (orig_rvalue == NULL) -+ rsize = rtype_size; -+ } -+ else if (orig_rvalue == NULL) -+ flags &= AARCH64_FLAG_ARG_V; -+ else if (flags & AARCH64_RET_NEED_COPY) -+ rsize = 16; ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+ /* Allocate consectutive stack for everything we'll need. */ -+ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); -+ stack = context + 1; -+ frame = stack + stack_bytes; -+ rvalue = (rsize ? frame + 32 : orig_rvalue); ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+ arg_init (&state); -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ size_t s = ty->size; -+ void *a = avalue[i]; -+ int h, t; ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+ t = ty->type; -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+ /* If the argument is a basic type the argument is allocated to an -+ appropriate register, or if none are available, to the stack. */ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ do_pointer: -+ { -+ ffi_arg ext = extend_integer_type (a, t); -+ if (state.ngrn < N_X_ARG_REG) -+ context->x[state.ngrn++] = ext; -+ else -+ { -+ void *d = allocate_to_stack (&state, stack, ty->alignment, s); -+ state.ngrn = N_X_ARG_REG; -+ /* Note that the default abi extends each argument -+ to a full 64-bit slot, while the iOS abi allocates -+ only enough space. */ -+#ifdef __APPLE__ -+ memcpy(d, a, s); -+#else -+ *(ffi_arg *)d = ext; -+#endif -+ } -+ } -+ break; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ { -+ void *dest; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ int elems = 4 - (h & 3); -+ if (state.nsrn + elems <= N_V_ARG_REG) -+ { -+ dest = &context->v[state.nsrn]; -+ state.nsrn += elems; -+ extend_hfa_type (dest, a, h); -+ break; -+ } -+ state.nsrn = N_V_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ else if (s > 16) -+ { -+ /* If the argument is a composite type that is larger than 16 -+ bytes, then the argument has been copied to memory, and -+ the argument is replaced by a pointer to the copy. */ -+ a = &avalue[i]; -+ t = FFI_TYPE_POINTER; -+ goto do_pointer; -+ } -+ else -+ { -+ size_t n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ /* If the argument is a composite type and the size in -+ double-words is not more than the number of available -+ X registers, then the argument is copied into -+ consecutive X registers. */ -+ dest = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ /* Otherwise, there are insufficient X registers. Further -+ X register allocations are prevented, the NSAA is -+ adjusted and the argument is copied to memory at the -+ adjusted NSAA. */ -+ state.ngrn = N_X_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ } -+ memcpy (dest, a, s); -+ } -+ break; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+ default: -+ abort(); -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+#if defined (__APPLE__) -+ if (i + 1 == cif->aarch64_nfixedargs) -+ { -+ state.ngrn = N_X_ARG_REG; -+ state.nsrn = N_V_ARG_REG; -+ state.allocating_variadic = 1; -+ } -+#endif -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+ if (flags & AARCH64_RET_NEED_COPY) -+ memcpy (orig_rvalue, rvalue, rtype_size); -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+void -+ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+#ifdef FFI_GO_CLOSURES -+void -+ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+#endif /* FFI_GO_CLOSURES */ ++/* Name of package */ ++#define PACKAGE "libffi" + -+/* Build a trampoline. */ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+extern void ffi_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+#if FFI_EXEC_TRAMPOLINE_TABLE ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" + -+#include -+#include -+#include -+#include ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+extern void *ffi_closure_trampoline_table_page; ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+typedef struct ffi_trampoline_table ffi_trampoline_table; -+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" + -+struct ffi_trampoline_table -+{ -+ /* contiguous writable and executable pages */ -+ vm_address_t config_page; -+ vm_address_t trampoline_page; ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+ /* free list tracking */ -+ uint16_t free_count; -+ ffi_trampoline_table_entry *free_list; -+ ffi_trampoline_table_entry *free_list_pool; ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 + -+ ffi_trampoline_table *prev; -+ ffi_trampoline_table *next; -+}; ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 4 + -+struct ffi_trampoline_table_entry -+{ -+ void *(*trampoline) (); -+ ffi_trampoline_table_entry *next; -+}; ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+/* The trampoline configuration is placed a page prior to the trampoline's entry point */ -+#define FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc) ((void **) (((uint8_t *) codeloc) - PAGE_SIZE)); ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+/* Total number of trampolines that fit in one trampoline table */ -+#define FFI_TRAMPOLINE_COUNT (PAGE_SIZE / FFI_TRAMPOLINE_SIZE) ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -+static ffi_trampoline_table *ffi_trampoline_tables = NULL; ++/* Version number of package */ ++#define VERSION "3.99999" + -+static ffi_trampoline_table * -+ffi_trampoline_table_alloc () -+{ -+ ffi_trampoline_table *table = NULL; ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + -+ /* Loop until we can allocate two contiguous pages */ -+ while (table == NULL) -+ { -+ vm_address_t config_page = 0x0; -+ kern_return_t kt; ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + -+ /* Try to allocate two pages */ -+ kt = -+ vm_allocate (mach_task_self (), &config_page, PAGE_SIZE * 2, -+ VM_FLAGS_ANYWHERE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } + -+ /* Now drop the second half of the allocation to make room for the trampoline table */ -+ vm_address_t trampoline_page = config_page + PAGE_SIZE; -+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif ++#endif + -+ /* Remap the trampoline table to directly follow the config page */ -+ vm_prot_t cur_prot; -+ vm_prot_t max_prot; + -+ kt = -+ vm_remap (mach_task_self (), &trampoline_page, PAGE_SIZE, 0x0, FALSE, -+ mach_task_self (), -+ (vm_address_t) & ffi_closure_trampoline_table_page, FALSE, -+ &cur_prot, &max_prot, VM_INHERIT_SHARE); + -+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ -+ if (kt != KERN_SUCCESS) -+ { -+ /* Log unexpected failures */ -+ if (kt != KERN_NO_SPACE) -+ { -+ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ } ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,214 @@ ++#ifdef __x86_64__ + -+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); -+ continue; -+ } ++/* fficonfig.h. Generated from fficonfig.h.in by configure. */ ++/* fficonfig.h.in. Generated from configure.ac by autoheader. */ + -+ /* We have valid trampoline and config pages */ -+ table = calloc (1, sizeof (ffi_trampoline_table)); -+ table->free_count = FFI_TRAMPOLINE_COUNT; -+ table->config_page = config_page; -+ table->trampoline_page = trampoline_page; ++/* Define if building universal (internal helper macro) */ ++/* #undef AC_APPLE_UNIVERSAL_BUILD */ + -+ /* Create and initialize the free list */ -+ table->free_list_pool = -+ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); ++/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP ++ systems. This function is required for `alloca.c' support on those systems. ++ */ ++/* #undef CRAY_STACKSEG_END */ + -+ uint16_t i; -+ for (i = 0; i < table->free_count; i++) -+ { -+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; -+ entry->trampoline = -+ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); ++/* Define to 1 if using `alloca.c'. */ ++/* #undef C_ALLOCA */ + -+ if (i < table->free_count - 1) -+ entry->next = &table->free_list_pool[i + 1]; -+ } ++/* Define to the flags needed for the .section .eh_frame directive. */ ++#define EH_FRAME_FLAGS "aw" + -+ table->free_list = table->free_list_pool; -+ } ++/* Define this if you want extra debugging. */ ++/* #undef FFI_DEBUG */ + -+ return table; -+} ++/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ ++/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ + -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ /* Create the closure */ -+ ffi_closure *closure = malloc (size); -+ if (closure == NULL) -+ return NULL; ++/* Define this if you want to enable pax emulated trampolines */ ++/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++/* Cannot use malloc on this target, so, we revert to alternative means */ ++#define FFI_MMAP_EXEC_WRIT 1 + -+ /* Check for an active trampoline table with available entries. */ -+ ffi_trampoline_table *table = ffi_trampoline_tables; -+ if (table == NULL || table->free_list == NULL) -+ { -+ table = ffi_trampoline_table_alloc (); -+ if (table == NULL) -+ { -+ free (closure); -+ return NULL; -+ } ++/* Define this if you do not want support for the raw API. */ ++/* #undef FFI_NO_RAW_API */ + -+ /* Insert the new table at the top of the list */ -+ table->next = ffi_trampoline_tables; -+ if (table->next != NULL) -+ table->next->prev = table; ++/* Define this if you do not want support for aggregate types. */ ++/* #undef FFI_NO_STRUCTS */ + -+ ffi_trampoline_tables = table; -+ } ++/* Define to 1 if you have `alloca', as a function or macro. */ ++#define HAVE_ALLOCA 1 + -+ /* Claim the free entry */ -+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; -+ ffi_trampoline_tables->free_list = entry->next; -+ ffi_trampoline_tables->free_count--; -+ entry->next = NULL; ++/* Define to 1 if you have and it should be used (not on Ultrix). ++ */ ++#define HAVE_ALLOCA_H 1 + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++/* Define if your assembler supports .cfi_* directives. */ ++#define HAVE_AS_CFI_PSEUDO_OP 1 + -+ /* Initialize the return values */ -+ *code = entry->trampoline; -+ closure->trampoline_table = table; -+ closure->trampoline_table_entry = entry; ++/* Define if your assembler supports .register. */ ++/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ + -+ return closure; -+} ++/* Define if the compiler uses zarch features. */ ++/* #undef HAVE_AS_S390_ZARCH */ + -+void -+ffi_closure_free (void *ptr) -+{ -+ ffi_closure *closure = ptr; ++/* Define if your assembler and linker support unaligned PC relative relocs. ++ */ ++/* #undef HAVE_AS_SPARC_UA_PCREL */ + -+ pthread_mutex_lock (&ffi_trampoline_lock); ++/* Define if your assembler supports unwind section type. */ ++/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ + -+ /* Fetch the table and entry references */ -+ ffi_trampoline_table *table = closure->trampoline_table; -+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; ++/* Define if your assembler supports PC relative relocs. */ ++#define HAVE_AS_X86_PCREL 1 + -+ /* Return the entry to the free list */ -+ entry->next = table->free_list; -+ table->free_list = entry; -+ table->free_count++; ++/* Define to 1 if you have the header file. */ ++#define HAVE_DLFCN_H 1 + -+ /* If all trampolines within this table are free, and at least one other table exists, deallocate -+ * the table */ -+ if (table->free_count == FFI_TRAMPOLINE_COUNT -+ && ffi_trampoline_tables != table) -+ { -+ /* Remove from the list */ -+ if (table->prev != NULL) -+ table->prev->next = table->next; ++/* Define if __attribute__((visibility("hidden"))) is supported. */ ++/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + -+ if (table->next != NULL) -+ table->next->prev = table->prev; ++/* Define to 1 if you have the header file. */ ++#define HAVE_INTTYPES_H 1 + -+ /* Deallocate pages */ -+ kern_return_t kt; -+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++/* Define if you have the long double type and it is bigger than a double */ ++#define HAVE_LONG_DOUBLE 1 + -+ kt = -+ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); ++/* Define if you support more than one size of the long double type */ ++/* #undef HAVE_LONG_DOUBLE_VARIANT */ + -+ /* Deallocate free list */ -+ free (table->free_list_pool); -+ free (table); -+ } -+ else if (ffi_trampoline_tables != table) -+ { -+ /* Otherwise, bump this table to the top of the list */ -+ table->prev = NULL; -+ table->next = ffi_trampoline_tables; -+ if (ffi_trampoline_tables != NULL) -+ ffi_trampoline_tables->prev = table; ++/* Define to 1 if you have the `memcpy' function. */ ++#define HAVE_MEMCPY 1 + -+ ffi_trampoline_tables = table; -+ } ++/* Define to 1 if you have the header file. */ ++#define HAVE_MEMORY_H 1 + -+ pthread_mutex_unlock (&ffi_trampoline_lock); ++/* Define to 1 if you have the `mkostemp' function. */ ++/* #undef HAVE_MKOSTEMP */ + -+ /* Free the closure */ -+ free (closure); -+} ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 + -+#endif ++/* Define if mmap with MAP_ANON(YMOUS) works. */ ++#define HAVE_MMAP_ANON 1 + -+ffi_status -+ffi_prep_closure_loc (ffi_closure *closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++/* Define if mmap of /dev/zero works. */ ++/* #undef HAVE_MMAP_DEV_ZERO */ + -+ void (*start)(void); -+ -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_closure_SYSV_V; -+ else -+ start = ffi_closure_SYSV; ++/* Define if read-only mmap of a plain file works. */ ++#define HAVE_MMAP_FILE 1 + -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ void **config = FFI_TRAMPOLINE_CODELOC_CONFIG (codeloc); -+ config[0] = closure; -+ config[1] = start; -+#else -+ static const unsigned char trampoline[16] = { -+ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ -+ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ -+ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ -+ }; -+ char *tramp = closure->tramp; -+ -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ -+ *(UINT64 *)(tramp + 16) = (uintptr_t)start; ++/* Define if .eh_frame sections should be read-only. */ ++/* #undef HAVE_RO_EH_FRAME */ + -+ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); -+#endif ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDINT_H 1 + -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STDLIB_H 1 + -+ return FFI_OK; -+} ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRINGS_H 1 + -+#ifdef FFI_GO_CLOSURES -+extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; ++/* Define to 1 if you have the header file. */ ++#define HAVE_STRING_H 1 + -+ffi_status -+ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*)) -+{ -+ void (*start)(void); ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 + -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_STAT_H 1 + -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_go_closure_SYSV_V; -+ else -+ start = ffi_go_closure_SYSV; ++/* Define to 1 if you have the header file. */ ++#define HAVE_SYS_TYPES_H 1 + -+ closure->tramp = start; -+ closure->cif = cif; -+ closure->fun = fun; ++/* Define to 1 if you have the header file. */ ++#define HAVE_UNISTD_H 1 + -+ return FFI_OK; -+} -+#endif /* FFI_GO_CLOSURES */ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#define LT_OBJDIR ".libs/" + -+/* Primary handler to setup and invoke a function within a closure. ++/* Name of package */ ++#define PACKAGE "libffi" + -+ A closure when invoked enters via the assembler wrapper -+ ffi_closure_SYSV(). The wrapper allocates a call context on the -+ stack, saves the interesting registers (from the perspective of -+ the calling convention) into the context then passes control to -+ ffi_closure_SYSV_inner() passing the saved context and a pointer to -+ the stack at the point ffi_closure_SYSV() was invoked. ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" + -+ On the return path the assembler wrapper will reload call context -+ registers. ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libffi" + -+ ffi_closure_SYSV_inner() marshalls the call context into ffi value -+ descriptors, invokes the wrapped function, then marshalls the return -+ value back into the call context. */ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libffi 3.99999" + -+int FFI_HIDDEN -+ffi_closure_SYSV_inner (ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ struct call_context *context, -+ void *stack, void *rvalue, void *struct_rvalue) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ int i, h, nargs, flags; -+ struct arg_state state; ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libffi" + -+ arg_init (&state); ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "" + -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ int t = ty->type; -+ size_t n, s = ty->size; ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "3.99999" + -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 + -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); -+ break; ++/* The size of `long double', as computed by sizeof. */ ++#define SIZEOF_LONG_DOUBLE 16 + -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ n = 4 - (h & 3); -+ if (state.nsrn + n <= N_V_ARG_REG) -+ { -+ void *reg = &context->v[state.nsrn]; -+ state.nsrn += n; ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 + -+ /* Eeek! We need a pointer to the structure, however the -+ homogeneous float elements are being passed in individual -+ registers, therefore for float and double the structure -+ is not represented as a contiguous sequence of bytes in -+ our saved register context. We don't need the original -+ contents of the register storage, so we reformat the -+ structure into the same memory. */ -+ avalue[i] = compress_hfa_type (reg, reg, h); -+ } -+ else -+ { -+ state.nsrn = N_V_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ else if (s > 16) -+ { -+ /* Replace Composite type of size greater than 16 with a -+ pointer. */ -+ avalue[i] = *(void **) -+ allocate_int_to_reg_or_stack (context, &state, stack, -+ sizeof (void *)); -+ } -+ else -+ { -+ n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ avalue[i] = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ state.ngrn = N_X_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ break; ++/* If using the C implementation of alloca, define if you know the ++ direction of stack growth for your system; otherwise it will be ++ automatically deduced at runtime. ++ STACK_DIRECTION > 0 => grows toward higher addresses ++ STACK_DIRECTION < 0 => grows toward lower addresses ++ STACK_DIRECTION = 0 => direction of growth unknown */ ++/* #undef STACK_DIRECTION */ + -+ default: -+ abort(); -+ } -+ } ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 + -+ flags = cif->flags; -+ if (flags & AARCH64_RET_IN_MEM) -+ rvalue = struct_rvalue; ++/* Define if symbols are underscored. */ ++#define SYMBOL_UNDERSCORE 1 + -+ fun (cif, rvalue, avalue, user_data); ++/* Define this if you are using Purify and want to suppress spurious messages. ++ */ ++/* #undef USING_PURIFY */ + -+ return flags; -+} ++/* Version number of package */ ++#define VERSION "3.99999" ++ ++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most ++ significant byte first (like Motorola and SPARC, unlike Intel). */ ++#if defined AC_APPLE_UNIVERSAL_BUILD ++# if defined __BIG_ENDIAN__ ++# define WORDS_BIGENDIAN 1 ++# endif ++#else ++# ifndef WORDS_BIGENDIAN ++/* # undef WORDS_BIGENDIAN */ ++# endif ++#endif + ++/* Define to `unsigned int' if does not define. */ ++/* #undef size_t */ + ++ ++#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) .hidden name ++#else ++#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) ++#endif ++#else ++#ifdef LIBFFI_ASM ++#define FFI_HIDDEN(name) ++#else ++#define FFI_HIDDEN ++#endif +#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/internal.h 2015-04-26 09:49:15.000000000 +0800 -@@ -0,0 +1,67 @@ -+/* -+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: + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. + -+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. */ + -+#define AARCH64_RET_VOID 0 -+#define AARCH64_RET_INT64 1 -+#define AARCH64_RET_INT128 2 ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-12-20 18:55:19.000000000 +0800 +@@ -0,0 +1,24 @@ ++#ifdef __arm64__ ++ ++#include + -+#define AARCH64_RET_UNUSED3 3 -+#define AARCH64_RET_UNUSED4 4 -+#define AARCH64_RET_UNUSED5 5 -+#define AARCH64_RET_UNUSED6 6 -+#define AARCH64_RET_UNUSED7 7 + -+/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, -+ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ -+#define AARCH64_RET_S4 8 -+#define AARCH64_RET_S3 9 -+#define AARCH64_RET_S2 10 -+#define AARCH64_RET_S1 11 ++#endif ++#ifdef __i386__ + -+#define AARCH64_RET_D4 12 -+#define AARCH64_RET_D3 13 -+#define AARCH64_RET_D2 14 -+#define AARCH64_RET_D1 15 ++#include + -+#define AARCH64_RET_Q4 16 -+#define AARCH64_RET_Q3 17 -+#define AARCH64_RET_Q2 18 -+#define AARCH64_RET_Q1 19 + -+/* Note that each of the sub-64-bit integers gets two entries. */ -+#define AARCH64_RET_UINT8 20 -+#define AARCH64_RET_UINT16 22 -+#define AARCH64_RET_UINT32 24 ++#endif ++#ifdef __arm__ + -+#define AARCH64_RET_SINT8 26 -+#define AARCH64_RET_SINT16 28 -+#define AARCH64_RET_SINT32 30 ++#include + -+#define AARCH64_RET_MASK 31 + -+#define AARCH64_RET_IN_MEM (1 << 5) -+#define AARCH64_RET_NEED_COPY (1 << 6) ++#endif ++#ifdef __x86_64__ + -+#define AARCH64_FLAG_ARG_V_BIT 7 -+#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) ++#include + -+#define N_X_ARG_REG 8 -+#define N_V_ARG_REG 8 -+#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S ---- orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S 2015-04-26 08:39:44.000000000 +0800 -@@ -0,0 +1,439 @@ ++ ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-12-20 22:05:32.000000000 +0800 +@@ -0,0 +1,85 @@ +#ifdef __arm64__ + +/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. @@ -35991,433 +26208,173 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/aarch64/sysv_arm64.S modified/ +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + -+#define LIBFFI_ASM -+#include -+#include -+#include -+#include "internal.h" -+ -+#ifdef HAVE_MACHINE_ASM_H -+#include -+#else -+#ifdef __USER_LABEL_PREFIX__ -+#define CONCAT1(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b -+ -+/* Use the right prefix for global labels. */ -+#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -+#else -+#define CNAME(x) x -+#endif -+#endif ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+#ifdef __AARCH64EB__ -+# define BE(X) X -+#else -+# define BE(X) 0 ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + ++#ifndef LIBFFI_ASM +#ifdef __ILP32__ -+#define PTR_REG(n) w##n ++#define FFI_SIZEOF_ARG 8 ++typedef unsigned long long ffi_arg; ++typedef signed long long ffi_sarg; +#else -+#define PTR_REG(n) x##n ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; +#endif + -+#ifdef __ILP32__ -+#define PTR_SIZE 4 -+#else -+#define PTR_SIZE 8 ++typedef enum ffi_abi ++ { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++ } ffi_abi; +#endif + -+ .text -+ .align 4 -+ -+/* ffi_call_SYSV -+ extern void ffi_call_SYSV (void *stack, void *frame, -+ void (*fn)(void), void *rvalue, -+ int flags, void *closure); -+ -+ Therefore on entry we have: ++/* ---- Definitions for closures ----------------------------------------- */ + -+ x0 stack -+ x1 frame -+ x2 fn -+ x3 rvalue -+ x4 flags -+ x5 closure -+*/ ++#define FFI_CLOSURES 1 ++#define FFI_NATIVE_RAW_API 0 + -+ cfi_startproc -+CNAME(ffi_call_SYSV): -+ /* Use a stack frame allocated by our caller. */ -+ cfi_def_cfa(x1, 32); -+ stp x29, x30, [x1] -+ mov x29, x1 -+ mov sp, x0 -+ cfi_def_cfa_register(x29) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++#if defined (FFI_EXEC_TRAMPOLINE_TABLE) && FFI_EXEC_TRAMPOLINE_TABLE + -+ mov x9, x2 /* save fn */ -+ mov x8, x3 /* install structure return */ -+#ifdef FFI_GO_CLOSURES -+ mov x18, x5 /* install static chain */ ++#ifdef __MACH__ ++#define FFI_TRAMPOLINE_SIZE 16 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 ++#else ++#error "No trampoline table implementation" +#endif -+ stp x3, x4, [x29, #16] /* save rvalue and flags */ -+ -+ /* Load the vector argument passing registers, if necessary. */ -+ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f -+ ldp q0, q1, [sp, #0] -+ ldp q2, q3, [sp, #32] -+ ldp q4, q5, [sp, #64] -+ ldp q6, q7, [sp, #96] -+1: -+ /* Load the core argument passing registers, including -+ the structure return pointer. */ -+ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] -+ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] -+ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] -+ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] -+ -+ /* Deallocate the context, leaving the stacked arguments. */ -+ add sp, sp, #CALL_CONTEXT_SIZE -+ -+ blr x9 /* call fn */ -+ -+ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ -+ -+ /* Partially deconstruct the stack frame. */ -+ mov sp, x29 -+ cfi_def_cfa_register (sp) -+ ldp x29, x30, [x29] -+ -+ /* Save the return value as directed. */ -+ adr x5, 0f -+ and w4, w4, #AARCH64_RET_MASK -+ add x5, x5, x4, lsl #3 -+ br x5 -+ -+ /* Note that each table entry is 2 insns, and thus 8 bytes. -+ For integer data, note that we're storing into ffi_arg -+ and therefore we want to extend to 64 bits; these types -+ have two consecutive entries allocated for them. */ -+ .align 4 -+0: ret /* VOID */ -+ nop -+1: str x0, [x3] /* INT64 */ -+ ret -+2: stp x0, x1, [x3] /* INT128 */ -+ ret -+3: brk #1000 /* UNUSED */ -+ ret -+4: brk #1000 /* UNUSED */ -+ ret -+5: brk #1000 /* UNUSED */ -+ ret -+6: brk #1000 /* UNUSED */ -+ ret -+7: brk #1000 /* UNUSED */ -+ ret -+8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ -+ ret -+9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ -+ ret -+10: stp s0, s1, [x3] /* S2 */ -+ ret -+11: str s0, [x3] /* S1 */ -+ ret -+12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ -+ ret -+13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ -+ ret -+14: stp d0, d1, [x3] /* D2 */ -+ ret -+15: str d0, [x3] /* D1 */ -+ ret -+16: str q3, [x3, #48] /* Q4 */ -+ nop -+17: str q2, [x3, #32] /* Q3 */ -+ nop -+18: stp q0, q1, [x3] /* Q2 */ -+ ret -+19: str q0, [x3] /* Q1 */ -+ ret -+20: uxtb w0, w0 /* UINT8 */ -+ str x0, [x3] -+21: ret /* reserved */ -+ nop -+22: uxth w0, w0 /* UINT16 */ -+ str x0, [x3] -+23: ret /* reserved */ -+ nop -+24: mov w0, w0 /* UINT32 */ -+ str x0, [x3] -+25: ret /* reserved */ -+ nop -+26: sxtb x0, w0 /* SINT8 */ -+ str x0, [x3] -+27: ret /* reserved */ -+ nop -+28: sxth x0, w0 /* SINT16 */ -+ str x0, [x3] -+29: ret /* reserved */ -+ nop -+30: sxtw x0, w0 /* SINT32 */ -+ str x0, [x3] -+31: ret /* reserved */ -+ nop + -+ cfi_endproc -+ -+ .globl CNAME(ffi_call_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_call_SYSV), #function -+ .hidden CNAME(ffi_call_SYSV) -+ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) ++#else ++#define FFI_TRAMPOLINE_SIZE 24 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE +#endif + -+/* ffi_closure_SYSV ++/* ---- Internal ---- */ + -+ Closure invocation glue. This is the low level code invoked directly by -+ the closure trampoline to setup and call a closure. ++#if defined (__APPLE__) ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs ++#else ++/* iOS reserves x18 for the system. Disable Go closures until ++ a new static chain is chosen. */ ++#define FFI_GO_CLOSURES 1 ++#endif + -+ On entry x17 points to a struct ffi_closure, x16 has been clobbered -+ all other registers are preserved. ++#define FFI_TARGET_HAS_COMPLEX_TYPE + -+ We allocate a call context and save the argument passing registers, -+ then invoked the generic C ffi_closure_SYSV_inner() function to do all -+ the real work, on return we load the result passing registers back from -+ the call context. -+*/ ++#endif + -+#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) + -+ .align 4 -+CNAME(ffi_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-12-20 22:05:39.000000000 +0800 +@@ -0,0 +1,87 @@ ++#ifdef __arm__ + -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012 Anthony Green ++ Copyright (c) 2010 CodeSourcery ++ Copyright (c) 1996-2003 Red Hat, Inc. + -+ .globl CNAME(ffi_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV_V), #function -+ .hidden CNAME(ffi_closure_SYSV_V) -+ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) -+#endif ++ Target configuration macros for ARM. + -+ .align 4 -+ cfi_startproc -+CNAME(ffi_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp ++ 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: + -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ -+ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ -+.Ldo_closure: -+ add x3, sp, #16 /* load context */ -+ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ -+ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ -+ mov x6, x8 /* load struct_rval */ -+ bl CNAME(ffi_closure_SYSV_inner) ++ 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. + -+ /* Load the return value as directed. */ -+ adr x1, 0f -+ and w0, w0, #AARCH64_RET_MASK -+ add x1, x1, x0, lsl #3 -+ add x3, sp, #16+CALL_CONTEXT_SIZE -+ br x1 ++ ----------------------------------------------------------------------- */ + -+ /* Note that each table entry is 2 insns, and thus 8 bytes. */ -+ .align 4 -+0: b 99f /* VOID */ -+ nop -+1: ldr x0, [x3] /* INT64 */ -+ b 99f -+2: ldp x0, x1, [x3] /* INT128 */ -+ b 99f -+3: brk #1000 /* UNUSED */ -+ nop -+4: brk #1000 /* UNUSED */ -+ nop -+5: brk #1000 /* UNUSED */ -+ nop -+6: brk #1000 /* UNUSED */ -+ nop -+7: brk #1000 /* UNUSED */ -+ nop -+8: ldr s3, [x3, #12] /* S4 */ -+ nop -+9: ldr s2, [x2, #8] /* S3 */ -+ nop -+10: ldp s0, s1, [x3] /* S2 */ -+ b 99f -+11: ldr s0, [x3] /* S1 */ -+ b 99f -+12: ldr d3, [x3, #24] /* D4 */ -+ nop -+13: ldr d2, [x3, #16] /* D3 */ -+ nop -+14: ldp d0, d1, [x3] /* D2 */ -+ b 99f -+15: ldr d0, [x3] /* D1 */ -+ b 99f -+16: ldr q3, [x3, #48] /* Q4 */ -+ nop -+17: ldr q2, [x3, #32] /* Q3 */ -+ nop -+18: ldp q0, q1, [x3] /* Q2 */ -+ b 99f -+19: ldr q0, [x3] /* Q1 */ -+ b 99f -+20: ldrb w0, [x3, #BE(7)] /* UINT8 */ -+ b 99f -+21: brk #1000 /* reserved */ -+ nop -+22: ldrh w0, [x3, #BE(6)] /* UINT16 */ -+ b 99f -+23: brk #1000 /* reserved */ -+ nop -+24: ldr w0, [x3, #BE(4)] /* UINT32 */ -+ b 99f -+25: brk #1000 /* reserved */ -+ nop -+26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ -+ b 99f -+27: brk #1000 /* reserved */ -+ nop -+28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ -+ b 99f -+29: brk #1000 /* reserved */ -+ nop -+30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ -+ nop -+31: /* reserved */ -+99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS -+ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) -+ cfi_restore (x29) -+ cfi_restore (x30) -+ ret -+ cfi_endproc ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+ .globl CNAME(ffi_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV), #function -+ .hidden CNAME(ffi_closure_SYSV) -+ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ .align 12 -+CNAME(ffi_closure_trampoline_table_page): -+ .rept 16384 / FFI_TRAMPOLINE_SIZE -+ adr x17, -16384 -+ adr x16, -16380 -+ ldr x16, [x16] -+ ldr x17, [x17] -+ br x16 -+ .endr -+ -+ .globl CNAME(ffi_closure_trampoline_table_page) -+ #ifdef __ELF__ -+ .type CNAME(ffi_closure_trampoline_table_page), #function -+ .hidden CNAME(ffi_closure_trampoline_table_page) -+ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) -+ #endif -+#endif ++#ifndef LIBFFI_ASM ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; + -+#ifdef FFI_GO_CLOSURES -+ .align 4 -+CNAME(ffi_go_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) ++typedef enum ffi_abi { ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV, ++ FFI_VFP, ++ FFI_LAST_ABI, ++#ifdef __ARM_PCS_VFP ++ FFI_DEFAULT_ABI = FFI_VFP, ++#else ++ FFI_DEFAULT_ABI = FFI_SYSV, ++#endif ++} ffi_abi; ++#endif + -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc ++#define FFI_EXTRA_CIF_FIELDS \ ++ int vfp_used; \ ++ unsigned short vfp_reg_free, vfp_nargs; \ ++ signed char vfp_args[16] \ + -+ .globl CNAME(ffi_go_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV_V), #function -+ .hidden CNAME(ffi_go_closure_SYSV_V) -+ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) -+#endif ++#define FFI_TARGET_SPECIFIC_VARIADIC ++#define FFI_TARGET_HAS_COMPLEX_TYPE + -+ .align 4 -+ cfi_startproc -+CNAME(ffi_go_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp ++/* ---- Definitions for closures ----------------------------------------- */ + -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++#define FFI_NATIVE_RAW_API 0 + -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ -+ mov x2, x18 /* load user_data */ -+ b .Ldo_closure -+ cfi_endproc ++#if defined (FFI_EXEC_TRAMPOLINE_TABLE) && FFI_EXEC_TRAMPOLINE_TABLE + -+ .globl CNAME(ffi_go_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV), #function -+ .hidden CNAME(ffi_go_closure_SYSV) -+ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) ++#ifdef __MACH__ ++#define FFI_TRAMPOLINE_SIZE 12 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET 8 ++#else ++#error "No trampoline table implementation" +#endif -+#endif /* FFI_GO_CLOSURES */ + -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits ++#else ++#define FFI_TRAMPOLINE_SIZE 12 ++#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE +#endif + ++#endif + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/closures.c modified/Modules/_ctypes/libffi_ios_aarch64/closures.c ---- orig/Modules/_ctypes/libffi_ios_aarch64/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/closures.c 2015-04-26 08:39:05.000000000 +0800 -@@ -0,0 +1,688 @@ -+/* ----------------------------------------------------------------------- -+ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. -+ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,144 @@ ++#ifdef __i386__ + -+ Code to allocate and deallocate memory for closures. ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. ++ ++ Target configuration macros for x86 and x86-64. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -36438,716 +26395,668 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/closures.c modified/Modules/_c + 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. -+ ----------------------------------------------------------------------- */ -+ -+#if defined __linux__ && !defined _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif + -+#include -+#include ++ ----------------------------------------------------------------------- */ + -+#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -+# if __gnu_linux__ && !defined(__ANDROID__) -+/* This macro indicates it may be forbidden to map anonymous memory -+ with both write and execute permission. Code compiled when this -+ option is defined will attempt to map such pages once, but if it -+ fails, it falls back to creating a temporary file in a writable and -+ executable filesystem and mapping pages from it into separate -+ locations in the virtual memory space, one location writable and -+ another executable. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# define HAVE_MNTENT 1 -+# endif -+# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -+/* Windows systems may have Data Execution Protection (DEP) enabled, -+ which requires the use of VirtualMalloc/VirtualFree to alloc/free -+ executable memory. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# endif -+#endif ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -+# ifdef __linux__ -+/* When defined to 1 check for SELinux and if SELinux is active, -+ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that -+ might cause audit messages. */ -+# define FFI_MMAP_EXEC_SELINUX 1 -+# endif ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + -+#if FFI_CLOSURES -+ -+# if FFI_EXEC_TRAMPOLINE_TABLE -+ -+// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. ++/* ---- System specific configurations ----------------------------------- */ + -+# elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY + -+#define USE_LOCKS 1 -+#define USE_DL_PREFIX 1 -+#ifdef __GNUC__ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 1 -+#endif ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 +#endif + -+/* We need to use mmap, not sbrk. */ -+#define HAVE_MORECORE 0 -+ -+/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -+#define HAVE_MREMAP 0 -+ -+/* We have no use for this, so save some code and data. */ -+#define NO_MALLINFO 1 -+ -+/* We need all allocations to be in regular segments, otherwise we -+ lose track of the corresponding code address. */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+ -+/* Don't allocate more than a page unless needed. */ -+#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) -+ -+#if FFI_CLOSURE_TEST -+/* Don't release single pages, to avoid a worst-case scenario of -+ continuously allocating and releasing single pages, but release -+ pairs of pages, which should do just as well given that allocations -+ are likely to be small. */ -+#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ +#endif + -+#include -+#include -+#include -+#include ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION +#ifndef _MSC_VER -+#include ++#define FFI_TARGET_HAS_COMPLEX_TYPE +#endif -+#include -+#include -+#if !defined(X86_WIN32) && !defined(X86_WIN64) -+#ifdef HAVE_MNTENT -+#include -+#endif /* HAVE_MNTENT */ -+#include -+#include -+ -+/* We don't want sys/mman.h to be included after we redefine mmap and -+ dlmunmap. */ -+#include -+#define LACKS_SYS_MMAN_H 1 -+ -+#if FFI_MMAP_EXEC_SELINUX -+#include -+#include -+ -+static int selinux_enabled = -1; -+ -+static int -+selinux_enabled_check (void) -+{ -+ struct statfs sfs; -+ FILE *f; -+ char *buf = NULL; -+ size_t len = 0; -+ -+ if (statfs ("/selinux", &sfs) >= 0 -+ && (unsigned int) sfs.f_type == 0xf97cff8cU) -+ return 1; -+ f = fopen ("/proc/mounts", "r"); -+ if (f == NULL) -+ return 0; -+ while (getline (&buf, &len, f) >= 0) -+ { -+ char *p = strchr (buf, ' '); -+ if (p == NULL) -+ break; -+ p = strchr (p + 1, ' '); -+ if (p == NULL) -+ break; -+ if (strncmp (p + 1, "selinuxfs ", 10) == 0) -+ { -+ free (buf); -+ fclose (f); -+ return 1; -+ } -+ } -+ free (buf); -+ fclose (f); -+ return 0; -+} + -+#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ -+ : (selinux_enabled = selinux_enabled_check ())) ++/* ---- Generic type definitions ----------------------------------------- */ + ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; +#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif + -+#define is_selinux_enabled() 0 -+ -+#endif /* !FFI_MMAP_EXEC_SELINUX */ -+ -+/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ -+#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#include -+ -+static int emutramp_enabled = -1; -+ -+static int -+emutramp_enabled_check (void) -+{ -+ char *buf = NULL; -+ size_t len = 0; -+ FILE *f; -+ int ret; -+ f = fopen ("/proc/self/status", "r"); -+ if (f == NULL) -+ return 0; -+ ret = 0; -+ -+ while (getline (&buf, &len, f) != -1) -+ if (!strncmp (buf, "PaX:", 4)) -+ { -+ char emutramp; -+ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) -+ ret = (emutramp == 'E'); -+ break; -+ } -+ free (buf); -+ fclose (f); -+ return ret; -+} -+ -+#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ -+ : (emutramp_enabled = emutramp_enabled_check ())) -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+#elif defined (__CYGWIN__) || defined(__INTERIX) -+ -+#include -+ -+/* Cygwin is Linux-like, but not quite that Linux-like. */ -+#define is_selinux_enabled() 0 -+ -+#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ -+ -+#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#define is_emutramp_enabled() 0 -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Declare all functions defined in dlmalloc.c as static. */ -+static void *dlmalloc(size_t); -+static void dlfree(void*); -+static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -+static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -+static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -+static void *dlvalloc(size_t) MAYBE_UNUSED; -+static int dlmallopt(int, int) MAYBE_UNUSED; -+static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -+static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -+static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -+static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -+static void *dlpvalloc(size_t) MAYBE_UNUSED; -+static int dlmalloc_trim(size_t) MAYBE_UNUSED; -+static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -+static void dlmalloc_stats(void) MAYBE_UNUSED; -+ -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+/* Use these for mmap and munmap within dlmalloc.c. */ -+static void *dlmmap(void *, size_t, int, int, int, off_t); -+static int dlmunmap(void *, size_t); -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ -+ -+#define mmap dlmmap -+#define munmap dlmunmap -+ -+#include "dlmalloc.c" -+ -+#undef mmap -+#undef munmap ++typedef enum ffi_abi { ++#if defined(X86_WIN64) ++ FFI_FIRST_ABI = 0, ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 + -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) ++#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++ FFI_FIRST_ABI = 1, ++ FFI_UNIX64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_UNIX64 + -+/* A mutex used to synchronize access to *exec* variables in this file. */ -+static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; ++#elif defined(X86_WIN32) ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_STDCALL = 2, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_MS_CDECL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_STDCALL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_MS_CDECL = 8, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++} ffi_abi; ++#endif + -+/* A file descriptor of a temporary file from which we'll map -+ executable pages. */ -+static int execfd = -1; ++/* ---- Definitions for closures ----------------------------------------- */ + -+/* The amount of space already allocated from the temporary file. */ -+static size_t execsize = 0; ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 + -+/* Open a temporary file name, and immediately unlink it. */ -+static int -+open_temp_exec_file_name (char *name, int flags) -+{ -+ int fd; ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) + -+#ifdef HAVE_MKOSTEMP -+ fd = mkostemp (name, flags); ++#if defined (X86_64) || defined(X86_WIN64) \ ++ || (defined (__x86_64__) && defined (X86_DARWIN)) ++# define FFI_TRAMPOLINE_SIZE 24 ++# define FFI_NATIVE_RAW_API 0 +#else -+ fd = mkstemp (name); ++# define FFI_TRAMPOLINE_SIZE 12 ++# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ +#endif + -+ if (fd != -1) -+ unlink (name); ++#endif + -+ return fd; -+} + -+/* Open a temporary file in the named directory. */ -+static int -+open_temp_exec_file_dir (const char *dir) -+{ -+ static const char suffix[] = "/ffiXXXXXX"; -+ int lendir, flags; -+ char *tempname; -+#ifdef O_TMPFILE -+ int fd; -+#endif + -+#ifdef O_CLOEXEC -+ flags = O_CLOEXEC; -+#else -+ flags = 0; +#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h +--- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-12-20 18:55:29.000000000 +0800 +@@ -0,0 +1,144 @@ ++#ifdef __x86_64__ + -+#ifdef O_TMPFILE -+ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); -+ /* If the running system does not support the O_TMPFILE flag then retry without it. */ -+ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { -+ return fd; -+ } else { -+ errno = 0; -+ } -+#endif ++/* -----------------------------------------------------------------*-C-*- ++ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green ++ Copyright (c) 1996-2003, 2010 Red Hat, Inc. ++ Copyright (C) 2008 Free Software Foundation, Inc. + -+ lendir = strlen (dir); -+ tempname = __builtin_alloca (lendir + sizeof (suffix)); ++ Target configuration macros for x86 and x86-64. + -+ if (!tempname) -+ return -1; ++ 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: + -+ memcpy (tempname, dir, lendir); -+ memcpy (tempname + lendir, suffix, sizeof (suffix)); ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ return open_temp_exec_file_name (tempname, flags); -+} ++ 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. + -+/* Open a temporary file in the directory in the named environment -+ variable. */ -+static int -+open_temp_exec_file_env (const char *envvar) -+{ -+ const char *value = getenv (envvar); ++ ----------------------------------------------------------------------- */ + -+ if (!value) -+ return -1; ++#ifndef LIBFFI_TARGET_H ++#define LIBFFI_TARGET_H + -+ return open_temp_exec_file_dir (value); -+} ++#ifndef LIBFFI_H ++#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." ++#endif + -+#ifdef HAVE_MNTENT -+/* Open a temporary file in an executable and writable mount point -+ listed in the mounts file. Subsequent calls with the same mounts -+ keep searching for mount points in the same file. Providing NULL -+ as the mounts file closes the file. */ -+static int -+open_temp_exec_file_mnt (const char *mounts) -+{ -+ static const char *last_mounts; -+ static FILE *last_mntent; ++/* ---- System specific configurations ----------------------------------- */ + -+ if (mounts != last_mounts) -+ { -+ if (last_mntent) -+ endmntent (last_mntent); ++/* For code common to all platforms on x86 and x86_64. */ ++#define X86_ANY + -+ last_mounts = mounts; ++#if defined (X86_64) && defined (__i386__) ++#undef X86_64 ++#define X86 ++#endif + -+ if (mounts) -+ last_mntent = setmntent (mounts, "r"); -+ else -+ last_mntent = NULL; -+ } ++#ifdef X86_WIN64 ++#define FFI_SIZEOF_ARG 8 ++#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ ++#endif + -+ if (!last_mntent) -+ return -1; ++#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++#ifndef _MSC_VER ++#define FFI_TARGET_HAS_COMPLEX_TYPE ++#endif + -+ for (;;) -+ { -+ int fd; -+ struct mntent mnt; -+ char buf[MAXPATHLEN * 3]; ++/* ---- Generic type definitions ----------------------------------------- */ + -+ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) -+ return -1; ++#ifndef LIBFFI_ASM ++#ifdef X86_WIN64 ++#ifdef _MSC_VER ++typedef unsigned __int64 ffi_arg; ++typedef __int64 ffi_sarg; ++#else ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#endif ++#else ++#if defined __x86_64__ && defined __ILP32__ ++#define FFI_SIZEOF_ARG 8 ++#define FFI_SIZEOF_JAVA_RAW 4 ++typedef unsigned long long ffi_arg; ++typedef long long ffi_sarg; ++#else ++typedef unsigned long ffi_arg; ++typedef signed long ffi_sarg; ++#endif ++#endif + -+ if (hasmntopt (&mnt, "ro") -+ || hasmntopt (&mnt, "noexec") -+ || access (mnt.mnt_dir, W_OK)) -+ continue; ++typedef enum ffi_abi { ++#if defined(X86_WIN64) ++ FFI_FIRST_ABI = 0, ++ FFI_WIN64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_WIN64 + -+ fd = open_temp_exec_file_dir (mnt.mnt_dir); ++#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) ++ FFI_FIRST_ABI = 1, ++ FFI_UNIX64, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_UNIX64 + -+ if (fd != -1) -+ return fd; -+ } -+} -+#endif /* HAVE_MNTENT */ ++#elif defined(X86_WIN32) ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_STDCALL = 2, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_MS_CDECL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_MS_CDECL ++#else ++ FFI_FIRST_ABI = 0, ++ FFI_SYSV = 1, ++ FFI_THISCALL = 3, ++ FFI_FASTCALL = 4, ++ FFI_STDCALL = 5, ++ FFI_PASCAL = 6, ++ FFI_REGISTER = 7, ++ FFI_MS_CDECL = 8, ++ FFI_LAST_ABI, ++ FFI_DEFAULT_ABI = FFI_SYSV ++#endif ++} ffi_abi; ++#endif + -+/* Instructions to look for a location to hold a temporary file that -+ can be mapped in for execution. */ -+static struct -+{ -+ int (*func)(const char *); -+ const char *arg; -+ int repeat; -+} open_temp_exec_file_opts[] = { -+ { open_temp_exec_file_env, "TMPDIR", 0 }, -+ { open_temp_exec_file_dir, "/tmp", 0 }, -+ { open_temp_exec_file_dir, "/var/tmp", 0 }, -+ { open_temp_exec_file_dir, "/dev/shm", 0 }, -+ { open_temp_exec_file_env, "HOME", 0 }, -+#ifdef HAVE_MNTENT -+ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, -+ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -+#endif /* HAVE_MNTENT */ -+}; ++/* ---- Definitions for closures ----------------------------------------- */ + -+/* Current index into open_temp_exec_file_opts. */ -+static int open_temp_exec_file_opts_idx = 0; ++#define FFI_CLOSURES 1 ++#define FFI_GO_CLOSURES 1 ++ ++#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) ++#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) ++#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) ++#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) ++ ++#if defined (X86_64) || defined(X86_WIN64) \ ++ || (defined (__x86_64__) && defined (X86_DARWIN)) ++# define FFI_TRAMPOLINE_SIZE 24 ++# define FFI_NATIVE_RAW_API 0 ++#else ++# define FFI_TRAMPOLINE_SIZE 12 ++# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ ++#endif + -+/* Reset a current multi-call func, then advances to the next entry. -+ If we're at the last, go back to the first and return nonzero, -+ otherwise return zero. */ -+static int -+open_temp_exec_file_opts_next (void) -+{ -+ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); ++#endif + -+ open_temp_exec_file_opts_idx++; -+ if (open_temp_exec_file_opts_idx -+ == (sizeof (open_temp_exec_file_opts) -+ / sizeof (*open_temp_exec_file_opts))) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ return 1; -+ } + -+ return 0; -+} + -+/* Return a file descriptor of a temporary zero-sized file in a -+ writable and executable filesystem. */ -+static int -+open_temp_exec_file (void) -+{ -+ int fd; ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c +--- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-12-20 18:49:11.000000000 +0800 +@@ -0,0 +1,374 @@ ++/* ----------------------------------------------------------------------- ++ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. + -+ do -+ { -+ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func -+ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); ++ Cloned from raw_api.c + -+ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat -+ || fd == -1) -+ { -+ if (open_temp_exec_file_opts_next ()) -+ break; -+ } -+ } -+ while (fd == -1); ++ Raw_api.c author: Kresten Krab Thorup ++ Java_raw_api.c author: Hans-J. Boehm + -+ return fd; -+} ++ $Id $ + -+/* Map in a chunk of memory from the temporary exec file into separate -+ locations in the virtual memory address space, one writable and one -+ executable. Returns the address of the writable portion, after -+ storing an offset to the corresponding executable portion at the -+ last word of the requested chunk. */ -+static void * -+dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -+{ -+ void *ptr; ++ 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: + -+ if (execfd == -1) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ retry_open: -+ execfd = open_temp_exec_file (); -+ if (execfd == -1) -+ return MFAIL; -+ } ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+ offset = execsize; ++ 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. ++ ----------------------------------------------------------------------- */ + -+ if (ftruncate (execfd, offset + length)) -+ return MFAIL; ++/* This defines a Java- and 64-bit specific variant of the raw API. */ ++/* It assumes that "raw" argument blocks look like Java stacks on a */ ++/* 64-bit machine. Arguments that can be stored in a single stack */ ++/* stack slots (longs, doubles) occupy 128 bits, but only the first */ ++/* 64 bits are actually used. */ + -+ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); -+ flags |= MAP_SHARED; ++#include ++#include ++#include + -+ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, -+ flags, execfd, offset); -+ if (ptr == MFAIL) -+ { -+ if (!offset) -+ { -+ close (execfd); -+ goto retry_open; -+ } -+ ftruncate (execfd, offset); -+ return MFAIL; -+ } -+ else if (!offset -+ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts_next (); ++#if !defined(NO_JAVA_RAW_API) + -+ start = mmap (start, length, prot, flags, execfd, offset); ++size_t ++ffi_java_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; + -+ if (start == MFAIL) ++ ffi_type **at = cif->arg_types; ++ ++ for (i = cif->nargs-1; i >= 0; i--, at++) + { -+ munmap (ptr, length); -+ ftruncate (execfd, offset); -+ return start; ++ switch((*at) -> type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ result += 2 * FFI_SIZEOF_JAVA_RAW; ++ break; ++ case FFI_TYPE_STRUCT: ++ /* No structure parameters in Java. */ ++ abort(); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ result += FFI_SIZEOF_JAVA_RAW; ++ } + } + -+ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; -+ -+ execsize += length; -+ -+ return start; ++ return result; +} + -+/* Map in a writable and executable chunk of memory if possible. -+ Failing that, fall back to dlmmap_locked. */ -+static void * -+dlmmap (void *start, size_t length, int prot, -+ int flags, int fd, off_t offset) -+{ -+ void *ptr; + -+ assert (start == NULL && length % malloc_getpagesize == 0 -+ && prot == (PROT_READ | PROT_WRITE) -+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) -+ && fd == -1 && offset == 0); ++void ++ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+#if FFI_CLOSURE_TEST -+ printf ("mapping in %zi\n", length); -+#endif ++#if WORDS_BIGENDIAN + -+ if (execfd == -1 && is_emutramp_enabled ()) ++ for (i = 0; i < cif->nargs; i++, tp++, args++) + { -+ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); -+ return ptr; -+ } ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + 3); ++ break; + -+ if (execfd == -1 && !is_selinux_enabled ()) -+ { -+ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + 2); ++ break; + -+ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) -+ /* Cool, no need to mess with separate segments. */ -+ return ptr; ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void *)raw; ++ raw += 2; ++ break; ++#endif + -+ /* If MREMAP_DUP is ever introduced and implemented, try mmap -+ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with -+ MREMAP_DUP and prot at this point. */ -+ } ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; + -+ if (execsize == 0 || execfd == -1) -+ { -+ pthread_mutex_lock (&open_temp_exec_file_mutex); -+ ptr = dlmmap_locked (start, length, prot, flags, offset); -+ pthread_mutex_unlock (&open_temp_exec_file_mutex); ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); + -+ return ptr; ++ default: ++ *args = raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++ } + } + -+ return dlmmap_locked (start, length, prot, flags, offset); -+} -+ -+/* Release memory at the given address, as well as the corresponding -+ executable page if it's separate. */ -+static int -+dlmunmap (void *start, size_t length) -+{ -+ /* We don't bother decreasing execsize or truncating the file, since -+ we can't quite tell whether we're unmapping the end of the file. -+ We don't expect frequent deallocation anyway. If we did, we -+ could locate pages in the file by writing to the pages being -+ deallocated and checking that the file contents change. -+ Yuck. */ -+ msegmentptr seg = segment_holding (gm, start); -+ void *code; ++#else /* WORDS_BIGENDIAN */ + -+#if FFI_CLOSURE_TEST -+ printf ("unmapping %zi\n", length); -+#endif ++#if !PDP + -+ if (seg && (code = add_segment_exec_offset (start, seg)) != start) ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) + { -+ int ret = munmap (code, length); -+ if (ret) -+ return ret; ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ switch((*tp)->type) { ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ *args = (void*) raw; ++ raw += 2; ++ break; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); ++ default: ++ *args = (void*) raw++; ++ } ++#else /* FFI_SIZEOF_JAVA_RAW != 8 */ ++ *args = (void*) raw; ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ + } + -+ return munmap (start, length); ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ ++ ++#endif /* WORDS_BIGENDIAN */ +} + -+#if FFI_CLOSURE_FREE_CODE -+/* Return segment holding given code address. */ -+static msegmentptr -+segment_holding_code (mstate m, char* addr) ++void ++ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) +{ -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= add_segment_exec_offset (sp->base, sp) -+ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} ++ unsigned i; ++ ffi_type **tp = cif->arg_types; ++ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT8*) (*args); ++#else ++ (raw++)->uint = *(UINT8*) (*args); +#endif ++ break; + -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ ++ case FFI_TYPE_SINT8: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT8*) (*args); ++#else ++ (raw++)->sint = *(SINT8*) (*args); ++#endif ++ break; + -+/* Allocate a chunk of memory with the given size. Returns a pointer -+ to the writable address, and sets *CODE to the executable -+ corresponding virtual address. */ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ void *ptr; ++ case FFI_TYPE_UINT16: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT16*) (*args); ++#else ++ (raw++)->uint = *(UINT16*) (*args); ++#endif ++ break; + -+ if (!code) -+ return NULL; ++ case FFI_TYPE_SINT16: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT16*) (*args); ++#else ++ (raw++)->sint = *(SINT16*) (*args); ++#endif ++ break; + -+ ptr = dlmalloc (size); ++ case FFI_TYPE_UINT32: ++#if WORDS_BIGENDIAN ++ *(UINT32*)(raw++) = *(UINT32*) (*args); ++#else ++ (raw++)->uint = *(UINT32*) (*args); ++#endif ++ break; + -+ if (ptr) -+ { -+ msegmentptr seg = segment_holding (gm, ptr); ++ case FFI_TYPE_SINT32: ++#if WORDS_BIGENDIAN ++ *(SINT32*)(raw++) = *(SINT32*) (*args); ++#else ++ (raw++)->sint = *(SINT32*) (*args); ++#endif ++ break; + -+ *code = add_segment_exec_offset (ptr, seg); -+ } ++ case FFI_TYPE_FLOAT: ++ (raw++)->flt = *(FLOAT32*) (*args); ++ break; + -+ return ptr; -+} ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_DOUBLE: ++ raw->uint = *(UINT64*) (*args); ++ raw += 2; ++ break; ++#endif + -+/* Release a chunk of memory allocated with ffi_closure_alloc. If -+ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the -+ writable or the executable address given. Otherwise, only the -+ writable address can be provided here. */ -+void -+ffi_closure_free (void *ptr) -+{ -+#if FFI_CLOSURE_FREE_CODE -+ msegmentptr seg = segment_holding_code (gm, ptr); ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; + -+ if (seg) -+ ptr = sub_segment_exec_offset (ptr, seg); ++ default: ++#if FFI_SIZEOF_JAVA_RAW == 8 ++ FFI_ASSERT(0); /* Should have covered all cases */ ++#else ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ++ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); +#endif -+ -+ dlfree (ptr); ++ } ++ } +} + ++#if !FFI_NATIVE_RAW_API + -+#if FFI_CLOSURE_TEST -+/* Do some internal sanity testing to make sure allocation and -+ deallocation of pages are working as intended. */ -+int main () ++static void ++ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) +{ -+ void *p[3]; -+#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -+#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) -+ GET (0, malloc_getpagesize / 2); -+ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); -+ PUT (1); -+ GET (1, 2 * malloc_getpagesize); -+ GET (2, malloc_getpagesize / 2); -+ PUT (1); -+ PUT (0); -+ PUT (2); -+ return 0; -+} -+#endif /* FFI_CLOSURE_TEST */ -+# else /* ! FFI_MMAP_EXEC_WRIT */ -+ -+/* On many systems, memory returned by malloc is writable and -+ executable, so just use it. */ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue <<= 32; ++ break; + -+#include ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++#if FFI_SIZEOF_JAVA_RAW == 4 ++ case FFI_TYPE_POINTER: ++#endif ++ *(SINT64 *)rvalue <<= 32; ++ break; + -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ if (!code) -+ return NULL; ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); + -+ return *code = malloc (size); ++ default: ++ break; ++ } ++#endif +} + -+void -+ffi_closure_free (void *ptr) ++static void ++ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) +{ -+ free (ptr); -+} -+ -+# endif /* ! FFI_MMAP_EXEC_WRIT */ -+#endif /* FFI_CLOSURES */ -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi.h 2015-04-26 08:38:36.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ ++#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ *(UINT64 *)rvalue >>= 32; ++ break; + -+#include ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_INT: ++ *(SINT64 *)rvalue >>= 32; ++ break; + ++ case FFI_TYPE_COMPLEX: ++ /* Not supported yet. */ ++ abort(); + ++ default: ++ break; ++ } +#endif -+#ifdef __i386__ ++} + -+#include ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ + ++void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ ffi_java_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_java_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++ ffi_java_rvalue_to_raw (cif, rvalue); ++} + -+#endif -+#ifdef __arm__ ++#if FFI_CLOSURES /* base system provides closures */ + -+#include ++static void ++ffi_java_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ ++ ffi_java_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); ++ ffi_java_raw_to_rvalue (cif, rvalue); ++} + ++ffi_status ++ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; + -+#endif -+#ifdef __x86_64__ ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_java_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+#include ++ return status; ++} + ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h 2015-04-26 08:38:46.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __arm64__ ++ffi_status ++ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); ++} + -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ ++#endif /* !NO_JAVA_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c +--- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-12-20 18:49:22.000000000 +0800 +@@ -0,0 +1,242 @@ ++/* ----------------------------------------------------------------------- ++ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green ++ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. + -+ 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: ++ 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: + -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF @@ -37157,1056 +27066,1454 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_arm64.h modified/M + 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. -+ + ----------------------------------------------------------------------- */ + -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. ++#include ++#include ++#include + -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. ++/* Round up to FFI_SIZEOF_ARG. */ + -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. ++#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) + -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. ++/* Perform machine independent initialization of aggregate type ++ specifications. */ + -+ More details on the raw and cloure API can be found in: ++static ffi_status initialize_aggregate(ffi_type *arg) ++{ ++ ffi_type **ptr; + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html ++ if (UNLIKELY(arg == NULL || arg->elements == NULL)) ++ return FFI_BAD_TYPEDEF; + -+ and ++ arg->size = 0; ++ arg->alignment = 0; + -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ ++ ptr = &(arg->elements[0]); + -+#ifndef LIBFFI_H -+#define LIBFFI_H ++ if (UNLIKELY(ptr == 0)) ++ return FFI_BAD_TYPEDEF; + -+#ifdef __cplusplus -+extern "C" { -+#endif ++ while ((*ptr) != NULL) ++ { ++ if (UNLIKELY(((*ptr)->size == 0) ++ && (initialize_aggregate((*ptr)) != FFI_OK))) ++ return FFI_BAD_TYPEDEF; + -+/* Specify which architecture libffi is configured for. */ -+#ifndef AARCH64 -+#define AARCH64 -+#endif ++ /* Perform a sanity check on the argument type */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+/* ---- System configuration information --------------------------------- */ ++ arg->size = ALIGN(arg->size, (*ptr)->alignment); ++ arg->size += (*ptr)->size; + -+#include ++ arg->alignment = (arg->alignment > (*ptr)->alignment) ? ++ arg->alignment : (*ptr)->alignment; + -+#ifndef LIBFFI_ASM ++ ptr++; ++ } + -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) ++ /* Structure size includes tail padding. This is important for ++ structures that fit in one register on ABIs like the PowerPC64 ++ Linux ABI that right justify small structs in a register. ++ It's also needed for nested structure layout, for example ++ struct A { long a; char b; }; struct B { struct A x; char y; }; ++ should find y at an offset of 2*sizeof(long) and result in a ++ total size of 3*sizeof(long). */ ++ arg->size = ALIGN (arg->size, arg->alignment); ++ ++ /* On some targets, the ABI defines that structures have an additional ++ alignment beyond the "natural" one based on their elements. */ ++#ifdef FFI_AGGREGATE_ALIGNMENT ++ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) ++ arg->alignment = FFI_AGGREGATE_ALIGNMENT; +#endif + -+#include -+#include ++ if (arg->size == 0) ++ return FFI_BAD_TYPEDEF; ++ else ++ return FFI_OK; ++} + -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ ++#ifndef __CRIS__ ++/* The CRIS ABI specifies structure elements to have byte ++ alignment only, so it completely overrides this functions, ++ which assumes "natural" alignment and padding. */ + -+#define FFI_64_BIT_MAX 9223372036854775807 ++/* Perform machine independent ffi_cif preparation, then call ++ machine dependent routine. */ + -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif ++/* For non variadic functions isvariadic should be 0 and ++ nfixedargs==ntotalargs. + -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ ++ For variadic calls, isvariadic should be 1 and nfixedargs ++ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ + -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; + -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif ++ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, ++ unsigned int isvariadic, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ unsigned bytes = 0; ++ unsigned int i; ++ ffi_type **ptr; + -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif ++ FFI_ASSERT(cif != NULL); ++ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); ++ FFI_ASSERT(nfixedargs <= ntotalargs); + -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif ++ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) ++ return FFI_BAD_ABI; + -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif ++ cif->abi = abi; ++ cif->arg_types = atypes; ++ cif->nargs = ntotalargs; ++ cif->rtype = rtype; + -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif ++ cif->flags = 0; + -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern ++#if HAVE_LONG_DOUBLE_VARIANT ++ ffi_prep_types (abi); +#endif + -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; ++ /* Initialize the return type if necessary */ ++ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; + -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if (rtype->type == FFI_TYPE_COMPLEX) ++ abort(); +#endif ++ /* Perform a sanity check on the return type */ ++ FFI_ASSERT_VALID_TYPE(cif->rtype); + -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double ++ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ /* Make space for the return structure pointer */ ++ if (cif->rtype->type == FFI_TYPE_STRUCT ++#ifdef TILE ++ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) +#endif ++#ifdef XTENSA ++ && (cif->rtype->size > 16) +#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; ++#ifdef NIOS2 ++ && (cif->rtype->size > 8) +#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); ++ ) ++ bytes = STACK_ARG_SIZE(sizeof(void*)); +#endif + -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ ++ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) ++ { + -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif ++ /* Initialize any uninitialized aggregate type definitions */ ++ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) ++ return FFI_BAD_TYPEDEF; + -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG ++#ifndef FFI_TARGET_HAS_COMPLEX_TYPE ++ if ((*ptr)->type == FFI_TYPE_COMPLEX) ++ abort(); +#endif ++ /* Perform a sanity check on the argument type, do this ++ check after the initialization. */ ++ FFI_ASSERT_VALID_TYPE(*ptr); + -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; ++#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION ++ { ++ /* Add any padding if necessary */ ++ if (((*ptr)->alignment - 1) & bytes) ++ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); + -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; ++#ifdef TILE ++ if (bytes < 10 * FFI_SIZEOF_ARG && ++ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) ++ { ++ /* An argument is never split between the 10 parameter ++ registers and the stack. */ ++ bytes = 10 * FFI_SIZEOF_ARG; ++ } ++#endif ++#ifdef XTENSA ++ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) ++ bytes = 6*4; +#endif + ++ bytes += STACK_ARG_SIZE((*ptr)->size); ++ } ++#endif ++ } + -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); ++ cif->bytes = bytes; + -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ ++ /* Perform machine dependent cif processing */ ++#ifdef FFI_TARGET_SPECIFIC_VARIADIC ++ if (isvariadic) ++ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); ++#endif + -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); ++ return ffi_prep_cif_machdep(cif); ++} ++#endif /* not __CRIS__ */ + -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); ++ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, ++ ffi_type *rtype, ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); ++} + -+/* ---- Definitions for closures ----------------------------------------- */ ++ffi_status ffi_prep_cif_var(ffi_cif *cif, ++ ffi_abi abi, ++ unsigned int nfixedargs, ++ unsigned int ntotalargs, ++ ffi_type *rtype, ++ ffi_type **atypes) ++{ ++ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); ++} + +#if FFI_CLOSURES + -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ +ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, ++ffi_prep_closure (ffi_closure* closure, ++ ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); ++ void *user_data) ++{ ++ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); ++} + -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; +#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ +diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c +--- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-12-20 18:49:26.000000000 +0800 +@@ -0,0 +1,267 @@ ++/* ----------------------------------------------------------------------- ++ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ Author: Kresten Krab Thorup + -+#endif ++ 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: + -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+} ffi_raw_closure; ++ 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. ++ ----------------------------------------------------------------------- */ + -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif ++/* This file defines generic functions for use with the raw api. */ + -+ ffi_cif *cif; ++#include ++#include + -+#if !FFI_NATIVE_RAW_API ++#if !FFI_NO_RAW_API + -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ ++size_t ++ffi_raw_size (ffi_cif *cif) ++{ ++ size_t result = 0; ++ int i; + -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; ++ ffi_type **at = cif->arg_types; + ++ for (i = cif->nargs-1; i >= 0; i--, at++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*at)->type == FFI_TYPE_STRUCT) ++ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); ++ else +#endif ++ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); ++ } + -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; ++ return result; ++} + -+} ffi_java_raw_closure; + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); ++void ++ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); ++#if WORDS_BIGENDIAN + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); ++ break; ++ ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); ++ break; + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); ++ break; ++#endif ++ ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ *args = (raw++)->ptr; ++ break; ++#endif + -+#endif /* FFI_CLOSURES */ ++ case FFI_TYPE_COMPLEX: ++ *args = (raw++)->ptr; ++ break; + -+#if FFI_GO_CLOSURES ++ case FFI_TYPE_POINTER: ++ *args = (void*) &(raw++)->ptr; ++ break; ++ ++ default: ++ *args = raw; ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } + -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; ++#else /* WORDS_BIGENDIAN */ + -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); ++#if !PDP + -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); ++ /* then assume little endian */ ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++#if !FFI_NO_STRUCTS ++ if ((*tp)->type == FFI_TYPE_STRUCT) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++#endif ++ if ((*tp)->type == FFI_TYPE_COMPLEX) ++ { ++ *args = (raw++)->ptr; ++ } ++ else ++ { ++ *args = (void*) raw; ++ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); ++ } ++ } + -+#endif /* FFI_GO_CLOSURES */ ++#else ++#error "pdp endian not supported" ++#endif /* ! PDP */ + -+/* ---- Public interface definition -------------------------------------- */ ++#endif /* WORDS_BIGENDIAN */ ++} + -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++void ++ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) ++{ ++ unsigned i; ++ ffi_type **tp = cif->arg_types; + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); ++ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ { ++ switch ((*tp)->type) ++ { ++ case FFI_TYPE_UINT8: ++ (raw++)->uint = *(UINT8*) (*args); ++ break; + -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); ++ case FFI_TYPE_SINT8: ++ (raw++)->sint = *(SINT8*) (*args); ++ break; + -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) ++ case FFI_TYPE_UINT16: ++ (raw++)->uint = *(UINT16*) (*args); ++ break; + -+/* ---- Definitions shared with assembly code ---------------------------- */ ++ case FFI_TYPE_SINT16: ++ (raw++)->sint = *(SINT16*) (*args); ++ break; + -+#endif ++#if FFI_SIZEOF_ARG >= 4 ++ case FFI_TYPE_UINT32: ++ (raw++)->uint = *(UINT32*) (*args); ++ break; + -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE ++ case FFI_TYPE_SINT32: ++ (raw++)->sint = *(SINT32*) (*args); ++ break; +#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX + -+#ifdef __cplusplus -+} ++#if !FFI_NO_STRUCTS ++ case FFI_TYPE_STRUCT: ++ (raw++)->ptr = *args; ++ break; +#endif + -+#endif ++ case FFI_TYPE_COMPLEX: ++ (raw++)->ptr = *args; ++ break; + ++ case FFI_TYPE_POINTER: ++ (raw++)->ptr = **(void***) args; ++ break; + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_cfi.h 2015-04-26 08:38:36.000000000 +0800 -@@ -0,0 +1,55 @@ -+/* ----------------------------------------------------------------------- -+ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. ++ default: ++ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); ++ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; ++ } ++ } ++} + -+ Conditionally assemble cfi directives. Only necessary for building libffi. -+ ----------------------------------------------------------------------- */ ++#if !FFI_NATIVE_RAW_API + -+#ifndef FFI_CFI_H -+#define FFI_CFI_H + -+#ifdef HAVE_AS_CFI_PSEUDO_OP ++/* This is a generic definition of ffi_raw_call, to be used if the ++ * native system does not provide a machine-specific implementation. ++ * Having this, allows code to be written for the raw API, without ++ * the need for system-specific code to handle input in that format; ++ * these following couple of functions will handle the translation forth ++ * and back automatically. */ + -+# define cfi_startproc .cfi_startproc -+# define cfi_endproc .cfi_endproc -+# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off -+# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg -+# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off -+# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off -+# define cfi_offset(reg, off) .cfi_offset reg, off -+# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off -+# define cfi_register(r1, r2) .cfi_register r1, r2 -+# define cfi_return_column(reg) .cfi_return_column reg -+# define cfi_restore(reg) .cfi_restore reg -+# define cfi_same_value(reg) .cfi_same_value reg -+# define cfi_undefined(reg) .cfi_undefined reg -+# define cfi_remember_state .cfi_remember_state -+# define cfi_restore_state .cfi_restore_state -+# define cfi_window_save .cfi_window_save -+# define cfi_personality(enc, exp) .cfi_personality enc, exp -+# define cfi_lsda(enc, exp) .cfi_lsda enc, exp -+# define cfi_escape(...) .cfi_escape __VA_ARGS__ ++void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) ++{ ++ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); ++ ffi_raw_to_ptrarray (cif, raw, avalue); ++ ffi_call (cif, fn, rvalue, avalue); ++} + -+#else ++#if FFI_CLOSURES /* base system provides closures */ + -+# define cfi_startproc -+# define cfi_endproc -+# define cfi_def_cfa(reg, off) -+# define cfi_def_cfa_register(reg) -+# define cfi_def_cfa_offset(off) -+# define cfi_adjust_cfa_offset(off) -+# define cfi_offset(reg, off) -+# define cfi_rel_offset(reg, off) -+# define cfi_register(r1, r2) -+# define cfi_return_column(reg) -+# define cfi_restore(reg) -+# define cfi_same_value(reg) -+# define cfi_undefined(reg) -+# define cfi_remember_state -+# define cfi_restore_state -+# define cfi_window_save -+# define cfi_personality(enc, exp) -+# define cfi_lsda(enc, exp) -+# define cfi_escape(...) ++static void ++ffi_translate_args (ffi_cif *cif, void *rvalue, ++ void **avalue, void *user_data) ++{ ++ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); ++ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; + -+#endif /* HAVE_AS_CFI_PSEUDO_OP */ -+#endif /* FFI_CFI_H */ -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffi_common.h 2015-04-26 08:38:36.000000000 +0800 -@@ -0,0 +1,132 @@ -+/* ----------------------------------------------------------------------- -+ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green -+ Copyright (C) 2007 Free Software Foundation, Inc -+ Copyright (c) 1996 Red Hat, Inc. -+ -+ Common internal definitions and macros. Only necessary for building -+ libffi. -+ ----------------------------------------------------------------------- */ ++ ffi_ptrarray_to_raw (cif, avalue, raw); ++ (*cl->fun) (cif, rvalue, raw, cl->user_data); ++} + -+#ifndef FFI_COMMON_H -+#define FFI_COMMON_H ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) ++{ ++ ffi_status status; + -+#ifdef __cplusplus -+extern "C" { -+#endif ++ status = ffi_prep_closure_loc ((ffi_closure*) cl, ++ cif, ++ &ffi_translate_args, ++ codeloc, ++ codeloc); ++ if (status == FFI_OK) ++ { ++ cl->fun = fun; ++ cl->user_data = user_data; ++ } + -+#include ++ return status; ++} + -+/* Do not move this. Some versions of AIX are very picky about where -+ this is positioned. */ -+#ifdef __GNUC__ -+# if HAVE_ALLOCA_H -+# include -+# else -+ /* mingw64 defines this already in malloc.h. */ -+# ifndef alloca -+# define alloca __builtin_alloca -+# endif -+# endif -+# define MAYBE_UNUSED __attribute__((__unused__)) -+#else -+# define MAYBE_UNUSED -+# if HAVE_ALLOCA_H -+# include -+# else -+# ifdef _AIX -+# pragma alloca -+# else -+# ifndef alloca /* predefined by HP cc +Olibcalls */ -+# ifdef _MSC_VER -+# define alloca _alloca -+# else -+char *alloca (); -+# endif -+# endif -+# endif -+# endif -+#endif ++#endif /* FFI_CLOSURES */ ++#endif /* !FFI_NATIVE_RAW_API */ + -+/* Check for the existence of memcpy. */ -+#if STDC_HEADERS -+# include -+#else -+# ifndef HAVE_MEMCPY -+# define memcpy(d, s, n) bcopy ((s), (d), (n)) -+# endif -+#endif ++#if FFI_CLOSURES + -+#if defined(FFI_DEBUG) -+#include -+#endif ++/* Again, here is the generic version of ffi_prep_raw_closure, which ++ * will install an intermediate "hub" for translation of arguments from ++ * the pointer-array format, to the raw format */ + -+#ifdef FFI_DEBUG -+void ffi_assert(char *expr, char *file, int line); -+void ffi_stop_here(void); -+void ffi_type_test(ffi_type *a, char *file, int line); ++ffi_status ++ffi_prep_raw_closure (ffi_raw_closure* cl, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data) ++{ ++ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); ++} + -+#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -+#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -+#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -+#else -+#define FFI_ASSERT(x) -+#define FFI_ASSERT_AT(x, f, l) -+#define FFI_ASSERT_VALID_TYPE(x) -+#endif ++#endif /* FFI_CLOSURES */ + -+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -+#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) ++#endif /* !FFI_NO_RAW_API */ +diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c +--- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/types.c 2015-12-20 18:49:29.000000000 +0800 +@@ -0,0 +1,106 @@ ++/* ----------------------------------------------------------------------- ++ types.c - Copyright (c) 1996, 1998 Red Hat, Inc. ++ ++ Predefined ffi_types needed by libffi. + -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif); -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, unsigned int ntotalargs); ++ 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: + -+/* Extended cif, used in callback from assembly routine */ -+typedef struct -+{ -+ ffi_cif *cif; -+ void *rvalue; -+ void **avalue; -+} extended_cif; ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+/* Terse sized type definitions. */ -+#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) -+typedef unsigned char UINT8; -+typedef signed char SINT8; -+typedef unsigned short UINT16; -+typedef signed short SINT16; -+typedef unsigned int UINT32; -+typedef signed int SINT32; -+# ifdef _MSC_VER -+typedef unsigned __int64 UINT64; -+typedef signed __int64 SINT64; -+# else -+# include -+typedef uint64_t UINT64; -+typedef int64_t SINT64; -+# endif -+#else -+typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -+typedef signed int SINT8 __attribute__((__mode__(__QI__))); -+typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -+typedef signed int SINT16 __attribute__((__mode__(__HI__))); -+typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -+typedef signed int SINT32 __attribute__((__mode__(__SI__))); -+typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -+typedef signed int SINT64 __attribute__((__mode__(__DI__))); -+#endif ++ 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. ++ ----------------------------------------------------------------------- */ + -+typedef float FLOAT32; ++/* Hide the basic type definitions from the header file, so that we ++ can redefine them here as "const". */ ++#define LIBFFI_HIDE_BASIC_TYPES + -+#ifndef __GNUC__ -+#define __builtin_expect(x, expected_value) (x) -+#endif -+#define LIKELY(x) __builtin_expect(!!(x),1) -+#define UNLIKELY(x) __builtin_expect((x)!=0,0) ++#include ++#include + -+#ifdef __cplusplus ++/* Type definitions */ ++ ++#define FFI_TYPEDEF(name, type, id, maybe_const)\ ++struct struct_align_##name { \ ++ char c; \ ++ type x; \ ++}; \ ++maybe_const ffi_type ffi_type_##name = { \ ++ sizeof(type), \ ++ offsetof(struct struct_align_##name, x), \ ++ id, NULL \ +} -+#endif -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig.h 2015-04-26 08:38:36.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ + -+#include ++#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ ++static ffi_type *ffi_elements_complex_##name [2] = { \ ++ (ffi_type *)(&ffi_type_##name), NULL \ ++}; \ ++struct struct_align_complex_##name { \ ++ char c; \ ++ _Complex type x; \ ++}; \ ++maybe_const ffi_type ffi_type_complex_##name = { \ ++ sizeof(_Complex type), \ ++ offsetof(struct struct_align_complex_##name, x), \ ++ FFI_TYPE_COMPLEX, \ ++ (ffi_type **)ffi_elements_complex_##name \ ++} + ++/* Size and alignment are fake here. They must not be 0. */ ++const ffi_type ffi_type_void = { ++ 1, 1, FFI_TYPE_VOID, NULL ++}; + -+#endif -+#ifdef __i386__ ++FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); ++FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); ++FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); ++FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); ++FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); ++FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); ++FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); ++FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); + -+#include ++FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); + ++FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); ++FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); + ++#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ ++#define FFI_LDBL_CONST const ++#else ++#define FFI_LDBL_CONST +#endif -+#ifdef __arm__ -+ -+#include + ++#ifdef __alpha__ ++/* Even if we're not configured to default to 128-bit long double, ++ maintain binary compatibility, as -mlong-double-128 can be used ++ at any time. */ ++/* Validate the hard-coded number below. */ ++# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; ++#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); ++#endif + ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_COMPLEX_TYPEDEF(float, float, const); ++FFI_COMPLEX_TYPEDEF(double, double, const); ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); +#endif ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-12-20 18:53:04.000000000 +0800 +@@ -0,0 +1,829 @@ +#ifdef __x86_64__ + -+#include ++/* ----------------------------------------------------------------------- ++ ffi64.c - Copyright (c) 2013 The Written Word, Inc. ++ Copyright (c) 2011 Anthony Green ++ Copyright (c) 2008, 2010 Red Hat, Inc. ++ Copyright (c) 2002, 2007 Bo Thorsen + ++ x86-64 Foreign Function Interface + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/fficonfig_arm64.h 2015-04-26 08:38:46.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __arm64__ ++ 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: + -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ ++ The above copyright notice and this permission notice shall be included ++ in all copies or substantial portions of the Software. + -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ ++ 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. ++ ----------------------------------------------------------------------- */ + -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ ++#include ++#include + -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ ++#include ++#include ++#include ++#include "internal64.h" + -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" ++#ifdef __x86_64__ + -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ ++#define MAX_GPR_REGS 6 ++#define MAX_SSE_REGS 8 + -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 ++#if defined(__INTEL_COMPILER) ++#include "xmmintrin.h" ++#define UINT128 __m128 ++#else ++#if defined(__SUNPRO_C) ++#include ++#define UINT128 __m128i ++#else ++#define UINT128 __int128_t ++#endif ++#endif + -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ ++union big_int_union ++{ ++ UINT32 i32; ++ UINT64 i64; ++ UINT128 i128; ++}; + -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ ++struct register_args ++{ ++ /* Registers for argument passing. */ ++ UINT64 gpr[MAX_GPR_REGS]; ++ union big_int_union sse[MAX_SSE_REGS]; ++ UINT64 rax; /* ssecount */ ++ UINT64 r10; /* static chain */ ++}; + -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ ++extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void)) FFI_HIDDEN; + -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ ++/* All reference to register classes here is identical to the code in ++ gcc/config/i386/i386.c. Do *not* change one without the other. */ + -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 ++/* Register class used for passing given 64bit part of the argument. ++ These represent classes as documented by the PS ABI, with the ++ exception of SSESF, SSEDF classes, that are basically SSE class, ++ just gcc will use SF or DFmode move instead of DImode to avoid ++ reformatting penalties. + -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 ++ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves ++ whenever possible (upper half does contain padding). */ ++enum x86_64_reg_class ++ { ++ X86_64_NO_CLASS, ++ X86_64_INTEGER_CLASS, ++ X86_64_INTEGERSI_CLASS, ++ X86_64_SSE_CLASS, ++ X86_64_SSESF_CLASS, ++ X86_64_SSEDF_CLASS, ++ X86_64_SSEUP_CLASS, ++ X86_64_X87_CLASS, ++ X86_64_X87UP_CLASS, ++ X86_64_COMPLEX_X87_CLASS, ++ X86_64_MEMORY_CLASS ++ }; + -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 ++#define MAX_CLASSES 4 + -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ ++#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) + -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ ++/* x86-64 register passing implementation. See x86-64 ABI for details. Goal ++ of this code is to classify each 8bytes of incoming argument by the register ++ class and assign registers accordingly. */ + -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ ++/* Return the union class of CLASS1 and CLASS2. ++ See the x86-64 PS ABI for details. */ + -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ ++static enum x86_64_reg_class ++merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) ++{ ++ /* Rule #1: If both classes are equal, this is the resulting class. */ ++ if (class1 == class2) ++ return class1; + -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ ++ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is ++ the other class. */ ++ if (class1 == X86_64_NO_CLASS) ++ return class2; ++ if (class2 == X86_64_NO_CLASS) ++ return class1; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 ++ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ ++ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) ++ return X86_64_MEMORY_CLASS; + -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ ++ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ ++ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) ++ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) ++ return X86_64_INTEGERSI_CLASS; ++ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS ++ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) ++ return X86_64_INTEGER_CLASS; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 ++ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, ++ MEMORY is used. */ ++ if (class1 == X86_64_X87_CLASS ++ || class1 == X86_64_X87UP_CLASS ++ || class1 == X86_64_COMPLEX_X87_CLASS ++ || class2 == X86_64_X87_CLASS ++ || class2 == X86_64_X87UP_CLASS ++ || class2 == X86_64_COMPLEX_X87_CLASS) ++ return X86_64_MEMORY_CLASS; ++ ++ /* Rule #6: Otherwise class SSE is used. */ ++ return X86_64_SSE_CLASS; ++} ++ ++/* Classify the argument of type TYPE and mode MODE. ++ CLASSES will be filled by the register class used to pass each word ++ of the operand. The number of words is returned. In case the parameter ++ should be passed in memory, 0 is returned. As a special case for zero ++ sized containers, classes[0] will be NO_CLASS and 1 is returned. ++ ++ See the x86-64 PS ABI for details. ++*/ ++static size_t ++classify_argument (ffi_type *type, enum x86_64_reg_class classes[], ++ size_t byte_offset) ++{ ++ switch (type->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_POINTER: ++ do_integer: ++ { ++ size_t size = byte_offset + type->size; ++ ++ if (size <= 4) ++ { ++ classes[0] = X86_64_INTEGERSI_CLASS; ++ return 1; ++ } ++ else if (size <= 8) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ return 1; ++ } ++ else if (size <= 12) ++ { ++ classes[0] = X86_64_INTEGER_CLASS; ++ classes[1] = X86_64_INTEGERSI_CLASS; ++ return 2; ++ } ++ else if (size <= 16) ++ { ++ classes[0] = classes[1] = X86_64_INTEGER_CLASS; ++ return 2; ++ } ++ else ++ FFI_ASSERT (0); ++ } ++ case FFI_TYPE_FLOAT: ++ if (!(byte_offset % 8)) ++ classes[0] = X86_64_SSESF_CLASS; ++ else ++ classes[0] = X86_64_SSE_CLASS; ++ return 1; ++ case FFI_TYPE_DOUBLE: ++ classes[0] = X86_64_SSEDF_CLASS; ++ return 1; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ classes[0] = X86_64_X87_CLASS; ++ classes[1] = X86_64_X87UP_CLASS; ++ return 2; ++#endif ++ case FFI_TYPE_STRUCT: ++ { ++ const size_t UNITS_PER_WORD = 8; ++ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; ++ ffi_type **ptr; ++ int i; ++ enum x86_64_reg_class subclasses[MAX_CLASSES]; + -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ ++ /* If the struct is larger than 32 bytes, pass it on the stack. */ ++ if (type->size > 32) ++ return 0; + -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ ++ for (i = 0; i < words; i++) ++ classes[i] = X86_64_NO_CLASS; + -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 ++ /* Zero sized arrays or structures are NO_CLASS. We return 0 to ++ signalize memory class, so handle it as special case. */ ++ if (!words) ++ { ++ case FFI_TYPE_VOID: ++ classes[0] = X86_64_NO_CLASS; ++ return 1; ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 ++ /* Merge the fields of structure. */ ++ for (ptr = type->elements; *ptr != NULL; ptr++) ++ { ++ size_t num; + -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ ++ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); + -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 ++ num = classify_argument (*ptr, subclasses, byte_offset % 8); ++ if (num == 0) ++ return 0; ++ for (i = 0; i < num; i++) ++ { ++ size_t pos = byte_offset / 8; ++ classes[i + pos] = ++ merge_classes (subclasses[i], classes[i + pos]); ++ } + -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 ++ byte_offset += (*ptr)->size; ++ } + -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ ++ if (words > 2) ++ { ++ /* When size > 16 bytes, if the first one isn't ++ X86_64_SSE_CLASS or any other ones aren't ++ X86_64_SSEUP_CLASS, everything should be passed in ++ memory. */ ++ if (classes[0] != X86_64_SSE_CLASS) ++ return 0; + -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 ++ for (i = 1; i < words; i++) ++ if (classes[i] != X86_64_SSEUP_CLASS) ++ return 0; ++ } + -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ ++ /* Final merger cleanup. */ ++ for (i = 0; i < words; i++) ++ { ++ /* If one class is MEMORY, everything should be passed in ++ memory. */ ++ if (classes[i] == X86_64_MEMORY_CLASS) ++ return 0; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 ++ /* The X86_64_SSEUP_CLASS should be always preceded by ++ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ ++ if (classes[i] == X86_64_SSEUP_CLASS ++ && classes[i - 1] != X86_64_SSE_CLASS ++ && classes[i - 1] != X86_64_SSEUP_CLASS) ++ { ++ /* The first one should never be X86_64_SSEUP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ classes[i] = X86_64_SSE_CLASS; ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 ++ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, ++ everything should be passed in memory. */ ++ if (classes[i] == X86_64_X87UP_CLASS ++ && (classes[i - 1] != X86_64_X87_CLASS)) ++ { ++ /* The first one should never be X86_64_X87UP_CLASS. */ ++ FFI_ASSERT (i != 0); ++ return 0; ++ } ++ } ++ return words; ++ } ++ case FFI_TYPE_COMPLEX: ++ { ++ ffi_type *inner = type->elements[0]; ++ switch (inner->type) ++ { ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ goto do_integer; ++ ++ case FFI_TYPE_FLOAT: ++ classes[0] = X86_64_SSE_CLASS; ++ if (byte_offset % 8) ++ { ++ classes[1] = X86_64_SSESF_CLASS; ++ return 2; ++ } ++ return 1; ++ case FFI_TYPE_DOUBLE: ++ classes[0] = classes[1] = X86_64_SSEDF_CLASS; ++ return 2; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ classes[0] = X86_64_COMPLEX_X87_CLASS; ++ return 1; ++#endif ++ } ++ } ++ } ++ abort(); ++} + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 ++/* Examine the argument and return set number of register required in each ++ class. Return zero iff parameter should be passed in memory, otherwise ++ the number of registers. */ + -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 ++static size_t ++examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], ++ _Bool in_return, int *pngpr, int *pnsse) ++{ ++ size_t n; ++ int i, ngpr, nsse; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 ++ n = classify_argument (type, classes, 0); ++ if (n == 0) ++ return 0; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 ++ ngpr = nsse = 0; ++ for (i = 0; i < n; ++i) ++ switch (classes[i]) ++ { ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ ngpr++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSESF_CLASS: ++ case X86_64_SSEDF_CLASS: ++ nsse++; ++ break; ++ case X86_64_NO_CLASS: ++ case X86_64_SSEUP_CLASS: ++ break; ++ case X86_64_X87_CLASS: ++ case X86_64_X87UP_CLASS: ++ case X86_64_COMPLEX_X87_CLASS: ++ return in_return != 0; ++ default: ++ abort (); ++ } + -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 ++ *pngpr = ngpr; ++ *pnsse = nsse; + -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 ++ return n; ++} + -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" ++/* Perform machine dependent cif processing. */ + -+/* Name of package */ -+#define PACKAGE "libffi" ++ffi_status ++ffi_prep_cif_machdep (ffi_cif *cif) ++{ ++ int gprcount, ssecount, i, avn, ngpr, nsse, flags; ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t bytes, n, rtype_size; ++ ffi_type *rtype; + -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; + -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" ++ gprcount = ssecount = 0; + -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" ++ rtype = cif->rtype; ++ rtype_size = rtype->size; ++ switch (rtype->type) ++ { ++ case FFI_TYPE_VOID: ++ flags = UNIX64_RET_VOID; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = UNIX64_RET_UINT8; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = UNIX64_RET_SINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = UNIX64_RET_UINT16; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = UNIX64_RET_SINT16; ++ break; ++ case FFI_TYPE_UINT32: ++ flags = UNIX64_RET_UINT32; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ flags = UNIX64_RET_SINT32; ++ break; ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ flags = UNIX64_RET_INT64; ++ break; ++ case FFI_TYPE_POINTER: ++ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = UNIX64_RET_XMM32; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = UNIX64_RET_XMM64; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ flags = UNIX64_RET_X87; ++ break; ++ case FFI_TYPE_STRUCT: ++ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); ++ if (n == 0) ++ { ++ /* The return value is passed in memory. A pointer to that ++ memory is the first argument. Allocate a register for it. */ ++ gprcount++; ++ /* We don't have to do anything in asm for the return. */ ++ flags = UNIX64_RET_VOID | UNIX64_FLAG_RET_IN_MEM; ++ } ++ else ++ { ++ _Bool sse0 = SSE_CLASS_P (classes[0]); + -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" ++ if (rtype_size == 4 && sse0) ++ flags = UNIX64_RET_XMM32; ++ else if (rtype_size == 8) ++ flags = sse0 ? UNIX64_RET_XMM64 : UNIX64_RET_INT64; ++ else ++ { ++ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); ++ if (sse0 && sse1) ++ flags = UNIX64_RET_ST_XMM0_XMM1; ++ else if (sse0) ++ flags = UNIX64_RET_ST_XMM0_RAX; ++ else if (sse1) ++ flags = UNIX64_RET_ST_RAX_XMM0; ++ else ++ flags = UNIX64_RET_ST_RAX_RDX; ++ flags |= rtype_size << UNIX64_SIZE_SHIFT; ++ } ++ } ++ break; ++ case FFI_TYPE_COMPLEX: ++ switch (rtype->elements[0]->type) ++ { ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_INT: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT64: ++ case FFI_TYPE_SINT64: ++ flags = UNIX64_RET_ST_RAX_RDX | (rtype_size << UNIX64_SIZE_SHIFT); ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = UNIX64_RET_XMM64; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = UNIX64_RET_ST_XMM0_XMM1 | (16 << UNIX64_SIZE_SHIFT); ++ break; ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++ case FFI_TYPE_LONGDOUBLE: ++ flags = UNIX64_RET_X87_2; ++ break; ++#endif ++ default: ++ return FFI_BAD_TYPEDEF; ++ } ++ break; ++ default: ++ return FFI_BAD_TYPEDEF; ++ } + -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" ++ /* Go over all arguments and determine the way they should be passed. ++ If it's in a register and there is space for it, let that be so. If ++ not, add it's size to the stack byte count. */ ++ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) ++ { ++ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = cif->arg_types[i]->alignment; + -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" ++ if (align < 8) ++ align = 8; + -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 ++ bytes = ALIGN (bytes, align); ++ bytes += cif->arg_types[i]->size; ++ } ++ else ++ { ++ gprcount += ngpr; ++ ssecount += nsse; ++ } ++ } ++ if (ssecount) ++ flags |= UNIX64_FLAG_XMM_ARGS; + -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 ++ cif->flags = flags; ++ cif->bytes = ALIGN (bytes, 8); + -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 ++ return FFI_OK; ++} + -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int gprcount, ssecount, ngpr, nsse, i, avn, flags; ++ struct register_args *reg_args; + -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 ++ /* Can't call 32-bit mode from 64-bit mode. */ ++ FFI_ASSERT (cif->abi == FFI_UNIX64); + -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 ++ /* If the return value is a struct and we don't have a return value ++ address then we need to make one. Otherwise we can ignore it. */ ++ flags = cif->flags; ++ if (rvalue == NULL) ++ { ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ rvalue = alloca (cif->rtype->size); ++ else ++ flags = UNIX64_RET_VOID; ++ } + -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ ++ /* Allocate the space for the arguments, plus 4 words of temp space. */ ++ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); ++ reg_args = (struct register_args *) stack; ++ argp = stack + sizeof (struct register_args); + -+/* Version number of package */ -+#define VERSION "3.99999" ++ reg_args->r10 = (uintptr_t) closure; + -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif ++ gprcount = ssecount = 0; + -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ ++ /* If the return value is passed in memory, add the pointer as the ++ first integer argument. */ ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ reg_args->gpr[gprcount++] = (unsigned long) rvalue; + ++ avn = cif->nargs; ++ arg_types = cif->arg_types; + -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif ++ for (i = 0; i < avn; ++i) ++ { ++ size_t n, size = arg_types[i]->size; + ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; + ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; + -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget.h 2015-04-26 08:38:36.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ memcpy (argp, avalue[i], size); ++ argp += size; ++ } ++ else ++ { ++ /* The argument is passed entirely in registers. */ ++ char *a = (char *) avalue[i]; ++ int j; + -+#include ++ for (j = 0; j < n; j++, a += 8, size -= 8) ++ { ++ switch (classes[j]) ++ { ++ case X86_64_NO_CLASS: ++ case X86_64_SSEUP_CLASS: ++ break; ++ case X86_64_INTEGER_CLASS: ++ case X86_64_INTEGERSI_CLASS: ++ /* Sign-extend integer arguments passed in general ++ purpose registers, to cope with the fact that ++ LLVM incorrectly assumes that this will be done ++ (the x86-64 PS ABI does not specify this). */ ++ switch (arg_types[i]->type) ++ { ++ case FFI_TYPE_SINT8: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); ++ break; ++ case FFI_TYPE_SINT16: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); ++ break; ++ case FFI_TYPE_SINT32: ++ reg_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); ++ break; ++ default: ++ reg_args->gpr[gprcount] = 0; ++ memcpy (®_args->gpr[gprcount], a, size); ++ } ++ gprcount++; ++ break; ++ case X86_64_SSE_CLASS: ++ case X86_64_SSEDF_CLASS: ++ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; ++ break; ++ case X86_64_SSESF_CLASS: ++ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; ++ break; ++ default: ++ abort(); ++ } ++ } ++ } ++ } ++ reg_args->rax = ssecount; + ++ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), ++ flags, rvalue, fn); ++} + -+#endif -+#ifdef __i386__ ++void ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} + -+#include ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} + ++extern void ffi_closure_unix64(void) FFI_HIDDEN; ++extern void ffi_closure_unix64_sse(void) FFI_HIDDEN; + -+#endif -+#ifdef __arm__ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *codeloc) ++{ ++ static const unsigned char trampoline[16] = { ++ /* leaq -0x7(%rip),%r10 # 0x0 */ ++ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, ++ /* jmpq *0x3(%rip) # 0x10 */ ++ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, ++ /* nopl (%rax) */ ++ 0x0f, 0x1f, 0x00 ++ }; ++ void (*dest)(void); ++ char *tramp = closure->tramp; + -+#include ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; + ++ if (cif->flags & UNIX64_FLAG_XMM_ARGS) ++ dest = ffi_closure_unix64_sse; ++ else ++ dest = ffi_closure_unix64; + -+#endif -+#ifdef __x86_64__ ++ memcpy (tramp, trampoline, sizeof(trampoline)); ++ *(UINT64 *)(tramp + 16) = (uintptr_t)dest; + -+#include ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; + ++ return FFI_OK; ++} + -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h ---- orig/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/include/ffitarget_arm64.h 2015-04-26 08:38:46.000000000 +0800 -@@ -0,0 +1,78 @@ -+#ifdef __arm64__ ++int FFI_HIDDEN ++ffi_closure_unix64_inner(ffi_cif *cif, ++ void (*fun)(ffi_cif*, void*, void**, void*), ++ void *user_data, ++ void *rvalue, ++ struct register_args *reg_args, ++ char *argp) ++{ ++ void **avalue; ++ ffi_type **arg_types; ++ long i, avn; ++ int gprcount, ssecount, ngpr, nsse; ++ int flags; + -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. ++ avn = cif->nargs; ++ flags = cif->flags; ++ avalue = alloca(avn * sizeof(void *)); ++ gprcount = ssecount = 0; + -+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: ++ if (flags & UNIX64_FLAG_RET_IN_MEM) ++ { ++ /* On return, %rax will contain the address that was passed ++ by the caller in %rdi. */ ++ void *r = (void *)(uintptr_t)reg_args->gpr[gprcount++]; ++ *(void **)rvalue = r; ++ rvalue = r; ++ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); ++ } + -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. ++ arg_types = cif->arg_types; ++ for (i = 0; i < avn; ++i) ++ { ++ enum x86_64_reg_class classes[MAX_CLASSES]; ++ size_t 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. */ ++ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); ++ if (n == 0 ++ || gprcount + ngpr > MAX_GPR_REGS ++ || ssecount + nsse > MAX_SSE_REGS) ++ { ++ long align = arg_types[i]->alignment; + -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H ++ /* Stack arguments are *always* at least 8 byte aligned. */ ++ if (align < 8) ++ align = 8; + -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif ++ /* Pass this argument in memory. */ ++ argp = (void *) ALIGN (argp, align); ++ avalue[i] = argp; ++ argp += arg_types[i]->size; ++ } ++ /* If the argument is in a single register, or two consecutive ++ integer registers, then we can use that address directly. */ ++ else if (n == 1 ++ || (n == 2 && !(SSE_CLASS_P (classes[0]) ++ || SSE_CLASS_P (classes[1])))) ++ { ++ /* The argument is in a single register. */ ++ if (SSE_CLASS_P (classes[0])) ++ { ++ avalue[i] = ®_args->sse[ssecount]; ++ ssecount += n; ++ } ++ else ++ { ++ avalue[i] = ®_args->gpr[gprcount]; ++ gprcount += n; ++ } ++ } ++ /* Otherwise, allocate space to make them consecutive. */ ++ else ++ { ++ char *a = alloca (16); ++ int j; + -+#ifndef LIBFFI_ASM -+#ifdef __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+typedef unsigned long long ffi_arg; -+typedef signed long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif ++ avalue[i] = a; ++ for (j = 0; j < n; j++, a += 8) ++ { ++ if (SSE_CLASS_P (classes[j])) ++ memcpy (a, ®_args->sse[ssecount++], 8); ++ else ++ memcpy (a, ®_args->gpr[gprcount++], 8); ++ } ++ } ++ } + -+typedef enum ffi_abi -+ { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+ } ffi_abi; -+#endif ++ /* Invoke the closure. */ ++ fun (cif, rvalue, avalue, user_data); + -+/* ---- Definitions for closures ----------------------------------------- */ ++ /* Tell assembly how to perform return type promotions. */ ++ return flags; ++} + -+#define FFI_CLOSURES 1 -+#if defined (__APPLE__) -+#define FFI_TRAMPOLINE_SIZE 20 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 -+#else -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE -+#endif -+#define FFI_NATIVE_RAW_API 0 ++extern void ffi_go_closure_unix64(void) FFI_HIDDEN; ++extern void ffi_go_closure_unix64_sse(void) FFI_HIDDEN; + -+/* ---- Internal ---- */ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*, void*, void**, void*)) ++{ ++ if (cif->abi != FFI_UNIX64) ++ return FFI_BAD_ABI; + -+#if defined (__APPLE__) -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs -+#else -+/* iOS reserves x18 for the system. Disable Go closures until -+ a new static chain is chosen. */ -+#define FFI_GO_CLOSURES 1 -+#endif ++ closure->tramp = (cif->flags & UNIX64_FLAG_XMM_ARGS ++ ? ffi_go_closure_unix64_sse ++ : ffi_go_closure_unix64); ++ closure->cif = cif; ++ closure->fun = fun; + -+#define FFI_TARGET_HAS_COMPLEX_TYPE ++ return FFI_OK; ++} + -+#endif ++#endif /* __x86_64__ */ + + +#endif \ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c modified/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c ---- orig/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c 2015-04-26 08:39:05.000000000 +0800 -@@ -0,0 +1,374 @@ -+/* ----------------------------------------------------------------------- -+ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. -+ -+ Cloned from raw_api.c +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c +--- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-12-20 18:53:04.000000000 +0800 +@@ -0,0 +1,734 @@ ++#ifdef __i386__ + -+ Raw_api.c author: Kresten Krab Thorup -+ Java_raw_api.c author: Hans-J. Boehm ++/* ----------------------------------------------------------------------- ++ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. ++ Copyright (c) 2002 Ranjit Mathew ++ Copyright (c) 2002 Bo Thorsen ++ Copyright (c) 2002 Roger Sayle ++ Copyright (C) 2008, 2010 Free Software Foundation, Inc. + -+ $Id $ ++ x86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -38229,356 +28536,779 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/java_raw_api.c modified/Module + DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + -+/* This defines a Java- and 64-bit specific variant of the raw API. */ -+/* It assumes that "raw" argument blocks look like Java stacks on a */ -+/* 64-bit machine. Arguments that can be stored in a single stack */ -+/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -+/* 64 bits are actually used. */ -+ ++#ifndef __x86_64__ +#include +#include +#include ++#include "internal.h" + -+#if !defined(NO_JAVA_RAW_API) ++/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; ++ all further uses in this file will refer to the 80-bit type. */ ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++# if FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++#else ++# undef FFI_TYPE_LONGDOUBLE ++# define FFI_TYPE_LONGDOUBLE 4 ++#endif + -+size_t -+ffi_java_raw_size (ffi_cif *cif) ++#if defined(__GNUC__) && !defined(__declspec) ++# define __declspec(x) __attribute__((x)) ++#endif ++ ++/* Perform machine dependent cif processing. */ ++ffi_status FFI_HIDDEN ++ffi_prep_cif_machdep(ffi_cif *cif) +{ -+ size_t result = 0; -+ int i; ++ size_t bytes = 0; ++ int i, n, flags, cabi = cif->abi; + -+ ffi_type **at = cif->arg_types; ++ switch (cabi) ++ { ++ case FFI_SYSV: ++ case FFI_STDCALL: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_MS_CDECL: ++ case FFI_PASCAL: ++ case FFI_REGISTER: ++ break; ++ default: ++ return FFI_BAD_ABI; ++ } + -+ for (i = cif->nargs-1; i >= 0; i--, at++) ++ switch (cif->rtype->type) + { -+ switch((*at) -> type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: ++ case FFI_TYPE_VOID: ++ flags = X86_RET_VOID; ++ break; ++ case FFI_TYPE_FLOAT: ++ flags = X86_RET_FLOAT; ++ break; ++ case FFI_TYPE_DOUBLE: ++ flags = X86_RET_DOUBLE; ++ break; ++ case FFI_TYPE_LONGDOUBLE: ++ flags = X86_RET_LDOUBLE; ++ break; ++ case FFI_TYPE_UINT8: ++ flags = X86_RET_UINT8; ++ break; ++ case FFI_TYPE_UINT16: ++ flags = X86_RET_UINT16; ++ break; ++ case FFI_TYPE_SINT8: ++ flags = X86_RET_SINT8; ++ break; ++ case FFI_TYPE_SINT16: ++ flags = X86_RET_SINT16; ++ break; ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ flags = X86_RET_INT32; ++ break; ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ flags = X86_RET_INT64; ++ break; ++ case FFI_TYPE_STRUCT: ++#ifndef X86 ++ /* ??? This should be a different ABI rather than an ifdef. */ ++ if (cif->rtype->size == 1) ++ flags = X86_RET_STRUCT_1B; ++ else if (cif->rtype->size == 2) ++ flags = X86_RET_STRUCT_2B; ++ else if (cif->rtype->size == 4) ++ flags = X86_RET_INT32; ++ else if (cif->rtype->size == 8) ++ flags = X86_RET_INT64; ++ else ++#endif ++ { ++ do_struct: ++ switch (cabi) ++ { ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_STDCALL: ++ case FFI_MS_CDECL: ++ flags = X86_RET_STRUCTARG; ++ break; ++ default: ++ flags = X86_RET_STRUCTPOP; ++ break; ++ } ++ /* Allocate space for return value pointer. */ ++ bytes += ALIGN (sizeof(void*), FFI_SIZEOF_ARG); ++ } ++ break; ++ case FFI_TYPE_COMPLEX: ++ switch (cif->rtype->elements[0]->type) ++ { + case FFI_TYPE_DOUBLE: -+ result += 2 * FFI_SIZEOF_JAVA_RAW; ++ case FFI_TYPE_LONGDOUBLE: ++ case FFI_TYPE_SINT64: ++ case FFI_TYPE_UINT64: ++ goto do_struct; ++ case FFI_TYPE_FLOAT: ++ case FFI_TYPE_INT: ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ flags = X86_RET_INT64; ++ break; ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_UINT16: ++ flags = X86_RET_INT32; ++ break; ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_UINT8: ++ flags = X86_RET_STRUCT_2B; + break; -+ case FFI_TYPE_STRUCT: -+ /* No structure parameters in Java. */ -+ abort(); -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); + default: -+ result += FFI_SIZEOF_JAVA_RAW; -+ } ++ return FFI_BAD_TYPEDEF; ++ } ++ break; ++ default: ++ return FFI_BAD_TYPEDEF; + } ++ cif->flags = flags; + -+ return result; -+} ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *t = cif->arg_types[i]; + ++ bytes = ALIGN (bytes, t->alignment); ++ bytes += ALIGN (t->size, FFI_SIZEOF_ARG); ++ } ++ cif->bytes = ALIGN (bytes, 16); + -+void -+ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) ++ return FFI_OK; ++} ++ ++static ffi_arg ++extend_basic_type(void *arg, int type) +{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ switch (type) ++ { ++ case FFI_TYPE_SINT8: ++ return *(SINT8 *)arg; ++ case FFI_TYPE_UINT8: ++ return *(UINT8 *)arg; ++ case FFI_TYPE_SINT16: ++ return *(SINT16 *)arg; ++ case FFI_TYPE_UINT16: ++ return *(UINT16 *)arg; + -+#if WORDS_BIGENDIAN ++ case FFI_TYPE_SINT32: ++ case FFI_TYPE_UINT32: ++ case FFI_TYPE_POINTER: ++ case FFI_TYPE_FLOAT: ++ return *(UINT32 *)arg; + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + 3); -+ break; ++ default: ++ abort(); ++ } ++} + -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + 2); -+ break; ++struct call_frame ++{ ++ void *ebp; /* 0 */ ++ void *retaddr; /* 4 */ ++ void (*fn)(void); /* 8 */ ++ int flags; /* 12 */ ++ void *rvalue; /* 16 */ ++ unsigned regs[3]; /* 20-28 */ ++}; ++ ++struct abi_params ++{ ++ int dir; /* parameter growth direction */ ++ int static_chain; /* the static chain register used by gcc */ ++ int nregs; /* number of register parameters */ ++ int regs[3]; ++}; + -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void *)raw; -+ raw += 2; -+ break; ++static const struct abi_params abi_params[FFI_LAST_ABI] = { ++ [FFI_SYSV] = { 1, R_ECX, 0 }, ++ [FFI_THISCALL] = { 1, R_EAX, 1, { R_ECX } }, ++ [FFI_FASTCALL] = { 1, R_EAX, 2, { R_ECX, R_EDX } }, ++ [FFI_STDCALL] = { 1, R_ECX, 0 }, ++ [FFI_PASCAL] = { -1, R_ECX, 0 }, ++ /* ??? No defined static chain; gcc does not support REGISTER. */ ++ [FFI_REGISTER] = { -1, R_ECX, 3, { R_EAX, R_EDX, R_ECX } }, ++ [FFI_MS_CDECL] = { 1, R_ECX, 0 } ++}; ++ ++extern void ffi_call_i386(struct call_frame *, char *) ++#if HAVE_FASTCALL ++ __declspec(fastcall) +#endif ++ FFI_HIDDEN; + -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; ++static void ++ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ size_t rsize, bytes; ++ struct call_frame *frame; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int flags, cabi, i, n, dir, narg_reg; ++ const struct abi_params *pabi; + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++ flags = cif->flags; ++ cabi = cif->abi; ++ pabi = &abi_params[cabi]; ++ dir = pabi->dir; + ++ rsize = 0; ++ if (rvalue == NULL) ++ { ++ switch (flags) ++ { ++ case X86_RET_FLOAT: ++ case X86_RET_DOUBLE: ++ case X86_RET_LDOUBLE: ++ case X86_RET_STRUCTPOP: ++ case X86_RET_STRUCTARG: ++ /* The float cases need to pop the 387 stack. ++ The struct cases need to pass a valid pointer to the callee. */ ++ rsize = cif->rtype->size; ++ break; + default: -+ *args = raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); ++ /* We can pretend that the callee returns nothing. */ ++ flags = X86_RET_VOID; ++ break; + } + } + -+#else /* WORDS_BIGENDIAN */ ++ bytes = cif->bytes; ++ stack = alloca(bytes + sizeof(*frame) + rsize); ++ argp = (dir < 0 ? stack + bytes : stack); ++ frame = (struct call_frame *)(stack + bytes); ++ if (rsize) ++ rvalue = frame + 1; + -+#if !PDP ++ frame->fn = fn; ++ frame->flags = flags; ++ frame->rvalue = rvalue; ++ frame->regs[pabi->static_chain] = (unsigned)closure; + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) ++ narg_reg = 0; ++ switch (flags) + { -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ switch((*tp)->type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void*) raw; -+ raw += 2; ++ case X86_RET_STRUCTARG: ++ /* The pointer is passed as the first argument. */ ++ if (pabi->nregs > 0) ++ { ++ frame->regs[pabi->regs[0]] = (unsigned)rvalue; ++ narg_reg = 1; + break; -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ *args = (void*) raw++; -+ } -+#else /* FFI_SIZEOF_JAVA_RAW != 8 */ -+ *args = (void*) raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ *(void **)argp = rvalue; ++ argp += sizeof(void *); ++ break; + } + -+#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++ arg_types = cif->arg_types; ++ for (i = 0, n = cif->nargs; i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ void *valp = avalue[i]; ++ size_t z = ty->size; ++ int t = ty->type; + -+#endif /* WORDS_BIGENDIAN */ ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) ++ { ++ ffi_arg val = extend_basic_type (valp, t); ++ ++ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) ++ frame->regs[pabi->regs[narg_reg++]] = val; ++ else if (dir < 0) ++ { ++ argp -= 4; ++ *(ffi_arg *)argp = val; ++ } ++ else ++ { ++ *(ffi_arg *)argp = val; ++ argp += 4; ++ } ++ } ++ else ++ { ++ size_t za = ALIGN (z, FFI_SIZEOF_ARG); ++ size_t align = FFI_SIZEOF_ARG; ++ ++ /* Alignment rules for arguments are quite complex. Vectors and ++ structures with 16 byte alignment get it. Note that long double ++ on Darwin does have 16 byte alignment, and does not get this ++ alignment if passed directly; a structure with a long double ++ inside, however, would get 16 byte alignment. Since libffi does ++ not support vectors, we need non concern ourselves with other ++ cases. */ ++ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) ++ align = 16; ++ ++ if (dir < 0) ++ { ++ /* ??? These reverse argument ABIs are probably too old ++ to have cared about alignment. Someone should check. */ ++ argp -= za; ++ memcpy (argp, valp, z); ++ } ++ else ++ { ++ argp = (char *)ALIGN (argp, align); ++ memcpy (argp, valp, z); ++ argp += za; ++ } ++ } ++ } ++ FFI_ASSERT (dir > 0 || argp == stack); ++ ++ ffi_call_i386 (frame, stack); +} + +void -+ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) ++ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) +{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++ ffi_call_int (cif, fn, rvalue, avalue, NULL); ++} + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT8*) (*args); -+#else -+ (raw++)->uint = *(UINT8*) (*args); -+#endif -+ break; ++void ++ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, ++ void **avalue, void *closure) ++{ ++ ffi_call_int (cif, fn, rvalue, avalue, closure); ++} + -+ case FFI_TYPE_SINT8: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT8*) (*args); -+#else -+ (raw++)->sint = *(SINT8*) (*args); -+#endif -+ break; ++/** private members **/ + -+ case FFI_TYPE_UINT16: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT16*) (*args); -+#else -+ (raw++)->uint = *(UINT16*) (*args); -+#endif -+ break; ++void FFI_HIDDEN ffi_closure_i386(void); ++void FFI_HIDDEN ffi_closure_STDCALL(void); ++void FFI_HIDDEN ffi_closure_REGISTER(void); + -+ case FFI_TYPE_SINT16: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT16*) (*args); -+#else -+ (raw++)->sint = *(SINT16*) (*args); -+#endif -+ break; ++struct closure_frame ++{ ++ unsigned rettemp[4]; /* 0 */ ++ unsigned regs[3]; /* 16-24 */ ++ ffi_cif *cif; /* 28 */ ++ void (*fun)(ffi_cif*,void*,void**,void*); /* 32 */ ++ void *user_data; /* 36 */ ++}; + -+ case FFI_TYPE_UINT32: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT32*) (*args); -+#else -+ (raw++)->uint = *(UINT32*) (*args); ++int FFI_HIDDEN ++#if HAVE_FASTCALL ++__declspec(fastcall) +#endif -+ break; ++ffi_closure_inner (struct closure_frame *frame, char *stack) ++{ ++ ffi_cif *cif = frame->cif; ++ int cabi, i, n, flags, dir, narg_reg; ++ const struct abi_params *pabi; ++ ffi_type **arg_types; ++ char *argp; ++ void *rvalue; ++ void **avalue; + -+ case FFI_TYPE_SINT32: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT32*) (*args); -+#else -+ (raw++)->sint = *(SINT32*) (*args); -+#endif -+ break; ++ cabi = cif->abi; ++ flags = cif->flags; ++ narg_reg = 0; ++ rvalue = frame->rettemp; ++ pabi = &abi_params[cabi]; ++ dir = pabi->dir; ++ argp = (dir < 0 ? stack + cif->bytes : stack); + -+ case FFI_TYPE_FLOAT: -+ (raw++)->flt = *(FLOAT32*) (*args); ++ switch (flags) ++ { ++ case X86_RET_STRUCTARG: ++ if (pabi->nregs > 0) ++ { ++ rvalue = (void *)frame->regs[pabi->regs[0]]; ++ narg_reg = 1; ++ frame->rettemp[0] = (unsigned)rvalue; + break; ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ rvalue = *(void **)argp; ++ argp += sizeof(void *); ++ frame->rettemp[0] = (unsigned)rvalue; ++ break; ++ } + -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ raw->uint = *(UINT64*) (*args); -+ raw += 2; -+ break; -+#endif ++ n = cif->nargs; ++ avalue = alloca(sizeof(void *) * n); + -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++ arg_types = cif->arg_types; ++ for (i = 0; i < n; ++i) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; ++ int t = ty->type; ++ void *valp; + -+ default: -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ FFI_ASSERT(0); /* Should have covered all cases */ -+#else -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) ++ { ++ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) ++ valp = &frame->regs[pabi->regs[narg_reg++]]; ++ else if (dir < 0) ++ { ++ argp -= 4; ++ valp = argp; ++ } ++ else ++ { ++ valp = argp; ++ argp += 4; ++ } ++ } ++ else ++ { ++ size_t za = ALIGN (z, FFI_SIZEOF_ARG); ++ size_t align = FFI_SIZEOF_ARG; ++ ++ /* See the comment in ffi_call_int. */ ++ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) ++ align = 16; ++ ++ if (dir < 0) ++ { ++ /* ??? These reverse argument ABIs are probably too old ++ to have cared about alignment. Someone should check. */ ++ argp -= za; ++ valp = argp; ++ } ++ else ++ { ++ argp = (char *)ALIGN (argp, align); ++ valp = argp; ++ argp += za; ++ } + } ++ ++ avalue[i] = valp; + } -+} + -+#if !FFI_NATIVE_RAW_API ++ frame->fun (cif, rvalue, avalue, frame->user_data); + -+static void -+ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) ++ if (cabi == FFI_STDCALL) ++ return flags + (cif->bytes << X86_RET_POP_SHIFT); ++ else ++ return flags; ++} ++ ++ffi_status ++ffi_prep_closure_loc (ffi_closure* closure, ++ ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*), ++ void *user_data, ++ void *codeloc) +{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) ++ char *tramp = closure->tramp; ++ void (*dest)(void); ++ int op = 0xb8; /* movl imm, %eax */ ++ ++ switch (cif->abi) + { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue <<= 32; ++ case FFI_SYSV: ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ case FFI_MS_CDECL: ++ dest = ffi_closure_i386; + break; -+ -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+#if FFI_SIZEOF_JAVA_RAW == 4 -+ case FFI_TYPE_POINTER: -+#endif -+ *(SINT64 *)rvalue <<= 32; ++ case FFI_STDCALL: ++ case FFI_PASCAL: ++ dest = ffi_closure_STDCALL; + break; ++ case FFI_REGISTER: ++ dest = ffi_closure_REGISTER; ++ op = 0x68; /* pushl imm */ ++ default: ++ return FFI_BAD_ABI; ++ } + -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); ++ /* movl or pushl immediate. */ ++ tramp[0] = op; ++ *(void **)(tramp + 1) = codeloc; + -+ default: ++ /* jmp dest */ ++ tramp[5] = 0xe9; ++ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); ++ ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; ++ ++ return FFI_OK; ++} ++ ++void FFI_HIDDEN ffi_go_closure_EAX(void); ++void FFI_HIDDEN ffi_go_closure_ECX(void); ++void FFI_HIDDEN ffi_go_closure_STDCALL(void); ++ ++ffi_status ++ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, ++ void (*fun)(ffi_cif*,void*,void**,void*)) ++{ ++ void (*dest)(void); ++ ++ switch (cif->abi) ++ { ++ case FFI_SYSV: ++ case FFI_MS_CDECL: ++ dest = ffi_go_closure_ECX; ++ break; ++ case FFI_THISCALL: ++ case FFI_FASTCALL: ++ dest = ffi_go_closure_EAX; ++ break; ++ case FFI_STDCALL: ++ case FFI_PASCAL: ++ dest = ffi_go_closure_STDCALL; + break; ++ case FFI_REGISTER: ++ default: ++ return FFI_BAD_ABI; + } -+#endif ++ ++ closure->tramp = dest; ++ closure->cif = cif; ++ closure->fun = fun; ++ ++ return FFI_OK; +} + -+static void -+ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) ++/* ------- Native raw API support -------------------------------- */ ++ ++#if !FFI_NO_RAW_API ++ ++void FFI_HIDDEN ffi_closure_raw_SYSV(void); ++void FFI_HIDDEN ffi_closure_raw_THISCALL(void); ++ ++ffi_status ++ffi_prep_raw_closure_loc (ffi_raw_closure *closure, ++ ffi_cif *cif, ++ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), ++ void *user_data, ++ void *codeloc) +{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) ++ char *tramp = closure->tramp; ++ void (*dest)(void); ++ int i; ++ ++ /* We currently don't support certain kinds of arguments for raw ++ closures. This should be implemented by a separate assembly ++ language routine, since it would require argument processing, ++ something we don't do now for performance. */ ++ for (i = cif->nargs-1; i >= 0; i--) ++ switch (cif->arg_types[i]->type) ++ { ++ case FFI_TYPE_STRUCT: ++ case FFI_TYPE_LONGDOUBLE: ++ return FFI_BAD_TYPEDEF; ++ } ++ ++ switch (cif->abi) + { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue >>= 32; ++ case FFI_THISCALL: ++ dest = ffi_closure_raw_THISCALL; + break; -+ -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+ *(SINT64 *)rvalue >>= 32; ++ case FFI_SYSV: ++ dest = ffi_closure_raw_SYSV; + break; -+ -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ + default: -+ break; ++ return FFI_BAD_ABI; + } -+#endif -+} -+ -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ + -+void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ ffi_java_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_java_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+ ffi_java_rvalue_to_raw (cif, rvalue); -+} ++ /* movl imm, %eax. */ ++ tramp[0] = 0xb8; ++ *(void **)(tramp + 1) = codeloc; + -+#if FFI_CLOSURES /* base system provides closures */ ++ /* jmp dest */ ++ tramp[5] = 0xe9; ++ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); + -+static void -+ffi_java_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ closure->cif = cif; ++ closure->fun = fun; ++ closure->user_data = user_data; + -+ ffi_java_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); -+ ffi_java_raw_to_rvalue (cif, rvalue); ++ return FFI_OK; +} + -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc) ++void ++ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *avalue) +{ -+ ffi_status status; ++ size_t rsize, bytes; ++ struct call_frame *frame; ++ char *stack, *argp; ++ ffi_type **arg_types; ++ int flags, cabi, i, n, narg_reg; ++ const struct abi_params *pabi; + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_java_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) ++ flags = cif->flags; ++ cabi = cif->abi; ++ pabi = &abi_params[cabi]; ++ ++ rsize = 0; ++ if (rvalue == NULL) + { -+ cl->fun = fun; -+ cl->user_data = user_data; ++ switch (flags) ++ { ++ case X86_RET_FLOAT: ++ case X86_RET_DOUBLE: ++ case X86_RET_LDOUBLE: ++ case X86_RET_STRUCTPOP: ++ case X86_RET_STRUCTARG: ++ /* The float cases need to pop the 387 stack. ++ The struct cases need to pass a valid pointer to the callee. */ ++ rsize = cif->rtype->size; ++ break; ++ default: ++ /* We can pretend that the callee returns nothing. */ ++ flags = X86_RET_VOID; ++ break; ++ } + } + -+ return status; -+} ++ bytes = cif->bytes; ++ argp = stack = alloca(bytes + sizeof(*frame) + rsize); ++ frame = (struct call_frame *)(stack + bytes); ++ if (rsize) ++ rvalue = frame + 1; + -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++ frame->fn = fn; ++ frame->flags = flags; ++ frame->rvalue = rvalue; + -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); ++ narg_reg = 0; ++ switch (flags) ++ { ++ case X86_RET_STRUCTARG: ++ /* The pointer is passed as the first argument. */ ++ if (pabi->nregs > 0) ++ { ++ frame->regs[pabi->regs[0]] = (unsigned)rvalue; ++ narg_reg = 1; ++ break; ++ } ++ /* fallthru */ ++ case X86_RET_STRUCTPOP: ++ *(void **)argp = rvalue; ++ argp += sizeof(void *); ++ bytes -= sizeof(void *); ++ break; ++ } ++ ++ arg_types = cif->arg_types; ++ for (i = 0, n = cif->nargs; narg_reg < pabi->nregs && i < n; i++) ++ { ++ ffi_type *ty = arg_types[i]; ++ size_t z = ty->size; ++ int t = ty->type; ++ ++ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT && t != FFI_TYPE_FLOAT) ++ { ++ ffi_arg val = extend_basic_type (avalue, t); ++ frame->regs[pabi->regs[narg_reg++]] = val; ++ z = FFI_SIZEOF_ARG; ++ } ++ else ++ { ++ memcpy (argp, avalue, z); ++ z = ALIGN (z, FFI_SIZEOF_ARG); ++ argp += z; ++ } ++ avalue += z; ++ bytes -= z; ++ } ++ if (i < n) ++ memcpy (argp, avalue, bytes); ++ ++ ffi_call_i386 (frame, stack); +} ++#endif /* !FFI_NO_RAW_API */ ++#endif /* !__x86_64__ */ ++ ++ ++#endif +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h +--- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-12-20 19:03:47.000000000 +0800 +@@ -0,0 +1,29 @@ ++#define X86_RET_FLOAT 0 ++#define X86_RET_DOUBLE 1 ++#define X86_RET_LDOUBLE 2 ++#define X86_RET_SINT8 3 ++#define X86_RET_SINT16 4 ++#define X86_RET_UINT8 5 ++#define X86_RET_UINT16 6 ++#define X86_RET_INT64 7 ++#define X86_RET_INT32 8 ++#define X86_RET_VOID 9 ++#define X86_RET_STRUCTPOP 10 ++#define X86_RET_STRUCTARG 11 ++#define X86_RET_STRUCT_1B 12 ++#define X86_RET_STRUCT_2B 13 ++#define X86_RET_UNUSED14 14 ++#define X86_RET_UNUSED15 15 ++ ++#define X86_RET_TYPE_MASK 15 ++#define X86_RET_POP_SHIFT 4 ++ ++#define R_EAX 0 ++#define R_EDX 1 ++#define R_ECX 2 ++ ++#ifdef __PCC__ ++# define HAVE_FASTCALL 0 ++#else ++# define HAVE_FASTCALL 1 ++#endif +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h +--- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-12-20 19:03:50.000000000 +0800 +@@ -0,0 +1,22 @@ ++#define UNIX64_RET_VOID 0 ++#define UNIX64_RET_UINT8 1 ++#define UNIX64_RET_UINT16 2 ++#define UNIX64_RET_UINT32 3 ++#define UNIX64_RET_SINT8 4 ++#define UNIX64_RET_SINT16 5 ++#define UNIX64_RET_SINT32 6 ++#define UNIX64_RET_INT64 7 ++#define UNIX64_RET_XMM32 8 ++#define UNIX64_RET_XMM64 9 ++#define UNIX64_RET_X87 10 ++#define UNIX64_RET_X87_2 11 ++#define UNIX64_RET_ST_XMM0_RAX 12 ++#define UNIX64_RET_ST_RAX_XMM0 13 ++#define UNIX64_RET_ST_XMM0_XMM1 14 ++#define UNIX64_RET_ST_RAX_RDX 15 ++ ++#define UNIX64_RET_LAST 15 ++ ++#define UNIX64_FLAG_RET_IN_MEM (1 << 10) ++#define UNIX64_FLAG_XMM_ARGS (1 << 11) ++#define UNIX64_SIZE_SHIFT 12 +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S +--- orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2015-12-20 18:53:04.000000000 +0800 +@@ -0,0 +1,1045 @@ ++#ifdef __i386__ + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ -+#endif /* !NO_JAVA_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c modified/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c ---- orig/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c 2015-04-26 08:39:05.000000000 +0800 -@@ -0,0 +1,242 @@ +/* ----------------------------------------------------------------------- -+ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green -+ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. ++ sysv.S - Copyright (c) 2013 The Written Word, Inc. ++ - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc. ++ ++ X86 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -38601,231 +29331,1035 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/prep_cif.c modified/Modules/_c + DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + -+#include -+#include -+#include -+ -+/* Round up to FFI_SIZEOF_ARG. */ -+ -+#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) -+ -+/* Perform machine independent initialization of aggregate type -+ specifications. */ ++#ifndef __x86_64__ + -+static ffi_status initialize_aggregate(ffi_type *arg) -+{ -+ ffi_type **ptr; ++#define LIBFFI_ASM ++#include ++#include ++#include "internal.h" + -+ if (UNLIKELY(arg == NULL || arg->elements == NULL)) -+ return FFI_BAD_TYPEDEF; ++#define C2(X, Y) X ## Y ++#define C1(X, Y) C2(X, Y) ++#ifdef __USER_LABEL_PREFIX__ ++# define C(X) C1(__USER_LABEL_PREFIX__, X) ++#else ++# define C(X) X ++#endif + -+ arg->size = 0; -+ arg->alignment = 0; ++#ifdef X86_DARWIN ++# define L(X) C1(L, X) ++#else ++# define L(X) C1(.L, X) ++#endif + -+ ptr = &(arg->elements[0]); ++#ifdef __ELF__ ++# define ENDF(X) .type X,@function; .size X, . - X ++#else ++# define ENDF(X) ++#endif + -+ if (UNLIKELY(ptr == 0)) -+ return FFI_BAD_TYPEDEF; ++/* Handle win32 fastcall name mangling. */ ++#ifdef X86_WIN32 ++# define ffi_call_i386 @ffi_call_i386@8 ++# define ffi_closure_inner @ffi_closure_inner@8 ++#else ++# define ffi_call_i386 C(ffi_call_i386) ++# define ffi_closure_inner C(ffi_closure_inner) ++#endif + -+ while ((*ptr) != NULL) -+ { -+ if (UNLIKELY(((*ptr)->size == 0) -+ && (initialize_aggregate((*ptr)) != FFI_OK))) -+ return FFI_BAD_TYPEDEF; ++/* This macro allows the safe creation of jump tables without an ++ actual table. The entry points into the table are all 8 bytes. ++ The use of ORG asserts that we're at the correct location. */ ++/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ ++#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) ++# define E(BASE, X) .balign 8 ++#else ++# define E(BASE, X) .balign 8; .org BASE + X * 8 ++#endif + -+ /* Perform a sanity check on the argument type */ -+ FFI_ASSERT_VALID_TYPE(*ptr); ++ .text ++ .balign 16 ++ .globl ffi_call_i386 ++ FFI_HIDDEN(ffi_call_i386) + -+ arg->size = ALIGN(arg->size, (*ptr)->alignment); -+ arg->size += (*ptr)->size; ++/* This is declared as + -+ arg->alignment = (arg->alignment > (*ptr)->alignment) ? -+ arg->alignment : (*ptr)->alignment; ++ void ffi_call_i386(struct call_frame *frame, char *argp) ++ __attribute__((fastcall)); + -+ ptr++; -+ } ++ Thus the arguments are present in + -+ /* Structure size includes tail padding. This is important for -+ structures that fit in one register on ABIs like the PowerPC64 -+ Linux ABI that right justify small structs in a register. -+ It's also needed for nested structure layout, for example -+ struct A { long a; char b; }; struct B { struct A x; char y; }; -+ should find y at an offset of 2*sizeof(long) and result in a -+ total size of 3*sizeof(long). */ -+ arg->size = ALIGN (arg->size, arg->alignment); ++ ecx: frame ++ edx: argp ++*/ + -+ /* On some targets, the ABI defines that structures have an additional -+ alignment beyond the "natural" one based on their elements. */ -+#ifdef FFI_AGGREGATE_ALIGNMENT -+ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) -+ arg->alignment = FFI_AGGREGATE_ALIGNMENT; ++ffi_call_i386: ++L(UW0): ++ # cfi_startproc ++#if !HAVE_FASTCALL ++ movl 4(%esp), %ecx ++ movl 8(%esp), %edx +#endif ++ movl (%esp), %eax /* move the return address */ ++ movl %ebp, (%ecx) /* store %ebp into local frame */ ++ movl %eax, 4(%ecx) /* store retaddr into local frame */ + -+ if (arg->size == 0) -+ return FFI_BAD_TYPEDEF; -+ else -+ return FFI_OK; -+} -+ -+#ifndef __CRIS__ -+/* The CRIS ABI specifies structure elements to have byte -+ alignment only, so it completely overrides this functions, -+ which assumes "natural" alignment and padding. */ -+ -+/* Perform machine independent ffi_cif preparation, then call -+ machine dependent routine. */ -+ -+/* For non variadic functions isvariadic should be 0 and -+ nfixedargs==ntotalargs. -+ -+ For variadic calls, isvariadic should be 1 and nfixedargs -+ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ -+ ++ /* New stack frame based off ebp. This is a itty bit of unwind ++ trickery in that the CFA *has* changed. There is no easy way ++ to describe it correctly on entry to the function. Fortunately, ++ it doesn't matter too much since at all points we can correctly ++ unwind back to ffi_call. Note that the location to which we ++ moved the return address is (the new) CFA-4, so from the ++ perspective of the unwind info, it hasn't moved. */ ++ movl %ecx, %ebp ++L(UW1): ++ # cfi_def_cfa(%ebp, 8) ++ # cfi_rel_offset(%ebp, 0) + -+ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ unsigned bytes = 0; -+ unsigned int i; -+ ffi_type **ptr; ++ movl %edx, %esp /* set outgoing argument stack */ ++ movl 20+R_EAX*4(%ebp), %eax /* set register arguments */ ++ movl 20+R_EDX*4(%ebp), %edx ++ movl 20+R_ECX*4(%ebp), %ecx + -+ FFI_ASSERT(cif != NULL); -+ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); -+ FFI_ASSERT(nfixedargs <= ntotalargs); ++ call *8(%ebp) + -+ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) -+ return FFI_BAD_ABI; ++ movl 12(%ebp), %ecx /* load return type code */ ++ movl %ebx, 8(%ebp) /* preserve %ebx */ ++L(UW2): ++ # cfi_rel_offset(%ebx, 8) + -+ cif->abi = abi; -+ cif->arg_types = atypes; -+ cif->nargs = ntotalargs; -+ cif->rtype = rtype; ++ andl $X86_RET_TYPE_MASK, %ecx ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc1): ++ leal L(store_table)-L(pc1)(%ebx, %ecx, 8), %ebx ++#else ++ leal L(store_table)(,%ecx, 8), %ebx ++#endif ++ movl 16(%ebp), %ecx /* load result address */ ++ jmp *%ebx ++ ++ .balign 8 ++L(store_table): ++E(L(store_table), X86_RET_FLOAT) ++ fstps (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_DOUBLE) ++ fstpl (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_LDOUBLE) ++ fstpt (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_SINT8) ++ movsbl %al, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_SINT16) ++ movswl %ax, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_UINT8) ++ movzbl %al, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_UINT16) ++ movzwl %ax, %eax ++ mov %eax, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_INT64) ++ movl %edx, 4(%ecx) ++ /* fallthru */ ++E(L(store_table), X86_RET_INT32) ++ movl %eax, (%ecx) ++ /* fallthru */ ++E(L(store_table), X86_RET_VOID) ++L(e1): ++ movl 8(%ebp), %ebx ++ movl %ebp, %esp ++ popl %ebp ++L(UW3): ++ # cfi_remember_state ++ # cfi_def_cfa(%esp, 4) ++ # cfi_restore(%ebx) ++ # cfi_restore(%ebp) ++ ret ++L(UW4): ++ # cfi_restore_state ++ ++E(L(store_table), X86_RET_STRUCTPOP) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCTARG) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCT_1B) ++ movb %al, (%ecx) ++ jmp L(e1) ++E(L(store_table), X86_RET_STRUCT_2B) ++ movw %ax, (%ecx) ++ jmp L(e1) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(store_table), X86_RET_UNUSED14) ++ ud2 ++E(L(store_table), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW5): ++ # cfi_endproc ++ENDF(ffi_call_i386) ++ ++/* The inner helper is declared as ++ ++ void ffi_closure_inner(struct closure_frame *frame, char *argp) ++ __attribute_((fastcall)) ++ ++ Thus the arguments are placed in ++ ++ ecx: frame ++ edx: argp ++*/ + -+ cif->flags = 0; ++/* Macros to help setting up the closure_data structure. */ + -+#if HAVE_LONG_DOUBLE_VARIANT -+ ffi_prep_types (abi); ++#if HAVE_FASTCALL ++# define closure_FS (40 + 4) ++# define closure_CF 0 ++#else ++# define closure_FS (8 + 40 + 12) ++# define closure_CF 8 ++#endif ++ ++#define FFI_CLOSURE_SAVE_REGS \ ++ movl %eax, closure_CF+16+R_EAX*4(%esp); \ ++ movl %edx, closure_CF+16+R_EDX*4(%esp); \ ++ movl %ecx, closure_CF+16+R_ECX*4(%esp) ++ ++#define FFI_CLOSURE_COPY_TRAMP_DATA \ ++ movl FFI_TRAMPOLINE_SIZE(%eax), %edx; /* copy cif */ \ ++ movl FFI_TRAMPOLINE_SIZE+4(%eax), %ecx; /* copy fun */ \ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %eax; /* copy user_data */ \ ++ movl %edx, closure_CF+28(%esp); \ ++ movl %ecx, closure_CF+32(%esp); \ ++ movl %eax, closure_CF+36(%esp) ++ ++#if HAVE_FASTCALL ++# define FFI_CLOSURE_PREP_CALL \ ++ movl %esp, %ecx; /* load closure_data */ \ ++ leal closure_FS+4(%esp), %edx; /* load incoming stack */ ++#else ++# define FFI_CLOSURE_PREP_CALL \ ++ leal closure_CF(%esp), %ecx; /* load closure_data */ \ ++ leal closure_FS+4(%esp), %edx; /* load incoming stack */ \ ++ movl %ecx, (%esp); \ ++ movl %edx, 4(%esp) +#endif + -+ /* Initialize the return type if necessary */ -+ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; ++#define FFI_CLOSURE_CALL_INNER(UWN) \ ++ call ffi_closure_inner + -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if (rtype->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the return type */ -+ FFI_ASSERT_VALID_TYPE(cif->rtype); ++#define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ leal L(C1(load_table,N))(, %eax, 8), %edx; \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx + -+ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ /* Make space for the return structure pointer */ -+ if (cif->rtype->type == FFI_TYPE_STRUCT -+#ifdef TILE -+ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) -+#endif -+#ifdef XTENSA -+ && (cif->rtype->size > 16) -+#endif -+#ifdef NIOS2 -+ && (cif->rtype->size > 8) -+#endif -+ ) -+ bytes = STACK_ARG_SIZE(sizeof(void*)); -+#endif ++#ifdef __PIC__ ++# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++# undef FFI_CLOSURE_MASK_AND_JUMP ++# define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ call C(__x86.get_pc_thunk.dx); \ ++L(C1(pc,N)): \ ++ leal L(C1(load_table,N))-L(C1(pc,N))(%edx, %eax, 8), %edx; \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx ++# else ++# define FFI_CLOSURE_CALL_INNER_SAVE_EBX ++# undef FFI_CLOSURE_CALL_INNER ++# define FFI_CLOSURE_CALL_INNER(UWN) \ ++ movl %ebx, 40(%esp); /* save ebx */ \ ++L(C1(UW,UWN)): \ ++ # cfi_rel_offset(%ebx, 40); \ ++ call C(__x86.get_pc_thunk.bx); /* load got register */ \ ++ addl $C(_GLOBAL_OFFSET_TABLE_), %ebx; \ ++ call ffi_closure_inner@PLT ++# undef FFI_CLOSURE_MASK_AND_JUMP ++# define FFI_CLOSURE_MASK_AND_JUMP(N, UWN) \ ++ andl $X86_RET_TYPE_MASK, %eax; \ ++ leal L(C1(load_table,N))@GOTOFF(%ebx, %eax, 8), %edx; \ ++ movl 40(%esp), %ebx; /* restore ebx */ \ ++L(C1(UW,UWN)): \ ++ # cfi_restore(%ebx); \ ++ movl closure_CF(%esp), %eax; /* optimiztic load */ \ ++ jmp *%edx ++# endif /* DARWIN || HIDDEN */ ++#endif /* __PIC__ */ ++ ++ .balign 16 ++ .globl C(ffi_go_closure_EAX) ++ FFI_HIDDEN(C(ffi_go_closure_EAX)) ++C(ffi_go_closure_EAX): ++L(UW6): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW7): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%eax), %edx /* copy cif */ ++ movl 8(%eax), %ecx /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %ecx, closure_CF+32(%esp) ++ movl %eax, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_i386) ++L(UW8): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_EAX)) ++ ++ .balign 16 ++ .globl C(ffi_go_closure_ECX) ++ FFI_HIDDEN(C(ffi_go_closure_ECX)) ++C(ffi_go_closure_ECX): ++L(UW9): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW10): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%ecx), %edx /* copy cif */ ++ movl 8(%ecx), %eax /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %eax, closure_CF+32(%esp) ++ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_i386) ++L(UW11): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_ECX)) ++ ++/* The closure entry points are reached from the ffi_closure trampoline. ++ On entry, %eax contains the address of the ffi_closure. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_i386) ++ FFI_HIDDEN(C(ffi_closure_i386)) ++ ++C(ffi_closure_i386): ++L(UW12): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW13): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ ++ FFI_CLOSURE_SAVE_REGS ++ FFI_CLOSURE_COPY_TRAMP_DATA ++ ++ /* Entry point from preceeding Go closures. */ ++L(do_closure_i386): ++ ++ FFI_CLOSURE_PREP_CALL ++ FFI_CLOSURE_CALL_INNER(14) ++ FFI_CLOSURE_MASK_AND_JUMP(2, 15) ++ ++ .balign 8 ++L(load_table2): ++E(L(load_table2), X86_RET_FLOAT) ++ flds closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_DOUBLE) ++ fldl closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_LDOUBLE) ++ fldt closure_CF(%esp) ++ jmp L(e2) ++E(L(load_table2), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_INT64) ++ movl closure_CF+4(%esp), %edx ++ jmp L(e2) ++E(L(load_table2), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table2), X86_RET_VOID) ++L(e2): ++ addl $closure_FS, %esp ++L(UW16): ++ # cfi_adjust_cfa_offset(-closure_FS) ++ ret ++L(UW17): ++ # cfi_adjust_cfa_offset(closure_FS) ++E(L(load_table2), X86_RET_STRUCTPOP) ++ addl $closure_FS, %esp ++L(UW18): ++ # cfi_adjust_cfa_offset(-closure_FS) ++ ret $4 ++L(UW19): ++ # cfi_adjust_cfa_offset(closure_FS) ++E(L(load_table2), X86_RET_STRUCTARG) ++ jmp L(e2) ++E(L(load_table2), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e2) ++E(L(load_table2), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e2) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table2), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table2), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW20): ++ # cfi_endproc ++ENDF(C(ffi_closure_i386)) ++ ++ .balign 16 ++ .globl C(ffi_go_closure_STDCALL) ++ FFI_HIDDEN(C(ffi_go_closure_STDCALL)) ++C(ffi_go_closure_STDCALL): ++L(UW21): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW22): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl 4(%ecx), %edx /* copy cif */ ++ movl 8(%ecx), %eax /* copy fun */ ++ movl %edx, closure_CF+28(%esp) ++ movl %eax, closure_CF+32(%esp) ++ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ ++ jmp L(do_closure_STDCALL) ++L(UW23): ++ # cfi_endproc ++ENDF(C(ffi_go_closure_STDCALL)) ++ ++/* For REGISTER, we have no available parameter registers, and so we ++ enter here having pushed the closure onto the stack. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_REGISTER) ++ FFI_HIDDEN(C(ffi_closure_REGISTER)) ++C(ffi_closure_REGISTER): ++L(UW24): ++ # cfi_startproc ++ # cfi_def_cfa(%esp, 8) ++ # cfi_offset(%eip, -8) ++ subl $closure_FS-4, %esp ++L(UW25): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ FFI_CLOSURE_SAVE_REGS ++ movl closure_FS-4(%esp), %ecx /* load retaddr */ ++ movl closure_FS(%esp), %eax /* load closure */ ++ movl %ecx, closure_FS(%esp) /* move retaddr */ ++ jmp L(do_closure_REGISTER) ++L(UW26): ++ # cfi_endproc ++ENDF(C(ffi_closure_REGISTER)) ++ ++/* For STDCALL (and others), we need to pop N bytes of arguments off ++ the stack following the closure. The amount needing to be popped ++ is returned to us from ffi_closure_inner. */ ++ ++ .balign 16 ++ .globl C(ffi_closure_STDCALL) ++ FFI_HIDDEN(C(ffi_closure_STDCALL)) ++C(ffi_closure_STDCALL): ++L(UW27): ++ # cfi_startproc ++ subl $closure_FS, %esp ++L(UW28): ++ # cfi_def_cfa_offset(closure_FS + 4) ++ ++ FFI_CLOSURE_SAVE_REGS ++ ++ /* Entry point from ffi_closure_REGISTER. */ ++L(do_closure_REGISTER): ++ ++ FFI_CLOSURE_COPY_TRAMP_DATA ++ ++ /* Entry point from preceeding Go closure. */ ++L(do_closure_STDCALL): ++ ++ FFI_CLOSURE_PREP_CALL ++ FFI_CLOSURE_CALL_INNER(29) ++ ++ movl %eax, %ecx ++ shrl $X86_RET_POP_SHIFT, %ecx /* isolate pop count */ ++ leal closure_FS(%esp, %ecx), %ecx /* compute popped esp */ ++ movl closure_FS(%esp), %edx /* move return address */ ++ movl %edx, (%ecx) ++ ++ /* From this point on, the value of %esp upon return is %ecx+4, ++ and we've copied the return address to %ecx to make return easy. ++ There's no point in representing this in the unwind info, as ++ there is always a window between the mov and the ret which ++ will be wrong from one point of view or another. */ ++ ++ FFI_CLOSURE_MASK_AND_JUMP(3, 30) ++ ++ .balign 8 ++L(load_table3): ++E(L(load_table3), X86_RET_FLOAT) ++ flds closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_DOUBLE) ++ fldl closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_LDOUBLE) ++ fldt closure_CF(%esp) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_SINT8) ++ movsbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_SINT16) ++ movswl %ax, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_UINT8) ++ movzbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_UINT16) ++ movzwl %ax, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_INT64) ++ movl closure_CF+4(%esp), %edx ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_INT32) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_VOID) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCTPOP) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCTARG) ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ movl %ecx, %esp ++ ret ++E(L(load_table3), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ movl %ecx, %esp ++ ret + -+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) -+ { ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table3), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table3), X86_RET_UNUSED15) ++ ud2 + -+ /* Initialize any uninitialized aggregate type definitions */ -+ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; ++L(UW31): ++ # cfi_endproc ++ENDF(C(ffi_closure_STDCALL)) + -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if ((*ptr)->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the argument type, do this -+ check after the initialization. */ -+ FFI_ASSERT_VALID_TYPE(*ptr); ++#if !FFI_NO_RAW_API + -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ { -+ /* Add any padding if necessary */ -+ if (((*ptr)->alignment - 1) & bytes) -+ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); ++#define raw_closure_S_FS (16+16+12) ++ ++ .balign 16 ++ .globl C(ffi_closure_raw_SYSV) ++ FFI_HIDDEN(C(ffi_closure_raw_SYSV)) ++C(ffi_closure_raw_SYSV): ++L(UW32): ++ # cfi_startproc ++ subl $raw_closure_S_FS, %esp ++L(UW33): ++ # cfi_def_cfa_offset(raw_closure_S_FS + 4) ++ movl %ebx, raw_closure_S_FS-4(%esp) ++L(UW34): ++ # cfi_rel_offset(%ebx, raw_closure_S_FS-4) ++ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ ++ movl %edx, 12(%esp) ++ leal raw_closure_S_FS+4(%esp), %edx /* load raw_args */ ++ movl %edx, 8(%esp) ++ leal 16(%esp), %edx /* load &res */ ++ movl %edx, 4(%esp) ++ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ ++ movl %ebx, (%esp) ++ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ ++ ++ movl 20(%ebx), %eax /* load cif->flags */ ++ andl $X86_RET_TYPE_MASK, %eax ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc4): ++ leal L(load_table4)-L(pc4)(%ebx, %eax, 8), %ecx ++#else ++ leal L(load_table4)(,%eax, 8), %ecx ++#endif ++ movl raw_closure_S_FS-4(%esp), %ebx ++L(UW35): ++ # cfi_restore(%ebx) ++ movl 16(%esp), %eax /* Optimistic load */ ++ jmp *%ecx ++ ++ .balign 8 ++L(load_table4): ++E(L(load_table4), X86_RET_FLOAT) ++ flds 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_DOUBLE) ++ fldl 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_LDOUBLE) ++ fldt 16(%esp) ++ jmp L(e4) ++E(L(load_table4), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_INT64) ++ movl 16+4(%esp), %edx ++ jmp L(e4) ++E(L(load_table4), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table4), X86_RET_VOID) ++L(e4): ++ addl $raw_closure_S_FS, %esp ++L(UW36): ++ # cfi_adjust_cfa_offset(-raw_closure_S_FS) ++ ret ++L(UW37): ++ # cfi_adjust_cfa_offset(raw_closure_S_FS) ++E(L(load_table4), X86_RET_STRUCTPOP) ++ addl $raw_closure_S_FS, %esp ++L(UW38): ++ # cfi_adjust_cfa_offset(-raw_closure_S_FS) ++ ret $4 ++L(UW39): ++ # cfi_adjust_cfa_offset(raw_closure_S_FS) ++E(L(load_table4), X86_RET_STRUCTARG) ++ jmp L(e4) ++E(L(load_table4), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e4) ++E(L(load_table4), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e4) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table4), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table4), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW40): ++ # cfi_endproc ++ENDF(C(ffi_closure_raw_SYSV)) ++ ++#define raw_closure_T_FS (16+16+8) ++ ++ .balign 16 ++ .globl C(ffi_closure_raw_THISCALL) ++ FFI_HIDDEN(C(ffi_closure_raw_THISCALL)) ++C(ffi_closure_raw_THISCALL): ++L(UW41): ++ # cfi_startproc ++ /* Rearrange the stack such that %ecx is the first argument. ++ This means moving the return address. */ ++ popl %edx ++L(UW42): ++ # cfi_def_cfa_offset(0) ++ # cfi_register(%eip, %edx) ++ pushl %ecx ++L(UW43): ++ # cfi_adjust_cfa_offset(4) ++ pushl %edx ++L(UW44): ++ # cfi_adjust_cfa_offset(4) ++ # cfi_rel_offset(%eip, 0) ++ subl $raw_closure_T_FS, %esp ++L(UW45): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++ movl %ebx, raw_closure_T_FS-4(%esp) ++L(UW46): ++ # cfi_rel_offset(%ebx, raw_closure_T_FS-4) ++ ++ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ ++ movl %edx, 12(%esp) ++ leal raw_closure_T_FS+4(%esp), %edx /* load raw_args */ ++ movl %edx, 8(%esp) ++ leal 16(%esp), %edx /* load &res */ ++ movl %edx, 4(%esp) ++ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ ++ movl %ebx, (%esp) ++ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ ++ ++ movl 20(%ebx), %eax /* load cif->flags */ ++ andl $X86_RET_TYPE_MASK, %eax ++#ifdef __PIC__ ++ call C(__x86.get_pc_thunk.bx) ++L(pc5): ++ leal L(load_table5)-L(pc5)(%ebx, %eax, 8), %ecx ++#else ++ leal L(load_table5)(,%eax, 8), %ecx ++#endif ++ movl raw_closure_T_FS-4(%esp), %ebx ++L(UW47): ++ # cfi_restore(%ebx) ++ movl 16(%esp), %eax /* Optimistic load */ ++ jmp *%ecx ++ ++ .balign 8 ++L(load_table5): ++E(L(load_table5), X86_RET_FLOAT) ++ flds 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_DOUBLE) ++ fldl 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_LDOUBLE) ++ fldt 16(%esp) ++ jmp L(e5) ++E(L(load_table5), X86_RET_SINT8) ++ movsbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_SINT16) ++ movswl %ax, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_UINT8) ++ movzbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_UINT16) ++ movzwl %ax, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_INT64) ++ movl 16+4(%esp), %edx ++ jmp L(e5) ++E(L(load_table5), X86_RET_INT32) ++ nop ++ /* fallthru */ ++E(L(load_table5), X86_RET_VOID) ++L(e5): ++ addl $raw_closure_T_FS, %esp ++L(UW48): ++ # cfi_adjust_cfa_offset(-raw_closure_T_FS) ++ /* Remove the extra %ecx argument we pushed. */ ++ ret $4 ++L(UW49): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++E(L(load_table5), X86_RET_STRUCTPOP) ++ addl $raw_closure_T_FS, %esp ++L(UW50): ++ # cfi_adjust_cfa_offset(-raw_closure_T_FS) ++ ret $8 ++L(UW51): ++ # cfi_adjust_cfa_offset(raw_closure_T_FS) ++E(L(load_table5), X86_RET_STRUCTARG) ++ jmp L(e5) ++E(L(load_table5), X86_RET_STRUCT_1B) ++ movzbl %al, %eax ++ jmp L(e5) ++E(L(load_table5), X86_RET_STRUCT_2B) ++ movzwl %ax, %eax ++ jmp L(e5) ++ ++ /* Fill out the table so that bad values are predictable. */ ++E(L(load_table5), X86_RET_UNUSED14) ++ ud2 ++E(L(load_table5), X86_RET_UNUSED15) ++ ud2 ++ ++L(UW52): ++ # cfi_endproc ++ENDF(C(ffi_closure_raw_THISCALL)) + -+#ifdef TILE -+ if (bytes < 10 * FFI_SIZEOF_ARG && -+ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) -+ { -+ /* An argument is never split between the 10 parameter -+ registers and the stack. */ -+ bytes = 10 * FFI_SIZEOF_ARG; -+ } -+#endif -+#ifdef XTENSA -+ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) -+ bytes = 6*4; -+#endif ++#endif /* !FFI_NO_RAW_API */ + -+ bytes += STACK_ARG_SIZE((*ptr)->size); -+ } ++#ifdef X86_DARWIN ++# define COMDAT(X) \ ++ .section __TEXT,__textcoal_nt,coalesced,pure_instructions; \ ++ .weak_definition X; \ ++ .private_extern X ++#elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__)) ++# define COMDAT(X) \ ++ .section .text.X,"axG",@progbits,X,comdat; \ ++ .globl X; \ ++ FFI_HIDDEN(X) ++#else ++# define COMDAT(X) +#endif -+ } + -+ cif->bytes = bytes; ++#if defined(__PIC__) ++ COMDAT(C(__x86.get_pc_thunk.bx)) ++C(__x86.get_pc_thunk.bx): ++ movl (%esp), %ebx ++ ret ++ENDF(C(__x86.get_pc_thunk.bx)) ++# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE ++ COMDAT(C(__x86.get_pc_thunk.dx)) ++C(__x86.get_pc_thunk.dx): ++ movl (%esp), %edx ++ ret ++ENDF(C(__x86.get_pc_thunk.dx)) ++#endif /* DARWIN || HIDDEN */ ++#endif /* __PIC__ */ + -+ /* Perform machine dependent cif processing */ -+#ifdef FFI_TARGET_SPECIFIC_VARIADIC -+ if (isvariadic) -+ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); ++/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ ++ ++#ifdef __APPLE__ ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EHFrame0: ++#elif defined(X86_WIN32) ++.section .eh_frame,"r" ++#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) ++.section .eh_frame,EH_FRAME_FLAGS,@unwind ++#else ++.section .eh_frame,EH_FRAME_FLAGS,@progbits +#endif + -+ return ffi_prep_cif_machdep(cif); -+} -+#endif /* not __CRIS__ */ ++#ifdef HAVE_AS_X86_PCREL ++# define PCREL(X) X - . ++#else ++# define PCREL(X) X@rel ++#endif ++ ++/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ ++#define ADV(N, P) .byte 2, L(N)-L(P) ++ ++ .balign 4 ++L(CIE): ++ .set L(set0),L(ECIE)-L(SCIE) ++ .long L(set0) /* CIE Length */ ++L(SCIE): ++ .long 0 /* CIE Identifier Tag */ ++ .byte 1 /* CIE Version */ ++ .ascii "zR\0" /* CIE Augmentation */ ++ .byte 1 /* CIE Code Alignment Factor */ ++ .byte 0x7c /* CIE Data Alignment Factor */ ++ .byte 0x8 /* CIE RA Column */ ++ .byte 1 /* Augmentation size */ ++ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ ++ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */ ++ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */ ++ .balign 4 ++L(ECIE): ++ ++ .set L(set1),L(EFDE1)-L(SFDE1) ++ .long L(set1) /* FDE Length */ ++L(SFDE1): ++ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW0)) /* Initial location */ ++ .long L(UW5)-L(UW0) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW1, UW0) ++ .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */ ++ .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */ ++ ADV(UW2, UW1) ++ .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */ ++ ADV(UW3, UW2) ++ .byte 0xa /* DW_CFA_remember_state */ ++ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */ ++ .byte 0xc0+3 /* DW_CFA_restore, %ebx */ ++ .byte 0xc0+5 /* DW_CFA_restore, %ebp */ ++ ADV(UW4, UW3) ++ .byte 0xb /* DW_CFA_restore_state */ ++ .balign 4 ++L(EFDE1): ++ ++ .set L(set2),L(EFDE2)-L(SFDE2) ++ .long L(set2) /* FDE Length */ ++L(SFDE2): ++ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW6)) /* Initial location */ ++ .long L(UW8)-L(UW6) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW7, UW6) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE2): ++ ++ .set L(set3),L(EFDE3)-L(SFDE3) ++ .long L(set3) /* FDE Length */ ++L(SFDE3): ++ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW9)) /* Initial location */ ++ .long L(UW11)-L(UW9) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW10, UW9) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE3): ++ ++ .set L(set4),L(EFDE4)-L(SFDE4) ++ .long L(set4) /* FDE Length */ ++L(SFDE4): ++ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW12)) /* Initial location */ ++ .long L(UW20)-L(UW12) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW13, UW12) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX ++ ADV(UW14, UW13) ++ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ ++ ADV(UW15, UW14) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW16, UW15) ++#else ++ ADV(UW16, UW13) ++#endif ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW17, UW16) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW18, UW17) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW19, UW18) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE4): ++ ++ .set L(set5),L(EFDE5)-L(SFDE5) ++ .long L(set5) /* FDE Length */ ++L(SFDE5): ++ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW21)) /* Initial location */ ++ .long L(UW23)-L(UW21) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW22, UW21) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE5): ++ ++ .set L(set6),L(EFDE6)-L(SFDE6) ++ .long L(set6) /* FDE Length */ ++L(SFDE6): ++ .long L(SFDE6)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW24)) /* Initial location */ ++ .long L(UW26)-L(UW24) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */ ++ ADV(UW25, UW24) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE6): ++ ++ .set L(set7),L(EFDE7)-L(SFDE7) ++ .long L(set7) /* FDE Length */ ++L(SFDE7): ++ .long L(SFDE7)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW27)) /* Initial location */ ++ .long L(UW31)-L(UW27) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW28, UW27) ++ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ ++#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX ++ ADV(UW29, UW28) ++ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ ++ ADV(UW30, UW29) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++#endif ++ .balign 4 ++L(EFDE7): + -+ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); -+} ++#if !FFI_NO_RAW_API ++ .set L(set8),L(EFDE8)-L(SFDE8) ++ .long L(set8) /* FDE Length */ ++L(SFDE8): ++ .long L(SFDE8)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW32)) /* Initial location */ ++ .long L(UW40)-L(UW32) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW33, UW32) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW34, UW33) ++ .byte 0x80+3, 2 /* DW_CFA_offset %ebx 2*-4 */ ++ ADV(UW35, UW34) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW36, UW35) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW37, UW36) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW38, UW37) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW39, UW38) ++ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE8): ++ ++ .set L(set9),L(EFDE9)-L(SFDE9) ++ .long L(set9) /* FDE Length */ ++L(SFDE9): ++ .long L(SFDE9)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW41)) /* Initial location */ ++ .long L(UW52)-L(UW41) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW42, UW41) ++ .byte 0xe, 0 /* DW_CFA_def_cfa_offset */ ++ .byte 0x9, 8, 2 /* DW_CFA_register %eip, %edx */ ++ ADV(UW43, UW42) ++ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ ++ ADV(UW44, UW43) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ .byte 0x80+8, 2 /* DW_CFA_offset %eip 2*-4 */ ++ ADV(UW45, UW44) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW46, UW45) ++ .byte 0x80+3, 3 /* DW_CFA_offset %ebx 3*-4 */ ++ ADV(UW47, UW46) ++ .byte 0xc0+3 /* DW_CFA_restore %ebx */ ++ ADV(UW48, UW47) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW49, UW48) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW50, UW49) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ ++ ADV(UW51, UW50) ++ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ ++ .balign 4 ++L(EFDE9): ++#endif /* !FFI_NO_RAW_API */ + -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); -+} ++#endif /* ifndef __x86_64__ */ + -+#if FFI_CLOSURES ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif + -+ffi_status -+ffi_prep_closure (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data) -+{ -+ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -+} + +#endif -diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c modified/Modules/_ctypes/libffi_ios_aarch64/raw_api.c ---- orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios_aarch64/raw_api.c 2015-04-26 08:39:05.000000000 +0800 -@@ -0,0 +1,267 @@ +\ No newline at end of file +diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S +--- orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2015-12-20 18:53:04.000000000 +0800 +@@ -0,0 +1,551 @@ ++#ifdef __x86_64__ ++ +/* ----------------------------------------------------------------------- -+ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. ++ unix64.S - Copyright (c) 2013 The Written Word, Inc. ++ - Copyright (c) 2008 Red Hat, Inc ++ - Copyright (c) 2002 Bo Thorsen + -+ Author: Kresten Krab Thorup ++ x86-64 Foreign Function Interface + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the @@ -38848,247 +30382,528 @@ diff -Nru orig/Modules/_ctypes/libffi_ios_aarch64/raw_api.c modified/Modules/_ct + DEALINGS IN THE SOFTWARE. + ----------------------------------------------------------------------- */ + -+/* This file defines generic functions for use with the raw api. */ -+ ++#ifdef __x86_64__ ++#define LIBFFI_ASM ++#include +#include -+#include -+ -+#if !FFI_NO_RAW_API -+ -+size_t -+ffi_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; -+ -+ ffi_type **at = cif->arg_types; -+ -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*at)->type == FFI_TYPE_STRUCT) -+ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); -+ else -+#endif -+ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); -+ } -+ -+ return result; -+} -+ ++#include "internal64.h" + -+void -+ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; -+ -+#if WORDS_BIGENDIAN -+ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); -+ break; -+ -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); -+ break; -+#endif -+ -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ *args = (raw++)->ptr; -+ break; -+#endif -+ -+ case FFI_TYPE_COMPLEX: -+ *args = (raw++)->ptr; -+ break; -+ -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; -+ -+ default: -+ *args = raw; -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+ -+#else /* WORDS_BIGENDIAN */ -+ -+#if !PDP ++ .text + -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*tp)->type == FFI_TYPE_STRUCT) -+ { -+ *args = (raw++)->ptr; -+ } -+ else ++#define C2(X, Y) X ## Y ++#define C1(X, Y) C2(X, Y) ++#ifdef __USER_LABEL_PREFIX__ ++# define C(X) C1(__USER_LABEL_PREFIX__, X) ++#else ++# define C(X) X +#endif -+ if ((*tp)->type == FFI_TYPE_COMPLEX) -+ { -+ *args = (raw++)->ptr; -+ } -+ else -+ { -+ *args = (void*) raw; -+ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); -+ } -+ } + ++#ifdef __APPLE__ ++# define L(X) C1(L, X) +#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ ++# define L(X) C1(.L, X) ++#endif + -+#endif /* WORDS_BIGENDIAN */ -+} ++#ifdef __ELF__ ++# define PLT(X) X@PLT ++# define ENDF(X) .type X,@function; .size X, . - X ++#else ++# define PLT(X) X ++# define ENDF(X) ++#endif + -+void -+ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; ++/* This macro allows the safe creation of jump tables without an ++ actual table. The entry points into the table are all 8 bytes. ++ The use of ORG asserts that we're at the correct location. */ ++/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ ++#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) ++# define E(BASE, X) .balign 8 ++#else ++# define E(BASE, X) .balign 8; .org BASE + X * 8 ++#endif + -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ (raw++)->uint = *(UINT8*) (*args); -+ break; ++/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, ++ void *raddr, void (*fnaddr)(void)); + -+ case FFI_TYPE_SINT8: -+ (raw++)->sint = *(SINT8*) (*args); -+ break; ++ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame ++ for this function. This has been allocated by ffi_call. We also ++ deallocate some of the stack that has been alloca'd. */ + -+ case FFI_TYPE_UINT16: -+ (raw++)->uint = *(UINT16*) (*args); -+ break; ++ .balign 8 ++ .globl C(ffi_call_unix64) ++ FFI_HIDDEN(C(ffi_call_unix64)) + -+ case FFI_TYPE_SINT16: -+ (raw++)->sint = *(SINT16*) (*args); -+ break; ++C(ffi_call_unix64): ++L(UW0): ++ movq (%rsp), %r10 /* Load return address. */ ++ leaq (%rdi, %rsi), %rax /* Find local stack base. */ ++ movq %rdx, (%rax) /* Save flags. */ ++ movq %rcx, 8(%rax) /* Save raddr. */ ++ movq %rbp, 16(%rax) /* Save old frame pointer. */ ++ movq %r10, 24(%rax) /* Relocate return address. */ ++ movq %rax, %rbp /* Finalize local stack frame. */ + -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ (raw++)->uint = *(UINT32*) (*args); -+ break; ++ /* New stack frame based off rbp. This is a itty bit of unwind ++ trickery in that the CFA *has* changed. There is no easy way ++ to describe it correctly on entry to the function. Fortunately, ++ it doesn't matter too much since at all points we can correctly ++ unwind back to ffi_call. Note that the location to which we ++ moved the return address is (the new) CFA-8, so from the ++ perspective of the unwind info, it hasn't moved. */ ++L(UW1): ++ /* cfi_def_cfa(%rbp, 32) */ ++ /* cfi_rel_offset(%rbp, 16) */ + -+ case FFI_TYPE_SINT32: -+ (raw++)->sint = *(SINT32*) (*args); -+ break; -+#endif ++ movq %rdi, %r10 /* Save a copy of the register area. */ ++ movq %r8, %r11 /* Save a copy of the target fn. */ ++ movl %r9d, %eax /* Set number of SSE registers. */ + -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ (raw++)->ptr = *args; -+ break; -+#endif ++ /* Load up all argument registers. */ ++ movq (%r10), %rdi ++ movq 0x08(%r10), %rsi ++ movq 0x10(%r10), %rdx ++ movq 0x18(%r10), %rcx ++ movq 0x20(%r10), %r8 ++ movq 0x28(%r10), %r9 ++ movl 0xb0(%r10), %eax ++ testl %eax, %eax ++ jnz L(load_sse) ++L(ret_from_load_sse): + -+ case FFI_TYPE_COMPLEX: -+ (raw++)->ptr = *args; -+ break; ++ /* Deallocate the reg arg area, except for r10, then load via pop. */ ++ leaq 0xb8(%r10), %rsp ++ popq %r10 + -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; ++ /* Call the user function. */ ++ call *%r11 + -+ default: -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+} ++ /* Deallocate stack arg area; local stack frame in redzone. */ ++ leaq 24(%rbp), %rsp + -+#if !FFI_NATIVE_RAW_API ++ movq 0(%rbp), %rcx /* Reload flags. */ ++ movq 8(%rbp), %rdi /* Reload raddr. */ ++ movq 16(%rbp), %rbp /* Reload old frame pointer. */ ++L(UW2): ++ /* cfi_remember_state */ ++ /* cfi_def_cfa(%rsp, 8) */ ++ /* cfi_restore(%rbp) */ + ++ /* The first byte of the flags contains the FFI_TYPE. */ ++ cmpb $UNIX64_RET_LAST, %cl ++ movzbl %cl, %r10d ++ leaq L(store_table)(%rip), %r11 ++ ja L(sa) ++ leaq (%r11, %r10, 8), %r10 + -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ ++ /* Prep for the structure cases: scratch area in redzone. */ ++ leaq -20(%rsp), %rsi ++ jmp *%r10 + -+void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+} ++ .balign 8 ++L(store_table): ++E(L(store_table), UNIX64_RET_VOID) ++ ret ++E(L(store_table), UNIX64_RET_UINT8) ++ movzbl %al, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_UINT16) ++ movzwl %ax, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_UINT32) ++ movl %eax, %eax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT8) ++ movsbq %al, %rax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT16) ++ movswq %ax, %rax ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_SINT32) ++ cltq ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_INT64) ++ movq %rax, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_XMM32) ++ movd %xmm0, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_XMM64) ++ movq %xmm0, (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_X87) ++ fstpt (%rdi) ++ ret ++E(L(store_table), UNIX64_RET_X87_2) ++ fstpt (%rdi) ++ fstpt 16(%rdi) ++ ret ++E(L(store_table), UNIX64_RET_ST_XMM0_RAX) ++ movq %rax, 8(%rsi) ++ jmp L(s3) ++E(L(store_table), UNIX64_RET_ST_RAX_XMM0) ++ movq %xmm0, 8(%rsi) ++ jmp L(s2) ++E(L(store_table), UNIX64_RET_ST_XMM0_XMM1) ++ movq %xmm1, 8(%rsi) ++ jmp L(s3) ++E(L(store_table), UNIX64_RET_ST_RAX_RDX) ++ movq %rdx, 8(%rsi) ++L(s2): ++ movq %rax, (%rsi) ++ shrl $UNIX64_SIZE_SHIFT, %ecx ++ rep movsb ++ ret ++ .balign 8 ++L(s3): ++ movq %xmm0, (%rsi) ++ shrl $UNIX64_SIZE_SHIFT, %ecx ++ rep movsb ++ ret + -+#if FFI_CLOSURES /* base system provides closures */ ++L(sa): call PLT(C(abort)) + -+static void -+ffi_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; ++ /* Many times we can avoid loading any SSE registers at all. ++ It's not worth an indirect jump to load the exact set of ++ SSE registers needed; zero or all is a good compromise. */ ++ .balign 2 ++L(UW3): ++ /* cfi_restore_state */ ++L(load_sse): ++ movdqa 0x30(%r10), %xmm0 ++ movdqa 0x40(%r10), %xmm1 ++ movdqa 0x50(%r10), %xmm2 ++ movdqa 0x60(%r10), %xmm3 ++ movdqa 0x70(%r10), %xmm4 ++ movdqa 0x80(%r10), %xmm5 ++ movdqa 0x90(%r10), %xmm6 ++ movdqa 0xa0(%r10), %xmm7 ++ jmp L(ret_from_load_sse) ++ ++L(UW4): ++ENDF(C(ffi_call_unix64)) ++ ++/* 6 general registers, 8 vector registers, ++ 32 bytes of rvalue, 8 bytes of alignment. */ ++#define ffi_closure_OFS_G 0 ++#define ffi_closure_OFS_V (6*8) ++#define ffi_closure_OFS_RVALUE (ffi_closure_OFS_V + 8*16) ++#define ffi_closure_FS (ffi_closure_OFS_RVALUE + 32 + 8) ++ ++/* The location of rvalue within the red zone after deallocating the frame. */ ++#define ffi_closure_RED_RVALUE (ffi_closure_OFS_RVALUE - ffi_closure_FS) ++ ++ .balign 2 ++ .globl C(ffi_closure_unix64_sse) ++ FFI_HIDDEN(C(ffi_closure_unix64_sse)) ++ ++C(ffi_closure_unix64_sse): ++L(UW5): ++ subq $ffi_closure_FS, %rsp ++L(UW6): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++ ++ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) ++ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) ++ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) ++ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) ++ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) ++ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) ++ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) ++ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) ++ jmp L(sse_entry1) ++ ++L(UW7): ++ENDF(C(ffi_closure_unix64_sse)) ++ ++ .balign 2 ++ .globl C(ffi_closure_unix64) ++ FFI_HIDDEN(C(ffi_closure_unix64)) ++ ++C(ffi_closure_unix64): ++L(UW8): ++ subq $ffi_closure_FS, %rsp ++L(UW9): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++L(sse_entry1): ++ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) ++ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) ++ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) ++ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) ++ movq %r8, ffi_closure_OFS_G+0x20(%rsp) ++ movq %r9, ffi_closure_OFS_G+0x28(%rsp) + -+ ffi_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, raw, cl->user_data); -+} ++#ifdef __ILP32__ ++ movl FFI_TRAMPOLINE_SIZE(%r10), %edi /* Load cif */ ++ movl FFI_TRAMPOLINE_SIZE+4(%r10), %esi /* Load fun */ ++ movl FFI_TRAMPOLINE_SIZE+8(%r10), %edx /* Load user_data */ ++#else ++ movq FFI_TRAMPOLINE_SIZE(%r10), %rdi /* Load cif */ ++ movq FFI_TRAMPOLINE_SIZE+8(%r10), %rsi /* Load fun */ ++ movq FFI_TRAMPOLINE_SIZE+16(%r10), %rdx /* Load user_data */ ++#endif ++L(do_closure): ++ leaq ffi_closure_OFS_RVALUE(%rsp), %rcx /* Load rvalue */ ++ movq %rsp, %r8 /* Load reg_args */ ++ leaq ffi_closure_FS+8(%rsp), %r9 /* Load argp */ ++ call C(ffi_closure_unix64_inner) + -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; ++ /* Deallocate stack frame early; return value is now in redzone. */ ++ addq $ffi_closure_FS, %rsp ++L(UW10): ++ /* cfi_adjust_cfa_offset(-ffi_closure_FS) */ + -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } ++ /* The first byte of the return value contains the FFI_TYPE. */ ++ cmpb $UNIX64_RET_LAST, %al ++ movzbl %al, %r10d ++ leaq L(load_table)(%rip), %r11 ++ ja L(la) ++ leaq (%r11, %r10, 8), %r10 ++ leaq ffi_closure_RED_RVALUE(%rsp), %rsi ++ jmp *%r10 + -+ return status; -+} ++ .balign 8 ++L(load_table): ++E(L(load_table), UNIX64_RET_VOID) ++ ret ++E(L(load_table), UNIX64_RET_UINT8) ++ movzbl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_UINT16) ++ movzwl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_UINT32) ++ movl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT8) ++ movsbl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT16) ++ movswl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_SINT32) ++ movl (%rsi), %eax ++ ret ++E(L(load_table), UNIX64_RET_INT64) ++ movq (%rsi), %rax ++ ret ++E(L(load_table), UNIX64_RET_XMM32) ++ movd (%rsi), %xmm0 ++ ret ++E(L(load_table), UNIX64_RET_XMM64) ++ movq (%rsi), %xmm0 ++ ret ++E(L(load_table), UNIX64_RET_X87) ++ fldt (%rsi) ++ ret ++E(L(load_table), UNIX64_RET_X87_2) ++ fldt 16(%rsi) ++ fldt (%rsi) ++ ret ++E(L(load_table), UNIX64_RET_ST_XMM0_RAX) ++ movq 8(%rsi), %rax ++ jmp L(l3) ++E(L(load_table), UNIX64_RET_ST_RAX_XMM0) ++ movq 8(%rsi), %xmm0 ++ jmp L(l2) ++E(L(load_table), UNIX64_RET_ST_XMM0_XMM1) ++ movq 8(%rsi), %xmm1 ++ jmp L(l3) ++E(L(load_table), UNIX64_RET_ST_RAX_RDX) ++ movq 8(%rsi), %rdx ++L(l2): ++ movq (%rsi), %rax ++ ret ++ .balign 8 ++L(l3): ++ movq (%rsi), %xmm0 ++ ret + -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ ++L(la): call PLT(C(abort)) ++ ++L(UW11): ++ENDF(C(ffi_closure_unix64)) ++ ++ .balign 2 ++ .globl C(ffi_go_closure_unix64_sse) ++ FFI_HIDDEN(C(ffi_go_closure_unix64_sse)) ++ ++C(ffi_go_closure_unix64_sse): ++L(UW12): ++ subq $ffi_closure_FS, %rsp ++L(UW13): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++ ++ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) ++ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) ++ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) ++ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) ++ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) ++ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) ++ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) ++ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) ++ jmp L(sse_entry2) ++ ++L(UW14): ++ENDF(C(ffi_go_closure_unix64_sse)) ++ ++ .balign 2 ++ .globl C(ffi_go_closure_unix64) ++ FFI_HIDDEN(C(ffi_go_closure_unix64)) ++ ++C(ffi_go_closure_unix64): ++L(UW15): ++ subq $ffi_closure_FS, %rsp ++L(UW16): ++ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ ++L(sse_entry2): ++ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) ++ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) ++ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) ++ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) ++ movq %r8, ffi_closure_OFS_G+0x20(%rsp) ++ movq %r9, ffi_closure_OFS_G+0x28(%rsp) + -+#if FFI_CLOSURES ++#ifdef __ILP32__ ++ movl 4(%r10), %edi /* Load cif */ ++ movl 8(%r10), %esi /* Load fun */ ++ movl %r10d, %edx /* Load closure (user_data) */ ++#else ++ movq 8(%r10), %rdi /* Load cif */ ++ movq 16(%r10), %rsi /* Load fun */ ++ movq %r10, %rdx /* Load closure (user_data) */ ++#endif ++ jmp L(do_closure) + -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ ++L(UW17): ++ENDF(C(ffi_go_closure_unix64)) + -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -+} ++/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ + -+#endif /* FFI_CLOSURES */ ++#ifdef __APPLE__ ++.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support ++EHFrame0: ++#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) ++.section .eh_frame,"a",@unwind ++#else ++.section .eh_frame,"a",@progbits ++#endif + -+#endif /* !FFI_NO_RAW_API */ ++#ifdef HAVE_AS_X86_PCREL ++# define PCREL(X) X - . ++#else ++# define PCREL(X) X@rel ++#endif ++ ++/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ ++#define ADV(N, P) .byte 2, L(N)-L(P) ++ ++ .balign 8 ++L(CIE): ++ .set L(set0),L(ECIE)-L(SCIE) ++ .long L(set0) /* CIE Length */ ++L(SCIE): ++ .long 0 /* CIE Identifier Tag */ ++ .byte 1 /* CIE Version */ ++ .ascii "zR\0" /* CIE Augmentation */ ++ .byte 1 /* CIE Code Alignment Factor */ ++ .byte 0x78 /* CIE Data Alignment Factor */ ++ .byte 0x10 /* CIE RA Column */ ++ .byte 1 /* Augmentation size */ ++ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ ++ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp offset 8 */ ++ .byte 0x80+16, 1 /* DW_CFA_offset, %rip offset 1*-8 */ ++ .balign 8 ++L(ECIE): ++ ++ .set L(set1),L(EFDE1)-L(SFDE1) ++ .long L(set1) /* FDE Length */ ++L(SFDE1): ++ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW0)) /* Initial location */ ++ .long L(UW4)-L(UW0) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW1, UW0) ++ .byte 0xc, 6, 32 /* DW_CFA_def_cfa, %rbp 32 */ ++ .byte 0x80+6, 2 /* DW_CFA_offset, %rbp 2*-8 */ ++ ADV(UW2, UW1) ++ .byte 0xa /* DW_CFA_remember_state */ ++ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp 8 */ ++ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ ++ ADV(UW3, UW2) ++ .byte 0xb /* DW_CFA_restore_state */ ++ .balign 8 ++L(EFDE1): ++ ++ .set L(set2),L(EFDE2)-L(SFDE2) ++ .long L(set2) /* FDE Length */ ++L(SFDE2): ++ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW5)) /* Initial location */ ++ .long L(UW7)-L(UW5) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW6, UW5) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE2): ++ ++ .set L(set3),L(EFDE3)-L(SFDE3) ++ .long L(set3) /* FDE Length */ ++L(SFDE3): ++ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW8)) /* Initial location */ ++ .long L(UW11)-L(UW8) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW9, UW8) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ ADV(UW10, UW9) ++ .byte 0xe, 8 /* DW_CFA_def_cfa_offset 8 */ ++L(EFDE3): ++ ++ .set L(set4),L(EFDE4)-L(SFDE4) ++ .long L(set4) /* FDE Length */ ++L(SFDE4): ++ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW12)) /* Initial location */ ++ .long L(UW14)-L(UW12) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW13, UW12) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE4): ++ ++ .set L(set5),L(EFDE5)-L(SFDE5) ++ .long L(set5) /* FDE Length */ ++L(SFDE5): ++ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ ++ .long PCREL(L(UW15)) /* Initial location */ ++ .long L(UW17)-L(UW15) /* Address range */ ++ .byte 0 /* Augmentation size */ ++ ADV(UW16, UW15) ++ .byte 0xe /* DW_CFA_def_cfa_offset */ ++ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ ++ .balign 8 ++L(EFDE5): ++#ifdef __APPLE__ ++ .subsections_via_symbols ++#endif ++ ++#endif /* __x86_64__ */ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif ++ ++ ++#endif +\ No newline at end of file diff -Nru orig/Modules/makesetup modified/Modules/makesetup --- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 +++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 @@ -39275,6 +31090,20 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c static PyMethodDef pwd_methods[] = { {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, +diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c +--- orig/Objects/bytesobject.c 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Objects/bytesobject.c 2015-08-03 12:54:33.000000000 +0800 +@@ -199,8 +199,8 @@ + int c = va_arg(count, int); + if (c < 0 || c > 255) { + PyErr_SetString(PyExc_OverflowError, +- "PyBytes_FromFormatV(): %c format " +- "expects an integer in range [0; 255]"); ++ sprintf("PyBytes_FromFormatV(): %%c format " ++ "expects an integer in range [0; 255], got %d", c)); + return NULL; + } + n++; diff -Nru orig/Python/importlib.h modified/Python/importlib.h --- orig/Python/importlib.h 2015-02-03 19:49:05.000000000 +0800 +++ modified/Python/importlib.h 2015-05-02 11:58:42.000000000 +0800 @@ -47993,12 +39822,14 @@ diff -Nru orig/Python/marshal.c modified/Python/marshal.c Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/iOS-test/main.py --- orig/Tools/iOS-test/app/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-04 21:31:30.000000000 +0800 -@@ -0,0 +1,10 @@ ++++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-17 13:49:19.000000000 +0800 +@@ -0,0 +1,12 @@ +from datetime import datetime ++import platform +from test import regrtest + +regrtest.start = datetime.now() ++print("Testing on %s" % platform.machine()) +print("START:", regrtest.start) +regrtest.main_in_temp_cwd() +regrtest.end = datetime.now() @@ -48137,7 +39968,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools +/* Localized versions of Info.plist keys */ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist --- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-07-04 17:34:56.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-12-20 19:26:56.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -48150,7 +39981,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-te + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier -+ org.python.$(PRODUCT_NAME:rfc1034identifier) ++ $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName @@ -48207,8 +40038,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2015-07-04 23:12:23.000000000 +0800 -@@ -0,0 +1,125 @@ ++++ modified/Tools/iOS-test/iOS-test/main.m 2015-12-21 09:53:22.000000000 +0800 +@@ -0,0 +1,145 @@ +// +// main.m +// A main module for starting Python projects under iOS. @@ -48232,7 +40063,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + + NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; + -+ // Special environment to avoid writing bytecode because ++ // Special environment to avoid writing bytecode because + // the process will not have write attribute on the device. + putenv("PYTHONDONTWRITEBYTECODE=1"); + @@ -48256,35 +40087,55 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + NSLog(@"Initializing Python runtime..."); + Py_Initialize(); + -+ // To tell lldb not to stop on signals, use the following commands: -+ // * process handle SIGPIPE -n true -p true -s false -+ // * process handle SIGINT -n true -p true -s false -+ // * process handle SIGXFSZ -n true -p true -s false -+ // * process handle SIGUSR1 -n true -p true -s false -+ // * process handle SIGUSR2 -n true -p true -s false ++ /******************************************************* ++ To tell lldb not to stop on signals, use the following commands: ++ process handle SIGPIPE -n true -p true -s false ++ process handle SIGINT -n true -p true -s false ++ process handle SIGXFSZ -n true -p true -s false ++ process handle SIGUSR1 -n true -p true -s false ++ process handle SIGUSR2 -n true -p true -s false ++ *******************************************************/ + + // Arguments to pass to test runner + char *test_args[] = { + "-j", "1", + "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", -+// "-v", -+// "-W", -+// "test_bytes", // ctypes related; PyBytes_FromFormat -+// "test_ctypes", // DL loading? -+// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc -+// "test_unicode", // # ctypes related; PyUnicode_FromFormat ++// "-v", // Verbose test output ++ "-W", // Display test output on failure ++ ++ "-x", // Arguments are tests to *exclude* ++// ARM64 failures ++// "test_unicode", // # ctypes related; PyUnicode_FromFormat ++ ++// ARMv7 failures ++// "test_cmath", // math domain error ++// "test_ctypes", // DL loading? ++// "test_float", // rounding? ++// "test_math", // math domain error ++// "test_numeric_tower", // ++// "test_strtod", // ++ "test_importlib", // Thread locking problem ++ ++// Fails on BOTH ++// "test_ctypes", // DL loading? ++// "test_socket", // Fails due to bad domain? Fails on simulator, OS/X, too. ++// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc ++ ++// Hard crash on BOTH ++ "test_bytes" // ctypes related; PyBytes_FromFormat ++ + }; + + // Set the name of the main script + main_script = [ + [[NSBundle mainBundle] pathForResource:@"Library/Application Support/org.python.iOS-test/app/iOS-test/main" + ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; -+ ++ + if (main_script == NULL) { + NSLog(@"Unable to locate app/iOS-test/main.py file"); + exit(-1); + } -+ ++ + // Construct argv for the interpreter + int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; + @@ -48337,8 +40188,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj --- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-07-04 21:28:49.000000000 +0800 -@@ -0,0 +1,353 @@ ++++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-12-20 22:48:35.000000000 +0800 +@@ -0,0 +1,369 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; @@ -48354,10 +40205,10 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 60796EEE19190F4100A9926B /* InfoPlist.strings */; }; + 60796EF219190F4100A9926B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60796EF119190F4100A9926B /* main.m */; }; + 60796EF819190F4100A9926B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60796EF719190F4100A9926B /* Images.xcassets */; }; -+ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1819190FBB00A9926B /* libz.dylib */; }; -+ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; + 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; + 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; ++ 60EAF0931C26F7310003B8F5 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */; }; ++ 60EAF0951C26F73D0003B8F5 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60EAF0941C26F73D0003B8F5 /* libz.tbd */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ @@ -48370,11 +40221,11 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796EF119190F4100A9926B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 60796EF319190F4100A9926B /* iOS-test-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-test-Prefix.pch"; sourceTree = ""; }; + 60796EF719190F4100A9926B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; -+ 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; -+ 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; + 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 60DBD4B01B47DEF700068095 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; ++ 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; ++ 60EAF0941C26F73D0003B8F5 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + @@ -48383,10 +40234,10 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( ++ 60EAF0951C26F73D0003B8F5 /* libz.tbd in Frameworks */, ++ 60EAF0931C26F7310003B8F5 /* libsqlite3.tbd in Frameworks */, + 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */, + 60796F2C1919C70800A9926B /* Python.framework in Frameworks */, -+ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */, -+ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */, + 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */, + 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */, + 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */, @@ -48416,8 +40267,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + 60796EE419190F4100A9926B /* Frameworks */ = { + isa = PBXGroup; + children = ( -+ 60796F1F1919174D00A9926B /* libsqlite3.dylib */, -+ 60796F1819190FBB00A9926B /* libz.dylib */, ++ 60EAF0941C26F73D0003B8F5 /* libz.tbd */, ++ 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */, + 60796F2B1919C70800A9926B /* Python.framework */, + 60796EE519190F4100A9926B /* Foundation.framework */, + 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, @@ -48477,8 +40328,13 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + isa = PBXProject; + attributes = { + CLASSPREFIX = Py; -+ LastUpgradeCheck = 0630; ++ LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Python Software Foundation"; ++ TargetAttributes = { ++ 60796EE119190F4100A9926B = { ++ DevelopmentTeam = 383DLEZ2K4; ++ }; ++ }; + }; + buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "iOS-test" */; + compatibilityVersion = "Xcode 3.2"; @@ -48567,6 +40423,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; ++ ENABLE_BITCODE = NO; ++ ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; @@ -48606,6 +40464,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; ++ ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -48626,6 +40485,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ CODE_SIGN_IDENTITY = "iPhone Developer"; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", @@ -48638,7 +40499,9 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", + ); + INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; ++ PRODUCT_BUNDLE_IDENTIFIER = "org.python.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; ++ PROVISIONING_PROFILE = ""; + USER_HEADER_SEARCH_PATHS = include/python2.7; + WRAPPER_EXTENSION = app; + }; @@ -48649,6 +40512,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; ++ CODE_SIGN_IDENTITY = "iPhone Developer"; ++ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", @@ -48661,7 +40526,9 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", + ); + INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; ++ PRODUCT_BUNDLE_IDENTIFIER = "org.python.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; ++ PROVISIONING_PROFILE = ""; + USER_HEADER_SEARCH_PATHS = include/python2.7; + WRAPPER_EXTENSION = app; + }; @@ -49138,7 +41005,7 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python diff -Nru orig/iOS/README modified/iOS/README --- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2015-05-05 08:38:46.000000000 +0800 ++++ modified/iOS/README 2015-12-20 18:59:33.000000000 +0800 @@ -0,0 +1,165 @@ +==================== +Python on iOS README @@ -49299,7 +41166,7 @@ diff -Nru orig/iOS/README modified/iOS/README +APIs for embedding; but if you want to write a full iOS app in Python, or +you want to access iOS services from within embedded code, you'll need to +bridge between the Objective-C environment and the Python environment. -+This briding isn't something that Python does out of the box; you'll need ++This binding isn't something that Python does out of the box; you'll need +to use a third-party library like `Rubicon ObjC`_, `Pyobjus`_ or `PyObjC`_. + +.. _Rubicon ObjC: http://pybee.org/rubicon From 658f84ae947d79bdaa2cc0fc1f4b6baf87ebd7d6 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 21 Dec 2015 15:55:17 +0800 Subject: [PATCH 30/51] Tweaks to commit 3859bc2. --- Makefile | 55 ++++++++-------- README.rst | 55 ++++++++-------- patch/Python/Python-tvos.patch | 65 ------------------ patch/Python/Python.patch | 66 ++++++++++++++++++- .../Python/lib-exclude.lst | 0 5 files changed, 120 insertions(+), 121 deletions(-) delete mode 100644 patch/Python/Python-tvos.patch rename python-lib-exclude.lst => patch/Python/lib-exclude.lst (100%) diff --git a/Makefile b/Makefile index 198f1ae8..a230537f 100644 --- a/Makefile +++ b/Makefile @@ -1,56 +1,56 @@ # # Useful targets: -# - all-iOS - build everything for iOS -# - all-tvOS - build everything for tvOS -# - all-watchOS - build everything for watchOS -# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS -# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS -# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - Python.framework-iOS - build Python.framework for iOS -# - Python.framework-tvOS - build Python.framework for tvOS -# - Python.framework-watchOS - build Python.framework for watchOS -# - Python-host - build host python +# - all - build everything +# - iOS - build everything for iOS +# - tvOS - build everything for tvOS +# - watchOS - build everything for watchOS +# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS +# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS +# - Python.framework-iOS - build Python.framework for iOS +# - Python.framework-tvOS - build Python.framework for tvOS +# - Python.framework-watchOS - build Python.framework for watchOS +# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) -BUILD_NUMBER=3 +BUILD_NUMBER=4 # Version of packages that will be compiled by this meta-package -PYTHON_VERSION= 3.4.2 +PYTHON_VERSION=3.4.2 PYTHON_VER= $(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 -OPENSSL_REVISION=d +OPENSSL_REVISION=e OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) # Supported OS OS= iOS tvOS watchOS # iOS targets -TARGETS-iOS= iphonesimulator.x86_64 iphonesimulator.i386\ - iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 -CFLAGS-iOS= -miphoneos-version-min=7.0 +TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 +CFLAGS-iOS=-miphoneos-version-min=7.0 CFLAGS-iphoneos.armv7= -fembed-bitcode CFLAGS-iphoneos.armv7s= -fembed-bitcode CFLAGS-iphoneos.arm64= -fembed-bitcode # tvOS targets -TARGETS-tvOS= appletvsimulator.x86_64 appletvos.arm64 -CFLAGS-tvOS= -mtvos-version-min=9.0 +TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64 +CFLAGS-tvOS=-mtvos-version-min=9.0 CFLAGS-appletvos.arm64= -fembed-bitcode PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no # watchOS targets -TARGETS-watchOS= watchsimulator.i386 watchos.armv7k -CFLAGS-watchOS= -mwatchos-version-min=2.0 +TARGETS-watchOS=watchsimulator.i386 watchos.armv7k +CFLAGS-watchOS=-mwatchos-version-min=2.0 CFLAGS-watchos.armv7k= -fembed-bitcode PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no # override machine for arm64 -MACHINE-arm64= aarch64 +MACHINE-arm64=aarch64 -all: $(foreach os,$(OS),all-$(os)) +all: $(foreach os,$(OS),$(os)) # Clean all builds clean: @@ -95,8 +95,8 @@ downloads/Python-$(PYTHON_VERSION).tgz: mkdir -p downloads if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi -PYTHON_DIR-host= build/Python-$(PYTHON_VERSION)-host -PYTHON_HOST= $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) +PYTHON_DIR-host=build/Python-$(PYTHON_VERSION)-host +PYTHON_HOST=$(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) Python-host: $(PYTHON_HOST) @@ -174,9 +174,6 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) # Apply target Python patches cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python.patch -ifeq ($$(findstring iphone,$$(SDK-$1)),) - cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python-tvos.patch -endif cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ @@ -223,7 +220,7 @@ OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework PYTHON_FRAMEWORK-$1= build/$1/Python.framework PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources -all-$1: dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz +$1: dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz clean-$1: rm -rf build/$1 @@ -283,7 +280,7 @@ ifneq ($(TEST),) else mkdir -p $$(PYTHON_RESOURCES-$1)/lib cd $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib/python$(PYTHON_VER) && \ - zip -x@$(PROJECT_DIR)/python-lib-exclude.lst -r $(PROJECT_DIR)/$$(PYTHON_RESOURCES-$1)/lib/python$(subst .,,$(PYTHON_VER)) * + zip -x@$(PROJECT_DIR)/patch/Python/lib-exclude.lst -r $(PROJECT_DIR)/$$(PYTHON_RESOURCES-$1)/lib/python$(subst .,,$(PYTHON_VER)) * endif # Copy fat library diff --git a/README.rst b/README.rst index 0d1a7582..64e8700c 100644 --- a/README.rst +++ b/README.rst @@ -1,49 +1,46 @@ -Makefile glue for Python for iOS, tvOS and watchOS. - -Useful targets: - -* all - build all -* all-iOS - build everything for iOS -* all-tvOS - build everything for tvOS -* all-watchOS - build everything for watchOS -* OpenSSL.framework-iOS - build OpenSSL.framework for iOS -* OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS -* OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -* Python.framework-iOS - build Python.framework for iOS -* Python.framework-tvOS - build Python.framework for tvOS -* Python.framework-watchOS - build Python.framework for watchOS -* Python-host - build host python - Python iOS Support ================== This is a meta-package for building a version of Python that can be embedded -into an iOS project. +into an iOS, tvOS or watchOS project. It works by downloading, patching, and building a fat binary OpenSSL and Python, and packaging them both in iOS Framework format. The binaries support the ``$(ARCHS_STANDARD)`` set - that is, armv7 and -arm64. This should enable the code to run on: +arm64 for iOS devices, arm64 for appleTV devices, and armv7k for watchOS. +This should enable the code to run on: * iPhone - iPhone 4s - iPhone 5 + - iPhone 5c - iPhone 5s - iPhone 6 - iPhone 6 Plus + - iPhone 6s + - iPhone 6s Plus +* iPad Pro * iPad - iPad 2 - iPad (3rd gen) - iPad (4th gen) - iPad Air + - iPad Air 2 - iPad retina + - iPad Pro * iPad Mini - iPad Mini (1st gen) - - iPad Mini (2nd gen) + - iPad Mini 2 + - iPad Mini 3 + - iPad Mini 4 * iPod Touch - iPod Touch (4th gen) - iPod Touch (5th gen) + - iPod Touch (6th gen) +* Apple TV + - 4th gen +* Apple Watch This repository branch builds a packaged version of **Python 3.4.2**. Other Python versions are available by cloning other branches of the main @@ -52,23 +49,29 @@ repository. Quickstart ---------- -Pre-built versions of the frameworks can be downloaded_, and added to -your iOS project. +Pre-built versions of the frameworks can be downloaded `for iOS`_, +`for tvOS`_, and `for watchOS`_, and added to your project. Alternatively, to build the frameworks on your own, download/clone this repository, and then in the root directory, and run: - $ make +* `make` (or `make all`) to build everything. +* `make iOS` to build everything for iOS. +* `make tvOS` to build everything for tvOS. +* `make watchOS` to build everything for watchOS. This should: 1. Download the original source packages -2. Patch them as required for iOS compatibility -3. Build the packages as iOS frameworks. +2. Patch them as required for compatibility with the selected OS +3. Build the packages as XCode-compatible frameworks. -The build products will be in the `build` directory. +The build products will be in the `build` directory; the compiled frameworks +will be in the `dist` directory. -.. _downloaded: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b2/Python-3.4.2-iOS-support.b2.tar.gz +.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz +.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz +.. _for watchS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz Acknowledgements ---------------- diff --git a/patch/Python/Python-tvos.patch b/patch/Python/Python-tvos.patch deleted file mode 100644 index 0e7a69b0..00000000 --- a/patch/Python/Python-tvos.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- a/Modules/_posixsubprocess.c 2015-10-16 03:07:29.000000000 +0600 -+++ b/Modules/_posixsubprocess.c 2015-10-16 03:13:46.000000000 +0600 -@@ -479,11 +479,15 @@ - saved_errno = 0; - for (i = 0; exec_array[i] != NULL; ++i) { - const char *executable = exec_array[i]; -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ errno = ENOTSUP; -+#else - if (envp) { - execve(executable, argv, envp); - } else { - execv(executable, argv); - } -+#endif - if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { - saved_errno = errno; - } -@@ -646,7 +650,12 @@ - cwd_obj2 = NULL; - } - -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ pid = -1; -+ errno = ENOTSUP; -+#else - pid = fork(); -+#endif - if (pid == 0) { - /* Child process */ - /* ---- a/Modules/posixmodule.c 2015-10-16 03:34:01.000000000 +0600 -+++ b/Modules/posixmodule.c 2015-10-16 03:35:46.000000000 +0600 -@@ -1197,7 +1197,9 @@ - #include - static char **environ; - #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) -+#if !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) - extern char **environ; -+#endif - #endif /* !_MSC_VER */ - - static PyObject * -@@ -1248,7 +1250,7 @@ - Py_DECREF(k); - Py_DECREF(v); - } --#else -+#elif !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) - if (environ == NULL) - return d; - /* This part ignores errors */ -@@ -4463,7 +4463,12 @@ - - command = PyBytes_AsString(command_obj); - Py_BEGIN_ALLOW_THREADS -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ sts = -1; -+ errno = ENOTSUP; -+#else - sts = system(command); -+#endif - Py_END_ALLOW_THREADS - Py_DECREF(command_obj); - #endif diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 8ff3d3d9..d1144180 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -30904,6 +30904,38 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ + +#endif \ No newline at end of file +diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c +--- orig/Modules/_posixsubprocess.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/_posixsubprocess.c 2015-12-21 13:03:32.000000000 +0800 +@@ -479,11 +479,15 @@ + saved_errno = 0; + for (i = 0; exec_array[i] != NULL; ++i) { + const char *executable = exec_array[i]; ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ errno = ENOTSUP; ++#else + if (envp) { + execve(executable, argv, envp); + } else { + execv(executable, argv); + } ++#endif + if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { + saved_errno = errno; + } +@@ -646,7 +650,12 @@ + cwd_obj2 = NULL; + } + ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ pid = -1; ++ errno = ENOTSUP; ++#else + pid = fork(); ++#endif + if (pid == 0) { + /* Child process */ + /* diff -Nru orig/Modules/makesetup modified/Modules/makesetup --- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 +++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 @@ -30989,7 +31021,7 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c r = hypot(x, y); diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c --- orig/Modules/posixmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/posixmodule.c 2015-05-04 12:44:34.000000000 +0800 ++++ modified/Modules/posixmodule.c 2015-12-21 13:03:32.000000000 +0800 @@ -20,6 +20,8 @@ # pragma weak statvfs # pragma weak fstatvfs @@ -31023,6 +31055,38 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c /*[clinic input] module os +@@ -1178,7 +1197,9 @@ + #include + static char **environ; + #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) ++#if !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) + extern char **environ; ++#endif + #endif /* !_MSC_VER */ + + static PyObject * +@@ -1229,7 +1250,7 @@ + Py_DECREF(k); + Py_DECREF(v); + } +-#else ++#elif !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) + if (environ == NULL) + return d; + /* This part ignores errors */ +@@ -4444,7 +4465,12 @@ + + command = PyBytes_AsString(command_obj); + Py_BEGIN_ALLOW_THREADS ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++ sts = -1; ++ errno = ENOTSUP; ++#else + sts = system(command); ++#endif + Py_END_ALLOW_THREADS + Py_DECREF(command_obj); + #endif diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c --- orig/Modules/pwdmodule.c 2015-02-03 19:49:04.000000000 +0800 +++ modified/Modules/pwdmodule.c 2015-05-02 23:37:06.000000000 +0800 diff --git a/python-lib-exclude.lst b/patch/Python/lib-exclude.lst similarity index 100% rename from python-lib-exclude.lst rename to patch/Python/lib-exclude.lst From a4be707383e893e5a330abc9ae5a82ec77282031 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 21 Dec 2015 16:30:19 +0800 Subject: [PATCH 31/51] Corrected link in README. --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 64e8700c..ecb4c29a 100644 --- a/README.rst +++ b/README.rst @@ -71,7 +71,7 @@ will be in the `dist` directory. .. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz .. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz -.. _for watchS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz +.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz Acknowledgements ---------------- From da32c22f0c74ee8c242eec4ff3a3933ec85e4392 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 16 Feb 2016 13:17:50 +0800 Subject: [PATCH 32/51] Added initial cut at Python 3.5.1 support. --- LICENSE | 2 +- Makefile | 8 +- patch/Python/Python.patch | 16504 ++++++++++++++-------------------- patch/Python/Setup.embedded | 1 - 4 files changed, 6553 insertions(+), 9962 deletions(-) diff --git a/LICENSE b/LICENSE index be2bd37e..7c545232 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 Russell Keith-Magee. +Copyright (c) 2014-2016 Russell Keith-Magee. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile index a230537f..7a4d8cb4 100644 --- a/Makefile +++ b/Makefile @@ -15,14 +15,14 @@ # Current director PROJECT_DIR=$(shell pwd) -BUILD_NUMBER=4 +BUILD_NUMBER=1 # Version of packages that will be compiled by this meta-package -PYTHON_VERSION=3.4.2 +PYTHON_VERSION=3.5.1 PYTHON_VER= $(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 -OPENSSL_REVISION=e +OPENSSL_REVISION=f OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) # Supported OS @@ -175,6 +175,8 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST # Apply target Python patches cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python.patch cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded + # Copy in the host _freeze_importlib + cp $(PYTHON_DIR-host)/Programs/_freeze_importlib $$(PYTHON_DIR-$1)/iOS/_freeze_importlib # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index d1144180..12efa62d 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -1,6 +1,6 @@ diff -Nru orig/Include/datetime.h modified/Include/datetime.h ---- orig/Include/datetime.h 2015-02-03 19:49:02.000000000 +0800 -+++ modified/Include/datetime.h 2015-04-27 13:51:52.000000000 +0800 +--- orig/Include/datetime.h 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Include/datetime.h 2016-02-14 10:29:10.000000000 +0800 @@ -166,6 +166,11 @@ #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" @@ -27,8 +27,8 @@ diff -Nru orig/Include/datetime.h modified/Include/datetime.h #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/test_as_parameter.py ---- orig/Lib/ctypes/test/test_as_parameter.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_as_parameter.py 2015-06-28 21:35:59.000000000 +0800 +--- orig/Lib/ctypes/test/test_as_parameter.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_as_parameter.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,9 +1,11 @@ +import os import unittest @@ -51,8 +51,8 @@ diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/tes def wrap(self, param): return param diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_bitfields.py ---- orig/Lib/ctypes/test/test_bitfields.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_bitfields.py 2015-06-28 21:36:06.000000000 +0800 +--- orig/Lib/ctypes/test/test_bitfields.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_bitfields.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,11 +1,12 @@ from ctypes import * from ctypes.test import need_symbol @@ -77,8 +77,8 @@ diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_b ##for n in "ABCDEFGHIMNOPQRS": diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buffers.py ---- orig/Lib/ctypes/test/test_buffers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_buffers.py 2015-04-27 21:02:18.000000000 +0800 +--- orig/Lib/ctypes/test/test_buffers.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_buffers.py 2016-02-14 10:29:10.000000000 +0800 @@ -2,6 +2,7 @@ from ctypes.test import need_symbol import unittest @@ -88,8 +88,8 @@ diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buf def test_buffer(self): diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_callbacks.py ---- orig/Lib/ctypes/test/test_callbacks.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_callbacks.py 2015-06-28 21:36:18.000000000 +0800 +--- orig/Lib/ctypes/test/test_callbacks.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_callbacks.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,8 +1,10 @@ +import os import unittest @@ -129,8 +129,8 @@ diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_c c_double, c_double) # All this function does is call the callback with its args squared diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfuncs.py ---- orig/Lib/ctypes/test/test_cfuncs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_cfuncs.py 2015-06-28 21:36:25.000000000 +0800 +--- orig/Lib/ctypes/test/test_cfuncs.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_cfuncs.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,17 +1,20 @@ # A lot of failures in these tests on Mac OS X. # Byte order related? @@ -163,8 +163,8 @@ diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfun if __name__ == '__main__': unittest.main() diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test_checkretval.py ---- orig/Lib/ctypes/test/test_checkretval.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_checkretval.py 2015-06-28 21:36:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_checkretval.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_checkretval.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,8 +1,10 @@ +import os import unittest @@ -186,8 +186,8 @@ diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test dll._testfunc_p_p.restype = CHECKED diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_funcptr.py ---- orig/Lib/ctypes/test/test_funcptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_funcptr.py 2015-06-28 21:36:31.000000000 +0800 +--- orig/Lib/ctypes/test/test_funcptr.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_funcptr.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,4 +1,5 @@ -import os, unittest +import os @@ -208,8 +208,8 @@ diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_fun class CFuncPtrTestCase(unittest.TestCase): def test_basic(self): diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_functions.py ---- orig/Lib/ctypes/test/test_functions.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_functions.py 2015-06-28 21:36:38.000000000 +0800 +--- orig/Lib/ctypes/test/test_functions.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_functions.py 2016-02-14 10:29:10.000000000 +0800 @@ -7,7 +7,9 @@ from ctypes import * @@ -246,8 +246,8 @@ diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_f def test_mro(self): diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.py ---- orig/Lib/ctypes/test/test_libc.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_libc.py 2015-06-28 21:36:41.000000000 +0800 +--- orig/Lib/ctypes/test/test_libc.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_libc.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,14 +1,18 @@ +import os import unittest @@ -269,8 +269,8 @@ diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.p def test_sqrt(self): lib.my_sqrt.argtypes = c_double, diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_parameters.py ---- orig/Lib/ctypes/test/test_parameters.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_parameters.py 2015-06-28 21:36:45.000000000 +0800 +--- orig/Lib/ctypes/test/test_parameters.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_parameters.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,6 +1,9 @@ -import unittest, sys +import os @@ -292,8 +292,8 @@ diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_ # TypeError: has no from_param method self.assertRaises(TypeError, setattr, func, "argtypes", (object,)) diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pickling.py ---- orig/Lib/ctypes/test/test_pickling.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pickling.py 2015-06-28 21:36:49.000000000 +0800 +--- orig/Lib/ctypes/test/test_pickling.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pickling.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,8 +1,11 @@ -import unittest import pickle @@ -309,8 +309,8 @@ diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pi class X(Structure): _fields_ = [("a", c_int), ("b", c_double)] diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_pointers.py ---- orig/Lib/ctypes/test/test_pointers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pointers.py 2015-06-28 21:38:12.000000000 +0800 +--- orig/Lib/ctypes/test/test_pointers.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pointers.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,4 +1,6 @@ -import unittest, sys +import os @@ -334,9 +334,9 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po - dll = CDLL(_ctypes_test.__file__) + dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) func = dll._testfunc_p_p - func.restype = c_long - -@@ -35,7 +38,7 @@ + if sizeof(c_longlong) == sizeof(c_void_p): + func.restype = c_longlong +@@ -38,7 +41,7 @@ self.assertEqual(res[0], 12345678) def test_change_pointers(self): @@ -345,7 +345,7 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po func = dll._testfunc_p_p i = c_int(87654) -@@ -70,7 +73,7 @@ +@@ -73,7 +76,7 @@ return 0 callback = PROTOTYPE(func) @@ -354,7 +354,7 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po # This function expects a function pointer, # and calls this with an integer pointer as parameter. # The int pointer points to a table containing the numbers 1..10 -@@ -135,7 +138,7 @@ +@@ -138,7 +141,7 @@ def test_charpp(self): """Test that a character pointer-to-pointer is correctly passed""" @@ -364,8 +364,8 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po func.restype = c_char_p argv = (c_char_p * 2)() diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_prototypes.py ---- orig/Lib/ctypes/test/test_prototypes.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_prototypes.py 2015-06-28 21:37:34.000000000 +0800 +--- orig/Lib/ctypes/test/test_prototypes.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_prototypes.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,6 +1,7 @@ +import os +import unittest @@ -387,8 +387,8 @@ diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_ # Return machine address `a` as a (possibly long) non-negative integer. # Starting with Python 2.5, id(anything) is always non-negative, and diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_refcounts.py ---- orig/Lib/ctypes/test/test_refcounts.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_refcounts.py 2015-06-28 21:37:38.000000000 +0800 +--- orig/Lib/ctypes/test/test_refcounts.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_refcounts.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,13 +1,17 @@ -import unittest -from test import support @@ -411,8 +411,8 @@ diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_r class RefcountTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/test_returnfuncptrs.py ---- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-06-28 21:37:45.000000000 +0800 +--- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,15 +1,16 @@ +import os import unittest @@ -467,8 +467,8 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t self.assertEqual(strchr(b"abcdef", b"x"), None) self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_slicing.py ---- orig/Lib/ctypes/test/test_slicing.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_slicing.py 2015-06-28 21:37:52.000000000 +0800 +--- orig/Lib/ctypes/test/test_slicing.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_slicing.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,3 +1,4 @@ +import os import unittest @@ -502,8 +502,8 @@ diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_sli dll.my_wcsdup.argtypes = POINTER(c_wchar), dll.my_free.restype = None diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_stringptr.py ---- orig/Lib/ctypes/test/test_stringptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_stringptr.py 2015-06-28 21:37:55.000000000 +0800 +--- orig/Lib/ctypes/test/test_stringptr.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_stringptr.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,10 +1,12 @@ +import os import unittest @@ -519,8 +519,8 @@ diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_s class StringPtrTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_unicode.py ---- orig/Lib/ctypes/test/test_unicode.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_unicode.py 2015-06-28 21:37:59.000000000 +0800 +--- orig/Lib/ctypes/test/test_unicode.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_unicode.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,13 +1,15 @@ +import os import unittest @@ -548,8 +548,8 @@ diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_uni class StringTestCase(UnicodeTestCase): def setUp(self): diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_values.py ---- orig/Lib/ctypes/test/test_values.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_values.py 2015-06-28 21:38:03.000000000 +0800 +--- orig/Lib/ctypes/test/test_values.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_values.py 2016-02-14 10:29:10.000000000 +0800 @@ -2,18 +2,20 @@ A testcase which accesses *values* in a dll. """ @@ -586,8 +586,8 @@ diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_valu class Win_ValuesTestCase(unittest.TestCase): """This test only works when python itself is a dll/shared library""" diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32.py ---- orig/Lib/ctypes/test/test_win32.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_win32.py 2015-06-28 21:38:08.000000000 +0800 +--- orig/Lib/ctypes/test/test_win32.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/test/test_win32.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,7 +1,9 @@ # Windows specific tests @@ -606,12 +606,12 @@ diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32 - dll = CDLL(_ctypes_test.__file__) + dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - pt = POINT(10, 10) - rect = RECT(0, 0, 20, 20) + pt = POINT(15, 25) + left = c_long.in_dll(dll, 'left') diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py ---- orig/Lib/ctypes/util.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/util.py 2015-02-28 19:22:12.000000000 +0800 -@@ -70,7 +70,7 @@ +--- orig/Lib/ctypes/util.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/ctypes/util.py 2016-02-14 10:29:10.000000000 +0800 +@@ -76,7 +76,7 @@ def find_library(name): return name @@ -621,17 +621,17 @@ diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py def find_library(name): possible = ['lib%s.dylib' % name, diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/tests/test_build_ext.py ---- orig/Lib/distutils/tests/test_build_ext.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_ext.py 2015-05-03 00:00:04.000000000 +0800 -@@ -37,6 +37,7 @@ - from distutils.command import build_ext - build_ext.USER_BASE = site.USER_BASE +--- orig/Lib/distutils/tests/test_build_ext.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_ext.py 2016-02-14 10:29:10.000000000 +0800 +@@ -40,6 +40,7 @@ + def build_ext(self, *args, **kwargs): + return build_ext(*args, **kwargs) + @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_build_ext(self): global ALREADY_TESTED copy_xxmodule_c(self.tmp_dir) -@@ -285,6 +286,7 @@ +@@ -288,6 +289,7 @@ cmd.run() self.assertEqual(cmd.compiler, 'unix') @@ -640,8 +640,8 @@ diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/test tmp_dir = self.mkdtemp() c_file = os.path.join(tmp_dir, 'foo.c') diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests/test_build_py.py ---- orig/Lib/distutils/tests/test_build_py.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_py.py 2015-05-03 00:00:35.000000000 +0800 +--- orig/Lib/distutils/tests/test_build_py.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_py.py 2016-02-14 10:29:10.000000000 +0800 @@ -106,6 +106,7 @@ ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) @@ -651,8 +651,8 @@ diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests project_dir, dist = self.create_dist(py_modules=['boiledeggs']) os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tests/test_config_cmd.py ---- orig/Lib/distutils/tests/test_config_cmd.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_config_cmd.py 2015-05-03 00:01:43.000000000 +0800 +--- orig/Lib/distutils/tests/test_config_cmd.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_config_cmd.py 2016-02-14 10:29:10.000000000 +0800 @@ -38,6 +38,7 @@ self.assertEqual(len(self._logs), numlines+1) @@ -662,8 +662,8 @@ diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tes pkg_dir, dist = self.create_dist() cmd = config(dist) diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutils/tests/test_cygwinccompiler.py ---- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2015-04-30 08:21:03.000000000 +0800 +--- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2016-02-14 10:29:10.000000000 +0800 @@ -3,16 +3,19 @@ import sys import os @@ -708,9 +708,9 @@ diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutil self.assertEqual(get_msvcr(), None) diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/test_install.py ---- orig/Lib/distutils/tests/test_install.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install.py 2015-05-02 23:58:59.000000000 +0800 -@@ -197,6 +197,7 @@ +--- orig/Lib/distutils/tests/test_install.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install.py 2016-02-14 10:29:10.000000000 +0800 +@@ -195,6 +195,7 @@ 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] self.assertEqual(found, expected) @@ -719,8 +719,8 @@ diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/ install_dir = self.mkdtemp() project_dir, dist = self.create_dist(ext_modules=[ diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/tests/test_install_lib.py ---- orig/Lib/distutils/tests/test_install_lib.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install_lib.py 2015-05-03 00:02:08.000000000 +0800 +--- orig/Lib/distutils/tests/test_install_lib.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install_lib.py 2016-02-14 10:29:10.000000000 +0800 @@ -35,6 +35,7 @@ self.assertEqual(cmd.optimize, 2) @@ -730,8 +730,8 @@ diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/te project_dir, dist = self.create_dist() os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/test_spawn.py ---- orig/Lib/distutils/tests/test_spawn.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_spawn.py 2015-05-03 00:03:50.000000000 +0800 +--- orig/Lib/distutils/tests/test_spawn.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_spawn.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,14 +1,14 @@ """Tests for distutils.spawn.""" import unittest @@ -770,8 +770,8 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te return unittest.makeSuite(SpawnTestCase) diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py ---- orig/Lib/distutils/tests/test_sysconfig.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_sysconfig.py 2015-05-04 14:42:47.000000000 +0800 +--- orig/Lib/distutils/tests/test_sysconfig.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-14 10:29:10.000000000 +0800 @@ -11,6 +11,7 @@ from distutils.tests import support from test.support import TESTFN, run_unittest, check_warnings @@ -789,8 +789,8 @@ diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/test # Issue #21923: test that a Distribution compiler # instance can be called without an explicit call to diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/test_util.py ---- orig/Lib/distutils/tests/test_util.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_util.py 2015-05-03 00:04:32.000000000 +0800 +--- orig/Lib/distutils/tests/test_util.py 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Lib/distutils/tests/test_util.py 2016-02-14 10:29:10.000000000 +0800 @@ -10,12 +10,13 @@ check_environ, split_quoted, strtobool, rfc822_escape, byte_compile, @@ -814,9 +814,9 @@ diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/tes def test_check_environ(self): util._environ_checked = 0 if 'HOME' in os.environ: -diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py ---- orig/Lib/importlib/_bootstrap.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/importlib/_bootstrap.py 2015-05-02 11:56:09.000000000 +0800 +diff -Nru orig/Lib/importlib/_bootstrap_external.py modified/Lib/importlib/_bootstrap_external.py +--- orig/Lib/importlib/_bootstrap_external.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/importlib/_bootstrap_external.py 2016-02-14 11:00:13.000000000 +0800 @@ -22,7 +22,7 @@ # Bootstrap-related code ###################################################### @@ -828,7 +828,7 @@ diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py def _make_relax_case(): diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py --- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/IN.py 2015-07-04 14:09:06.000000000 +0800 ++++ modified/Lib/plat-ios/IN.py 2016-02-14 10:29:10.000000000 +0800 @@ -0,0 +1,8269 @@ +# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/netinet/in.h + @@ -9101,15 +9101,15 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +IPV6CTL_MAXID = 51 diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen --- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/regen 2015-04-26 09:08:15.000000000 +0800 ++++ modified/Lib/plat-ios/regen 2016-02-14 10:29:10.000000000 +0800 @@ -0,0 +1,3 @@ +#! /bin/sh +set -v +include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h diff -Nru orig/Lib/platform.py modified/Lib/platform.py ---- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 -@@ -841,7 +841,7 @@ +--- orig/Lib/platform.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/platform.py 2016-02-14 10:29:10.000000000 +0800 +@@ -810,7 +810,7 @@ """ Interface to the system's uname command. """ @@ -9118,7 +9118,7 @@ diff -Nru orig/Lib/platform.py modified/Lib/platform.py # XXX Others too ? return default try: -@@ -864,7 +864,7 @@ +@@ -833,7 +833,7 @@ default in case the command should fail. """ @@ -9128,8 +9128,8 @@ diff -Nru orig/Lib/platform.py modified/Lib/platform.py return default target = _follow_symlinks(target) diff -Nru orig/Lib/site.py modified/Lib/site.py ---- orig/Lib/site.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/site.py 2015-07-04 21:19:43.000000000 +0800 +--- orig/Lib/site.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/site.py 2016-02-14 10:29:10.000000000 +0800 @@ -266,6 +266,9 @@ if get_config_var('PYTHONFRAMEWORK'): USER_SITE = get_path('purelib', 'osx_framework_user') @@ -9141,17 +9141,28 @@ diff -Nru orig/Lib/site.py modified/Lib/site.py USER_SITE = get_path('purelib', '%s_user' % os.name) return USER_SITE diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py ---- orig/Lib/subprocess.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/subprocess.py 2015-06-28 20:16:04.000000000 +0800 -@@ -423,1268 +423,1269 @@ +--- orig/Lib/subprocess.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/subprocess.py 2016-02-14 11:07:15.000000000 +0800 +@@ -357,6 +357,7 @@ + + import sys + _mswindows = (sys.platform == "win32") ++_ios = (sys.platform == "ios") + + import io + import os +@@ -455,1320 +456,1324 @@ else: _PopenSelector = selectors.SelectSelector - -__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -- "getoutput", "check_output", "CalledProcessError", "DEVNULL"] +- "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", +- "SubprocessError", "TimeoutExpired", "CompletedProcess"] +- # NOTE: We intentionally exclude list2cmdline as it is +- # considered an internal implementation detail. issue10838. - --if mswindows: +-if _mswindows: - from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, - STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, - STD_ERROR_HANDLE, SW_HIDE, @@ -9177,15 +9188,11 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - raise ValueError("already closed") - - def __repr__(self): -- return "Handle(%d)" % int(self) +- return "%s(%d)" % (self.__class__.__name__, int(self)) - - __del__ = Close - __str__ = __repr__ - --try: -- MAXFD = os.sysconf("SC_OPEN_MAX") --except: -- MAXFD = 256 - -# This lists holds Popen instances for which the underlying process had not -# exited at the time its __del__ method got called: those processes are wait()ed @@ -9208,22 +9215,17 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py STDOUT = -2 DEVNULL = -3 -+if sys.platform == 'ios': ++if _ios: + # iOS doesn't support subprocesses; however, some modules still import + # subprocess, so it's helpful to retain the symbols in the namespace. + __all__ = ["PIPE", "STDOUT", "DEVNULL", "CalledProcessError"] +else: + __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -+ "getoutput", "check_output", "CalledProcessError", "DEVNULL"] ++ "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", ++ "SubprocessError", "TimeoutExpired", "CompletedProcess"] ++ # NOTE: We intentionally exclude list2cmdline as it is ++ # considered an internal implementation detail. issue10838. --def _eintr_retry_call(func, *args): -- while True: -- try: -- return func(*args) -- except InterruptedError: -- continue -- -- -# XXX This function is only used by multiprocessing and the test suite, -# but it's here so that it can be imported when Python is compiled without -# threads. @@ -9260,174 +9262,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py -def call(*popenargs, timeout=None, **kwargs): - """Run command with arguments. Wait for command to complete or - timeout, then return the returncode attribute. -- -- The arguments are the same as for the Popen constructor. Example: -- -- retcode = call(["ls", "-l"]) -- """ -- with Popen(*popenargs, **kwargs) as p: -- try: -- return p.wait(timeout=timeout) -- except: -- p.kill() -- p.wait() -- raise -- -- --def check_call(*popenargs, **kwargs): -- """Run command with arguments. Wait for command to complete. If -- the exit code was zero then return, otherwise raise -- CalledProcessError. The CalledProcessError object will have the -- return code in the returncode attribute. -- -- The arguments are the same as for the call function. Example: -- -- check_call(["ls", "-l"]) -- """ -- retcode = call(*popenargs, **kwargs) -- if retcode: -- cmd = kwargs.get("args") -- if cmd is None: -- cmd = popenargs[0] -- raise CalledProcessError(retcode, cmd) -- return 0 -- -- --def check_output(*popenargs, timeout=None, **kwargs): -- r"""Run command with arguments and return its output. -- -- If the exit code was non-zero it raises a CalledProcessError. The -- CalledProcessError object will have the return code in the returncode -- attribute and output in the output attribute. -- -- The arguments are the same as for the Popen constructor. Example: -- -- >>> check_output(["ls", "-l", "/dev/null"]) -- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' -- -- The stdout argument is not allowed as it is used internally. -- To capture standard error in the result, use stderr=STDOUT. -- -- >>> check_output(["/bin/sh", "-c", -- ... "ls -l non_existent_file ; exit 0"], -- ... stderr=STDOUT) -- b'ls: non_existent_file: No such file or directory\n' -- -- There is an additional optional argument, "input", allowing you to -- pass a string to the subprocess's stdin. If you use this argument -- you may not also use the Popen constructor's "stdin" argument, as -- it too will be used internally. Example: -- -- >>> check_output(["sed", "-e", "s/foo/bar/"], -- ... input=b"when in the course of fooman events\n") -- b'when in the course of barman events\n' -- -- If universal_newlines=True is passed, the return value will be a -- string rather than bytes. -- """ -- if 'stdout' in kwargs: -- raise ValueError('stdout argument not allowed, it will be overridden.') -- if 'input' in kwargs: -- if 'stdin' in kwargs: -- raise ValueError('stdin and input arguments may not both be used.') -- inputdata = kwargs['input'] -- del kwargs['input'] -- kwargs['stdin'] = PIPE -- else: -- inputdata = None -- with Popen(*popenargs, stdout=PIPE, **kwargs) as process: -- try: -- output, unused_err = process.communicate(inputdata, timeout=timeout) -- except TimeoutExpired: -- process.kill() -- output, unused_err = process.communicate() -- raise TimeoutExpired(process.args, timeout, output=output) -- except: -- process.kill() -- process.wait() -- raise -- retcode = process.poll() -- if retcode: -- raise CalledProcessError(retcode, process.args, output=output) -- return output -- -- --def list2cmdline(seq): -- """ -- Translate a sequence of arguments into a command line -- string, using the same rules as the MS C runtime: -- -- 1) Arguments are delimited by white space, which is either a -- space or a tab. -- -- 2) A string surrounded by double quotation marks is -- interpreted as a single argument, regardless of white space -- contained within. A quoted string can be embedded in an -- argument. -- -- 3) A double quotation mark preceded by a backslash is -- interpreted as a literal double quotation mark. -- -- 4) Backslashes are interpreted literally, unless they -- immediately precede a double quotation mark. -- -- 5) If backslashes immediately precede a double quotation mark, -- every pair of backslashes is interpreted as a literal -- backslash. If the number of backslashes is odd, the last -- backslash escapes the next double quotation mark as -- described in rule 3. -- """ -- -- # See -- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -- # or search http://msdn.microsoft.com for -- # "Parsing C++ Command-Line Arguments" -- result = [] -- needquote = False -- for arg in seq: -- bs_buf = [] -- -- # Add a space to separate this argument from the others -- if result: -- result.append(' ') -- -- needquote = (" " in arg) or ("\t" in arg) or not arg -- if needquote: -- result.append('"') -- -- for c in arg: -- if c == '\\': -- # Don't know if we need to double yet. -- bs_buf.append(c) -- elif c == '"': -- # Double backslashes. -- result.append('\\' * len(bs_buf)*2) -- bs_buf = [] -- result.append('\\"') -- else: -- # Normal char -- if bs_buf: -- result.extend(bs_buf) -- bs_buf = [] -- result.append(c) -- -- # Add remaining backslashes, if any. -- if bs_buf: -- result.extend(bs_buf) -- -- if needquote: -- result.extend(bs_buf) -- result.append('"') -- -- return ''.join(result) -- -- --# Various tools for executing commands and looking at their output and status. --# -- --def getstatusoutput(cmd): -- """ Return (status, output) of executing cmd in a shell. -+ if mswindows: ++ if _mswindows: + from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, + STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, + STD_ERROR_HANDLE, SW_HIDE, @@ -9451,82 +9286,13 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + self.closed = True + return int(self) + raise ValueError("already closed") - -- Execute the string 'cmd' in a shell with 'check_output' and -- return a 2-tuple (status, output). Universal newlines mode is used, -- meaning that the result with be decoded to a string. ++ + def __repr__(self): -+ return "Handle(%d)" % int(self) - -- A trailing newline is stripped from the output. -- The exit status for the command can be interpreted -- according to the rules for the function 'wait'. Example: ++ return "%s(%d)" % (self.__class__.__name__, int(self)) ++ + __del__ = Close + __str__ = __repr__ - -- >>> import subprocess -- >>> subprocess.getstatusoutput('ls /bin/ls') -- (0, '/bin/ls') -- >>> subprocess.getstatusoutput('cat /bin/junk') -- (256, 'cat: /bin/junk: No such file or directory') -- >>> subprocess.getstatusoutput('/bin/junk') -- (256, 'sh: /bin/junk: not found') -- """ - try: -- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) -- status = 0 -- except CalledProcessError as ex: -- data = ex.output -- status = ex.returncode -- if data[-1:] == '\n': -- data = data[:-1] -- return status, data -- --def getoutput(cmd): -- """Return output (stdout or stderr) of executing cmd in a shell. -- -- Like getstatusoutput(), except the exit status is ignored and the return -- value is a string containing the command's output. Example: -- -- >>> import subprocess -- >>> subprocess.getoutput('ls /bin/ls') -- '/bin/ls' -- """ -- return getstatusoutput(cmd)[1] -- -- --_PLATFORM_DEFAULT_CLOSE_FDS = object() -- -- --class Popen(object): -- -- _child_created = False # Set here since __del__ checks it -- -- def __init__(self, args, bufsize=-1, executable=None, -- stdin=None, stdout=None, stderr=None, -- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, -- shell=False, cwd=None, env=None, universal_newlines=False, -- startupinfo=None, creationflags=0, -- restore_signals=True, start_new_session=False, -- pass_fds=()): -- """Create new Popen instance.""" -- _cleanup() -- # Held while anything is calling waitpid before returncode has been -- # updated to prevent clobbering returncode if wait() or poll() are -- # called from multiple threads at once. After acquiring the lock, -- # code must re-check self.returncode to see if another thread just -- # finished a waitpid() call. -- self._waitpid_lock = threading.Lock() -- -- self._input = None -- self._communication_started = False -- if bufsize is None: -- bufsize = -1 # Restore default -- if not isinstance(bufsize, int): -- raise TypeError("bufsize must be an integer") -+ MAXFD = os.sysconf("SC_OPEN_MAX") -+ except: -+ MAXFD = 256 ++ + + # This lists holds Popen instances for which the underlying process had not + # exited at the time its __del__ method got called: those processes are wait()ed @@ -9545,23 +9311,24 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # It's harmless that it was already removed, so ignore. + pass -- if mswindows: -- if preexec_fn is not None: -- raise ValueError("preexec_fn is not supported on Windows " -- "platforms") -- any_stdio_set = (stdin is not None or stdout is not None or -- stderr is not None) -- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -- if any_stdio_set: -- close_fds = False -+ def _eintr_retry_call(func, *args): -+ while True: -+ try: -+ return func(*args) -+ except InterruptedError: -+ continue -+ -+ +- The arguments are the same as for the Popen constructor. Example: + +- retcode = call(["ls", "-l"]) +- """ +- with Popen(*popenargs, **kwargs) as p: +- try: +- return p.wait(timeout=timeout) +- except: +- p.kill() +- p.wait() +- raise +- +- +-def check_call(*popenargs, **kwargs): +- """Run command with arguments. Wait for command to complete. If +- the exit code was zero then return, otherwise raise +- CalledProcessError. The CalledProcessError object will have the +- return code in the returncode attribute. + # XXX This function is only used by multiprocessing and the test suite, + # but it's here so that it can be imported when Python is compiled without + # threads. @@ -9598,9 +9365,49 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + def call(*popenargs, timeout=None, **kwargs): + """Run command with arguments. Wait for command to complete or + timeout, then return the returncode attribute. -+ + +- The arguments are the same as for the call function. Example: + The arguments are the same as for the Popen constructor. Example: -+ + +- check_call(["ls", "-l"]) +- """ +- retcode = call(*popenargs, **kwargs) +- if retcode: +- cmd = kwargs.get("args") +- if cmd is None: +- cmd = popenargs[0] +- raise CalledProcessError(retcode, cmd) +- return 0 +- +- +-def check_output(*popenargs, timeout=None, **kwargs): +- r"""Run command with arguments and return its output. +- +- If the exit code was non-zero it raises a CalledProcessError. The +- CalledProcessError object will have the return code in the returncode +- attribute and output in the output attribute. +- +- The arguments are the same as for the Popen constructor. Example: +- +- >>> check_output(["ls", "-l", "/dev/null"]) +- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' +- +- The stdout argument is not allowed as it is used internally. +- To capture standard error in the result, use stderr=STDOUT. +- +- >>> check_output(["/bin/sh", "-c", +- ... "ls -l non_existent_file ; exit 0"], +- ... stderr=STDOUT) +- b'ls: non_existent_file: No such file or directory\n' +- +- There is an additional optional argument, "input", allowing you to +- pass a string to the subprocess's stdin. If you use this argument +- you may not also use the Popen constructor's "stdin" argument, as +- it too will be used internally. Example: +- +- >>> check_output(["sed", "-e", "s/foo/bar/"], +- ... input=b"when in the course of fooman events\n") +- b'when in the course of barman events\n' + retcode = call(["ls", "-l"]) + """ + with Popen(*popenargs, **kwargs) as p: @@ -9617,9 +9424,18 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + the exit code was zero then return, otherwise raise + CalledProcessError. The CalledProcessError object will have the + return code in the returncode attribute. -+ + +- If universal_newlines=True is passed, the "input" argument must be a +- string and the return value will be a string rather than bytes. +- """ +- if 'stdout' in kwargs: +- raise ValueError('stdout argument not allowed, it will be overridden.') + The arguments are the same as for the call function. Example: -+ + +- if 'input' in kwargs and kwargs['input'] is None: +- # Explicitly passing input=None was previously equivalent to passing an +- # empty string. That is maintained here for backwards compatibility. +- kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' + check_call(["ls", "-l"]) + """ + retcode = call(*popenargs, **kwargs) @@ -9659,45 +9475,293 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + >>> check_output(["sed", "-e", "s/foo/bar/"], + ... input=b"when in the course of fooman events\n") + b'when in the course of barman events\n' -+ -+ If universal_newlines=True is passed, the return value will be a -+ string rather than bytes. + +- return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, +- **kwargs).stdout ++ If universal_newlines=True is passed, the "input" argument must be a ++ string and the return value will be a string rather than bytes. + """ + if 'stdout' in kwargs: + raise ValueError('stdout argument not allowed, it will be overridden.') -+ if 'input' in kwargs: + ++ if 'input' in kwargs and kwargs['input'] is None: ++ # Explicitly passing input=None was previously equivalent to passing an ++ # empty string. That is maintained here for backwards compatibility. ++ kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' + +-class CompletedProcess(object): +- """A process that has finished running. ++ return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, ++ **kwargs).stdout + +- This is returned by run(). + +- Attributes: +- args: The list or str args passed to run(). +- returncode: The exit code of the process, negative for signals. +- stdout: The standard output (None if not captured). +- stderr: The standard error (None if not captured). +- """ +- def __init__(self, args, returncode, stdout=None, stderr=None): +- self.args = args +- self.returncode = returncode +- self.stdout = stdout +- self.stderr = stderr ++ class CompletedProcess(object): ++ """A process that has finished running. + +- def __repr__(self): +- args = ['args={!r}'.format(self.args), +- 'returncode={!r}'.format(self.returncode)] +- if self.stdout is not None: +- args.append('stdout={!r}'.format(self.stdout)) +- if self.stderr is not None: +- args.append('stderr={!r}'.format(self.stderr)) +- return "{}({})".format(type(self).__name__, ', '.join(args)) +- +- def check_returncode(self): +- """Raise CalledProcessError if the exit code is non-zero.""" +- if self.returncode: +- raise CalledProcessError(self.returncode, self.args, self.stdout, +- self.stderr) +- +- +-def run(*popenargs, input=None, timeout=None, check=False, **kwargs): +- """Run command with arguments and return a CompletedProcess instance. +- +- The returned instance will have attributes args, returncode, stdout and +- stderr. By default, stdout and stderr are not captured, and those attributes +- will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. +- +- If check is True and the exit code was non-zero, it raises a +- CalledProcessError. The CalledProcessError object will have the return code +- in the returncode attribute, and output & stderr attributes if those streams +- were captured. +- +- If timeout is given, and the process takes too long, a TimeoutExpired +- exception will be raised. +- +- There is an optional argument "input", allowing you to +- pass a string to the subprocess's stdin. If you use this argument +- you may not also use the Popen constructor's "stdin" argument, as +- it will be used internally. +- +- The other arguments are the same as for the Popen constructor. +- +- If universal_newlines=True is passed, the "input" argument must be a +- string and stdout/stderr in the returned object will be strings rather than +- bytes. +- """ +- if input is not None: +- if 'stdin' in kwargs: +- raise ValueError('stdin and input arguments may not both be used.') +- kwargs['stdin'] = PIPE ++ This is returned by run(). + +- with Popen(*popenargs, **kwargs) as process: +- try: +- stdout, stderr = process.communicate(input, timeout=timeout) +- except TimeoutExpired: +- process.kill() +- stdout, stderr = process.communicate() +- raise TimeoutExpired(process.args, timeout, output=stdout, +- stderr=stderr) +- except: +- process.kill() +- process.wait() +- raise +- retcode = process.poll() +- if check and retcode: +- raise CalledProcessError(retcode, process.args, +- output=stdout, stderr=stderr) +- return CompletedProcess(process.args, retcode, stdout, stderr) ++ Attributes: ++ args: The list or str args passed to run(). ++ returncode: The exit code of the process, negative for signals. ++ stdout: The standard output (None if not captured). ++ stderr: The standard error (None if not captured). ++ """ ++ def __init__(self, args, returncode, stdout=None, stderr=None): ++ self.args = args ++ self.returncode = returncode ++ self.stdout = stdout ++ self.stderr = stderr + ++ def __repr__(self): ++ args = ['args={!r}'.format(self.args), ++ 'returncode={!r}'.format(self.returncode)] ++ if self.stdout is not None: ++ args.append('stdout={!r}'.format(self.stdout)) ++ if self.stderr is not None: ++ args.append('stderr={!r}'.format(self.stderr)) ++ return "{}({})".format(type(self).__name__, ', '.join(args)) + +-def list2cmdline(seq): +- """ +- Translate a sequence of arguments into a command line +- string, using the same rules as the MS C runtime: ++ def check_returncode(self): ++ """Raise CalledProcessError if the exit code is non-zero.""" ++ if self.returncode: ++ raise CalledProcessError(self.returncode, self.args, self.stdout, ++ self.stderr) + +- 1) Arguments are delimited by white space, which is either a +- space or a tab. + +- 2) A string surrounded by double quotation marks is +- interpreted as a single argument, regardless of white space +- contained within. A quoted string can be embedded in an +- argument. +- +- 3) A double quotation mark preceded by a backslash is +- interpreted as a literal double quotation mark. +- +- 4) Backslashes are interpreted literally, unless they +- immediately precede a double quotation mark. +- +- 5) If backslashes immediately precede a double quotation mark, +- every pair of backslashes is interpreted as a literal +- backslash. If the number of backslashes is odd, the last +- backslash escapes the next double quotation mark as +- described in rule 3. +- """ ++ def run(*popenargs, input=None, timeout=None, check=False, **kwargs): ++ """Run command with arguments and return a CompletedProcess instance. + +- # See +- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx +- # or search http://msdn.microsoft.com for +- # "Parsing C++ Command-Line Arguments" +- result = [] +- needquote = False +- for arg in seq: +- bs_buf = [] +- +- # Add a space to separate this argument from the others +- if result: +- result.append(' ') +- +- needquote = (" " in arg) or ("\t" in arg) or not arg +- if needquote: +- result.append('"') +- +- for c in arg: +- if c == '\\': +- # Don't know if we need to double yet. +- bs_buf.append(c) +- elif c == '"': +- # Double backslashes. +- result.append('\\' * len(bs_buf)*2) +- bs_buf = [] +- result.append('\\"') +- else: +- # Normal char +- if bs_buf: +- result.extend(bs_buf) +- bs_buf = [] +- result.append(c) ++ The returned instance will have attributes args, returncode, stdout and ++ stderr. By default, stdout and stderr are not captured, and those attributes ++ will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. + +- # Add remaining backslashes, if any. +- if bs_buf: +- result.extend(bs_buf) ++ If check is True and the exit code was non-zero, it raises a ++ CalledProcessError. The CalledProcessError object will have the return code ++ in the returncode attribute, and output & stderr attributes if those streams ++ were captured. + +- if needquote: +- result.extend(bs_buf) +- result.append('"') ++ If timeout is given, and the process takes too long, a TimeoutExpired ++ exception will be raised. + +- return ''.join(result) ++ There is an optional argument "input", allowing you to ++ pass a string to the subprocess's stdin. If you use this argument ++ you may not also use the Popen constructor's "stdin" argument, as ++ it will be used internally. + ++ The other arguments are the same as for the Popen constructor. + +-# Various tools for executing commands and looking at their output and status. +-# ++ If universal_newlines=True is passed, the "input" argument must be a ++ string and stdout/stderr in the returned object will be strings rather than ++ bytes. ++ """ ++ if input is not None: + if 'stdin' in kwargs: + raise ValueError('stdin and input arguments may not both be used.') -+ inputdata = kwargs['input'] -+ del kwargs['input'] + kwargs['stdin'] = PIPE -+ else: -+ inputdata = None -+ with Popen(*popenargs, stdout=PIPE, **kwargs) as process: + +-def getstatusoutput(cmd): +- """ Return (status, output) of executing cmd in a shell. ++ with Popen(*popenargs, **kwargs) as process: + try: -+ output, unused_err = process.communicate(inputdata, timeout=timeout) ++ stdout, stderr = process.communicate(input, timeout=timeout) + except TimeoutExpired: + process.kill() -+ output, unused_err = process.communicate() -+ raise TimeoutExpired(process.args, timeout, output=output) ++ stdout, stderr = process.communicate() ++ raise TimeoutExpired(process.args, timeout, output=stdout, ++ stderr=stderr) + except: + process.kill() + process.wait() + raise + retcode = process.poll() -+ if retcode: -+ raise CalledProcessError(retcode, process.args, output=output) -+ return output -+ -+ ++ if check and retcode: ++ raise CalledProcessError(retcode, process.args, ++ output=stdout, stderr=stderr) ++ return CompletedProcess(process.args, retcode, stdout, stderr) + +- Execute the string 'cmd' in a shell with 'check_output' and +- return a 2-tuple (status, output). Universal newlines mode is used, +- meaning that the result with be decoded to a string. + +- A trailing newline is stripped from the output. +- The exit status for the command can be interpreted +- according to the rules for the function 'wait'. Example: + def list2cmdline(seq): + """ + Translate a sequence of arguments into a command line + string, using the same rules as the MS C runtime: -+ + +- >>> import subprocess +- >>> subprocess.getstatusoutput('ls /bin/ls') +- (0, '/bin/ls') +- >>> subprocess.getstatusoutput('cat /bin/junk') +- (256, 'cat: /bin/junk: No such file or directory') +- >>> subprocess.getstatusoutput('/bin/junk') +- (256, 'sh: /bin/junk: not found') +- """ +- try: +- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) +- status = 0 +- except CalledProcessError as ex: +- data = ex.output +- status = ex.returncode +- if data[-1:] == '\n': +- data = data[:-1] +- return status, data +- +-def getoutput(cmd): +- """Return output (stdout or stderr) of executing cmd in a shell. +- +- Like getstatusoutput(), except the exit status is ignored and the return +- value is a string containing the command's output. Example: +- +- >>> import subprocess +- >>> subprocess.getoutput('ls /bin/ls') +- '/bin/ls' +- """ +- return getstatusoutput(cmd)[1] + 1) Arguments are delimited by white space, which is either a + space or a tab. -+ + + 2) A string surrounded by double quotation marks is + interpreted as a single argument, regardless of white space + contained within. A quoted string can be embedded in an @@ -9715,7 +9779,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + backslash escapes the next double quotation mark as + described in rule 3. + """ -+ + +-_PLATFORM_DEFAULT_CLOSE_FDS = object() + # See + # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx + # or search http://msdn.microsoft.com for @@ -9742,7 +9807,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + result.append('\\' * len(bs_buf)*2) + bs_buf = [] + result.append('\\"') - else: ++ else: + # Normal char + if bs_buf: + result.extend(bs_buf) @@ -9803,9 +9868,46 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + '/bin/ls' + """ + return getstatusoutput(cmd)[1] -+ + + +-class Popen(object): + _PLATFORM_DEFAULT_CLOSE_FDS = object() -+ + +- _child_created = False # Set here since __del__ checks it +- +- def __init__(self, args, bufsize=-1, executable=None, +- stdin=None, stdout=None, stderr=None, +- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, +- shell=False, cwd=None, env=None, universal_newlines=False, +- startupinfo=None, creationflags=0, +- restore_signals=True, start_new_session=False, +- pass_fds=()): +- """Create new Popen instance.""" +- _cleanup() +- # Held while anything is calling waitpid before returncode has been +- # updated to prevent clobbering returncode if wait() or poll() are +- # called from multiple threads at once. After acquiring the lock, +- # code must re-check self.returncode to see if another thread just +- # finished a waitpid() call. +- self._waitpid_lock = threading.Lock() +- +- self._input = None +- self._communication_started = False +- if bufsize is None: +- bufsize = -1 # Restore default +- if not isinstance(bufsize, int): +- raise TypeError("bufsize must be an integer") + +- if _mswindows: +- if preexec_fn is not None: +- raise ValueError("preexec_fn is not supported on Windows " +- "platforms") +- any_stdio_set = (stdin is not None or stdout is not None or +- stderr is not None) +- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: +- if any_stdio_set: +- close_fds = False +- else: + class Popen(object): + + _child_created = False # Set here since __del__ checks it @@ -9833,7 +9935,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + if not isinstance(bufsize, int): + raise TypeError("bufsize must be an integer") + -+ if mswindows: ++ if _mswindows: + if preexec_fn is not None: + raise ValueError("preexec_fn is not supported on Windows " + "platforms") @@ -9941,7 +10043,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # quickly terminating child could make our fds unwrappable + # (see #8458). + -+ if mswindows: ++ if _mswindows: + if p2cwrite != -1: + p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) + if c2pread != -1: @@ -9949,12 +10051,13 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + if errread != -1: + errread = msvcrt.open_osfhandle(errread.Detach(), 0) -- if mswindows: +- if _mswindows: if p2cwrite != -1: - p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) + self.stdin = io.open(p2cwrite, 'wb', bufsize) + if universal_newlines: -+ self.stdin = io.TextIOWrapper(self.stdin, write_through=True) ++ self.stdin = io.TextIOWrapper(self.stdin, write_through=True, ++ line_buffering=(bufsize == 1)) if c2pread != -1: - c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) + self.stdout = io.open(c2pread, 'rb', bufsize) @@ -9966,7 +10069,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - if p2cwrite != -1: - self.stdin = io.open(p2cwrite, 'wb', bufsize) - if universal_newlines: -- self.stdin = io.TextIOWrapper(self.stdin, write_through=True) +- self.stdin = io.TextIOWrapper(self.stdin, write_through=True, +- line_buffering=(bufsize == 1)) - if c2pread != -1: - self.stdout = io.open(c2pread, 'rb', bufsize) - if universal_newlines: @@ -10024,9 +10128,10 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + f.close() except OSError: - pass +- +- raise + pass # Ignore EBADF or other errors. -- raise + if not self._closed_child_pipe_fds: + to_close = [] + if stdin == PIPE: @@ -10043,8 +10148,6 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + except OSError: + pass -+ raise - - def _translate_newlines(self, data, encoding): - data = data.decode(encoding) - return data.replace("\r\n", "\n").replace("\r", "\n") @@ -10057,10 +10160,12 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - self.stdout.close() - if self.stderr: - self.stderr.close() -- if self.stdin: -- self.stdin.close() -- # Wait for the process to terminate, to avoid zombies. -- self.wait() +- try: # Flushing a BufferedWriter may raise an error +- if self.stdin: +- self.stdin.close() +- finally: +- # Wait for the process to terminate, to avoid zombies. +- self.wait() - - def __del__(self, _maxsize=sys.maxsize): - if not self._child_created: @@ -10077,18 +10182,45 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - self._devnull = os.open(os.devnull, os.O_RDWR) - return self._devnull - +- def _stdin_write(self, input): +- if input: +- try: +- self.stdin.write(input) +- except BrokenPipeError: +- # communicate() must ignore broken pipe error +- pass +- except OSError as e: +- if e.errno == errno.EINVAL and self.poll() is not None: +- # Issue #19612: On Windows, stdin.write() fails with EINVAL +- # if the process already exited before the write +- pass +- else: +- raise +- self.stdin.close() ++ raise + - def communicate(self, input=None, timeout=None): - """Interact with process: Send data to stdin. Read data from - stdout and stderr, until end-of-file is reached. Wait for -- process to terminate. The optional input argument should be -- bytes to be sent to the child process, or None, if no data -- should be sent to the child. -- -- communicate() returns a tuple (stdout, stderr).""" +- process to terminate. - +- The optional "input" argument should be data to be sent to the +- child process (if self.universal_newlines is True, this should +- be a string; if it is False, "input" should be bytes), or +- None, if no data should be sent to the child. + +- communicate() returns a tuple (stdout, stderr). These will be +- bytes or, if self.universal_newlines was True, a string. +- """ ++ def _translate_newlines(self, data, encoding): ++ data = data.decode(encoding) ++ return data.replace("\r\n", "\n").replace("\r", "\n") + - if self._communication_started and input: - raise ValueError("Cannot send input after starting communication") -- ++ def __enter__(self): ++ return self + - # Optimization: If we are not worried about timeouts, we haven't - # started communicating, and we have one or zero pipes, using select() - # or threads is unnecessary. @@ -10097,49 +10229,34 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - stdout = None - stderr = None - if self.stdin: -- if input: -- try: -- self.stdin.write(input) -- except OSError as e: -- if e.errno != errno.EPIPE and e.errno != errno.EINVAL: -- raise -- self.stdin.close() +- self._stdin_write(input) - elif self.stdout: -- stdout = _eintr_retry_call(self.stdout.read) -- self.stdout.close() +- stdout = self.stdout.read() ++ def __exit__(self, type, value, traceback): ++ if self.stdout: + self.stdout.close() - elif self.stderr: -- stderr = _eintr_retry_call(self.stderr.read) -- self.stderr.close() +- stderr = self.stderr.read() ++ if self.stderr: + self.stderr.close() - self.wait() - else: - if timeout is not None: - endtime = _time() + timeout - else: - endtime = None - +- - try: - stdout, stderr = self._communicate(input, endtime, timeout) -- finally: ++ try: # Flushing a BufferedWriter may raise an error ++ if self.stdin: ++ self.stdin.close() + finally: - self._communication_started = True -+ def _translate_newlines(self, data, encoding): -+ data = data.decode(encoding) -+ return data.replace("\r\n", "\n").replace("\r", "\n") ++ # Wait for the process to terminate, to avoid zombies. ++ self.wait() - sts = self.wait(timeout=self._remaining_time(endtime)) -+ def __enter__(self): -+ return self - -- return (stdout, stderr) -+ def __exit__(self, type, value, traceback): -+ if self.stdout: -+ self.stdout.close() -+ if self.stderr: -+ self.stderr.close() -+ if self.stdin: -+ self.stdin.close() -+ # Wait for the process to terminate, to avoid zombies. -+ self.wait() - + def __del__(self, _maxsize=sys.maxsize): + if not self._child_created: + # We didn't get to successfully create a child process. @@ -10154,19 +10271,49 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + if not hasattr(self, '_devnull'): + self._devnull = os.open(os.devnull, os.O_RDWR) + return self._devnull -+ + +- return (stdout, stderr) ++ def _stdin_write(self, input): ++ if input: ++ try: ++ self.stdin.write(input) ++ except BrokenPipeError: ++ # communicate() must ignore broken pipe error ++ pass ++ except OSError as e: ++ if e.errno == errno.EINVAL and self.poll() is not None: ++ # Issue #19612: On Windows, stdin.write() fails with EINVAL ++ # if the process already exited before the write ++ pass ++ else: ++ raise ++ self.stdin.close() + + def communicate(self, input=None, timeout=None): + """Interact with process: Send data to stdin. Read data from + stdout and stderr, until end-of-file is reached. Wait for -+ process to terminate. The optional input argument should be -+ bytes to be sent to the child process, or None, if no data -+ should be sent to the child. -+ -+ communicate() returns a tuple (stdout, stderr).""" ++ process to terminate. + ++ The optional "input" argument should be data to be sent to the ++ child process (if self.universal_newlines is True, this should ++ be a string; if it is False, "input" should be bytes), or ++ None, if no data should be sent to the child. + +- def poll(self): +- return self._internal_poll() ++ communicate() returns a tuple (stdout, stderr). These will be ++ bytes or, if self.universal_newlines was True, a string. ++ """ + + if self._communication_started and input: + raise ValueError("Cannot send input after starting communication") -+ + +- def _remaining_time(self, endtime): +- """Convenience for _communicate when computing timeouts.""" +- if endtime is None: +- return None +- else: +- return endtime - _time() + # Optimization: If we are not worried about timeouts, we haven't + # started communicating, and we have one or zero pipes, using select() + # or threads is unnecessary. @@ -10175,18 +10322,12 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + stdout = None + stderr = None + if self.stdin: -+ if input: -+ try: -+ self.stdin.write(input) -+ except OSError as e: -+ if e.errno != errno.EPIPE and e.errno != errno.EINVAL: -+ raise -+ self.stdin.close() ++ self._stdin_write(input) + elif self.stdout: -+ stdout = _eintr_retry_call(self.stdout.read) ++ stdout = self.stdout.read() + self.stdout.close() + elif self.stderr: -+ stderr = _eintr_retry_call(self.stderr.read) ++ stderr = self.stderr.read() + self.stderr.close() + self.wait() + else: @@ -10195,35 +10336,22 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + else: + endtime = None -- def poll(self): -- return self._internal_poll() + try: + stdout, stderr = self._communicate(input, endtime, timeout) + finally: + self._communication_started = True -+ sts = self.wait(timeout=self._remaining_time(endtime)) - -- def _remaining_time(self, endtime): -- """Convenience for _communicate when computing timeouts.""" -- if endtime is None: -- return None -- else: -- return endtime - _time() -+ return (stdout, stderr) - - - def _check_timeout(self, endtime, orig_timeout): - """Convenience for checking if a timeout has expired.""" - if endtime is None: - return - if _time() > endtime: - raise TimeoutExpired(self.args, orig_timeout) -+ def poll(self): -+ return self._internal_poll() ++ sts = self.wait(timeout=self._remaining_time(endtime)) ++ return (stdout, stderr) -- if mswindows: +- if _mswindows: - # - # Windows methods - # @@ -10233,7 +10361,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - """ - if stdin is None and stdout is None and stderr is None: - return (-1, -1, -1, -1, -1, -1) -- + - p2cread, p2cwrite = -1, -1 - c2pread, c2pwrite = -1, -1 - errread, errwrite = -1, -1 @@ -10251,11 +10379,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - p2cread = msvcrt.get_osfhandle(self._get_devnull()) - elif isinstance(stdin, int): - p2cread = msvcrt.get_osfhandle(stdin) -+ def _remaining_time(self, endtime): -+ """Convenience for _communicate when computing timeouts.""" -+ if endtime is None: -+ return None - else: +- else: - # Assuming file-like object - p2cread = msvcrt.get_osfhandle(stdin.fileno()) - p2cread = self._make_inheritable(p2cread) @@ -10340,7 +10464,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - startupinfo.wShowWindow = _winapi.SW_HIDE - comspec = os.environ.get("COMSPEC", "cmd.exe") - args = '{} /c "{}"'.format (comspec, args) -+ return endtime - _time() ++ def poll(self): ++ return self._internal_poll() - # Start the process - try: @@ -10380,17 +10505,29 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - _GetExitCodeProcess=_winapi.GetExitCodeProcess): - """Check if child process has terminated. Returns returncode - attribute. -- + - This method is called by __del__, so it can only refer to objects - in its local scope. -- ++ def _remaining_time(self, endtime): ++ """Convenience for _communicate when computing timeouts.""" ++ if endtime is None: ++ return None ++ else: ++ return endtime - _time() + - """ - if self.returncode is None: - if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: - self.returncode = _GetExitCodeProcess(self._handle) - return self.returncode -- -- + ++ def _check_timeout(self, endtime, orig_timeout): ++ """Convenience for checking if a timeout has expired.""" ++ if endtime is None: ++ return ++ if _time() > endtime: ++ raise TimeoutExpired(self.args, orig_timeout) + - def wait(self, timeout=None, endtime=None): - """Wait for child process to terminate. Returns returncode - attribute.""" @@ -10431,30 +10568,10 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - args=(self.stderr, self._stderr_buff)) - self.stderr_thread.daemon = True - self.stderr_thread.start() - +- - if self.stdin: -- if input is not None: -- try: -- self.stdin.write(input) -- except OSError as e: -- if e.errno == errno.EPIPE: -- # communicate() should ignore pipe full error -- pass -- elif (e.errno == errno.EINVAL -- and self.poll() is not None): -- # Issue #19612: stdin.write() fails with EINVAL -- # if the process already exited before the write -- pass -- else: -- raise -- self.stdin.close() -+ def _check_timeout(self, endtime, orig_timeout): -+ """Convenience for checking if a timeout has expired.""" -+ if endtime is None: -+ return -+ if _time() > endtime: -+ raise TimeoutExpired(self.args, orig_timeout) - +- self._stdin_write(input) +- - # Wait for the reader threads, or time out. If we time out, the - # threads remain reading and the fds left open in case the user - # calls communicate again. @@ -10483,7 +10600,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - stdout = stdout[0] - if stderr is not None: - stderr = stderr[0] -+ if mswindows: ++ if _mswindows: + # + # Windows methods + # @@ -10647,8 +10764,10 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + return self.returncode - def send_signal(self, sig): -- """Send a signal to the process -- """ +- """Send a signal to the process.""" +- # Don't signal a process that we know has already died. +- if self.returncode is not None: +- return - if sig == signal.SIGTERM: - self.terminate() - elif sig == signal.CTRL_C_EVENT: @@ -10659,8 +10778,10 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - raise ValueError("Unsupported signal: {}".format(sig)) - def terminate(self): -- """Terminates the process -- """ +- """Terminates the process.""" +- # Don't terminate a process that we know has already died. +- if self.returncode is not None: +- return - try: - _winapi.TerminateProcess(self._handle, 1) - except PermissionError: @@ -10734,6 +10855,21 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + args=(self.stderr, self._stderr_buff)) + self.stderr_thread.daemon = True + self.stderr_thread.start() ++ ++ if self.stdin: ++ self._stdin_write(input) ++ ++ # Wait for the reader threads, or time out. If we time out, the ++ # threads remain reading and the fds left open in case the user ++ # calls communicate again. ++ if self.stdout is not None: ++ self.stdout_thread.join(self._remaining_time(endtime)) ++ if self.stdout_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) ++ if self.stderr is not None: ++ self.stderr_thread.join(self._remaining_time(endtime)) ++ if self.stderr_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) - if stdout is None: - pass @@ -10746,22 +10882,16 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - else: - # Assuming file-like object - c2pwrite = stdout.fileno() -+ if self.stdin: -+ if input is not None: -+ try: -+ self.stdin.write(input) -+ except OSError as e: -+ if e.errno == errno.EPIPE: -+ # communicate() should ignore pipe full error -+ pass -+ elif (e.errno == errno.EINVAL -+ and self.poll() is not None): -+ # Issue #19612: stdin.write() fails with EINVAL -+ # if the process already exited before the write -+ pass -+ else: -+ raise -+ self.stdin.close() ++ # Collect the output from and close both pipes, now that we know ++ # both have been read successfully. ++ stdout = None ++ stderr = None ++ if self.stdout: ++ stdout = self._stdout_buff ++ self.stdout.close() ++ if self.stderr: ++ stderr = self._stderr_buff ++ self.stderr.close() - if stderr is None: - pass @@ -10776,33 +10906,17 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - else: - # Assuming file-like object - errwrite = stderr.fileno() -+ # Wait for the reader threads, or time out. If we time out, the -+ # threads remain reading and the fds left open in case the user -+ # calls communicate again. -+ if self.stdout is not None: -+ self.stdout_thread.join(self._remaining_time(endtime)) -+ if self.stdout_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) -+ if self.stderr is not None: -+ self.stderr_thread.join(self._remaining_time(endtime)) -+ if self.stderr_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = stdout[0] ++ if stderr is not None: ++ stderr = stderr[0] - return (p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite) - - -- def _close_fds(self, fds_to_keep): -- start_fd = 3 -- for fd in sorted(fds_to_keep): -- if fd >= start_fd: -- os.closerange(start_fd, fd) -- start_fd = fd + 1 -- if start_fd <= MAXFD: -- os.closerange(start_fd, MAXFD) -- -- - def _execute_child(self, args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, - startupinfo, creationflags, shell, @@ -10811,26 +10925,25 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - errread, errwrite, - restore_signals, start_new_session): - """Execute program (POSIX version)""" -+ # Collect the output from and close both pipes, now that we know -+ # both have been read successfully. -+ stdout = None -+ stderr = None -+ if self.stdout: -+ stdout = self._stdout_buff -+ self.stdout.close() -+ if self.stderr: -+ stderr = self._stderr_buff -+ self.stderr.close() ++ return (stdout, stderr) - if isinstance(args, (str, bytes)): - args = [args] - else: - args = list(args) -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = stdout[0] -+ if stderr is not None: -+ stderr = stderr[0] ++ def send_signal(self, sig): ++ """Send a signal to the process.""" ++ # Don't signal a process that we know has already died. ++ if self.returncode is not None: ++ return ++ if sig == signal.SIGTERM: ++ self.terminate() ++ elif sig == signal.CTRL_C_EVENT: ++ os.kill(self.pid, signal.CTRL_C_EVENT) ++ elif sig == signal.CTRL_BREAK_EVENT: ++ os.kill(self.pid, signal.CTRL_BREAK_EVENT) ++ else: ++ raise ValueError("Unsupported signal: {}".format(sig)) - if shell: - args = ["/bin/sh", "-c"] + args @@ -10853,7 +10966,12 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - for low_fd in low_fds_to_close: - os.close(low_fd) - try: -- try: ++ def terminate(self): ++ """Terminates the process.""" ++ # Don't terminate a process that we know has already died. ++ if self.returncode is not None: ++ return + try: - # We must avoid complex work that could involve - # malloc or free in the child process to avoid - # potential deadlocks, thus we do all this here. @@ -10885,7 +11003,14 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - finally: - # be sure the FD is closed no matter what - os.close(errpipe_write) -+ return (stdout, stderr) ++ _winapi.TerminateProcess(self._handle, 1) ++ except PermissionError: ++ # ERROR_ACCESS_DENIED (winerror 5) is received when the ++ # process already died. ++ rc = _winapi.GetExitCodeProcess(self._handle) ++ if rc == _winapi.STILL_ACTIVE: ++ raise ++ self.returncode = rc - # self._devnull is not always defined. - devnull_fd = getattr(self, '_devnull', None) @@ -10904,40 +11029,33 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - # exception (limited in size) - errpipe_data = bytearray() - while True: -- part = _eintr_retry_call(os.read, errpipe_read, 50000) +- part = os.read(errpipe_read, 50000) - errpipe_data += part - if not part or len(errpipe_data) > 50000: - break - finally: - # be sure the FD is closed no matter what - os.close(errpipe_read) -+ def send_signal(self, sig): -+ """Send a signal to the process -+ """ -+ if sig == signal.SIGTERM: -+ self.terminate() -+ elif sig == signal.CTRL_C_EVENT: -+ os.kill(self.pid, signal.CTRL_C_EVENT) -+ elif sig == signal.CTRL_BREAK_EVENT: -+ os.kill(self.pid, signal.CTRL_BREAK_EVENT) -+ else: -+ raise ValueError("Unsupported signal: {}".format(sig)) ++ kill = terminate - if errpipe_data: -+ def terminate(self): -+ """Terminates the process +- try: +- os.waitpid(self.pid, 0) +- except ChildProcessError: ++ else: ++ # ++ # POSIX methods ++ # ++ def _get_handles(self, stdin, stdout, stderr): ++ """Construct and return tuple with IO objects: ++ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite + """ - try: -- _eintr_retry_call(os.waitpid, self.pid, 0) -- except OSError as e: -- if e.errno != errno.ECHILD: -+ _winapi.TerminateProcess(self._handle, 1) -+ except PermissionError: -+ # ERROR_ACCESS_DENIED (winerror 5) is received when the -+ # process already died. -+ rc = _winapi.GetExitCodeProcess(self._handle) -+ if rc == _winapi.STILL_ACTIVE: - raise ++ p2cread, p2cwrite = -1, -1 ++ c2pread, c2pwrite = -1, -1 ++ errread, errwrite = -1, -1 ++ ++ if stdin is None: + pass - try: - exception_name, hex_errno, err_msg = ( - errpipe_data.split(b':', 2)) @@ -10965,10 +11083,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - err_msg += ': ' + repr(orig_executable) - raise child_exception_type(errno_num, err_msg) - raise child_exception_type(err_msg) -+ self.returncode = rc - -+ kill = terminate - +- +- - def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, - _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, - _WEXITSTATUS=os.WEXITSTATUS): @@ -10982,20 +11098,6 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - else: - # Should never happen - raise SubprocessError("Unknown child exit status!") -+ else: -+ # -+ # POSIX methods -+ # -+ def _get_handles(self, stdin, stdout, stderr): -+ """Construct and return tuple with IO objects: -+ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -+ """ -+ p2cread, p2cwrite = -1, -1 -+ c2pread, c2pwrite = -1, -1 -+ errread, errwrite = -1, -1 -+ -+ if stdin is None: -+ pass + elif stdin == PIPE: + p2cread, p2cwrite = os.pipe() + elif stdin == DEVNULL: @@ -11005,7 +11107,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + else: + # Assuming file-like object + p2cread = stdin.fileno() -+ + + if stdout is None: + pass + elif stdout == PIPE: @@ -11032,21 +11134,15 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # Assuming file-like object + errwrite = stderr.fileno() +- def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, +- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): +- """Check if child process has terminated. Returns returncode +- attribute. + return (p2cread, p2cwrite, + c2pread, c2pwrite, + errread, errwrite) + + -+ def _close_fds(self, fds_to_keep): -+ start_fd = 3 -+ for fd in sorted(fds_to_keep): -+ if fd >= start_fd: -+ os.closerange(start_fd, fd) -+ start_fd = fd + 1 -+ if start_fd <= MAXFD: -+ os.closerange(start_fd, MAXFD) -+ -+ + def _execute_child(self, args, executable, preexec_fn, close_fds, + pass_fds, cwd, env, + startupinfo, creationflags, shell, @@ -11056,25 +11152,19 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + restore_signals, start_new_session): + """Execute program (POSIX version)""" -- def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): -- """Check if child process has terminated. Returns returncode -- attribute. -- - This method is called by __del__, so it cannot reference anything - outside of the local scope (nor can any methods it calls). -- ++ if isinstance(args, (str, bytes)): ++ args = [args] ++ else: ++ args = list(args) + - """ - if self.returncode is None: - if not self._waitpid_lock.acquire(False): - # Something else is busy calling waitpid. Don't allow two - # at once. We know nothing yet. - return None -+ if isinstance(args, (str, bytes)): -+ args = [args] -+ else: -+ args = list(args) -+ + if shell: + args = ["/bin/sh", "-c"] + args + if executable: @@ -11161,22 +11251,33 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # exception (limited in size) + errpipe_data = bytearray() + while True: -+ part = _eintr_retry_call(os.read, errpipe_read, 50000) ++ part = os.read(errpipe_read, 50000) + errpipe_data += part + if not part or len(errpipe_data) > 50000: + break finally: - self._waitpid_lock.release() - return self.returncode +- + # be sure the FD is closed no matter what + os.close(errpipe_read) -+ + +- def _try_wait(self, wait_flags): +- """All callers to this function MUST hold self._waitpid_lock.""" +- try: +- (pid, sts) = os.waitpid(self.pid, wait_flags) +- except ChildProcessError: +- # This happens if SIGCLD is set to be ignored or waiting +- # for child processes has otherwise been disabled for our +- # process. This child is dead, we can't get the status. +- pid = self.pid +- sts = 0 +- return (pid, sts) + if errpipe_data: + try: -+ _eintr_retry_call(os.waitpid, self.pid, 0) -+ except OSError as e: -+ if e.errno != errno.ECHILD: -+ raise ++ os.waitpid(self.pid, 0) ++ except ChildProcessError: ++ pass + try: + exception_name, hex_errno, err_msg = ( + errpipe_data.split(b':', 2)) @@ -11204,28 +11305,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + err_msg += ': ' + repr(orig_executable) + raise child_exception_type(errno_num, err_msg) + raise child_exception_type(err_msg) - - -- def _try_wait(self, wait_flags): -- """All callers to this function MUST hold self._waitpid_lock.""" -- try: -- (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) -- except OSError as e: -- if e.errno != errno.ECHILD: -- raise -- # This happens if SIGCLD is set to be ignored or waiting -- # for child processes has otherwise been disabled for our -- # process. This child is dead, we can't get the status. -- pid = self.pid -- sts = 0 -- return (pid, sts) -- -- -- def wait(self, timeout=None, endtime=None): -- """Wait for child process to terminate. Returns returncode -- attribute.""" -- if self.returncode is not None: -- return self.returncode ++ ++ + def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, + _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, + _WEXITSTATUS=os.WEXITSTATUS): @@ -11240,38 +11321,11 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # Should never happen + raise SubprocessError("Unknown child exit status!") -- # endtime is preferred to timeout. timeout is only used for -- # printing. -- if endtime is not None or timeout is not None: -- if endtime is None: -- endtime = _time() + timeout -- elif timeout is None: -- timeout = self._remaining_time(endtime) -- if endtime is not None: -- # Enter a busy loop if we have a timeout. This busy loop was -- # cribbed from Lib/threading.py in Thread.wait() at r71065. -- delay = 0.0005 # 500 us -> initial delay of 1 ms -- while True: -- if self._waitpid_lock.acquire(False): -- try: -- if self.returncode is not None: -- break # Another thread waited. -- (pid, sts) = self._try_wait(os.WNOHANG) -- assert pid == self.pid or pid == 0 -- if pid == self.pid: -- self._handle_exitstatus(sts) -- break -- finally: -- self._waitpid_lock.release() -- remaining = self._remaining_time(endtime) -- if remaining <= 0: -- raise TimeoutExpired(self.args, timeout) -- delay = min(delay * 2, remaining, .05) -- time.sleep(delay) -- else: -- while self.returncode is None: -- with self._waitpid_lock: +- def wait(self, timeout=None, endtime=None): +- """Wait for child process to terminate. Returns returncode +- attribute.""" +- if self.returncode is not None: + def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, + _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): + """Check if child process has terminated. Returns returncode @@ -11287,29 +11341,11 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + # at once. We know nothing yet. + return None + try: - if self.returncode is not None: -- break # Another thread waited. -- (pid, sts) = self._try_wait(0) -- # Check the pid and loop as waitpid has been known to -- # return 0 even without WNOHANG in odd situations. -- # http://bugs.python.org/issue14396. ++ if self.returncode is not None: + return self.returncode # Another thread waited. + pid, sts = _waitpid(self.pid, _WNOHANG) - if pid == self.pid: - self._handle_exitstatus(sts) -- return self.returncode -- -- -- def _communicate(self, input, endtime, orig_timeout): -- if self.stdin and not self._communication_started: -- # Flush stdio buffer. This might block, if the user has -- # been writing to .stdin in an uncontrolled fashion. -- self.stdin.flush() -- if not input: -- self.stdin.close() -- -- stdout = None -- stderr = None ++ if pid == self.pid: ++ self._handle_exitstatus(sts) + except OSError as e: + if _deadstate is not None: + self.returncode = _deadstate @@ -11322,27 +11358,28 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + self.returncode = 0 + finally: + self._waitpid_lock.release() -+ return self.returncode + return self.returncode -- # Only create this mapping if we haven't already. -- if not self._communication_started: -- self._fileobj2output = {} -- if self.stdout: -- self._fileobj2output[self.stdout] = [] -- if self.stderr: -- self._fileobj2output[self.stderr] = [] +- # endtime is preferred to timeout. timeout is only used for +- # printing. +- if endtime is not None or timeout is not None: +- if endtime is None: +- endtime = _time() + timeout +- elif timeout is None: +- timeout = self._remaining_time(endtime) -- if self.stdout: -- stdout = self._fileobj2output[self.stdout] -- if self.stderr: -- stderr = self._fileobj2output[self.stderr] +- if endtime is not None: +- # Enter a busy loop if we have a timeout. This busy loop was +- # cribbed from Lib/threading.py in Thread.wait() at r71065. +- delay = 0.0005 # 500 us -> initial delay of 1 ms +- while True: +- if self._waitpid_lock.acquire(False): +- try: + def _try_wait(self, wait_flags): + """All callers to this function MUST hold self._waitpid_lock.""" + try: -+ (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) -+ except OSError as e: -+ if e.errno != errno.ECHILD: -+ raise ++ (pid, sts) = os.waitpid(self.pid, wait_flags) ++ except ChildProcessError: + # This happens if SIGCLD is set to be ignored or waiting + # for child processes has otherwise been disabled for our + # process. This child is dead, we can't get the status. @@ -11389,14 +11426,61 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + else: + while self.returncode is None: + with self._waitpid_lock: -+ if self.returncode is not None: -+ break # Another thread waited. + if self.returncode is not None: + break # Another thread waited. +- (pid, sts) = self._try_wait(os.WNOHANG) +- assert pid == self.pid or pid == 0 + (pid, sts) = self._try_wait(0) + # Check the pid and loop as waitpid has been known to + # return 0 even without WNOHANG in odd situations. + # http://bugs.python.org/issue14396. -+ if pid == self.pid: -+ self._handle_exitstatus(sts) + if pid == self.pid: + self._handle_exitstatus(sts) +- break +- finally: +- self._waitpid_lock.release() +- remaining = self._remaining_time(endtime) +- if remaining <= 0: +- raise TimeoutExpired(self.args, timeout) +- delay = min(delay * 2, remaining, .05) +- time.sleep(delay) +- else: +- while self.returncode is None: +- with self._waitpid_lock: +- if self.returncode is not None: +- break # Another thread waited. +- (pid, sts) = self._try_wait(0) +- # Check the pid and loop as waitpid has been known to +- # return 0 even without WNOHANG in odd situations. +- # http://bugs.python.org/issue14396. +- if pid == self.pid: +- self._handle_exitstatus(sts) +- return self.returncode +- +- +- def _communicate(self, input, endtime, orig_timeout): +- if self.stdin and not self._communication_started: +- # Flush stdio buffer. This might block, if the user has +- # been writing to .stdin in an uncontrolled fashion. +- self.stdin.flush() +- if not input: +- self.stdin.close() +- +- stdout = None +- stderr = None +- +- # Only create this mapping if we haven't already. +- if not self._communication_started: +- self._fileobj2output = {} +- if self.stdout: +- self._fileobj2output[self.stdout] = [] +- if self.stderr: +- self._fileobj2output[self.stderr] = [] +- +- if self.stdout: +- stdout = self._fileobj2output[self.stdout] +- if self.stderr: +- stderr = self._fileobj2output[self.stderr] + return self.returncode - self._save_input(input) @@ -11430,13 +11514,13 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + stdout = self._fileobj2output[self.stdout] if self.stderr: - selector.register(self.stderr, selectors.EVENT_READ) -+ stderr = self._fileobj2output[self.stderr] - +- - while selector.get_map(): - timeout = self._remaining_time(endtime) - if timeout is not None and timeout < 0: - raise TimeoutExpired(self.args, orig_timeout) -- ++ stderr = self._fileobj2output[self.stderr] + - ready = selector.select(timeout) - self._check_timeout(endtime, orig_timeout) + self._save_input(input) @@ -11452,10 +11536,11 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - self._input_offset + _PIPE_BUF] - try: - self._input_offset += os.write(key.fd, chunk) -- except OSError as e: -- if e.errno == errno.EPIPE: -- selector.unregister(key.fileobj) -- key.fileobj.close() +- except BrokenPipeError: +- selector.unregister(key.fileobj) +- key.fileobj.close() +- else: +- if self._input_offset >= len(self._input): + with _PopenSelector() as selector: + if self.stdin and input: + selector.register(self.stdin, selectors.EVENT_WRITE) @@ -11481,22 +11566,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + self._input_offset + _PIPE_BUF] + try: + self._input_offset += os.write(key.fd, chunk) -+ except OSError as e: -+ if e.errno == errno.EPIPE: -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ else: -+ raise - else: -- raise -- else: -- if self._input_offset >= len(self._input): -+ if self._input_offset >= len(self._input): -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ elif key.fileobj in (self.stdout, self.stderr): -+ data = os.read(key.fd, 32768) -+ if not data: ++ except BrokenPipeError: selector.unregister(key.fileobj) key.fileobj.close() - elif key.fileobj in (self.stdout, self.stderr): @@ -11523,16 +11593,19 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - if stderr is not None: - stderr = self._translate_newlines(stderr, - self.stderr.encoding) -+ self._fileobj2output[key.fileobj].append(data) - +- - return (stdout, stderr) -+ self.wait(timeout=self._remaining_time(endtime)) - -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = b''.join(stdout) -+ if stderr is not None: -+ stderr = b''.join(stderr) +- ++ else: ++ if self._input_offset >= len(self._input): ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ elif key.fileobj in (self.stdout, self.stderr): ++ data = os.read(key.fd, 32768) ++ if not data: ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ self._fileobj2output[key.fileobj].append(data) - def _save_input(self, input): - # This method is called from the _communicate_with_*() methods @@ -11546,15 +11619,22 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py - - - def send_signal(self, sig): -- """Send a signal to the process -- """ -- os.kill(self.pid, sig) -- +- """Send a signal to the process.""" +- # Skip signalling a process that we know has already died. +- if self.returncode is None: +- os.kill(self.pid, sig) ++ self.wait(timeout=self._remaining_time(endtime)) + - def terminate(self): - """Terminate the process with SIGTERM - """ - self.send_signal(signal.SIGTERM) -- ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = b''.join(stdout) ++ if stderr is not None: ++ stderr = b''.join(stderr) + - def kill(self): - """Kill the process with SIGKILL - """ @@ -11584,9 +11664,10 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + + + def send_signal(self, sig): -+ """Send a signal to the process -+ """ -+ os.kill(self.pid, sig) ++ """Send a signal to the process.""" ++ # Skip signalling a process that we know has already died. ++ if self.returncode is None: ++ os.kill(self.pid, sig) + + def terminate(self): + """Terminate the process with SIGTERM @@ -11598,8 +11679,8 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py + """ + self.send_signal(signal.SIGKILL) diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py ---- orig/Lib/sysconfig.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/sysconfig.py 2015-07-04 21:18:58.000000000 +0800 +--- orig/Lib/sysconfig.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/sysconfig.py 2016-02-14 10:29:10.000000000 +0800 @@ -78,6 +78,15 @@ 'scripts': '{userbase}/bin', 'data': '{userbase}', @@ -11616,7 +11697,7 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py } _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', -@@ -181,6 +190,8 @@ +@@ -174,6 +183,8 @@ if os.name == 'posix': # the default scheme for posix is posix_prefix return 'posix_prefix' @@ -11625,7 +11706,7 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py return os.name -@@ -205,6 +216,11 @@ +@@ -198,6 +209,11 @@ else: return joinuser("~", "Library", framework, "%d.%d" % sys.version_info[:2]) @@ -11638,8 +11719,8 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py if env_base: return env_base diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py ---- orig/Lib/test/__main__.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/__main__.py 2015-05-04 07:57:38.000000000 +0800 +--- orig/Lib/test/__main__.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/__main__.py 2016-02-14 10:29:10.000000000 +0800 @@ -1,3 +1,5 @@ +import sys from test import regrtest @@ -11648,9 +11729,9 @@ diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py +result = regrtest.main_in_temp_cwd() +sys.exit(result) diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py ---- orig/Lib/test/regrtest.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/regrtest.py 2015-05-04 07:58:07.000000000 +0800 -@@ -538,7 +538,7 @@ +--- orig/Lib/test/regrtest.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/regrtest.py 2016-02-14 10:29:10.000000000 +0800 +@@ -551,7 +551,7 @@ sys.stdout.flush() print() # Force a newline (just in case) print(json.dumps(result)) @@ -11659,7 +11740,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py good = [] bad = [] -@@ -678,7 +678,7 @@ +@@ -693,7 +693,7 @@ from threading import Thread except ImportError: print("Multiprocess option requires thread support") @@ -11668,7 +11749,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py from queue import Queue debug_output_pat = re.compile(r"\[\d+ refs, \d+ blocks\]$") output = Queue() -@@ -840,7 +840,7 @@ +@@ -863,7 +863,7 @@ if ns.runleaks: os.system("leaks %d" % os.getpid()) @@ -11677,7 +11758,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py # small set of tests to determine if we have a basically functioning interpreter -@@ -1561,7 +1561,9 @@ +@@ -1588,7 +1588,9 @@ # change the CWD, the original CWD will be used. The original CWD is # available from support.SAVEDCWD. with support.temp_cwd(test_cwd, quiet=True): @@ -11688,98 +11769,17 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py if __name__ == '__main__': -@@ -1586,4 +1588,5 @@ +@@ -1613,4 +1615,5 @@ # sanity check assert __file__ == os.path.abspath(sys.argv[0]) - main_in_temp_cwd() + result = main_in_temp_cwd() + sys.exit(retval) -diff -Nru orig/Lib/test/script_helper.py modified/Lib/test/script_helper.py ---- orig/Lib/test/script_helper.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/script_helper.py 2015-05-04 14:42:40.000000000 +0800 -@@ -10,12 +10,15 @@ - import py_compile - import contextlib - import shutil -+import unittest - import zipfile - - from importlib.util import source_from_cache - from test.support import make_legacy_pyc, strip_python_stderr, temp_dir - -+ - # Executing the interpreter in a subprocess -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def _assert_python(expected_success, *args, **env_vars): - if '__isolated' in env_vars: - isolated = env_vars.pop('__isolated') -@@ -55,6 +58,7 @@ - "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore'))) - return rc, out, err - -+ - def assert_python_ok(*args, **env_vars): - """ - Assert that running the interpreter with `args` and optional environment -@@ -68,6 +72,7 @@ - """ - return _assert_python(True, *args, **env_vars) - -+ - def assert_python_failure(*args, **env_vars): - """ - Assert that running the interpreter with `args` and optional environment -@@ -78,6 +83,8 @@ - """ - return _assert_python(False, *args, **env_vars) - -+ -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): - """Run a Python subprocess with the given arguments. - -@@ -98,6 +105,7 @@ - stdout=stdout, stderr=stderr, - **kw) - -+ - def kill_python(p): - """Run the given Popen process until completion and return stdout.""" - p.stdin.close() -@@ -109,6 +117,7 @@ - subprocess._cleanup() - return data - -+ - def make_script(script_dir, script_basename, source, omit_suffix=False): - script_filename = script_basename - if not omit_suffix: -@@ -121,6 +130,7 @@ - importlib.invalidate_caches() - return script_name - -+ - def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None): - zip_filename = zip_basename+os.extsep+'zip' - zip_name = os.path.join(zip_dir, zip_filename) -@@ -142,10 +152,12 @@ - # zip_file.close() - return zip_name, os.path.join(zip_name, name_in_zip) - -+ - def make_pkg(pkg_dir, init_source=''): - os.mkdir(pkg_dir) - make_script(pkg_dir, '__init__', init_source) - -+ - def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, - source, depth=1, compiled=False): - unlink = [] diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.py ---- orig/Lib/test/support/__init__.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/support/__init__.py 2015-05-04 13:16:34.000000000 +0800 -@@ -778,8 +778,8 @@ +--- orig/Lib/test/support/__init__.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/support/__init__.py 2016-02-14 10:29:37.000000000 +0800 +@@ -788,8 +788,8 @@ # TESTFN_UNICODE is a non-ascii filename TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" @@ -11790,7 +11790,7 @@ diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.p # decomposed Unicode, encoded using UTF-8. See QA1173: # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html import unicodedata -@@ -805,8 +805,8 @@ +@@ -815,8 +815,8 @@ 'Unicode filename tests may not be effective' % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) TESTFN_UNENCODABLE = None @@ -11801,38 +11801,68 @@ diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.p try: # ascii and utf-8 cannot encode the byte 0xff b'\xff'.decode(TESTFN_ENCODING) +diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/script_helper.py +--- orig/Lib/test/support/script_helper.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/support/script_helper.py 2016-02-15 18:25:31.000000000 +0800 +@@ -11,6 +11,7 @@ + import py_compile + import contextlib + import shutil ++import unittest + import zipfile + + from importlib.util import source_from_cache +@@ -20,6 +21,8 @@ + # Cached result of the expensive test performed in the function below. + __cached_interp_requires_environment = None + ++ ++@unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") + def interpreter_requires_environment(): + """ + Returns True if our sys.executable interpreter requires environment +@@ -92,6 +95,8 @@ + err = strip_python_stderr(err) + return _PythonRunResult(rc, out, err), cmd_line + ++ ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _assert_python(expected_success, *args, **env_vars): + res, cmd_line = run_python_until_end(*args, **env_vars) + if (res.rc and expected_success) or (not res.rc and not expected_success): +@@ -144,6 +149,8 @@ + """ + return _assert_python(False, *args, **env_vars) + ++ ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): + """Run a Python subprocess with the given arguments. + diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py ---- orig/Lib/test/test_base64.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_base64.py 2015-05-04 14:42:53.000000000 +0800 -@@ -5,7 +5,6 @@ +--- orig/Lib/test/test_base64.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_base64.py 2016-02-15 18:35:22.000000000 +0800 +@@ -3,6 +3,7 @@ + import base64 + import binascii import os - import sys - import subprocess --import struct ++import subprocess from array import array + from test.support import script_helper - -@@ -622,7 +621,7 @@ +@@ -619,7 +620,7 @@ + def test_ErrorHeritage(self): self.assertTrue(issubclass(binascii.Error, ValueError)) - - +@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") class TestMain(unittest.TestCase): def tearDown(self): if os.path.exists(support.TESTFN): -@@ -658,7 +657,6 @@ - self.assertEqual(output.rstrip(), b'a\xffb') - - -- - def test_main(): - support.run_unittest(__name__) - diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py ---- orig/Lib/test/test_capi.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_capi.py 2015-05-04 14:42:39.000000000 +0800 -@@ -44,6 +44,7 @@ +--- orig/Lib/test/test_capi.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_capi.py 2016-02-14 10:29:37.000000000 +0800 +@@ -49,6 +49,7 @@ self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") @unittest.skipUnless(threading, 'Threading required for this test.') @@ -11840,7 +11870,7 @@ diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py def test_no_FatalError_infinite_loop(self): with support.SuppressCrashReport(): p = subprocess.Popen([sys.executable, "-c", -@@ -433,6 +434,7 @@ +@@ -520,6 +521,7 @@ self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, (), {}, b'', [42]) @@ -11849,17 +11879,17 @@ diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py class TestThreadState(unittest.TestCase): diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py ---- orig/Lib/test/test_cmd_line.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_cmd_line.py 2015-05-04 14:43:14.000000000 +0800 -@@ -56,6 +56,7 @@ +--- orig/Lib/test/test_cmd_line.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_cmd_line.py 2016-02-14 10:29:37.000000000 +0800 +@@ -57,6 +57,7 @@ rc, out, err = assert_python_ok('-vv') self.assertNotIn(b'stack overflow', err) + @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_xoptions(self): def get_xoptions(*args): - # use subprocess module directly because test.script_helper adds -@@ -72,6 +73,7 @@ + # use subprocess module directly because test.support.script_helper adds +@@ -73,6 +74,7 @@ opts = get_xoptions('-Xa', '-Xb=c,d=e') self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) @@ -11867,7 +11897,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py def test_showrefcount(self): def run_python(*args): # this is similar to assert_python_ok but doesn't strip -@@ -145,6 +147,7 @@ +@@ -146,6 +148,7 @@ # arguments as unicode (using wmain() instead of main()). @unittest.skipIf(sys.platform == 'win32', 'Windows has a native unicode API') @@ -11875,7 +11905,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py def test_undecodable_code(self): undecodable = b"\xff" env = os.environ.copy() -@@ -209,6 +212,7 @@ +@@ -210,6 +213,7 @@ ) check_output(text) @@ -11883,15 +11913,15 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py def test_unbuffered_output(self): # Test expected operation of the '-u' switch for stream in ('stdout', 'stderr'): -@@ -268,6 +272,7 @@ +@@ -269,6 +273,7 @@ # for empty and unset PYTHONPATH self.assertEqual(out1, out2) + @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_displayhook_unencodable(self): for encoding in ('ascii', 'latin-1', 'utf-8'): - env = os.environ.copy() -@@ -286,6 +291,7 @@ + # We are testing a PYTHON environment variable here, so we can't +@@ -291,6 +296,7 @@ escaped = repr(text).encode(encoding, 'backslashreplace') self.assertIn(escaped, data) @@ -11899,7 +11929,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py def check_input(self, code, expected): with tempfile.NamedTemporaryFile("wb+") as stdin: sep = os.linesep.encode('ASCII') -@@ -357,6 +363,7 @@ +@@ -363,6 +369,7 @@ # Issue #7111: Python should work without standard streams @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") @@ -11907,10 +11937,23 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py def _test_no_stdio(self, streams): code = """if 1: import os, sys +diff -Nru orig/Lib/test/test_compileall.py modified/Lib/test/test_compileall.py +--- orig/Lib/test/test_compileall.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_compileall.py 2016-02-16 11:42:28.000000000 +0800 +@@ -120,7 +120,8 @@ + compileall.compile_dir(self.directory, quiet=True, workers=5) + self.assertTrue(pool_mock.called) + +- def test_compile_workers_non_positive(self): ++ @mock.patch('compileall.ProcessPoolExecutor') ++ def test_compile_workers_non_positive(self, pool_mock): + with self.assertRaisesRegex(ValueError, + "workers must be greater or equal to 0"): + compileall.compile_dir(self.directory, workers=-1) diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py ---- orig/Lib/test/test_doctest.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_doctest.py 2015-04-27 21:32:27.000000000 +0800 -@@ -2657,7 +2657,12 @@ +--- orig/Lib/test/test_doctest.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_doctest.py 2016-02-14 10:29:37.000000000 +0800 +@@ -2707,7 +2707,12 @@ TestResults(failed=1, attempted=1) """ @@ -11924,18 +11967,21 @@ diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py The doctest module can be used to run doctests against an arbitrary file. These tests test this CLI functionality. +diff -Nru orig/Lib/test/test_eintr.py modified/Lib/test/test_eintr.py +--- orig/Lib/test/test_eintr.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_eintr.py 2016-02-15 18:30:29.000000000 +0800 +@@ -9,6 +9,7 @@ + + + @unittest.skipUnless(os.name == "posix", "only supported on Unix") ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + class EINTRTests(unittest.TestCase): + + @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py ---- orig/Lib/test/test_faulthandler.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_faulthandler.py 2015-05-04 14:45:25.000000000 +0800 -@@ -7,7 +7,6 @@ - import subprocess - import sys - from test import support, script_helper --from test.script_helper import assert_python_ok - import tempfile - import unittest - from textwrap import dedent -@@ -20,6 +19,7 @@ +--- orig/Lib/test/test_faulthandler.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_faulthandler.py 2016-02-14 10:29:37.000000000 +0800 +@@ -24,6 +24,7 @@ TIMEOUT = 0.5 @@ -11943,7 +11989,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler def expected_traceback(lineno1, lineno2, header, min_count=1): regex = header regex += ' File "", line %s in func\n' % lineno1 -@@ -29,6 +29,7 @@ +@@ -33,6 +34,7 @@ else: return '^' + regex + '$' @@ -11951,15 +11997,15 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler @contextmanager def temporary_filename(): filename = tempfile.mktemp() -@@ -37,6 +38,7 @@ +@@ -41,6 +43,7 @@ finally: support.unlink(filename) + class FaultHandlerTests(unittest.TestCase): - def get_output(self, code, filename=None): + def get_output(self, code, filename=None, fd=None): """ -@@ -247,6 +249,7 @@ +@@ -282,6 +285,7 @@ finally: sys.stderr = orig_stderr @@ -11967,16 +12013,16 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler def test_disabled_by_default(self): # By default, the module should be disabled code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -255,6 +258,7 @@ - output = subprocess.check_output(args) +@@ -294,6 +298,7 @@ + output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"False") + @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_sys_xoptions(self): # Test python -X faulthandler code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -263,6 +267,7 @@ - output = subprocess.check_output(args) +@@ -306,6 +311,7 @@ + output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"True") + @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") @@ -11984,8 +12030,8 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler # empty env var code = "import faulthandler; print(faulthandler.is_enabled())" diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py ---- orig/Lib/test/test_fcntl.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_fcntl.py 2015-04-27 21:44:57.000000000 +0800 +--- orig/Lib/test/test_fcntl.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_fcntl.py 2016-02-14 10:29:37.000000000 +0800 @@ -23,7 +23,7 @@ start_len = "qq" @@ -12012,9 +12058,9 @@ diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py def setUp(self): diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py ---- orig/Lib/test/test_file_eintr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_file_eintr.py 2015-05-04 14:42:38.000000000 +0800 -@@ -68,6 +68,7 @@ +--- orig/Lib/test/test_file_eintr.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_file_eintr.py 2016-02-14 10:29:37.000000000 +0800 +@@ -69,6 +69,7 @@ self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % (why, stdout.decode(), stderr.decode())) @@ -12023,9 +12069,9 @@ diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py """Generic buffered read method test harness to validate EINTR behavior. diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py ---- orig/Lib/test/test_gc.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_gc.py 2015-05-04 14:42:37.000000000 +0800 -@@ -633,6 +633,8 @@ +--- orig/Lib/test/test_gc.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_gc.py 2016-02-14 10:29:37.000000000 +0800 +@@ -650,6 +650,8 @@ del x gc.set_debug(%s) """ @@ -12035,21 +12081,36 @@ diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py p = subprocess.Popen([sys.executable, "-Wd", "-c", code], stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py ---- orig/Lib/test/test_gdb.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_gdb.py 2015-05-03 00:05:45.000000000 +0800 -@@ -28,6 +28,9 @@ - # This is what "no gdb" looks like. There may, however, be other - # errors that manifest this way too. - raise unittest.SkipTest("Couldn't find gdb on the path") -+except AttributeError: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") +--- orig/Lib/test/test_gdb.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_gdb.py 2016-02-14 11:22:03.000000000 +0800 +@@ -5,7 +5,6 @@ + + import os + import re +-import pprint + import subprocess + import sys + import sysconfig +@@ -21,6 +20,7 @@ + from test import support + from test.support import run_unittest, findfile, python_is_optimized + + - gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version) - gdb_major_version = int(gdb_version_number.group(1)) - gdb_minor_version = int(gdb_version_number.group(2)) + def get_gdb_version(): + try: + proc = subprocess.Popen(["gdb", "-nx", "--version"], +@@ -32,6 +32,8 @@ + # This is what "no gdb" looks like. There may, however, be other + # errors that manifest this way too. + raise unittest.SkipTest("Couldn't find gdb on the path") ++ except AttributeError: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") + + # Regex to parse: + # 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7 diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py ---- orig/Lib/test/test_getpass.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_getpass.py 2015-05-02 22:48:44.000000000 +0800 +--- orig/Lib/test/test_getpass.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_getpass.py 2016-02-14 10:29:37.000000000 +0800 @@ -1,5 +1,6 @@ import getpass import os @@ -12066,8 +12127,8 @@ diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py class GetpassGetuserTest(unittest.TestCase): diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py ---- orig/Lib/test/test_httpservers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2015-06-28 20:16:12.000000000 +0800 +--- orig/Lib/test/test_httpservers.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_httpservers.py 2016-02-14 10:29:37.000000000 +0800 @@ -16,6 +16,7 @@ import urllib.parse import html @@ -12076,7 +12137,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p import tempfile from io import BytesIO -@@ -277,11 +278,11 @@ +@@ -331,11 +332,11 @@ with open(os.path.join(self.tempdir, filename), 'wb') as f: f.write(support.TESTFN_UNDECODABLE) response = self.request(self.tempdir_name + '/') @@ -12089,8 +12150,8 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p + if name != 'test': # Ignore a filename created in setUp(). filename = name break - body = self.check_status_and_reason(response, 200) -@@ -362,6 +363,7 @@ + body = self.check_status_and_reason(response, HTTPStatus.OK) +@@ -438,6 +439,7 @@ @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, "This test can't be run reliably as root (issue #13308).") @@ -12098,15 +12159,15 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p class CGIHTTPServerTestCase(BaseTestCase): class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): pass -@@ -550,6 +552,7 @@ +@@ -653,6 +655,7 @@ def log_message(self, format, *args): pass + class RejectingSocketlessRequestHandler(SocketlessRequestHandler): def handle_expect_100(self): - self.send_error(417) -@@ -580,7 +583,7 @@ + self.send_error(HTTPStatus.EXPECTATION_FAILED) +@@ -683,7 +686,7 @@ HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK') @@ -12115,18 +12176,18 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p self.handler = SocketlessRequestHandler() def send_typical_request(self, message): -@@ -731,6 +734,7 @@ - self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n') - self.assertFalse(self.handler.get_called) +@@ -873,6 +876,7 @@ + self.handler.handle() + self.assertRaises(StopIteration, next, close_values) + class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): """ Test url parsing """ def setUp(self): diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py ---- orig/Lib/test/test_imp.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_imp.py 2015-04-30 10:07:30.000000000 +0800 -@@ -19,7 +19,7 @@ +--- orig/Lib/test/test_imp.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_imp.py 2016-02-14 10:29:37.000000000 +0800 +@@ -20,7 +20,7 @@ """Decorator to skip a test if not running under CPython or lacking imp.load_dynamic().""" meth = support.cpython_only(meth) @@ -12135,10 +12196,10 @@ diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py 'imp.load_dynamic() required')(meth) -diff -Nru orig/Lib/test/test_import.py modified/Lib/test/test_import.py ---- orig/Lib/test/test_import.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_import.py 2015-07-04 22:52:30.000000000 +0800 -@@ -280,6 +280,7 @@ +diff -Nru orig/Lib/test/test_import/__init__.py modified/Lib/test/test_import/__init__.py +--- orig/Lib/test/test_import/__init__.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_import/__init__.py 2016-02-15 19:36:49.000000000 +0800 +@@ -278,6 +278,7 @@ """)) script_helper.assert_python_ok(testfn) @@ -12147,11 +12208,11 @@ diff -Nru orig/Lib/test/test_import.py modified/Lib/test/test_import.py # A modification timestamp larger than 2**32 should not be a problem # when importing a module (issue #11235). diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/test/test_importlib/extension/test_finder.py ---- orig/Lib/test/test_importlib/extension/test_finder.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_finder.py 2015-04-30 22:06:18.000000000 +0800 -@@ -4,11 +4,13 @@ +--- orig/Lib/test/test_importlib/extension/test_finder.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_finder.py 2016-02-14 10:29:41.000000000 +0800 +@@ -3,11 +3,13 @@ - machinery = test_util.import_importlib('importlib.machinery') + machinery = util.import_importlib('importlib.machinery') +import sys import unittest @@ -12164,46 +12225,29 @@ diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/tes """Test the finder for extension modules.""" diff -Nru orig/Lib/test/test_importlib/extension/test_loader.py modified/Lib/test/test_importlib/extension/test_loader.py ---- orig/Lib/test/test_importlib/extension/test_loader.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_loader.py 2015-04-30 21:52:11.000000000 +0800 -@@ -10,6 +10,7 @@ - import unittest +--- orig/Lib/test/test_importlib/extension/test_loader.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_loader.py 2016-02-15 20:18:13.000000000 +0800 +@@ -11,6 +11,7 @@ + import importlib +@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') class LoaderTests(abc.LoaderTests): """Test load_module() for extension modules.""" -diff -Nru orig/Lib/test/test_importlib/source/test_case_sensitivity.py modified/Lib/test/test_importlib/source/test_case_sensitivity.py ---- orig/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-05-02 19:23:40.000000000 +0800 -@@ -63,18 +63,22 @@ - self.assertIsNotNone(insensitive) - self.assertIn(self.name, insensitive.get_filename(self.name)) - -+ - class CaseSensitivityTestPEP302(CaseSensitivityTest): - def find(self, finder): - return finder.find_module(self.name) - -+ - Frozen_CaseSensitivityTestPEP302, Source_CaseSensitivityTestPEP302 = util.test_both( - CaseSensitivityTestPEP302, importlib=importlib, machinery=machinery) - -+ - class CaseSensitivityTestPEP451(CaseSensitivityTest): - def find(self, finder): - found = finder.find_spec(self.name) - return found.loader if found is not None else found +@@ -82,6 +83,8 @@ + Source_LoaderTests + ) = util.test_both(LoaderTests, machinery=machinery) + - Frozen_CaseSensitivityTestPEP451, Source_CaseSensitivityTestPEP451 = util.test_both( - CaseSensitivityTestPEP451, importlib=importlib, machinery=machinery) - ++@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') + class MultiPhaseExtensionModuleTests(abc.LoaderTests): + """Test loading extension modules with multi-phase initialization (PEP 489) + """ diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py ---- orig/Lib/test/test_io.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_io.py 2015-05-04 10:09:23.000000000 +0800 -@@ -420,7 +420,7 @@ +--- orig/Lib/test/test_io.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_io.py 2016-02-14 10:29:41.000000000 +0800 +@@ -416,7 +416,7 @@ # On Windows and Mac OSX this test comsumes large resources; It takes # a long time to build the >2GB file and takes >2GB of disk space # therefore the resource must be enabled to run this test. @@ -12212,26 +12256,26 @@ diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py support.requires( 'largefile', 'test requires %s bytes and a long time to run' % self.LARGE) -@@ -688,6 +688,7 @@ +@@ -715,6 +715,7 @@ support.gc_collect() - self.assertTrue(wr() is None, wr) + self.assertIsNone(wr(), wr) + class PyIOTest(IOTest): pass diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py ---- orig/Lib/test/test_json/test_tool.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_json/test_tool.py 2015-05-04 14:42:37.000000000 +0800 -@@ -6,6 +6,7 @@ - from test import support - from test.script_helper import assert_python_ok +--- orig/Lib/test/test_json/test_tool.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_json/test_tool.py 2016-02-14 10:29:41.000000000 +0800 +@@ -7,6 +7,7 @@ + from test.support.script_helper import assert_python_ok + + class TestTool(unittest.TestCase): data = """ -@@ -37,6 +38,7 @@ +@@ -60,6 +61,7 @@ ] """) @@ -12240,8 +12284,8 @@ diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_ with subprocess.Popen( (sys.executable, '-m', 'json.tool'), diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py ---- orig/Lib/test/test_keyword.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_keyword.py 2015-05-04 14:42:36.000000000 +0800 +--- orig/Lib/test/test_keyword.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_keyword.py 2016-02-14 10:29:41.000000000 +0800 @@ -46,6 +46,7 @@ fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) @@ -12251,9 +12295,9 @@ diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py proc = subprocess.Popen([sys.executable, KEYWORD_FILE, diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py ---- orig/Lib/test/test_logging.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_logging.py 2015-07-04 22:52:40.000000000 +0800 -@@ -1460,9 +1460,20 @@ +--- orig/Lib/test/test_logging.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_logging.py 2016-02-14 10:29:41.000000000 +0800 +@@ -1452,9 +1452,20 @@ # just need a name - file can't be present, or we'll get an # 'address already in use' error. os.remove(fn) @@ -12274,7 +12318,7 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py @unittest.skipUnless(threading, 'Threading required for this test.') class UnixSocketHandlerTest(SocketHandlerTest): -@@ -1535,6 +1546,7 @@ +@@ -1527,6 +1538,7 @@ self.assertEqual(self.log_output, "spam\neggs\n") @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") @@ -12282,7 +12326,7 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py @unittest.skipUnless(threading, 'Threading required for this test.') class UnixDatagramHandlerTest(DatagramHandlerTest): -@@ -1610,6 +1622,7 @@ +@@ -1602,6 +1614,7 @@ self.assertEqual(self.log_output, b'<11>h\xc3\xa4m-sp\xc3\xa4m') @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") @@ -12291,8 +12335,8 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py class UnixSysLogHandlerTest(SysLogHandlerTest): diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py ---- orig/Lib/test/test_mailcap.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_mailcap.py 2015-05-04 14:35:55.000000000 +0800 +--- orig/Lib/test/test_mailcap.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_mailcap.py 2016-02-14 10:29:41.000000000 +0800 @@ -1,6 +1,7 @@ import mailcap import os @@ -12311,11 +12355,11 @@ diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py # findmatch() will automatically check any "test" conditions and skip # the entry if the check fails. diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py ---- orig/Lib/test/test_marshal.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_marshal.py 2015-05-04 10:29:33.000000000 +0800 -@@ -190,7 +190,10 @@ +--- orig/Lib/test/test_marshal.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_marshal.py 2016-02-14 10:29:41.000000000 +0800 +@@ -195,7 +195,10 @@ if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'): - MAX_MARSHAL_STACK_DEPTH = 1500 + MAX_MARSHAL_STACK_DEPTH = 1000 else: - MAX_MARSHAL_STACK_DEPTH = 2000 + if sys.platform == 'ios': @@ -12326,8 +12370,8 @@ diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py last.append([0]) last = last[-1] diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py ---- orig/Lib/test/test_mmap.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_mmap.py 2015-05-04 13:15:53.000000000 +0800 +--- orig/Lib/test/test_mmap.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_mmap.py 2016-02-14 10:29:41.000000000 +0800 @@ -229,7 +229,7 @@ with open(TESTFN, "r+b") as f: self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4) @@ -12337,7 +12381,7 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py # Try incompatible flags, prot and access parameters. with open(TESTFN, "r+b") as f: self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, -@@ -718,7 +718,7 @@ +@@ -722,7 +722,7 @@ unlink(TESTFN) def _make_test_file(self, num_zeroes, tail): @@ -12347,9 +12391,9 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py 'test requires %s bytes and a long time to run' % str(0x180000000)) f = open(TESTFN, 'w+b') diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py ---- orig/Lib/test/test_os.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_os.py 2015-05-04 14:42:36.000000000 +0800 -@@ -555,6 +555,7 @@ +--- orig/Lib/test/test_os.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_os.py 2016-02-15 18:29:10.000000000 +0800 +@@ -657,6 +657,7 @@ # Bug 1110478 @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') @@ -12357,7 +12401,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_update2(self): os.environ.clear() os.environ.update(HELLO="World") -@@ -563,6 +564,7 @@ +@@ -665,6 +666,7 @@ self.assertEqual(value, "World") @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') @@ -12365,7 +12409,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_os_popen_iter(self): with os.popen( "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: -@@ -1147,6 +1149,7 @@ +@@ -1343,6 +1345,7 @@ os.execve = orig_execve os.defpath = orig_defpath @@ -12373,7 +12417,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py class ExecTests(unittest.TestCase): @unittest.skipIf(USING_LINUXTHREADS, "avoid triggering a linuxthreads bug: see issue #4970") -@@ -1398,6 +1401,7 @@ +@@ -1604,6 +1607,7 @@ self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') @@ -12381,7 +12425,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_setreuid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -1406,6 +1410,7 @@ +@@ -1612,6 +1616,7 @@ 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') @@ -12389,7 +12433,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_setregid(self): if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(OSError, os.setregid, 0, 0) -@@ -1413,6 +1418,7 @@ +@@ -1619,6 +1624,7 @@ self.assertRaises(OverflowError, os.setregid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') @@ -12397,7 +12441,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_setregid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -1838,6 +1844,7 @@ +@@ -2075,6 +2081,7 @@ class PidTests(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") @@ -12405,7 +12449,16 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py def test_getppid(self): p = subprocess.Popen([sys.executable, '-c', 'import os; print(os.getppid())'], -@@ -2295,6 +2302,7 @@ +@@ -2083,6 +2090,8 @@ + # We are the parent of our subprocess + self.assertEqual(int(stdout), os.getpid()) + ++ @unittest.skipUnless(hasattr(os, 'spawnv'), "test needs os.spawnv") ++ @unittest.skipUnless(hasattr(os, 'waitpid'), "test needs os.waitpid") + def test_waitpid(self): + args = [sys.executable, '-c', 'pass'] + pid = os.spawnv(os.P_NOWAIT, args[0], args) +@@ -2548,6 +2557,7 @@ self.assertGreaterEqual(size.columns, 0) self.assertGreaterEqual(size.lines, 0) @@ -12414,9 +12467,9 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py """Check if stty returns the same results diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py ---- orig/Lib/test/test_pdb.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pdb.py 2015-05-04 14:42:35.000000000 +0800 -@@ -910,6 +910,7 @@ +--- orig/Lib/test/test_pdb.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_pdb.py 2016-02-14 10:29:41.000000000 +0800 +@@ -914,6 +914,7 @@ class PdbTestCase(unittest.TestCase): @@ -12424,7 +12477,7 @@ diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py def run_pdb(self, script, commands): """Run 'script' lines with pdb and the pdb 'commands'.""" filename = 'main.py' -@@ -957,6 +958,7 @@ +@@ -962,6 +963,7 @@ ('bar', 4), ) @@ -12432,7 +12485,7 @@ diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py def test_issue7964(self): # open the file as binary so we can force \r\n newline with open(support.TESTFN, 'wb') as f: -@@ -1008,6 +1010,7 @@ +@@ -1013,6 +1015,7 @@ any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 'Fail to step into the caller after a return') @@ -12441,8 +12494,8 @@ diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py # invoking "continue" on a non-main thread triggered an exception # inside signal.signal diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py ---- orig/Lib/test/test_pep277.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pep277.py 2015-05-04 13:16:06.000000000 +0800 +--- orig/Lib/test/test_pep277.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_pep277.py 2016-02-14 10:29:41.000000000 +0800 @@ -27,7 +27,7 @@ # these normal forms. For example, HFS Plus uses a variant of Normal Form D # in which U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through @@ -12480,8 +12533,8 @@ diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py sf0 = set(self.files) with warnings.catch_warnings(): diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py ---- orig/Lib/test/test_pipes.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pipes.py 2015-05-02 21:03:07.000000000 +0800 +--- orig/Lib/test/test_pipes.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_pipes.py 2016-02-14 10:29:41.000000000 +0800 @@ -1,17 +1,21 @@ import pipes import os @@ -12505,8 +12558,8 @@ diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py def tearDown(self): for f in (TESTFN, TESTFN2): diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py ---- orig/Lib/test/test_platform.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_platform.py 2015-05-04 14:43:41.000000000 +0800 +--- orig/Lib/test/test_platform.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_platform.py 2016-02-14 10:29:41.000000000 +0800 @@ -9,11 +9,13 @@ from test import support @@ -12538,7 +12591,7 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") def test_mac_ver_with_fork(self): # Issue7895: platform.mac_ver() crashes when using fork without exec -@@ -265,6 +266,7 @@ +@@ -272,6 +273,7 @@ ): self.assertEqual(platform._parse_release_file(input), output) @@ -12547,8 +12600,8 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py mswindows = (sys.platform == "win32") diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py ---- orig/Lib/test/test_poll.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_poll.py 2015-05-04 14:43:49.000000000 +0800 +--- orig/Lib/test/test_poll.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_poll.py 2016-02-14 10:29:41.000000000 +0800 @@ -25,6 +25,7 @@ match.append(fd) return match @@ -12566,8 +12619,8 @@ diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py ---- orig/Lib/test/test_popen.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_popen.py 2015-05-04 14:42:34.000000000 +0800 +--- orig/Lib/test/test_popen.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_popen.py 2016-02-14 10:29:41.000000000 +0800 @@ -5,7 +5,9 @@ import unittest @@ -12597,19 +12650,11 @@ diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py self.assertEqual(got, expected) def test_popen(self): -@@ -57,6 +61,7 @@ - with os.popen("echo hello") as f: - self.assertEqual(list(f), ["hello\n"]) - -+ - def test_main(): - support.run_unittest(PopenTest) - diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py ---- orig/Lib/test/test_posix.py 2015-05-02 23:43:12.000000000 +0800 -+++ modified/Lib/test/test_posix.py 2015-05-04 14:42:33.000000000 +0800 -@@ -12,8 +12,8 @@ - import fcntl +--- orig/Lib/test/test_posix.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_posix.py 2016-02-14 10:29:41.000000000 +0800 +@@ -11,8 +11,8 @@ + import os import platform import pwd -import shutil @@ -12618,7 +12663,7 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py import tempfile import unittest import warnings -@@ -21,6 +21,7 @@ +@@ -20,6 +20,7 @@ _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(), support.TESTFN + '-dummy-symlink') @@ -12626,7 +12671,7 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py class PosixTester(unittest.TestCase): def setUp(self): -@@ -492,9 +493,10 @@ +@@ -529,9 +530,10 @@ check_stat(uid, gid) self.assertRaises(OSError, chown_func, first_param, 0, -1) check_stat(uid, gid) @@ -12640,7 +12685,7 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py # test illegal types for t in str, float: self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) -@@ -754,8 +756,8 @@ +@@ -791,8 +793,8 @@ group = pwd.getpwuid(os.getuid())[3] self.assertIn(group, posix.getgrouplist(user, group)) @@ -12651,9 +12696,9 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py with os.popen('id -G 2>/dev/null') as idg: groups = idg.read().strip() diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py ---- orig/Lib/test/test_pty.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pty.py 2015-05-04 14:42:26.000000000 +0800 -@@ -110,7 +110,7 @@ +--- orig/Lib/test/test_pty.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_pty.py 2016-02-14 10:29:41.000000000 +0800 +@@ -111,7 +111,7 @@ os.close(slave_fd) os.close(master_fd) @@ -12663,9 +12708,9 @@ diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py debug("calling pty.fork()") pid, master_fd = pty.fork() diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py ---- orig/Lib/test/test_quopri.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_quopri.py 2015-05-04 14:42:33.000000000 +0800 -@@ -174,6 +174,7 @@ +--- orig/Lib/test/test_quopri.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_quopri.py 2016-02-14 10:29:41.000000000 +0800 +@@ -180,6 +180,7 @@ for p, e in self.HSTRINGS: self.assertEqual(quopri.decodestring(e, header=True), p) @@ -12673,7 +12718,7 @@ diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py def test_scriptencode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri"], -@@ -190,6 +191,7 @@ +@@ -196,6 +197,7 @@ self.assertEqual(cout[i], e[i]) self.assertEqual(cout, e) @@ -12681,9 +12726,52 @@ diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py def test_scriptdecode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri", "-d"], +diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_helper.py +--- orig/Lib/test/test_script_helper.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_script_helper.py 2016-02-15 19:02:46.000000000 +0800 +@@ -34,6 +34,7 @@ + self.assertIn('import sys; sys.exit(0)', error_msg, + msg='unexpected command line.') + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + @mock.patch('subprocess.Popen') + def test_assert_python_isolated_when_env_not_required(self, mock_popen): + with mock.patch.object(script_helper, +@@ -52,6 +53,7 @@ + self.assertIn('-I', popen_command) + self.assertNotIn('-E', popen_command) # -I overrides this + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + @mock.patch('subprocess.Popen') + def test_assert_python_not_isolated_when_env_is_required(self, mock_popen): + """Ensure that -I is not passed when the environment is required.""" +@@ -81,6 +83,7 @@ + # Reset the private cached state. + script_helper.__dict__['__cached_interp_requires_environment'] = None + ++ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") + @mock.patch('subprocess.check_call') + def test_interpreter_requires_environment_true(self, mock_check_call): + mock_check_call.side_effect = subprocess.CalledProcessError('', '') +@@ -88,6 +91,7 @@ + self.assertTrue(script_helper.interpreter_requires_environment()) + self.assertEqual(1, mock_check_call.call_count) + ++ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") + @mock.patch('subprocess.check_call') + def test_interpreter_requires_environment_false(self, mock_check_call): + # The mocked subprocess.check_call fakes a no-error process. +@@ -95,6 +99,7 @@ + self.assertFalse(script_helper.interpreter_requires_environment()) + self.assertEqual(1, mock_check_call.call_count) + ++ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") + @mock.patch('subprocess.check_call') + def test_interpreter_requires_environment_details(self, mock_check_call): + script_helper.interpreter_requires_environment() diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py ---- orig/Lib/test/test_select.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_select.py 2015-05-04 14:42:32.000000000 +0800 +--- orig/Lib/test/test_select.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_select.py 2016-02-14 10:29:41.000000000 +0800 @@ -1,11 +1,13 @@ import errno import os @@ -12708,17 +12796,17 @@ diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py ---- orig/Lib/test/test_shutil.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2015-07-04 22:52:47.000000000 +0800 -@@ -48,6 +48,7 @@ +--- orig/Lib/test/test_shutil.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2016-02-14 10:29:41.000000000 +0800 +@@ -51,6 +51,7 @@ except ImportError: - ZIP_SUPPORT = find_executable('zip') + ZIP_SUPPORT = shutil.which('zip') + def _fake_rename(*args, **kwargs): # Pretend the destination path is on a different filesystem. raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") -@@ -1318,6 +1319,7 @@ +@@ -1373,6 +1374,7 @@ self.assertEqual(['foo'], os.listdir(rv)) @@ -12726,7 +12814,7 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py class TestWhich(unittest.TestCase): def setUp(self): -@@ -1741,6 +1743,7 @@ +@@ -1814,6 +1816,7 @@ self.assertEqual(size.lines, 888) @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") @@ -12735,9 +12823,9 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py """Check if stty returns the same results ignoring env diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py ---- orig/Lib/test/test_signal.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_signal.py 2015-05-04 14:42:31.000000000 +0800 -@@ -135,6 +135,7 @@ +--- orig/Lib/test/test_signal.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_signal.py 2016-02-14 10:29:41.000000000 +0800 +@@ -158,6 +158,7 @@ @unittest.skipIf(sys.platform=='freebsd6', 'inter process signals not reliable (do not mix well with threading) ' 'on freebsd6') @@ -12746,8 +12834,8 @@ diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py # This function spawns a child process to insulate the main # test-running process from all the signals. It then diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py ---- orig/Lib/test/test_site.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_site.py 2015-07-04 21:21:33.000000000 +0800 +--- orig/Lib/test/test_site.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_site.py 2016-02-14 10:29:41.000000000 +0800 @@ -31,6 +31,7 @@ os.makedirs(site.USER_SITE) site.addsitedir(site.USER_SITE) @@ -12773,7 +12861,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py # OS X framework builds site.PREFIXES = ['Python.framework'] dirs = site.getsitepackages() -@@ -322,6 +324,7 @@ +@@ -320,6 +322,7 @@ """Restore sys.path""" sys.path[:] = self.sys_path @@ -12781,7 +12869,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py def test_abs_paths(self): # Make sure all imported modules have their __file__ and __cached__ # attributes as absolute paths. Arranging to put the Lib directory on -@@ -432,6 +435,7 @@ +@@ -435,6 +438,7 @@ class StartupImportTests(unittest.TestCase): @@ -12790,9 +12878,9 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py # This tests checks which modules are loaded by Python when it # initially starts upon startup. diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py ---- orig/Lib/test/test_socket.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_socket.py 2015-07-04 22:53:12.000000000 +0800 -@@ -530,6 +530,7 @@ +--- orig/Lib/test/test_socket.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_socket.py 2016-02-15 19:36:34.000000000 +0800 +@@ -532,6 +532,7 @@ sock.bind(path) self.addCleanup(support.unlink, path) @@ -12800,7 +12888,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py class UnixStreamBase(UnixSocketTestBase): """Base class for Unix-domain SOCK_STREAM tests.""" -@@ -774,8 +775,7 @@ +@@ -783,8 +784,7 @@ self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names))) def test_host_resolution(self): @@ -12810,7 +12898,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py self.assertRaises(OSError, socket.gethostbyname, addr) self.assertRaises(OSError, socket.gethostbyaddr, addr) -@@ -787,6 +787,12 @@ +@@ -796,6 +796,12 @@ for host in [support.HOST]: self.assertIn(host, socket.gethostbyaddr(host)[2]) @@ -12823,52 +12911,52 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()") @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()") def test_sethostname(self): -@@ -1286,7 +1292,7 @@ - # these should all be successful - socket.gethostbyname('испытание.python.org') - socket.gethostbyname_ex('испытание.python.org') -- socket.getaddrinfo('испытание.python.org',0,socket.AF_UNSPEC,socket.SOCK_STREAM) -+ socket.getaddrinfo('испытание.python.org', 0, socket.AF_UNSPEC, socket.SOCK_STREAM) - # this may not work if the forward lookup choses the IPv6 address, as that doesn't - # have a reverse entry yet - # socket.gethostbyaddr('испытание.python.org') -@@ -2727,7 +2733,7 @@ +@@ -896,7 +902,7 @@ + # I've ordered this by protocols that have both a tcp and udp + # protocol, at least for modern Linuxes. + if (sys.platform.startswith(('freebsd', 'netbsd', 'gnukfreebsd')) +- or sys.platform in ('linux', 'darwin')): ++ or sys.platform in ('linux', 'darwin', 'ios')): + # avoid the 'echo' service on this platform, as there is an + # assumption breaking non-standard port/protocol entry + services = ('daytime', 'qotd', 'domain') +@@ -2748,7 +2754,7 @@ def _testFDPassCMSG_LEN(self): self.createAndSendFDs(1) - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") @requireAttrs(socket, "CMSG_SPACE") def testFDPassSeparate(self): - # Pass two FDs in two separate arrays. Arrays may be combined -@@ -2737,7 +2743,7 @@ +@@ -2759,7 +2765,7 @@ maxcmsgs=2) @testFDPassSeparate.client_skip - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") def _testFDPassSeparate(self): fd0, fd1 = self.newFDs(2) - self.assertEqual( -@@ -2749,7 +2755,7 @@ +@@ -2772,7 +2778,7 @@ array.array("i", [fd1]))]), len(MSG)) - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") @requireAttrs(socket, "CMSG_SPACE") def testFDPassSeparateMinSpace(self): - # Pass two FDs in two separate arrays, receiving them into the -@@ -2761,7 +2767,7 @@ +@@ -2785,7 +2791,7 @@ maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC) @testFDPassSeparateMinSpace.client_skip - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") + @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") def _testFDPassSeparateMinSpace(self): fd0, fd1 = self.newFDs(2) - self.assertEqual( -@@ -3532,12 +3538,14 @@ +@@ -3557,12 +3563,14 @@ @requireAttrs(socket.socket, "sendmsg") @requireAttrs(socket, "AF_UNIX") @@ -12883,7 +12971,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(thread, 'Threading required for this test.') class RecvmsgUnixStreamTest(RecvmsgTests, RecvmsgGenericStreamTests, SendrecvmsgUnixStreamTestBase): -@@ -3545,6 +3553,7 @@ +@@ -3570,6 +3578,7 @@ @requireAttrs(socket.socket, "recvmsg_into") @requireAttrs(socket, "AF_UNIX") @@ -12891,7 +12979,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(thread, 'Threading required for this test.') class RecvmsgIntoUnixStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests, SendrecvmsgUnixStreamTestBase): -@@ -3552,12 +3561,14 @@ +@@ -3577,12 +3586,14 @@ @requireAttrs(socket.socket, "sendmsg", "recvmsg") @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") @@ -12907,9 +12995,9 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py class RecvmsgIntoSCMRightsStreamTest(RecvmsgIntoMixin, SCMRightsTest, SendrecvmsgUnixStreamTestBase): diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver.py ---- orig/Lib/test/test_socketserver.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_socketserver.py 2015-07-04 22:53:26.000000000 +0800 -@@ -8,7 +8,7 @@ +--- orig/Lib/test/test_socketserver.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_socketserver.py 2016-02-14 10:29:41.000000000 +0800 +@@ -7,7 +7,7 @@ import select import signal import socket @@ -12918,7 +13006,7 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver import errno import tempfile import unittest -@@ -32,6 +32,7 @@ +@@ -31,6 +31,7 @@ HAVE_FORKING = hasattr(os, "fork") requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking') @@ -12942,8 +13030,8 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver self.run_server(socketserver.ThreadingUnixStreamServer, socketserver.StreamRequestHandler, diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py ---- orig/Lib/test/test_source_encoding.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_source_encoding.py 2015-05-04 14:44:09.000000000 +0800 +--- orig/Lib/test/test_source_encoding.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_source_encoding.py 2016-02-14 10:29:41.000000000 +0800 @@ -7,6 +7,7 @@ import sys import subprocess @@ -12961,8 +13049,8 @@ diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_en sub = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py ---- orig/Lib/test/test_subprocess.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_subprocess.py 2015-05-02 21:04:07.000000000 +0800 +--- orig/Lib/test/test_subprocess.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_subprocess.py 2016-02-14 10:58:22.000000000 +0800 @@ -26,6 +26,9 @@ mswindows = (sys.platform == "win32") @@ -12974,8 +13062,8 @@ diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py # Depends on the following external programs: Python # diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py ---- orig/Lib/test/test_sundry.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sundry.py 2015-04-30 10:12:55.000000000 +0800 +--- orig/Lib/test/test_sundry.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_sundry.py 2016-02-14 10:29:41.000000000 +0800 @@ -20,7 +20,8 @@ import distutils.bcppcompiler @@ -12984,11 +13072,11 @@ diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py + if sys.platform.startswith('win'): + import distutils.cygwinccompiler import distutils.filelist - if sys.platform.startswith('win'): - import distutils.msvccompiler + import distutils.text_file + import distutils.unixccompiler diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py ---- orig/Lib/test/test_sys.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sys.py 2015-05-04 14:44:19.000000000 +0800 +--- orig/Lib/test/test_sys.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_sys.py 2016-02-15 18:27:32.000000000 +0800 @@ -20,6 +20,7 @@ except ImportError: threading = None @@ -12997,7 +13085,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py class SysModuleTest(unittest.TestCase): def setUp(self): -@@ -216,6 +217,7 @@ +@@ -255,6 +256,7 @@ finally: sys.setrecursionlimit(oldlimit) @@ -13005,7 +13093,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_recursionlimit_fatalerror(self): # A fatal error occurs if a second recursion limit is hit when recovering # from a first one. -@@ -542,6 +544,7 @@ +@@ -582,6 +584,7 @@ def test_clear_type_cache(self): sys._clear_type_cache() @@ -13013,7 +13101,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_ioencoding(self): env = dict(os.environ) -@@ -587,6 +590,7 @@ +@@ -627,6 +630,7 @@ @unittest.skipUnless(test.support.FS_NONASCII, 'requires OS support of non-ASCII encodings') @@ -13021,7 +13109,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_ioencoding_nonascii(self): env = dict(os.environ) -@@ -599,6 +603,7 @@ +@@ -639,6 +643,7 @@ @unittest.skipIf(sys.base_prefix != sys.prefix, 'Test is not venv-compatible') @@ -13029,9 +13117,17 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_executable(self): # sys.executable should be absolute self.assertEqual(os.path.abspath(sys.executable), sys.executable) +@@ -675,6 +680,7 @@ + expected = None + self.check_fsencoding(fs_encoding, expected) + ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def c_locale_get_error_handler(self, isolated=False, encoding=None): + # Force the POSIX locale + env = os.environ.copy() diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py ---- orig/Lib/test/test_sysconfig.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2015-07-04 22:53:33.000000000 +0800 +--- orig/Lib/test/test_sysconfig.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2016-02-14 10:29:41.000000000 +0800 @@ -15,6 +15,7 @@ get_scheme_names, get_config_var, _main) import _osx_support @@ -13055,8 +13151,8 @@ diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py ---- orig/Lib/test/test_thread.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_thread.py 2015-05-04 14:44:49.000000000 +0800 +--- orig/Lib/test/test_thread.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_thread.py 2016-02-14 10:29:41.000000000 +0800 @@ -14,12 +14,14 @@ _print_mutex = thread.allocate_lock() @@ -13081,9 +13177,9 @@ diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py def test_forkinthread(self): def thread1(): diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py ---- orig/Lib/test/test_threading.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_threading.py 2015-05-02 16:19:47.000000000 +0800 -@@ -825,6 +825,7 @@ +--- orig/Lib/test/test_threading.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_threading.py 2016-02-14 10:29:41.000000000 +0800 +@@ -824,6 +824,7 @@ class SubinterpThreadingTests(BaseTestCase): @@ -13091,7 +13187,7 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py def test_threads_join(self): # Non-daemon threads should be joined at subinterpreter shutdown # (issue #18808) -@@ -848,6 +849,7 @@ +@@ -847,6 +848,7 @@ # The thread was joined properly. self.assertEqual(os.read(r, 1), b"x") @@ -13100,17 +13196,17 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py # Same as above, but a delay gets introduced after the thread's # Python code returned but before the thread state is deleted. diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py ---- orig/Lib/test/test_traceback.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_traceback.py 2015-05-04 14:42:29.000000000 +0800 -@@ -1,6 +1,7 @@ - """Test cases for traceback module""" - - from io import StringIO -+import subprocess +--- orig/Lib/test/test_traceback.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_traceback.py 2016-02-15 19:04:24.000000000 +0800 +@@ -6,6 +6,7 @@ import sys import unittest import re -@@ -101,11 +102,12 @@ ++import subprocess + from test import support + from test.support import TESTFN, Error, captured_output, unlink, cpython_only + from test.support.script_helper import assert_python_ok +@@ -110,11 +111,12 @@ err = traceback.format_exception_only(None, None) self.assertEqual(err, ['None\n']) @@ -13125,9 +13221,17 @@ diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py # The spawned subprocess has its stdout redirected to a PIPE, and its # encoding may be different from the current interpreter, on Windows diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py ---- orig/Lib/test/test_unicodedata.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_unicodedata.py 2015-05-04 14:42:28.000000000 +0800 -@@ -222,8 +222,10 @@ +--- orig/Lib/test/test_unicodedata.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_unicodedata.py 2016-02-15 18:24:13.000000000 +0800 +@@ -9,6 +9,7 @@ + import sys + import unittest + import hashlib ++import subprocess + from test.support import script_helper + + encoding = 'utf-8' +@@ -222,8 +223,10 @@ self.assertEqual(eaw('\u2010'), 'A') self.assertEqual(eaw('\U00020000'), 'W') @@ -13139,56 +13243,47 @@ diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.p # Issue 4367 # Decoding \N escapes requires the unicodedata module. If it can't be diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py ---- orig/Lib/test/test_urllib2net.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_urllib2net.py 2015-05-04 13:16:45.000000000 +0800 -@@ -156,6 +156,7 @@ +--- orig/Lib/test/test_urllib2net.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_urllib2net.py 2016-02-15 18:20:45.000000000 +0800 +@@ -7,6 +7,10 @@ + import urllib.error + import urllib.request + import sys ++try: ++ import ssl ++except ImportError: ++ ssl = None + + support.requires("network") + +@@ -148,6 +152,7 @@ ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) + @unittest.skipIf(ssl is None, 'test requires ssl module') def test_urlwithfrag(self): - urlwith_frag = "https://docs.python.org/2/glossary.html#glossary" + urlwith_frag = "http://www.pythontest.net/index.html#frag" with support.transient_internet(urlwith_frag): -@@ -164,6 +165,7 @@ +@@ -156,6 +161,7 @@ self.assertEqual(res.geturl(), - "https://docs.python.org/2/glossary.html#glossary") + "http://www.pythontest.net/index.html#frag") + @unittest.skipIf(ssl is None, 'test requires ssl module') def test_redirect_url_withfrag(self): - redirect_url_with_frag = "http://bit.ly/1iSHToT" + redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/" with support.transient_internet(redirect_url_with_frag): diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py ---- orig/Lib/test/test_uuid.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_uuid.py 2015-05-04 14:44:34.000000000 +0800 -@@ -3,9 +3,11 @@ - import builtins - import io - import os -+import subprocess - import shutil - import uuid - -+ - def importable(name): - try: - __import__(name) -@@ -13,6 +15,7 @@ +--- orig/Lib/test/test_uuid.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_uuid.py 2016-02-15 18:18:31.000000000 +0800 +@@ -14,6 +14,7 @@ except: return False + class TestUUID(unittest.TestCase): - last_node = None - source2node = {} -@@ -314,6 +317,7 @@ - TestUUID.last_node = node - - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_ifconfig_getnode(self): - node = uuid._ifconfig_getnode() - if node is not None: -@@ -472,6 +476,7 @@ + def test_UUID(self): + equal = self.assertEqual +@@ -388,6 +389,7 @@ equal(str(u), v) @unittest.skipUnless(os.name == 'posix', 'requires Posix') @@ -13196,18 +13291,42 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py def testIssue8621(self): # On at least some versions of OSX uuid.uuid4 generates # the same sequence of UUIDs in the parent and any -diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py ---- orig/Lib/test/test_venv.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_venv.py 2015-05-04 14:44:42.000000000 +0800 -@@ -15,7 +15,6 @@ - import tempfile - from test.support import (captured_stdout, captured_stderr, run_unittest, - can_symlink, EnvironmentVarGuard) --import textwrap - import unittest - import venv +@@ -412,6 +414,7 @@ + + class TestInternals(unittest.TestCase): + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_find_mac(self): + data = ''' + fake hwaddr +@@ -449,6 +452,7 @@ + "%s is not an RFC 4122 node ID" % hex) + + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_ifconfig_getnode(self): + node = uuid._ifconfig_getnode() + self.check_node(node, 'ifconfig', True) +@@ -459,6 +463,7 @@ + self.check_node(node, 'ip', True) + + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_arp_getnode(self): + node = uuid._arp_getnode() + self.check_node(node, 'arp', True) +@@ -469,6 +474,7 @@ + self.check_node(node, 'lanscan', True) -@@ -36,6 +35,7 @@ + @unittest.skipUnless(os.name == 'posix', 'requires Posix') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def test_netstat_getnode(self): + node = uuid._netstat_getnode() + self.check_node(node, 'netstat', True) +diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py +--- orig/Lib/test/test_venv.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_venv.py 2016-02-14 10:29:41.000000000 +0800 +@@ -35,6 +35,7 @@ def failsOnWindows(f): return f @@ -13215,7 +13334,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py class BaseTest(unittest.TestCase): """Base class for venv tests.""" -@@ -112,6 +112,7 @@ +@@ -111,6 +112,7 @@ self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) @skipInVenv @@ -13223,7 +13342,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py def test_prefixes(self): """ Test that the prefix values are as expected. -@@ -250,6 +251,7 @@ +@@ -249,6 +251,7 @@ # point to the venv being used to run the test, and we lose the link # to the source build - so Python can't initialise properly. @skipInVenv @@ -13231,7 +13350,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py def test_executable(self): """ Test that the sys.executable value is as expected. -@@ -264,6 +266,7 @@ +@@ -263,6 +266,7 @@ self.assertEqual(out.strip(), envpy.encode()) @unittest.skipUnless(can_symlink(), 'Needs symlinks') @@ -13239,7 +13358,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py def test_executable_symlinks(self): """ Test that the sys.executable value is as expected. -@@ -282,6 +285,7 @@ +@@ -281,6 +285,7 @@ @skipInVenv class EnsurePipTest(BaseTest): """Test venv module installation of pip.""" @@ -13247,17 +13366,17 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py def assert_pip_not_installed(self): envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe) -@@ -320,6 +324,7 @@ +@@ -319,6 +324,7 @@ # Requesting pip fails without SSL (http://bugs.python.org/issue19744) @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) + @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_with_pip(self): - shutil.rmtree(self.env_dir) + rmtree(self.env_dir) with EnvironmentVarGuard() as envvars: diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py ---- orig/Lib/test/test_webbrowser.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_webbrowser.py 2015-04-30 10:04:24.000000000 +0800 +--- orig/Lib/test/test_webbrowser.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_webbrowser.py 2016-02-14 10:29:41.000000000 +0800 @@ -2,8 +2,11 @@ import unittest import subprocess @@ -13271,17 +13390,17 @@ diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py URL = 'http://www.example.com/' CMD_NAME = 'test' diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py ---- orig/Lib/test/test_zipfile.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_zipfile.py 2015-07-04 22:53:46.000000000 +0800 -@@ -583,6 +583,7 @@ - if name + 'o' not in namelist: - self.assertIn(name + 'c', namelist) +--- orig/Lib/test/test_zipfile.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_zipfile.py 2016-02-14 10:29:41.000000000 +0800 +@@ -692,6 +692,7 @@ + self.skipTest('requires write access to the installed location') + unlink(filename) + @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") def test_write_pyfile(self): + self.requiresWriteAccess(os.path.dirname(__file__)) with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: - fn = __file__ -@@ -625,6 +626,7 @@ +@@ -736,6 +737,7 @@ self.assertCompiledIn('email/__init__.py', names) self.assertCompiledIn('email/mime/text.py', names) @@ -13290,8 +13409,8 @@ diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py import test packagedir = os.path.dirname(test.__file__) diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_break.py ---- orig/Lib/unittest/test/test_break.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/unittest/test/test_break.py 2015-04-27 09:20:54.000000000 +0800 +--- orig/Lib/unittest/test/test_break.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/unittest/test/test_break.py 2016-02-14 10:29:41.000000000 +0800 @@ -9,7 +9,7 @@ @@ -13302,9 +13421,9 @@ diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_b "if threads have been used") class TestBreak(unittest.TestCase): diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py ---- orig/Lib/unittest/test/test_runner.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/unittest/test/test_runner.py 2015-05-04 14:42:27.000000000 +0800 -@@ -270,6 +270,7 @@ +--- orig/Lib/unittest/test/test_runner.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/unittest/test/test_runner.py 2016-02-14 10:29:41.000000000 +0800 +@@ -274,6 +274,7 @@ expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) self.assertEqual(runner._makeResult(), expectedresult) @@ -13313,8 +13432,8 @@ diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_ """ Check that warnings argument of TextTestRunner correctly affects the diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py ---- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 +--- orig/Lib/webbrowser.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/webbrowser.py 2016-02-14 10:29:41.000000000 +0800 @@ -602,6 +602,57 @@ register("firefox", None, MacOSXOSAScript('firefox'), -1) register("MacOSX", None, MacOSXOSAScript('default'), -1) @@ -13373,10 +13492,51 @@ diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py # OK, now that we know what the default preference orders for each # platform are, allow user to override them with the BROWSER variable. +diff -Nru orig/Makefile.pre.in modified/Makefile.pre.in +--- orig/Makefile.pre.in 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Makefile.pre.in 2016-02-15 15:50:35.000000000 +0800 +@@ -712,11 +712,11 @@ + $(LINKCC) $(PY_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) + + Python/importlib_external.h: $(srcdir)/Lib/importlib/_bootstrap_external.py Programs/_freeze_importlib +- ./Programs/_freeze_importlib \ ++ ./iOS/_freeze_importlib \ + $(srcdir)/Lib/importlib/_bootstrap_external.py Python/importlib_external.h + + Python/importlib.h: $(srcdir)/Lib/importlib/_bootstrap.py Programs/_freeze_importlib +- ./Programs/_freeze_importlib \ ++ ./iOS/_freeze_importlib \ + $(srcdir)/Lib/importlib/_bootstrap.py Python/importlib.h + + +@@ -777,10 +777,12 @@ + + $(IO_OBJS): $(IO_H) + +-$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) ++$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS) + @$(MKDIR_P) Include ++ $(MAKE) $(PGEN) + $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) +-$(GRAMMAR_C): $(GRAMMAR_H) ++$(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS) ++ $(MAKE) $(GRAMMAR_H) + touch $(GRAMMAR_C) + + $(PGEN): $(PGENOBJS) +@@ -862,7 +864,7 @@ + + Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h + +-Python/frozen.o: Python/importlib.h Python/importlib_external.h ++Python/frozen.o: Python/importlib.h Python/importlib_external.h + + Objects/typeobject.o: Objects/typeslots.inc + Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded --- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.embedded 2015-07-04 23:36:43.000000000 +0800 -@@ -0,0 +1,91 @@ ++++ modified/Modules/Setup.embedded 2016-02-14 12:15:08.000000000 +0800 +@@ -0,0 +1,90 @@ +##################################################################### +# Static compilation instructions for all binary modules. +##################################################################### @@ -13438,7 +13598,6 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +select selectmodule.c +syslog syslogmodule.c +termios termios.c -+time timemodule.c +unicodedata unicodedata.c +zlib zlibmodule.c -I$(prefix)/include -lz + @@ -13470,7 +13629,7 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +#spwd spwdmodule.c diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 --- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-aarch64 2015-12-20 23:03:15.000000000 +0800 ++++ modified/Modules/Setup.ios-aarch64 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -13509,7 +13668,7 @@ diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 + -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm --- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-arm 2015-12-20 23:02:39.000000000 +0800 ++++ modified/Modules/Setup.ios-arm 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,36 @@ + +##################################################################### @@ -13549,7 +13708,7 @@ diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 --- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-i386 2015-12-20 23:01:44.000000000 +0800 ++++ modified/Modules/Setup.ios-i386 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -13588,7 +13747,7 @@ diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 --- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-x86_64 2015-12-20 23:01:43.000000000 +0800 ++++ modified/Modules/Setup.ios-x86_64 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -13627,7 +13786,7 @@ diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 + -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE --- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-04-26 07:29:16.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/LICENSE 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,21 @@ +libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. +See source files for details. @@ -13652,7 +13811,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libff +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README --- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README 2015-12-21 09:55:54.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,450 @@ +Status +====== @@ -14106,7 +14265,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi +libffi-discuss@sourceware.org. diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes/libffi_ios/README.python --- orig/Modules/_ctypes/libffi_ios/README.python 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README.python 2015-12-20 18:48:11.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README.python 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,14 @@ +This directory contains the generated source code for running libffi +on iOS platforms (physical and simulator). It contains support for @@ -14124,7 +14283,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes +and patched verion of libffi 4. diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c --- orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2015-12-20 22:04:51.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,934 @@ +#ifdef __arm64__ + @@ -15063,7 +15222,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h --- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-12-20 19:03:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,67 @@ +/* +Permission is hereby granted, free of charge, to any person obtaining @@ -15134,7 +15293,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_c +#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S --- orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2015-12-20 22:31:37.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,443 @@ +#ifdef __arm64__ + @@ -15582,7 +15741,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c --- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-12-20 22:05:17.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,813 @@ +#ifdef __arm__ + @@ -16400,7 +16559,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctyp \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h --- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-12-20 19:03:21.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,7 @@ +#define ARM_TYPE_VFP_S 0 +#define ARM_TYPE_VFP_D 1 @@ -16411,7 +16570,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctype +#define ARM_TYPE_STRUCT 6 diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S --- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-12-20 22:31:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,388 @@ +#ifdef __arm__ + @@ -16804,7 +16963,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_cty \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S --- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-12-20 18:50:24.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,5 @@ +#ifdef __arm__ + @@ -16814,7 +16973,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Module \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c --- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-12-20 22:04:37.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/closures.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,925 @@ +/* ----------------------------------------------------------------------- + closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. @@ -17743,7 +17902,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/li +#endif /* FFI_CLOSURES */ diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c --- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-12-20 22:33:34.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/debug.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,64 @@ +/* ----------------------------------------------------------------------- + debug.c - Copyright (c) 1996 Red Hat, Inc. @@ -17811,7 +17970,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libff +} diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c --- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-12-20 18:49:03.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,5161 @@ +/* + This is a version (aka dlmalloc) of malloc/free/realloc written by @@ -22976,7 +23135,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/li +*/ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h --- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-12-20 18:55:19.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -23004,7 +23163,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __arm64__ + @@ -23517,7 +23676,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __arm__ + @@ -24030,7 +24189,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-12-20 18:55:19.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,55 @@ +/* ----------------------------------------------------------------------- + ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. @@ -24089,7 +24248,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ct +#endif /* FFI_CFI_H */ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-12-20 18:55:19.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,132 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green @@ -24225,7 +24384,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __i386__ + @@ -24738,7 +24897,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_c \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __x86_64__ + @@ -25251,7 +25410,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-12-20 18:55:19.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -25279,7 +25438,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __arm64__ + @@ -25498,7 +25657,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __arm__ + @@ -25717,7 +25876,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __i386__ + @@ -25936,7 +26095,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modu \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __x86_64__ + @@ -26155,7 +26314,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Mo \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-12-20 18:55:19.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -26183,7 +26342,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-12-20 22:05:32.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,85 @@ +#ifdef __arm64__ + @@ -26273,7 +26432,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-12-20 22:05:39.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,87 @@ +#ifdef __arm__ + @@ -26365,7 +26524,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,144 @@ +#ifdef __i386__ + @@ -26514,7 +26673,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modu \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-12-20 18:55:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,144 @@ +#ifdef __x86_64__ + @@ -26663,7 +26822,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Mo \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c --- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-12-20 18:49:11.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,374 @@ +/* ----------------------------------------------------------------------- + java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. @@ -27041,7 +27200,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctype +#endif /* !NO_JAVA_RAW_API */ diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c --- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-12-20 18:49:22.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,242 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 2011, 2012 Anthony Green @@ -27287,7 +27446,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/li +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c --- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-12-20 18:49:26.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,267 @@ +/* ----------------------------------------------------------------------- + raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. @@ -27558,11 +27717,11 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/lib +#endif /* !FFI_NO_RAW_API */ diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c --- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/types.c 2015-12-20 18:49:29.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/types.c 2016-02-14 12:09:55.000000000 +0800 @@ -0,0 +1,106 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. -+ ++ + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining @@ -27621,54 +27780,54 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libff + (ffi_type **)ffi_elements_complex_##name \ +} + -+/* Size and alignment are fake here. They must not be 0. */ -+const ffi_type ffi_type_void = { -+ 1, 1, FFI_TYPE_VOID, NULL -+}; -+ -+FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); -+FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); -+FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); -+FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); -+FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); -+FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); -+FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); -+FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); -+ -+FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); -+ -+FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); -+FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); -+ -+#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ -+#define FFI_LDBL_CONST const -+#else -+#define FFI_LDBL_CONST -+#endif -+ -+#ifdef __alpha__ -+/* Even if we're not configured to default to 128-bit long double, -+ maintain binary compatibility, as -mlong-double-128 can be used -+ at any time. */ -+/* Validate the hard-coded number below. */ -+# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -+#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_COMPLEX_TYPEDEF(float, float, const); -+FFI_COMPLEX_TYPEDEF(double, double, const); -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); -+#endif -+#endif ++// /* Size and alignment are fake here. They must not be 0. */ ++// const ffi_type ffi_type_void = { ++// 1, 1, FFI_TYPE_VOID, NULL ++// }; ++ ++// FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); ++// FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); ++// FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); ++// FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); ++// FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); ++// FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); ++// FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); ++// FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); ++ ++// FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); ++ ++// FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); ++// FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); ++ ++// #if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ ++// #define FFI_LDBL_CONST const ++// #else ++// #define FFI_LDBL_CONST ++// #endif ++ ++// #ifdef __alpha__ ++// /* Even if we're not configured to default to 128-bit long double, ++// maintain binary compatibility, as -mlong-double-128 can be used ++// at any time. */ ++// /* Validate the hard-coded number below. */ ++// # if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 ++// # error FFI_TYPE_LONGDOUBLE out of date ++// # endif ++// const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; ++// #elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++// FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); ++// #endif ++ ++// #ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++// FFI_COMPLEX_TYPEDEF(float, float, const); ++// FFI_COMPLEX_TYPEDEF(double, double, const); ++// #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++// FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); ++// #endif ++// #endif diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c --- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-12-20 18:53:04.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,829 @@ +#ifdef __x86_64__ + @@ -28502,7 +28661,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_c \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c --- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-12-20 18:53:04.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,734 @@ +#ifdef __i386__ + @@ -29241,7 +29400,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctype \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h --- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-12-20 19:03:47.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,29 @@ +#define X86_RET_FLOAT 0 +#define X86_RET_DOUBLE 1 @@ -29274,7 +29433,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctype +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h --- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-12-20 19:03:50.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,22 @@ +#define UNIX64_RET_VOID 0 +#define UNIX64_RET_UINT8 1 @@ -29300,7 +29459,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_cty +#define UNIX64_SIZE_SHIFT 12 diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S --- orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2015-12-20 18:53:04.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,1045 @@ +#ifdef __i386__ + @@ -30350,7 +30509,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctyp \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S --- orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2015-12-20 18:53:04.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,551 @@ +#ifdef __x86_64__ + @@ -30905,9 +31064,9 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ +#endif \ No newline at end of file diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c ---- orig/Modules/_posixsubprocess.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/_posixsubprocess.c 2015-12-21 13:03:32.000000000 +0800 -@@ -479,11 +479,15 @@ +--- orig/Modules/_posixsubprocess.c 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Modules/_posixsubprocess.c 2016-02-14 10:29:41.000000000 +0800 +@@ -490,11 +490,15 @@ saved_errno = 0; for (i = 0; exec_array[i] != NULL; ++i) { const char *executable = exec_array[i]; @@ -30923,7 +31082,7 @@ diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { saved_errno = errno; } -@@ -646,7 +650,12 @@ +@@ -662,7 +666,12 @@ cwd_obj2 = NULL; } @@ -30937,8 +31096,8 @@ diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c /* Child process */ /* diff -Nru orig/Modules/makesetup modified/Modules/makesetup ---- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 +--- orig/Modules/makesetup 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Modules/makesetup 2016-02-14 10:29:41.000000000 +0800 @@ -128,7 +128,7 @@ # Output DEFS in reverse order so first definition overrides @@ -30979,18 +31138,9 @@ diff -Nru orig/Modules/makesetup modified/Modules/makesetup *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C *) continue;; esac -@@ -266,7 +271,7 @@ - *) sed -e " - 1i$NL/* Generated automatically from $config by makesetup. */ - /MARKER 1/i$NL$EXTDECLS -- -+ - /MARKER 2/i$NL$INITBITS - - " $config >config.c diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c ---- orig/Modules/mathmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/mathmodule.c 2015-05-04 13:53:01.000000000 +0800 +--- orig/Modules/mathmodule.c 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Modules/mathmodule.c 2016-02-14 10:29:41.000000000 +0800 @@ -55,6 +55,10 @@ #include "Python.h" #include "_math.h" @@ -31002,7 +31152,7 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c /* sin(pi*x), giving accurate results for all finite x (especially x integral or close to an integer). This is here for use in the -@@ -1746,6 +1750,16 @@ +@@ -1810,6 +1814,16 @@ return PyFloat_FromDouble(fabs(x)); if (Py_IS_INFINITY(y)) return PyFloat_FromDouble(fabs(y)); @@ -31020,8 +31170,8 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c PyFPE_START_PROTECT("in math_hypot", return 0); r = hypot(x, y); diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c ---- orig/Modules/posixmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/posixmodule.c 2015-12-21 13:03:32.000000000 +0800 +--- orig/Modules/posixmodule.c 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Modules/posixmodule.c 2016-02-14 10:41:08.000000000 +0800 @@ -20,6 +20,8 @@ # pragma weak statvfs # pragma weak fstatvfs @@ -31031,8 +31181,8 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* __APPLE__ */ #define PY_SSIZE_T_CLEAN -@@ -180,6 +182,23 @@ - #endif /* __BORLANDC__ */ +@@ -175,6 +177,23 @@ + #endif /* _MSC_VER */ #endif /* ! __WATCOMC__ || __QNX__ */ +// iOS *defines* a number of POSIX functions, but you can't use them @@ -31054,8 +31204,8 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c +#endif /* TARGET_OS_IPHONE */ /*[clinic input] - module os -@@ -1178,7 +1197,9 @@ + # one of the few times we lie about this name! +@@ -1127,7 +1146,9 @@ #include static char **environ; #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) @@ -31065,7 +31215,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* !_MSC_VER */ static PyObject * -@@ -1229,7 +1250,7 @@ +@@ -1178,7 +1199,7 @@ Py_DECREF(k); Py_DECREF(v); } @@ -31074,22 +31224,22 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c if (environ == NULL) return d; /* This part ignores errors */ -@@ -4444,7 +4465,12 @@ - - command = PyBytes_AsString(command_obj); +@@ -4285,7 +4306,12 @@ + long result; + char *bytes = PyBytes_AsString(command); Py_BEGIN_ALLOW_THREADS +#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ sts = -1; ++ result = -1; + errno = ENOTSUP; +#else - sts = system(command); + result = system(bytes); +#endif Py_END_ALLOW_THREADS - Py_DECREF(command_obj); - #endif + return result; + } diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c ---- orig/Modules/pwdmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/pwdmodule.c 2015-05-02 23:37:06.000000000 +0800 +--- orig/Modules/pwdmodule.c 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Modules/pwdmodule.c 2016-02-14 10:29:41.000000000 +0800 @@ -1,6 +1,10 @@ /* UNIX password file access module */ @@ -31101,7 +31251,7 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c #include "Python.h" #include "posixmodule.h" -@@ -105,6 +109,21 @@ +@@ -118,6 +122,21 @@ return NULL; } if ((p = getpwuid(uid)) == NULL) { @@ -31123,7 +31273,7 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c PyObject *uid_obj = _PyLong_FromUid(uid); if (uid_obj == NULL) return NULL; -@@ -136,6 +155,22 @@ +@@ -153,6 +172,22 @@ if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) goto out; if ((p = getpwnam(name)) == NULL) { @@ -31146,18 +31296,18 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c PyErr_Format(PyExc_KeyError, "getpwnam(): name not found: %s", name); goto out; -@@ -176,6 +211,7 @@ +@@ -196,6 +231,7 @@ } #endif + static PyMethodDef pwd_methods[] = { - {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, - {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, + PWD_GETPWUID_METHODDEF + PWD_GETPWNAM_METHODDEF diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c ---- orig/Objects/bytesobject.c 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Objects/bytesobject.c 2015-08-03 12:54:33.000000000 +0800 -@@ -199,8 +199,8 @@ +--- orig/Objects/bytesobject.c 2015-12-07 09:39:10.000000000 +0800 ++++ modified/Objects/bytesobject.c 2016-02-14 10:29:41.000000000 +0800 +@@ -201,8 +201,8 @@ int c = va_arg(count, int); if (c < 0 || c > 255) { PyErr_SetString(PyExc_OverflowError, @@ -31168,14 +31318,14 @@ diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c return NULL; } n++; -diff -Nru orig/Python/importlib.h modified/Python/importlib.h ---- orig/Python/importlib.h 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Python/importlib.h 2015-05-02 11:58:42.000000000 +0800 -@@ -2,84 +2,84 @@ - const unsigned char _Py_M__importlib[] = { +diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h +--- orig/Python/importlib_external.h 2015-12-07 09:39:11.000000000 +0800 ++++ modified/Python/importlib_external.h 2016-02-16 11:35:20.000000000 +0800 +@@ -2,52 +2,52 @@ + const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,4,0,0,100,0,0,90,0,0, -- 100,163,0,90,1,0,100,4,0,100,5,0,132,0,0,90, + 0,64,0,0,0,115,228,2,0,0,100,0,0,90,0,0, +- 100,96,0,90,1,0,100,4,0,100,5,0,132,0,0,90, - 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, - 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, - 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, @@ -31183,40 +31333,7 @@ diff -Nru orig/Python/importlib.h modified/Python/importlib.h - 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, - 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, - 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, -- 0,100,25,0,100,26,0,132,0,0,90,12,0,100,27,0, -- 100,28,0,132,0,0,90,13,0,101,14,0,101,12,0,106, -- 15,0,131,1,0,90,16,0,71,100,29,0,100,30,0,132, -- 0,0,100,30,0,131,2,0,90,17,0,105,0,0,90,18, -- 0,105,0,0,90,19,0,71,100,31,0,100,32,0,132,0, -- 0,100,32,0,101,20,0,131,3,0,90,21,0,71,100,33, -- 0,100,34,0,132,0,0,100,34,0,131,2,0,90,22,0, -- 71,100,35,0,100,36,0,132,0,0,100,36,0,131,2,0, -- 90,23,0,71,100,37,0,100,38,0,132,0,0,100,38,0, -- 131,2,0,90,24,0,100,39,0,100,40,0,132,0,0,90, -- 25,0,100,41,0,100,42,0,132,0,0,90,26,0,100,43, -- 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, -- 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, -- 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, -- 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, -- 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, -- 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, -- 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, -- 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, -- 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, -- 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, -- 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, -- 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, -- 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, -- 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, -- 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, -- 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, -- 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, -- 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, -- 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, -- 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, -- 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, -- 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, -+ 100,164,0,90,1,0,100,5,0,100,6,0,132,0,0,90, ++ 100,97,0,90,1,0,100,5,0,100,6,0,132,0,0,90, + 2,0,100,7,0,100,8,0,132,0,0,90,3,0,100,9, + 0,100,10,0,132,0,0,90,4,0,100,11,0,100,12,0, + 132,0,0,90,5,0,100,13,0,100,14,0,132,0,0,90, @@ -31224,4476 +31341,2021 @@ diff -Nru orig/Python/importlib.h modified/Python/importlib.h + 0,100,18,0,132,0,0,90,8,0,100,19,0,100,20,0, + 132,0,0,90,9,0,100,21,0,100,22,0,132,0,0,90, + 10,0,100,23,0,100,24,0,100,25,0,132,1,0,90,11, -+ 0,100,26,0,100,27,0,132,0,0,90,12,0,100,28,0, -+ 100,29,0,132,0,0,90,13,0,101,14,0,101,12,0,106, -+ 15,0,131,1,0,90,16,0,71,100,30,0,100,31,0,132, -+ 0,0,100,31,0,131,2,0,90,17,0,105,0,0,90,18, -+ 0,105,0,0,90,19,0,71,100,32,0,100,33,0,132,0, -+ 0,100,33,0,101,20,0,131,3,0,90,21,0,71,100,34, -+ 0,100,35,0,132,0,0,100,35,0,131,2,0,90,22,0, -+ 71,100,36,0,100,37,0,132,0,0,100,37,0,131,2,0, -+ 90,23,0,71,100,38,0,100,39,0,132,0,0,100,39,0, -+ 131,2,0,90,24,0,100,40,0,100,41,0,132,0,0,90, -+ 25,0,100,42,0,100,43,0,132,0,0,90,26,0,100,44, -+ 0,100,45,0,132,0,0,90,27,0,100,46,0,106,28,0, -+ 100,47,0,100,48,0,131,2,0,100,49,0,23,90,29,0, -+ 101,30,0,106,31,0,101,29,0,100,48,0,131,2,0,90, -+ 32,0,100,50,0,90,33,0,100,51,0,103,1,0,90,34, -+ 0,100,52,0,103,1,0,90,35,0,100,53,0,103,1,0, -+ 90,36,0,100,54,0,100,55,0,100,56,0,132,1,0,90, -+ 37,0,100,57,0,100,58,0,132,0,0,90,38,0,100,59, -+ 0,100,60,0,132,0,0,90,39,0,100,61,0,100,62,0, -+ 132,0,0,90,40,0,100,63,0,100,64,0,100,65,0,100, -+ 66,0,132,0,1,90,41,0,100,67,0,100,68,0,132,0, -+ 0,90,42,0,100,69,0,100,70,0,132,0,0,90,43,0, -+ 100,71,0,100,72,0,132,0,0,90,44,0,100,73,0,100, -+ 74,0,132,0,0,90,45,0,100,75,0,100,76,0,132,0, -+ 0,90,46,0,100,54,0,100,54,0,100,54,0,100,77,0, -+ 100,78,0,132,3,0,90,47,0,100,54,0,100,54,0,100, -+ 54,0,100,79,0,100,80,0,132,3,0,90,48,0,100,81, -+ 0,100,81,0,100,82,0,100,83,0,132,2,0,90,49,0, -+ 100,84,0,100,85,0,132,0,0,90,50,0,100,86,0,100, -+ 87,0,132,0,0,90,51,0,71,100,88,0,100,89,0,132, -+ 0,0,100,89,0,131,2,0,90,52,0,71,100,90,0,100, -+ 91,0,132,0,0,100,91,0,131,2,0,90,53,0,100,92, -+ 0,100,54,0,100,93,0,100,54,0,100,94,0,100,95,0, - 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, -- 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, -- 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, -- 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, -- 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,100, -- 53,0,100,103,0,100,104,0,132,1,0,90,60,0,71,100, -- 105,0,100,106,0,132,0,0,100,106,0,131,2,0,90,61, -- 0,71,100,107,0,100,108,0,132,0,0,100,108,0,131,2, -- 0,90,62,0,71,100,109,0,100,110,0,132,0,0,100,110, -- 0,131,2,0,90,63,0,71,100,111,0,100,112,0,132,0, -- 0,100,112,0,131,2,0,90,64,0,71,100,113,0,100,114, -- 0,132,0,0,100,114,0,101,64,0,131,3,0,90,65,0, -- 71,100,115,0,100,116,0,132,0,0,100,116,0,131,2,0, -- 90,66,0,71,100,117,0,100,118,0,132,0,0,100,118,0, -- 101,66,0,101,65,0,131,4,0,90,67,0,71,100,119,0, -- 100,120,0,132,0,0,100,120,0,101,66,0,101,64,0,131, -- 4,0,90,68,0,103,0,0,90,69,0,71,100,121,0,100, -- 122,0,132,0,0,100,122,0,131,2,0,90,70,0,71,100, -- 123,0,100,124,0,132,0,0,100,124,0,131,2,0,90,71, -- 0,71,100,125,0,100,126,0,132,0,0,100,126,0,131,2, -- 0,90,72,0,71,100,127,0,100,128,0,132,0,0,100,128, -- 0,131,2,0,90,73,0,71,100,129,0,100,130,0,132,0, -- 0,100,130,0,131,2,0,90,74,0,71,100,131,0,100,132, -- 0,132,0,0,100,132,0,131,2,0,90,75,0,100,133,0, -- 100,134,0,132,0,0,90,76,0,100,135,0,100,136,0,132, -- 0,0,90,77,0,100,53,0,100,137,0,100,138,0,132,1, -- 0,90,78,0,100,139,0,100,140,0,132,0,0,90,79,0, -- 100,141,0,90,80,0,101,80,0,100,142,0,23,90,81,0, -- 100,143,0,100,144,0,132,0,0,90,82,0,100,145,0,100, -- 146,0,132,0,0,90,83,0,100,53,0,100,80,0,100,147, -- 0,100,148,0,132,2,0,90,84,0,100,149,0,100,150,0, -- 132,0,0,90,85,0,100,151,0,100,152,0,132,0,0,90, -- 86,0,100,153,0,100,154,0,132,0,0,90,87,0,100,53, -- 0,100,53,0,102,0,0,100,80,0,100,155,0,100,156,0, -- 132,4,0,90,88,0,100,157,0,100,158,0,132,0,0,90, -- 89,0,100,159,0,100,160,0,132,0,0,90,90,0,100,161, -- 0,100,162,0,132,0,0,90,91,0,100,53,0,83,41,164, -+ 54,0,100,96,0,100,54,0,100,97,0,101,56,0,100,98, -+ 0,100,99,0,132,1,2,90,57,0,100,54,0,100,54,0, -+ 100,100,0,100,101,0,132,2,0,90,58,0,71,100,102,0, -+ 100,103,0,132,0,0,100,103,0,131,2,0,90,59,0,100, -+ 54,0,100,104,0,100,105,0,132,1,0,90,60,0,71,100, -+ 106,0,100,107,0,132,0,0,100,107,0,131,2,0,90,61, -+ 0,71,100,108,0,100,109,0,132,0,0,100,109,0,131,2, -+ 0,90,62,0,71,100,110,0,100,111,0,132,0,0,100,111, -+ 0,131,2,0,90,63,0,71,100,112,0,100,113,0,132,0, -+ 0,100,113,0,131,2,0,90,64,0,71,100,114,0,100,115, -+ 0,132,0,0,100,115,0,101,64,0,131,3,0,90,65,0, -+ 71,100,116,0,100,117,0,132,0,0,100,117,0,131,2,0, -+ 90,66,0,71,100,118,0,100,119,0,132,0,0,100,119,0, -+ 101,66,0,101,65,0,131,4,0,90,67,0,71,100,120,0, -+ 100,121,0,132,0,0,100,121,0,101,66,0,101,64,0,131, -+ 4,0,90,68,0,103,0,0,90,69,0,71,100,122,0,100, -+ 123,0,132,0,0,100,123,0,131,2,0,90,70,0,71,100, -+ 124,0,100,125,0,132,0,0,100,125,0,131,2,0,90,71, -+ 0,71,100,126,0,100,127,0,132,0,0,100,127,0,131,2, -+ 0,90,72,0,71,100,128,0,100,129,0,132,0,0,100,129, -+ 0,131,2,0,90,73,0,71,100,130,0,100,131,0,132,0, -+ 0,100,131,0,131,2,0,90,74,0,71,100,132,0,100,133, -+ 0,132,0,0,100,133,0,131,2,0,90,75,0,100,134,0, -+ 100,135,0,132,0,0,90,76,0,100,136,0,100,137,0,132, -+ 0,0,90,77,0,100,54,0,100,138,0,100,139,0,132,1, -+ 0,90,78,0,100,140,0,100,141,0,132,0,0,90,79,0, -+ 100,142,0,90,80,0,101,80,0,100,143,0,23,90,81,0, -+ 100,144,0,100,145,0,132,0,0,90,82,0,100,146,0,100, -+ 147,0,132,0,0,90,83,0,100,54,0,100,81,0,100,148, -+ 0,100,149,0,132,2,0,90,84,0,100,150,0,100,151,0, -+ 132,0,0,90,85,0,100,152,0,100,153,0,132,0,0,90, -+ 86,0,100,154,0,100,155,0,132,0,0,90,87,0,100,54, -+ 0,100,54,0,102,0,0,100,81,0,100,156,0,100,157,0, -+ 132,4,0,90,88,0,100,158,0,100,159,0,132,0,0,90, -+ 89,0,100,160,0,100,161,0,132,0,0,90,90,0,100,162, -+ 0,100,163,0,132,0,0,90,91,0,100,54,0,83,41,165, - 97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, - 114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101, -@@ -102,2102 +102,3127 @@ - 32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118, - 101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109, - 111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99, -- 121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0, -- 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, -- 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, -- 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, -- 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, -- 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, -- 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, -- 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, -- 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, -- 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, -- 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, -- 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, -- 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4, -- 0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101, -- 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, -- 116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95, -- 99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122, -- 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, -- 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, -- 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, -- 100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32, -- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, -- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, -- 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0, -- 115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8, -- 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, -- 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, -- 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, -- 83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114, -- 101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0, -- 0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99, -- 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, -- 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131, -- 1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131, -- 2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97, -- 32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32, -- 116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110, -- 46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0, -- 0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116, -- 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7, -- 95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0, -- 0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0, -- 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, -- 0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0, -- 83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, -- 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, -- 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, -- 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, -- 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, -- 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, -- 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, -- 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, -- 0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1, -- 0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1, -- 0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101, -- 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, -- 46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0, -- 0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0, -- 0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1, -- 0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0, -- 145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6, -- 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, -- 97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112, -- 97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0, -- 0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104, -- 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, -- 108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116, -- 104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112, -- 97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95, -- 106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15, -- 1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, -- 0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0, -- 116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114, -- 52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3, -- 0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0, -- 102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0, -- 68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0, -- 114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100, -- 1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1, -- 0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124, -- 0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99, -- 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, -- 104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90, -- 8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108, -- 101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116, -- 105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115, -- 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, -- 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, -- 105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112, -- 108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1, -- 24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0, -- 0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, -- 0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1, -- 0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116, -- 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, -- 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, -- 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, -- 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, -- 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, -- 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, -- 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, -- 116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0, -- 0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95, -- 112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0, -- 0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0, -- 0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58, -- 0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125, -- 2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0, -- 1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106, -- 2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122, -- 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, -- 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, -- 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, -- 101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218, -- 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100, -- 101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9, -- 115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95, -- 105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0, -- 115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114, -- 43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, -- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82, -- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, -- 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, -- 128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,12,95,112,97,116,104,95,105,115,102,105,108,101,87,0, -- 0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1, -- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, -- 0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0, -- 0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0, -- 124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101, -- 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, -- 46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0, -- 0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100, -- 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, -- 116,104,95,105,115,100,105,114,92,0,0,0,115,6,0,0, -- 0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0, -- 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, -- 0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0, -- 0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0, -- 125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106, -- 4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66, -- 124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0, -- 116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143, -- 20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1, -- 0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3, -- 0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0, -- 107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106, -- 12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11, -- 0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130, -- 0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66, -- 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, -- 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, -- 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, -- 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, -- 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, -- 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, -- 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, -- 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, -- 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, -- 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, -- 46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119, -- 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, -- 114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69, -- 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, -- 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, -- 101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108, -- 97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107, -- 41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0, -- 0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100, -- 218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116, -- 111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24, -- 1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3, -- 1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0, -- 0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0, -- 0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100, -- 3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116, -- 0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1, -- 0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0, -- 131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0, -- 0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0, -- 1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32, -- 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, -- 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, -- 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, -- 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, -- 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, -- 100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116, -- 114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97, -- 116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117, -- 112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108, -- 100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,5,95,119,114,97,112,121,0,0,0, -- 115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0, -- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,116, -- 1,0,131,1,0,124,0,0,131,1,0,83,41,1,78,41, -- 2,218,4,116,121,112,101,114,7,0,0,0,41,1,218,4, -- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, -- 129,0,0,0,115,2,0,0,0,0,1,114,68,0,0,0, -+ 121,103,119,105,110,218,6,100,97,114,119,105,110,218,3,105, -+ 111,115,99,0,0,0,0,0,0,0,0,1,0,0,0,2, -+ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, -+ 1,0,106,2,0,116,3,0,131,1,0,114,33,0,100,1, -+ 0,100,2,0,132,0,0,125,0,0,110,12,0,100,3,0, -+ 100,2,0,132,0,0,125,0,0,124,0,0,83,41,4,78, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,58,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -- 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -- 100,8,0,83,41,9,218,13,95,77,97,110,97,103,101,82, -- 101,108,111,97,100,122,63,77,97,110,97,103,101,115,32,116, -- 104,101,32,112,111,115,115,105,98,108,101,32,99,108,101,97, -- 110,45,117,112,32,111,102,32,115,121,115,46,109,111,100,117, -- 108,101,115,32,102,111,114,32,108,111,97,100,95,109,111,100, -- 117,108,101,40,41,46,99,2,0,0,0,0,0,0,0,2, -+ 0,83,0,0,0,115,13,0,0,0,100,1,0,116,0,0, -+ 106,1,0,107,6,0,83,41,2,122,53,84,114,117,101,32, -+ 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, -+ 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, -+ 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, -+ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, -+ 75,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, -+ 110,169,0,114,5,0,0,0,114,5,0,0,0,250,29,60, -+ 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, -+ 46,95,98,111,111,116,115,116,114,97,112,62,218,11,95,114, -+ 101,108,97,120,95,99,97,115,101,30,0,0,0,115,2,0, -+ 0,0,0,2,122,37,95,109,97,107,101,95,114,101,108,97, -+ 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, -+ 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, -+ 115,4,0,0,0,100,1,0,83,41,2,122,53,84,114,117, -+ 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, -+ 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, -+ 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, -+ 121,46,70,114,5,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,7,0,0, -+ 0,34,0,0,0,115,2,0,0,0,0,2,41,4,218,3, -+ 115,121,115,218,8,112,108,97,116,102,111,114,109,218,10,115, -+ 116,97,114,116,115,119,105,116,104,218,27,95,67,65,83,69, -+ 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, -+ 84,70,79,82,77,83,41,1,114,7,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,16,95,109, -+ 97,107,101,95,114,101,108,97,120,95,99,97,115,101,28,0, -+ 0,0,115,8,0,0,0,0,1,18,1,15,4,12,3,114, -+ 12,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, -+ 0,3,0,0,0,67,0,0,0,115,26,0,0,0,116,0, -+ 0,124,0,0,131,1,0,100,1,0,64,106,1,0,100,2, -+ 0,100,3,0,131,2,0,83,41,4,122,42,67,111,110,118, -+ 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, -+ 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, -+ 110,100,105,97,110,46,108,3,0,0,0,255,127,255,127,3, -+ 0,233,4,0,0,0,218,6,108,105,116,116,108,101,41,2, -+ 218,3,105,110,116,218,8,116,111,95,98,121,116,101,115,41, -+ 1,218,1,120,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,7,95,119,95,108,111,110,103,40,0,0,0, -+ 115,2,0,0,0,0,2,114,18,0,0,0,99,1,0,0, -+ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, -+ 0,115,16,0,0,0,116,0,0,106,1,0,124,0,0,100, -+ 1,0,131,2,0,83,41,2,122,47,67,111,110,118,101,114, -+ 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, -+ 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, -+ 32,105,110,116,101,103,101,114,46,114,14,0,0,0,41,2, -+ 114,15,0,0,0,218,10,102,114,111,109,95,98,121,116,101, -+ 115,41,1,90,9,105,110,116,95,98,121,116,101,115,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,7,95, -+ 114,95,108,111,110,103,45,0,0,0,115,2,0,0,0,0, -+ 2,114,20,0,0,0,99,0,0,0,0,0,0,0,0,1, -+ 0,0,0,3,0,0,0,71,0,0,0,115,26,0,0,0, -+ 116,0,0,106,1,0,100,1,0,100,2,0,132,0,0,124, -+ 0,0,68,131,1,0,131,1,0,83,41,3,122,31,82,101, -+ 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, -+ 46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,0, -+ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, -+ 0,0,115,37,0,0,0,103,0,0,124,0,0,93,27,0, -+ 125,1,0,124,1,0,114,6,0,124,1,0,106,0,0,116, -+ 1,0,131,1,0,145,2,0,113,6,0,83,114,5,0,0, -+ 0,41,2,218,6,114,115,116,114,105,112,218,15,112,97,116, -+ 104,95,115,101,112,97,114,97,116,111,114,115,41,2,218,2, -+ 46,48,218,4,112,97,114,116,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,250,10,60,108,105,115,116,99,111, -+ 109,112,62,52,0,0,0,115,2,0,0,0,9,1,122,30, -+ 95,112,97,116,104,95,106,111,105,110,46,60,108,111,99,97, -+ 108,115,62,46,60,108,105,115,116,99,111,109,112,62,41,2, -+ 218,8,112,97,116,104,95,115,101,112,218,4,106,111,105,110, -+ 41,1,218,10,112,97,116,104,95,112,97,114,116,115,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, -+ 112,97,116,104,95,106,111,105,110,50,0,0,0,115,4,0, -+ 0,0,0,2,15,1,114,29,0,0,0,99,1,0,0,0, -+ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, -+ 115,134,0,0,0,116,0,0,116,1,0,131,1,0,100,1, -+ 0,107,2,0,114,52,0,124,0,0,106,2,0,116,3,0, -+ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, -+ 1,0,124,3,0,102,2,0,83,120,69,0,116,4,0,124, -+ 0,0,131,1,0,68,93,55,0,125,4,0,124,4,0,116, -+ 1,0,107,6,0,114,65,0,124,0,0,106,5,0,124,4, -+ 0,100,2,0,100,1,0,131,1,1,92,2,0,125,1,0, -+ 125,3,0,124,1,0,124,3,0,102,2,0,83,113,65,0, -+ 87,100,3,0,124,0,0,102,2,0,83,41,4,122,32,82, -+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, -+ 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, -+ 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, -+ 41,6,218,3,108,101,110,114,22,0,0,0,218,10,114,112, -+ 97,114,116,105,116,105,111,110,114,26,0,0,0,218,8,114, -+ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, -+ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, -+ 95,218,4,116,97,105,108,114,17,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,11,95,112,97, -+ 116,104,95,115,112,108,105,116,56,0,0,0,115,16,0,0, -+ 0,0,2,18,1,24,1,10,1,19,1,12,1,27,1,14, -+ 1,114,39,0,0,0,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, -- 124,1,0,124,0,0,95,0,0,100,0,0,83,41,1,78, -- 41,1,218,5,95,110,97,109,101,41,2,218,4,115,101,108, -- 102,114,67,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,8,95,95,105,110,105,116,95,95,141, -- 0,0,0,115,2,0,0,0,0,1,122,22,95,77,97,110, -- 97,103,101,82,101,108,111,97,100,46,95,95,105,110,105,116, -- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,25,0,0,0,124,0,0,106, -- 0,0,116,1,0,106,2,0,107,6,0,124,0,0,95,3, -- 0,100,0,0,83,41,1,78,41,4,114,70,0,0,0,114, -- 7,0,0,0,218,7,109,111,100,117,108,101,115,218,10,95, -- 105,115,95,114,101,108,111,97,100,41,1,114,71,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 9,95,95,101,110,116,101,114,95,95,144,0,0,0,115,2, -- 0,0,0,0,1,122,23,95,77,97,110,97,103,101,82,101, -- 108,111,97,100,46,95,95,101,110,116,101,114,95,95,99,1, -- 0,0,0,0,0,0,0,2,0,0,0,12,0,0,0,71, -- 0,0,0,115,80,0,0,0,116,0,0,100,1,0,100,2, -- 0,132,0,0,124,1,0,68,131,1,0,131,1,0,114,76, -- 0,124,0,0,106,1,0,12,114,76,0,121,17,0,116,2, -- 0,106,3,0,124,0,0,106,4,0,61,87,113,76,0,4, -- 116,5,0,107,10,0,114,72,0,1,1,1,89,113,76,0, -- 88,110,0,0,100,0,0,83,41,3,78,99,1,0,0,0, -- 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, -- 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, -- 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, -- 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,218, -- 3,97,114,103,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,250,9,60,103,101,110,101,120,112,114,62,148,0, -- 0,0,115,2,0,0,0,6,0,122,41,95,77,97,110,97, -- 103,101,82,101,108,111,97,100,46,95,95,101,120,105,116,95, -- 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, -- 120,112,114,62,41,6,218,3,97,110,121,114,74,0,0,0, -- 114,7,0,0,0,114,73,0,0,0,114,70,0,0,0,218, -- 8,75,101,121,69,114,114,111,114,41,2,114,71,0,0,0, -- 218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,8,95,95,101,120,105,116,95,95,147, -- 0,0,0,115,10,0,0,0,0,1,35,1,3,1,17,1, -- 13,1,122,22,95,77,97,110,97,103,101,82,101,108,111,97, -- 100,46,95,95,101,120,105,116,95,95,78,41,7,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,114,72,0,0,0,114,75,0,0,0,114,81,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,69,0,0,0,137,0,0,0,115,8,0, -- 0,0,12,2,6,2,12,3,12,3,114,69,0,0,0,99, -- 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -- 64,0,0,0,115,16,0,0,0,101,0,0,90,1,0,100, -- 0,0,90,2,0,100,1,0,83,41,2,218,14,95,68,101, -- 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,57, -- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,82,0,0,0,162,0,0,0,115,2,0,0,0,12, -- 1,114,82,0,0,0,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,2,0,0,0,64,0,0,0,115,82,0,0,0, -- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, -- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, -- 132,0,0,90,6,0,100,8,0,100,9,0,132,0,0,90, -- 7,0,100,10,0,100,11,0,132,0,0,90,8,0,100,12, -- 0,83,41,13,218,11,95,77,111,100,117,108,101,76,111,99, -- 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, -- 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, -- 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, -- 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, -- 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, -- 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, -- 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, -- 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, -- 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, -- 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, -- 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -- 0,115,70,0,0,0,116,0,0,106,1,0,131,0,0,124, -- 0,0,95,2,0,116,0,0,106,1,0,131,0,0,124,0, -- 0,95,3,0,124,1,0,124,0,0,95,4,0,100,0,0, -- 124,0,0,95,5,0,100,1,0,124,0,0,95,6,0,100, -- 1,0,124,0,0,95,7,0,100,0,0,83,41,2,78,233, -- 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, -- 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, -- 108,111,99,107,218,6,119,97,107,101,117,112,114,67,0,0, -- 0,218,5,111,119,110,101,114,218,5,99,111,117,110,116,218, -- 7,119,97,105,116,101,114,115,41,2,114,71,0,0,0,114, -- 67,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,172,0,0,0,115,12,0,0, -- 0,0,1,15,1,15,1,9,1,9,1,9,1,122,20,95, -- 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, -- 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, -- 2,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, -- 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,125, -- 2,0,120,59,0,116,3,0,106,4,0,124,2,0,131,1, -- 0,125,3,0,124,3,0,100,0,0,107,8,0,114,55,0, -- 100,1,0,83,124,3,0,106,2,0,125,2,0,124,2,0, -- 124,1,0,107,2,0,114,24,0,100,2,0,83,113,24,0, -- 100,0,0,83,41,3,78,70,84,41,5,114,85,0,0,0, -- 218,9,103,101,116,95,105,100,101,110,116,114,88,0,0,0, -- 218,12,95,98,108,111,99,107,105,110,103,95,111,110,218,3, -- 103,101,116,41,4,114,71,0,0,0,218,2,109,101,218,3, -- 116,105,100,114,86,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,12,104,97,115,95,100,101,97, -- 100,108,111,99,107,180,0,0,0,115,18,0,0,0,0,2, -- 12,1,9,1,3,1,15,1,12,1,4,1,9,1,12,1, -- 122,24,95,77,111,100,117,108,101,76,111,99,107,46,104,97, -- 115,95,100,101,97,100,108,111,99,107,99,1,0,0,0,0, -- 0,0,0,2,0,0,0,17,0,0,0,67,0,0,0,115, -- 214,0,0,0,116,0,0,106,1,0,131,0,0,125,1,0, -- 124,0,0,116,2,0,124,1,0,60,122,177,0,120,170,0, -- 124,0,0,106,3,0,143,130,0,1,124,0,0,106,4,0, -- 100,1,0,107,2,0,115,68,0,124,0,0,106,5,0,124, -- 1,0,107,2,0,114,96,0,124,1,0,124,0,0,95,5, -- 0,124,0,0,4,106,4,0,100,2,0,55,2,95,4,0, -- 100,3,0,83,124,0,0,106,6,0,131,0,0,114,127,0, -- 116,7,0,100,4,0,124,0,0,22,131,1,0,130,1,0, -- 110,0,0,124,0,0,106,8,0,106,9,0,100,5,0,131, -- 1,0,114,163,0,124,0,0,4,106,10,0,100,2,0,55, -- 2,95,10,0,110,0,0,87,100,6,0,81,88,124,0,0, -- 106,8,0,106,9,0,131,0,0,1,124,0,0,106,8,0, -- 106,11,0,131,0,0,1,113,28,0,87,100,6,0,116,2, -- 0,124,1,0,61,88,100,6,0,83,41,7,122,185,10,32, -- 32,32,32,32,32,32,32,65,99,113,117,105,114,101,32,116, -- 104,101,32,109,111,100,117,108,101,32,108,111,99,107,46,32, -- 32,73,102,32,97,32,112,111,116,101,110,116,105,97,108,32, -- 100,101,97,100,108,111,99,107,32,105,115,32,100,101,116,101, -- 99,116,101,100,44,10,32,32,32,32,32,32,32,32,97,32, -- 95,68,101,97,100,108,111,99,107,69,114,114,111,114,32,105, -- 115,32,114,97,105,115,101,100,46,10,32,32,32,32,32,32, -- 32,32,79,116,104,101,114,119,105,115,101,44,32,116,104,101, -- 32,108,111,99,107,32,105,115,32,97,108,119,97,121,115,32, -- 97,99,113,117,105,114,101,100,32,97,110,100,32,84,114,117, -- 101,32,105,115,32,114,101,116,117,114,110,101,100,46,10,32, -- 32,32,32,32,32,32,32,114,84,0,0,0,114,29,0,0, -- 0,84,122,23,100,101,97,100,108,111,99,107,32,100,101,116, -- 101,99,116,101,100,32,98,121,32,37,114,70,78,41,12,114, -- 85,0,0,0,114,91,0,0,0,114,92,0,0,0,114,86, -- 0,0,0,114,89,0,0,0,114,88,0,0,0,114,96,0, -- 0,0,114,82,0,0,0,114,87,0,0,0,218,7,97,99, -- 113,117,105,114,101,114,90,0,0,0,218,7,114,101,108,101, -- 97,115,101,41,2,114,71,0,0,0,114,95,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,97, -- 0,0,0,192,0,0,0,115,32,0,0,0,0,6,12,1, -- 10,1,3,1,3,1,10,1,30,1,9,1,15,1,4,1, -- 12,1,19,1,18,1,24,2,13,1,20,2,122,19,95,77, -- 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, -- 101,99,1,0,0,0,0,0,0,0,2,0,0,0,10,0, -- 0,0,67,0,0,0,115,165,0,0,0,116,0,0,106,1, -- 0,131,0,0,125,1,0,124,0,0,106,2,0,143,138,0, -- 1,124,0,0,106,3,0,124,1,0,107,3,0,114,52,0, -- 116,4,0,100,1,0,131,1,0,130,1,0,110,0,0,124, -- 0,0,106,5,0,100,2,0,107,4,0,115,73,0,116,6, -- 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, -- 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, -- 155,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, -- 0,114,155,0,124,0,0,4,106,7,0,100,3,0,56,2, -- 95,7,0,124,0,0,106,8,0,106,9,0,131,0,0,1, -- 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, -- 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, -- 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, -- 108,111,99,107,114,84,0,0,0,114,29,0,0,0,41,10, -- 114,85,0,0,0,114,91,0,0,0,114,86,0,0,0,114, -- 88,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, -- 111,114,114,89,0,0,0,218,14,65,115,115,101,114,116,105, -- 111,110,69,114,114,111,114,114,90,0,0,0,114,87,0,0, -- 0,114,98,0,0,0,41,2,114,71,0,0,0,114,95,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,98,0,0,0,217,0,0,0,115,22,0,0,0,0, -- 1,12,1,10,1,15,1,15,1,21,1,15,1,15,1,9, -- 1,9,1,15,1,122,19,95,77,111,100,117,108,101,76,111, -- 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, -- 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, -- 25,0,0,0,100,1,0,106,0,0,124,0,0,106,1,0, -- 116,2,0,124,0,0,131,1,0,131,2,0,83,41,2,78, -- 122,23,95,77,111,100,117,108,101,76,111,99,107,40,123,33, -- 114,125,41,32,97,116,32,123,125,41,3,114,47,0,0,0, -- 114,67,0,0,0,114,48,0,0,0,41,1,114,71,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,8,95,95,114,101,112,114,95,95,230,0,0,0,115,2, -- 0,0,0,0,1,122,20,95,77,111,100,117,108,101,76,111, -- 99,107,46,95,95,114,101,112,114,95,95,78,41,9,114,57, -- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, -- 0,0,114,72,0,0,0,114,96,0,0,0,114,97,0,0, -- 0,114,98,0,0,0,114,101,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 83,0,0,0,166,0,0,0,115,12,0,0,0,12,4,6, -- 2,12,8,12,12,12,25,12,13,114,83,0,0,0,99,0, -- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, -- 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, -- 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, -- 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, -- 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, -- 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, -- 218,16,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -- 99,107,122,86,65,32,115,105,109,112,108,101,32,95,77,111, -- 100,117,108,101,76,111,99,107,32,101,113,117,105,118,97,108, -- 101,110,116,32,102,111,114,32,80,121,116,104,111,110,32,98, -- 117,105,108,100,115,32,119,105,116,104,111,117,116,10,32,32, -- 32,32,109,117,108,116,105,45,116,104,114,101,97,100,105,110, -- 103,32,115,117,112,112,111,114,116,46,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, -- 22,0,0,0,124,1,0,124,0,0,95,0,0,100,1,0, -- 124,0,0,95,1,0,100,0,0,83,41,2,78,114,84,0, -- 0,0,41,2,114,67,0,0,0,114,89,0,0,0,41,2, -- 114,71,0,0,0,114,67,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,72,0,0,0,238,0, -- 0,0,115,4,0,0,0,0,1,9,1,122,25,95,68,117, -- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, -- 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1, -- 0,0,0,3,0,0,0,67,0,0,0,115,19,0,0,0, -- 124,0,0,4,106,0,0,100,1,0,55,2,95,0,0,100, -- 2,0,83,41,3,78,114,29,0,0,0,84,41,1,114,89, -- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,97,0,0,0,242,0, -- 0,0,115,4,0,0,0,0,1,15,1,122,24,95,68,117, -- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,99, -- 113,117,105,114,101,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,3,0,0,0,67,0,0,0,115,49,0,0,0,124, -- 0,0,106,0,0,100,1,0,107,2,0,114,30,0,116,1, -- 0,100,2,0,131,1,0,130,1,0,110,0,0,124,0,0, -- 4,106,0,0,100,3,0,56,2,95,0,0,100,0,0,83, -- 41,4,78,114,84,0,0,0,122,31,99,97,110,110,111,116, -+ 116,0,0,106,1,0,124,0,0,131,1,0,83,41,1,122, -+ 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, -+ 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, -+ 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, -+ 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, -+ 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, -+ 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, -+ 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, -+ 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,41, -+ 2,114,4,0,0,0,90,4,115,116,97,116,41,1,114,36, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,10,95,112,97,116,104,95,115,116,97,116,68,0, -+ 0,0,115,2,0,0,0,0,7,114,40,0,0,0,99,2, -+ 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,67, -+ 0,0,0,115,58,0,0,0,121,16,0,116,0,0,124,0, -+ 0,131,1,0,125,2,0,87,110,22,0,4,116,1,0,107, -+ 10,0,114,40,0,1,1,1,100,1,0,83,89,110,1,0, -+ 88,124,2,0,106,2,0,100,2,0,64,124,1,0,107,2, -+ 0,83,41,3,122,49,84,101,115,116,32,119,104,101,116,104, -+ 101,114,32,116,104,101,32,112,97,116,104,32,105,115,32,116, -+ 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, -+ 101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,114, -+ 40,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, -+ 116,95,109,111,100,101,41,3,114,36,0,0,0,218,4,109, -+ 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,18,95, -+ 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, -+ 101,78,0,0,0,115,10,0,0,0,0,2,3,1,16,1, -+ 13,1,9,1,114,44,0,0,0,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,13, -+ 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,83, -+ 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, -+ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, -+ 108,101,46,105,0,128,0,0,41,1,114,44,0,0,0,41, -+ 1,114,36,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102, -+ 105,108,101,87,0,0,0,115,2,0,0,0,0,2,114,45, -+ 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, -+ 3,0,0,0,67,0,0,0,115,34,0,0,0,124,0,0, -+ 115,21,0,116,0,0,106,1,0,131,0,0,125,0,0,110, -+ 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, -+ 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, -+ 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, -+ 46,105,0,64,0,0,41,3,114,4,0,0,0,218,6,103, -+ 101,116,99,119,100,114,44,0,0,0,41,1,114,36,0,0, + 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, +- 100,25,0,106,15,0,100,26,0,100,27,0,131,2,0,100, +- 28,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, +- 27,0,131,2,0,90,19,0,100,29,0,90,20,0,100,30, +- 0,90,21,0,100,31,0,103,1,0,90,22,0,100,32,0, ++ 100,26,0,106,15,0,100,27,0,100,28,0,131,2,0,100, ++ 29,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, ++ 28,0,131,2,0,90,19,0,100,30,0,90,20,0,100,31, ++ 0,90,21,0,100,32,0,103,1,0,90,22,0,100,33,0, + 103,1,0,90,23,0,101,23,0,4,90,24,0,90,25,0, +- 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, +- 1,1,90,26,0,100,37,0,100,38,0,132,0,0,90,27, +- 0,100,39,0,100,40,0,132,0,0,90,28,0,100,41,0, +- 100,42,0,132,0,0,90,29,0,100,43,0,100,44,0,132, +- 0,0,90,30,0,100,45,0,100,46,0,100,47,0,100,48, +- 0,132,0,1,90,31,0,100,49,0,100,50,0,132,0,0, +- 90,32,0,100,51,0,100,52,0,132,0,0,90,33,0,100, +- 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, +- 0,90,34,0,100,33,0,100,33,0,100,33,0,100,55,0, +- 100,56,0,132,3,0,90,35,0,100,57,0,100,57,0,100, +- 58,0,100,59,0,132,2,0,90,36,0,100,60,0,100,61, ++ 100,34,0,100,35,0,100,34,0,100,36,0,100,37,0,132, ++ 1,1,90,26,0,100,38,0,100,39,0,132,0,0,90,27, ++ 0,100,40,0,100,41,0,132,0,0,90,28,0,100,42,0, ++ 100,43,0,132,0,0,90,29,0,100,44,0,100,45,0,132, ++ 0,0,90,30,0,100,46,0,100,47,0,100,48,0,100,49, ++ 0,132,0,1,90,31,0,100,50,0,100,51,0,132,0,0, ++ 90,32,0,100,52,0,100,53,0,132,0,0,90,33,0,100, ++ 34,0,100,34,0,100,34,0,100,54,0,100,55,0,132,3, ++ 0,90,34,0,100,34,0,100,34,0,100,34,0,100,56,0, ++ 100,57,0,132,3,0,90,35,0,100,58,0,100,58,0,100, ++ 59,0,100,60,0,132,2,0,90,36,0,100,61,0,100,62, + 0,132,0,0,90,37,0,101,38,0,131,0,0,90,39,0, +- 100,33,0,100,62,0,100,33,0,100,63,0,101,39,0,100, +- 64,0,100,65,0,132,1,2,90,40,0,71,100,66,0,100, +- 67,0,132,0,0,100,67,0,131,2,0,90,41,0,71,100, +- 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,42, +- 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,42, +- 0,131,3,0,90,43,0,71,100,72,0,100,73,0,132,0, +- 0,100,73,0,131,2,0,90,44,0,71,100,74,0,100,75, +- 0,132,0,0,100,75,0,101,44,0,101,43,0,131,4,0, +- 90,45,0,71,100,76,0,100,77,0,132,0,0,100,77,0, ++ 100,34,0,100,63,0,100,34,0,100,64,0,101,39,0,100, ++ 65,0,100,66,0,132,1,2,90,40,0,71,100,67,0,100, ++ 68,0,132,0,0,100,68,0,131,2,0,90,41,0,71,100, ++ 69,0,100,70,0,132,0,0,100,70,0,131,2,0,90,42, ++ 0,71,100,71,0,100,72,0,132,0,0,100,72,0,101,42, ++ 0,131,3,0,90,43,0,71,100,73,0,100,74,0,132,0, ++ 0,100,74,0,131,2,0,90,44,0,71,100,75,0,100,76, ++ 0,132,0,0,100,76,0,101,44,0,101,43,0,131,4,0, ++ 90,45,0,71,100,77,0,100,78,0,132,0,0,100,78,0, + 101,44,0,101,42,0,131,4,0,90,46,0,103,0,0,90, +- 47,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, +- 44,0,101,42,0,131,4,0,90,48,0,71,100,80,0,100, +- 81,0,132,0,0,100,81,0,131,2,0,90,49,0,71,100, +- 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,50, +- 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, +- 0,90,51,0,71,100,86,0,100,87,0,132,0,0,100,87, +- 0,131,2,0,90,52,0,100,33,0,100,88,0,100,89,0, +- 132,1,0,90,53,0,100,90,0,100,91,0,132,0,0,90, +- 54,0,100,92,0,100,93,0,132,0,0,90,55,0,100,94, +- 0,100,95,0,132,0,0,90,56,0,100,33,0,83,41,97, ++ 47,0,71,100,79,0,100,80,0,132,0,0,100,80,0,101, ++ 44,0,101,42,0,131,4,0,90,48,0,71,100,81,0,100, ++ 82,0,132,0,0,100,82,0,131,2,0,90,49,0,71,100, ++ 83,0,100,84,0,132,0,0,100,84,0,131,2,0,90,50, ++ 0,71,100,85,0,100,86,0,132,0,0,100,86,0,131,2, ++ 0,90,51,0,71,100,87,0,100,88,0,132,0,0,100,88, ++ 0,131,2,0,90,52,0,100,34,0,100,89,0,100,90,0, ++ 132,1,0,90,53,0,100,91,0,100,92,0,132,0,0,90, ++ 54,0,100,93,0,100,94,0,132,0,0,90,55,0,100,95, ++ 0,100,96,0,132,0,0,90,56,0,100,34,0,83,41,98, + 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, + 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, +@@ -71,2527 +71,2528 @@ + 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, + 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, + 46,10,10,218,3,119,105,110,218,6,99,121,103,119,105,110, +- 218,6,100,97,114,119,105,110,99,0,0,0,0,0,0,0, +- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,49,0, +- 0,0,116,0,0,106,1,0,106,2,0,116,3,0,131,1, +- 0,114,33,0,100,1,0,100,2,0,132,0,0,125,0,0, +- 110,12,0,100,3,0,100,2,0,132,0,0,125,0,0,124, +- 0,0,83,41,4,78,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,83,0,0,0,115,13,0,0,0, +- 100,1,0,116,0,0,106,1,0,107,6,0,83,41,2,122, ++ 218,6,100,97,114,119,105,110,218,3,105,111,115,99,0,0, ++ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, ++ 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, ++ 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, ++ 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, ++ 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, ++ 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, ++ 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, ++ 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, ++ 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, ++ 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, ++ 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, ++ 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,5, ++ 0,0,0,114,5,0,0,0,250,38,60,102,114,111,122,101, ++ 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, ++ 116,115,116,114,97,112,95,101,120,116,101,114,110,97,108,62, ++ 218,11,95,114,101,108,97,120,95,99,97,115,101,30,0,0, ++ 0,115,2,0,0,0,0,2,122,37,95,109,97,107,101,95, ++ 114,101,108,97,120,95,99,97,115,101,46,60,108,111,99,97, ++ 108,115,62,46,95,114,101,108,97,120,95,99,97,115,101,99, ++ 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, ++ 83,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, + 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, +- 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, +- 78,67,65,83,69,79,75,41,2,218,3,95,111,115,90,7, +- 101,110,118,105,114,111,110,169,0,114,4,0,0,0,114,4, +- 0,0,0,250,38,60,102,114,111,122,101,110,32,105,109,112, +- 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, +- 112,95,101,120,116,101,114,110,97,108,62,218,11,95,114,101, +- 108,97,120,95,99,97,115,101,30,0,0,0,115,2,0,0, +- 0,0,2,122,37,95,109,97,107,101,95,114,101,108,97,120, +- 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, +- 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, +- 4,0,0,0,100,1,0,83,41,2,122,53,84,114,117,101, +- 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, +- 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, +- 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, +- 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, +- 34,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, +- 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, +- 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, +- 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, +- 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, +- 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, +- 0,115,8,0,0,0,0,1,18,1,15,4,12,3,114,11, +- 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, +- 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,0, +- 124,0,0,131,1,0,100,1,0,64,106,1,0,100,2,0, +- 100,3,0,131,2,0,83,41,4,122,42,67,111,110,118,101, +- 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, +- 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, +- 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, +- 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, +- 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, +- 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, +- 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1, +- 0,131,2,0,83,41,2,122,47,67,111,110,118,101,114,116, +- 32,52,32,98,121,116,101,115,32,105,110,32,108,105,116,116, +- 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, +- 105,110,116,101,103,101,114,46,114,13,0,0,0,41,2,114, +- 14,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, +- 41,1,90,9,105,110,116,95,98,121,116,101,115,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,114, +- 95,108,111,110,103,45,0,0,0,115,2,0,0,0,0,2, +- 114,19,0,0,0,99,0,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,71,0,0,0,115,26,0,0,0,116, +- 0,0,106,1,0,100,1,0,100,2,0,132,0,0,124,0, +- 0,68,131,1,0,131,1,0,83,41,3,122,31,82,101,112, +- 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, +- 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, +- 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, +- 0,115,37,0,0,0,103,0,0,124,0,0,93,27,0,125, +- 1,0,124,1,0,114,6,0,124,1,0,106,0,0,116,1, +- 0,131,1,0,145,2,0,113,6,0,83,114,4,0,0,0, +- 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, +- 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, +- 48,218,4,112,97,114,116,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,250,10,60,108,105,115,116,99,111,109, +- 112,62,52,0,0,0,115,2,0,0,0,9,1,122,30,95, +- 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, +- 115,62,46,60,108,105,115,116,99,111,109,112,62,41,2,218, +- 8,112,97,116,104,95,115,101,112,218,4,106,111,105,110,41, +- 1,218,10,112,97,116,104,95,112,97,114,116,115,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,112, +- 97,116,104,95,106,111,105,110,50,0,0,0,115,4,0,0, +- 0,0,2,15,1,114,28,0,0,0,99,1,0,0,0,0, +- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, +- 134,0,0,0,116,0,0,116,1,0,131,1,0,100,1,0, +- 107,2,0,114,52,0,124,0,0,106,2,0,116,3,0,131, ++ 105,118,101,108,121,46,70,114,5,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,11,95,112,97,116,104,95,105,115,100,105,114,92,0,0, -+ 0,115,6,0,0,0,0,2,6,1,15,1,114,47,0,0, -+ 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, -+ 0,0,0,17,0,0,0,67,0,0,0,115,192,0,0,0, -+ 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, -+ 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, -+ 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, -+ 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, -+ 4,0,121,60,0,116,7,0,106,8,0,124,4,0,100,3, -+ 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, -+ 124,1,0,131,1,0,1,87,100,4,0,81,88,116,2,0, -+ 106,10,0,124,3,0,124,0,0,131,2,0,1,87,110,59, -+ 0,4,116,11,0,107,10,0,114,187,0,1,1,1,121,17, -+ 0,116,2,0,106,12,0,124,3,0,131,1,0,1,87,110, -+ 18,0,4,116,11,0,107,10,0,114,179,0,1,1,1,89, -+ 110,1,0,88,130,0,0,89,110,1,0,88,100,4,0,83, -+ 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, -+ 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, -+ 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, -+ 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, -+ 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, -+ 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, -+ 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, -+ 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, -+ 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, -+ 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, -+ 109,112,116,101,100,46,122,5,123,125,46,123,125,105,182,1, -+ 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, -+ 116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110, -+ 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, -+ 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, -+ 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, -+ 7,114,101,112,108,97,99,101,114,41,0,0,0,90,6,117, -+ 110,108,105,110,107,41,6,114,36,0,0,0,218,4,100,97, -+ 116,97,114,43,0,0,0,90,8,112,97,116,104,95,116,109, -+ 112,90,2,102,100,218,4,102,105,108,101,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,13,95,119,114,105, -+ 116,101,95,97,116,111,109,105,99,99,0,0,0,115,26,0, -+ 0,0,0,5,24,1,9,1,33,1,3,3,21,1,19,1, -+ 20,1,13,1,3,1,17,1,13,1,5,1,114,56,0,0, -+ 0,99,2,0,0,0,0,0,0,0,3,0,0,0,7,0, -+ 0,0,67,0,0,0,115,95,0,0,0,120,69,0,100,1, -+ 0,100,2,0,100,3,0,100,4,0,103,4,0,68,93,49, -+ 0,125,2,0,116,0,0,124,1,0,124,2,0,131,2,0, -+ 114,19,0,116,1,0,124,0,0,124,2,0,116,2,0,124, -+ 1,0,124,2,0,131,2,0,131,3,0,1,113,19,0,113, -+ 19,0,87,124,0,0,106,3,0,106,4,0,124,1,0,106, -+ 3,0,131,1,0,1,100,5,0,83,41,6,122,47,83,105, -+ 109,112,108,101,32,115,117,98,115,116,105,116,117,116,101,32, -+ 102,111,114,32,102,117,110,99,116,111,111,108,115,46,117,112, -+ 100,97,116,101,95,119,114,97,112,112,101,114,46,218,10,95, -+ 95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109, -+ 101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95, -+ 95,218,7,95,95,100,111,99,95,95,78,41,5,218,7,104, -+ 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, -+ 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, -+ 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, -+ 119,90,3,111,108,100,114,53,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,5,95,119,114,97, -+ 112,121,0,0,0,115,8,0,0,0,0,2,25,1,15,1, -+ 32,1,114,66,0,0,0,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -+ 0,116,0,0,116,1,0,131,1,0,124,0,0,131,1,0, -+ 83,41,1,78,41,2,218,4,116,121,112,101,114,8,0,0, -+ 0,41,1,218,4,110,97,109,101,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,11,95,110,101,119,95,109, -+ 111,100,117,108,101,129,0,0,0,115,2,0,0,0,0,1, -+ 114,69,0,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,58,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, -+ 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132, -+ 0,0,90,6,0,100,8,0,83,41,9,218,13,95,77,97, -+ 110,97,103,101,82,101,108,111,97,100,122,63,77,97,110,97, -+ 103,101,115,32,116,104,101,32,112,111,115,115,105,98,108,101, -+ 32,99,108,101,97,110,45,117,112,32,111,102,32,115,121,115, -+ 46,109,111,100,117,108,101,115,32,102,111,114,32,108,111,97, -+ 100,95,109,111,100,117,108,101,40,41,46,99,2,0,0,0, -+ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -+ 115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0, -+ 0,83,41,1,78,41,1,218,5,95,110,97,109,101,41,2, -+ 218,4,115,101,108,102,114,68,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,105,110, -+ 105,116,95,95,141,0,0,0,115,2,0,0,0,0,1,122, -+ 22,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, -+ 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,25,0,0, -+ 0,124,0,0,106,0,0,116,1,0,106,2,0,107,6,0, -+ 124,0,0,95,3,0,100,0,0,83,41,1,78,41,4,114, -+ 71,0,0,0,114,8,0,0,0,218,7,109,111,100,117,108, -+ 101,115,218,10,95,105,115,95,114,101,108,111,97,100,41,1, -+ 114,72,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,9,95,95,101,110,116,101,114,95,95,144, -+ 0,0,0,115,2,0,0,0,0,1,122,23,95,77,97,110, -+ 97,103,101,82,101,108,111,97,100,46,95,95,101,110,116,101, -+ 114,95,95,99,1,0,0,0,0,0,0,0,2,0,0,0, -+ 11,0,0,0,71,0,0,0,115,80,0,0,0,116,0,0, -+ 100,1,0,100,2,0,132,0,0,124,1,0,68,131,1,0, -+ 131,1,0,114,76,0,124,0,0,106,1,0,12,114,76,0, -+ 121,17,0,116,2,0,106,3,0,124,0,0,106,4,0,61, -+ 87,113,76,0,4,116,5,0,107,10,0,114,72,0,1,1, -+ 1,89,113,76,0,88,110,0,0,100,0,0,83,41,3,78, -+ 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, -+ 0,115,0,0,0,115,27,0,0,0,124,0,0,93,17,0, -+ 125,1,0,124,1,0,100,0,0,107,9,0,86,1,113,3, -+ 0,100,0,0,83,41,1,78,114,5,0,0,0,41,2,114, -+ 23,0,0,0,218,3,97,114,103,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,250,9,60,103,101,110,101,120, -+ 112,114,62,148,0,0,0,115,2,0,0,0,6,0,122,41, -+ 95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,95, -+ 101,120,105,116,95,95,46,60,108,111,99,97,108,115,62,46, -+ 60,103,101,110,101,120,112,114,62,41,6,218,3,97,110,121, -+ 114,75,0,0,0,114,8,0,0,0,114,74,0,0,0,114, -+ 71,0,0,0,218,8,75,101,121,69,114,114,111,114,41,2, -+ 114,72,0,0,0,218,4,97,114,103,115,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,101,120, -+ 105,116,95,95,147,0,0,0,115,10,0,0,0,0,1,35, -+ 1,3,1,17,1,13,1,122,22,95,77,97,110,97,103,101, -+ 82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78, -+ 41,7,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,114,73,0,0,0,114,76,0,0,0, -+ 114,82,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,70,0,0,0,137,0, -+ 0,0,115,8,0,0,0,12,2,6,2,12,3,12,3,114, -+ 70,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -+ 0,1,0,0,0,64,0,0,0,115,16,0,0,0,101,0, -+ 0,90,1,0,100,0,0,90,2,0,100,1,0,83,41,2, -+ 218,14,95,68,101,97,100,108,111,99,107,69,114,114,111,114, -+ 78,41,3,114,58,0,0,0,114,57,0,0,0,114,59,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,83,0,0,0,162,0,0,0,115, -+ 2,0,0,0,12,1,114,83,0,0,0,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, -+ 115,82,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -+ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -+ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -+ 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, -+ 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, -+ 90,8,0,100,12,0,83,41,13,218,11,95,77,111,100,117, -+ 108,101,76,111,99,107,122,169,65,32,114,101,99,117,114,115, -+ 105,118,101,32,108,111,99,107,32,105,109,112,108,101,109,101, -+ 110,116,97,116,105,111,110,32,119,104,105,99,104,32,105,115, -+ 32,97,98,108,101,32,116,111,32,100,101,116,101,99,116,32, -+ 100,101,97,100,108,111,99,107,115,10,32,32,32,32,40,101, -+ 46,103,46,32,116,104,114,101,97,100,32,49,32,116,114,121, -+ 105,110,103,32,116,111,32,116,97,107,101,32,108,111,99,107, -+ 115,32,65,32,116,104,101,110,32,66,44,32,97,110,100,32, -+ 116,104,114,101,97,100,32,50,32,116,114,121,105,110,103,32, -+ 116,111,10,32,32,32,32,116,97,107,101,32,108,111,99,107, -+ 115,32,66,32,116,104,101,110,32,65,41,46,10,32,32,32, -+ 32,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,70,0,0,0,116,0,0,106,1, -+ 0,131,0,0,124,0,0,95,2,0,116,0,0,106,1,0, -+ 131,0,0,124,0,0,95,3,0,124,1,0,124,0,0,95, -+ 4,0,100,0,0,124,0,0,95,5,0,100,1,0,124,0, -+ 0,95,6,0,100,1,0,124,0,0,95,7,0,100,0,0, -+ 83,41,2,78,233,0,0,0,0,41,8,218,7,95,116,104, -+ 114,101,97,100,90,13,97,108,108,111,99,97,116,101,95,108, -+ 111,99,107,218,4,108,111,99,107,218,6,119,97,107,101,117, -+ 112,114,68,0,0,0,218,5,111,119,110,101,114,218,5,99, -+ 111,117,110,116,218,7,119,97,105,116,101,114,115,41,2,114, -+ 72,0,0,0,114,68,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,172,0,0, -+ 0,115,12,0,0,0,0,1,15,1,15,1,9,1,9,1, -+ 9,1,122,20,95,77,111,100,117,108,101,76,111,99,107,46, -+ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, -+ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,87,0, -+ 0,0,116,0,0,106,1,0,131,0,0,125,1,0,124,0, -+ 0,106,2,0,125,2,0,120,59,0,116,3,0,106,4,0, -+ 124,2,0,131,1,0,125,3,0,124,3,0,100,0,0,107, -+ 8,0,114,55,0,100,1,0,83,124,3,0,106,2,0,125, -+ 2,0,124,2,0,124,1,0,107,2,0,114,24,0,100,2, -+ 0,83,113,24,0,100,0,0,83,41,3,78,70,84,41,5, -+ 114,86,0,0,0,218,9,103,101,116,95,105,100,101,110,116, -+ 114,89,0,0,0,218,12,95,98,108,111,99,107,105,110,103, -+ 95,111,110,218,3,103,101,116,41,4,114,72,0,0,0,218, -+ 2,109,101,218,3,116,105,100,114,87,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,12,104,97, -+ 115,95,100,101,97,100,108,111,99,107,180,0,0,0,115,18, -+ 0,0,0,0,2,12,1,9,1,3,1,15,1,12,1,4, -+ 1,9,1,12,1,122,24,95,77,111,100,117,108,101,76,111, -+ 99,107,46,104,97,115,95,100,101,97,100,108,111,99,107,99, -+ 1,0,0,0,0,0,0,0,2,0,0,0,16,0,0,0, -+ 67,0,0,0,115,214,0,0,0,116,0,0,106,1,0,131, -+ 0,0,125,1,0,124,0,0,116,2,0,124,1,0,60,122, -+ 177,0,120,170,0,124,0,0,106,3,0,143,130,0,1,124, -+ 0,0,106,4,0,100,1,0,107,2,0,115,68,0,124,0, -+ 0,106,5,0,124,1,0,107,2,0,114,96,0,124,1,0, -+ 124,0,0,95,5,0,124,0,0,4,106,4,0,100,2,0, -+ 55,2,95,4,0,100,3,0,83,124,0,0,106,6,0,131, -+ 0,0,114,127,0,116,7,0,100,4,0,124,0,0,22,131, -+ 1,0,130,1,0,110,0,0,124,0,0,106,8,0,106,9, -+ 0,100,5,0,131,1,0,114,163,0,124,0,0,4,106,10, -+ 0,100,2,0,55,2,95,10,0,110,0,0,87,100,6,0, -+ 81,88,124,0,0,106,8,0,106,9,0,131,0,0,1,124, -+ 0,0,106,8,0,106,11,0,131,0,0,1,113,28,0,87, -+ 100,6,0,116,2,0,124,1,0,61,88,100,6,0,83,41, -+ 7,122,185,10,32,32,32,32,32,32,32,32,65,99,113,117, -+ 105,114,101,32,116,104,101,32,109,111,100,117,108,101,32,108, -+ 111,99,107,46,32,32,73,102,32,97,32,112,111,116,101,110, -+ 116,105,97,108,32,100,101,97,100,108,111,99,107,32,105,115, -+ 32,100,101,116,101,99,116,101,100,44,10,32,32,32,32,32, -+ 32,32,32,97,32,95,68,101,97,100,108,111,99,107,69,114, -+ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,32, -+ 32,32,32,32,32,32,32,79,116,104,101,114,119,105,115,101, -+ 44,32,116,104,101,32,108,111,99,107,32,105,115,32,97,108, -+ 119,97,121,115,32,97,99,113,117,105,114,101,100,32,97,110, -+ 100,32,84,114,117,101,32,105,115,32,114,101,116,117,114,110, -+ 101,100,46,10,32,32,32,32,32,32,32,32,114,85,0,0, -+ 0,114,30,0,0,0,84,122,23,100,101,97,100,108,111,99, -+ 107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114, -+ 70,78,41,12,114,86,0,0,0,114,92,0,0,0,114,93, -+ 0,0,0,114,87,0,0,0,114,90,0,0,0,114,89,0, -+ 0,0,114,97,0,0,0,114,83,0,0,0,114,88,0,0, -+ 0,218,7,97,99,113,117,105,114,101,114,91,0,0,0,218, -+ 7,114,101,108,101,97,115,101,41,2,114,72,0,0,0,114, -+ 96,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,98,0,0,0,192,0,0,0,115,32,0,0, -+ 0,0,6,12,1,10,1,3,1,3,1,10,1,30,1,9, -+ 1,15,1,4,1,12,1,19,1,18,1,24,2,13,1,20, -+ 2,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97, -+ 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,10,0,0,0,67,0,0,0,115,165,0,0,0, -+ 116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,106, -+ 2,0,143,138,0,1,124,0,0,106,3,0,124,1,0,107, -+ 3,0,114,52,0,116,4,0,100,1,0,131,1,0,130,1, -+ 0,110,0,0,124,0,0,106,5,0,100,2,0,107,4,0, -+ 115,73,0,116,6,0,130,1,0,124,0,0,4,106,5,0, -+ 100,3,0,56,2,95,5,0,124,0,0,106,5,0,100,2, -+ 0,107,2,0,114,155,0,100,0,0,124,0,0,95,3,0, -+ 124,0,0,106,7,0,114,155,0,124,0,0,4,106,7,0, -+ 100,3,0,56,2,95,7,0,124,0,0,106,8,0,106,9, -+ 0,131,0,0,1,113,155,0,110,0,0,87,100,0,0,81, -+ 88,100,0,0,83,41,4,78,122,31,99,97,110,110,111,116, - 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, -- 105,114,101,100,32,108,111,99,107,114,29,0,0,0,41,2, -- 114,89,0,0,0,114,99,0,0,0,41,1,114,71,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,98,0,0,0,246,0,0,0,115,6,0,0,0,0,1, -- 15,1,15,1,122,24,95,68,117,109,109,121,77,111,100,117, -- 108,101,76,111,99,107,46,114,101,108,101,97,115,101,99,1, -- 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, -- 0,0,0,115,25,0,0,0,100,1,0,106,0,0,124,0, -- 0,106,1,0,116,2,0,124,0,0,131,1,0,131,2,0, -- 83,41,2,78,122,28,95,68,117,109,109,121,77,111,100,117, -- 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, -- 123,125,41,3,114,47,0,0,0,114,67,0,0,0,114,48, -- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,101,0,0,0,251,0, -- 0,0,115,2,0,0,0,0,1,122,25,95,68,117,109,109, -- 121,77,111,100,117,108,101,76,111,99,107,46,95,95,114,101, -- 112,114,95,95,78,41,8,114,57,0,0,0,114,56,0,0, -- 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, -- 114,97,0,0,0,114,98,0,0,0,114,101,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,102,0,0,0,234,0,0,0,115,10,0,0, -- 0,12,2,6,2,12,4,12,4,12,5,114,102,0,0,0, -- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,52,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, -- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, -- 0,100,6,0,132,0,0,90,5,0,100,7,0,83,41,8, -- 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, -- 97,103,101,114,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1, -- 0,124,0,0,95,0,0,100,0,0,124,0,0,95,1,0, -- 100,0,0,83,41,1,78,41,2,114,70,0,0,0,218,5, -- 95,108,111,99,107,41,2,114,71,0,0,0,114,67,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,72,0,0,0,1,1,0,0,115,4,0,0,0,0,1, -- 9,1,122,27,95,77,111,100,117,108,101,76,111,99,107,77, -- 97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,99, -- 1,0,0,0,0,0,0,0,1,0,0,0,10,0,0,0, -- 67,0,0,0,115,53,0,0,0,122,22,0,116,0,0,124, -- 0,0,106,1,0,131,1,0,124,0,0,95,2,0,87,100, -- 0,0,116,3,0,106,4,0,131,0,0,1,88,124,0,0, -- 106,2,0,106,5,0,131,0,0,1,100,0,0,83,41,1, -- 78,41,6,218,16,95,103,101,116,95,109,111,100,117,108,101, -- 95,108,111,99,107,114,70,0,0,0,114,104,0,0,0,218, -- 4,95,105,109,112,218,12,114,101,108,101,97,115,101,95,108, -- 111,99,107,114,97,0,0,0,41,1,114,71,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,75, -- 0,0,0,5,1,0,0,115,8,0,0,0,0,1,3,1, -- 22,2,11,1,122,28,95,77,111,100,117,108,101,76,111,99, -- 107,77,97,110,97,103,101,114,46,95,95,101,110,116,101,114, -- 95,95,99,1,0,0,0,0,0,0,0,3,0,0,0,1, -- 0,0,0,79,0,0,0,115,17,0,0,0,124,0,0,106, -- 0,0,106,1,0,131,0,0,1,100,0,0,83,41,1,78, -- 41,2,114,104,0,0,0,114,98,0,0,0,41,3,114,71, -- 0,0,0,114,80,0,0,0,218,6,107,119,97,114,103,115, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 81,0,0,0,12,1,0,0,115,2,0,0,0,0,1,122, -- 27,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, -- 103,101,114,46,95,95,101,120,105,116,95,95,78,41,6,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, -- 0,0,0,114,75,0,0,0,114,81,0,0,0,114,4,0, ++ 114,7,0,0,0,34,0,0,0,115,2,0,0,0,0,2, ++ 41,4,218,3,115,121,115,218,8,112,108,97,116,102,111,114, ++ 109,218,10,115,116,97,114,116,115,119,105,116,104,218,27,95, ++ 67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,69, ++ 95,80,76,65,84,70,79,82,77,83,41,1,114,7,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, ++ 115,101,28,0,0,0,115,8,0,0,0,0,1,18,1,15, ++ 4,12,3,114,12,0,0,0,99,1,0,0,0,0,0,0, ++ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, ++ 0,0,116,0,0,124,0,0,131,1,0,100,1,0,64,106, ++ 1,0,100,2,0,100,3,0,131,2,0,83,41,4,122,42, ++ 67,111,110,118,101,114,116,32,97,32,51,50,45,98,105,116, ++ 32,105,110,116,101,103,101,114,32,116,111,32,108,105,116,116, ++ 108,101,45,101,110,100,105,97,110,46,108,3,0,0,0,255, ++ 127,255,127,3,0,233,4,0,0,0,218,6,108,105,116,116, ++ 108,101,41,2,218,3,105,110,116,218,8,116,111,95,98,121, ++ 116,101,115,41,1,218,1,120,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,7,95,119,95,108,111,110,103, ++ 40,0,0,0,115,2,0,0,0,0,2,114,18,0,0,0, ++ 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, ++ 0,67,0,0,0,115,16,0,0,0,116,0,0,106,1,0, ++ 124,0,0,100,1,0,131,2,0,83,41,2,122,47,67,111, ++ 110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,110, ++ 32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,116, ++ 111,32,97,110,32,105,110,116,101,103,101,114,46,114,14,0, ++ 0,0,41,2,114,15,0,0,0,218,10,102,114,111,109,95, ++ 98,121,116,101,115,41,1,90,9,105,110,116,95,98,121,116, ++ 101,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,7,95,114,95,108,111,110,103,45,0,0,0,115,2, ++ 0,0,0,0,2,114,20,0,0,0,99,0,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,71,0,0,0,115, ++ 26,0,0,0,116,0,0,106,1,0,100,1,0,100,2,0, ++ 132,0,0,124,0,0,68,131,1,0,131,1,0,83,41,3, ++ 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111, ++ 114,32,111,115,46,112,97,116,104,46,106,111,105,110,40,41, ++ 46,99,1,0,0,0,0,0,0,0,2,0,0,0,4,0, ++ 0,0,83,0,0,0,115,37,0,0,0,103,0,0,124,0, ++ 0,93,27,0,125,1,0,124,1,0,114,6,0,124,1,0, ++ 106,0,0,116,1,0,131,1,0,145,2,0,113,6,0,83, ++ 114,5,0,0,0,41,2,218,6,114,115,116,114,105,112,218, ++ 15,112,97,116,104,95,115,101,112,97,114,97,116,111,114,115, ++ 41,2,218,2,46,48,218,4,112,97,114,116,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,250,10,60,108,105, ++ 115,116,99,111,109,112,62,52,0,0,0,115,2,0,0,0, ++ 9,1,122,30,95,112,97,116,104,95,106,111,105,110,46,60, ++ 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, ++ 112,62,41,2,218,8,112,97,116,104,95,115,101,112,218,4, ++ 106,111,105,110,41,1,218,10,112,97,116,104,95,112,97,114, ++ 116,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,10,95,112,97,116,104,95,106,111,105,110,50,0,0, ++ 0,115,4,0,0,0,0,2,15,1,114,29,0,0,0,99, ++ 1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, ++ 67,0,0,0,115,134,0,0,0,116,0,0,116,1,0,131, ++ 1,0,100,1,0,107,2,0,114,52,0,124,0,0,106,2, ++ 0,116,3,0,131,1,0,92,3,0,125,1,0,125,2,0, ++ 125,3,0,124,1,0,124,3,0,102,2,0,83,120,69,0, ++ 116,4,0,124,0,0,131,1,0,68,93,55,0,125,4,0, ++ 124,4,0,116,1,0,107,6,0,114,65,0,124,0,0,106, ++ 5,0,124,4,0,100,2,0,100,1,0,131,1,1,92,2, ++ 0,125,1,0,125,3,0,124,1,0,124,3,0,102,2,0, ++ 83,113,65,0,87,100,3,0,124,0,0,102,2,0,83,41, ++ 4,122,32,82,101,112,108,97,99,101,109,101,110,116,32,102, ++ 111,114,32,111,115,46,112,97,116,104,46,115,112,108,105,116, ++ 40,41,46,233,1,0,0,0,90,8,109,97,120,115,112,108, ++ 105,116,218,0,41,6,218,3,108,101,110,114,22,0,0,0, ++ 218,10,114,112,97,114,116,105,116,105,111,110,114,26,0,0, ++ 0,218,8,114,101,118,101,114,115,101,100,218,6,114,115,112, ++ 108,105,116,41,5,218,4,112,97,116,104,90,5,102,114,111, ++ 110,116,218,1,95,218,4,116,97,105,108,114,17,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 11,95,112,97,116,104,95,115,112,108,105,116,56,0,0,0, ++ 115,16,0,0,0,0,2,18,1,24,1,10,1,19,1,12, ++ 1,27,1,14,1,114,39,0,0,0,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, ++ 13,0,0,0,116,0,0,106,1,0,124,0,0,131,1,0, ++ 83,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97, ++ 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, ++ 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, ++ 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, ++ 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, ++ 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, ++ 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, ++ 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, ++ 32,32,32,41,2,114,4,0,0,0,90,4,115,116,97,116, ++ 41,1,114,36,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,218,10,95,112,97,116,104,95,115,116, ++ 97,116,68,0,0,0,115,2,0,0,0,0,7,114,40,0, ++ 0,0,99,2,0,0,0,0,0,0,0,3,0,0,0,11, ++ 0,0,0,67,0,0,0,115,58,0,0,0,121,16,0,116, ++ 0,0,124,0,0,131,1,0,125,2,0,87,110,22,0,4, ++ 116,1,0,107,10,0,114,40,0,1,1,1,100,1,0,83, ++ 89,110,1,0,88,124,2,0,106,2,0,100,2,0,64,124, ++ 1,0,107,2,0,83,41,3,122,49,84,101,115,116,32,119, ++ 104,101,116,104,101,114,32,116,104,101,32,112,97,116,104,32, ++ 105,115,32,116,104,101,32,115,112,101,99,105,102,105,101,100, ++ 32,109,111,100,101,32,116,121,112,101,46,70,105,0,240,0, ++ 0,41,3,114,40,0,0,0,218,7,79,83,69,114,114,111, ++ 114,218,7,115,116,95,109,111,100,101,41,3,114,36,0,0, ++ 0,218,4,109,111,100,101,90,9,115,116,97,116,95,105,110, ++ 102,111,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,18,95,112,97,116,104,95,105,115,95,109,111,100,101, ++ 95,116,121,112,101,78,0,0,0,115,10,0,0,0,0,2, ++ 3,1,16,1,13,1,9,1,114,44,0,0,0,99,1,0, ++ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, ++ 0,0,115,13,0,0,0,116,0,0,124,0,0,100,1,0, ++ 131,2,0,83,41,2,122,31,82,101,112,108,97,99,101,109, ++ 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, ++ 105,115,102,105,108,101,46,105,0,128,0,0,41,1,114,44, ++ 0,0,0,41,1,114,36,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,12,95,112,97,116,104, ++ 95,105,115,102,105,108,101,87,0,0,0,115,2,0,0,0, ++ 0,2,114,45,0,0,0,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,3,0,0,0,67,0,0,0,115,31,0,0, ++ 0,124,0,0,115,18,0,116,0,0,106,1,0,131,0,0, ++ 125,0,0,116,2,0,124,0,0,100,1,0,131,2,0,83, ++ 41,2,122,30,82,101,112,108,97,99,101,109,101,110,116,32, ++ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,100,105, ++ 114,46,105,0,64,0,0,41,3,114,4,0,0,0,218,6, ++ 103,101,116,99,119,100,114,44,0,0,0,41,1,114,36,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,11,95,112,97,116,104,95,105,115,100,105,114,92,0, ++ 0,0,115,6,0,0,0,0,2,6,1,12,1,114,47,0, ++ 0,0,105,182,1,0,0,99,3,0,0,0,0,0,0,0, ++ 6,0,0,0,17,0,0,0,67,0,0,0,115,193,0,0, ++ 0,100,1,0,106,0,0,124,0,0,116,1,0,124,0,0, ++ 131,1,0,131,2,0,125,3,0,116,2,0,106,3,0,124, ++ 3,0,116,2,0,106,4,0,116,2,0,106,5,0,66,116, ++ 2,0,106,6,0,66,124,2,0,100,2,0,64,131,3,0, ++ 125,4,0,121,61,0,116,7,0,106,8,0,124,4,0,100, ++ 3,0,131,2,0,143,20,0,125,5,0,124,5,0,106,9, ++ 0,124,1,0,131,1,0,1,87,100,4,0,81,82,88,116, ++ 2,0,106,10,0,124,3,0,124,0,0,131,2,0,1,87, ++ 110,59,0,4,116,11,0,107,10,0,114,188,0,1,1,1, ++ 121,17,0,116,2,0,106,12,0,124,3,0,131,1,0,1, ++ 87,110,18,0,4,116,11,0,107,10,0,114,180,0,1,1, ++ 1,89,110,1,0,88,130,0,0,89,110,1,0,88,100,4, ++ 0,83,41,5,122,162,66,101,115,116,45,101,102,102,111,114, ++ 116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,114, ++ 105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,97, ++ 116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,32, ++ 32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,116, ++ 111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,69, ++ 120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,111, ++ 110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,103, ++ 32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,112, ++ 111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,116, ++ 116,101,109,112,116,101,100,46,122,5,123,125,46,123,125,105, ++ 182,1,0,0,90,2,119,98,78,41,13,218,6,102,111,114, ++ 109,97,116,218,2,105,100,114,4,0,0,0,90,4,111,112, ++ 101,110,90,6,79,95,69,88,67,76,90,7,79,95,67,82, ++ 69,65,84,90,8,79,95,87,82,79,78,76,89,218,3,95, ++ 105,111,218,6,70,105,108,101,73,79,218,5,119,114,105,116, ++ 101,218,7,114,101,112,108,97,99,101,114,41,0,0,0,90, ++ 6,117,110,108,105,110,107,41,6,114,36,0,0,0,218,4, ++ 100,97,116,97,114,43,0,0,0,90,8,112,97,116,104,95, ++ 116,109,112,90,2,102,100,218,4,102,105,108,101,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,13,95,119, ++ 114,105,116,101,95,97,116,111,109,105,99,99,0,0,0,115, ++ 26,0,0,0,0,5,24,1,9,1,33,1,3,3,21,1, ++ 20,1,20,1,13,1,3,1,17,1,13,1,5,1,114,56, ++ 0,0,0,105,22,13,0,0,233,2,0,0,0,114,14,0, ++ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, ++ 97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112, ++ 121,122,4,46,112,121,99,78,218,12,111,112,116,105,109,105, ++ 122,97,116,105,111,110,99,2,0,0,0,1,0,0,0,11, ++ 0,0,0,6,0,0,0,67,0,0,0,115,87,1,0,0, ++ 124,1,0,100,1,0,107,9,0,114,76,0,116,0,0,106, ++ 1,0,100,2,0,116,2,0,131,2,0,1,124,2,0,100, ++ 1,0,107,9,0,114,58,0,100,3,0,125,3,0,116,3, ++ 0,124,3,0,131,1,0,130,1,0,124,1,0,114,70,0, ++ 100,4,0,110,3,0,100,5,0,125,2,0,116,4,0,124, ++ 0,0,131,1,0,92,2,0,125,4,0,125,5,0,124,5, ++ 0,106,5,0,100,6,0,131,1,0,92,3,0,125,6,0, ++ 125,7,0,125,8,0,116,6,0,106,7,0,106,8,0,125, ++ 9,0,124,9,0,100,1,0,107,8,0,114,154,0,116,9, ++ 0,100,7,0,131,1,0,130,1,0,100,4,0,106,10,0, ++ 124,6,0,114,172,0,124,6,0,110,3,0,124,8,0,124, ++ 7,0,124,9,0,103,3,0,131,1,0,125,10,0,124,2, ++ 0,100,1,0,107,8,0,114,241,0,116,6,0,106,11,0, ++ 106,12,0,100,8,0,107,2,0,114,229,0,100,4,0,125, ++ 2,0,110,12,0,116,6,0,106,11,0,106,12,0,125,2, ++ 0,116,13,0,124,2,0,131,1,0,125,2,0,124,2,0, ++ 100,4,0,107,3,0,114,63,1,124,2,0,106,14,0,131, ++ 0,0,115,42,1,116,15,0,100,9,0,106,16,0,124,2, ++ 0,131,1,0,131,1,0,130,1,0,100,10,0,106,16,0, ++ 124,10,0,116,17,0,124,2,0,131,3,0,125,10,0,116, ++ 18,0,124,4,0,116,19,0,124,10,0,116,20,0,100,8, ++ 0,25,23,131,3,0,83,41,11,97,254,2,0,0,71,105, ++ 118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32, ++ 97,32,46,112,121,32,102,105,108,101,44,32,114,101,116,117, ++ 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105, ++ 116,115,32,46,112,121,99,32,102,105,108,101,46,10,10,32, ++ 32,32,32,84,104,101,32,46,112,121,32,102,105,108,101,32, ++ 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, ++ 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, ++ 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,116,104,101,10,32,32,32,32, ++ 46,112,121,99,32,102,105,108,101,32,99,97,108,99,117,108, ++ 97,116,101,100,32,97,115,32,105,102,32,116,104,101,32,46, ++ 112,121,32,102,105,108,101,32,119,101,114,101,32,105,109,112, ++ 111,114,116,101,100,46,10,10,32,32,32,32,84,104,101,32, ++ 39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,112, ++ 97,114,97,109,101,116,101,114,32,99,111,110,116,114,111,108, ++ 115,32,116,104,101,32,112,114,101,115,117,109,101,100,32,111, ++ 112,116,105,109,105,122,97,116,105,111,110,32,108,101,118,101, ++ 108,32,111,102,10,32,32,32,32,116,104,101,32,98,121,116, ++ 101,99,111,100,101,32,102,105,108,101,46,32,73,102,32,39, ++ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,105,115, ++ 32,110,111,116,32,78,111,110,101,44,32,116,104,101,32,115, ++ 116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97, ++ 116,105,111,110,10,32,32,32,32,111,102,32,116,104,101,32, ++ 97,114,103,117,109,101,110,116,32,105,115,32,116,97,107,101, ++ 110,32,97,110,100,32,118,101,114,105,102,105,101,100,32,116, ++ 111,32,98,101,32,97,108,112,104,97,110,117,109,101,114,105, ++ 99,32,40,101,108,115,101,32,86,97,108,117,101,69,114,114, ++ 111,114,10,32,32,32,32,105,115,32,114,97,105,115,101,100, ++ 41,46,10,10,32,32,32,32,84,104,101,32,100,101,98,117, ++ 103,95,111,118,101,114,114,105,100,101,32,112,97,114,97,109, ++ 101,116,101,114,32,105,115,32,100,101,112,114,101,99,97,116, ++ 101,100,46,32,73,102,32,100,101,98,117,103,95,111,118,101, ++ 114,114,105,100,101,32,105,115,32,110,111,116,32,78,111,110, ++ 101,44,10,32,32,32,32,97,32,84,114,117,101,32,118,97, ++ 108,117,101,32,105,115,32,116,104,101,32,115,97,109,101,32, ++ 97,115,32,115,101,116,116,105,110,103,32,39,111,112,116,105, ++ 109,105,122,97,116,105,111,110,39,32,116,111,32,116,104,101, ++ 32,101,109,112,116,121,32,115,116,114,105,110,103,10,32,32, ++ 32,32,119,104,105,108,101,32,97,32,70,97,108,115,101,32, ++ 118,97,108,117,101,32,105,115,32,101,113,117,105,118,97,108, ++ 101,110,116,32,116,111,32,115,101,116,116,105,110,103,32,39, ++ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,116,111, ++ 32,39,49,39,46,10,10,32,32,32,32,73,102,32,115,121, ++ 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, ++ 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, ++ 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, ++ 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, ++ 97,105,115,101,100,46,10,10,32,32,32,32,78,122,70,116, ++ 104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,100, ++ 101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,59,32,117,115,101,32,39, ++ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,105,110, ++ 115,116,101,97,100,122,50,100,101,98,117,103,95,111,118,101, ++ 114,114,105,100,101,32,111,114,32,111,112,116,105,109,105,122, ++ 97,116,105,111,110,32,109,117,115,116,32,98,101,32,115,101, ++ 116,32,116,111,32,78,111,110,101,114,31,0,0,0,114,30, ++ 0,0,0,218,1,46,122,36,115,121,115,46,105,109,112,108, ++ 101,109,101,110,116,97,116,105,111,110,46,99,97,99,104,101, ++ 95,116,97,103,32,105,115,32,78,111,110,101,233,0,0,0, ++ 0,122,24,123,33,114,125,32,105,115,32,110,111,116,32,97, ++ 108,112,104,97,110,117,109,101,114,105,99,122,7,123,125,46, ++ 123,125,123,125,41,21,218,9,95,119,97,114,110,105,110,103, ++ 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, ++ 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, ++ 101,69,114,114,111,114,114,39,0,0,0,114,33,0,0,0, ++ 114,8,0,0,0,218,14,105,109,112,108,101,109,101,110,116, ++ 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103, ++ 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, ++ 69,114,114,111,114,114,27,0,0,0,218,5,102,108,97,103, ++ 115,218,8,111,112,116,105,109,105,122,101,218,3,115,116,114, ++ 218,7,105,115,97,108,110,117,109,218,10,86,97,108,117,101, ++ 69,114,114,111,114,114,48,0,0,0,218,4,95,79,80,84, ++ 114,29,0,0,0,218,8,95,80,89,67,65,67,72,69,218, ++ 17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, ++ 69,83,41,11,114,36,0,0,0,90,14,100,101,98,117,103, ++ 95,111,118,101,114,114,105,100,101,114,58,0,0,0,218,7, ++ 109,101,115,115,97,103,101,218,4,104,101,97,100,114,38,0, ++ 0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,114, ++ 101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,116, ++ 95,102,105,108,101,110,97,109,101,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,17,99,97,99,104,101,95, ++ 102,114,111,109,95,115,111,117,114,99,101,243,0,0,0,115, ++ 46,0,0,0,0,18,12,1,9,1,7,1,12,1,6,1, ++ 12,1,18,1,18,1,24,1,12,1,12,1,12,1,36,1, ++ 12,1,18,1,9,2,12,1,12,1,12,1,12,1,21,1, ++ 21,1,114,80,0,0,0,99,1,0,0,0,0,0,0,0, ++ 8,0,0,0,5,0,0,0,67,0,0,0,115,62,1,0, ++ 0,116,0,0,106,1,0,106,2,0,100,1,0,107,8,0, ++ 114,30,0,116,3,0,100,2,0,131,1,0,130,1,0,116, ++ 4,0,124,0,0,131,1,0,92,2,0,125,1,0,125,2, ++ 0,116,4,0,124,1,0,131,1,0,92,2,0,125,1,0, ++ 125,3,0,124,3,0,116,5,0,107,3,0,114,102,0,116, ++ 6,0,100,3,0,106,7,0,116,5,0,124,0,0,131,2, ++ 0,131,1,0,130,1,0,124,2,0,106,8,0,100,4,0, ++ 131,1,0,125,4,0,124,4,0,100,11,0,107,7,0,114, ++ 153,0,116,6,0,100,7,0,106,7,0,124,2,0,131,1, ++ 0,131,1,0,130,1,0,110,125,0,124,4,0,100,6,0, ++ 107,2,0,114,22,1,124,2,0,106,9,0,100,4,0,100, ++ 5,0,131,2,0,100,12,0,25,125,5,0,124,5,0,106, ++ 10,0,116,11,0,131,1,0,115,223,0,116,6,0,100,8, ++ 0,106,7,0,116,11,0,131,1,0,131,1,0,130,1,0, ++ 124,5,0,116,12,0,116,11,0,131,1,0,100,1,0,133, ++ 2,0,25,125,6,0,124,6,0,106,13,0,131,0,0,115, ++ 22,1,116,6,0,100,9,0,106,7,0,124,5,0,131,1, ++ 0,131,1,0,130,1,0,124,2,0,106,14,0,100,4,0, ++ 131,1,0,100,10,0,25,125,7,0,116,15,0,124,1,0, ++ 124,7,0,116,16,0,100,10,0,25,23,131,2,0,83,41, ++ 13,97,110,1,0,0,71,105,118,101,110,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,32, ++ 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, ++ 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, ++ 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, ++ 46,112,121,99,32,102,105,108,101,32,100,111,101,115,32,110, ++ 111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116, ++ 59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,101, ++ 116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,116, ++ 111,10,32,32,32,32,116,104,101,32,46,112,121,32,102,105, ++ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,116,111, ++ 32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116, ++ 104,101,32,46,112,121,99,32,102,105,108,101,46,32,32,73, ++ 102,32,112,97,116,104,32,100,111,101,115,10,32,32,32,32, ++ 110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,80, ++ 69,80,32,51,49,52,55,47,52,56,56,32,102,111,114,109, ++ 97,116,44,32,86,97,108,117,101,69,114,114,111,114,32,119, ++ 105,108,108,32,98,101,32,114,97,105,115,101,100,46,32,73, ++ 102,10,32,32,32,32,115,121,115,46,105,109,112,108,101,109, ++ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, ++ 97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32, ++ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, ++ 32,32,32,32,78,122,36,115,121,115,46,105,109,112,108,101, ++ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, ++ 116,97,103,32,105,115,32,78,111,110,101,122,37,123,125,32, ++ 110,111,116,32,98,111,116,116,111,109,45,108,101,118,101,108, ++ 32,100,105,114,101,99,116,111,114,121,32,105,110,32,123,33, ++ 114,125,114,59,0,0,0,114,57,0,0,0,233,3,0,0, ++ 0,122,33,101,120,112,101,99,116,101,100,32,111,110,108,121, ++ 32,50,32,111,114,32,51,32,100,111,116,115,32,105,110,32, ++ 123,33,114,125,122,57,111,112,116,105,109,105,122,97,116,105, ++ 111,110,32,112,111,114,116,105,111,110,32,111,102,32,102,105, ++ 108,101,110,97,109,101,32,100,111,101,115,32,110,111,116,32, ++ 115,116,97,114,116,32,119,105,116,104,32,123,33,114,125,122, ++ 52,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, ++ 118,101,108,32,123,33,114,125,32,105,115,32,110,111,116,32, ++ 97,110,32,97,108,112,104,97,110,117,109,101,114,105,99,32, ++ 118,97,108,117,101,114,60,0,0,0,62,2,0,0,0,114, ++ 57,0,0,0,114,81,0,0,0,233,254,255,255,255,41,17, ++ 114,8,0,0,0,114,65,0,0,0,114,66,0,0,0,114, ++ 67,0,0,0,114,39,0,0,0,114,74,0,0,0,114,72, ++ 0,0,0,114,48,0,0,0,218,5,99,111,117,110,116,114, ++ 35,0,0,0,114,10,0,0,0,114,73,0,0,0,114,32, ++ 0,0,0,114,71,0,0,0,218,9,112,97,114,116,105,116, ++ 105,111,110,114,29,0,0,0,218,15,83,79,85,82,67,69, ++ 95,83,85,70,70,73,88,69,83,41,8,114,36,0,0,0, ++ 114,77,0,0,0,90,16,112,121,99,97,99,104,101,95,102, ++ 105,108,101,110,97,109,101,90,7,112,121,99,97,99,104,101, ++ 90,9,100,111,116,95,99,111,117,110,116,114,58,0,0,0, ++ 90,9,111,112,116,95,108,101,118,101,108,90,13,98,97,115, ++ 101,95,102,105,108,101,110,97,109,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,115,111,117,114,99, ++ 101,95,102,114,111,109,95,99,97,99,104,101,31,1,0,0, ++ 115,44,0,0,0,0,9,18,1,12,1,18,1,18,1,12, ++ 1,9,1,15,1,15,1,12,1,9,1,15,1,12,1,22, ++ 1,15,1,9,1,12,1,22,1,12,1,9,1,12,1,19, ++ 1,114,86,0,0,0,99,1,0,0,0,0,0,0,0,5, ++ 0,0,0,12,0,0,0,67,0,0,0,115,164,0,0,0, ++ 116,0,0,124,0,0,131,1,0,100,1,0,107,2,0,114, ++ 22,0,100,2,0,83,124,0,0,106,1,0,100,3,0,131, + 1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,1, +- 0,124,3,0,102,2,0,83,120,69,0,116,4,0,124,0, +- 0,131,1,0,68,93,55,0,125,4,0,124,4,0,116,1, +- 0,107,6,0,114,65,0,124,0,0,106,5,0,124,4,0, +- 100,2,0,100,1,0,131,1,1,92,2,0,125,1,0,125, +- 3,0,124,1,0,124,3,0,102,2,0,83,113,65,0,87, +- 100,3,0,124,0,0,102,2,0,83,41,4,122,32,82,101, +- 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, +- 46,112,97,116,104,46,115,112,108,105,116,40,41,46,233,1, +- 0,0,0,90,8,109,97,120,115,112,108,105,116,218,0,41, +- 6,218,3,108,101,110,114,21,0,0,0,218,10,114,112,97, +- 114,116,105,116,105,111,110,114,25,0,0,0,218,8,114,101, +- 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, +- 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, +- 218,4,116,97,105,108,114,16,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, +- 104,95,115,112,108,105,116,56,0,0,0,115,16,0,0,0, +- 0,2,18,1,24,1,10,1,19,1,12,1,27,1,14,1, +- 114,38,0,0,0,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,116, +- 0,0,106,1,0,124,0,0,131,1,0,83,41,1,122,126, +- 83,116,97,116,32,116,104,101,32,112,97,116,104,46,10,10, +- 32,32,32,32,77,97,100,101,32,97,32,115,101,112,97,114, +- 97,116,101,32,102,117,110,99,116,105,111,110,32,116,111,32, +- 109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116, +- 111,32,111,118,101,114,114,105,100,101,32,105,110,32,101,120, +- 112,101,114,105,109,101,110,116,115,10,32,32,32,32,40,101, +- 46,103,46,32,99,97,99,104,101,32,115,116,97,116,32,114, +- 101,115,117,108,116,115,41,46,10,10,32,32,32,32,41,2, +- 114,3,0,0,0,90,4,115,116,97,116,41,1,114,35,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,103,0,0,0,255,0,0,0,115,6,0,0,0,12, -- 2,12,4,12,7,114,103,0,0,0,99,1,0,0,0,0, -- 0,0,0,3,0,0,0,11,0,0,0,3,0,0,0,115, -- 142,0,0,0,100,1,0,125,1,0,121,17,0,116,0,0, -- 136,0,0,25,131,0,0,125,1,0,87,110,18,0,4,116, -- 1,0,107,10,0,114,43,0,1,1,1,89,110,1,0,88, -- 124,1,0,100,1,0,107,8,0,114,138,0,116,2,0,100, -- 1,0,107,8,0,114,83,0,116,3,0,136,0,0,131,1, -- 0,125,1,0,110,12,0,116,4,0,136,0,0,131,1,0, -- 125,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, -- 0,0,125,2,0,116,5,0,106,6,0,124,1,0,124,2, -- 0,131,2,0,116,0,0,136,0,0,60,110,0,0,124,1, -- 0,83,41,4,122,109,71,101,116,32,111,114,32,99,114,101, -- 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, -+ 105,114,101,100,32,108,111,99,107,114,85,0,0,0,114,30, -+ 0,0,0,41,10,114,86,0,0,0,114,92,0,0,0,114, -+ 87,0,0,0,114,89,0,0,0,218,12,82,117,110,116,105, -+ 109,101,69,114,114,111,114,114,90,0,0,0,218,14,65,115, -+ 115,101,114,116,105,111,110,69,114,114,111,114,114,91,0,0, -+ 0,114,88,0,0,0,114,99,0,0,0,41,2,114,72,0, -+ 0,0,114,96,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,99,0,0,0,217,0,0,0,115, -+ 22,0,0,0,0,1,12,1,10,1,15,1,15,1,21,1, -+ 15,1,15,1,9,1,9,1,15,1,122,19,95,77,111,100, -+ 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, -+ 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, -+ 67,0,0,0,115,25,0,0,0,100,1,0,106,0,0,124, -+ 0,0,106,1,0,116,2,0,124,0,0,131,1,0,131,2, -+ 0,83,41,2,78,122,23,95,77,111,100,117,108,101,76,111, -+ 99,107,40,123,33,114,125,41,32,97,116,32,123,125,41,3, -+ 114,48,0,0,0,114,68,0,0,0,114,49,0,0,0,41, -+ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,8,95,95,114,101,112,114,95,95,230, -+ 0,0,0,115,2,0,0,0,0,1,122,20,95,77,111,100, -+ 117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,95, -+ 78,41,9,114,58,0,0,0,114,57,0,0,0,114,59,0, -+ 0,0,114,60,0,0,0,114,73,0,0,0,114,97,0,0, -+ 0,114,98,0,0,0,114,99,0,0,0,114,102,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,84,0,0,0,166,0,0,0,115,12,0, -+ 0,0,12,4,6,2,12,8,12,12,12,25,12,13,114,84, -+ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -+ 2,0,0,0,64,0,0,0,115,70,0,0,0,101,0,0, -+ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, -+ 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, -+ 0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,0, -+ 90,6,0,100,8,0,100,9,0,132,0,0,90,7,0,100, -+ 10,0,83,41,11,218,16,95,68,117,109,109,121,77,111,100, -+ 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, -+ 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, -+ 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, -+ 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, -+ 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, -+ 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,22,0,0,0,124,1,0,124,0,0,95, -+ 0,0,100,1,0,124,0,0,95,1,0,100,0,0,83,41, -+ 2,78,114,85,0,0,0,41,2,114,68,0,0,0,114,90, -+ 0,0,0,41,2,114,72,0,0,0,114,68,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,73, -+ 0,0,0,238,0,0,0,115,4,0,0,0,0,1,9,1, -+ 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -+ 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, -+ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, -+ 115,19,0,0,0,124,0,0,4,106,0,0,100,1,0,55, -+ 2,95,0,0,100,2,0,83,41,3,78,114,30,0,0,0, -+ 84,41,1,114,90,0,0,0,41,1,114,72,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,98, -+ 0,0,0,242,0,0,0,115,4,0,0,0,0,1,15,1, -+ 122,24,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -+ 99,107,46,97,99,113,117,105,114,101,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, -+ 49,0,0,0,124,0,0,106,0,0,100,1,0,107,2,0, -+ 114,30,0,116,1,0,100,2,0,131,1,0,130,1,0,110, -+ 0,0,124,0,0,4,106,0,0,100,3,0,56,2,95,0, -+ 0,100,0,0,83,41,4,78,114,85,0,0,0,122,31,99, -+ 97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110, -+ 45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,30, -+ 0,0,0,41,2,114,90,0,0,0,114,100,0,0,0,41, -+ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,99,0,0,0,246,0,0,0,115,6, -+ 0,0,0,0,1,15,1,15,1,122,24,95,68,117,109,109, -+ 121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101, -+ 97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,0, -+ 4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,0, -+ 106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,131, -+ 1,0,131,2,0,83,41,2,78,122,28,95,68,117,109,109, -+ 121,77,111,100,117,108,101,76,111,99,107,40,123,33,114,125, -+ 41,32,97,116,32,123,125,41,3,114,48,0,0,0,114,68, -+ 0,0,0,114,49,0,0,0,41,1,114,72,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,102, -+ 0,0,0,251,0,0,0,115,2,0,0,0,0,1,122,25, -+ 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, -+ 46,95,95,114,101,112,114,95,95,78,41,8,114,58,0,0, -+ 0,114,57,0,0,0,114,59,0,0,0,114,60,0,0,0, -+ 114,73,0,0,0,114,98,0,0,0,114,99,0,0,0,114, -+ 102,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,103,0,0,0,234,0,0, -+ 0,115,10,0,0,0,12,2,6,2,12,4,12,4,12,5, -+ 114,103,0,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, -+ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, -+ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, -+ 7,0,83,41,8,218,18,95,77,111,100,117,108,101,76,111, -+ 99,107,77,97,110,97,103,101,114,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,22, -+ 0,0,0,124,1,0,124,0,0,95,0,0,100,0,0,124, -+ 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,71, -+ 0,0,0,218,5,95,108,111,99,107,41,2,114,72,0,0, -+ 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,73,0,0,0,1,1,0,0,115,4, -+ 0,0,0,0,1,9,1,122,27,95,77,111,100,117,108,101, -+ 76,111,99,107,77,97,110,97,103,101,114,46,95,95,105,110, -+ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, -+ 0,10,0,0,0,67,0,0,0,115,53,0,0,0,122,22, -+ 0,116,0,0,124,0,0,106,1,0,131,1,0,124,0,0, -+ 95,2,0,87,100,0,0,116,3,0,106,4,0,131,0,0, -+ 1,88,124,0,0,106,2,0,106,5,0,131,0,0,1,100, -+ 0,0,83,41,1,78,41,6,218,16,95,103,101,116,95,109, -+ 111,100,117,108,101,95,108,111,99,107,114,71,0,0,0,114, -+ 105,0,0,0,218,4,95,105,109,112,218,12,114,101,108,101, -+ 97,115,101,95,108,111,99,107,114,98,0,0,0,41,1,114, -+ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,76,0,0,0,5,1,0,0,115,8,0,0, -+ 0,0,1,3,1,22,2,11,1,122,28,95,77,111,100,117, -+ 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, -+ 101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0, -+ 3,0,0,0,1,0,0,0,79,0,0,0,115,17,0,0, -+ 0,124,0,0,106,0,0,106,1,0,131,0,0,1,100,0, -+ 0,83,41,1,78,41,2,114,105,0,0,0,114,99,0,0, -+ 0,41,3,114,72,0,0,0,114,81,0,0,0,218,6,107, -+ 119,97,114,103,115,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,82,0,0,0,12,1,0,0,115,2,0, -+ 0,0,0,1,122,27,95,77,111,100,117,108,101,76,111,99, -+ 107,77,97,110,97,103,101,114,46,95,95,101,120,105,116,95, -+ 95,78,41,6,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,73,0,0,0,114,76,0,0,0,114,82,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,104,0,0,0,255,0,0,0,115, -+ 6,0,0,0,12,2,12,4,12,7,114,104,0,0,0,99, -+ 1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, -+ 3,0,0,0,115,142,0,0,0,100,1,0,125,1,0,121, -+ 17,0,116,0,0,136,0,0,25,131,0,0,125,1,0,87, -+ 110,18,0,4,116,1,0,107,10,0,114,43,0,1,1,1, -+ 89,110,1,0,88,124,1,0,100,1,0,107,8,0,114,138, -+ 0,116,2,0,100,1,0,107,8,0,114,83,0,116,3,0, -+ 136,0,0,131,1,0,125,1,0,110,12,0,116,4,0,136, -+ 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,2, -+ 0,100,3,0,134,0,0,125,2,0,116,5,0,106,6,0, -+ 124,1,0,124,2,0,131,2,0,116,0,0,136,0,0,60, -+ 110,0,0,124,1,0,83,41,4,122,109,71,101,116,32,111, -+ 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, -+ 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, -+ 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, -+ 46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110, -+ 108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116, -+ 104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, -+ 107,32,116,97,107,101,110,46,78,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,2,0,0,0,19,0,0,0,115,11, -+ 0,0,0,116,0,0,136,0,0,61,100,0,0,83,41,1, -+ 78,41,1,218,13,95,109,111,100,117,108,101,95,108,111,99, -+ 107,115,41,1,114,37,0,0,0,41,1,114,68,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,2,99,98,32,1, -+ 0,0,115,2,0,0,0,0,1,122,28,95,103,101,116,95, -+ 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99, -+ 97,108,115,62,46,99,98,41,7,114,110,0,0,0,114,80, -+ 0,0,0,114,86,0,0,0,114,103,0,0,0,114,84,0, -+ 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, -+ 102,41,3,114,68,0,0,0,114,87,0,0,0,114,111,0, -+ 0,0,114,5,0,0,0,41,1,114,68,0,0,0,114,6, -+ 0,0,0,114,106,0,0,0,18,1,0,0,115,24,0,0, -+ 0,0,4,6,1,3,1,17,1,13,1,5,1,12,1,12, -+ 1,15,2,12,1,18,2,25,1,114,106,0,0,0,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, -+ 0,0,0,115,71,0,0,0,116,0,0,124,0,0,131,1, -+ 0,125,1,0,116,1,0,106,2,0,131,0,0,1,121,14, -+ 0,124,1,0,106,3,0,131,0,0,1,87,110,18,0,4, -+ 116,4,0,107,10,0,114,56,0,1,1,1,89,110,11,0, -+ 88,124,1,0,106,5,0,131,0,0,1,100,1,0,83,41, -+ 2,97,21,1,0,0,82,101,108,101,97,115,101,32,116,104, -+ 101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,32, -+ 108,111,99,107,44,32,97,110,100,32,97,99,113,117,105,114, -+ 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,32, -+ 116,104,101,10,32,32,32,32,109,111,100,117,108,101,32,108, - 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, -- 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, -- 32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101, -- 32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101, -- 32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107, -- 101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,2,0,0,0,19,0,0,0,115,11,0,0,0,116,0, -- 0,136,0,0,61,100,0,0,83,41,1,78,41,1,218,13, -- 95,109,111,100,117,108,101,95,108,111,99,107,115,41,1,114, -- 36,0,0,0,41,1,114,67,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,2,99,98,32,1,0,0,115,2,0, -- 0,0,0,1,122,28,95,103,101,116,95,109,111,100,117,108, -- 101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46, -- 99,98,41,7,114,109,0,0,0,114,79,0,0,0,114,85, -- 0,0,0,114,102,0,0,0,114,83,0,0,0,218,8,95, -- 119,101,97,107,114,101,102,90,3,114,101,102,41,3,114,67, -- 0,0,0,114,86,0,0,0,114,110,0,0,0,114,4,0, -- 0,0,41,1,114,67,0,0,0,114,5,0,0,0,114,105, -- 0,0,0,18,1,0,0,115,24,0,0,0,0,4,6,1, -- 3,1,17,1,13,1,5,1,12,1,12,1,15,2,12,1, -- 18,2,25,1,114,105,0,0,0,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,71, -- 0,0,0,116,0,0,124,0,0,131,1,0,125,1,0,116, -- 1,0,106,2,0,131,0,0,1,121,14,0,124,1,0,106, -- 3,0,131,0,0,1,87,110,18,0,4,116,4,0,107,10, -- 0,114,56,0,1,1,1,89,110,11,0,88,124,1,0,106, -- 5,0,131,0,0,1,100,1,0,83,41,2,97,21,1,0, -- 0,82,101,108,101,97,115,101,32,116,104,101,32,103,108,111, -- 98,97,108,32,105,109,112,111,114,116,32,108,111,99,107,44, -- 32,97,110,100,32,97,99,113,117,105,114,101,115,32,116,104, -- 101,110,32,114,101,108,101,97,115,101,32,116,104,101,10,32, -- 32,32,32,109,111,100,117,108,101,32,108,111,99,107,32,102, -- 111,114,32,97,32,103,105,118,101,110,32,109,111,100,117,108, -- 101,32,110,97,109,101,46,10,32,32,32,32,84,104,105,115, -- 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, -- 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, -- 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, -- 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, -- 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, -- 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, -- 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, -- 10,32,32,32,32,83,104,111,117,108,100,32,111,110,108,121, -- 32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,32, -- 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,32, -- 116,97,107,101,110,46,78,41,6,114,105,0,0,0,114,106, -- 0,0,0,114,107,0,0,0,114,97,0,0,0,114,82,0, -- 0,0,114,98,0,0,0,41,2,114,67,0,0,0,114,86, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, -- 95,109,111,100,117,108,101,37,1,0,0,115,14,0,0,0, -- 0,7,12,1,10,1,3,1,14,1,13,3,5,2,114,112, -- 0,0,0,99,1,0,0,0,0,0,0,0,3,0,0,0, -- 3,0,0,0,79,0,0,0,115,13,0,0,0,124,0,0, -- 124,1,0,124,2,0,142,0,0,83,41,1,97,46,1,0, -- 0,114,101,109,111,118,101,95,105,109,112,111,114,116,108,105, -- 98,95,102,114,97,109,101,115,32,105,110,32,105,109,112,111, -- 114,116,46,99,32,119,105,108,108,32,97,108,119,97,121,115, -- 32,114,101,109,111,118,101,32,115,101,113,117,101,110,99,101, -- 115,10,32,32,32,32,111,102,32,105,109,112,111,114,116,108, -- 105,98,32,102,114,97,109,101,115,32,116,104,97,116,32,101, -- 110,100,32,119,105,116,104,32,97,32,99,97,108,108,32,116, -- 111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,10, -- 10,32,32,32,32,85,115,101,32,105,116,32,105,110,115,116, -- 101,97,100,32,111,102,32,97,32,110,111,114,109,97,108,32, -- 99,97,108,108,32,105,110,32,112,108,97,99,101,115,32,119, -- 104,101,114,101,32,105,110,99,108,117,100,105,110,103,32,116, -- 104,101,32,105,109,112,111,114,116,108,105,98,10,32,32,32, -- 32,102,114,97,109,101,115,32,105,110,116,114,111,100,117,99, -- 101,115,32,117,110,119,97,110,116,101,100,32,110,111,105,115, -- 101,32,105,110,116,111,32,116,104,101,32,116,114,97,99,101, -- 98,97,99,107,32,40,101,46,103,46,32,119,104,101,110,32, -- 101,120,101,99,117,116,105,110,103,10,32,32,32,32,109,111, -- 100,117,108,101,32,99,111,100,101,41,10,32,32,32,32,114, -- 4,0,0,0,41,3,218,1,102,114,80,0,0,0,90,4, -- 107,119,100,115,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, -- 102,114,97,109,101,115,95,114,101,109,111,118,101,100,57,1, -- 0,0,115,2,0,0,0,0,8,114,114,0,0,0,105,238, -- 12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, +- 0,218,10,95,112,97,116,104,95,115,116,97,116,68,0,0, +- 0,115,2,0,0,0,0,7,114,39,0,0,0,99,2,0, +- 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, +- 0,0,115,58,0,0,0,121,16,0,116,0,0,124,0,0, +- 131,1,0,125,2,0,87,110,22,0,4,116,1,0,107,10, +- 0,114,40,0,1,1,1,100,1,0,83,89,110,1,0,88, +- 124,2,0,106,2,0,100,2,0,64,124,1,0,107,2,0, +- 83,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, +- 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, +- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, +- 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,39, +- 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, +- 95,109,111,100,101,41,3,114,35,0,0,0,218,4,109,111, +- 100,101,90,9,115,116,97,116,95,105,110,102,111,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,112, +- 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, +- 78,0,0,0,115,10,0,0,0,0,2,3,1,16,1,13, +- 1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,0, +- 0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,0, +- 0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,41, +- 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, +- 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, +- 101,46,105,0,128,0,0,41,1,114,43,0,0,0,41,1, +- 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, +- 108,101,87,0,0,0,115,2,0,0,0,0,2,114,44,0, +- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, +- 0,0,0,67,0,0,0,115,31,0,0,0,124,0,0,115, +- 18,0,116,0,0,106,1,0,131,0,0,125,0,0,116,2, +- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, +- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, +- 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, +- 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, +- 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, +- 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, +- 0,0,0,2,6,1,12,1,114,46,0,0,0,105,182,1, +- 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, +- 0,0,0,67,0,0,0,115,193,0,0,0,100,1,0,106, +- 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, +- 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, +- 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, +- 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,61, +- 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, +- 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, +- 1,0,1,87,100,4,0,81,82,88,116,2,0,106,10,0, +- 124,3,0,124,0,0,131,2,0,1,87,110,59,0,4,116, +- 11,0,107,10,0,114,188,0,1,1,1,121,17,0,116,2, +- 0,106,12,0,124,3,0,131,1,0,1,87,110,18,0,4, +- 116,11,0,107,10,0,114,180,0,1,1,1,89,110,1,0, +- 88,130,0,0,89,110,1,0,88,100,4,0,83,41,5,122, +- 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110, +- 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100, +- 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116, +- 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101, +- 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110, +- 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115, +- 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114, +- 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116, +- 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121, +- 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116, +- 101,100,46,122,5,123,125,46,123,125,105,182,1,0,0,90, +- 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, +- 105,100,114,3,0,0,0,90,4,111,112,101,110,90,6,79, +- 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, +- 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, +- 105,108,101,73,79,218,5,119,114,105,116,101,218,7,114,101, +- 112,108,97,99,101,114,40,0,0,0,90,6,117,110,108,105, +- 110,107,41,6,114,35,0,0,0,218,4,100,97,116,97,114, +- 42,0,0,0,90,8,112,97,116,104,95,116,109,112,90,2, +- 102,100,218,4,102,105,108,101,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,13,95,119,114,105,116,101,95, +- 97,116,111,109,105,99,99,0,0,0,115,26,0,0,0,0, +- 5,24,1,9,1,33,1,3,3,21,1,20,1,20,1,13, +- 1,3,1,17,1,13,1,5,1,114,55,0,0,0,105,22, +- 13,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, - 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, -- 95,122,3,46,112,121,122,4,46,112,121,99,122,4,46,112, -- 121,111,78,99,2,0,0,0,0,0,0,0,11,0,0,0, -- 6,0,0,0,67,0,0,0,115,180,0,0,0,124,1,0, -- 100,1,0,107,8,0,114,25,0,116,0,0,106,1,0,106, -- 2,0,12,110,3,0,124,1,0,125,2,0,124,2,0,114, -- 46,0,116,3,0,125,3,0,110,6,0,116,4,0,125,3, -- 0,116,5,0,124,0,0,131,1,0,92,2,0,125,4,0, -- 125,5,0,124,5,0,106,6,0,100,2,0,131,1,0,92, -- 3,0,125,6,0,125,7,0,125,8,0,116,0,0,106,7, -- 0,106,8,0,125,9,0,124,9,0,100,1,0,107,8,0, -- 114,133,0,116,9,0,100,3,0,131,1,0,130,1,0,110, -- 0,0,100,4,0,106,10,0,124,6,0,124,7,0,124,9, -- 0,124,3,0,100,5,0,25,103,4,0,131,1,0,125,10, -- 0,116,11,0,124,4,0,116,12,0,124,10,0,131,3,0, -- 83,41,6,97,244,1,0,0,71,105,118,101,110,32,116,104, -- 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,32, -- 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, -- 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, -- 99,47,46,112,121,111,32,102,105,108,101,46,10,10,32,32, -- 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, -- 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, -- 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, -- 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, -- 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, -- 112,121,99,47,46,112,121,111,32,102,105,108,101,32,99,97, -- 108,99,117,108,97,116,101,100,32,97,115,32,105,102,32,116, -- 104,101,32,46,112,121,32,102,105,108,101,32,119,101,114,101, -- 32,105,109,112,111,114,116,101,100,46,32,32,84,104,101,32, -- 101,120,116,101,110,115,105,111,110,10,32,32,32,32,119,105, -- 108,108,32,98,101,32,46,112,121,99,32,117,110,108,101,115, -- 115,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, -- 109,105,122,101,32,105,115,32,110,111,110,45,122,101,114,111, -- 44,32,116,104,101,110,32,105,116,32,119,105,108,108,32,98, -- 101,32,46,112,121,111,46,10,10,32,32,32,32,73,102,32, -- 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105, -- 115,32,110,111,116,32,78,111,110,101,44,32,116,104,101,110, -- 32,105,116,32,109,117,115,116,32,98,101,32,97,32,98,111, -- 111,108,101,97,110,32,97,110,100,32,105,115,32,117,115,101, -- 100,32,105,110,10,32,32,32,32,112,108,97,99,101,32,111, -- 102,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, -- 109,105,122,101,46,10,10,32,32,32,32,73,102,32,115,121, -- 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -- 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, -- 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, -- 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, -- 97,105,115,101,100,46,10,10,32,32,32,32,78,218,1,46, +- 95,122,4,111,112,116,45,122,3,46,112,121,122,4,46,112, +- 121,99,78,218,12,111,112,116,105,109,105,122,97,116,105,111, +- 110,99,2,0,0,0,1,0,0,0,11,0,0,0,6,0, +- 0,0,67,0,0,0,115,87,1,0,0,124,1,0,100,1, +- 0,107,9,0,114,76,0,116,0,0,106,1,0,100,2,0, +- 116,2,0,131,2,0,1,124,2,0,100,1,0,107,9,0, +- 114,58,0,100,3,0,125,3,0,116,3,0,124,3,0,131, +- 1,0,130,1,0,124,1,0,114,70,0,100,4,0,110,3, +- 0,100,5,0,125,2,0,116,4,0,124,0,0,131,1,0, +- 92,2,0,125,4,0,125,5,0,124,5,0,106,5,0,100, +- 6,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, +- 0,116,6,0,106,7,0,106,8,0,125,9,0,124,9,0, +- 100,1,0,107,8,0,114,154,0,116,9,0,100,7,0,131, +- 1,0,130,1,0,100,4,0,106,10,0,124,6,0,114,172, +- 0,124,6,0,110,3,0,124,8,0,124,7,0,124,9,0, +- 103,3,0,131,1,0,125,10,0,124,2,0,100,1,0,107, +- 8,0,114,241,0,116,6,0,106,11,0,106,12,0,100,8, +- 0,107,2,0,114,229,0,100,4,0,125,2,0,110,12,0, +- 116,6,0,106,11,0,106,12,0,125,2,0,116,13,0,124, +- 2,0,131,1,0,125,2,0,124,2,0,100,4,0,107,3, +- 0,114,63,1,124,2,0,106,14,0,131,0,0,115,42,1, +- 116,15,0,100,9,0,106,16,0,124,2,0,131,1,0,131, +- 1,0,130,1,0,100,10,0,106,16,0,124,10,0,116,17, +- 0,124,2,0,131,3,0,125,10,0,116,18,0,124,4,0, +- 116,19,0,124,10,0,116,20,0,100,8,0,25,23,131,3, +- 0,83,41,11,97,254,2,0,0,71,105,118,101,110,32,116, +- 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, +- 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, +- 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, +- 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, +- 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, +- 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, +- 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, +- 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, +- 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, +- 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, +- 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, +- 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, +- 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, +- 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, +- 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, +- 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, +- 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, +- 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, +- 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, +- 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, +- 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, +- 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, +- 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, +- 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, +- 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, +- 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, +- 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, +- 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, +- 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, +- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, +- 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, +- 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, +- 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, +- 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, +- 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, +- 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, +- 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, +- 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, +- 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, +- 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, +- 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, +- 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, +- 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, +- 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, +- 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, +- 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, +- 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, +- 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, +- 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, +- 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, +- 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, +- 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, +- 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, +- 78,111,110,101,114,30,0,0,0,114,29,0,0,0,218,1, +- 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, +- 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, +- 105,115,32,78,111,110,101,233,0,0,0,0,122,24,123,33, +- 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, +- 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,41, +- 21,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, +- 114,110,218,18,68,101,112,114,101,99,97,116,105,111,110,87, +- 97,114,110,105,110,103,218,9,84,121,112,101,69,114,114,111, +- 114,114,38,0,0,0,114,32,0,0,0,114,7,0,0,0, +- 218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,110, +- 218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,116, +- 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, +- 114,26,0,0,0,218,5,102,108,97,103,115,218,8,111,112, +- 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, +- 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, +- 114,47,0,0,0,218,4,95,79,80,84,114,28,0,0,0, +- 218,8,95,80,89,67,65,67,72,69,218,17,66,89,84,69, +- 67,79,68,69,95,83,85,70,70,73,88,69,83,41,11,114, +- 35,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, +- 114,105,100,101,114,57,0,0,0,218,7,109,101,115,115,97, +- 103,101,218,4,104,101,97,100,114,37,0,0,0,90,4,98, +- 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, +- 116,97,103,90,15,97,108,109,111,115,116,95,102,105,108,101, +- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,17,99,97,99,104,101,95,102,114,111,109,95, +- 115,111,117,114,99,101,243,0,0,0,115,46,0,0,0,0, +- 18,12,1,9,1,7,1,12,1,6,1,12,1,18,1,18, +- 1,24,1,12,1,12,1,12,1,36,1,12,1,18,1,9, +- 2,12,1,12,1,12,1,12,1,21,1,21,1,114,79,0, +- 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, +- 0,0,0,67,0,0,0,115,62,1,0,0,116,0,0,106, +- 1,0,106,2,0,100,1,0,107,8,0,114,30,0,116,3, +- 0,100,2,0,131,1,0,130,1,0,116,4,0,124,0,0, +- 131,1,0,92,2,0,125,1,0,125,2,0,116,4,0,124, +- 1,0,131,1,0,92,2,0,125,1,0,125,3,0,124,3, +- 0,116,5,0,107,3,0,114,102,0,116,6,0,100,3,0, +- 106,7,0,116,5,0,124,0,0,131,2,0,131,1,0,130, +- 1,0,124,2,0,106,8,0,100,4,0,131,1,0,125,4, +- 0,124,4,0,100,11,0,107,7,0,114,153,0,116,6,0, +- 100,7,0,106,7,0,124,2,0,131,1,0,131,1,0,130, +- 1,0,110,125,0,124,4,0,100,6,0,107,2,0,114,22, +- 1,124,2,0,106,9,0,100,4,0,100,5,0,131,2,0, +- 100,12,0,25,125,5,0,124,5,0,106,10,0,116,11,0, +- 131,1,0,115,223,0,116,6,0,100,8,0,106,7,0,116, +- 11,0,131,1,0,131,1,0,130,1,0,124,5,0,116,12, +- 0,116,11,0,131,1,0,100,1,0,133,2,0,25,125,6, +- 0,124,6,0,106,13,0,131,0,0,115,22,1,116,6,0, +- 100,9,0,106,7,0,124,5,0,131,1,0,131,1,0,130, +- 1,0,124,2,0,106,14,0,100,4,0,131,1,0,100,10, +- 0,25,125,7,0,116,15,0,124,1,0,124,7,0,116,16, +- 0,100,10,0,25,23,131,2,0,83,41,13,97,110,1,0, +- 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44, +- 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, +- 32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101, +- 46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32, +- 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, +- 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, +- 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, +- 32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32, +- 32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97, +- 108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114, +- 101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112, +- 121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116, +- 104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99, +- 111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49, +- 52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86, +- 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, +- 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, +- 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, +- 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, +- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, +- 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, -- 115,32,78,111,110,101,114,30,0,0,0,114,84,0,0,0, -- 41,13,114,7,0,0,0,218,5,102,108,97,103,115,218,8, -- 111,112,116,105,109,105,122,101,218,23,68,69,66,85,71,95, -- 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, -- 83,218,27,79,80,84,73,77,73,90,69,68,95,66,89,84, -- 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,38, -- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,218,14, -- 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, -- 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, -- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,26, -- 0,0,0,114,28,0,0,0,218,8,95,80,89,67,65,67, -- 72,69,41,11,114,35,0,0,0,90,14,100,101,98,117,103, -- 95,111,118,101,114,114,105,100,101,218,5,100,101,98,117,103, -- 218,8,115,117,102,102,105,120,101,115,218,4,104,101,97,100, -- 114,37,0,0,0,218,13,98,97,115,101,95,102,105,108,101, -- 110,97,109,101,218,3,115,101,112,114,36,0,0,0,90,3, -- 116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,97, -- 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,181, -- 1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,2, -- 6,1,18,1,24,1,12,1,12,1,15,1,31,1,114,132, -+ 109,111,100,117,108,101,32,110,97,109,101,46,10,32,32,32, -+ 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111, -+ 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101, -+ 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105, -+ 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116, -+ 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32, -+ 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101, -+ 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114, -+ 101,97,100,46,10,10,32,32,32,32,83,104,111,117,108,100, -+ 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, -+ 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, -+ 108,111,99,107,32,116,97,107,101,110,46,78,41,6,114,106, -+ 0,0,0,114,107,0,0,0,114,108,0,0,0,114,98,0, -+ 0,0,114,83,0,0,0,114,99,0,0,0,41,2,114,68, -+ 0,0,0,114,87,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,19,95,108,111,99,107,95,117, -+ 110,108,111,99,107,95,109,111,100,117,108,101,37,1,0,0, -+ 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, -+ 3,5,2,114,113,0,0,0,99,1,0,0,0,0,0,0, -+ 0,3,0,0,0,3,0,0,0,79,0,0,0,115,13,0, -+ 0,0,124,0,0,124,1,0,124,2,0,142,0,0,83,41, -+ 1,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, -+ 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, -+ 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, -+ 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, -+ 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, -+ 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, -+ 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, -+ 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, -+ 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, -+ 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, -+ 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, -+ 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, -+ 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, -+ 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, -+ 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, -+ 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, -+ 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, -+ 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, -+ 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, -+ 32,32,32,32,114,5,0,0,0,41,3,218,1,102,114,81, -+ 0,0,0,90,4,107,119,100,115,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,25,95,99,97,108,108,95, -+ 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, -+ 118,101,100,57,1,0,0,115,2,0,0,0,0,8,114,115, -+ 0,0,0,105,238,12,0,0,233,2,0,0,0,114,14,0, -+ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, -+ 97,99,104,101,95,95,122,3,46,112,121,122,4,46,112,121, -+ 99,122,4,46,112,121,111,78,99,2,0,0,0,0,0,0, -+ 0,11,0,0,0,6,0,0,0,67,0,0,0,115,180,0, -+ 0,0,124,1,0,100,1,0,107,8,0,114,25,0,116,0, -+ 0,106,1,0,106,2,0,12,110,3,0,124,1,0,125,2, -+ 0,124,2,0,114,46,0,116,3,0,125,3,0,110,6,0, -+ 116,4,0,125,3,0,116,5,0,124,0,0,131,1,0,92, -+ 2,0,125,4,0,125,5,0,124,5,0,106,6,0,100,2, -+ 0,131,1,0,92,3,0,125,6,0,125,7,0,125,8,0, -+ 116,0,0,106,7,0,106,8,0,125,9,0,124,9,0,100, -+ 1,0,107,8,0,114,133,0,116,9,0,100,3,0,131,1, -+ 0,130,1,0,110,0,0,100,4,0,106,10,0,124,6,0, -+ 124,7,0,124,9,0,124,3,0,100,5,0,25,103,4,0, -+ 131,1,0,125,10,0,116,11,0,124,4,0,116,12,0,124, -+ 10,0,131,3,0,83,41,6,97,244,1,0,0,71,105,118, -+ 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, -+ 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, -+ 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, -+ 115,32,46,112,121,99,47,46,112,121,111,32,102,105,108,101, -+ 46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,102, -+ 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, -+ 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, -+ 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, -+ 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,10, -+ 32,32,32,32,46,112,121,99,47,46,112,121,111,32,102,105, -+ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115, -+ 32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101, -+ 32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,32, -+ 32,84,104,101,32,101,120,116,101,110,115,105,111,110,10,32, -+ 32,32,32,119,105,108,108,32,98,101,32,46,112,121,99,32, -+ 117,110,108,101,115,115,32,115,121,115,46,102,108,97,103,115, -+ 46,111,112,116,105,109,105,122,101,32,105,115,32,110,111,110, -+ 45,122,101,114,111,44,32,116,104,101,110,32,105,116,32,119, -+ 105,108,108,32,98,101,32,46,112,121,111,46,10,10,32,32, -+ 32,32,73,102,32,100,101,98,117,103,95,111,118,101,114,114, -+ 105,100,101,32,105,115,32,110,111,116,32,78,111,110,101,44, -+ 32,116,104,101,110,32,105,116,32,109,117,115,116,32,98,101, -+ 32,97,32,98,111,111,108,101,97,110,32,97,110,100,32,105, -+ 115,32,117,115,101,100,32,105,110,10,32,32,32,32,112,108, -+ 97,99,101,32,111,102,32,115,121,115,46,102,108,97,103,115, -+ 46,111,112,116,105,109,105,122,101,46,10,10,32,32,32,32, -+ 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, -+ 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, -+ 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, -+ 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, -+ 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, -+ 32,78,218,1,46,122,36,115,121,115,46,105,109,112,108,101, -+ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, -+ 116,97,103,32,105,115,32,78,111,110,101,114,31,0,0,0, -+ 114,85,0,0,0,41,13,114,8,0,0,0,218,5,102,108, -+ 97,103,115,218,8,111,112,116,105,109,105,122,101,218,23,68, -+ 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, -+ 70,70,73,88,69,83,218,27,79,80,84,73,77,73,90,69, -+ 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, -+ 88,69,83,114,39,0,0,0,218,9,112,97,114,116,105,116, -+ 105,111,110,218,14,105,109,112,108,101,109,101,110,116,97,116, -+ 105,111,110,218,9,99,97,99,104,101,95,116,97,103,218,19, -+ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, -+ 114,111,114,114,27,0,0,0,114,29,0,0,0,218,8,95, -+ 80,89,67,65,67,72,69,41,11,114,36,0,0,0,90,14, -+ 100,101,98,117,103,95,111,118,101,114,114,105,100,101,218,5, -+ 100,101,98,117,103,218,8,115,117,102,102,105,120,101,115,218, -+ 4,104,101,97,100,114,38,0,0,0,218,13,98,97,115,101, -+ 95,102,105,108,101,110,97,109,101,218,3,115,101,112,114,37, -+ 0,0,0,90,3,116,97,103,218,8,102,105,108,101,110,97, -+ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, -+ 117,114,99,101,181,1,0,0,115,22,0,0,0,0,13,31, -+ 1,6,1,9,2,6,1,18,1,24,1,12,1,12,1,15, -+ 1,31,1,114,133,0,0,0,99,1,0,0,0,0,0,0, -+ 0,5,0,0,0,5,0,0,0,67,0,0,0,115,193,0, -+ 0,0,116,0,0,106,1,0,106,2,0,100,1,0,107,8, -+ 0,114,33,0,116,3,0,100,2,0,131,1,0,130,1,0, -+ 110,0,0,116,4,0,124,0,0,131,1,0,92,2,0,125, -+ 1,0,125,2,0,116,4,0,124,1,0,131,1,0,92,2, -+ 0,125,1,0,125,3,0,124,3,0,116,5,0,107,3,0, -+ 114,108,0,116,6,0,100,3,0,106,7,0,116,5,0,124, -+ 0,0,131,2,0,131,1,0,130,1,0,110,0,0,124,2, -+ 0,106,8,0,100,4,0,131,1,0,100,5,0,107,3,0, -+ 114,153,0,116,6,0,100,6,0,106,7,0,124,2,0,131, -+ 1,0,131,1,0,130,1,0,110,0,0,124,2,0,106,9, -+ 0,100,4,0,131,1,0,100,7,0,25,125,4,0,116,10, -+ 0,124,1,0,124,4,0,116,11,0,100,7,0,25,23,131, -+ 2,0,83,41,8,97,121,1,0,0,71,105,118,101,110,32, -+ 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, -+ 121,99,46,47,46,112,121,111,32,102,105,108,101,44,32,114, -+ 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, -+ 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10, -+ 10,32,32,32,32,84,104,101,32,46,112,121,99,47,46,112, -+ 121,111,32,102,105,108,101,32,100,111,101,115,32,110,111,116, -+ 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, -+ 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, -+ 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, -+ 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, -+ 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, -+ 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, -+ 32,46,112,121,99,47,46,112,121,111,32,102,105,108,101,46, -+ 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, -+ 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, -+ 111,32,80,69,80,32,51,49,52,55,32,102,111,114,109,97, -+ 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, -+ 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, -+ 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, -+ 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, -+ 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, -+ 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, -+ 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, -+ 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, -+ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, -+ 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, -+ 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, -+ 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, -+ 125,114,117,0,0,0,114,116,0,0,0,122,28,101,120,112, -+ 101,99,116,101,100,32,111,110,108,121,32,50,32,100,111,116, -+ 115,32,105,110,32,123,33,114,125,114,85,0,0,0,41,12, -+ 114,8,0,0,0,114,123,0,0,0,114,124,0,0,0,114, -+ 125,0,0,0,114,39,0,0,0,114,126,0,0,0,218,10, -+ 86,97,108,117,101,69,114,114,111,114,114,48,0,0,0,114, -+ 90,0,0,0,114,122,0,0,0,114,29,0,0,0,218,15, -+ 83,79,85,82,67,69,95,83,85,70,70,73,88,69,83,41, -+ 5,114,36,0,0,0,114,129,0,0,0,90,16,112,121,99, -+ 97,99,104,101,95,102,105,108,101,110,97,109,101,90,7,112, -+ 121,99,97,99,104,101,114,130,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,17,115,111,117,114, -+ 99,101,95,102,114,111,109,95,99,97,99,104,101,208,1,0, -+ 0,115,24,0,0,0,0,9,18,1,15,1,18,1,18,1, -+ 12,1,3,1,24,1,21,1,3,1,21,1,19,1,114,136, - 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, -- 5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,0, -- 106,1,0,106,2,0,100,1,0,107,8,0,114,33,0,116, -- 3,0,100,2,0,131,1,0,130,1,0,110,0,0,116,4, -- 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, -- 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, -- 3,0,124,3,0,116,5,0,107,3,0,114,108,0,116,6, -- 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, -- 131,1,0,130,1,0,110,0,0,124,2,0,106,8,0,100, -- 4,0,131,1,0,100,5,0,107,3,0,114,153,0,116,6, -- 0,100,6,0,106,7,0,124,2,0,131,1,0,131,1,0, -- 130,1,0,110,0,0,124,2,0,106,9,0,100,4,0,131, -- 1,0,100,7,0,25,125,4,0,116,10,0,124,1,0,124, -- 4,0,116,11,0,100,7,0,25,23,131,2,0,83,41,8, -- 97,121,1,0,0,71,105,118,101,110,32,116,104,101,32,112, -- 97,116,104,32,116,111,32,97,32,46,112,121,99,46,47,46, -- 112,121,111,32,102,105,108,101,44,32,114,101,116,117,114,110, -- 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, -- 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, -- 84,104,101,32,46,112,121,99,47,46,112,121,111,32,102,105, -- 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, -- 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, -- 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, -- 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, -- 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, -- 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, -- 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, -- 47,46,112,121,111,32,102,105,108,101,46,32,32,73,102,32, -- 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, -- 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, -- 32,51,49,52,55,32,102,111,114,109,97,116,44,32,86,97, -- 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, -- 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, -- 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, -- 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, -- 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, -- 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, -- 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, -- 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, -- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, -- 32,78,111,110,101,122,37,123,125,32,110,111,116,32,98,111, -- 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, -- 116,111,114,121,32,105,110,32,123,33,114,125,114,116,0,0, -- 0,114,115,0,0,0,122,28,101,120,112,101,99,116,101,100, -- 32,111,110,108,121,32,50,32,100,111,116,115,32,105,110,32, -- 123,33,114,125,114,84,0,0,0,41,12,114,7,0,0,0, -- 114,122,0,0,0,114,123,0,0,0,114,124,0,0,0,114, -- 38,0,0,0,114,125,0,0,0,218,10,86,97,108,117,101, -- 69,114,114,111,114,114,47,0,0,0,114,89,0,0,0,114, -- 121,0,0,0,114,28,0,0,0,218,15,83,79,85,82,67, -- 69,95,83,85,70,70,73,88,69,83,41,5,114,35,0,0, -- 0,114,128,0,0,0,90,16,112,121,99,97,99,104,101,95, -- 102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,104, -- 101,114,129,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,114, -- 111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,0, -- 0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24, -- 1,21,1,3,1,21,1,19,1,114,135,0,0,0,99,1, -- 0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67, -- 0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1, -- 0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0, -- 0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0, -- 125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0, -- 106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25, -- 100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0, -- 116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0, -- 4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0, -- 1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25, -- 125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1, -- 0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188, -- 67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111, -- 100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32, -- 97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105, -- 102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32, -- 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, -- 101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111, -- 114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112, -- 97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32, -- 32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67, -- 111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108, -- 101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32, -- 67,32,65,80,73,46,10,10,32,32,32,32,114,84,0,0, -- 0,78,114,116,0,0,0,233,3,0,0,0,114,29,0,0, -- 0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114, -- 138,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0, -- 218,5,108,111,119,101,114,114,135,0,0,0,114,124,0,0, -- 0,114,133,0,0,0,114,44,0,0,0,41,5,218,13,98, -- 121,116,101,99,111,100,101,95,112,97,116,104,90,4,114,101, -- 115,116,114,36,0,0,0,90,9,101,120,116,101,110,115,105, -- 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15, -- 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,231, -- 1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1, -- 35,1,4,1,3,1,16,1,19,1,21,1,114,142,0,0, -- 0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, -- 0,0,67,0,0,0,115,60,0,0,0,121,19,0,116,0, -- 0,124,0,0,131,1,0,106,1,0,125,1,0,87,110,24, -- 0,4,116,2,0,107,10,0,114,45,0,1,1,1,100,1, -- 0,125,1,0,89,110,1,0,88,124,1,0,100,2,0,79, -- 125,1,0,124,1,0,83,41,3,122,51,67,97,108,99,117, -- 108,97,116,101,32,116,104,101,32,109,111,100,101,32,112,101, -- 114,109,105,115,115,105,111,110,115,32,102,111,114,32,97,32, -- 98,121,116,101,99,111,100,101,32,102,105,108,101,46,105,182, -- 1,0,0,233,128,0,0,0,41,3,114,39,0,0,0,114, -- 41,0,0,0,114,40,0,0,0,41,2,114,35,0,0,0, -- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, -- 250,1,0,0,115,12,0,0,0,0,2,3,1,19,1,13, -- 1,11,3,10,1,114,144,0,0,0,218,9,118,101,114,98, -- 111,115,105,116,121,114,29,0,0,0,99,1,0,0,0,1, -- 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, -- 81,0,0,0,116,0,0,106,1,0,106,2,0,124,1,0, -- 107,5,0,114,77,0,124,0,0,106,3,0,100,6,0,131, -- 1,0,115,46,0,100,3,0,124,0,0,23,125,0,0,110, -- 0,0,116,4,0,124,0,0,106,5,0,124,2,0,140,0, -- 0,100,4,0,116,0,0,106,6,0,131,1,1,1,110,0, -- 0,100,5,0,83,41,7,122,61,80,114,105,110,116,32,116, -- 104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,116, -- 100,101,114,114,32,105,102,32,45,118,47,80,89,84,72,79, -- 78,86,69,82,66,79,83,69,32,105,115,32,116,117,114,110, -- 101,100,32,111,110,46,250,1,35,250,7,105,109,112,111,114, -- 116,32,122,2,35,32,114,54,0,0,0,78,41,2,114,146, -- 0,0,0,114,147,0,0,0,41,7,114,7,0,0,0,114, -- 117,0,0,0,218,7,118,101,114,98,111,115,101,114,9,0, -- 0,0,218,5,112,114,105,110,116,114,47,0,0,0,218,6, -- 115,116,100,101,114,114,41,3,218,7,109,101,115,115,97,103, -- 101,114,145,0,0,0,114,80,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,16,95,118,101,114, -- 98,111,115,101,95,109,101,115,115,97,103,101,6,2,0,0, -- 115,8,0,0,0,0,2,18,1,15,1,13,1,114,152,0, -- 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,4, -- 0,0,0,3,0,0,0,115,38,0,0,0,100,1,0,135, -- 0,0,102,1,0,100,2,0,100,3,0,134,1,0,125,1, -- 0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,1, -- 0,83,41,4,122,252,68,101,99,111,114,97,116,111,114,32, -- 116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116, -- 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, -- 114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,101, -- 115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,32, -- 32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,110, -- 100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,105, -- 114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,101, -- 108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,32, -- 95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,32, -- 115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32, -- 105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,32, -- 97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,32, -- 99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,115, -- 32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,111, -- 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, -- 32,32,78,99,2,0,0,0,0,0,0,0,4,0,0,0, -- 5,0,0,0,31,0,0,0,115,83,0,0,0,124,1,0, -- 100,0,0,107,8,0,114,24,0,124,0,0,106,0,0,125, -- 1,0,110,40,0,124,0,0,106,0,0,124,1,0,107,3, -- 0,114,64,0,116,1,0,100,1,0,124,1,0,22,100,2, -- 0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0, -- 124,0,0,124,1,0,124,2,0,124,3,0,142,2,0,83, -- 41,3,78,122,23,108,111,97,100,101,114,32,99,97,110,110, -- 111,116,32,104,97,110,100,108,101,32,37,115,114,67,0,0, -- 0,41,2,114,67,0,0,0,218,11,73,109,112,111,114,116, -- 69,114,114,111,114,41,4,114,71,0,0,0,114,67,0,0, -- 0,114,80,0,0,0,114,108,0,0,0,41,1,218,6,109, -- 101,116,104,111,100,114,4,0,0,0,114,5,0,0,0,218, -- 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, -- 112,112,101,114,22,2,0,0,115,10,0,0,0,0,1,12, -- 1,12,1,15,1,25,1,122,40,95,99,104,101,99,107,95, -- 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,99, -- 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, -- 114,41,1,114,65,0,0,0,41,2,114,154,0,0,0,114, -- 155,0,0,0,114,4,0,0,0,41,1,114,154,0,0,0, -- 114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,97, -- 109,101,14,2,0,0,115,6,0,0,0,0,8,21,6,13, -- 1,114,156,0,0,0,99,1,0,0,0,0,0,0,0,2, -- 0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0, -- 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125, -- 1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124, -- 1,0,83,41,3,122,49,68,101,99,111,114,97,116,111,114, -- 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, -- 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, -- 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, -- 0,2,0,0,0,4,0,0,0,19,0,0,0,115,58,0, -- 0,0,124,1,0,116,0,0,106,1,0,107,7,0,114,45, -- 0,116,2,0,100,1,0,106,3,0,124,1,0,131,1,0, -- 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,136, -- 0,0,124,0,0,124,1,0,131,2,0,83,41,3,78,122, -- 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, -- 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,67, -- 0,0,0,41,4,114,7,0,0,0,218,20,98,117,105,108, -- 116,105,110,95,109,111,100,117,108,101,95,110,97,109,101,115, -- 114,153,0,0,0,114,47,0,0,0,41,2,114,71,0,0, -- 0,218,8,102,117,108,108,110,97,109,101,41,1,218,3,102, -- 120,110,114,4,0,0,0,114,5,0,0,0,218,25,95,114, -- 101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,95, -- 119,114,97,112,112,101,114,34,2,0,0,115,8,0,0,0, -- 0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,105, -- 114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99, -- 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98, -- 117,105,108,116,105,110,95,119,114,97,112,112,101,114,41,1, -- 114,65,0,0,0,41,2,114,159,0,0,0,114,160,0,0, -- 0,114,4,0,0,0,41,1,114,159,0,0,0,114,5,0, -- 0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,117, -- 105,108,116,105,110,32,2,0,0,115,6,0,0,0,0,2, -- 18,5,13,1,114,161,0,0,0,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35, -- 0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, -- 0,0,125,1,0,116,0,0,124,1,0,136,0,0,131,2, -- 0,1,124,1,0,83,41,3,122,47,68,101,99,111,114,97, -- 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, -- 101,32,110,97,109,101,100,32,109,111,100,117,108,101,32,105, -- 115,32,102,114,111,122,101,110,46,99,2,0,0,0,0,0, -- 0,0,2,0,0,0,4,0,0,0,19,0,0,0,115,58, -- 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,115, -- 45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,1, -- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, -- 136,0,0,124,0,0,124,1,0,131,2,0,83,41,3,78, -- 122,27,123,33,114,125,32,105,115,32,110,111,116,32,97,32, -- 102,114,111,122,101,110,32,109,111,100,117,108,101,114,67,0, -- 0,0,41,4,114,106,0,0,0,218,9,105,115,95,102,114, -- 111,122,101,110,114,153,0,0,0,114,47,0,0,0,41,2, -- 114,71,0,0,0,114,158,0,0,0,41,1,114,159,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,24,95,114,101, -- 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, -- 97,112,112,101,114,45,2,0,0,115,8,0,0,0,0,1, -- 15,1,18,1,12,1,122,50,95,114,101,113,117,105,114,101, -- 115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,115, -- 62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,122, -- 101,110,95,119,114,97,112,112,101,114,41,1,114,65,0,0, -- 0,41,2,114,159,0,0,0,114,163,0,0,0,114,4,0, -- 0,0,41,1,114,159,0,0,0,114,5,0,0,0,218,16, -- 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, -- 43,2,0,0,115,6,0,0,0,0,2,18,5,13,1,114, -- 164,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, -- 0,5,0,0,0,67,0,0,0,115,87,0,0,0,124,0, +- 115,32,78,111,110,101,122,37,123,125,32,110,111,116,32,98, +- 111,116,116,111,109,45,108,101,118,101,108,32,100,105,114,101, +- 99,116,111,114,121,32,105,110,32,123,33,114,125,114,58,0, +- 0,0,114,56,0,0,0,233,3,0,0,0,122,33,101,120, +- 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, +- 32,51,32,100,111,116,115,32,105,110,32,123,33,114,125,122, +- 57,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, +- 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, +- 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, +- 32,119,105,116,104,32,123,33,114,125,122,52,111,112,116,105, +- 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,123, +- 33,114,125,32,105,115,32,110,111,116,32,97,110,32,97,108, +- 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, +- 114,59,0,0,0,62,2,0,0,0,114,56,0,0,0,114, +- 80,0,0,0,233,254,255,255,255,41,17,114,7,0,0,0, +- 114,64,0,0,0,114,65,0,0,0,114,66,0,0,0,114, +- 38,0,0,0,114,73,0,0,0,114,71,0,0,0,114,47, +- 0,0,0,218,5,99,111,117,110,116,114,34,0,0,0,114, +- 9,0,0,0,114,72,0,0,0,114,31,0,0,0,114,70, +- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,28, +- 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, +- 73,88,69,83,41,8,114,35,0,0,0,114,76,0,0,0, +- 90,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, +- 109,101,90,7,112,121,99,97,99,104,101,90,9,100,111,116, +- 95,99,111,117,110,116,114,57,0,0,0,90,9,111,112,116, +- 95,108,101,118,101,108,90,13,98,97,115,101,95,102,105,108, +- 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,115,111,117,114,99,101,95,102,114,111, +- 109,95,99,97,99,104,101,31,1,0,0,115,44,0,0,0, +- 0,9,18,1,12,1,18,1,18,1,12,1,9,1,15,1, +- 15,1,12,1,9,1,15,1,12,1,22,1,15,1,9,1, +- 12,1,22,1,12,1,9,1,12,1,19,1,114,85,0,0, +- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,12,0, +- 0,0,67,0,0,0,115,164,0,0,0,116,0,0,124,0, +- 0,131,1,0,100,1,0,107,2,0,114,22,0,100,2,0, +- 83,124,0,0,106,1,0,100,3,0,131,1,0,92,3,0, +- 125,1,0,125,2,0,125,3,0,124,1,0,12,115,81,0, +- 124,3,0,106,2,0,131,0,0,100,7,0,100,8,0,133, +- 2,0,25,100,6,0,107,3,0,114,85,0,124,0,0,83, +- 121,16,0,116,3,0,124,0,0,131,1,0,125,4,0,87, +- 110,40,0,4,116,4,0,116,5,0,102,2,0,107,10,0, +- 114,143,0,1,1,1,124,0,0,100,2,0,100,9,0,133, +- 2,0,25,125,4,0,89,110,1,0,88,116,6,0,124,4, +- 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,41, +- 10,122,188,67,111,110,118,101,114,116,32,97,32,98,121,116, +- 101,99,111,100,101,32,102,105,108,101,32,112,97,116,104,32, +- 116,111,32,97,32,115,111,117,114,99,101,32,112,97,116,104, +- 32,40,105,102,32,112,111,115,115,105,98,108,101,41,46,10, +- 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, +- 111,110,32,101,120,105,115,116,115,32,112,117,114,101,108,121, +- 32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99, +- 111,109,112,97,116,105,98,105,108,105,116,121,32,102,111,114, +- 10,32,32,32,32,80,121,73,109,112,111,114,116,95,69,120, +- 101,99,67,111,100,101,77,111,100,117,108,101,87,105,116,104, +- 70,105,108,101,110,97,109,101,115,40,41,32,105,110,32,116, +- 104,101,32,67,32,65,80,73,46,10,10,32,32,32,32,114, +- 59,0,0,0,78,114,58,0,0,0,114,80,0,0,0,114, +- 29,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, +- 255,255,114,87,0,0,0,41,7,114,31,0,0,0,114,32, +- 0,0,0,218,5,108,111,119,101,114,114,85,0,0,0,114, +- 66,0,0,0,114,71,0,0,0,114,44,0,0,0,41,5, +- 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, +- 78,0,0,0,114,36,0,0,0,90,9,101,120,116,101,110, +- 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, +- 104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, +- 101,64,1,0,0,115,20,0,0,0,0,7,18,1,4,1, +- 24,1,35,1,4,1,3,1,16,1,19,1,21,1,114,91, +- 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, +- 11,0,0,0,67,0,0,0,115,92,0,0,0,124,0,0, +- 106,0,0,116,1,0,116,2,0,131,1,0,131,1,0,114, +- 59,0,121,14,0,116,3,0,124,0,0,131,1,0,83,87, +- 113,88,0,4,116,4,0,107,10,0,114,55,0,1,1,1, +- 89,113,88,0,88,110,29,0,124,0,0,106,0,0,116,1, +- 0,116,5,0,131,1,0,131,1,0,114,84,0,124,0,0, +- 83,100,0,0,83,100,0,0,83,41,1,78,41,6,218,8, +- 101,110,100,115,119,105,116,104,218,5,116,117,112,108,101,114, +- 84,0,0,0,114,79,0,0,0,114,66,0,0,0,114,74, +- 0,0,0,41,1,218,8,102,105,108,101,110,97,109,101,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11, +- 95,103,101,116,95,99,97,99,104,101,100,83,1,0,0,115, +- 16,0,0,0,0,1,21,1,3,1,14,1,13,1,8,1, +- 21,1,4,2,114,95,0,0,0,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,60, +- 0,0,0,121,19,0,116,0,0,124,0,0,131,1,0,106, +- 1,0,125,1,0,87,110,24,0,4,116,2,0,107,10,0, +- 114,45,0,1,1,1,100,1,0,125,1,0,89,110,1,0, +- 88,124,1,0,100,2,0,79,125,1,0,124,1,0,83,41, +- 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, +- 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, +- 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, +- 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, +- 41,3,114,39,0,0,0,114,41,0,0,0,114,40,0,0, +- 0,41,2,114,35,0,0,0,114,42,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,99, +- 97,108,99,95,109,111,100,101,95,1,0,0,115,12,0,0, +- 0,0,2,3,1,19,1,13,1,11,3,10,1,114,97,0, +- 0,0,218,9,118,101,114,98,111,115,105,116,121,114,29,0, +- 0,0,99,1,0,0,0,1,0,0,0,3,0,0,0,4, +- 0,0,0,71,0,0,0,115,75,0,0,0,116,0,0,106, +- 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, +- 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, +- 124,0,0,23,125,0,0,116,4,0,124,0,0,106,5,0, +- 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, +- 1,1,1,100,5,0,83,41,7,122,61,80,114,105,110,116, +- 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, +- 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, +- 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, +- 114,110,101,100,32,111,110,46,250,1,35,250,7,105,109,112, +- 111,114,116,32,122,2,35,32,114,54,0,0,0,78,41,2, +- 114,99,0,0,0,114,100,0,0,0,41,7,114,7,0,0, +- 0,114,67,0,0,0,218,7,118,101,114,98,111,115,101,114, +- 9,0,0,0,218,5,112,114,105,110,116,114,47,0,0,0, +- 218,6,115,116,100,101,114,114,41,3,114,75,0,0,0,114, +- 98,0,0,0,218,4,97,114,103,115,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,16,95,118,101,114,98, +- 111,115,101,95,109,101,115,115,97,103,101,107,1,0,0,115, +- 8,0,0,0,0,2,18,1,15,1,10,1,114,105,0,0, +- 0,99,1,0,0,0,0,0,0,0,3,0,0,0,11,0, +- 0,0,3,0,0,0,115,84,0,0,0,100,1,0,135,0, +- 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, +- 121,13,0,116,0,0,106,1,0,125,2,0,87,110,30,0, +- 4,116,2,0,107,10,0,114,66,0,1,1,1,100,4,0, +- 100,5,0,132,0,0,125,2,0,89,110,1,0,88,124,2, +- 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41, +- 6,122,252,68,101,99,111,114,97,116,111,114,32,116,111,32, +- 118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32, +- 109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,113, +- 117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,116, +- 104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,108, +- 111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,101, +- 46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,116, +- 32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,41, +- 32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,97, +- 109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,99, +- 111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,10, +- 32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,97, +- 105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,109, +- 112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,104, +- 101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, +- 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, +- 99,2,0,0,0,0,0,0,0,4,0,0,0,5,0,0, +- 0,31,0,0,0,115,89,0,0,0,124,1,0,100,0,0, +- 107,8,0,114,24,0,124,0,0,106,0,0,125,1,0,110, +- 46,0,124,0,0,106,0,0,124,1,0,107,3,0,114,70, +- 0,116,1,0,100,1,0,124,0,0,106,0,0,124,1,0, +- 102,2,0,22,100,2,0,124,1,0,131,1,1,130,1,0, +- 136,0,0,124,0,0,124,1,0,124,2,0,124,3,0,142, +- 2,0,83,41,3,78,122,30,108,111,97,100,101,114,32,102, +- 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, +- 100,108,101,32,37,115,218,4,110,97,109,101,41,2,114,106, +- 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, +- 41,4,218,4,115,101,108,102,114,106,0,0,0,114,104,0, +- 0,0,90,6,107,119,97,114,103,115,41,1,218,6,109,101, +- 116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19, +- 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, +- 112,101,114,123,1,0,0,115,12,0,0,0,0,1,12,1, +- 12,1,15,1,6,1,25,1,122,40,95,99,104,101,99,107, +- 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, +- 99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112, +- 101,114,99,2,0,0,0,0,0,0,0,3,0,0,0,7, +- 0,0,0,83,0,0,0,115,92,0,0,0,120,66,0,100, +- 1,0,100,2,0,100,3,0,100,4,0,103,4,0,68,93, +- 46,0,125,2,0,116,0,0,124,1,0,124,2,0,131,2, +- 0,114,19,0,116,1,0,124,0,0,124,2,0,116,2,0, +- 124,1,0,124,2,0,131,2,0,131,3,0,1,113,19,0, +- 87,124,0,0,106,3,0,106,4,0,124,1,0,106,3,0, +- 131,1,0,1,100,0,0,83,41,5,78,218,10,95,95,109, +- 111,100,117,108,101,95,95,218,8,95,95,110,97,109,101,95, +- 95,218,12,95,95,113,117,97,108,110,97,109,101,95,95,218, +- 7,95,95,100,111,99,95,95,41,5,218,7,104,97,115,97, +- 116,116,114,218,7,115,101,116,97,116,116,114,218,7,103,101, +- 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, +- 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, +- 111,108,100,114,52,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,5,95,119,114,97,112,134,1, +- 0,0,115,8,0,0,0,0,1,25,1,15,1,29,1,122, +- 26,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, +- 99,97,108,115,62,46,95,119,114,97,112,41,3,218,10,95, +- 98,111,111,116,115,116,114,97,112,114,120,0,0,0,218,9, +- 78,97,109,101,69,114,114,111,114,41,3,114,109,0,0,0, +- 114,110,0,0,0,114,120,0,0,0,114,4,0,0,0,41, +- 1,114,109,0,0,0,114,5,0,0,0,218,11,95,99,104, +- 101,99,107,95,110,97,109,101,115,1,0,0,115,14,0,0, +- 0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114, +- 123,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, +- 0,4,0,0,0,67,0,0,0,115,84,0,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, -- 125,3,0,124,2,0,100,1,0,107,8,0,114,83,0,116, -- 1,0,124,3,0,131,1,0,114,83,0,100,2,0,125,4, +- 125,3,0,124,2,0,100,1,0,107,8,0,114,80,0,116, +- 1,0,124,3,0,131,1,0,114,80,0,100,2,0,125,4, - 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, -- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,110,0, -- 0,124,2,0,83,41,4,122,155,84,114,121,32,116,111,32, -- 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, -- 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, -- 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, -- 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, -- 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, -- 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, -- 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, -- 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, -- 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, -- 32,32,32,32,78,122,44,78,111,116,32,105,109,112,111,114, -- 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, -- 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, -- 116,95,95,114,84,0,0,0,41,6,218,11,102,105,110,100, -- 95,108,111,97,100,101,114,114,31,0,0,0,218,9,95,119, -- 97,114,110,105,110,103,115,218,4,119,97,114,110,114,47,0, -- 0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,110, -- 103,41,5,114,71,0,0,0,114,158,0,0,0,218,6,108, -- 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, -- 3,109,115,103,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, -- 101,95,115,104,105,109,54,2,0,0,115,10,0,0,0,0, -- 10,21,1,24,1,6,1,32,1,114,172,0,0,0,99,2, -- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, -- 0,0,0,115,93,0,0,0,116,0,0,124,1,0,124,0, -- 0,131,2,0,125,2,0,116,1,0,124,2,0,131,1,0, -- 125,3,0,124,1,0,116,2,0,106,3,0,107,6,0,114, -- 79,0,116,2,0,106,3,0,124,1,0,25,125,4,0,124, -- 3,0,106,4,0,124,4,0,131,1,0,1,116,2,0,106, -- 3,0,124,1,0,25,83,124,3,0,106,5,0,131,0,0, -- 83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,104, -- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, -- 108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117, -- 108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105, -- 116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, -- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, -- 100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101, -- 120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,112, -- 101,99,95,102,114,111,109,95,108,111,97,100,101,114,218,12, -- 95,83,112,101,99,77,101,116,104,111,100,115,114,7,0,0, -- 0,114,73,0,0,0,218,4,101,120,101,99,218,4,108,111, -- 97,100,41,5,114,71,0,0,0,114,158,0,0,0,218,4, -- 115,112,101,99,218,7,109,101,116,104,111,100,115,218,6,109, -- 111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, -- 108,101,95,115,104,105,109,71,2,0,0,115,14,0,0,0, -- 0,6,15,1,12,1,15,1,13,1,13,1,11,2,114,180, -- 0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,0, -- 19,0,0,0,67,0,0,0,115,243,1,0,0,105,0,0, -- 125,4,0,124,2,0,100,1,0,107,9,0,114,31,0,124, -- 2,0,124,4,0,100,2,0,60,110,6,0,100,3,0,125, -- 2,0,124,3,0,100,1,0,107,9,0,114,62,0,124,3, -- 0,124,4,0,100,4,0,60,110,0,0,124,0,0,100,1, -- 0,100,5,0,133,2,0,25,125,5,0,124,0,0,100,5, -- 0,100,6,0,133,2,0,25,125,6,0,124,0,0,100,6, -- 0,100,7,0,133,2,0,25,125,7,0,124,5,0,116,0, -- 0,107,3,0,114,168,0,100,8,0,106,1,0,124,2,0, -- 124,5,0,131,2,0,125,8,0,116,2,0,124,8,0,131, -- 1,0,1,116,3,0,124,8,0,124,4,0,141,1,0,130, -- 1,0,110,116,0,116,4,0,124,6,0,131,1,0,100,5, -- 0,107,3,0,114,226,0,100,9,0,106,1,0,124,2,0, -- 131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1, -- 116,5,0,124,8,0,131,1,0,130,1,0,110,58,0,116, -- 4,0,124,7,0,131,1,0,100,5,0,107,3,0,114,28, -- 1,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, -- 116,2,0,124,8,0,131,1,0,1,116,5,0,124,8,0, -- 131,1,0,130,1,0,110,0,0,124,1,0,100,1,0,107, -- 9,0,114,229,1,121,20,0,116,6,0,124,1,0,100,11, -- 0,25,131,1,0,125,9,0,87,110,18,0,4,116,7,0, -- 107,10,0,114,80,1,1,1,1,89,110,62,0,88,116,8, -- 0,124,6,0,131,1,0,124,9,0,107,3,0,114,142,1, -- 100,12,0,106,1,0,124,2,0,131,1,0,125,8,0,116, -- 2,0,124,8,0,131,1,0,1,116,3,0,124,8,0,124, -- 4,0,141,1,0,130,1,0,110,0,0,121,18,0,124,1, -- 0,100,13,0,25,100,14,0,64,125,10,0,87,110,18,0, -- 4,116,7,0,107,10,0,114,180,1,1,1,1,89,113,229, -- 1,88,116,8,0,124,7,0,131,1,0,124,10,0,107,3, -- 0,114,229,1,116,3,0,100,12,0,106,1,0,124,2,0, -- 131,1,0,124,4,0,141,1,0,130,1,0,113,229,1,110, -- 0,0,124,0,0,100,7,0,100,1,0,133,2,0,25,83, -- 41,15,97,122,1,0,0,86,97,108,105,100,97,116,101,32, -- 116,104,101,32,104,101,97,100,101,114,32,111,102,32,116,104, -- 101,32,112,97,115,115,101,100,45,105,110,32,98,121,116,101, -- 99,111,100,101,32,97,103,97,105,110,115,116,32,115,111,117, -- 114,99,101,95,115,116,97,116,115,32,40,105,102,10,32,32, -- 32,32,103,105,118,101,110,41,32,97,110,100,32,114,101,116, -- 117,114,110,105,110,103,32,116,104,101,32,98,121,116,101,99, -- 111,100,101,32,116,104,97,116,32,99,97,110,32,98,101,32, -- 99,111,109,112,105,108,101,100,32,98,121,32,99,111,109,112, -- 105,108,101,40,41,46,10,10,32,32,32,32,65,108,108,32, -- 111,116,104,101,114,32,97,114,103,117,109,101,110,116,115,32, -- 97,114,101,32,117,115,101,100,32,116,111,32,101,110,104,97, -- 110,99,101,32,101,114,114,111,114,32,114,101,112,111,114,116, -- 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, -- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, -- 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, -- 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, -- 99,116,32,111,114,32,116,104,101,32,98,121,116,101,99,111, -- 100,101,32,105,115,10,32,32,32,32,102,111,117,110,100,32, -- 116,111,32,98,101,32,115,116,97,108,101,46,32,69,79,70, -- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, -- 119,104,101,110,32,116,104,101,32,100,97,116,97,32,105,115, -- 32,102,111,117,110,100,32,116,111,32,98,101,10,32,32,32, -- 32,116,114,117,110,99,97,116,101,100,46,10,10,32,32,32, -- 32,78,114,67,0,0,0,122,10,60,98,121,116,101,99,111, -- 100,101,62,114,35,0,0,0,114,12,0,0,0,233,8,0, -- 0,0,233,12,0,0,0,122,30,98,97,100,32,109,97,103, -- 105,99,32,110,117,109,98,101,114,32,105,110,32,123,33,114, -- 125,58,32,123,33,114,125,122,43,114,101,97,99,104,101,100, -- 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, -- 110,103,32,116,105,109,101,115,116,97,109,112,32,105,110,32, -- 123,33,114,125,122,48,114,101,97,99,104,101,100,32,69,79, -- 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, -- 115,105,122,101,32,111,102,32,115,111,117,114,99,101,32,105, -- 110,32,123,33,114,125,218,5,109,116,105,109,101,122,26,98, -- 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, -- 32,102,111,114,32,123,33,114,125,218,4,115,105,122,101,108, -- 3,0,0,0,255,127,255,127,3,0,41,9,218,12,77,65, -- 71,73,67,95,78,85,77,66,69,82,114,47,0,0,0,114, -- 152,0,0,0,114,153,0,0,0,114,31,0,0,0,218,8, -- 69,79,70,69,114,114,111,114,114,14,0,0,0,114,79,0, -- 0,0,114,19,0,0,0,41,11,114,53,0,0,0,218,12, -- 115,111,117,114,99,101,95,115,116,97,116,115,114,67,0,0, -- 0,114,35,0,0,0,90,11,101,120,99,95,100,101,116,97, -- 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, -- 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, -- 105,122,101,114,151,0,0,0,218,12,115,111,117,114,99,101, -- 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, -- 105,122,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, -- 116,101,99,111,100,101,95,104,101,97,100,101,114,87,2,0, -- 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, -- 12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1, -- 18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1, -- 15,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, -- 10,1,18,1,3,1,18,1,13,1,5,2,18,1,15,1, -- 15,1,114,190,0,0,0,99,4,0,0,0,0,0,0,0, -- 5,0,0,0,6,0,0,0,67,0,0,0,115,115,0,0, -- 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, -- 116,2,0,124,4,0,116,3,0,131,2,0,114,78,0,116, -- 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, -- 2,0,107,9,0,114,74,0,116,5,0,106,6,0,124,4, -- 0,124,3,0,131,2,0,1,110,0,0,124,4,0,83,116, -- 7,0,100,3,0,106,8,0,124,2,0,131,1,0,100,4, -- 0,124,1,0,100,5,0,124,2,0,131,1,2,130,1,0, -- 100,2,0,83,41,6,122,60,67,111,109,112,105,108,101,32, -- 98,121,116,101,99,111,100,101,32,97,115,32,114,101,116,117, -- 114,110,101,100,32,98,121,32,95,118,97,108,105,100,97,116, -- 101,95,98,121,116,101,99,111,100,101,95,104,101,97,100,101, -- 114,40,41,46,122,21,99,111,100,101,32,111,98,106,101,99, -- 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, -- 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, -- 32,123,33,114,125,114,67,0,0,0,114,35,0,0,0,41, -- 9,218,7,109,97,114,115,104,97,108,90,5,108,111,97,100, -- 115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,95, -- 99,111,100,101,95,116,121,112,101,114,152,0,0,0,114,106, -- 0,0,0,90,16,95,102,105,120,95,99,111,95,102,105,108, -- 101,110,97,109,101,114,153,0,0,0,114,47,0,0,0,41, -- 5,114,53,0,0,0,114,67,0,0,0,114,140,0,0,0, -- 114,141,0,0,0,218,4,99,111,100,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,109, -- 112,105,108,101,95,98,121,116,101,99,111,100,101,142,2,0, -- 0,115,16,0,0,0,0,2,15,1,15,1,13,1,12,1, -- 19,1,4,2,18,1,114,195,0,0,0,114,84,0,0,0, -- 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, -- 0,67,0,0,0,115,76,0,0,0,116,0,0,116,1,0, -- 131,1,0,125,3,0,124,3,0,106,2,0,116,3,0,124, -- 1,0,131,1,0,131,1,0,1,124,3,0,106,2,0,116, -- 3,0,124,2,0,131,1,0,131,1,0,1,124,3,0,106, -- 2,0,116,4,0,106,5,0,124,0,0,131,1,0,131,1, -- 0,1,124,3,0,83,41,1,122,80,67,111,109,112,105,108, -- 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,32, -- 105,110,116,111,32,98,121,116,101,99,111,100,101,32,102,111, -- 114,32,119,114,105,116,105,110,103,32,111,117,116,32,116,111, -- 32,97,32,98,121,116,101,45,99,111,109,112,105,108,101,100, -- 10,32,32,32,32,102,105,108,101,46,41,6,218,9,98,121, -- 116,101,97,114,114,97,121,114,185,0,0,0,218,6,101,120, -- 116,101,110,100,114,17,0,0,0,114,191,0,0,0,90,5, -- 100,117,109,112,115,41,4,114,194,0,0,0,114,183,0,0, -- 0,114,189,0,0,0,114,53,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,100, -- 101,95,116,111,95,98,121,116,101,99,111,100,101,154,2,0, -- 0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,1, -- 114,198,0,0,0,99,1,0,0,0,0,0,0,0,5,0, -- 0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,100, -- 1,0,100,2,0,108,0,0,125,1,0,116,1,0,106,2, -- 0,124,0,0,131,1,0,106,3,0,125,2,0,124,1,0, -- 106,4,0,124,2,0,131,1,0,125,3,0,116,1,0,106, -- 5,0,100,2,0,100,3,0,131,2,0,125,4,0,124,4, -- 0,106,6,0,124,0,0,106,6,0,124,3,0,100,1,0, -- 25,131,1,0,131,1,0,83,41,4,122,121,68,101,99,111, -- 100,101,32,98,121,116,101,115,32,114,101,112,114,101,115,101, -- 110,116,105,110,103,32,115,111,117,114,99,101,32,99,111,100, -- 101,32,97,110,100,32,114,101,116,117,114,110,32,116,104,101, -- 32,115,116,114,105,110,103,46,10,10,32,32,32,32,85,110, -- 105,118,101,114,115,97,108,32,110,101,119,108,105,110,101,32, -- 115,117,112,112,111,114,116,32,105,115,32,117,115,101,100,32, -- 105,110,32,116,104,101,32,100,101,99,111,100,105,110,103,46, -- 10,32,32,32,32,114,84,0,0,0,78,84,41,7,218,8, -- 116,111,107,101,110,105,122,101,114,49,0,0,0,90,7,66, -- 121,116,101,115,73,79,90,8,114,101,97,100,108,105,110,101, -- 90,15,100,101,116,101,99,116,95,101,110,99,111,100,105,110, -- 103,90,25,73,110,99,114,101,109,101,110,116,97,108,78,101, -- 119,108,105,110,101,68,101,99,111,100,101,114,218,6,100,101, -- 99,111,100,101,41,5,218,12,115,111,117,114,99,101,95,98, -- 121,116,101,115,114,199,0,0,0,90,21,115,111,117,114,99, -- 101,95,98,121,116,101,115,95,114,101,97,100,108,105,110,101, -- 218,8,101,110,99,111,100,105,110,103,90,15,110,101,119,108, -- 105,110,101,95,100,101,99,111,100,101,114,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,111, -- 100,101,95,115,111,117,114,99,101,164,2,0,0,115,10,0, -- 0,0,0,5,12,1,18,1,15,1,18,1,114,203,0,0, -- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,0, -- 0,0,67,0,0,0,115,15,1,0,0,116,0,0,124,0, -- 0,100,1,0,100,0,0,131,3,0,125,1,0,116,1,0, -- 124,1,0,100,2,0,131,2,0,114,74,0,121,17,0,124, -- 1,0,106,2,0,124,0,0,131,1,0,83,87,113,74,0, -- 4,116,3,0,107,10,0,114,70,0,1,1,1,89,113,74, -- 0,88,110,0,0,121,13,0,124,0,0,106,4,0,125,2, -- 0,87,110,18,0,4,116,5,0,107,10,0,114,107,0,1, -- 1,1,89,110,29,0,88,124,2,0,100,0,0,107,9,0, -- 114,136,0,116,6,0,124,2,0,131,1,0,106,2,0,131, -- 0,0,83,121,13,0,124,0,0,106,7,0,125,3,0,87, -- 110,24,0,4,116,5,0,107,10,0,114,175,0,1,1,1, -- 100,3,0,125,3,0,89,110,1,0,88,121,13,0,124,0, -- 0,106,8,0,125,4,0,87,110,59,0,4,116,5,0,107, -- 10,0,114,250,0,1,1,1,124,1,0,100,0,0,107,8, -- 0,114,230,0,100,4,0,106,9,0,124,3,0,131,1,0, -- 83,100,5,0,106,9,0,124,3,0,124,1,0,131,2,0, -- 83,89,110,17,0,88,100,6,0,106,9,0,124,3,0,124, -- 4,0,131,2,0,83,100,0,0,83,41,7,78,218,10,95, -- 95,108,111,97,100,101,114,95,95,218,11,109,111,100,117,108, -- 101,95,114,101,112,114,250,1,63,122,13,60,109,111,100,117, -- 108,101,32,123,33,114,125,62,122,20,60,109,111,100,117,108, -- 101,32,123,33,114,125,32,40,123,33,114,125,41,62,122,23, -- 60,109,111,100,117,108,101,32,123,33,114,125,32,102,114,111, -- 109,32,123,33,114,125,62,41,10,114,62,0,0,0,114,60, -- 0,0,0,114,205,0,0,0,218,9,69,120,99,101,112,116, -- 105,111,110,218,8,95,95,115,112,101,99,95,95,218,14,65, -- 116,116,114,105,98,117,116,101,69,114,114,111,114,114,174,0, -- 0,0,114,57,0,0,0,218,8,95,95,102,105,108,101,95, -- 95,114,47,0,0,0,41,5,114,179,0,0,0,114,169,0, -- 0,0,114,177,0,0,0,114,67,0,0,0,114,131,0,0, +- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,124,2, +- 0,83,41,4,122,155,84,114,121,32,116,111,32,102,105,110, +- 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, +- 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, +- 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, +- 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, +- 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, +- 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, +- 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, +- 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, +- 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, +- 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, +- 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, +- 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, +- 114,59,0,0,0,41,6,218,11,102,105,110,100,95,108,111, +- 97,100,101,114,114,31,0,0,0,114,60,0,0,0,114,61, +- 0,0,0,114,47,0,0,0,218,13,73,109,112,111,114,116, +- 87,97,114,110,105,110,103,41,5,114,108,0,0,0,218,8, +- 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114, +- 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, +- 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, +- 109,143,1,0,0,115,10,0,0,0,0,10,21,1,24,1, +- 6,1,29,1,114,130,0,0,0,99,4,0,0,0,0,0, +- 0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,240, +- 1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107, +- 9,0,114,31,0,124,2,0,124,4,0,100,2,0,60,110, +- 6,0,100,3,0,125,2,0,124,3,0,100,1,0,107,9, +- 0,114,59,0,124,3,0,124,4,0,100,4,0,60,124,0, +- 0,100,1,0,100,5,0,133,2,0,25,125,5,0,124,0, +- 0,100,5,0,100,6,0,133,2,0,25,125,6,0,124,0, +- 0,100,6,0,100,7,0,133,2,0,25,125,7,0,124,5, +- 0,116,0,0,107,3,0,114,168,0,100,8,0,106,1,0, +- 124,2,0,124,5,0,131,2,0,125,8,0,116,2,0,100, +- 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, +- 4,0,141,1,0,130,1,0,110,119,0,116,4,0,124,6, +- 0,131,1,0,100,5,0,107,3,0,114,229,0,100,10,0, +- 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, +- 9,0,124,8,0,131,2,0,1,116,5,0,124,8,0,131, +- 1,0,130,1,0,110,58,0,116,4,0,124,7,0,131,1, +- 0,100,5,0,107,3,0,114,31,1,100,11,0,106,1,0, +- 124,2,0,131,1,0,125,8,0,116,2,0,100,9,0,124, +- 8,0,131,2,0,1,116,5,0,124,8,0,131,1,0,130, +- 1,0,124,1,0,100,1,0,107,9,0,114,226,1,121,20, +- 0,116,6,0,124,1,0,100,12,0,25,131,1,0,125,9, +- 0,87,110,18,0,4,116,7,0,107,10,0,114,83,1,1, +- 1,1,89,110,62,0,88,116,8,0,124,6,0,131,1,0, +- 124,9,0,107,3,0,114,145,1,100,13,0,106,1,0,124, +- 2,0,131,1,0,125,8,0,116,2,0,100,9,0,124,8, +- 0,131,2,0,1,116,3,0,124,8,0,124,4,0,141,1, +- 0,130,1,0,121,18,0,124,1,0,100,14,0,25,100,15, +- 0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0, +- 114,183,1,1,1,1,89,110,43,0,88,116,8,0,124,7, +- 0,131,1,0,124,10,0,107,3,0,114,226,1,116,3,0, +- 100,13,0,106,1,0,124,2,0,131,1,0,124,4,0,141, +- 1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2, +- 0,25,83,41,16,97,122,1,0,0,86,97,108,105,100,97, +- 116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,102, +- 32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,98, +- 121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,32, +- 115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,102, +- 10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,32, +- 114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,121, +- 116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,32, +- 98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,99, +- 111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,65, +- 108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,110, +- 116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101, +- 110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,112, +- 111,114,116,105,110,103,46,10,10,32,32,32,32,73,109,112, +- 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, +- 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, +- 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, +- 114,114,101,99,116,32,111,114,32,116,104,101,32,98,121,116, +- 101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,117, +- 110,100,32,116,111,32,98,101,32,115,116,97,108,101,46,32, +- 69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,115, +- 101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,97, +- 32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,10, +- 32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,10, +- 32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,116, +- 101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,0, +- 233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,32, +- 109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32, +- 123,33,114,125,58,32,123,33,114,125,122,2,123,125,122,43, +- 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, +- 101,32,114,101,97,100,105,110,103,32,116,105,109,101,115,116, +- 97,109,112,32,105,110,32,123,33,114,125,122,48,114,101,97, +- 99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114, +- 101,97,100,105,110,103,32,115,105,122,101,32,111,102,32,115, +- 111,117,114,99,101,32,105,110,32,123,33,114,125,218,5,109, +- 116,105,109,101,122,26,98,121,116,101,99,111,100,101,32,105, +- 115,32,115,116,97,108,101,32,102,111,114,32,123,33,114,125, +- 218,4,115,105,122,101,108,3,0,0,0,255,127,255,127,3, +- 0,41,9,218,12,77,65,71,73,67,95,78,85,77,66,69, +- 82,114,47,0,0,0,114,105,0,0,0,114,107,0,0,0, +- 114,31,0,0,0,218,8,69,79,70,69,114,114,111,114,114, +- 14,0,0,0,218,8,75,101,121,69,114,114,111,114,114,19, +- 0,0,0,41,11,114,53,0,0,0,218,12,115,111,117,114, +- 99,101,95,115,116,97,116,115,114,106,0,0,0,114,35,0, +- 0,0,90,11,101,120,99,95,100,101,116,97,105,108,115,90, +- 5,109,97,103,105,99,90,13,114,97,119,95,116,105,109,101, +- 115,116,97,109,112,90,8,114,97,119,95,115,105,122,101,114, +- 75,0,0,0,218,12,115,111,117,114,99,101,95,109,116,105, +- 109,101,218,11,115,111,117,114,99,101,95,115,105,122,101,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,25, +- 95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111, +- 100,101,95,104,101,97,100,101,114,160,1,0,0,115,76,0, +- 0,0,0,11,6,1,12,1,13,3,6,1,12,1,10,1, +- 16,1,16,1,16,1,12,1,18,1,13,1,18,1,18,1, +- 15,1,13,1,15,1,18,1,15,1,13,1,12,1,12,1, +- 3,1,20,1,13,1,5,2,18,1,15,1,13,1,15,1, +- 3,1,18,1,13,1,5,2,18,1,15,1,9,1,114,141, +- 0,0,0,99,4,0,0,0,0,0,0,0,5,0,0,0, +- 6,0,0,0,67,0,0,0,115,112,0,0,0,116,0,0, +- 106,1,0,124,0,0,131,1,0,125,4,0,116,2,0,124, +- 4,0,116,3,0,131,2,0,114,75,0,116,4,0,100,1, +- 0,124,2,0,131,2,0,1,124,3,0,100,2,0,107,9, +- 0,114,71,0,116,5,0,106,6,0,124,4,0,124,3,0, +- 131,2,0,1,124,4,0,83,116,7,0,100,3,0,106,8, +- 0,124,2,0,131,1,0,100,4,0,124,1,0,100,5,0, +- 124,2,0,131,1,2,130,1,0,100,2,0,83,41,6,122, +- 60,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, +- 101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121, +- 32,95,118,97,108,105,100,97,116,101,95,98,121,116,101,99, +- 111,100,101,95,104,101,97,100,101,114,40,41,46,122,21,99, +- 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, +- 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, +- 111,98,106,101,99,116,32,105,110,32,123,33,114,125,114,106, +- 0,0,0,114,35,0,0,0,41,9,218,7,109,97,114,115, +- 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, +- 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, +- 112,101,114,105,0,0,0,218,4,95,105,109,112,90,16,95, +- 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, +- 107,0,0,0,114,47,0,0,0,41,5,114,53,0,0,0, +- 114,106,0,0,0,114,89,0,0,0,114,90,0,0,0,218, +- 4,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,99,111,109,112,105,108,101,95,98, +- 121,116,101,99,111,100,101,215,1,0,0,115,16,0,0,0, +- 0,2,15,1,15,1,13,1,12,1,16,1,4,2,18,1, +- 114,147,0,0,0,114,59,0,0,0,99,3,0,0,0,0, +- 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, +- 76,0,0,0,116,0,0,116,1,0,131,1,0,125,3,0, +- 124,3,0,106,2,0,116,3,0,124,1,0,131,1,0,131, +- 1,0,1,124,3,0,106,2,0,116,3,0,124,2,0,131, +- 1,0,131,1,0,1,124,3,0,106,2,0,116,4,0,106, +- 5,0,124,0,0,131,1,0,131,1,0,1,124,3,0,83, +- 41,1,122,80,67,111,109,112,105,108,101,32,97,32,99,111, +- 100,101,32,111,98,106,101,99,116,32,105,110,116,111,32,98, +- 121,116,101,99,111,100,101,32,102,111,114,32,119,114,105,116, +- 105,110,103,32,111,117,116,32,116,111,32,97,32,98,121,116, +- 101,45,99,111,109,112,105,108,101,100,10,32,32,32,32,102, +- 105,108,101,46,41,6,218,9,98,121,116,101,97,114,114,97, +- 121,114,135,0,0,0,218,6,101,120,116,101,110,100,114,17, +- 0,0,0,114,142,0,0,0,90,5,100,117,109,112,115,41, +- 4,114,146,0,0,0,114,133,0,0,0,114,140,0,0,0, +- 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,99,111,100,101,95,116,111,95,98, +- 121,116,101,99,111,100,101,227,1,0,0,115,10,0,0,0, +- 0,3,12,1,19,1,19,1,22,1,114,150,0,0,0,99, +- 1,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, +- 67,0,0,0,115,89,0,0,0,100,1,0,100,2,0,108, +- 0,0,125,1,0,116,1,0,106,2,0,124,0,0,131,1, +- 0,106,3,0,125,2,0,124,1,0,106,4,0,124,2,0, +- 131,1,0,125,3,0,116,1,0,106,5,0,100,2,0,100, +- 3,0,131,2,0,125,4,0,124,4,0,106,6,0,124,0, +- 0,106,6,0,124,3,0,100,1,0,25,131,1,0,131,1, +- 0,83,41,4,122,121,68,101,99,111,100,101,32,98,121,116, +- 101,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32, +- 115,111,117,114,99,101,32,99,111,100,101,32,97,110,100,32, +- 114,101,116,117,114,110,32,116,104,101,32,115,116,114,105,110, +- 103,46,10,10,32,32,32,32,85,110,105,118,101,114,115,97, +- 108,32,110,101,119,108,105,110,101,32,115,117,112,112,111,114, +- 116,32,105,115,32,117,115,101,100,32,105,110,32,116,104,101, +- 32,100,101,99,111,100,105,110,103,46,10,32,32,32,32,114, +- 59,0,0,0,78,84,41,7,218,8,116,111,107,101,110,105, +- 122,101,114,49,0,0,0,90,7,66,121,116,101,115,73,79, +- 90,8,114,101,97,100,108,105,110,101,90,15,100,101,116,101, +- 99,116,95,101,110,99,111,100,105,110,103,90,25,73,110,99, +- 114,101,109,101,110,116,97,108,78,101,119,108,105,110,101,68, +- 101,99,111,100,101,114,218,6,100,101,99,111,100,101,41,5, +- 218,12,115,111,117,114,99,101,95,98,121,116,101,115,114,151, +- 0,0,0,90,21,115,111,117,114,99,101,95,98,121,116,101, +- 115,95,114,101,97,100,108,105,110,101,218,8,101,110,99,111, +- 100,105,110,103,90,15,110,101,119,108,105,110,101,95,100,101, +- 99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,13,100,101,99,111,100,101,95,115,111,117, +- 114,99,101,237,1,0,0,115,10,0,0,0,0,5,12,1, +- 18,1,15,1,18,1,114,155,0,0,0,114,127,0,0,0, +- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, +- 99,104,95,108,111,99,97,116,105,111,110,115,99,2,0,0, +- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, +- 0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114, +- 73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, +- 0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0, +- 124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2, +- 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116, +- 3,0,106,4,0,124,0,0,124,2,0,100,4,0,124,1, +- 0,131,2,1,125,4,0,100,5,0,124,4,0,95,5,0, +- 124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116, +- 6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125, +- 6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1, +- 0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0, +- 131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80, +- 113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8, +- 0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0, +- 114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131, +- 1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0, +- 114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32, +- 1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0, +- 124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107, +- 2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1, +- 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12, +- 0,106,14,0,124,8,0,131,1,0,1,124,4,0,83,41, +- 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, +- 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, +- 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, +- 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, +- 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, +- 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, +- 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, +- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, +- 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, +- 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, +- 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, +- 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, +- 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, +- 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, +- 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, +- 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, +- 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, +- 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, +- 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, +- 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, +- 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, +- 12,103,101,116,95,102,105,108,101,110,97,109,101,218,6,111, +- 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, +- 103,101,114,59,0,0,0,41,15,114,115,0,0,0,114,157, +- 0,0,0,114,107,0,0,0,114,121,0,0,0,218,10,77, +- 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, +- 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, +- 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, +- 97,100,101,114,115,114,92,0,0,0,114,93,0,0,0,114, +- 127,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, +- 159,0,0,0,114,156,0,0,0,114,38,0,0,0,218,6, +- 97,112,112,101,110,100,41,9,114,106,0,0,0,90,8,108, +- 111,99,97,116,105,111,110,114,127,0,0,0,114,156,0,0, +- 0,218,4,115,112,101,99,218,12,108,111,97,100,101,114,95, +- 99,108,97,115,115,218,8,115,117,102,102,105,120,101,115,114, +- 159,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,23,115,112, +- 101,99,95,102,114,111,109,95,102,105,108,101,95,108,111,99, +- 97,116,105,111,110,254,1,0,0,115,60,0,0,0,0,12, +- 12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1, +- 9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3, +- 12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2, +- 9,1,15,1,6,1,16,1,16,2,114,167,0,0,0,99, +- 0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, +- 64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100, +- 0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4, +- 0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0, +- 100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101, +- 7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9, +- 0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0, +- 132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100, +- 12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9, +- 0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103, +- 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, +- 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, +- 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, +- 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, +- 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, +- 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, +- 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, +- 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, +- 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, +- 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, +- 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, +- 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, +- 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, +- 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, +- 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, +- 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, +- 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, +- 89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7, +- 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, +- 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, +- 83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76, +- 79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3, +- 99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114, +- 101,103,105,115,116,114,121,76,2,0,0,115,8,0,0,0, +- 0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119, +- 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, +- 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, +- 0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67, +- 0,0,0,115,143,0,0,0,124,0,0,106,0,0,114,21, +- 0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0, +- 106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124, +- 1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3, +- 0,133,2,0,25,131,0,2,125,3,0,121,47,0,124,0, +- 0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0, +- 116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125, +- 5,0,87,100,0,0,81,82,88,87,110,22,0,4,116,9, +- 0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,110, +- 1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,90, +- 11,115,121,115,95,118,101,114,115,105,111,110,114,80,0,0, +- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, +- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, +- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, +- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, +- 0,218,7,118,101,114,115,105,111,110,114,172,0,0,0,114, +- 169,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, +- 114,40,0,0,0,41,6,114,170,0,0,0,114,126,0,0, +- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, +- 171,0,0,0,90,4,104,107,101,121,218,8,102,105,108,101, +- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, +- 105,115,116,114,121,83,2,0,0,115,22,0,0,0,0,2, +- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,1, +- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, +- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, +- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, +- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, +- 0,0,115,158,0,0,0,124,0,0,106,0,0,124,1,0, +- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, +- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, +- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, +- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,81,0, +- 116,3,0,131,0,0,68,93,70,0,92,2,0,125,5,0, +- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, +- 1,0,131,1,0,114,80,0,116,6,0,106,7,0,124,1, +- 0,124,5,0,124,1,0,124,4,0,131,2,0,100,1,0, +- 124,4,0,131,2,1,125,7,0,124,7,0,83,113,80,0, +- 87,100,0,0,83,41,2,78,114,158,0,0,0,41,8,114, +- 178,0,0,0,114,39,0,0,0,114,40,0,0,0,114,161, +- 0,0,0,114,92,0,0,0,114,93,0,0,0,114,121,0, +- 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, +- 97,100,101,114,41,8,114,170,0,0,0,114,126,0,0,0, +- 114,35,0,0,0,218,6,116,97,114,103,101,116,114,177,0, +- 0,0,114,127,0,0,0,114,166,0,0,0,114,164,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,12,95,109,111,100,117,108,101,95,114,101,112,114,178,2, -- 0,0,115,46,0,0,0,0,2,18,1,15,4,3,1,17, -- 1,13,1,8,1,3,1,13,1,13,1,5,2,12,1,16, -- 4,3,1,13,1,13,1,11,1,3,1,13,1,13,1,12, -- 1,13,2,21,2,114,211,0,0,0,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, -- 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, -- 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, -- 0,90,5,0,100,7,0,83,41,8,218,17,95,105,110,115, -- 116,97,108,108,101,100,95,115,97,102,101,108,121,99,2,0, -- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, -- 0,0,115,25,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,1,0,106,1,0,124,0,0,95,2,0,100,0,0,83, -- 41,1,78,41,3,218,7,95,109,111,100,117,108,101,114,208, -- 0,0,0,218,5,95,115,112,101,99,41,2,114,71,0,0, -- 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,72,0,0,0,216,2,0,0,115,4, -- 0,0,0,0,1,9,1,122,26,95,105,110,115,116,97,108, -- 108,101,100,95,115,97,102,101,108,121,46,95,95,105,110,105, -- 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, -- 3,0,0,0,67,0,0,0,115,38,0,0,0,100,1,0, -- 124,0,0,106,0,0,95,1,0,124,0,0,106,2,0,116, -- 3,0,106,4,0,124,0,0,106,0,0,106,5,0,60,100, -- 0,0,83,41,2,78,84,41,6,114,214,0,0,0,218,13, -- 95,105,110,105,116,105,97,108,105,122,105,110,103,114,213,0, -- 0,0,114,7,0,0,0,114,73,0,0,0,114,67,0,0, -- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,75,0,0,0,220,2,0,0, -- 115,4,0,0,0,0,4,12,1,122,27,95,105,110,115,116, -+ 12,0,0,0,67,0,0,0,115,164,0,0,0,116,0,0, -+ 124,0,0,131,1,0,100,1,0,107,2,0,114,22,0,100, -+ 2,0,83,124,0,0,106,1,0,100,3,0,131,1,0,92, -+ 3,0,125,1,0,125,2,0,125,3,0,124,1,0,12,115, -+ 81,0,124,3,0,106,2,0,131,0,0,100,7,0,100,8, -+ 0,133,2,0,25,100,6,0,107,3,0,114,85,0,124,0, -+ 0,83,121,16,0,116,3,0,124,0,0,131,1,0,125,4, -+ 0,87,110,40,0,4,116,4,0,116,5,0,102,2,0,107, -+ 10,0,114,143,0,1,1,1,124,0,0,100,2,0,100,9, -+ 0,133,2,0,25,125,4,0,89,110,1,0,88,116,6,0, -+ 124,4,0,131,1,0,114,160,0,124,4,0,83,124,0,0, -+ 83,41,10,122,188,67,111,110,118,101,114,116,32,97,32,98, -+ 121,116,101,99,111,100,101,32,102,105,108,101,32,112,97,116, -+ 104,32,116,111,32,97,32,115,111,117,114,99,101,32,112,97, -+ 116,104,32,40,105,102,32,112,111,115,115,105,98,108,101,41, -+ 46,10,10,32,32,32,32,84,104,105,115,32,102,117,110,99, -+ 116,105,111,110,32,101,120,105,115,116,115,32,112,117,114,101, -+ 108,121,32,102,111,114,32,98,97,99,107,119,97,114,100,115, -+ 45,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102, -+ 111,114,10,32,32,32,32,80,121,73,109,112,111,114,116,95, -+ 69,120,101,99,67,111,100,101,77,111,100,117,108,101,87,105, -+ 116,104,70,105,108,101,110,97,109,101,115,40,41,32,105,110, -+ 32,116,104,101,32,67,32,65,80,73,46,10,10,32,32,32, -+ 32,114,85,0,0,0,78,114,117,0,0,0,233,3,0,0, -+ 0,114,30,0,0,0,90,2,112,121,233,253,255,255,255,233, -+ 255,255,255,255,114,139,0,0,0,41,7,114,32,0,0,0, -+ 114,33,0,0,0,218,5,108,111,119,101,114,114,136,0,0, -+ 0,114,125,0,0,0,114,134,0,0,0,114,45,0,0,0, -+ 41,5,218,13,98,121,116,101,99,111,100,101,95,112,97,116, -+ 104,90,4,114,101,115,116,114,37,0,0,0,90,9,101,120, -+ 116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95, -+ 112,97,116,104,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,15,95,103,101,116,95,115,111,117,114,99,101, -+ 102,105,108,101,231,1,0,0,115,20,0,0,0,0,7,18, -+ 1,4,1,24,1,35,1,4,1,3,1,16,1,19,1,21, -+ 1,114,143,0,0,0,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,0, -+ 121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,125, -+ 1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,0, -+ 1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,1, -+ 0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,51, -+ 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, -+ 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, -+ 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, -+ 108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,114, -+ 40,0,0,0,114,42,0,0,0,114,41,0,0,0,41,2, -+ 114,36,0,0,0,114,43,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,10,95,99,97,108,99, -+ 95,109,111,100,101,250,1,0,0,115,12,0,0,0,0,2, -+ 3,1,19,1,13,1,11,3,10,1,114,145,0,0,0,218, -+ 9,118,101,114,98,111,115,105,116,121,114,30,0,0,0,99, -+ 1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0, -+ 71,0,0,0,115,81,0,0,0,116,0,0,106,1,0,106, -+ 2,0,124,1,0,107,5,0,114,77,0,124,0,0,106,3, -+ 0,100,6,0,131,1,0,115,46,0,100,3,0,124,0,0, -+ 23,125,0,0,110,0,0,116,4,0,124,0,0,106,5,0, -+ 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, -+ 1,1,1,110,0,0,100,5,0,83,41,7,122,61,80,114, -+ 105,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32, -+ 116,111,32,115,116,100,101,114,114,32,105,102,32,45,118,47, -+ 80,89,84,72,79,78,86,69,82,66,79,83,69,32,105,115, -+ 32,116,117,114,110,101,100,32,111,110,46,250,1,35,250,7, -+ 105,109,112,111,114,116,32,122,2,35,32,114,55,0,0,0, -+ 78,41,2,114,147,0,0,0,114,148,0,0,0,41,7,114, -+ 8,0,0,0,114,118,0,0,0,218,7,118,101,114,98,111, -+ 115,101,114,10,0,0,0,218,5,112,114,105,110,116,114,48, -+ 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, -+ 101,115,115,97,103,101,114,146,0,0,0,114,81,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, -+ 101,6,2,0,0,115,8,0,0,0,0,2,18,1,15,1, -+ 13,1,114,153,0,0,0,99,1,0,0,0,0,0,0,0, -+ 2,0,0,0,4,0,0,0,3,0,0,0,115,38,0,0, -+ 0,100,1,0,135,0,0,102,1,0,100,2,0,100,3,0, -+ 134,1,0,125,1,0,116,0,0,124,1,0,136,0,0,131, -+ 2,0,1,124,1,0,83,41,4,122,252,68,101,99,111,114, -+ 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, -+ 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, -+ 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, -+ 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, -+ 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, -+ 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, -+ 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, -+ 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, -+ 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, -+ 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, -+ 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, -+ 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, -+ 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, -+ 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, -+ 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, -+ 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, -+ 0,4,0,0,0,5,0,0,0,31,0,0,0,115,83,0, -+ 0,0,124,1,0,100,0,0,107,8,0,114,24,0,124,0, -+ 0,106,0,0,125,1,0,110,40,0,124,0,0,106,0,0, -+ 124,1,0,107,3,0,114,64,0,116,1,0,100,1,0,124, -+ 1,0,22,100,2,0,124,1,0,131,1,1,130,1,0,110, -+ 0,0,136,0,0,124,0,0,124,1,0,124,2,0,124,3, -+ 0,142,2,0,83,41,3,78,122,23,108,111,97,100,101,114, -+ 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, -+ 115,114,68,0,0,0,41,2,114,68,0,0,0,218,11,73, -+ 109,112,111,114,116,69,114,114,111,114,41,4,114,72,0,0, -+ 0,114,68,0,0,0,114,81,0,0,0,114,109,0,0,0, -+ 41,1,218,6,109,101,116,104,111,100,114,5,0,0,0,114, -+ 6,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, -+ 101,95,119,114,97,112,112,101,114,22,2,0,0,115,10,0, -+ 0,0,0,1,12,1,12,1,15,1,25,1,122,40,95,99, -+ 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, -+ 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, -+ 114,97,112,112,101,114,41,1,114,66,0,0,0,41,2,114, -+ 155,0,0,0,114,156,0,0,0,114,5,0,0,0,41,1, -+ 114,155,0,0,0,114,6,0,0,0,218,11,95,99,104,101, -+ 99,107,95,110,97,109,101,14,2,0,0,115,6,0,0,0, -+ 0,8,21,6,13,1,114,157,0,0,0,99,1,0,0,0, -+ 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, -+ 115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,2, -+ 0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,0, -+ 131,2,0,1,124,1,0,83,41,3,122,49,68,101,99,111, -+ 114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,32, -+ 116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,101, -+ 32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,0, -+ 0,0,115,58,0,0,0,124,1,0,116,0,0,106,1,0, -+ 107,7,0,114,45,0,116,2,0,100,1,0,106,3,0,124, -+ 1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,1, -+ 0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,0, -+ 83,41,3,78,122,29,123,33,114,125,32,105,115,32,110,111, -+ 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, -+ 117,108,101,114,68,0,0,0,41,4,114,8,0,0,0,218, -+ 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, -+ 110,97,109,101,115,114,154,0,0,0,114,48,0,0,0,41, -+ 2,114,72,0,0,0,218,8,102,117,108,108,110,97,109,101, -+ 41,1,218,3,102,120,110,114,5,0,0,0,114,6,0,0, -+ 0,218,25,95,114,101,113,117,105,114,101,115,95,98,117,105, -+ 108,116,105,110,95,119,114,97,112,112,101,114,34,2,0,0, -+ 115,8,0,0,0,0,1,15,1,18,1,12,1,122,52,95, -+ 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, -+ 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, -+ 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, -+ 112,101,114,41,1,114,66,0,0,0,41,2,114,160,0,0, -+ 0,114,161,0,0,0,114,5,0,0,0,41,1,114,160,0, -+ 0,0,114,6,0,0,0,218,17,95,114,101,113,117,105,114, -+ 101,115,95,98,117,105,108,116,105,110,32,2,0,0,115,6, -+ 0,0,0,0,2,18,5,13,1,114,162,0,0,0,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, -+ 0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,1, -+ 0,100,2,0,134,0,0,125,1,0,116,0,0,124,1,0, -+ 136,0,0,131,2,0,1,124,1,0,83,41,3,122,47,68, -+ 101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105, -+ 102,121,32,116,104,101,32,110,97,109,101,100,32,109,111,100, -+ 117,108,101,32,105,115,32,102,114,111,122,101,110,46,99,2, -+ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19, -+ 0,0,0,115,58,0,0,0,116,0,0,106,1,0,124,1, -+ 0,131,1,0,115,45,0,116,2,0,100,1,0,106,3,0, -+ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, -+ 1,0,110,0,0,136,0,0,124,0,0,124,1,0,131,2, -+ 0,83,41,3,78,122,27,123,33,114,125,32,105,115,32,110, -+ 111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117, -+ 108,101,114,68,0,0,0,41,4,114,107,0,0,0,218,9, -+ 105,115,95,102,114,111,122,101,110,114,154,0,0,0,114,48, -+ 0,0,0,41,2,114,72,0,0,0,114,159,0,0,0,41, -+ 1,114,160,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, -+ 101,110,95,119,114,97,112,112,101,114,45,2,0,0,115,8, -+ 0,0,0,0,1,15,1,18,1,12,1,122,50,95,114,101, -+ 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, -+ 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, -+ 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,41, -+ 1,114,66,0,0,0,41,2,114,160,0,0,0,114,164,0, -+ 0,0,114,5,0,0,0,41,1,114,160,0,0,0,114,6, -+ 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, -+ 114,111,122,101,110,43,2,0,0,115,6,0,0,0,0,2, -+ 18,5,13,1,114,165,0,0,0,99,2,0,0,0,0,0, -+ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,87, +- 218,9,102,105,110,100,95,115,112,101,99,98,2,0,0,115, +- 26,0,0,0,0,2,15,1,12,1,4,1,3,1,14,1, +- 13,1,9,1,22,1,21,1,9,1,15,1,9,1,122,31, +- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, +- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, ++ 0,12,115,81,0,124,3,0,106,2,0,131,0,0,100,7, ++ 0,100,8,0,133,2,0,25,100,6,0,107,3,0,114,85, ++ 0,124,0,0,83,121,16,0,116,3,0,124,0,0,131,1, ++ 0,125,4,0,87,110,40,0,4,116,4,0,116,5,0,102, ++ 2,0,107,10,0,114,143,0,1,1,1,124,0,0,100,2, ++ 0,100,9,0,133,2,0,25,125,4,0,89,110,1,0,88, ++ 116,6,0,124,4,0,131,1,0,114,160,0,124,4,0,83, ++ 124,0,0,83,41,10,122,188,67,111,110,118,101,114,116,32, ++ 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,32, ++ 112,97,116,104,32,116,111,32,97,32,115,111,117,114,99,101, ++ 32,112,97,116,104,32,40,105,102,32,112,111,115,115,105,98, ++ 108,101,41,46,10,10,32,32,32,32,84,104,105,115,32,102, ++ 117,110,99,116,105,111,110,32,101,120,105,115,116,115,32,112, ++ 117,114,101,108,121,32,102,111,114,32,98,97,99,107,119,97, ++ 114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116, ++ 121,32,102,111,114,10,32,32,32,32,80,121,73,109,112,111, ++ 114,116,95,69,120,101,99,67,111,100,101,77,111,100,117,108, ++ 101,87,105,116,104,70,105,108,101,110,97,109,101,115,40,41, ++ 32,105,110,32,116,104,101,32,67,32,65,80,73,46,10,10, ++ 32,32,32,32,114,60,0,0,0,78,114,59,0,0,0,114, ++ 81,0,0,0,114,30,0,0,0,90,2,112,121,233,253,255, ++ 255,255,233,255,255,255,255,114,88,0,0,0,41,7,114,32, ++ 0,0,0,114,33,0,0,0,218,5,108,111,119,101,114,114, ++ 86,0,0,0,114,67,0,0,0,114,72,0,0,0,114,45, ++ 0,0,0,41,5,218,13,98,121,116,101,99,111,100,101,95, ++ 112,97,116,104,114,79,0,0,0,114,37,0,0,0,90,9, ++ 101,120,116,101,110,115,105,111,110,218,11,115,111,117,114,99, ++ 101,95,112,97,116,104,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,15,95,103,101,116,95,115,111,117,114, ++ 99,101,102,105,108,101,64,1,0,0,115,20,0,0,0,0, ++ 7,18,1,4,1,24,1,35,1,4,1,3,1,16,1,19, ++ 1,21,1,114,92,0,0,0,99,1,0,0,0,0,0,0, ++ 0,1,0,0,0,11,0,0,0,67,0,0,0,115,92,0, ++ 0,0,124,0,0,106,0,0,116,1,0,116,2,0,131,1, ++ 0,131,1,0,114,59,0,121,14,0,116,3,0,124,0,0, ++ 131,1,0,83,87,113,88,0,4,116,4,0,107,10,0,114, ++ 55,0,1,1,1,89,113,88,0,88,110,29,0,124,0,0, ++ 106,0,0,116,1,0,116,5,0,131,1,0,131,1,0,114, ++ 84,0,124,0,0,83,100,0,0,83,100,0,0,83,41,1, ++ 78,41,6,218,8,101,110,100,115,119,105,116,104,218,5,116, ++ 117,112,108,101,114,85,0,0,0,114,80,0,0,0,114,67, ++ 0,0,0,114,75,0,0,0,41,1,218,8,102,105,108,101, ++ 110,97,109,101,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, ++ 83,1,0,0,115,16,0,0,0,0,1,21,1,3,1,14, ++ 1,13,1,8,1,21,1,4,2,114,96,0,0,0,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, ++ 0,0,0,115,60,0,0,0,121,19,0,116,0,0,124,0, ++ 0,131,1,0,106,1,0,125,1,0,87,110,24,0,4,116, ++ 2,0,107,10,0,114,45,0,1,1,1,100,1,0,125,1, ++ 0,89,110,1,0,88,124,1,0,100,2,0,79,125,1,0, ++ 124,1,0,83,41,3,122,51,67,97,108,99,117,108,97,116, ++ 101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105, ++ 115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116, ++ 101,99,111,100,101,32,102,105,108,101,46,105,182,1,0,0, ++ 233,128,0,0,0,41,3,114,40,0,0,0,114,42,0,0, ++ 0,114,41,0,0,0,41,2,114,36,0,0,0,114,43,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,10,95,99,97,108,99,95,109,111,100,101,95,1,0, ++ 0,115,12,0,0,0,0,2,3,1,19,1,13,1,11,3, ++ 10,1,114,98,0,0,0,218,9,118,101,114,98,111,115,105, ++ 116,121,114,30,0,0,0,99,1,0,0,0,1,0,0,0, ++ 3,0,0,0,4,0,0,0,71,0,0,0,115,75,0,0, ++ 0,116,0,0,106,1,0,106,2,0,124,1,0,107,5,0, ++ 114,71,0,124,0,0,106,3,0,100,6,0,131,1,0,115, ++ 43,0,100,3,0,124,0,0,23,125,0,0,116,4,0,124, ++ 0,0,106,5,0,124,2,0,140,0,0,100,4,0,116,0, ++ 0,106,6,0,131,1,1,1,100,5,0,83,41,7,122,61, ++ 80,114,105,110,116,32,116,104,101,32,109,101,115,115,97,103, ++ 101,32,116,111,32,115,116,100,101,114,114,32,105,102,32,45, ++ 118,47,80,89,84,72,79,78,86,69,82,66,79,83,69,32, ++ 105,115,32,116,117,114,110,101,100,32,111,110,46,250,1,35, ++ 250,7,105,109,112,111,114,116,32,122,2,35,32,114,55,0, ++ 0,0,78,41,2,114,100,0,0,0,114,101,0,0,0,41, ++ 7,114,8,0,0,0,114,68,0,0,0,218,7,118,101,114, ++ 98,111,115,101,114,10,0,0,0,218,5,112,114,105,110,116, ++ 114,48,0,0,0,218,6,115,116,100,101,114,114,41,3,114, ++ 76,0,0,0,114,99,0,0,0,218,4,97,114,103,115,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,16, ++ 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, ++ 107,1,0,0,115,8,0,0,0,0,2,18,1,15,1,10, ++ 1,114,106,0,0,0,99,1,0,0,0,0,0,0,0,3, ++ 0,0,0,11,0,0,0,3,0,0,0,115,84,0,0,0, ++ 100,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, ++ 1,0,125,1,0,121,13,0,116,0,0,106,1,0,125,2, ++ 0,87,110,30,0,4,116,2,0,107,10,0,114,66,0,1, ++ 1,1,100,4,0,100,5,0,132,0,0,125,2,0,89,110, ++ 1,0,88,124,2,0,124,1,0,136,0,0,131,2,0,1, ++ 124,1,0,83,41,6,122,252,68,101,99,111,114,97,116,111, ++ 114,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116, ++ 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, ++ 103,32,114,101,113,117,101,115,116,101,100,32,109,97,116,99, ++ 104,101,115,32,116,104,101,32,111,110,101,32,116,104,101,10, ++ 32,32,32,32,108,111,97,100,101,114,32,99,97,110,32,104, ++ 97,110,100,108,101,46,10,10,32,32,32,32,84,104,101,32, ++ 102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40, ++ 115,101,108,102,41,32,109,117,115,116,32,100,101,102,105,110, ++ 101,32,95,110,97,109,101,32,119,104,105,99,104,32,116,104, ++ 101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110, ++ 116,32,105,115,10,32,32,32,32,99,111,109,112,97,114,101, ++ 100,32,97,103,97,105,110,115,116,46,32,73,102,32,116,104, ++ 101,32,99,111,109,112,97,114,105,115,111,110,32,102,97,105, ++ 108,115,32,116,104,101,110,32,73,109,112,111,114,116,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, ++ 32,32,32,32,78,99,2,0,0,0,0,0,0,0,4,0, ++ 0,0,5,0,0,0,31,0,0,0,115,89,0,0,0,124, ++ 1,0,100,0,0,107,8,0,114,24,0,124,0,0,106,0, ++ 0,125,1,0,110,46,0,124,0,0,106,0,0,124,1,0, ++ 107,3,0,114,70,0,116,1,0,100,1,0,124,0,0,106, ++ 0,0,124,1,0,102,2,0,22,100,2,0,124,1,0,131, ++ 1,1,130,1,0,136,0,0,124,0,0,124,1,0,124,2, ++ 0,124,3,0,142,2,0,83,41,3,78,122,30,108,111,97, ++ 100,101,114,32,102,111,114,32,37,115,32,99,97,110,110,111, ++ 116,32,104,97,110,100,108,101,32,37,115,218,4,110,97,109, ++ 101,41,2,114,107,0,0,0,218,11,73,109,112,111,114,116, ++ 69,114,114,111,114,41,4,218,4,115,101,108,102,114,107,0, ++ 0,0,114,105,0,0,0,90,6,107,119,97,114,103,115,41, ++ 1,218,6,109,101,116,104,111,100,114,5,0,0,0,114,6, ++ 0,0,0,218,19,95,99,104,101,99,107,95,110,97,109,101, ++ 95,119,114,97,112,112,101,114,123,1,0,0,115,12,0,0, ++ 0,0,1,12,1,12,1,15,1,6,1,25,1,122,40,95, ++ 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, ++ 108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95, ++ 119,114,97,112,112,101,114,99,2,0,0,0,0,0,0,0, ++ 3,0,0,0,7,0,0,0,83,0,0,0,115,92,0,0, ++ 0,120,66,0,100,1,0,100,2,0,100,3,0,100,4,0, ++ 103,4,0,68,93,46,0,125,2,0,116,0,0,124,1,0, ++ 124,2,0,131,2,0,114,19,0,116,1,0,124,0,0,124, ++ 2,0,116,2,0,124,1,0,124,2,0,131,2,0,131,3, ++ 0,1,113,19,0,87,124,0,0,106,3,0,106,4,0,124, ++ 1,0,106,3,0,131,1,0,1,100,0,0,83,41,5,78, ++ 218,10,95,95,109,111,100,117,108,101,95,95,218,8,95,95, ++ 110,97,109,101,95,95,218,12,95,95,113,117,97,108,110,97, ++ 109,101,95,95,218,7,95,95,100,111,99,95,95,41,5,218, ++ 7,104,97,115,97,116,116,114,218,7,115,101,116,97,116,116, ++ 114,218,7,103,101,116,97,116,116,114,218,8,95,95,100,105, ++ 99,116,95,95,218,6,117,112,100,97,116,101,41,3,90,3, ++ 110,101,119,90,3,111,108,100,114,53,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,5,95,119, ++ 114,97,112,134,1,0,0,115,8,0,0,0,0,1,25,1, ++ 15,1,29,1,122,26,95,99,104,101,99,107,95,110,97,109, ++ 101,46,60,108,111,99,97,108,115,62,46,95,119,114,97,112, ++ 41,3,218,10,95,98,111,111,116,115,116,114,97,112,114,121, ++ 0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,3, ++ 114,110,0,0,0,114,111,0,0,0,114,121,0,0,0,114, ++ 5,0,0,0,41,1,114,110,0,0,0,114,6,0,0,0, ++ 218,11,95,99,104,101,99,107,95,110,97,109,101,115,1,0, ++ 0,115,14,0,0,0,0,8,21,7,3,1,13,1,13,2, ++ 17,5,13,1,114,124,0,0,0,99,2,0,0,0,0,0, ++ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,84, + 0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,92, + 2,0,125,2,0,125,3,0,124,2,0,100,1,0,107,8, -+ 0,114,83,0,116,1,0,124,3,0,131,1,0,114,83,0, ++ 0,114,80,0,116,1,0,124,3,0,131,1,0,114,80,0, + 100,2,0,125,4,0,116,2,0,106,3,0,124,4,0,106, + 4,0,124,3,0,100,3,0,25,131,1,0,116,5,0,131, -+ 2,0,1,110,0,0,124,2,0,83,41,4,122,155,84,114, -+ 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100, -+ 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105, -+ 102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100, -+ 101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32, -+ 32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101, -+ 114,40,41,46,10,10,32,32,32,32,84,104,105,115,32,109, -+ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, -+ 116,101,100,32,105,110,32,102,97,118,111,114,32,111,102,32, -+ 102,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, -+ 40,41,46,10,10,32,32,32,32,78,122,44,78,111,116,32, -+ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116, -+ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32, -+ 95,95,105,110,105,116,95,95,114,85,0,0,0,41,6,218, -+ 11,102,105,110,100,95,108,111,97,100,101,114,114,32,0,0, -+ 0,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, -+ 114,110,114,48,0,0,0,218,13,73,109,112,111,114,116,87, -+ 97,114,110,105,110,103,41,5,114,72,0,0,0,114,159,0, -+ 0,0,218,6,108,111,97,100,101,114,218,8,112,111,114,116, -+ 105,111,110,115,218,3,109,115,103,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, -+ 109,111,100,117,108,101,95,115,104,105,109,54,2,0,0,115, -+ 10,0,0,0,0,10,21,1,24,1,6,1,32,1,114,173, -+ 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, -+ 3,0,0,0,67,0,0,0,115,93,0,0,0,116,0,0, -+ 124,1,0,124,0,0,131,2,0,125,2,0,116,1,0,124, -+ 2,0,131,1,0,125,3,0,124,1,0,116,2,0,106,3, -+ 0,107,6,0,114,79,0,116,2,0,106,3,0,124,1,0, -+ 25,125,4,0,124,3,0,106,4,0,124,4,0,131,1,0, -+ 1,116,2,0,106,3,0,124,1,0,25,83,124,3,0,106, -+ 5,0,131,0,0,83,100,1,0,83,41,2,122,128,76,111, -+ 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, -+ 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, -+ 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, -+ 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, -+ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, -+ 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, -+ 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41, -+ 6,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, -+ 100,101,114,218,12,95,83,112,101,99,77,101,116,104,111,100, -+ 115,114,8,0,0,0,114,74,0,0,0,218,4,101,120,101, -+ 99,218,4,108,111,97,100,41,5,114,72,0,0,0,114,159, -+ 0,0,0,218,4,115,112,101,99,218,7,109,101,116,104,111, -+ 100,115,218,6,109,111,100,117,108,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,108,111,97,100, -+ 95,109,111,100,117,108,101,95,115,104,105,109,71,2,0,0, -+ 115,14,0,0,0,0,6,15,1,12,1,15,1,13,1,13, -+ 1,11,2,114,181,0,0,0,99,4,0,0,0,0,0,0, -+ 0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,1, -+ 0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,9, -+ 0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,6, -+ 0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,0, -+ 114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,0, -+ 124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0, -+ 124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0, -+ 124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0, -+ 124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,106, -+ 1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2, -+ 0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4, -+ 0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,0, -+ 131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,106, -+ 1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8, -+ 0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1, -+ 0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,0, -+ 107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,131, -+ 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, -+ 5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,1, -+ 0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,0, -+ 124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,18, -+ 0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,110, -+ 62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,107, -+ 3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,1, -+ 0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,3, -+ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,0, -+ 121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,10, -+ 0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,1, -+ 1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,0, -+ 124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,106, -+ 1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,1, -+ 0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,0, -+ 133,2,0,25,83,41,15,97,122,1,0,0,86,97,108,105, -+ 100,97,116,101,32,116,104,101,32,104,101,97,100,101,114,32, -+ 111,102,32,116,104,101,32,112,97,115,115,101,100,45,105,110, -+ 32,98,121,116,101,99,111,100,101,32,97,103,97,105,110,115, -+ 116,32,115,111,117,114,99,101,95,115,116,97,116,115,32,40, -+ 105,102,10,32,32,32,32,103,105,118,101,110,41,32,97,110, -+ 100,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32, -+ 98,121,116,101,99,111,100,101,32,116,104,97,116,32,99,97, -+ 110,32,98,101,32,99,111,109,112,105,108,101,100,32,98,121, -+ 32,99,111,109,112,105,108,101,40,41,46,10,10,32,32,32, -+ 32,65,108,108,32,111,116,104,101,114,32,97,114,103,117,109, -+ 101,110,116,115,32,97,114,101,32,117,115,101,100,32,116,111, -+ 32,101,110,104,97,110,99,101,32,101,114,114,111,114,32,114, -+ 101,112,111,114,116,105,110,103,46,10,10,32,32,32,32,73, -+ 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, -+ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97, -+ 103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110, -+ 99,111,114,114,101,99,116,32,111,114,32,116,104,101,32,98, -+ 121,116,101,99,111,100,101,32,105,115,10,32,32,32,32,102, -+ 111,117,110,100,32,116,111,32,98,101,32,115,116,97,108,101, -+ 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, -+ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, -+ 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, -+ 101,10,32,32,32,32,116,114,117,110,99,97,116,101,100,46, -+ 10,10,32,32,32,32,78,114,68,0,0,0,122,10,60,98, -+ 121,116,101,99,111,100,101,62,114,36,0,0,0,114,13,0, -+ 0,0,233,8,0,0,0,233,12,0,0,0,122,30,98,97, -+ 100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105, -+ 110,32,123,33,114,125,58,32,123,33,114,125,122,43,114,101, -+ 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, -+ 114,101,97,100,105,110,103,32,116,105,109,101,115,116,97,109, -+ 112,32,105,110,32,123,33,114,125,122,48,114,101,97,99,104, -+ 101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97, -+ 100,105,110,103,32,115,105,122,101,32,111,102,32,115,111,117, -+ 114,99,101,32,105,110,32,123,33,114,125,218,5,109,116,105, -+ 109,101,122,26,98,121,116,101,99,111,100,101,32,105,115,32, -+ 115,116,97,108,101,32,102,111,114,32,123,33,114,125,218,4, -+ 115,105,122,101,108,3,0,0,0,255,127,255,127,3,0,41, -+ 9,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, -+ 48,0,0,0,114,153,0,0,0,114,154,0,0,0,114,32, -+ 0,0,0,218,8,69,79,70,69,114,114,111,114,114,15,0, -+ 0,0,114,80,0,0,0,114,20,0,0,0,41,11,114,54, -+ 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, -+ 115,114,68,0,0,0,114,36,0,0,0,90,11,101,120,99, -+ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90, -+ 13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8, -+ 114,97,119,95,115,105,122,101,114,152,0,0,0,218,12,115, -+ 111,117,114,99,101,95,109,116,105,109,101,218,11,115,111,117, -+ 114,99,101,95,115,105,122,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,25,95,118,97,108,105,100,97, -+ 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, -+ 101,114,87,2,0,0,115,76,0,0,0,0,11,6,1,12, -+ 1,13,3,6,1,12,1,13,1,16,1,16,1,16,1,12, -+ 1,18,1,10,1,18,1,18,1,15,1,10,1,15,1,18, -+ 1,15,1,10,1,15,1,12,1,3,1,20,1,13,1,5, -+ 2,18,1,15,1,10,1,18,1,3,1,18,1,13,1,5, -+ 2,18,1,15,1,15,1,114,191,0,0,0,99,4,0,0, -+ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, -+ 0,115,115,0,0,0,116,0,0,106,1,0,124,0,0,131, -+ 1,0,125,4,0,116,2,0,124,4,0,116,3,0,131,2, -+ 0,114,78,0,116,4,0,100,1,0,124,2,0,131,2,0, -+ 1,124,3,0,100,2,0,107,9,0,114,74,0,116,5,0, -+ 106,6,0,124,4,0,124,3,0,131,2,0,1,110,0,0, -+ 124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0, -+ 131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131, -+ 1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109, -+ 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, -+ 32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97, -+ 108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95, -+ 104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32, -+ 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, -+ 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, -+ 99,116,32,105,110,32,123,33,114,125,114,68,0,0,0,114, -+ 36,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90, -+ 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, -+ 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,153, -+ 0,0,0,114,107,0,0,0,90,16,95,102,105,120,95,99, -+ 111,95,102,105,108,101,110,97,109,101,114,154,0,0,0,114, -+ 48,0,0,0,41,5,114,54,0,0,0,114,68,0,0,0, -+ 114,141,0,0,0,114,142,0,0,0,218,4,99,111,100,101, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, -+ 100,101,142,2,0,0,115,16,0,0,0,0,2,15,1,15, -+ 1,13,1,12,1,19,1,4,2,18,1,114,196,0,0,0, -+ 114,85,0,0,0,99,3,0,0,0,0,0,0,0,4,0, -+ 0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,116, -+ 0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,2, -+ 0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,3, -+ 0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,0, -+ 1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,0, -+ 131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,67, -+ 111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,98, -+ 106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,111, -+ 100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,111, -+ 117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,109, -+ 112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,41, -+ 6,218,9,98,121,116,101,97,114,114,97,121,114,186,0,0, -+ 0,218,6,101,120,116,101,110,100,114,18,0,0,0,114,192, -+ 0,0,0,90,5,100,117,109,112,115,41,4,114,195,0,0, -+ 0,114,184,0,0,0,114,190,0,0,0,114,54,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,111, -+ 100,101,154,2,0,0,115,10,0,0,0,0,3,12,1,19, -+ 1,19,1,22,1,114,199,0,0,0,99,1,0,0,0,0, -+ 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, -+ 89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,0, -+ 116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,125, -+ 2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,3, -+ 0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,0, -+ 125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,124, -+ 3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,122, -+ 121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,101, -+ 112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,99, -+ 101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,114, -+ 110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,32, -+ 32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,119, -+ 108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,32, -+ 117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,111, -+ 100,105,110,103,46,10,32,32,32,32,114,85,0,0,0,78, -+ 84,41,7,218,8,116,111,107,101,110,105,122,101,114,50,0, -+ 0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,97, -+ 100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,110, -+ 99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,110, -+ 116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,101, -+ 114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,117, -+ 114,99,101,95,98,121,116,101,115,114,200,0,0,0,90,21, -+ 115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97, -+ 100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,90, -+ 15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,114, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 13,100,101,99,111,100,101,95,115,111,117,114,99,101,164,2, -+ 0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,18, -+ 1,114,204,0,0,0,99,1,0,0,0,0,0,0,0,5, -+ 0,0,0,35,0,0,0,67,0,0,0,115,15,1,0,0, -+ 116,0,0,124,0,0,100,1,0,100,0,0,131,3,0,125, -+ 1,0,116,1,0,124,1,0,100,2,0,131,2,0,114,74, -+ 0,121,17,0,124,1,0,106,2,0,124,0,0,131,1,0, -+ 83,87,113,74,0,4,116,3,0,107,10,0,114,70,0,1, -+ 1,1,89,113,74,0,88,110,0,0,121,13,0,124,0,0, -+ 106,4,0,125,2,0,87,110,18,0,4,116,5,0,107,10, -+ 0,114,107,0,1,1,1,89,110,29,0,88,124,2,0,100, -+ 0,0,107,9,0,114,136,0,116,6,0,124,2,0,131,1, -+ 0,106,2,0,131,0,0,83,121,13,0,124,0,0,106,7, -+ 0,125,3,0,87,110,24,0,4,116,5,0,107,10,0,114, -+ 175,0,1,1,1,100,3,0,125,3,0,89,110,1,0,88, -+ 121,13,0,124,0,0,106,8,0,125,4,0,87,110,59,0, -+ 4,116,5,0,107,10,0,114,250,0,1,1,1,124,1,0, -+ 100,0,0,107,8,0,114,230,0,100,4,0,106,9,0,124, -+ 3,0,131,1,0,83,100,5,0,106,9,0,124,3,0,124, -+ 1,0,131,2,0,83,89,110,17,0,88,100,6,0,106,9, -+ 0,124,3,0,124,4,0,131,2,0,83,100,0,0,83,41, -+ 7,78,218,10,95,95,108,111,97,100,101,114,95,95,218,11, -+ 109,111,100,117,108,101,95,114,101,112,114,250,1,63,122,13, -+ 60,109,111,100,117,108,101,32,123,33,114,125,62,122,20,60, -+ 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114, -+ 125,41,62,122,23,60,109,111,100,117,108,101,32,123,33,114, -+ 125,32,102,114,111,109,32,123,33,114,125,62,41,10,114,63, -+ 0,0,0,114,61,0,0,0,114,206,0,0,0,218,9,69, -+ 120,99,101,112,116,105,111,110,218,8,95,95,115,112,101,99, -+ 95,95,218,14,65,116,116,114,105,98,117,116,101,69,114,114, -+ 111,114,114,175,0,0,0,114,58,0,0,0,218,8,95,95, -+ 102,105,108,101,95,95,114,48,0,0,0,41,5,114,180,0, -+ 0,0,114,170,0,0,0,114,178,0,0,0,114,68,0,0, -+ 0,114,132,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,12,95,109,111,100,117,108,101,95,114, -+ 101,112,114,178,2,0,0,115,46,0,0,0,0,2,18,1, -+ 15,4,3,1,17,1,13,1,8,1,3,1,13,1,13,1, -+ 5,2,12,1,16,4,3,1,13,1,13,1,11,1,3,1, -+ 13,1,13,1,12,1,13,2,21,2,114,212,0,0,0,99, -+ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, -+ 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, -+ 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, -+ 100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218, -+ 17,95,105,110,115,116,97,108,108,101,100,95,115,97,102,101, -+ 108,121,99,2,0,0,0,0,0,0,0,2,0,0,0,2, -+ 0,0,0,67,0,0,0,115,25,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,1,0,106,1,0,124,0,0,95,2, -+ 0,100,0,0,83,41,1,78,41,3,218,7,95,109,111,100, -+ 117,108,101,114,209,0,0,0,218,5,95,115,112,101,99,41, -+ 2,114,72,0,0,0,114,180,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,73,0,0,0,216, -+ 2,0,0,115,4,0,0,0,0,1,9,1,122,26,95,105, -+ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, -+ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, -+ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,38,0, -+ 0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0, -+ 0,106,2,0,116,3,0,106,4,0,124,0,0,106,0,0, -+ 106,5,0,60,100,0,0,83,41,2,78,84,41,6,114,215, -+ 0,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, -+ 110,103,114,214,0,0,0,114,8,0,0,0,114,74,0,0, -+ 0,114,68,0,0,0,41,1,114,72,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,76,0,0, -+ 0,220,2,0,0,115,4,0,0,0,0,4,12,1,122,27, -+ 95,105,110,115,116,97,108,108,101,100,95,115,97,102,101,108, -+ 121,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, -+ 0,0,0,0,3,0,0,0,17,0,0,0,71,0,0,0, -+ 115,121,0,0,0,122,101,0,124,0,0,106,0,0,125,2, -+ 0,116,1,0,100,1,0,100,2,0,132,0,0,124,1,0, -+ 68,131,1,0,131,1,0,114,78,0,121,17,0,116,2,0, -+ 106,3,0,124,2,0,106,4,0,61,87,113,100,0,4,116, -+ 5,0,107,10,0,114,74,0,1,1,1,89,113,100,0,88, -+ 110,22,0,116,6,0,100,3,0,124,2,0,106,4,0,124, -+ 2,0,106,7,0,131,3,0,1,87,100,0,0,100,4,0, -+ 124,0,0,106,0,0,95,8,0,88,100,0,0,83,41,5, -+ 78,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, -+ 0,0,115,0,0,0,115,27,0,0,0,124,0,0,93,17, -+ 0,125,1,0,124,1,0,100,0,0,107,9,0,86,1,113, -+ 3,0,100,0,0,83,41,1,78,114,5,0,0,0,41,2, -+ 114,23,0,0,0,114,77,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,78,0,0,0,230,2, -+ 0,0,115,2,0,0,0,6,0,122,45,95,105,110,115,116, - 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, -- 110,116,101,114,95,95,99,1,0,0,0,0,0,0,0,3, -- 0,0,0,17,0,0,0,71,0,0,0,115,121,0,0,0, -- 122,101,0,124,0,0,106,0,0,125,2,0,116,1,0,100, -- 1,0,100,2,0,132,0,0,124,1,0,68,131,1,0,131, -- 1,0,114,78,0,121,17,0,116,2,0,106,3,0,124,2, -- 0,106,4,0,61,87,113,100,0,4,116,5,0,107,10,0, -- 114,74,0,1,1,1,89,113,100,0,88,110,22,0,116,6, -- 0,100,3,0,124,2,0,106,4,0,124,2,0,106,7,0, -- 131,3,0,1,87,100,0,0,100,4,0,124,0,0,106,0, -- 0,95,8,0,88,100,0,0,83,41,5,78,99,1,0,0, -- 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, -- 0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124, -- 1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,0, -- 83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0, -- 114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,77,0,0,0,230,2,0,0,115,2,0, -- 0,0,6,0,122,45,95,105,110,115,116,97,108,108,101,100, -- 95,115,97,102,101,108,121,46,95,95,101,120,105,116,95,95, -- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, -- 112,114,62,122,18,105,109,112,111,114,116,32,123,33,114,125, -- 32,35,32,123,33,114,125,70,41,9,114,214,0,0,0,114, -- 78,0,0,0,114,7,0,0,0,114,73,0,0,0,114,67, -- 0,0,0,114,79,0,0,0,114,152,0,0,0,114,169,0, -- 0,0,114,215,0,0,0,41,3,114,71,0,0,0,114,80, -- 0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,81,0,0,0,227,2,0,0, -- 115,18,0,0,0,0,1,3,1,9,1,25,1,3,1,17, -- 1,13,1,8,2,26,2,122,26,95,105,110,115,116,97,108, -- 108,101,100,95,115,97,102,101,108,121,46,95,95,101,120,105, -- 116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,72,0,0,0,114,75,0,0,0,114, -- 81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,212,0,0,0,214,2,0, -- 0,115,6,0,0,0,12,2,12,4,12,7,114,212,0,0, -- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,8,0, -- 0,0,64,0,0,0,115,172,0,0,0,101,0,0,90,1, -- 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, -- 100,3,0,100,4,0,100,3,0,100,5,0,100,3,0,100, -- 6,0,100,7,0,132,0,3,90,4,0,100,8,0,100,9, -- 0,132,0,0,90,5,0,100,10,0,100,11,0,132,0,0, -- 90,6,0,101,7,0,100,12,0,100,13,0,132,0,0,131, -- 1,0,90,8,0,101,8,0,106,9,0,100,14,0,100,13, -- 0,132,0,0,131,1,0,90,8,0,101,7,0,100,15,0, -- 100,16,0,132,0,0,131,1,0,90,10,0,101,7,0,100, -- 17,0,100,18,0,132,0,0,131,1,0,90,11,0,101,11, -- 0,106,9,0,100,19,0,100,18,0,132,0,0,131,1,0, -- 90,11,0,100,3,0,83,41,20,218,10,77,111,100,117,108, -- 101,83,112,101,99,97,208,5,0,0,84,104,101,32,115,112, -- 101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32, -- 97,32,109,111,100,117,108,101,44,32,117,115,101,100,32,102, -- 111,114,32,108,111,97,100,105,110,103,46,10,10,32,32,32, -- 32,65,32,109,111,100,117,108,101,39,115,32,115,112,101,99, -- 32,105,115,32,116,104,101,32,115,111,117,114,99,101,32,102, -- 111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97, -- 98,111,117,116,32,116,104,101,32,109,111,100,117,108,101,46, -- 32,32,70,111,114,10,32,32,32,32,100,97,116,97,32,97, -- 115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116, -- 104,101,32,109,111,100,117,108,101,44,32,105,110,99,108,117, -- 100,105,110,103,32,115,111,117,114,99,101,44,32,117,115,101, -- 32,116,104,101,32,115,112,101,99,39,115,10,32,32,32,32, -- 108,111,97,100,101,114,46,10,10,32,32,32,32,96,110,97, -- 109,101,96,32,105,115,32,116,104,101,32,97,98,115,111,108, -- 117,116,101,32,110,97,109,101,32,111,102,32,116,104,101,32, -- 109,111,100,117,108,101,46,32,32,96,108,111,97,100,101,114, -- 96,32,105,115,32,116,104,101,32,108,111,97,100,101,114,10, -- 32,32,32,32,116,111,32,117,115,101,32,119,104,101,110,32, -- 108,111,97,100,105,110,103,32,116,104,101,32,109,111,100,117, -- 108,101,46,32,32,96,112,97,114,101,110,116,96,32,105,115, -- 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, -- 10,32,32,32,32,112,97,99,107,97,103,101,32,116,104,101, -- 32,109,111,100,117,108,101,32,105,115,32,105,110,46,32,32, -- 84,104,101,32,112,97,114,101,110,116,32,105,115,32,100,101, -- 114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,110, -- 97,109,101,46,10,10,32,32,32,32,96,105,115,95,112,97, -- 99,107,97,103,101,96,32,100,101,116,101,114,109,105,110,101, -- 115,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32, -- 105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32, -- 112,97,99,107,97,103,101,32,111,114,10,32,32,32,32,110, -- 111,116,46,32,32,79,110,32,109,111,100,117,108,101,115,32, -- 116,104,105,115,32,105,115,32,114,101,102,108,101,99,116,101, -- 100,32,98,121,32,116,104,101,32,96,95,95,112,97,116,104, -- 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, -- 32,32,32,32,96,111,114,105,103,105,110,96,32,105,115,32, -- 116,104,101,32,115,112,101,99,105,102,105,99,32,108,111,99, -- 97,116,105,111,110,32,117,115,101,100,32,98,121,32,116,104, -- 101,32,108,111,97,100,101,114,32,102,114,111,109,32,119,104, -- 105,99,104,32,116,111,10,32,32,32,32,108,111,97,100,32, -- 116,104,101,32,109,111,100,117,108,101,44,32,105,102,32,116, -- 104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32, -- 105,115,32,97,118,97,105,108,97,98,108,101,46,32,32,87, -- 104,101,110,32,102,105,108,101,110,97,109,101,32,105,115,10, -- 32,32,32,32,115,101,116,44,32,111,114,105,103,105,110,32, -- 119,105,108,108,32,109,97,116,99,104,46,10,10,32,32,32, -- 32,96,104,97,115,95,108,111,99,97,116,105,111,110,96,32, -- 105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,97, -- 32,115,112,101,99,39,115,32,34,111,114,105,103,105,110,34, -- 32,114,101,102,108,101,99,116,115,32,97,32,108,111,99,97, -- 116,105,111,110,46,10,32,32,32,32,87,104,101,110,32,116, -- 104,105,115,32,105,115,32,84,114,117,101,44,32,96,95,95, -- 102,105,108,101,95,95,96,32,97,116,116,114,105,98,117,116, -- 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, -- 105,115,32,115,101,116,46,10,10,32,32,32,32,96,99,97, -- 99,104,101,100,96,32,105,115,32,116,104,101,32,108,111,99, -- 97,116,105,111,110,32,111,102,32,116,104,101,32,99,97,99, -- 104,101,100,32,98,121,116,101,99,111,100,101,32,102,105,108, -- 101,44,32,105,102,32,97,110,121,46,32,32,73,116,10,32, -- 32,32,32,99,111,114,114,101,115,112,111,110,100,115,32,116, -- 111,32,116,104,101,32,96,95,95,99,97,99,104,101,100,95, -- 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, -- 32,32,32,96,115,117,98,109,111,100,117,108,101,95,115,101, -- 97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,32, -- 105,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32, -- 111,102,32,112,97,116,104,32,101,110,116,114,105,101,115,32, -- 116,111,10,32,32,32,32,115,101,97,114,99,104,32,119,104, -- 101,110,32,105,109,112,111,114,116,105,110,103,32,115,117,98, -- 109,111,100,117,108,101,115,46,32,32,73,102,32,115,101,116, -- 44,32,105,115,95,112,97,99,107,97,103,101,32,115,104,111, -- 117,108,100,32,98,101,10,32,32,32,32,84,114,117,101,45, -- 45,97,110,100,32,70,97,108,115,101,32,111,116,104,101,114, -- 119,105,115,101,46,10,10,32,32,32,32,80,97,99,107,97, -- 103,101,115,32,97,114,101,32,115,105,109,112,108,121,32,109, -- 111,100,117,108,101,115,32,116,104,97,116,32,40,109,97,121, -- 41,32,104,97,118,101,32,115,117,98,109,111,100,117,108,101, -- 115,46,32,32,73,102,32,97,32,115,112,101,99,10,32,32, -- 32,32,104,97,115,32,97,32,110,111,110,45,78,111,110,101, -- 32,118,97,108,117,101,32,105,110,32,96,115,117,98,109,111, -- 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, -- 116,105,111,110,115,96,44,32,116,104,101,32,105,109,112,111, -- 114,116,10,32,32,32,32,115,121,115,116,101,109,32,119,105, -- 108,108,32,99,111,110,115,105,100,101,114,32,109,111,100,117, -- 108,101,115,32,108,111,97,100,101,100,32,102,114,111,109,32, -- 116,104,101,32,115,112,101,99,32,97,115,32,112,97,99,107, -- 97,103,101,115,46,10,10,32,32,32,32,79,110,108,121,32, -- 102,105,110,100,101,114,115,32,40,115,101,101,32,105,109,112, -- 111,114,116,108,105,98,46,97,98,99,46,77,101,116,97,80, -- 97,116,104,70,105,110,100,101,114,32,97,110,100,10,32,32, -- 32,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, -- 80,97,116,104,69,110,116,114,121,70,105,110,100,101,114,41, -- 32,115,104,111,117,108,100,32,109,111,100,105,102,121,32,77, -- 111,100,117,108,101,83,112,101,99,32,105,110,115,116,97,110, -- 99,101,115,46,10,10,32,32,32,32,218,6,111,114,105,103, -- 105,110,78,218,12,108,111,97,100,101,114,95,115,116,97,116, -- 101,218,10,105,115,95,112,97,99,107,97,103,101,99,3,0, -- 0,0,3,0,0,0,6,0,0,0,2,0,0,0,67,0, -- 0,0,115,79,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,2,0,124,0,0,95,1,0,124,3,0,124,0,0,95, -- 2,0,124,4,0,124,0,0,95,3,0,124,5,0,114,48, -- 0,103,0,0,110,3,0,100,0,0,124,0,0,95,4,0, -- 100,1,0,124,0,0,95,5,0,100,0,0,124,0,0,95, -- 6,0,100,0,0,83,41,2,78,70,41,7,114,67,0,0, -- 0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0, -- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, -- 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, -- 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, -- 99,104,101,100,41,6,114,71,0,0,0,114,67,0,0,0, -- 114,169,0,0,0,114,217,0,0,0,114,218,0,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,22,3,0,0,115,14,0,0, -- 0,0,2,9,1,9,1,9,1,9,1,21,3,9,1,122, -- 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, -- 105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,0, -- 0,4,0,0,0,67,0,0,0,115,153,0,0,0,100,1, -- 0,106,0,0,124,0,0,106,1,0,131,1,0,100,2,0, -- 106,0,0,124,0,0,106,2,0,131,1,0,103,2,0,125, -- 1,0,124,0,0,106,3,0,100,0,0,107,9,0,114,79, -- 0,124,1,0,106,4,0,100,3,0,106,0,0,124,0,0, -- 106,3,0,131,1,0,131,1,0,1,110,0,0,124,0,0, -- 106,5,0,100,0,0,107,9,0,114,122,0,124,1,0,106, -- 4,0,100,4,0,106,0,0,124,0,0,106,5,0,131,1, -- 0,131,1,0,1,110,0,0,100,5,0,106,0,0,124,0, -- 0,106,6,0,106,7,0,100,6,0,106,8,0,124,1,0, -- 131,1,0,131,2,0,83,41,7,78,122,9,110,97,109,101, -- 61,123,33,114,125,122,11,108,111,97,100,101,114,61,123,33, -- 114,125,122,11,111,114,105,103,105,110,61,123,33,114,125,122, -- 29,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -- 104,95,108,111,99,97,116,105,111,110,115,61,123,125,122,6, -- 123,125,40,123,125,41,122,2,44,32,41,9,114,47,0,0, -- 0,114,67,0,0,0,114,169,0,0,0,114,217,0,0,0, -- 218,6,97,112,112,101,110,100,114,220,0,0,0,218,9,95, -- 95,99,108,97,115,115,95,95,114,57,0,0,0,114,26,0, -- 0,0,41,2,114,71,0,0,0,114,80,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,0, -- 0,0,34,3,0,0,115,16,0,0,0,0,1,15,1,21, -- 1,15,1,28,1,15,1,6,1,22,1,122,19,77,111,100, -- 117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95, -- 99,2,0,0,0,0,0,0,0,3,0,0,0,13,0,0, -- 0,67,0,0,0,115,145,0,0,0,124,0,0,106,0,0, -- 125,2,0,121,107,0,124,0,0,106,1,0,124,1,0,106, -- 1,0,107,2,0,111,114,0,124,0,0,106,2,0,124,1, -- 0,106,2,0,107,2,0,111,114,0,124,0,0,106,3,0, -- 124,1,0,106,3,0,107,2,0,111,114,0,124,2,0,124, -- 1,0,106,0,0,107,2,0,111,114,0,124,0,0,106,4, -- 0,124,1,0,106,4,0,107,2,0,111,114,0,124,0,0, -- 106,5,0,124,1,0,106,5,0,107,2,0,83,87,110,22, -- 0,4,116,6,0,107,10,0,114,140,0,1,1,1,100,1, -- 0,83,89,110,1,0,88,100,0,0,83,41,2,78,70,41, -- 7,114,220,0,0,0,114,67,0,0,0,114,169,0,0,0, -- 114,217,0,0,0,218,6,99,97,99,104,101,100,218,12,104, -- 97,115,95,108,111,99,97,116,105,111,110,114,209,0,0,0, -- 41,3,114,71,0,0,0,218,5,111,116,104,101,114,218,4, -- 115,109,115,108,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,6,95,95,101,113,95,95,44,3,0,0,115, -- 20,0,0,0,0,1,9,1,3,1,18,1,18,1,18,1, -- 15,1,18,1,20,1,13,1,122,17,77,111,100,117,108,101, -- 83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,0, -- 0,0,0,0,2,0,0,0,12,0,0,0,67,0,0,0, -- 115,158,0,0,0,124,0,0,106,0,0,100,0,0,107,8, -- 0,114,151,0,124,0,0,106,1,0,100,0,0,107,9,0, -- 114,151,0,124,0,0,106,2,0,114,151,0,124,0,0,106, -- 1,0,125,1,0,124,1,0,106,3,0,116,4,0,116,5, -- 0,131,1,0,131,1,0,114,112,0,121,19,0,116,6,0, -- 124,1,0,131,1,0,124,0,0,95,0,0,87,113,145,0, -- 4,116,7,0,107,10,0,114,108,0,1,1,1,89,113,145, -- 0,88,113,148,0,124,1,0,106,3,0,116,4,0,116,8, -- 0,131,1,0,131,1,0,114,148,0,124,1,0,124,0,0, -- 95,0,0,113,148,0,113,151,0,110,0,0,124,0,0,106, -- 0,0,83,41,1,78,41,9,114,222,0,0,0,114,217,0, -- 0,0,114,221,0,0,0,218,8,101,110,100,115,119,105,116, -- 104,218,5,116,117,112,108,101,114,134,0,0,0,114,132,0, -- 0,0,114,124,0,0,0,218,17,66,89,84,69,67,79,68, -- 69,95,83,85,70,70,73,88,69,83,41,2,114,71,0,0, -- 0,114,131,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,225,0,0,0,56,3,0,0,115,22, -- 0,0,0,0,2,15,1,24,1,9,1,21,1,3,1,19, -- 1,13,1,8,1,21,1,18,1,122,17,77,111,100,117,108, -- 101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -- 0,115,13,0,0,0,124,1,0,124,0,0,95,0,0,100, -- 0,0,83,41,1,78,41,1,114,222,0,0,0,41,2,114, -- 71,0,0,0,114,225,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,225,0,0,0,70,3,0, -- 0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,0, -- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,46,0, -- 0,0,124,0,0,106,0,0,100,1,0,107,8,0,114,35, -- 0,124,0,0,106,1,0,106,2,0,100,2,0,131,1,0, -- 100,3,0,25,83,124,0,0,106,1,0,83,100,1,0,83, -- 41,4,122,32,84,104,101,32,110,97,109,101,32,111,102,32, -- 116,104,101,32,109,111,100,117,108,101,39,115,32,112,97,114, -- 101,110,116,46,78,114,116,0,0,0,114,84,0,0,0,41, -- 3,114,220,0,0,0,114,67,0,0,0,114,32,0,0,0, -- 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,6,112,97,114,101,110,116,74,3, -- 0,0,115,6,0,0,0,0,3,15,1,20,2,122,17,77, -- 111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,116, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0, -- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, -- 83,41,1,78,41,1,114,221,0,0,0,41,1,114,71,0, ++ 2,0,1,124,2,0,83,41,4,122,155,84,114,121,32,116, ++ 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, ++ 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, ++ 100,32,109,111,100,117,108,101,32,98,121,32,100,101,108,101, ++ 103,97,116,105,110,103,32,116,111,10,32,32,32,32,115,101, ++ 108,102,46,102,105,110,100,95,108,111,97,100,101,114,40,41, ++ 46,10,10,32,32,32,32,84,104,105,115,32,109,101,116,104, ++ 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, ++ 32,105,110,32,102,97,118,111,114,32,111,102,32,102,105,110, ++ 100,101,114,46,102,105,110,100,95,115,112,101,99,40,41,46, ++ 10,10,32,32,32,32,78,122,44,78,111,116,32,105,109,112, ++ 111,114,116,105,110,103,32,100,105,114,101,99,116,111,114,121, ++ 32,123,125,58,32,109,105,115,115,105,110,103,32,95,95,105, ++ 110,105,116,95,95,114,60,0,0,0,41,6,218,11,102,105, ++ 110,100,95,108,111,97,100,101,114,114,32,0,0,0,114,61, ++ 0,0,0,114,62,0,0,0,114,48,0,0,0,218,13,73, ++ 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,109, ++ 0,0,0,218,8,102,117,108,108,110,97,109,101,218,6,108, ++ 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, ++ 3,109,115,103,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, ++ 101,95,115,104,105,109,143,1,0,0,115,10,0,0,0,0, ++ 10,21,1,24,1,6,1,29,1,114,131,0,0,0,99,4, ++ 0,0,0,0,0,0,0,11,0,0,0,19,0,0,0,67, ++ 0,0,0,115,240,1,0,0,105,0,0,125,4,0,124,2, ++ 0,100,1,0,107,9,0,114,31,0,124,2,0,124,4,0, ++ 100,2,0,60,110,6,0,100,3,0,125,2,0,124,3,0, ++ 100,1,0,107,9,0,114,59,0,124,3,0,124,4,0,100, ++ 4,0,60,124,0,0,100,1,0,100,5,0,133,2,0,25, ++ 125,5,0,124,0,0,100,5,0,100,6,0,133,2,0,25, ++ 125,6,0,124,0,0,100,6,0,100,7,0,133,2,0,25, ++ 125,7,0,124,5,0,116,0,0,107,3,0,114,168,0,100, ++ 8,0,106,1,0,124,2,0,124,5,0,131,2,0,125,8, ++ 0,116,2,0,100,9,0,124,8,0,131,2,0,1,116,3, ++ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,119,0, ++ 116,4,0,124,6,0,131,1,0,100,5,0,107,3,0,114, ++ 229,0,100,10,0,106,1,0,124,2,0,131,1,0,125,8, ++ 0,116,2,0,100,9,0,124,8,0,131,2,0,1,116,5, ++ 0,124,8,0,131,1,0,130,1,0,110,58,0,116,4,0, ++ 124,7,0,131,1,0,100,5,0,107,3,0,114,31,1,100, ++ 11,0,106,1,0,124,2,0,131,1,0,125,8,0,116,2, ++ 0,100,9,0,124,8,0,131,2,0,1,116,5,0,124,8, ++ 0,131,1,0,130,1,0,124,1,0,100,1,0,107,9,0, ++ 114,226,1,121,20,0,116,6,0,124,1,0,100,12,0,25, ++ 131,1,0,125,9,0,87,110,18,0,4,116,7,0,107,10, ++ 0,114,83,1,1,1,1,89,110,62,0,88,116,8,0,124, ++ 6,0,131,1,0,124,9,0,107,3,0,114,145,1,100,13, ++ 0,106,1,0,124,2,0,131,1,0,125,8,0,116,2,0, ++ 100,9,0,124,8,0,131,2,0,1,116,3,0,124,8,0, ++ 124,4,0,141,1,0,130,1,0,121,18,0,124,1,0,100, ++ 14,0,25,100,15,0,64,125,10,0,87,110,18,0,4,116, ++ 7,0,107,10,0,114,183,1,1,1,1,89,110,43,0,88, ++ 116,8,0,124,7,0,131,1,0,124,10,0,107,3,0,114, ++ 226,1,116,3,0,100,13,0,106,1,0,124,2,0,131,1, ++ 0,124,4,0,141,1,0,130,1,0,124,0,0,100,7,0, ++ 100,1,0,133,2,0,25,83,41,16,97,122,1,0,0,86, ++ 97,108,105,100,97,116,101,32,116,104,101,32,104,101,97,100, ++ 101,114,32,111,102,32,116,104,101,32,112,97,115,115,101,100, ++ 45,105,110,32,98,121,116,101,99,111,100,101,32,97,103,97, ++ 105,110,115,116,32,115,111,117,114,99,101,95,115,116,97,116, ++ 115,32,40,105,102,10,32,32,32,32,103,105,118,101,110,41, ++ 32,97,110,100,32,114,101,116,117,114,110,105,110,103,32,116, ++ 104,101,32,98,121,116,101,99,111,100,101,32,116,104,97,116, ++ 32,99,97,110,32,98,101,32,99,111,109,112,105,108,101,100, ++ 32,98,121,32,99,111,109,112,105,108,101,40,41,46,10,10, ++ 32,32,32,32,65,108,108,32,111,116,104,101,114,32,97,114, ++ 103,117,109,101,110,116,115,32,97,114,101,32,117,115,101,100, ++ 32,116,111,32,101,110,104,97,110,99,101,32,101,114,114,111, ++ 114,32,114,101,112,111,114,116,105,110,103,46,10,10,32,32, ++ 32,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, ++ 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, ++ 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,115, ++ 32,105,110,99,111,114,114,101,99,116,32,111,114,32,116,104, ++ 101,32,98,121,116,101,99,111,100,101,32,105,115,10,32,32, ++ 32,32,102,111,117,110,100,32,116,111,32,98,101,32,115,116, ++ 97,108,101,46,32,69,79,70,69,114,114,111,114,32,105,115, ++ 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, ++ 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, ++ 111,32,98,101,10,32,32,32,32,116,114,117,110,99,97,116, ++ 101,100,46,10,10,32,32,32,32,78,114,107,0,0,0,122, ++ 10,60,98,121,116,101,99,111,100,101,62,114,36,0,0,0, ++ 114,13,0,0,0,233,8,0,0,0,233,12,0,0,0,122, ++ 30,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101, ++ 114,32,105,110,32,123,33,114,125,58,32,123,33,114,125,122, ++ 2,123,125,122,43,114,101,97,99,104,101,100,32,69,79,70, ++ 32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,116, ++ 105,109,101,115,116,97,109,112,32,105,110,32,123,33,114,125, ++ 122,48,114,101,97,99,104,101,100,32,69,79,70,32,119,104, ++ 105,108,101,32,114,101,97,100,105,110,103,32,115,105,122,101, ++ 32,111,102,32,115,111,117,114,99,101,32,105,110,32,123,33, ++ 114,125,218,5,109,116,105,109,101,122,26,98,121,116,101,99, ++ 111,100,101,32,105,115,32,115,116,97,108,101,32,102,111,114, ++ 32,123,33,114,125,218,4,115,105,122,101,108,3,0,0,0, ++ 255,127,255,127,3,0,41,9,218,12,77,65,71,73,67,95, ++ 78,85,77,66,69,82,114,48,0,0,0,114,106,0,0,0, ++ 114,108,0,0,0,114,32,0,0,0,218,8,69,79,70,69, ++ 114,114,111,114,114,15,0,0,0,218,8,75,101,121,69,114, ++ 114,111,114,114,20,0,0,0,41,11,114,54,0,0,0,218, ++ 12,115,111,117,114,99,101,95,115,116,97,116,115,114,107,0, ++ 0,0,114,36,0,0,0,90,11,101,120,99,95,100,101,116, ++ 97,105,108,115,90,5,109,97,103,105,99,90,13,114,97,119, ++ 95,116,105,109,101,115,116,97,109,112,90,8,114,97,119,95, ++ 115,105,122,101,114,76,0,0,0,218,12,115,111,117,114,99, ++ 101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95, ++ 115,105,122,101,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,25,95,118,97,108,105,100,97,116,101,95,98, ++ 121,116,101,99,111,100,101,95,104,101,97,100,101,114,160,1, ++ 0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,6, ++ 1,12,1,10,1,16,1,16,1,16,1,12,1,18,1,13, ++ 1,18,1,18,1,15,1,13,1,15,1,18,1,15,1,13, ++ 1,12,1,12,1,3,1,20,1,13,1,5,2,18,1,15, ++ 1,13,1,15,1,3,1,18,1,13,1,5,2,18,1,15, ++ 1,9,1,114,142,0,0,0,99,4,0,0,0,0,0,0, ++ 0,5,0,0,0,6,0,0,0,67,0,0,0,115,112,0, ++ 0,0,116,0,0,106,1,0,124,0,0,131,1,0,125,4, ++ 0,116,2,0,124,4,0,116,3,0,131,2,0,114,75,0, ++ 116,4,0,100,1,0,124,2,0,131,2,0,1,124,3,0, ++ 100,2,0,107,9,0,114,71,0,116,5,0,106,6,0,124, ++ 4,0,124,3,0,131,2,0,1,124,4,0,83,116,7,0, ++ 100,3,0,106,8,0,124,2,0,131,1,0,100,4,0,124, ++ 1,0,100,5,0,124,2,0,131,1,2,130,1,0,100,2, ++ 0,83,41,6,122,60,67,111,109,112,105,108,101,32,98,121, ++ 116,101,99,111,100,101,32,97,115,32,114,101,116,117,114,110, ++ 101,100,32,98,121,32,95,118,97,108,105,100,97,116,101,95, ++ 98,121,116,101,99,111,100,101,95,104,101,97,100,101,114,40, ++ 41,46,122,21,99,111,100,101,32,111,98,106,101,99,116,32, ++ 102,114,111,109,32,123,33,114,125,78,122,23,78,111,110,45, ++ 99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,123, ++ 33,114,125,114,107,0,0,0,114,36,0,0,0,41,9,218, ++ 7,109,97,114,115,104,97,108,90,5,108,111,97,100,115,218, ++ 10,105,115,105,110,115,116,97,110,99,101,218,10,95,99,111, ++ 100,101,95,116,121,112,101,114,106,0,0,0,218,4,95,105, ++ 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, ++ 110,97,109,101,114,108,0,0,0,114,48,0,0,0,41,5, ++ 114,54,0,0,0,114,107,0,0,0,114,90,0,0,0,114, ++ 91,0,0,0,218,4,99,111,100,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,99,111,109,112, ++ 105,108,101,95,98,121,116,101,99,111,100,101,215,1,0,0, ++ 115,16,0,0,0,0,2,15,1,15,1,13,1,12,1,16, ++ 1,4,2,18,1,114,148,0,0,0,114,60,0,0,0,99, + 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, +- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, +- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, +- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, +- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, +- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, +- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, +- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,78,41,2,114,181,0,0,0,114,127, +- 0,0,0,41,4,114,170,0,0,0,114,126,0,0,0,114, +- 35,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,109, +- 111,100,117,108,101,114,2,0,0,115,8,0,0,0,0,7, +- 18,1,12,1,7,2,122,33,87,105,110,100,111,119,115,82, +- 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, +- 110,100,95,109,111,100,117,108,101,41,12,114,112,0,0,0, +- 114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114, +- 175,0,0,0,114,174,0,0,0,114,173,0,0,0,218,11, +- 99,108,97,115,115,109,101,116,104,111,100,114,172,0,0,0, +- 114,178,0,0,0,114,181,0,0,0,114,182,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,168,0,0,0,64,2,0,0,115,20,0,0, +- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, +- 1,21,15,3,1,114,168,0,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 70,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, +- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, +- 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, +- 132,0,0,90,7,0,100,10,0,83,41,11,218,13,95,76, +- 111,97,100,101,114,66,97,115,105,99,115,122,83,66,97,115, +- 101,32,99,108,97,115,115,32,111,102,32,99,111,109,109,111, +- 110,32,99,111,100,101,32,110,101,101,100,101,100,32,98,121, +- 32,98,111,116,104,32,83,111,117,114,99,101,76,111,97,100, +- 101,114,32,97,110,100,10,32,32,32,32,83,111,117,114,99, +- 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, +- 99,2,0,0,0,0,0,0,0,5,0,0,0,3,0,0, +- 0,67,0,0,0,115,88,0,0,0,116,0,0,124,0,0, +- 106,1,0,124,1,0,131,1,0,131,1,0,100,1,0,25, +- 125,2,0,124,2,0,106,2,0,100,2,0,100,1,0,131, +- 2,0,100,3,0,25,125,3,0,124,1,0,106,3,0,100, +- 2,0,131,1,0,100,4,0,25,125,4,0,124,3,0,100, +- 5,0,107,2,0,111,87,0,124,4,0,100,5,0,107,3, +- 0,83,41,6,122,141,67,111,110,99,114,101,116,101,32,105, +- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, +- 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105, +- 115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101, +- 99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32, +- 32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110, +- 101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97, +- 109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109, +- 101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112, +- 121,39,46,114,29,0,0,0,114,58,0,0,0,114,59,0, +- 0,0,114,56,0,0,0,218,8,95,95,105,110,105,116,95, +- 95,41,4,114,38,0,0,0,114,157,0,0,0,114,34,0, +- 0,0,114,32,0,0,0,41,5,114,108,0,0,0,114,126, +- 0,0,0,114,94,0,0,0,90,13,102,105,108,101,110,97, +- 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, +- 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,159,0,0,0,133,2,0,0,115,8,0,0,0,0, +- 3,25,1,22,1,19,1,122,24,95,76,111,97,100,101,114, +- 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, +- 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, +- 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, +- 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, +- 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, +- 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,4, +- 0,0,0,41,2,114,108,0,0,0,114,164,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, +- 99,114,101,97,116,101,95,109,111,100,117,108,101,141,2,0, +- 0,115,0,0,0,0,122,27,95,76,111,97,100,101,114,66, +- 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, +- 117,108,101,99,2,0,0,0,0,0,0,0,3,0,0,0, +- 4,0,0,0,67,0,0,0,115,80,0,0,0,124,0,0, +- 106,0,0,124,1,0,106,1,0,131,1,0,125,2,0,124, +- 2,0,100,1,0,107,8,0,114,54,0,116,2,0,100,2, +- 0,106,3,0,124,1,0,106,1,0,131,1,0,131,1,0, +- 130,1,0,116,4,0,106,5,0,116,6,0,124,2,0,124, +- 1,0,106,7,0,131,3,0,1,100,1,0,83,41,3,122, +- 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, +- 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, +- 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, +- 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, +- 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, +- 101,116,95,99,111,100,101,114,112,0,0,0,114,107,0,0, +- 0,114,47,0,0,0,114,121,0,0,0,218,25,95,99,97, +- 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, +- 101,109,111,118,101,100,218,4,101,120,101,99,114,118,0,0, +- 0,41,3,114,108,0,0,0,218,6,109,111,100,117,108,101, +- 114,146,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, +- 101,144,2,0,0,115,10,0,0,0,0,2,18,1,12,1, +- 9,1,15,1,122,25,95,76,111,97,100,101,114,66,97,115, +- 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, +- 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, +- 0,0,124,1,0,131,2,0,83,41,1,78,41,2,114,121, +- 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, +- 101,95,115,104,105,109,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,226,0,0,0,82,3,0,0,115,2,0,0,0,0, -- 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97, -- 115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, -- 19,0,0,0,116,0,0,124,1,0,131,1,0,124,0,0, -- 95,1,0,100,0,0,83,41,1,78,41,2,218,4,98,111, -- 111,108,114,221,0,0,0,41,2,114,71,0,0,0,218,5, -- 118,97,108,117,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,226,0,0,0,86,3,0,0,115,2,0, -- 0,0,0,2,41,12,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, -- 101,0,0,0,114,229,0,0,0,218,8,112,114,111,112,101, -- 114,116,121,114,225,0,0,0,218,6,115,101,116,116,101,114, -- 114,233,0,0,0,114,226,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,216, -- 0,0,0,241,2,0,0,115,20,0,0,0,12,35,6,2, -- 15,1,15,11,12,10,12,12,18,14,21,4,18,8,18,4, -- 114,216,0,0,0,114,217,0,0,0,114,219,0,0,0,99, -- 2,0,0,0,2,0,0,0,5,0,0,0,15,0,0,0, -- 67,0,0,0,115,193,0,0,0,116,0,0,124,1,0,100, -- 1,0,131,2,0,114,83,0,124,3,0,100,2,0,107,8, -- 0,114,43,0,116,1,0,124,0,0,100,3,0,124,1,0, -- 131,1,1,83,124,3,0,114,55,0,103,0,0,110,3,0, -- 100,2,0,125,4,0,116,1,0,124,0,0,100,3,0,124, -- 1,0,100,4,0,124,4,0,131,1,2,83,124,3,0,100, -- 2,0,107,8,0,114,168,0,116,0,0,124,1,0,100,5, -- 0,131,2,0,114,159,0,121,19,0,124,1,0,106,2,0, -- 124,0,0,131,1,0,125,3,0,87,113,165,0,4,116,3, -- 0,107,10,0,114,155,0,1,1,1,100,2,0,125,3,0, -- 89,113,165,0,88,113,168,0,100,6,0,125,3,0,110,0, -- 0,116,4,0,124,0,0,124,1,0,100,7,0,124,2,0, -- 100,5,0,124,3,0,131,2,2,83,41,8,122,53,82,101, -- 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, -- 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105, -- 111,117,115,32,108,111,97,100,101,114,32,109,101,116,104,111, -- 100,115,46,218,12,103,101,116,95,102,105,108,101,110,97,109, -- 101,78,114,169,0,0,0,114,220,0,0,0,114,219,0,0, -- 0,70,114,217,0,0,0,41,5,114,60,0,0,0,218,23, -- 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, -- 111,99,97,116,105,111,110,114,219,0,0,0,114,153,0,0, -- 0,114,216,0,0,0,41,5,114,67,0,0,0,114,169,0, -- 0,0,114,217,0,0,0,114,219,0,0,0,90,6,115,101, -- 97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,173,0,0,0,91,3,0,0,115,28,0,0, -- 0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,12, -- 1,15,1,3,1,19,1,13,1,14,3,9,2,114,173,0, -- 0,0,114,169,0,0,0,114,220,0,0,0,99,2,0,0, -- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, -- 0,115,110,1,0,0,124,1,0,100,1,0,107,8,0,114, -- 79,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, -- 0,131,2,0,114,79,0,121,19,0,124,2,0,106,1,0, -- 124,0,0,131,1,0,125,1,0,87,113,76,0,4,116,2, -- 0,107,10,0,114,72,0,1,1,1,89,113,76,0,88,113, -- 79,0,110,0,0,116,3,0,124,0,0,124,2,0,100,4, -- 0,124,1,0,131,2,1,125,4,0,100,5,0,124,4,0, -- 95,4,0,124,2,0,100,1,0,107,8,0,114,203,0,120, -- 79,0,116,5,0,131,0,0,68,93,61,0,92,2,0,125, -- 5,0,125,6,0,124,1,0,106,6,0,116,7,0,124,6, -- 0,131,1,0,131,1,0,114,131,0,124,5,0,124,0,0, -- 124,1,0,131,2,0,125,2,0,124,2,0,124,4,0,95, -- 8,0,80,113,131,0,113,131,0,87,100,1,0,83,110,0, -- 0,124,3,0,116,9,0,107,8,0,114,38,1,116,0,0, -- 124,2,0,100,6,0,131,2,0,114,47,1,121,19,0,124, -- 2,0,106,10,0,124,0,0,131,1,0,125,7,0,87,110, -- 18,0,4,116,2,0,107,10,0,114,13,1,1,1,1,89, -- 113,35,1,88,124,7,0,114,35,1,103,0,0,124,4,0, -- 95,11,0,113,35,1,113,47,1,110,9,0,124,3,0,124, -- 4,0,95,11,0,124,4,0,106,11,0,103,0,0,107,2, -- 0,114,106,1,124,1,0,114,106,1,116,12,0,124,1,0, -- 131,1,0,100,7,0,25,125,8,0,124,4,0,106,11,0, -- 106,13,0,124,8,0,131,1,0,1,113,106,1,110,0,0, -- 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, -- 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, -- 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, -- 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, -- 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, -- 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, -- 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, -- 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -- 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, -- 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, -- 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, -- 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, -- 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, -- 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, -- 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, -- 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, -- 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, -- 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, -- 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, -- 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, -- 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, -- 111,119,110,62,114,238,0,0,0,114,217,0,0,0,84,114, -- 219,0,0,0,114,84,0,0,0,41,14,114,60,0,0,0, -- 114,238,0,0,0,114,153,0,0,0,114,216,0,0,0,114, -- 221,0,0,0,218,27,95,103,101,116,95,115,117,112,112,111, -- 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114, -- 115,114,230,0,0,0,114,231,0,0,0,114,169,0,0,0, -- 218,9,95,80,79,80,85,76,65,84,69,114,219,0,0,0, -- 114,220,0,0,0,114,38,0,0,0,114,223,0,0,0,41, -- 9,114,67,0,0,0,218,8,108,111,99,97,116,105,111,110, -- 114,169,0,0,0,114,220,0,0,0,114,177,0,0,0,218, -- 12,108,111,97,100,101,114,95,99,108,97,115,115,114,127,0, -- 0,0,114,219,0,0,0,90,7,100,105,114,110,97,109,101, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 239,0,0,0,116,3,0,0,115,60,0,0,0,0,12,12, -- 4,6,1,15,2,3,1,19,1,13,1,11,8,21,1,9, -- 3,12,1,22,1,21,1,15,1,9,1,8,2,7,3,12, -- 2,15,1,3,1,19,1,13,1,5,2,6,1,18,2,9, -- 1,15,1,6,1,16,1,22,2,114,239,0,0,0,99,3, -- 0,0,0,0,0,0,0,8,0,0,0,53,0,0,0,67, -- 0,0,0,115,124,1,0,0,121,13,0,124,0,0,106,0, -- 0,125,3,0,87,110,18,0,4,116,1,0,107,10,0,114, -- 33,0,1,1,1,89,110,17,0,88,124,3,0,100,0,0, -- 107,9,0,114,50,0,124,3,0,83,124,0,0,106,2,0, -- 125,4,0,124,1,0,100,0,0,107,8,0,114,108,0,121, -- 13,0,124,0,0,106,3,0,125,1,0,87,113,108,0,4, -- 116,1,0,107,10,0,114,104,0,1,1,1,89,113,108,0, -- 88,110,0,0,121,13,0,124,0,0,106,4,0,125,5,0, -- 87,110,24,0,4,116,1,0,107,10,0,114,147,0,1,1, -- 1,100,0,0,125,5,0,89,110,1,0,88,124,2,0,100, -- 0,0,107,8,0,114,224,0,124,5,0,100,0,0,107,8, -- 0,114,215,0,121,13,0,124,1,0,106,5,0,125,2,0, -- 87,113,221,0,4,116,1,0,107,10,0,114,211,0,1,1, -- 1,100,0,0,125,2,0,89,113,221,0,88,113,224,0,124, -- 5,0,125,2,0,110,0,0,121,13,0,124,0,0,106,6, -- 0,125,6,0,87,110,24,0,4,116,1,0,107,10,0,114, -- 7,1,1,1,1,100,0,0,125,6,0,89,110,1,0,88, -- 121,19,0,116,7,0,124,0,0,106,8,0,131,1,0,125, -- 7,0,87,110,24,0,4,116,1,0,107,10,0,114,53,1, -- 1,1,1,100,0,0,125,7,0,89,110,1,0,88,116,9, -- 0,124,4,0,124,1,0,100,1,0,124,2,0,131,2,1, -- 125,3,0,124,5,0,100,0,0,107,8,0,114,93,1,100, -- 2,0,110,3,0,100,3,0,124,3,0,95,10,0,124,6, -- 0,124,3,0,95,11,0,124,7,0,124,3,0,95,12,0, -- 124,3,0,83,41,4,78,114,217,0,0,0,70,84,41,13, -- 114,208,0,0,0,114,209,0,0,0,114,57,0,0,0,114, -- 204,0,0,0,114,210,0,0,0,90,7,95,79,82,73,71, -- 73,78,218,10,95,95,99,97,99,104,101,100,95,95,218,4, -- 108,105,115,116,218,8,95,95,112,97,116,104,95,95,114,216, -- 0,0,0,114,221,0,0,0,114,225,0,0,0,114,220,0, -- 0,0,41,8,114,179,0,0,0,114,169,0,0,0,114,217, -- 0,0,0,114,177,0,0,0,114,67,0,0,0,114,242,0, -- 0,0,114,225,0,0,0,114,220,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,17,95,115,112, -- 101,99,95,102,114,111,109,95,109,111,100,117,108,101,180,3, -- 0,0,115,72,0,0,0,0,2,3,1,13,1,13,1,5, -- 2,12,1,4,2,9,1,12,1,3,1,13,1,13,2,8, -- 1,3,1,13,1,13,1,11,1,12,1,12,1,3,1,13, -- 1,13,1,14,2,9,1,3,1,13,1,13,1,11,1,3, -- 1,19,1,13,1,11,2,21,1,27,1,9,1,9,1,114, -- 247,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,6,0,0,0,64,0,0,0,115,142,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, -- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, -- 5,0,132,0,0,90,5,0,100,6,0,100,7,0,100,8, -- 0,100,9,0,100,10,0,100,11,0,132,0,2,90,6,0, -- 100,12,0,100,13,0,132,0,0,90,7,0,100,14,0,100, -- 15,0,132,0,0,90,8,0,100,16,0,100,17,0,132,0, -- 0,90,9,0,100,18,0,100,19,0,132,0,0,90,10,0, -- 100,20,0,100,21,0,132,0,0,90,11,0,100,22,0,100, -- 23,0,132,0,0,90,12,0,100,24,0,83,41,25,114,174, -- 0,0,0,122,77,67,111,110,118,101,110,105,101,110,99,101, -- 32,119,114,97,112,112,101,114,32,97,114,111,117,110,100,32, -- 115,112,101,99,32,111,98,106,101,99,116,115,32,116,111,32, -- 112,114,111,118,105,100,101,32,115,112,101,99,45,115,112,101, -- 99,105,102,105,99,10,32,32,32,32,109,101,116,104,111,100, -- 115,46,99,2,0,0,0,0,0,0,0,2,0,0,0,2, -- 0,0,0,67,0,0,0,115,13,0,0,0,124,1,0,124, -- 0,0,95,0,0,100,0,0,83,41,1,78,41,1,114,177, -- 0,0,0,41,2,114,71,0,0,0,114,177,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, -- 0,0,0,232,3,0,0,115,2,0,0,0,0,1,122,21, -- 95,83,112,101,99,77,101,116,104,111,100,115,46,95,95,105, -- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,3,0, -- 0,0,3,0,0,0,67,0,0,0,115,158,0,0,0,124, -- 0,0,106,0,0,125,1,0,124,1,0,106,1,0,100,1, -- 0,107,8,0,114,30,0,100,2,0,110,6,0,124,1,0, -- 106,1,0,125,2,0,124,1,0,106,2,0,100,1,0,107, -- 8,0,114,104,0,124,1,0,106,3,0,100,1,0,107,8, -- 0,114,82,0,100,3,0,106,4,0,124,2,0,131,1,0, -- 83,100,4,0,106,4,0,124,2,0,124,1,0,106,3,0, -- 131,2,0,83,110,50,0,124,1,0,106,5,0,114,132,0, -- 100,5,0,106,4,0,124,2,0,124,1,0,106,2,0,131, -- 2,0,83,100,6,0,106,4,0,124,1,0,106,1,0,124, -- 1,0,106,2,0,131,2,0,83,100,1,0,83,41,7,122, -- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, -- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, -- 109,111,100,117,108,101,46,78,114,206,0,0,0,122,13,60, -- 109,111,100,117,108,101,32,123,33,114,125,62,122,20,60,109, -- 111,100,117,108,101,32,123,33,114,125,32,40,123,33,114,125, -- 41,62,122,23,60,109,111,100,117,108,101,32,123,33,114,125, -- 32,102,114,111,109,32,123,33,114,125,62,122,18,60,109,111, -- 100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,41, -- 6,114,177,0,0,0,114,67,0,0,0,114,217,0,0,0, -- 114,169,0,0,0,114,47,0,0,0,114,226,0,0,0,41, -- 3,114,71,0,0,0,114,177,0,0,0,114,67,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 205,0,0,0,235,3,0,0,115,18,0,0,0,0,3,9, -- 1,30,1,15,1,15,1,13,2,22,2,9,1,19,2,122, -- 24,95,83,112,101,99,77,101,116,104,111,100,115,46,109,111, -- 100,117,108,101,95,114,101,112,114,218,9,95,111,118,101,114, -- 114,105,100,101,70,218,11,95,102,111,114,99,101,95,110,97, -- 109,101,84,99,2,0,0,0,2,0,0,0,6,0,0,0, -- 66,0,0,0,67,0,0,0,115,75,2,0,0,124,0,0, -- 106,0,0,125,4,0,124,2,0,115,45,0,124,3,0,115, -- 45,0,116,1,0,124,1,0,100,1,0,100,2,0,131,3, -- 0,100,2,0,107,8,0,114,85,0,121,16,0,124,4,0, -- 106,2,0,124,1,0,95,3,0,87,113,85,0,4,116,4, -- 0,107,10,0,114,81,0,1,1,1,89,113,85,0,88,110, -- 0,0,124,2,0,115,115,0,116,1,0,124,1,0,100,3, -- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,221,0, -- 124,4,0,106,5,0,125,5,0,124,5,0,100,2,0,107, -- 8,0,114,184,0,124,4,0,106,6,0,100,2,0,107,9, -- 0,114,184,0,116,7,0,106,8,0,116,7,0,131,1,0, -- 125,5,0,124,4,0,106,6,0,124,5,0,95,9,0,113, -- 184,0,110,0,0,121,13,0,124,5,0,124,1,0,95,10, -- 0,87,113,221,0,4,116,4,0,107,10,0,114,217,0,1, -- 1,1,89,113,221,0,88,110,0,0,124,2,0,115,251,0, -- 116,1,0,124,1,0,100,4,0,100,2,0,131,3,0,100, -- 2,0,107,8,0,114,35,1,121,16,0,124,4,0,106,11, -- 0,124,1,0,95,12,0,87,113,35,1,4,116,4,0,107, -- 10,0,114,31,1,1,1,1,89,113,35,1,88,110,0,0, -- 121,13,0,124,4,0,124,1,0,95,13,0,87,110,18,0, -- 4,116,4,0,107,10,0,114,68,1,1,1,1,89,110,1, -- 0,88,124,2,0,115,99,1,116,1,0,124,1,0,100,5, -- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,157,1, -- 124,4,0,106,6,0,100,2,0,107,9,0,114,157,1,121, -- 16,0,124,4,0,106,6,0,124,1,0,95,14,0,87,113, -- 154,1,4,116,4,0,107,10,0,114,150,1,1,1,1,89, -- 113,154,1,88,113,157,1,110,0,0,124,4,0,106,15,0, -- 114,71,2,124,2,0,115,196,1,116,1,0,124,1,0,100, -- 6,0,100,2,0,131,3,0,100,2,0,107,8,0,114,236, -- 1,121,16,0,124,4,0,106,16,0,124,1,0,95,17,0, -- 87,113,236,1,4,116,4,0,107,10,0,114,232,1,1,1, -- 1,89,113,236,1,88,110,0,0,124,2,0,115,10,2,116, -- 1,0,124,1,0,100,7,0,100,2,0,131,3,0,100,2, -- 0,107,8,0,114,71,2,124,4,0,106,18,0,100,2,0, -- 107,9,0,114,68,2,121,16,0,124,4,0,106,18,0,124, -- 1,0,95,19,0,87,113,65,2,4,116,4,0,107,10,0, -- 114,61,2,1,1,1,89,113,65,2,88,113,68,2,113,71, -- 2,110,0,0,100,2,0,83,41,8,97,29,2,0,0,83, -- 101,116,32,116,104,101,32,109,111,100,117,108,101,39,115,32, -- 97,116,116,114,105,98,117,116,101,115,46,10,10,32,32,32, -- 32,32,32,32,32,65,108,108,32,109,105,115,115,105,110,103, -- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, -- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, -- 115,32,119,105,108,108,32,98,101,32,115,101,116,46,32,32, -- 72,101,114,101,10,32,32,32,32,32,32,32,32,105,115,32, -- 104,111,119,32,116,104,101,32,115,112,101,99,32,97,116,116, -- 114,105,98,117,116,101,115,32,109,97,112,32,111,110,116,111, -- 32,116,104,101,32,109,111,100,117,108,101,58,10,10,32,32, -- 32,32,32,32,32,32,115,112,101,99,46,110,97,109,101,32, -- 45,62,32,109,111,100,117,108,101,46,95,95,110,97,109,101, -- 95,95,10,32,32,32,32,32,32,32,32,115,112,101,99,46, -- 108,111,97,100,101,114,32,45,62,32,109,111,100,117,108,101, -- 46,95,95,108,111,97,100,101,114,95,95,10,32,32,32,32, -- 32,32,32,32,115,112,101,99,46,112,97,114,101,110,116,32, -- 45,62,32,109,111,100,117,108,101,46,95,95,112,97,99,107, -- 97,103,101,95,95,10,32,32,32,32,32,32,32,32,115,112, -- 101,99,32,45,62,32,109,111,100,117,108,101,46,95,95,115, -- 112,101,99,95,95,10,10,32,32,32,32,32,32,32,32,79, -- 112,116,105,111,110,97,108,58,10,32,32,32,32,32,32,32, -- 32,115,112,101,99,46,111,114,105,103,105,110,32,45,62,32, -- 109,111,100,117,108,101,46,95,95,102,105,108,101,95,95,32, -- 40,105,102,32,115,112,101,99,46,115,101,116,95,102,105,108, -- 101,97,116,116,114,32,105,115,32,116,114,117,101,41,10,32, -- 32,32,32,32,32,32,32,115,112,101,99,46,99,97,99,104, -- 101,100,32,45,62,32,109,111,100,117,108,101,46,95,95,99, -- 97,99,104,101,100,95,95,32,40,105,102,32,95,95,102,105, -- 108,101,95,95,32,97,108,115,111,32,115,101,116,41,10,32, -- 32,32,32,32,32,32,32,115,112,101,99,46,115,117,98,109, -- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, -- 97,116,105,111,110,115,32,45,62,32,109,111,100,117,108,101, -- 46,95,95,112,97,116,104,95,95,32,40,105,102,32,115,101, -- 116,41,10,10,32,32,32,32,32,32,32,32,114,57,0,0, -- 0,78,114,204,0,0,0,218,11,95,95,112,97,99,107,97, -- 103,101,95,95,114,246,0,0,0,114,210,0,0,0,114,244, -- 0,0,0,41,20,114,177,0,0,0,114,62,0,0,0,114, -- 67,0,0,0,114,57,0,0,0,114,209,0,0,0,114,169, -- 0,0,0,114,220,0,0,0,218,16,95,78,97,109,101,115, -- 112,97,99,101,76,111,97,100,101,114,218,7,95,95,110,101, -- 119,95,95,218,5,95,112,97,116,104,114,204,0,0,0,114, -- 233,0,0,0,114,250,0,0,0,114,208,0,0,0,114,246, -- 0,0,0,114,226,0,0,0,114,217,0,0,0,114,210,0, -- 0,0,114,225,0,0,0,114,244,0,0,0,41,6,114,71, -- 0,0,0,114,179,0,0,0,114,248,0,0,0,114,249,0, -- 0,0,114,177,0,0,0,114,169,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,17,105,110,105, -- 116,95,109,111,100,117,108,101,95,97,116,116,114,115,251,3, -- 0,0,115,88,0,0,0,0,17,9,6,12,1,24,1,3, -- 1,16,1,13,1,8,3,30,1,9,1,12,2,15,1,15, -- 1,18,1,3,1,13,1,13,1,8,3,30,1,3,1,16, -- 1,13,1,8,3,3,1,13,1,13,1,5,3,30,1,15, -- 1,3,1,16,1,13,1,11,2,9,2,30,1,3,1,16, -- 1,13,1,8,3,30,1,15,1,3,1,16,1,13,1,122, -- 30,95,83,112,101,99,77,101,116,104,111,100,115,46,105,110, -- 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, -- 67,0,0,0,115,101,0,0,0,124,0,0,106,0,0,125, -- 1,0,116,1,0,124,1,0,106,2,0,100,1,0,131,2, -- 0,114,48,0,124,1,0,106,2,0,106,3,0,124,1,0, -- 131,1,0,125,2,0,110,6,0,100,2,0,125,2,0,124, -- 2,0,100,2,0,107,8,0,114,84,0,116,4,0,124,1, -- 0,106,5,0,131,1,0,125,2,0,110,0,0,124,0,0, -- 106,6,0,124,2,0,131,1,0,1,124,2,0,83,41,3, -- 122,153,82,101,116,117,114,110,32,97,32,110,101,119,32,109, -- 111,100,117,108,101,32,116,111,32,98,101,32,108,111,97,100, -- 101,100,46,10,10,32,32,32,32,32,32,32,32,84,104,101, -- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, -- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, -- 115,32,97,114,101,32,97,108,115,111,32,115,101,116,32,119, -- 105,116,104,32,116,104,101,10,32,32,32,32,32,32,32,32, -- 97,112,112,114,111,112,114,105,97,116,101,32,118,97,108,117, -- 101,115,32,102,114,111,109,32,116,104,101,32,115,112,101,99, -- 46,10,10,32,32,32,32,32,32,32,32,218,13,99,114,101, -- 97,116,101,95,109,111,100,117,108,101,78,41,7,114,177,0, -- 0,0,114,60,0,0,0,114,169,0,0,0,114,255,0,0, -- 0,114,68,0,0,0,114,67,0,0,0,114,254,0,0,0, -- 41,3,114,71,0,0,0,114,177,0,0,0,114,179,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,6,99,114,101,97,116,101,75,4,0,0,115,16,0,0, -- 0,0,7,9,2,18,3,21,2,6,1,12,4,18,1,13, -- 1,122,19,95,83,112,101,99,77,101,116,104,111,100,115,46, -- 99,114,101,97,116,101,99,2,0,0,0,0,0,0,0,2, -- 0,0,0,2,0,0,0,67,0,0,0,115,23,0,0,0, -- 124,0,0,106,0,0,106,1,0,106,2,0,124,1,0,131, -- 1,0,1,100,1,0,83,41,2,122,189,68,111,32,101,118, -- 101,114,121,116,104,105,110,103,32,110,101,99,101,115,115,97, -- 114,121,32,116,111,32,101,120,101,99,117,116,101,32,116,104, -- 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, -- 32,32,32,84,104,101,32,110,97,109,101,115,112,97,99,101, -- 32,111,102,32,96,109,111,100,117,108,101,96,32,105,115,32, -- 117,115,101,100,32,97,115,32,116,104,101,32,116,97,114,103, -- 101,116,32,111,102,32,101,120,101,99,117,116,105,111,110,46, -- 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, -- 116,104,111,100,32,117,115,101,115,32,116,104,101,32,108,111, -- 97,100,101,114,39,115,32,96,101,120,101,99,95,109,111,100, -- 117,108,101,40,41,96,32,109,101,116,104,111,100,46,10,10, -- 32,32,32,32,32,32,32,32,78,41,3,114,177,0,0,0, -- 114,169,0,0,0,218,11,101,120,101,99,95,109,111,100,117, -- 108,101,41,2,114,71,0,0,0,114,179,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, -- 101,120,101,99,98,4,0,0,115,2,0,0,0,0,7,122, -- 18,95,83,112,101,99,77,101,116,104,111,100,115,46,95,101, -- 120,101,99,99,2,0,0,0,0,0,0,0,4,0,0,0, -- 11,0,0,0,67,0,0,0,115,17,1,0,0,124,0,0, -- 106,0,0,106,1,0,125,2,0,116,2,0,106,3,0,131, -- 0,0,1,116,4,0,124,2,0,131,1,0,143,226,0,1, -- 116,5,0,106,6,0,106,7,0,124,2,0,131,1,0,124, -- 1,0,107,9,0,114,95,0,100,1,0,106,8,0,124,2, -- 0,131,1,0,125,3,0,116,9,0,124,3,0,100,2,0, -- 124,2,0,131,1,1,130,1,0,110,0,0,124,0,0,106, -- 0,0,106,10,0,100,3,0,107,8,0,114,181,0,124,0, -- 0,106,0,0,106,11,0,100,3,0,107,8,0,114,158,0, -- 116,9,0,100,4,0,100,2,0,124,0,0,106,0,0,106, -- 1,0,131,1,1,130,1,0,110,0,0,124,0,0,106,12, -- 0,124,1,0,100,5,0,100,6,0,131,1,1,1,124,1, -- 0,83,124,0,0,106,12,0,124,1,0,100,5,0,100,6, -- 0,131,1,1,1,116,13,0,124,0,0,106,0,0,106,10, -- 0,100,7,0,131,2,0,115,243,0,124,0,0,106,0,0, -- 106,10,0,106,14,0,124,2,0,131,1,0,1,110,13,0, -- 124,0,0,106,15,0,124,1,0,131,1,0,1,87,100,3, -- 0,81,88,116,5,0,106,6,0,124,2,0,25,83,41,8, -- 122,51,69,120,101,99,117,116,101,32,116,104,101,32,115,112, -- 101,99,32,105,110,32,97,110,32,101,120,105,115,116,105,110, -- 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115, -- 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33, -- 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111, -- 100,117,108,101,115,114,67,0,0,0,78,122,14,109,105,115, -- 115,105,110,103,32,108,111,97,100,101,114,114,248,0,0,0, -- 84,114,1,1,0,0,41,16,114,177,0,0,0,114,67,0, -- 0,0,114,106,0,0,0,218,12,97,99,113,117,105,114,101, -- 95,108,111,99,107,114,103,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,114,93,0,0,0,114,47,0,0,0,114,153, -- 0,0,0,114,169,0,0,0,114,220,0,0,0,114,254,0, -- 0,0,114,60,0,0,0,218,11,108,111,97,100,95,109,111, -- 100,117,108,101,114,2,1,0,0,41,4,114,71,0,0,0, -- 114,179,0,0,0,114,67,0,0,0,114,171,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,175, -- 0,0,0,108,4,0,0,115,32,0,0,0,0,2,12,1, -- 10,1,13,1,24,1,15,1,21,1,18,1,18,1,27,2, -- 19,1,4,1,19,1,21,4,22,2,19,1,122,17,95,83, -- 112,101,99,77,101,116,104,111,100,115,46,101,120,101,99,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,27,0,0,0, -- 67,0,0,0,115,24,1,0,0,124,0,0,106,0,0,125, -- 1,0,124,1,0,106,1,0,106,2,0,124,1,0,106,3, -- 0,131,1,0,1,116,4,0,106,5,0,124,1,0,106,3, -- 0,25,125,2,0,116,6,0,124,2,0,100,1,0,100,0, -- 0,131,3,0,100,0,0,107,8,0,114,108,0,121,16,0, -- 124,1,0,106,1,0,124,2,0,95,7,0,87,113,108,0, -- 4,116,8,0,107,10,0,114,104,0,1,1,1,89,113,108, -- 0,88,110,0,0,116,6,0,124,2,0,100,2,0,100,0, -- 0,131,3,0,100,0,0,107,8,0,114,215,0,121,59,0, -- 124,2,0,106,9,0,124,2,0,95,10,0,116,11,0,124, -- 2,0,100,3,0,131,2,0,115,190,0,124,1,0,106,3, -- 0,106,12,0,100,4,0,131,1,0,100,5,0,25,124,2, -- 0,95,10,0,110,0,0,87,113,215,0,4,116,8,0,107, -- 10,0,114,211,0,1,1,1,89,113,215,0,88,110,0,0, -- 116,6,0,124,2,0,100,6,0,100,0,0,131,3,0,100, -- 0,0,107,8,0,114,20,1,121,13,0,124,1,0,124,2, -- 0,95,13,0,87,113,20,1,4,116,8,0,107,10,0,114, -- 16,1,1,1,1,89,113,20,1,88,110,0,0,124,2,0, -- 83,41,7,78,114,204,0,0,0,114,250,0,0,0,114,246, -- 0,0,0,114,116,0,0,0,114,84,0,0,0,114,208,0, -- 0,0,41,14,114,177,0,0,0,114,169,0,0,0,114,4, -- 1,0,0,114,67,0,0,0,114,7,0,0,0,114,73,0, -- 0,0,114,62,0,0,0,114,204,0,0,0,114,209,0,0, -- 0,114,57,0,0,0,114,250,0,0,0,114,60,0,0,0, -- 114,32,0,0,0,114,208,0,0,0,41,3,114,71,0,0, -- 0,114,177,0,0,0,114,179,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,25,95,108,111,97, -- 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, -- 116,105,98,108,101,132,4,0,0,115,42,0,0,0,0,4, -- 9,1,19,2,16,1,24,1,3,1,16,1,13,1,8,1, -- 24,1,3,4,12,1,15,1,32,1,13,1,8,1,24,1, -- 3,1,13,1,13,1,8,1,122,38,95,83,112,101,99,77, -- 101,116,104,111,100,115,46,95,108,111,97,100,95,98,97,99, -- 107,119,97,114,100,95,99,111,109,112,97,116,105,98,108,101, -+ 120,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, -+ 103,101,110,101,120,112,114,62,122,18,105,109,112,111,114,116, -+ 32,123,33,114,125,32,35,32,123,33,114,125,70,41,9,114, -+ 215,0,0,0,114,79,0,0,0,114,8,0,0,0,114,74, -+ 0,0,0,114,68,0,0,0,114,80,0,0,0,114,153,0, -+ 0,0,114,170,0,0,0,114,216,0,0,0,41,3,114,72, -+ 0,0,0,114,81,0,0,0,114,178,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,82,0,0, -+ 0,227,2,0,0,115,18,0,0,0,0,1,3,1,9,1, -+ 25,1,3,1,17,1,13,1,8,2,26,2,122,26,95,105, -+ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, -+ 95,95,101,120,105,116,95,95,78,41,6,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,73,0,0,0,114, -+ 76,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,213,0, -+ 0,0,214,2,0,0,115,6,0,0,0,12,2,12,4,12, -+ 7,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, -+ 0,0,0,8,0,0,0,64,0,0,0,115,172,0,0,0, -+ 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -+ 3,0,100,2,0,100,3,0,100,4,0,100,3,0,100,5, -+ 0,100,3,0,100,6,0,100,7,0,132,0,3,90,4,0, -+ 100,8,0,100,9,0,132,0,0,90,5,0,100,10,0,100, -+ 11,0,132,0,0,90,6,0,101,7,0,100,12,0,100,13, -+ 0,132,0,0,131,1,0,90,8,0,101,8,0,106,9,0, -+ 100,14,0,100,13,0,132,0,0,131,1,0,90,8,0,101, -+ 7,0,100,15,0,100,16,0,132,0,0,131,1,0,90,10, -+ 0,101,7,0,100,17,0,100,18,0,132,0,0,131,1,0, -+ 90,11,0,101,11,0,106,9,0,100,19,0,100,18,0,132, -+ 0,0,131,1,0,90,11,0,100,3,0,83,41,20,218,10, -+ 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, -+ 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, -+ 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, -+ 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, -+ 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, -+ 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, -+ 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, -+ 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, -+ 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, -+ 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, -+ 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, -+ 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, -+ 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, -+ 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, -+ 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, -+ 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, -+ 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, -+ 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, -+ 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, -+ 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, -+ 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, -+ 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, -+ 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, -+ 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, -+ 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, -+ 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, -+ 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, -+ 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, -+ 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, -+ 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, -+ 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, -+ 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, -+ 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, -+ 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, -+ 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, -+ 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, -+ 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, -+ 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, -+ 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, -+ 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, -+ 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, -+ 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, -+ 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, -+ 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, -+ 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, -+ 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, -+ 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, -+ 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, -+ 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, -+ 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, -+ 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, -+ 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, -+ 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, -+ 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, -+ 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, -+ 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, -+ 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, -+ 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, -+ 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, -+ 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, -+ 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, -+ 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, -+ 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, -+ 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, -+ 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, -+ 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, -+ 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, -+ 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, -+ 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, -+ 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, -+ 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, -+ 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, -+ 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, -+ 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, -+ 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, -+ 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, -+ 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, -+ 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, -+ 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, -+ 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, -+ 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, -+ 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, -+ 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, -+ 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, -+ 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, -+ 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, -+ 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, -+ 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, -+ 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, -+ 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, -+ 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, -+ 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, -+ 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, -+ 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,218, -+ 6,111,114,105,103,105,110,78,218,12,108,111,97,100,101,114, -+ 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, -+ 103,101,99,3,0,0,0,3,0,0,0,6,0,0,0,2, -+ 0,0,0,67,0,0,0,115,79,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,124,3, -+ 0,124,0,0,95,2,0,124,4,0,124,0,0,95,3,0, -+ 124,5,0,114,48,0,103,0,0,110,3,0,100,0,0,124, -+ 0,0,95,4,0,100,1,0,124,0,0,95,5,0,100,0, -+ 0,124,0,0,95,6,0,100,0,0,83,41,2,78,70,41, -+ 7,114,68,0,0,0,114,170,0,0,0,114,218,0,0,0, -+ 114,219,0,0,0,218,26,115,117,98,109,111,100,117,108,101, +- 0,218,11,108,111,97,100,95,109,111,100,117,108,101,152,2, +- 0,0,115,2,0,0,0,0,1,122,25,95,76,111,97,100, +- 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, +- 100,117,108,101,78,41,8,114,112,0,0,0,114,111,0,0, +- 0,114,113,0,0,0,114,114,0,0,0,114,159,0,0,0, +- 114,186,0,0,0,114,191,0,0,0,114,193,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,184,0,0,0,128,2,0,0,115,10,0,0, +- 0,12,3,6,2,12,8,12,3,12,8,114,184,0,0,0, +- 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, +- 0,64,0,0,0,115,106,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, +- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, +- 0,100,6,0,132,0,0,90,5,0,100,7,0,100,8,0, +- 132,0,0,90,6,0,100,9,0,100,10,0,132,0,0,90, +- 7,0,100,11,0,100,18,0,100,13,0,100,14,0,132,0, +- 1,90,8,0,100,15,0,100,16,0,132,0,0,90,9,0, +- 100,17,0,83,41,19,218,12,83,111,117,114,99,101,76,111, +- 97,100,101,114,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,115,10,0,0,0,116,0, +- 0,130,1,0,100,1,0,83,41,2,122,178,79,112,116,105, +- 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, +- 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, +- 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, +- 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, +- 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, +- 100,32,112,97,116,104,44,32,119,104,101,114,101,32,112,97, +- 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, +- 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,69, +- 114,114,111,114,32,119,104,101,110,32,116,104,101,32,112,97, +- 116,104,32,99,97,110,110,111,116,32,98,101,32,104,97,110, +- 100,108,101,100,46,10,32,32,32,32,32,32,32,32,78,41, +- 1,218,7,73,79,69,114,114,111,114,41,2,114,108,0,0, +- 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, +- 101,158,2,0,0,115,2,0,0,0,0,6,122,23,83,111, +- 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, +- 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, +- 0,0,3,0,0,0,67,0,0,0,115,19,0,0,0,100, +- 1,0,124,0,0,106,0,0,124,1,0,131,1,0,105,1, +- 0,83,41,2,97,170,1,0,0,79,112,116,105,111,110,97, +- 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, +- 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, +- 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, +- 102,105,101,100,32,112,97,116,104,10,32,32,32,32,32,32, +- 32,32,116,111,32,98,121,32,116,104,101,32,112,97,116,104, +- 32,40,115,116,114,41,46,10,32,32,32,32,32,32,32,32, +- 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, +- 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, +- 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, +- 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, +- 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, +- 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, +- 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, +- 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, +- 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, +- 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, +- 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, +- 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, +- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, +- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, +- 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, +- 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, +- 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, ++ 67,0,0,0,115,76,0,0,0,116,0,0,116,1,0,131, ++ 1,0,125,3,0,124,3,0,106,2,0,116,3,0,124,1, ++ 0,131,1,0,131,1,0,1,124,3,0,106,2,0,116,3, ++ 0,124,2,0,131,1,0,131,1,0,1,124,3,0,106,2, ++ 0,116,4,0,106,5,0,124,0,0,131,1,0,131,1,0, ++ 1,124,3,0,83,41,1,122,80,67,111,109,112,105,108,101, ++ 32,97,32,99,111,100,101,32,111,98,106,101,99,116,32,105, ++ 110,116,111,32,98,121,116,101,99,111,100,101,32,102,111,114, ++ 32,119,114,105,116,105,110,103,32,111,117,116,32,116,111,32, ++ 97,32,98,121,116,101,45,99,111,109,112,105,108,101,100,10, ++ 32,32,32,32,102,105,108,101,46,41,6,218,9,98,121,116, ++ 101,97,114,114,97,121,114,136,0,0,0,218,6,101,120,116, ++ 101,110,100,114,18,0,0,0,114,143,0,0,0,90,5,100, ++ 117,109,112,115,41,4,114,147,0,0,0,114,134,0,0,0, ++ 114,141,0,0,0,114,54,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,99,111,100,101, ++ 95,116,111,95,98,121,116,101,99,111,100,101,227,1,0,0, ++ 115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,114, ++ 151,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0, ++ 0,4,0,0,0,67,0,0,0,115,89,0,0,0,100,1, ++ 0,100,2,0,108,0,0,125,1,0,116,1,0,106,2,0, ++ 124,0,0,131,1,0,106,3,0,125,2,0,124,1,0,106, ++ 4,0,124,2,0,131,1,0,125,3,0,116,1,0,106,5, ++ 0,100,2,0,100,3,0,131,2,0,125,4,0,124,4,0, ++ 106,6,0,124,0,0,106,6,0,124,3,0,100,1,0,25, ++ 131,1,0,131,1,0,83,41,4,122,121,68,101,99,111,100, ++ 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, ++ 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, ++ 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, ++ 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, ++ 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, ++ 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, ++ 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, ++ 32,32,32,32,114,60,0,0,0,78,84,41,7,218,8,116, ++ 111,107,101,110,105,122,101,114,50,0,0,0,90,7,66,121, ++ 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, ++ 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, ++ 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, ++ 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, ++ 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, ++ 116,101,115,114,152,0,0,0,90,21,115,111,117,114,99,101, ++ 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, ++ 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, ++ 110,101,95,100,101,99,111,100,101,114,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,13,100,101,99,111,100, ++ 101,95,115,111,117,114,99,101,237,1,0,0,115,10,0,0, ++ 0,0,5,12,1,18,1,15,1,18,1,114,156,0,0,0, ++ 114,128,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, -+ 115,218,13,95,115,101,116,95,102,105,108,101,97,116,116,114, -+ 218,7,95,99,97,99,104,101,100,41,6,114,72,0,0,0, -+ 114,68,0,0,0,114,170,0,0,0,114,218,0,0,0,114, -+ 219,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,22,3,0, -+ 0,115,14,0,0,0,0,2,9,1,9,1,9,1,9,1, -+ 21,3,9,1,122,19,77,111,100,117,108,101,83,112,101,99, -+ 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, -+ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,153, -+ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, -+ 1,0,100,2,0,106,0,0,124,0,0,106,2,0,131,1, -+ 0,103,2,0,125,1,0,124,0,0,106,3,0,100,0,0, -+ 107,9,0,114,79,0,124,1,0,106,4,0,100,3,0,106, -+ 0,0,124,0,0,106,3,0,131,1,0,131,1,0,1,110, -+ 0,0,124,0,0,106,5,0,100,0,0,107,9,0,114,122, -+ 0,124,1,0,106,4,0,100,4,0,106,0,0,124,0,0, -+ 106,5,0,131,1,0,131,1,0,1,110,0,0,100,5,0, -+ 106,0,0,124,0,0,106,6,0,106,7,0,100,6,0,106, -+ 8,0,124,1,0,131,1,0,131,2,0,83,41,7,78,122, -+ 9,110,97,109,101,61,123,33,114,125,122,11,108,111,97,100, -+ 101,114,61,123,33,114,125,122,11,111,114,105,103,105,110,61, -+ 123,33,114,125,122,29,115,117,98,109,111,100,117,108,101,95, -+ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, -+ 61,123,125,122,6,123,125,40,123,125,41,122,2,44,32,41, -+ 9,114,48,0,0,0,114,68,0,0,0,114,170,0,0,0, -+ 114,218,0,0,0,218,6,97,112,112,101,110,100,114,221,0, -+ 0,0,218,9,95,95,99,108,97,115,115,95,95,114,58,0, -+ 0,0,114,27,0,0,0,41,2,114,72,0,0,0,114,81, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,102,0,0,0,34,3,0,0,115,16,0,0,0, -+ 0,1,15,1,21,1,15,1,28,1,15,1,6,1,22,1, -+ 122,19,77,111,100,117,108,101,83,112,101,99,46,95,95,114, -+ 101,112,114,95,95,99,2,0,0,0,0,0,0,0,3,0, -+ 0,0,11,0,0,0,67,0,0,0,115,145,0,0,0,124, -+ 0,0,106,0,0,125,2,0,121,107,0,124,0,0,106,1, -+ 0,124,1,0,106,1,0,107,2,0,111,114,0,124,0,0, -+ 106,2,0,124,1,0,106,2,0,107,2,0,111,114,0,124, -+ 0,0,106,3,0,124,1,0,106,3,0,107,2,0,111,114, -+ 0,124,2,0,124,1,0,106,0,0,107,2,0,111,114,0, -+ 124,0,0,106,4,0,124,1,0,106,4,0,107,2,0,111, -+ 114,0,124,0,0,106,5,0,124,1,0,106,5,0,107,2, -+ 0,83,87,110,22,0,4,116,6,0,107,10,0,114,140,0, -+ 1,1,1,100,1,0,83,89,110,1,0,88,100,0,0,83, -+ 41,2,78,70,41,7,114,221,0,0,0,114,68,0,0,0, -+ 114,170,0,0,0,114,218,0,0,0,218,6,99,97,99,104, -+ 101,100,218,12,104,97,115,95,108,111,99,97,116,105,111,110, -+ 114,210,0,0,0,41,3,114,72,0,0,0,218,5,111,116, -+ 104,101,114,218,4,115,109,115,108,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,6,95,95,101,113,95,95, -+ 44,3,0,0,115,20,0,0,0,0,1,9,1,3,1,18, -+ 1,18,1,18,1,15,1,18,1,20,1,13,1,122,17,77, -+ 111,100,117,108,101,83,112,101,99,46,95,95,101,113,95,95, - 99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,0, -- 0,67,0,0,0,115,179,0,0,0,124,0,0,106,0,0, -- 106,1,0,100,0,0,107,9,0,114,52,0,116,2,0,124, -- 0,0,106,0,0,106,1,0,100,1,0,131,2,0,115,52, -- 0,124,0,0,106,3,0,131,0,0,83,110,0,0,124,0, -- 0,106,4,0,131,0,0,125,1,0,116,5,0,124,1,0, -- 131,1,0,143,84,0,1,124,0,0,106,0,0,106,1,0, -- 100,0,0,107,8,0,114,143,0,124,0,0,106,0,0,106, -- 6,0,100,0,0,107,8,0,114,156,0,116,7,0,100,2, -- 0,100,3,0,124,0,0,106,0,0,106,8,0,131,1,1, -- 130,1,0,113,156,0,110,13,0,124,0,0,106,9,0,124, -- 1,0,131,1,0,1,87,100,0,0,81,88,116,10,0,106, -- 11,0,124,0,0,106,0,0,106,8,0,25,83,41,4,78, -- 114,1,1,0,0,122,14,109,105,115,115,105,110,103,32,108, -- 111,97,100,101,114,114,67,0,0,0,41,12,114,177,0,0, -- 0,114,169,0,0,0,114,60,0,0,0,114,5,1,0,0, -- 114,0,1,0,0,114,212,0,0,0,114,220,0,0,0,114, -- 153,0,0,0,114,67,0,0,0,114,2,1,0,0,114,7, -- 0,0,0,114,73,0,0,0,41,2,114,71,0,0,0,114, -- 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,99, -- 107,101,100,162,4,0,0,115,20,0,0,0,0,2,18,2, -- 21,1,13,2,12,1,13,1,18,1,18,1,30,3,19,5, -- 122,27,95,83,112,101,99,77,101,116,104,111,100,115,46,95, -- 108,111,97,100,95,117,110,108,111,99,107,101,100,99,1,0, -- 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, -- 0,0,115,49,0,0,0,116,0,0,106,1,0,131,0,0, -- 1,116,2,0,124,0,0,106,3,0,106,4,0,131,1,0, -- 143,15,0,1,124,0,0,106,5,0,131,0,0,83,87,100, -- 1,0,81,88,100,1,0,83,41,2,122,207,82,101,116,117, -- 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, -- 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, -- 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, -- 100,101,114,46,10,10,32,32,32,32,32,32,32,32,84,104, -- 101,32,109,111,100,117,108,101,32,105,115,32,110,111,116,32, -- 97,100,100,101,100,32,116,111,32,105,116,115,32,112,97,114, -- 101,110,116,46,10,10,32,32,32,32,32,32,32,32,73,102, -- 32,97,32,109,111,100,117,108,101,32,105,115,32,97,108,114, -- 101,97,100,121,32,105,110,32,115,121,115,46,109,111,100,117, -- 108,101,115,44,32,116,104,97,116,32,101,120,105,115,116,105, -- 110,103,32,109,111,100,117,108,101,32,103,101,116,115,10,32, -- 32,32,32,32,32,32,32,99,108,111,98,98,101,114,101,100, -- 46,10,10,32,32,32,32,32,32,32,32,78,41,6,114,106, -- 0,0,0,114,3,1,0,0,114,103,0,0,0,114,177,0, -- 0,0,114,67,0,0,0,114,6,1,0,0,41,1,114,71, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,176,0,0,0,185,4,0,0,115,6,0,0,0, -- 0,9,10,1,19,1,122,17,95,83,112,101,99,77,101,116, -- 104,111,100,115,46,108,111,97,100,78,41,13,114,57,0,0, -- 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, -- 114,72,0,0,0,114,205,0,0,0,114,254,0,0,0,114, -- 0,1,0,0,114,2,1,0,0,114,175,0,0,0,114,5, -- 1,0,0,114,6,1,0,0,114,176,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,174,0,0,0,225,3,0,0,115,20,0,0,0,12, -- 3,6,4,12,3,12,16,24,80,12,23,12,10,12,24,12, -- 30,12,23,114,174,0,0,0,99,4,0,0,0,0,0,0, -- 0,6,0,0,0,11,0,0,0,67,0,0,0,115,201,0, -- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,4, -- 0,124,0,0,106,0,0,100,2,0,131,1,0,125,5,0, -- 124,4,0,115,102,0,124,5,0,114,54,0,124,5,0,106, -- 1,0,125,4,0,113,102,0,124,2,0,124,3,0,107,2, -- 0,114,84,0,116,2,0,124,1,0,124,2,0,131,2,0, -- 125,4,0,113,102,0,116,3,0,124,1,0,124,2,0,131, -- 2,0,125,4,0,110,0,0,124,5,0,115,132,0,116,4, -- 0,124,1,0,124,2,0,100,3,0,124,4,0,131,2,1, -- 125,5,0,110,0,0,121,44,0,124,5,0,124,0,0,100, -- 2,0,60,124,4,0,124,0,0,100,1,0,60,124,2,0, -- 124,0,0,100,4,0,60,124,3,0,124,0,0,100,5,0, -- 60,87,110,18,0,4,116,5,0,107,10,0,114,196,0,1, -- 1,1,89,110,1,0,88,100,0,0,83,41,6,78,114,204, -- 0,0,0,114,208,0,0,0,114,169,0,0,0,114,210,0, -- 0,0,114,244,0,0,0,41,6,114,93,0,0,0,114,169, -- 0,0,0,218,20,83,111,117,114,99,101,108,101,115,115,70, -- 105,108,101,76,111,97,100,101,114,218,16,83,111,117,114,99, -- 101,70,105,108,101,76,111,97,100,101,114,114,239,0,0,0, -- 114,207,0,0,0,41,6,90,2,110,115,114,67,0,0,0, -- 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, -- 104,110,97,109,101,114,169,0,0,0,114,177,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,14, -- 95,102,105,120,95,117,112,95,109,111,100,117,108,101,199,4, -- 0,0,115,34,0,0,0,0,2,15,1,15,1,6,1,6, -- 1,12,1,12,1,18,2,18,1,6,1,24,1,3,1,10, -- 1,10,1,10,1,14,1,13,2,114,9,1,0,0,99,0, -- 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64, -- 0,0,0,115,181,0,0,0,101,0,0,90,1,0,100,0, -- 0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0, -- 100,3,0,132,0,0,131,1,0,90,5,0,101,6,0,100, -- 4,0,100,4,0,100,5,0,100,6,0,132,2,0,131,1, -- 0,90,7,0,101,6,0,100,4,0,100,7,0,100,8,0, -- 132,1,0,131,1,0,90,8,0,101,6,0,101,9,0,100, -- 9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,10, -- 0,101,6,0,101,9,0,100,11,0,100,12,0,132,0,0, -- 131,1,0,131,1,0,90,11,0,101,6,0,101,9,0,100, -- 13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,12, -- 0,101,6,0,101,9,0,100,15,0,100,16,0,132,0,0, -- 131,1,0,131,1,0,90,13,0,100,4,0,83,41,17,218, -- 15,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 122,144,77,101,116,97,32,112,97,116,104,32,105,109,112,111, -- 114,116,32,102,111,114,32,98,117,105,108,116,45,105,110,32, -- 109,111,100,117,108,101,115,46,10,10,32,32,32,32,65,108, -- 108,32,109,101,116,104,111,100,115,32,97,114,101,32,101,105, -- 116,104,101,114,32,99,108,97,115,115,32,111,114,32,115,116, -- 97,116,105,99,32,109,101,116,104,111,100,115,32,116,111,32, -- 97,118,111,105,100,32,116,104,101,32,110,101,101,100,32,116, -- 111,10,32,32,32,32,105,110,115,116,97,110,116,105,97,116, -- 101,32,116,104,101,32,99,108,97,115,115,46,10,10,32,32, -- 32,32,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, -- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,122,115, -- 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, -- 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, -- 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, -- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -- 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, -- 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, -- 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, -- 32,32,32,122,24,60,109,111,100,117,108,101,32,123,33,114, -- 125,32,40,98,117,105,108,116,45,105,110,41,62,41,2,114, -- 47,0,0,0,114,57,0,0,0,41,1,114,179,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 205,0,0,0,233,4,0,0,115,2,0,0,0,0,7,122, -- 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0, -- 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, -- 0,0,115,58,0,0,0,124,2,0,100,0,0,107,9,0, -- 114,16,0,100,0,0,83,116,0,0,106,1,0,124,1,0, -- 131,1,0,114,50,0,116,2,0,124,1,0,124,0,0,100, -- 1,0,100,2,0,131,2,1,83,100,0,0,83,100,0,0, -- 83,41,3,78,114,217,0,0,0,122,8,98,117,105,108,116, -- 45,105,110,41,3,114,106,0,0,0,90,10,105,115,95,98, -- 117,105,108,116,105,110,114,173,0,0,0,41,4,218,3,99, -- 108,115,114,158,0,0,0,114,35,0,0,0,218,6,116,97, -- 114,103,101,116,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,242,4, -- 0,0,115,10,0,0,0,0,2,12,1,4,1,15,1,19, -- 2,122,25,66,117,105,108,116,105,110,73,109,112,111,114,116, -- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, -- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, -- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, -- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,9, -- 0,114,37,0,124,3,0,106,1,0,83,100,1,0,83,41, -- 2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, -- 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, -- 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, -- 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, -- 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, -- 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, -- 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, -- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -- 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, -- 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -- 32,32,78,41,2,114,13,1,0,0,114,169,0,0,0,41, -- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108, -- 101,251,4,0,0,115,4,0,0,0,0,9,18,1,122,27, -- 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, -- 102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,3,0,0,0,10,0,0,0,67,0,0,0, -- 115,59,0,0,0,116,0,0,124,1,0,131,1,0,143,23, -- 0,1,116,1,0,116,2,0,106,3,0,124,1,0,131,2, -- 0,125,2,0,87,100,1,0,81,88,124,0,0,124,2,0, -- 95,4,0,100,2,0,124,2,0,95,5,0,124,2,0,83, -- 41,3,122,23,76,111,97,100,32,97,32,98,117,105,108,116, -- 45,105,110,32,109,111,100,117,108,101,46,78,114,30,0,0, -- 0,41,6,114,69,0,0,0,114,114,0,0,0,114,106,0, -- 0,0,90,12,105,110,105,116,95,98,117,105,108,116,105,110, -- 114,204,0,0,0,114,250,0,0,0,41,3,114,11,1,0, -- 0,114,158,0,0,0,114,179,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,7, -- 5,0,0,115,10,0,0,0,0,6,13,1,24,1,9,1, -- 9,1,122,27,66,117,105,108,116,105,110,73,109,112,111,114, -- 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, -+ 0,67,0,0,0,115,158,0,0,0,124,0,0,106,0,0, -+ 100,0,0,107,8,0,114,151,0,124,0,0,106,1,0,100, -+ 0,0,107,9,0,114,151,0,124,0,0,106,2,0,114,151, -+ 0,124,0,0,106,1,0,125,1,0,124,1,0,106,3,0, -+ 116,4,0,116,5,0,131,1,0,131,1,0,114,112,0,121, -+ 19,0,116,6,0,124,1,0,131,1,0,124,0,0,95,0, -+ 0,87,113,145,0,4,116,7,0,107,10,0,114,108,0,1, -+ 1,1,89,113,145,0,88,113,148,0,124,1,0,106,3,0, -+ 116,4,0,116,8,0,131,1,0,131,1,0,114,148,0,124, -+ 1,0,124,0,0,95,0,0,113,148,0,113,151,0,110,0, -+ 0,124,0,0,106,0,0,83,41,1,78,41,9,114,223,0, -+ 0,0,114,218,0,0,0,114,222,0,0,0,218,8,101,110, -+ 100,115,119,105,116,104,218,5,116,117,112,108,101,114,135,0, -+ 0,0,114,133,0,0,0,114,125,0,0,0,218,17,66,89, -+ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,41, -+ 2,114,72,0,0,0,114,132,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,226,0,0,0,56, -+ 3,0,0,115,22,0,0,0,0,2,15,1,24,1,9,1, -+ 21,1,3,1,19,1,13,1,8,1,21,1,18,1,122,17, -+ 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101, -+ 100,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,0, -+ 0,95,0,0,100,0,0,83,41,1,78,41,1,114,223,0, -+ 0,0,41,2,114,72,0,0,0,114,226,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,226,0, -+ 0,0,70,3,0,0,115,2,0,0,0,0,2,99,1,0, -+ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, -+ 0,0,115,46,0,0,0,124,0,0,106,0,0,100,1,0, -+ 107,8,0,114,35,0,124,0,0,106,1,0,106,2,0,100, -+ 2,0,131,1,0,100,3,0,25,83,124,0,0,106,1,0, -+ 83,100,1,0,83,41,4,122,32,84,104,101,32,110,97,109, -+ 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,39, -+ 115,32,112,97,114,101,110,116,46,78,114,117,0,0,0,114, -+ 85,0,0,0,41,3,114,221,0,0,0,114,68,0,0,0, -+ 114,33,0,0,0,41,1,114,72,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,6,112,97,114, -+ 101,110,116,74,3,0,0,115,6,0,0,0,0,3,15,1, -+ 20,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112, -+ 97,114,101,110,116,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, -+ 0,0,106,0,0,83,41,1,78,41,1,114,222,0,0,0, -+ 41,1,114,72,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,227,0,0,0,82,3,0,0,115, -+ 2,0,0,0,0,2,122,23,77,111,100,117,108,101,83,112, -+ 101,99,46,104,97,115,95,108,111,99,97,116,105,111,110,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,19,0,0,0,116,0,0,124,1,0,131, -+ 1,0,124,0,0,95,1,0,100,0,0,83,41,1,78,41, -+ 2,218,4,98,111,111,108,114,222,0,0,0,41,2,114,72, -+ 0,0,0,218,5,118,97,108,117,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,227,0,0,0,86,3, -+ 0,0,115,2,0,0,0,0,2,41,12,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, -+ 73,0,0,0,114,102,0,0,0,114,230,0,0,0,218,8, -+ 112,114,111,112,101,114,116,121,114,226,0,0,0,218,6,115, -+ 101,116,116,101,114,114,234,0,0,0,114,227,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,217,0,0,0,241,2,0,0,115,20,0,0, -+ 0,12,35,6,2,15,1,15,11,12,10,12,12,18,14,21, -+ 4,18,8,18,4,114,217,0,0,0,114,218,0,0,0,114, -+ 220,0,0,0,99,2,0,0,0,2,0,0,0,5,0,0, -+ 0,15,0,0,0,67,0,0,0,115,193,0,0,0,116,0, -+ 0,124,1,0,100,1,0,131,2,0,114,83,0,124,3,0, -+ 100,2,0,107,8,0,114,43,0,116,1,0,124,0,0,100, -+ 3,0,124,1,0,131,1,1,83,124,3,0,114,55,0,103, -+ 0,0,110,3,0,100,2,0,125,4,0,116,1,0,124,0, -+ 0,100,3,0,124,1,0,100,4,0,124,4,0,131,1,2, -+ 83,124,3,0,100,2,0,107,8,0,114,168,0,116,0,0, -+ 124,1,0,100,5,0,131,2,0,114,159,0,121,19,0,124, -+ 1,0,106,2,0,124,0,0,131,1,0,125,3,0,87,113, -+ 165,0,4,116,3,0,107,10,0,114,155,0,1,1,1,100, -+ 2,0,125,3,0,89,113,165,0,88,113,168,0,100,6,0, -+ 125,3,0,110,0,0,116,4,0,124,0,0,124,1,0,100, -+ 7,0,124,2,0,100,5,0,124,3,0,131,2,2,83,41, -+ 8,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, -+ 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, -+ 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, -+ 109,101,116,104,111,100,115,46,218,12,103,101,116,95,102,105, -+ 108,101,110,97,109,101,78,114,170,0,0,0,114,221,0,0, -+ 0,114,220,0,0,0,70,114,218,0,0,0,41,5,114,61, -+ 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, -+ 105,108,101,95,108,111,99,97,116,105,111,110,114,220,0,0, -+ 0,114,154,0,0,0,114,217,0,0,0,41,5,114,68,0, -+ 0,0,114,170,0,0,0,114,218,0,0,0,114,220,0,0, -+ 0,90,6,115,101,97,114,99,104,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,174,0,0,0,91,3,0, -+ 0,115,28,0,0,0,0,2,15,1,12,1,16,1,18,1, -+ 15,1,7,2,12,1,15,1,3,1,19,1,13,1,14,3, -+ 9,2,114,174,0,0,0,114,170,0,0,0,114,221,0,0, -+ 0,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, -+ 0,0,67,0,0,0,115,110,1,0,0,124,1,0,100,1, -+ 0,107,8,0,114,79,0,100,2,0,125,1,0,116,0,0, -+ 124,2,0,100,3,0,131,2,0,114,79,0,121,19,0,124, -+ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,113, -+ 76,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, -+ 113,76,0,88,113,79,0,110,0,0,116,3,0,124,0,0, -+ 124,2,0,100,4,0,124,1,0,131,2,1,125,4,0,100, -+ 5,0,124,4,0,95,4,0,124,2,0,100,1,0,107,8, -+ 0,114,203,0,120,79,0,116,5,0,131,0,0,68,93,61, -+ 0,92,2,0,125,5,0,125,6,0,124,1,0,106,6,0, -+ 116,7,0,124,6,0,131,1,0,131,1,0,114,131,0,124, -+ 5,0,124,0,0,124,1,0,131,2,0,125,2,0,124,2, -+ 0,124,4,0,95,8,0,80,113,131,0,113,131,0,87,100, -+ 1,0,83,110,0,0,124,3,0,116,9,0,107,8,0,114, -+ 38,1,116,0,0,124,2,0,100,6,0,131,2,0,114,47, -+ 1,121,19,0,124,2,0,106,10,0,124,0,0,131,1,0, -+ 125,7,0,87,110,18,0,4,116,2,0,107,10,0,114,13, -+ 1,1,1,1,89,113,35,1,88,124,7,0,114,35,1,103, -+ 0,0,124,4,0,95,11,0,113,35,1,113,47,1,110,9, -+ 0,124,3,0,124,4,0,95,11,0,124,4,0,106,11,0, -+ 103,0,0,107,2,0,114,106,1,124,1,0,114,106,1,116, -+ 12,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, -+ 4,0,106,11,0,106,13,0,124,8,0,131,1,0,1,113, -+ 106,1,110,0,0,124,4,0,83,41,8,97,61,1,0,0, -+ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, -+ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, -+ 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, -+ 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, -+ 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, -+ 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, -+ 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, -+ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, -+ 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, -+ 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, -+ 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, -+ 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, -+ 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, -+ 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, -+ 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, -+ 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, -+ 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, -+ 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, -+ 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, -+ 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, -+ 60,117,110,107,110,111,119,110,62,114,239,0,0,0,114,218, -+ 0,0,0,84,114,220,0,0,0,114,85,0,0,0,41,14, -+ 114,61,0,0,0,114,239,0,0,0,114,154,0,0,0,114, -+ 217,0,0,0,114,222,0,0,0,218,27,95,103,101,116,95, -+ 115,117,112,112,111,114,116,101,100,95,102,105,108,101,95,108, -+ 111,97,100,101,114,115,114,231,0,0,0,114,232,0,0,0, -+ 114,170,0,0,0,218,9,95,80,79,80,85,76,65,84,69, -+ 114,220,0,0,0,114,221,0,0,0,114,39,0,0,0,114, -+ 224,0,0,0,41,9,114,68,0,0,0,218,8,108,111,99, -+ 97,116,105,111,110,114,170,0,0,0,114,221,0,0,0,114, -+ 178,0,0,0,218,12,108,111,97,100,101,114,95,99,108,97, -+ 115,115,114,128,0,0,0,114,220,0,0,0,90,7,100,105, -+ 114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,240,0,0,0,116,3,0,0,115,60,0, -+ 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, -+ 11,8,21,1,9,3,12,1,22,1,21,1,15,1,9,1, -+ 8,2,7,3,12,2,15,1,3,1,19,1,13,1,5,2, -+ 6,1,18,2,9,1,15,1,6,1,16,1,22,2,114,240, -+ 0,0,0,99,3,0,0,0,0,0,0,0,8,0,0,0, -+ 53,0,0,0,67,0,0,0,115,124,1,0,0,121,13,0, -+ 124,0,0,106,0,0,125,3,0,87,110,18,0,4,116,1, -+ 0,107,10,0,114,33,0,1,1,1,89,110,17,0,88,124, -+ 3,0,100,0,0,107,9,0,114,50,0,124,3,0,83,124, -+ 0,0,106,2,0,125,4,0,124,1,0,100,0,0,107,8, -+ 0,114,108,0,121,13,0,124,0,0,106,3,0,125,1,0, -+ 87,113,108,0,4,116,1,0,107,10,0,114,104,0,1,1, -+ 1,89,113,108,0,88,110,0,0,121,13,0,124,0,0,106, -+ 4,0,125,5,0,87,110,24,0,4,116,1,0,107,10,0, -+ 114,147,0,1,1,1,100,0,0,125,5,0,89,110,1,0, -+ 88,124,2,0,100,0,0,107,8,0,114,224,0,124,5,0, -+ 100,0,0,107,8,0,114,215,0,121,13,0,124,1,0,106, -+ 5,0,125,2,0,87,113,221,0,4,116,1,0,107,10,0, -+ 114,211,0,1,1,1,100,0,0,125,2,0,89,113,221,0, -+ 88,113,224,0,124,5,0,125,2,0,110,0,0,121,13,0, -+ 124,0,0,106,6,0,125,6,0,87,110,24,0,4,116,1, -+ 0,107,10,0,114,7,1,1,1,1,100,0,0,125,6,0, -+ 89,110,1,0,88,121,19,0,116,7,0,124,0,0,106,8, -+ 0,131,1,0,125,7,0,87,110,24,0,4,116,1,0,107, -+ 10,0,114,53,1,1,1,1,100,0,0,125,7,0,89,110, -+ 1,0,88,116,9,0,124,4,0,124,1,0,100,1,0,124, -+ 2,0,131,2,1,125,3,0,124,5,0,100,0,0,107,8, -+ 0,114,93,1,100,2,0,110,3,0,100,3,0,124,3,0, -+ 95,10,0,124,6,0,124,3,0,95,11,0,124,7,0,124, -+ 3,0,95,12,0,124,3,0,83,41,4,78,114,218,0,0, -+ 0,70,84,41,13,114,209,0,0,0,114,210,0,0,0,114, -+ 58,0,0,0,114,205,0,0,0,114,211,0,0,0,90,7, -+ 95,79,82,73,71,73,78,218,10,95,95,99,97,99,104,101, -+ 100,95,95,218,4,108,105,115,116,218,8,95,95,112,97,116, -+ 104,95,95,114,217,0,0,0,114,222,0,0,0,114,226,0, -+ 0,0,114,221,0,0,0,41,8,114,180,0,0,0,114,170, -+ 0,0,0,114,218,0,0,0,114,178,0,0,0,114,68,0, -+ 0,0,114,243,0,0,0,114,226,0,0,0,114,221,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,17,95,115,112,101,99,95,102,114,111,109,95,109,111,100, -+ 117,108,101,180,3,0,0,115,72,0,0,0,0,2,3,1, -+ 13,1,13,1,5,2,12,1,4,2,9,1,12,1,3,1, -+ 13,1,13,2,8,1,3,1,13,1,13,1,11,1,12,1, -+ 12,1,3,1,13,1,13,1,14,2,9,1,3,1,13,1, -+ 13,1,11,1,3,1,19,1,13,1,11,2,21,1,27,1, -+ 9,1,9,1,114,248,0,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,6,0,0,0,64,0,0,0,115,142, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, -+ 0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0, -+ 100,7,0,100,8,0,100,9,0,100,10,0,100,11,0,132, -+ 0,2,90,6,0,100,12,0,100,13,0,132,0,0,90,7, -+ 0,100,14,0,100,15,0,132,0,0,90,8,0,100,16,0, -+ 100,17,0,132,0,0,90,9,0,100,18,0,100,19,0,132, -+ 0,0,90,10,0,100,20,0,100,21,0,132,0,0,90,11, -+ 0,100,22,0,100,23,0,132,0,0,90,12,0,100,24,0, -+ 83,41,25,114,175,0,0,0,122,77,67,111,110,118,101,110, -+ 105,101,110,99,101,32,119,114,97,112,112,101,114,32,97,114, -+ 111,117,110,100,32,115,112,101,99,32,111,98,106,101,99,116, -+ 115,32,116,111,32,112,114,111,118,105,100,101,32,115,112,101, -+ 99,45,115,112,101,99,105,102,105,99,10,32,32,32,32,109, -+ 101,116,104,111,100,115,46,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, -+ 0,124,1,0,124,0,0,95,0,0,100,0,0,83,41,1, -+ 78,41,1,114,178,0,0,0,41,2,114,72,0,0,0,114, -+ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,73,0,0,0,232,3,0,0,115,2,0,0, -+ 0,0,1,122,21,95,83,112,101,99,77,101,116,104,111,100, -+ 115,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, -+ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, -+ 158,0,0,0,124,0,0,106,0,0,125,1,0,124,1,0, -+ 106,1,0,100,1,0,107,8,0,114,30,0,100,2,0,110, -+ 6,0,124,1,0,106,1,0,125,2,0,124,1,0,106,2, -+ 0,100,1,0,107,8,0,114,104,0,124,1,0,106,3,0, -+ 100,1,0,107,8,0,114,82,0,100,3,0,106,4,0,124, -+ 2,0,131,1,0,83,100,4,0,106,4,0,124,2,0,124, -+ 1,0,106,3,0,131,2,0,83,110,50,0,124,1,0,106, -+ 5,0,114,132,0,100,5,0,106,4,0,124,2,0,124,1, -+ 0,106,2,0,131,2,0,83,100,6,0,106,4,0,124,1, -+ 0,106,1,0,124,1,0,106,2,0,131,2,0,83,100,1, -+ 0,83,41,7,122,38,82,101,116,117,114,110,32,116,104,101, -+ 32,114,101,112,114,32,116,111,32,117,115,101,32,102,111,114, -+ 32,116,104,101,32,109,111,100,117,108,101,46,78,114,207,0, -+ 0,0,122,13,60,109,111,100,117,108,101,32,123,33,114,125, -+ 62,122,20,60,109,111,100,117,108,101,32,123,33,114,125,32, -+ 40,123,33,114,125,41,62,122,23,60,109,111,100,117,108,101, -+ 32,123,33,114,125,32,102,114,111,109,32,123,33,114,125,62, -+ 122,18,60,109,111,100,117,108,101,32,123,33,114,125,32,40, -+ 123,125,41,62,41,6,114,178,0,0,0,114,68,0,0,0, -+ 114,218,0,0,0,114,170,0,0,0,114,48,0,0,0,114, -+ 227,0,0,0,41,3,114,72,0,0,0,114,178,0,0,0, -+ 114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,206,0,0,0,235,3,0,0,115,18,0, -+ 0,0,0,3,9,1,30,1,15,1,15,1,13,2,22,2, -+ 9,1,19,2,122,24,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,109,111,100,117,108,101,95,114,101,112,114,218,9, -+ 95,111,118,101,114,114,105,100,101,70,218,11,95,102,111,114, -+ 99,101,95,110,97,109,101,84,99,2,0,0,0,2,0,0, -+ 0,6,0,0,0,59,0,0,0,67,0,0,0,115,75,2, -+ 0,0,124,0,0,106,0,0,125,4,0,124,2,0,115,45, -+ 0,124,3,0,115,45,0,116,1,0,124,1,0,100,1,0, -+ 100,2,0,131,3,0,100,2,0,107,8,0,114,85,0,121, -+ 16,0,124,4,0,106,2,0,124,1,0,95,3,0,87,113, -+ 85,0,4,116,4,0,107,10,0,114,81,0,1,1,1,89, -+ 113,85,0,88,110,0,0,124,2,0,115,115,0,116,1,0, -+ 124,1,0,100,3,0,100,2,0,131,3,0,100,2,0,107, -+ 8,0,114,221,0,124,4,0,106,5,0,125,5,0,124,5, -+ 0,100,2,0,107,8,0,114,184,0,124,4,0,106,6,0, -+ 100,2,0,107,9,0,114,184,0,116,7,0,106,8,0,116, -+ 7,0,131,1,0,125,5,0,124,4,0,106,6,0,124,5, -+ 0,95,9,0,113,184,0,110,0,0,121,13,0,124,5,0, -+ 124,1,0,95,10,0,87,113,221,0,4,116,4,0,107,10, -+ 0,114,217,0,1,1,1,89,113,221,0,88,110,0,0,124, -+ 2,0,115,251,0,116,1,0,124,1,0,100,4,0,100,2, -+ 0,131,3,0,100,2,0,107,8,0,114,35,1,121,16,0, -+ 124,4,0,106,11,0,124,1,0,95,12,0,87,113,35,1, -+ 4,116,4,0,107,10,0,114,31,1,1,1,1,89,113,35, -+ 1,88,110,0,0,121,13,0,124,4,0,124,1,0,95,13, -+ 0,87,110,18,0,4,116,4,0,107,10,0,114,68,1,1, -+ 1,1,89,110,1,0,88,124,2,0,115,99,1,116,1,0, -+ 124,1,0,100,5,0,100,2,0,131,3,0,100,2,0,107, -+ 8,0,114,157,1,124,4,0,106,6,0,100,2,0,107,9, -+ 0,114,157,1,121,16,0,124,4,0,106,6,0,124,1,0, -+ 95,14,0,87,113,154,1,4,116,4,0,107,10,0,114,150, -+ 1,1,1,1,89,113,154,1,88,113,157,1,110,0,0,124, -+ 4,0,106,15,0,114,71,2,124,2,0,115,196,1,116,1, -+ 0,124,1,0,100,6,0,100,2,0,131,3,0,100,2,0, -+ 107,8,0,114,236,1,121,16,0,124,4,0,106,16,0,124, -+ 1,0,95,17,0,87,113,236,1,4,116,4,0,107,10,0, -+ 114,232,1,1,1,1,89,113,236,1,88,110,0,0,124,2, -+ 0,115,10,2,116,1,0,124,1,0,100,7,0,100,2,0, -+ 131,3,0,100,2,0,107,8,0,114,71,2,124,4,0,106, -+ 18,0,100,2,0,107,9,0,114,68,2,121,16,0,124,4, -+ 0,106,18,0,124,1,0,95,19,0,87,113,65,2,4,116, -+ 4,0,107,10,0,114,61,2,1,1,1,89,113,65,2,88, -+ 113,68,2,113,71,2,110,0,0,100,2,0,83,41,8,97, -+ 29,2,0,0,83,101,116,32,116,104,101,32,109,111,100,117, -+ 108,101,39,115,32,97,116,116,114,105,98,117,116,101,115,46, -+ 10,10,32,32,32,32,32,32,32,32,65,108,108,32,109,105, -+ 115,115,105,110,103,32,105,109,112,111,114,116,45,114,101,108, -+ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, -+ 105,98,117,116,101,115,32,119,105,108,108,32,98,101,32,115, -+ 101,116,46,32,32,72,101,114,101,10,32,32,32,32,32,32, -+ 32,32,105,115,32,104,111,119,32,116,104,101,32,115,112,101, -+ 99,32,97,116,116,114,105,98,117,116,101,115,32,109,97,112, -+ 32,111,110,116,111,32,116,104,101,32,109,111,100,117,108,101, -+ 58,10,10,32,32,32,32,32,32,32,32,115,112,101,99,46, -+ 110,97,109,101,32,45,62,32,109,111,100,117,108,101,46,95, -+ 95,110,97,109,101,95,95,10,32,32,32,32,32,32,32,32, -+ 115,112,101,99,46,108,111,97,100,101,114,32,45,62,32,109, -+ 111,100,117,108,101,46,95,95,108,111,97,100,101,114,95,95, -+ 10,32,32,32,32,32,32,32,32,115,112,101,99,46,112,97, -+ 114,101,110,116,32,45,62,32,109,111,100,117,108,101,46,95, -+ 95,112,97,99,107,97,103,101,95,95,10,32,32,32,32,32, -+ 32,32,32,115,112,101,99,32,45,62,32,109,111,100,117,108, -+ 101,46,95,95,115,112,101,99,95,95,10,10,32,32,32,32, -+ 32,32,32,32,79,112,116,105,111,110,97,108,58,10,32,32, -+ 32,32,32,32,32,32,115,112,101,99,46,111,114,105,103,105, -+ 110,32,45,62,32,109,111,100,117,108,101,46,95,95,102,105, -+ 108,101,95,95,32,40,105,102,32,115,112,101,99,46,115,101, -+ 116,95,102,105,108,101,97,116,116,114,32,105,115,32,116,114, -+ 117,101,41,10,32,32,32,32,32,32,32,32,115,112,101,99, -+ 46,99,97,99,104,101,100,32,45,62,32,109,111,100,117,108, -+ 101,46,95,95,99,97,99,104,101,100,95,95,32,40,105,102, -+ 32,95,95,102,105,108,101,95,95,32,97,108,115,111,32,115, -+ 101,116,41,10,32,32,32,32,32,32,32,32,115,112,101,99, -+ 46,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -+ 104,95,108,111,99,97,116,105,111,110,115,32,45,62,32,109, -+ 111,100,117,108,101,46,95,95,112,97,116,104,95,95,32,40, -+ 105,102,32,115,101,116,41,10,10,32,32,32,32,32,32,32, -+ 32,114,58,0,0,0,78,114,205,0,0,0,218,11,95,95, -+ 112,97,99,107,97,103,101,95,95,114,247,0,0,0,114,211, -+ 0,0,0,114,245,0,0,0,41,20,114,178,0,0,0,114, -+ 63,0,0,0,114,68,0,0,0,114,58,0,0,0,114,210, -+ 0,0,0,114,170,0,0,0,114,221,0,0,0,218,16,95, -+ 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,218, -+ 7,95,95,110,101,119,95,95,218,5,95,112,97,116,104,114, -+ 205,0,0,0,114,234,0,0,0,114,251,0,0,0,114,209, -+ 0,0,0,114,247,0,0,0,114,227,0,0,0,114,218,0, -+ 0,0,114,211,0,0,0,114,226,0,0,0,114,245,0,0, -+ 0,41,6,114,72,0,0,0,114,180,0,0,0,114,249,0, -+ 0,0,114,250,0,0,0,114,178,0,0,0,114,170,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,17,105,110,105,116,95,109,111,100,117,108,101,95,97,116, -+ 116,114,115,251,3,0,0,115,88,0,0,0,0,17,9,6, -+ 12,1,24,1,3,1,16,1,13,1,8,3,30,1,9,1, -+ 12,2,15,1,15,1,18,1,3,1,13,1,13,1,8,3, -+ 30,1,3,1,16,1,13,1,8,3,3,1,13,1,13,1, -+ 5,3,30,1,15,1,3,1,16,1,13,1,11,2,9,2, -+ 30,1,3,1,16,1,13,1,8,3,30,1,15,1,3,1, -+ 16,1,13,1,122,30,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,105,110,105,116,95,109,111,100,117,108,101,95,97, -+ 116,116,114,115,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,3,0,0,0,67,0,0,0,115,101,0,0,0,124,0, -+ 0,106,0,0,125,1,0,116,1,0,124,1,0,106,2,0, -+ 100,1,0,131,2,0,114,48,0,124,1,0,106,2,0,106, -+ 3,0,124,1,0,131,1,0,125,2,0,110,6,0,100,2, -+ 0,125,2,0,124,2,0,100,2,0,107,8,0,114,84,0, -+ 116,4,0,124,1,0,106,5,0,131,1,0,125,2,0,110, -+ 0,0,124,0,0,106,6,0,124,2,0,131,1,0,1,124, -+ 2,0,83,41,3,122,153,82,101,116,117,114,110,32,97,32, -+ 110,101,119,32,109,111,100,117,108,101,32,116,111,32,98,101, -+ 32,108,111,97,100,101,100,46,10,10,32,32,32,32,32,32, -+ 32,32,84,104,101,32,105,109,112,111,114,116,45,114,101,108, -+ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, -+ 105,98,117,116,101,115,32,97,114,101,32,97,108,115,111,32, -+ 115,101,116,32,119,105,116,104,32,116,104,101,10,32,32,32, -+ 32,32,32,32,32,97,112,112,114,111,112,114,105,97,116,101, -+ 32,118,97,108,117,101,115,32,102,114,111,109,32,116,104,101, -+ 32,115,112,101,99,46,10,10,32,32,32,32,32,32,32,32, -+ 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,78, -+ 41,7,114,178,0,0,0,114,61,0,0,0,114,170,0,0, -+ 0,114,0,1,0,0,114,69,0,0,0,114,68,0,0,0, -+ 114,255,0,0,0,41,3,114,72,0,0,0,114,178,0,0, -+ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,6,99,114,101,97,116,101,75,4,0, -+ 0,115,16,0,0,0,0,7,9,2,18,3,21,2,6,1, -+ 12,4,18,1,13,1,122,19,95,83,112,101,99,77,101,116, -+ 104,111,100,115,46,99,114,101,97,116,101,99,2,0,0,0, -+ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -+ 115,23,0,0,0,124,0,0,106,0,0,106,1,0,106,2, -+ 0,124,1,0,131,1,0,1,100,1,0,83,41,2,122,189, -+ 68,111,32,101,118,101,114,121,116,104,105,110,103,32,110,101, -+ 99,101,115,115,97,114,121,32,116,111,32,101,120,101,99,117, -+ 116,101,32,116,104,101,32,109,111,100,117,108,101,46,10,10, -+ 32,32,32,32,32,32,32,32,84,104,101,32,110,97,109,101, -+ 115,112,97,99,101,32,111,102,32,96,109,111,100,117,108,101, -+ 96,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101, -+ 32,116,97,114,103,101,116,32,111,102,32,101,120,101,99,117, -+ 116,105,111,110,46,10,32,32,32,32,32,32,32,32,84,104, -+ 105,115,32,109,101,116,104,111,100,32,117,115,101,115,32,116, -+ 104,101,32,108,111,97,100,101,114,39,115,32,96,101,120,101, -+ 99,95,109,111,100,117,108,101,40,41,96,32,109,101,116,104, -+ 111,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, -+ 114,178,0,0,0,114,170,0,0,0,218,11,101,120,101,99, -+ 95,109,111,100,117,108,101,41,2,114,72,0,0,0,114,180, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,5,95,101,120,101,99,98,4,0,0,115,2,0, -+ 0,0,0,7,122,18,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,95,101,120,101,99,99,2,0,0,0,0,0,0, -+ 0,4,0,0,0,11,0,0,0,67,0,0,0,115,17,1, -+ 0,0,124,0,0,106,0,0,106,1,0,125,2,0,116,2, -+ 0,106,3,0,131,0,0,1,116,4,0,124,2,0,131,1, -+ 0,143,226,0,1,116,5,0,106,6,0,106,7,0,124,2, -+ 0,131,1,0,124,1,0,107,9,0,114,95,0,100,1,0, -+ 106,8,0,124,2,0,131,1,0,125,3,0,116,9,0,124, -+ 3,0,100,2,0,124,2,0,131,1,1,130,1,0,110,0, -+ 0,124,0,0,106,0,0,106,10,0,100,3,0,107,8,0, -+ 114,181,0,124,0,0,106,0,0,106,11,0,100,3,0,107, -+ 8,0,114,158,0,116,9,0,100,4,0,100,2,0,124,0, -+ 0,106,0,0,106,1,0,131,1,1,130,1,0,110,0,0, -+ 124,0,0,106,12,0,124,1,0,100,5,0,100,6,0,131, -+ 1,1,1,124,1,0,83,124,0,0,106,12,0,124,1,0, -+ 100,5,0,100,6,0,131,1,1,1,116,13,0,124,0,0, -+ 106,0,0,106,10,0,100,7,0,131,2,0,115,243,0,124, -+ 0,0,106,0,0,106,10,0,106,14,0,124,2,0,131,1, -+ 0,1,110,13,0,124,0,0,106,15,0,124,1,0,131,1, -+ 0,1,87,100,3,0,81,88,116,5,0,106,6,0,124,2, -+ 0,25,83,41,8,122,51,69,120,101,99,117,116,101,32,116, -+ 104,101,32,115,112,101,99,32,105,110,32,97,110,32,101,120, -+ 105,115,116,105,110,103,32,109,111,100,117,108,101,39,115,32, -+ 110,97,109,101,115,112,97,99,101,46,122,30,109,111,100,117, -+ 108,101,32,123,33,114,125,32,110,111,116,32,105,110,32,115, -+ 121,115,46,109,111,100,117,108,101,115,114,68,0,0,0,78, -+ 122,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, -+ 114,249,0,0,0,84,114,2,1,0,0,41,16,114,178,0, -+ 0,0,114,68,0,0,0,114,107,0,0,0,218,12,97,99, -+ 113,117,105,114,101,95,108,111,99,107,114,104,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,114,94,0,0,0,114,48, -+ 0,0,0,114,154,0,0,0,114,170,0,0,0,114,221,0, -+ 0,0,114,255,0,0,0,114,61,0,0,0,218,11,108,111, -+ 97,100,95,109,111,100,117,108,101,114,3,1,0,0,41,4, -+ 114,72,0,0,0,114,180,0,0,0,114,68,0,0,0,114, -+ 172,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,176,0,0,0,108,4,0,0,115,32,0,0, -+ 0,0,2,12,1,10,1,13,1,24,1,15,1,21,1,18, -+ 1,18,1,27,2,19,1,4,1,19,1,21,4,22,2,19, -+ 1,122,17,95,83,112,101,99,77,101,116,104,111,100,115,46, -+ 101,120,101,99,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,27,0,0,0,67,0,0,0,115,24,1,0,0,124,0, -+ 0,106,0,0,125,1,0,124,1,0,106,1,0,106,2,0, -+ 124,1,0,106,3,0,131,1,0,1,116,4,0,106,5,0, -+ 124,1,0,106,3,0,25,125,2,0,116,6,0,124,2,0, -+ 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, -+ 108,0,121,16,0,124,1,0,106,1,0,124,2,0,95,7, -+ 0,87,113,108,0,4,116,8,0,107,10,0,114,104,0,1, -+ 1,1,89,113,108,0,88,110,0,0,116,6,0,124,2,0, -+ 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, -+ 215,0,121,59,0,124,2,0,106,9,0,124,2,0,95,10, -+ 0,116,11,0,124,2,0,100,3,0,131,2,0,115,190,0, -+ 124,1,0,106,3,0,106,12,0,100,4,0,131,1,0,100, -+ 5,0,25,124,2,0,95,10,0,110,0,0,87,113,215,0, -+ 4,116,8,0,107,10,0,114,211,0,1,1,1,89,113,215, -+ 0,88,110,0,0,116,6,0,124,2,0,100,6,0,100,0, -+ 0,131,3,0,100,0,0,107,8,0,114,20,1,121,13,0, -+ 124,1,0,124,2,0,95,13,0,87,113,20,1,4,116,8, -+ 0,107,10,0,114,16,1,1,1,1,89,113,20,1,88,110, -+ 0,0,124,2,0,83,41,7,78,114,205,0,0,0,114,251, -+ 0,0,0,114,247,0,0,0,114,117,0,0,0,114,85,0, -+ 0,0,114,209,0,0,0,41,14,114,178,0,0,0,114,170, -+ 0,0,0,114,5,1,0,0,114,68,0,0,0,114,8,0, -+ 0,0,114,74,0,0,0,114,63,0,0,0,114,205,0,0, -+ 0,114,210,0,0,0,114,58,0,0,0,114,251,0,0,0, -+ 114,61,0,0,0,114,33,0,0,0,114,209,0,0,0,41, -+ 3,114,72,0,0,0,114,178,0,0,0,114,180,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 25,95,108,111,97,100,95,98,97,99,107,119,97,114,100,95, -+ 99,111,109,112,97,116,105,98,108,101,132,4,0,0,115,42, -+ 0,0,0,0,4,9,1,19,2,16,1,24,1,3,1,16, -+ 1,13,1,8,1,24,1,3,4,12,1,15,1,32,1,13, -+ 1,8,1,24,1,3,1,13,1,13,1,8,1,122,38,95, -+ 83,112,101,99,77,101,116,104,111,100,115,46,95,108,111,97, -+ 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, -+ 116,105,98,108,101,99,1,0,0,0,0,0,0,0,2,0, -+ 0,0,11,0,0,0,67,0,0,0,115,179,0,0,0,124, -+ 0,0,106,0,0,106,1,0,100,0,0,107,9,0,114,52, -+ 0,116,2,0,124,0,0,106,0,0,106,1,0,100,1,0, -+ 131,2,0,115,52,0,124,0,0,106,3,0,131,0,0,83, -+ 110,0,0,124,0,0,106,4,0,131,0,0,125,1,0,116, -+ 5,0,124,1,0,131,1,0,143,84,0,1,124,0,0,106, -+ 0,0,106,1,0,100,0,0,107,8,0,114,143,0,124,0, -+ 0,106,0,0,106,6,0,100,0,0,107,8,0,114,156,0, -+ 116,7,0,100,2,0,100,3,0,124,0,0,106,0,0,106, -+ 8,0,131,1,1,130,1,0,113,156,0,110,13,0,124,0, -+ 0,106,9,0,124,1,0,131,1,0,1,87,100,0,0,81, -+ 88,116,10,0,106,11,0,124,0,0,106,0,0,106,8,0, -+ 25,83,41,4,78,114,2,1,0,0,122,14,109,105,115,115, -+ 105,110,103,32,108,111,97,100,101,114,114,68,0,0,0,41, -+ 12,114,178,0,0,0,114,170,0,0,0,114,61,0,0,0, -+ 114,6,1,0,0,114,1,1,0,0,114,213,0,0,0,114, -+ 221,0,0,0,114,154,0,0,0,114,68,0,0,0,114,3, -+ 1,0,0,114,8,0,0,0,114,74,0,0,0,41,2,114, -+ 72,0,0,0,114,180,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,14,95,108,111,97,100,95, -+ 117,110,108,111,99,107,101,100,162,4,0,0,115,20,0,0, -+ 0,0,2,18,2,21,1,13,2,12,1,13,1,18,1,18, -+ 1,30,3,19,5,122,27,95,83,112,101,99,77,101,116,104, -+ 111,100,115,46,95,108,111,97,100,95,117,110,108,111,99,107, -+ 101,100,99,1,0,0,0,0,0,0,0,1,0,0,0,8, -+ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, -+ 1,0,131,0,0,1,116,2,0,124,0,0,106,3,0,106, -+ 4,0,131,1,0,143,15,0,1,124,0,0,106,5,0,131, -+ 0,0,83,87,100,1,0,81,88,100,1,0,83,41,2,122, -+ 207,82,101,116,117,114,110,32,97,32,110,101,119,32,109,111, -+ 100,117,108,101,32,111,98,106,101,99,116,44,32,108,111,97, -+ 100,101,100,32,98,121,32,116,104,101,32,115,112,101,99,39, -+ 115,32,108,111,97,100,101,114,46,10,10,32,32,32,32,32, -+ 32,32,32,84,104,101,32,109,111,100,117,108,101,32,105,115, -+ 32,110,111,116,32,97,100,100,101,100,32,116,111,32,105,116, -+ 115,32,112,97,114,101,110,116,46,10,10,32,32,32,32,32, -+ 32,32,32,73,102,32,97,32,109,111,100,117,108,101,32,105, -+ 115,32,97,108,114,101,97,100,121,32,105,110,32,115,121,115, -+ 46,109,111,100,117,108,101,115,44,32,116,104,97,116,32,101, -+ 120,105,115,116,105,110,103,32,109,111,100,117,108,101,32,103, -+ 101,116,115,10,32,32,32,32,32,32,32,32,99,108,111,98, -+ 98,101,114,101,100,46,10,10,32,32,32,32,32,32,32,32, -+ 78,41,6,114,107,0,0,0,114,4,1,0,0,114,104,0, -+ 0,0,114,178,0,0,0,114,68,0,0,0,114,7,1,0, -+ 0,41,1,114,72,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,177,0,0,0,185,4,0,0, -+ 115,6,0,0,0,0,9,10,1,19,1,122,17,95,83,112, -+ 101,99,77,101,116,104,111,100,115,46,108,111,97,100,78,41, -+ 13,114,58,0,0,0,114,57,0,0,0,114,59,0,0,0, -+ 114,60,0,0,0,114,73,0,0,0,114,206,0,0,0,114, -+ 255,0,0,0,114,1,1,0,0,114,3,1,0,0,114,176, -+ 0,0,0,114,6,1,0,0,114,7,1,0,0,114,177,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,175,0,0,0,225,3,0,0,115, -+ 20,0,0,0,12,3,6,4,12,3,12,16,24,80,12,23, -+ 12,10,12,24,12,30,12,23,114,175,0,0,0,99,4,0, -+ 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, -+ 0,0,115,201,0,0,0,124,0,0,106,0,0,100,1,0, -+ 131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,131, -+ 1,0,125,5,0,124,4,0,115,102,0,124,5,0,114,54, -+ 0,124,5,0,106,1,0,125,4,0,113,102,0,124,2,0, -+ 124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,124, -+ 2,0,131,2,0,125,4,0,113,102,0,116,3,0,124,1, -+ 0,124,2,0,131,2,0,125,4,0,110,0,0,124,5,0, -+ 115,132,0,116,4,0,124,1,0,124,2,0,100,3,0,124, -+ 4,0,131,2,1,125,5,0,110,0,0,121,44,0,124,5, -+ 0,124,0,0,100,2,0,60,124,4,0,124,0,0,100,1, -+ 0,60,124,2,0,124,0,0,100,4,0,60,124,3,0,124, -+ 0,0,100,5,0,60,87,110,18,0,4,116,5,0,107,10, -+ 0,114,196,0,1,1,1,89,110,1,0,88,100,0,0,83, -+ 41,6,78,114,205,0,0,0,114,209,0,0,0,114,170,0, -+ 0,0,114,211,0,0,0,114,245,0,0,0,41,6,114,94, -+ 0,0,0,114,170,0,0,0,218,20,83,111,117,114,99,101, -+ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,218,16, -+ 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, -+ 114,240,0,0,0,114,208,0,0,0,41,6,90,2,110,115, -+ 114,68,0,0,0,90,8,112,97,116,104,110,97,109,101,90, -+ 9,99,112,97,116,104,110,97,109,101,114,170,0,0,0,114, -+ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,14,95,102,105,120,95,117,112,95,109,111,100, -+ 117,108,101,199,4,0,0,115,34,0,0,0,0,2,15,1, -+ 15,1,6,1,6,1,12,1,12,1,18,2,18,1,6,1, -+ 24,1,3,1,10,1,10,1,10,1,14,1,13,2,114,10, -+ 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -+ 5,0,0,0,64,0,0,0,115,181,0,0,0,101,0,0, -+ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,101, -+ 4,0,100,2,0,100,3,0,132,0,0,131,1,0,90,5, -+ 0,101,6,0,100,4,0,100,4,0,100,5,0,100,6,0, -+ 132,2,0,131,1,0,90,7,0,101,6,0,100,4,0,100, -+ 7,0,100,8,0,132,1,0,131,1,0,90,8,0,101,6, -+ 0,101,9,0,100,9,0,100,10,0,132,0,0,131,1,0, -+ 131,1,0,90,10,0,101,6,0,101,9,0,100,11,0,100, -+ 12,0,132,0,0,131,1,0,131,1,0,90,11,0,101,6, -+ 0,101,9,0,100,13,0,100,14,0,132,0,0,131,1,0, -+ 131,1,0,90,12,0,101,6,0,101,9,0,100,15,0,100, -+ 16,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4, -+ 0,83,41,17,218,15,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,122,144,77,101,116,97,32,112,97,116,104, -+ 32,105,109,112,111,114,116,32,102,111,114,32,98,117,105,108, -+ 116,45,105,110,32,109,111,100,117,108,101,115,46,10,10,32, -+ 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, -+ 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, -+ 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, -+ 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, -+ 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, -+ 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, -+ 46,10,10,32,32,32,32,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -+ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, -+ 83,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114, -+ 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, -+ 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, -+ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, -+ 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, -+ 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, -+ 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, -+ 32,32,32,32,32,32,32,32,122,24,60,109,111,100,117,108, -+ 101,32,123,33,114,125,32,40,98,117,105,108,116,45,105,110, -+ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, -+ 114,180,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,206,0,0,0,233,4,0,0,115,2,0, -+ 0,0,0,7,122,27,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, -+ 114,78,99,4,0,0,0,0,0,0,0,4,0,0,0,5, -+ 0,0,0,67,0,0,0,115,58,0,0,0,124,2,0,100, -+ 0,0,107,9,0,114,16,0,100,0,0,83,116,0,0,106, -+ 1,0,124,1,0,131,1,0,114,50,0,116,2,0,124,1, -+ 0,124,0,0,100,1,0,100,2,0,131,2,1,83,100,0, -+ 0,83,100,0,0,83,41,3,78,114,218,0,0,0,122,8, -+ 98,117,105,108,116,45,105,110,41,3,114,107,0,0,0,90, -+ 10,105,115,95,98,117,105,108,116,105,110,114,174,0,0,0, -+ 41,4,218,3,99,108,115,114,159,0,0,0,114,36,0,0, -+ 0,218,6,116,97,114,103,101,116,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,9,102,105,110,100,95,115, -+ 112,101,99,242,4,0,0,115,10,0,0,0,0,2,12,1, -+ 4,1,15,1,19,2,122,25,66,117,105,108,116,105,110,73, -+ 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, -+ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, -+ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, -+ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, -+ 100,1,0,107,9,0,114,37,0,124,3,0,106,1,0,83, -+ 100,1,0,83,41,2,122,175,70,105,110,100,32,116,104,101, -+ 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, -+ 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, -+ 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, -+ 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, -+ 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, -+ 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, -+ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, -+ 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, -+ 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, -+ 32,32,32,32,32,32,32,78,41,2,114,14,1,0,0,114, -+ 170,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,178,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,11,102,105,110,100,95, -+ 109,111,100,117,108,101,251,4,0,0,115,4,0,0,0,0, -+ 9,18,1,122,27,66,117,105,108,116,105,110,73,109,112,111, -+ 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,3,0,0,0,10,0,0, -+ 0,67,0,0,0,115,59,0,0,0,116,0,0,124,1,0, -+ 131,1,0,143,23,0,1,116,1,0,116,2,0,106,3,0, -+ 124,1,0,131,2,0,125,2,0,87,100,1,0,81,88,124, -+ 0,0,124,2,0,95,4,0,100,2,0,124,2,0,95,5, -+ 0,124,2,0,83,41,3,122,23,76,111,97,100,32,97,32, -+ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, -+ 78,114,31,0,0,0,41,6,114,70,0,0,0,114,115,0, -+ 0,0,114,107,0,0,0,90,12,105,110,105,116,95,98,117, -+ 105,108,116,105,110,114,205,0,0,0,114,251,0,0,0,41, -+ 3,114,12,1,0,0,114,159,0,0,0,114,180,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 5,1,0,0,7,5,0,0,115,10,0,0,0,0,6,13, -+ 1,24,1,9,1,9,1,122,27,66,117,105,108,116,105,110, -+ 73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,111, -+ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -+ 0,83,41,2,122,57,82,101,116,117,114,110,32,78,111,110, -+ 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111, -+ 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118, -+ 101,32,99,111,100,101,32,111,98,106,101,99,116,115,46,78, -+ 114,5,0,0,0,41,2,114,12,1,0,0,114,159,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,8,103,101,116,95,99,111,100,101,19,5,0,0,115,2, -+ 0,0,0,0,4,122,24,66,117,105,108,116,105,110,73,109, -+ 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, - 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, -- 57,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, -+ 56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, -- 32,100,111,32,110,111,116,32,104,97,118,101,32,99,111,100, -- 101,32,111,98,106,101,99,116,115,46,78,114,4,0,0,0, -- 41,2,114,11,1,0,0,114,158,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,8,103,101,116, -- 95,99,111,100,101,19,5,0,0,115,2,0,0,0,0,4, -- 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, -- 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, -- 4,0,0,0,100,1,0,83,41,2,122,56,82,101,116,117, -- 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, -- 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, -- 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, -- 111,100,101,46,78,114,4,0,0,0,41,2,114,11,1,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, -- 101,25,5,0,0,115,2,0,0,0,0,4,122,26,66,117, -- 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, -- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, -+ 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, -+ 114,99,101,32,99,111,100,101,46,78,114,5,0,0,0,41, -+ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, -+ 115,111,117,114,99,101,25,5,0,0,115,2,0,0,0,0, -+ 4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, -+ 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, -+ 0,0,115,4,0,0,0,100,1,0,83,41,2,122,52,82, -+ 101,116,117,114,110,32,70,97,108,115,101,32,97,115,32,98, -+ 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, -+ 97,114,101,32,110,101,118,101,114,32,112,97,99,107,97,103, -+ 101,115,46,70,114,5,0,0,0,41,2,114,12,1,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,220,0,0,0,31,5,0,0,115,2,0, -+ 0,0,0,4,122,26,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, -+ 41,14,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,218,12,115,116,97,116,105,99,109,101, -+ 116,104,111,100,114,206,0,0,0,218,11,99,108,97,115,115, -+ 109,101,116,104,111,100,114,14,1,0,0,114,15,1,0,0, -+ 114,162,0,0,0,114,5,1,0,0,114,16,1,0,0,114, -+ 17,1,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,11,1, -+ 0,0,224,4,0,0,115,28,0,0,0,12,7,6,2,18, -+ 9,3,1,21,8,3,1,18,11,3,1,21,11,3,1,21, -+ 5,3,1,21,5,3,1,114,11,1,0,0,99,0,0,0, -+ 0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,0, -+ 0,115,193,0,0,0,101,0,0,90,1,0,100,0,0,90, -+ 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, -+ 0,132,0,0,131,1,0,90,5,0,101,6,0,100,4,0, -+ 100,4,0,100,5,0,100,6,0,132,2,0,131,1,0,90, -+ 7,0,101,6,0,100,4,0,100,7,0,100,8,0,132,1, -+ 0,131,1,0,90,8,0,101,4,0,100,9,0,100,10,0, -+ 132,0,0,131,1,0,90,9,0,101,6,0,100,11,0,100, -+ 12,0,132,0,0,131,1,0,90,10,0,101,6,0,101,11, -+ 0,100,13,0,100,14,0,132,0,0,131,1,0,131,1,0, -+ 90,12,0,101,6,0,101,11,0,100,15,0,100,16,0,132, -+ 0,0,131,1,0,131,1,0,90,13,0,101,6,0,101,11, -+ 0,100,17,0,100,18,0,132,0,0,131,1,0,131,1,0, -+ 90,14,0,100,4,0,83,41,19,218,14,70,114,111,122,101, -+ 110,73,109,112,111,114,116,101,114,122,142,77,101,116,97,32, -+ 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, -+ 102,114,111,122,101,110,32,109,111,100,117,108,101,115,46,10, -+ 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, -+ 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, -+ 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, -+ 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, -+ 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, -+ 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, -+ 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, -+ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, -+ 1,0,83,41,2,122,115,82,101,116,117,114,110,32,114,101, -+ 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, -+ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, -+ 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, -+ 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, -+ 10,10,32,32,32,32,32,32,32,32,122,22,60,109,111,100, -+ 117,108,101,32,123,33,114,125,32,40,102,114,111,122,101,110, -+ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, -+ 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,206,0,0,0,47,5,0,0,115,2,0,0,0, -+ 0,7,122,26,70,114,111,122,101,110,73,109,112,111,114,116, -+ 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, -+ 4,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, -+ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, -+ 1,0,131,1,0,114,34,0,116,2,0,124,1,0,124,0, -+ 0,100,1,0,100,2,0,131,2,1,83,100,0,0,83,100, -+ 0,0,83,41,3,78,114,218,0,0,0,90,6,102,114,111, -+ 122,101,110,41,3,114,107,0,0,0,114,163,0,0,0,114, -+ 174,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,13,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,14,1,0,0,56,5, -+ 0,0,115,6,0,0,0,0,2,15,1,19,2,122,24,70, -+ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, -+ 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, -+ 3,0,0,0,2,0,0,0,67,0,0,0,115,23,0,0, -+ 0,116,0,0,106,1,0,124,1,0,131,1,0,114,19,0, -+ 124,0,0,83,100,1,0,83,41,2,122,93,70,105,110,100, -+ 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -+ 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -+ 10,32,32,32,32,32,32,32,32,78,41,2,114,107,0,0, -+ 0,114,163,0,0,0,41,3,114,12,1,0,0,114,159,0, -+ 0,0,114,36,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,15,1,0,0,63,5,0,0,115, -+ 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, -+ 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, -+ 108,101,99,1,0,0,0,0,0,0,0,3,0,0,0,4, -+ 0,0,0,67,0,0,0,115,95,0,0,0,124,0,0,106, -+ 0,0,106,1,0,125,1,0,116,2,0,106,3,0,124,1, -+ 0,131,1,0,115,57,0,116,4,0,100,1,0,106,5,0, -+ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, -+ 1,0,110,0,0,116,6,0,116,2,0,106,7,0,124,1, -+ 0,131,2,0,125,2,0,116,8,0,124,2,0,124,0,0, -+ 106,9,0,131,2,0,1,100,0,0,83,41,3,78,122,27, -+ 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, -+ 111,122,101,110,32,109,111,100,117,108,101,114,68,0,0,0, -+ 41,10,114,209,0,0,0,114,68,0,0,0,114,107,0,0, -+ 0,114,163,0,0,0,114,154,0,0,0,114,48,0,0,0, -+ 114,115,0,0,0,218,17,103,101,116,95,102,114,111,122,101, -+ 110,95,111,98,106,101,99,116,114,176,0,0,0,114,64,0, -+ 0,0,41,3,114,180,0,0,0,114,68,0,0,0,114,195, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,2,1,0,0,72,5,0,0,115,12,0,0,0, -+ 0,2,12,1,15,1,18,1,12,1,18,1,122,26,70,114, -+ 111,122,101,110,73,109,112,111,114,116,101,114,46,101,120,101, -+ 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,3,0,0,0,67,0,0,0,115,13,0, -+ 0,0,116,0,0,124,0,0,124,1,0,131,2,0,83,41, -+ 1,122,95,76,111,97,100,32,97,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, -+ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, -+ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, -+ 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -+ 32,32,41,1,114,181,0,0,0,41,2,114,12,1,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,5,1,0,0,81,5,0,0,115,2,0, -+ 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, -+ 114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, -+ 0,67,0,0,0,115,13,0,0,0,116,0,0,106,1,0, -+ 124,1,0,131,1,0,83,41,1,122,45,82,101,116,117,114, -+ 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, -+ 116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,46,41,2,114,107,0,0,0,114, -+ 22,1,0,0,41,2,114,12,1,0,0,114,159,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 16,1,0,0,90,5,0,0,115,2,0,0,0,0,4,122, -+ 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, -+ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -- 0,0,100,1,0,83,41,2,122,52,82,101,116,117,114,110, -- 32,70,97,108,115,101,32,97,115,32,98,117,105,108,116,45, -- 105,110,32,109,111,100,117,108,101,115,32,97,114,101,32,110, -- 101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,114, -- 4,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 219,0,0,0,31,5,0,0,115,2,0,0,0,0,4,122, -- 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 46,105,115,95,112,97,99,107,97,103,101,41,14,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114, -- 205,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111, -- 100,114,13,1,0,0,114,14,1,0,0,114,161,0,0,0, -- 114,4,1,0,0,114,15,1,0,0,114,16,1,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,10,1,0,0,224,4,0, -- 0,115,28,0,0,0,12,7,6,2,18,9,3,1,21,8, -- 3,1,18,11,3,1,21,11,3,1,21,5,3,1,21,5, -- 3,1,114,10,1,0,0,99,0,0,0,0,0,0,0,0, -- 0,0,0,0,5,0,0,0,64,0,0,0,115,193,0,0, -+ 0,0,100,1,0,83,41,2,122,54,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, -+ 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, -+ 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 78,114,5,0,0,0,41,2,114,12,1,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,17,1,0,0,96,5,0,0,115,2,0,0,0,0, -+ 4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,101, -+ 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, -+ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -+ 0,115,13,0,0,0,116,0,0,106,1,0,124,1,0,131, -+ 1,0,83,41,1,122,46,82,101,116,117,114,110,32,84,114, -+ 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, -+ 107,97,103,101,46,41,2,114,107,0,0,0,90,17,105,115, -+ 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,41, -+ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,220,0,0,0,102, -+ 5,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, -+ 101,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, -+ 99,107,97,103,101,41,15,114,58,0,0,0,114,57,0,0, -+ 0,114,59,0,0,0,114,60,0,0,0,114,18,1,0,0, -+ 114,206,0,0,0,114,19,1,0,0,114,14,1,0,0,114, -+ 15,1,0,0,114,2,1,0,0,114,5,1,0,0,114,165, -+ 0,0,0,114,16,1,0,0,114,17,1,0,0,114,220,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,20,1,0,0,38,5,0,0,115, -+ 28,0,0,0,12,7,6,2,18,9,3,1,21,6,3,1, -+ 18,8,18,9,18,9,3,1,21,5,3,1,21,5,3,1, -+ 114,20,1,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,5,0,0,0,64,0,0,0,115,121,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,90,4,0,100,3,0,90,5,0,100,4,0, -+ 90,6,0,101,7,0,100,5,0,100,6,0,132,0,0,131, -+ 1,0,90,8,0,101,7,0,100,7,0,100,8,0,132,0, -+ 0,131,1,0,90,9,0,101,7,0,100,9,0,100,9,0, -+ 100,10,0,100,11,0,132,2,0,131,1,0,90,10,0,101, -+ 7,0,100,9,0,100,12,0,100,13,0,132,1,0,131,1, -+ 0,90,11,0,100,9,0,83,41,14,218,21,87,105,110,100, -+ 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, -+ 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, -+ 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, -+ 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, -+ 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, -+ 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, -+ 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, -+ 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, -+ 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, -+ 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, -+ 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, -+ 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, -+ 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, -+ 103,70,99,2,0,0,0,0,0,0,0,2,0,0,0,11, -+ 0,0,0,67,0,0,0,115,67,0,0,0,121,23,0,116, -+ 0,0,106,1,0,116,0,0,106,2,0,124,1,0,131,2, -+ 0,83,87,110,37,0,4,116,3,0,107,10,0,114,62,0, -+ 1,1,1,116,0,0,106,1,0,116,0,0,106,4,0,124, -+ 1,0,131,2,0,83,89,110,1,0,88,100,0,0,83,41, -+ 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, -+ 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, -+ 82,69,78,84,95,85,83,69,82,114,41,0,0,0,90,18, -+ 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, -+ 78,69,41,2,114,12,1,0,0,218,3,107,101,121,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,14,95, -+ 111,112,101,110,95,114,101,103,105,115,116,114,121,121,5,0, -+ 0,115,8,0,0,0,0,2,3,1,23,1,13,1,122,36, -+ 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -+ 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, -+ 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, -+ 0,16,0,0,0,67,0,0,0,115,142,0,0,0,124,0, -+ 0,106,0,0,114,21,0,124,0,0,106,1,0,125,2,0, -+ 110,9,0,124,0,0,106,2,0,125,2,0,124,2,0,106, -+ 3,0,100,1,0,124,1,0,100,2,0,116,4,0,106,5, -+ 0,100,0,0,100,3,0,133,2,0,25,131,0,2,125,3, -+ 0,121,46,0,124,0,0,106,6,0,124,3,0,131,1,0, -+ 143,25,0,125,4,0,116,7,0,106,8,0,124,4,0,100, -+ 4,0,131,2,0,125,5,0,87,100,0,0,81,88,87,110, -+ 22,0,4,116,9,0,107,10,0,114,137,0,1,1,1,100, ++ 115,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, ++ 0,0,67,0,0,0,115,89,1,0,0,124,1,0,100,1, ++ 0,107,8,0,114,73,0,100,2,0,125,1,0,116,0,0, ++ 124,2,0,100,3,0,131,2,0,114,73,0,121,19,0,124, ++ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,110, ++ 18,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, ++ 110,1,0,88,116,3,0,106,4,0,124,0,0,124,2,0, ++ 100,4,0,124,1,0,131,2,1,125,4,0,100,5,0,124, ++ 4,0,95,5,0,124,2,0,100,1,0,107,8,0,114,194, ++ 0,120,73,0,116,6,0,131,0,0,68,93,58,0,92,2, ++ 0,125,5,0,125,6,0,124,1,0,106,7,0,116,8,0, ++ 124,6,0,131,1,0,131,1,0,114,128,0,124,5,0,124, ++ 0,0,124,1,0,131,2,0,125,2,0,124,2,0,124,4, ++ 0,95,9,0,80,113,128,0,87,100,1,0,83,124,3,0, ++ 116,10,0,107,8,0,114,23,1,116,0,0,124,2,0,100, ++ 6,0,131,2,0,114,32,1,121,19,0,124,2,0,106,11, ++ 0,124,0,0,131,1,0,125,7,0,87,110,18,0,4,116, ++ 2,0,107,10,0,114,4,1,1,1,1,89,113,32,1,88, ++ 124,7,0,114,32,1,103,0,0,124,4,0,95,12,0,110, ++ 9,0,124,3,0,124,4,0,95,12,0,124,4,0,106,12, ++ 0,103,0,0,107,2,0,114,85,1,124,1,0,114,85,1, ++ 116,13,0,124,1,0,131,1,0,100,7,0,25,125,8,0, ++ 124,4,0,106,12,0,106,14,0,124,8,0,131,1,0,1, ++ 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, ++ 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, ++ 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, ++ 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, ++ 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, ++ 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, ++ 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, ++ 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, ++ 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, ++ 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, ++ 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, ++ 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, ++ 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, ++ 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, ++ 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, ++ 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, ++ 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, ++ 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, ++ 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, ++ 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, ++ 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, ++ 111,119,110,62,218,12,103,101,116,95,102,105,108,101,110,97, ++ 109,101,218,6,111,114,105,103,105,110,84,218,10,105,115,95, ++ 112,97,99,107,97,103,101,114,60,0,0,0,41,15,114,116, ++ 0,0,0,114,158,0,0,0,114,108,0,0,0,114,122,0, ++ 0,0,218,10,77,111,100,117,108,101,83,112,101,99,90,13, ++ 95,115,101,116,95,102,105,108,101,97,116,116,114,218,27,95, ++ 103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,105, ++ 108,101,95,108,111,97,100,101,114,115,114,93,0,0,0,114, ++ 94,0,0,0,114,128,0,0,0,218,9,95,80,79,80,85, ++ 76,65,84,69,114,160,0,0,0,114,157,0,0,0,114,39, ++ 0,0,0,218,6,97,112,112,101,110,100,41,9,114,107,0, ++ 0,0,90,8,108,111,99,97,116,105,111,110,114,128,0,0, ++ 0,114,157,0,0,0,218,4,115,112,101,99,218,12,108,111, ++ 97,100,101,114,95,99,108,97,115,115,218,8,115,117,102,102, ++ 105,120,101,115,114,160,0,0,0,90,7,100,105,114,110,97, ++ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,108, ++ 101,95,108,111,99,97,116,105,111,110,254,1,0,0,115,60, ++ 0,0,0,0,12,12,4,6,1,15,2,3,1,19,1,13, ++ 1,5,8,24,1,9,3,12,1,22,1,21,1,15,1,9, ++ 1,5,2,4,3,12,2,15,1,3,1,19,1,13,1,5, ++ 2,6,1,12,2,9,1,15,1,6,1,16,1,16,2,114, ++ 168,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, ++ 0,5,0,0,0,64,0,0,0,115,121,0,0,0,101,0, ++ 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, ++ 100,2,0,90,4,0,100,3,0,90,5,0,100,4,0,90, ++ 6,0,101,7,0,100,5,0,100,6,0,132,0,0,131,1, ++ 0,90,8,0,101,7,0,100,7,0,100,8,0,132,0,0, ++ 131,1,0,90,9,0,101,7,0,100,9,0,100,9,0,100, ++ 10,0,100,11,0,132,2,0,131,1,0,90,10,0,101,7, ++ 0,100,9,0,100,12,0,100,13,0,132,1,0,131,1,0, ++ 90,11,0,100,9,0,83,41,14,218,21,87,105,110,100,111, ++ 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, ++ 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, ++ 101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,100, ++ 101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,87, ++ 105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,46, ++ 122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,111, ++ 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, ++ 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, ++ 101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,83, ++ 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, ++ 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, ++ 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, ++ 123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,103, ++ 70,99,2,0,0,0,0,0,0,0,2,0,0,0,11,0, ++ 0,0,67,0,0,0,115,67,0,0,0,121,23,0,116,0, ++ 0,106,1,0,116,0,0,106,2,0,124,1,0,131,2,0, ++ 83,87,110,37,0,4,116,3,0,107,10,0,114,62,0,1, ++ 1,1,116,0,0,106,1,0,116,0,0,106,4,0,124,1, ++ 0,131,2,0,83,89,110,1,0,88,100,0,0,83,41,1, ++ 78,41,5,218,7,95,119,105,110,114,101,103,90,7,79,112, ++ 101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82, ++ 69,78,84,95,85,83,69,82,114,41,0,0,0,90,18,72, ++ 75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78, ++ 69,41,2,218,3,99,108,115,218,3,107,101,121,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,14,95,111, ++ 112,101,110,95,114,101,103,105,115,116,114,121,76,2,0,0, ++ 115,8,0,0,0,0,2,3,1,23,1,13,1,122,36,87, ++ 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, ++ 110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,115, ++ 116,114,121,99,2,0,0,0,0,0,0,0,6,0,0,0, ++ 16,0,0,0,67,0,0,0,115,143,0,0,0,124,0,0, ++ 106,0,0,114,21,0,124,0,0,106,1,0,125,2,0,110, ++ 9,0,124,0,0,106,2,0,125,2,0,124,2,0,106,3, ++ 0,100,1,0,124,1,0,100,2,0,116,4,0,106,5,0, ++ 100,0,0,100,3,0,133,2,0,25,131,0,2,125,3,0, ++ 121,47,0,124,0,0,106,6,0,124,3,0,131,1,0,143, ++ 25,0,125,4,0,116,7,0,106,8,0,124,4,0,100,4, ++ 0,131,2,0,125,5,0,87,100,0,0,81,82,88,87,110, ++ 22,0,4,116,9,0,107,10,0,114,138,0,1,1,1,100, + 0,0,83,89,110,1,0,88,124,5,0,83,41,5,78,114, -+ 159,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, -+ 110,114,137,0,0,0,114,31,0,0,0,41,10,218,11,68, ++ 127,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, ++ 110,114,81,0,0,0,114,31,0,0,0,41,10,218,11,68, + 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, + 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, + 82,69,71,73,83,84,82,89,95,75,69,89,114,48,0,0, + 0,114,8,0,0,0,218,7,118,101,114,115,105,111,110,114, -+ 26,1,0,0,114,24,1,0,0,90,10,81,117,101,114,121, -+ 86,97,108,117,101,114,41,0,0,0,41,6,114,12,1,0, -+ 0,114,159,0,0,0,90,12,114,101,103,105,115,116,114,121, -+ 95,107,101,121,114,25,1,0,0,90,4,104,107,101,121,218, ++ 173,0,0,0,114,170,0,0,0,90,10,81,117,101,114,121, ++ 86,97,108,117,101,114,41,0,0,0,41,6,114,171,0,0, ++ 0,114,127,0,0,0,90,12,114,101,103,105,115,116,114,121, ++ 95,107,101,121,114,172,0,0,0,90,4,104,107,101,121,218, + 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,16,95,115,101,97,114,99, -+ 104,95,114,101,103,105,115,116,114,121,128,5,0,0,115,22, ++ 104,95,114,101,103,105,115,116,114,121,83,2,0,0,115,22, + 0,0,0,0,2,9,1,12,2,9,1,15,1,22,1,3, -+ 1,18,1,28,1,13,1,9,1,122,38,87,105,110,100,111, ++ 1,18,1,29,1,13,1,9,1,122,38,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, + 121,78,99,4,0,0,0,0,0,0,0,8,0,0,0,14, -+ 0,0,0,67,0,0,0,115,155,0,0,0,124,0,0,106, ++ 0,0,0,67,0,0,0,115,158,0,0,0,124,0,0,106, + 0,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, + 0,107,8,0,114,31,0,100,0,0,83,121,14,0,116,1, + 0,124,4,0,131,1,0,1,87,110,22,0,4,116,2,0, + 107,10,0,114,69,0,1,1,1,100,0,0,83,89,110,1, -+ 0,88,120,78,0,116,3,0,131,0,0,68,93,67,0,92, ++ 0,88,120,81,0,116,3,0,131,0,0,68,93,70,0,92, + 2,0,125,5,0,125,6,0,124,4,0,106,4,0,116,5, + 0,124,6,0,131,1,0,131,1,0,114,80,0,116,6,0, -+ 124,1,0,124,5,0,124,1,0,124,4,0,131,2,0,100, -+ 1,0,124,4,0,131,2,1,125,7,0,124,7,0,83,113, -+ 80,0,87,100,0,0,83,41,2,78,114,218,0,0,0,41, -+ 7,114,32,1,0,0,114,40,0,0,0,114,41,0,0,0, -+ 114,241,0,0,0,114,231,0,0,0,114,232,0,0,0,114, -+ 174,0,0,0,41,8,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,13,1,0,0,114,31,1,0,0,114, -+ 170,0,0,0,114,128,0,0,0,114,178,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,14,1, -+ 0,0,143,5,0,0,115,24,0,0,0,0,2,15,1,12, -+ 1,4,1,3,1,14,1,13,1,9,1,22,1,21,1,21, ++ 106,7,0,124,1,0,124,5,0,124,1,0,124,4,0,131, ++ 2,0,100,1,0,124,4,0,131,2,1,125,7,0,124,7, ++ 0,83,113,80,0,87,100,0,0,83,41,2,78,114,159,0, ++ 0,0,41,8,114,179,0,0,0,114,40,0,0,0,114,41, ++ 0,0,0,114,162,0,0,0,114,93,0,0,0,114,94,0, ++ 0,0,114,122,0,0,0,218,16,115,112,101,99,95,102,114, ++ 111,109,95,108,111,97,100,101,114,41,8,114,171,0,0,0, ++ 114,127,0,0,0,114,36,0,0,0,218,6,116,97,114,103, ++ 101,116,114,178,0,0,0,114,128,0,0,0,114,167,0,0, ++ 0,114,165,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,9,102,105,110,100,95,115,112,101,99, ++ 98,2,0,0,115,26,0,0,0,0,2,15,1,12,1,4, ++ 1,3,1,14,1,13,1,9,1,22,1,21,1,9,1,15, + 1,9,1,122,31,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,3,0,0,0,0,0,0,0,4,0,0, @@ -35707,1919 +33369,1478 @@ diff -Nru orig/Python/importlib.h modified/Python/importlib.h + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, -+ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,14, -+ 1,0,0,114,170,0,0,0,41,4,114,12,1,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,178,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,15,1, -+ 0,0,158,5,0,0,115,8,0,0,0,0,7,18,1,12, -+ 1,7,2,122,33,87,105,110,100,111,119,115,82,101,103,105, -+ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, -+ 109,111,100,117,108,101,41,12,114,58,0,0,0,114,57,0, -+ 0,0,114,59,0,0,0,114,60,0,0,0,114,29,1,0, -+ 0,114,28,1,0,0,114,27,1,0,0,114,19,1,0,0, -+ 114,26,1,0,0,114,32,1,0,0,114,14,1,0,0,114, -+ 15,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,23,1,0,0,109,5,0, ++ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,182, ++ 0,0,0,114,128,0,0,0,41,4,114,171,0,0,0,114, ++ 127,0,0,0,114,36,0,0,0,114,165,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,11,102, ++ 105,110,100,95,109,111,100,117,108,101,114,2,0,0,115,8, ++ 0,0,0,0,7,18,1,12,1,7,2,122,33,87,105,110, ++ 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, ++ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, ++ 114,113,0,0,0,114,112,0,0,0,114,114,0,0,0,114, ++ 115,0,0,0,114,176,0,0,0,114,175,0,0,0,114,174, ++ 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, ++ 114,173,0,0,0,114,179,0,0,0,114,182,0,0,0,114, ++ 183,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,169,0,0,0,64,2,0, + 0,115,20,0,0,0,12,2,6,3,6,3,6,2,6,2, -+ 18,7,18,15,3,1,21,14,3,1,114,23,1,0,0,99, ++ 18,7,18,15,3,1,21,15,3,1,114,169,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, ++ 64,0,0,0,115,70,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, + 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, -+ 90,5,0,101,6,0,90,7,0,100,6,0,83,41,7,218, -+ 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, -+ 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, -+ 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, -+ 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, -+ 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, -+ 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, -+ 101,114,46,99,2,0,0,0,0,0,0,0,5,0,0,0, -+ 3,0,0,0,67,0,0,0,115,88,0,0,0,116,0,0, -+ 124,0,0,106,1,0,124,1,0,131,1,0,131,1,0,100, -+ 1,0,25,125,2,0,124,2,0,106,2,0,100,2,0,100, -+ 1,0,131,2,0,100,3,0,25,125,3,0,124,1,0,106, -+ 3,0,100,2,0,131,1,0,100,4,0,25,125,4,0,124, -+ 3,0,100,5,0,107,2,0,111,87,0,124,4,0,100,5, -+ 0,107,3,0,83,41,6,122,141,67,111,110,99,114,101,116, -+ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -+ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, -+ 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, -+ 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, -+ 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, -+ 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, -+ 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, -+ 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, -+ 95,46,112,121,39,46,114,30,0,0,0,114,117,0,0,0, -+ 114,85,0,0,0,114,116,0,0,0,114,73,0,0,0,41, -+ 4,114,39,0,0,0,114,239,0,0,0,114,35,0,0,0, -+ 114,33,0,0,0,41,5,114,72,0,0,0,114,159,0,0, -+ 0,114,132,0,0,0,90,13,102,105,108,101,110,97,109,101, -+ 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 220,0,0,0,177,5,0,0,115,8,0,0,0,0,3,25, -+ 1,22,1,19,1,122,24,95,76,111,97,100,101,114,66,97, -+ 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, -+ 2,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, -+ 67,0,0,0,115,80,0,0,0,124,0,0,106,0,0,124, -+ 1,0,106,1,0,131,1,0,125,2,0,124,2,0,100,1, -+ 0,107,8,0,114,57,0,116,2,0,100,2,0,106,3,0, -+ 124,1,0,106,1,0,131,1,0,131,1,0,130,1,0,110, -+ 0,0,116,4,0,116,5,0,124,2,0,124,1,0,106,6, -+ 0,131,3,0,1,100,1,0,83,41,3,122,19,69,120,101, -+ 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, -+ 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, -+ 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, -+ 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, -+ 110,115,32,78,111,110,101,41,7,114,16,1,0,0,114,58, -+ 0,0,0,114,154,0,0,0,114,48,0,0,0,114,115,0, -+ 0,0,114,176,0,0,0,114,64,0,0,0,41,3,114,72, -+ 0,0,0,114,180,0,0,0,114,195,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,2,1,0, -+ 0,185,5,0,0,115,10,0,0,0,0,2,18,1,12,1, -+ 3,1,24,1,122,25,95,76,111,97,100,101,114,66,97,115, -+ 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,78, -+ 41,8,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,114,220,0,0,0,114,2,1,0,0, -+ 114,181,0,0,0,114,5,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,33, -+ 1,0,0,172,5,0,0,115,8,0,0,0,12,3,6,2, -+ 12,8,12,8,114,33,1,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4, -+ 0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0, -+ 90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100, -+ 9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18, -+ 0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0, -+ 100,16,0,132,0,0,90,9,0,100,17,0,83,41,19,218, -+ 12,83,111,117,114,99,101,76,111,97,100,101,114,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, -+ 0,0,115,10,0,0,0,116,0,0,130,1,0,100,1,0, -+ 83,41,2,122,178,79,112,116,105,111,110,97,108,32,109,101, -+ 116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110, -+ 115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105, -+ 111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41, -+ 32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32, -+ 32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,44, -+ 32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97, -+ 32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82, -+ 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, -+ 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, -+ 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, -+ 32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114, -+ 114,111,114,41,2,114,72,0,0,0,114,36,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, -+ 112,97,116,104,95,109,116,105,109,101,198,5,0,0,115,2, -+ 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, -+ 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, -+ 0,0,0,115,20,0,0,0,105,1,0,124,0,0,106,0, -+ 0,124,1,0,131,1,0,100,1,0,54,83,41,2,97,170, -+ 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, -+ 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, -+ 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, -+ 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,112, -+ 97,116,104,10,32,32,32,32,32,32,32,32,116,111,32,98, -+ 121,32,116,104,101,32,112,97,116,104,32,40,115,116,114,41, -+ 46,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, -+ 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, -+ 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, -+ 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, -+ 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, -+ 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, -+ 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, -+ 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, -+ 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, -+ 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, -+ 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, -+ 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, -+ 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, -+ 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, -+ 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, -+ 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, -+ 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, -+ 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, -+ 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, -+ 108,101,100,46,10,32,32,32,32,32,32,32,32,114,184,0, -+ 0,0,41,1,114,36,1,0,0,41,2,114,72,0,0,0, -+ 114,36,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, -+ 206,5,0,0,115,2,0,0,0,0,11,122,23,83,111,117, -+ 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, -+ 116,97,116,115,99,4,0,0,0,0,0,0,0,4,0,0, -+ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, -+ 0,106,0,0,124,2,0,124,3,0,131,2,0,83,41,1, -+ 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, -+ 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, -+ 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, -+ 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, -+ 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, -+ 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, -+ 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, -+ 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, -+ 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, -+ 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, -+ 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, -+ 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, -+ 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, -+ 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, -+ 32,32,32,32,32,32,41,1,218,8,115,101,116,95,100,97, -+ 116,97,41,4,114,72,0,0,0,114,142,0,0,0,90,10, -+ 99,97,99,104,101,95,112,97,116,104,114,54,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,15, -+ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,219, -+ 5,0,0,115,2,0,0,0,0,8,122,28,83,111,117,114, -+ 99,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, -+ 98,121,116,101,99,111,100,101,99,3,0,0,0,0,0,0, -+ 0,3,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,150,79,112,116,105,111,110, -+ 97,108,32,109,101,116,104,111,100,32,119,104,105,99,104,32, -+ 119,114,105,116,101,115,32,100,97,116,97,32,40,98,121,116, -+ 101,115,41,32,116,111,32,97,32,102,105,108,101,32,112,97, -+ 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, ++ 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, ++ 8,0,100,9,0,132,0,0,90,7,0,100,10,0,83,41, ++ 11,218,13,95,76,111,97,100,101,114,66,97,115,105,99,115, ++ 122,83,66,97,115,101,32,99,108,97,115,115,32,111,102,32, ++ 99,111,109,109,111,110,32,99,111,100,101,32,110,101,101,100, ++ 101,100,32,98,121,32,98,111,116,104,32,83,111,117,114,99, ++ 101,76,111,97,100,101,114,32,97,110,100,10,32,32,32,32, ++ 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, ++ 97,100,101,114,46,99,2,0,0,0,0,0,0,0,5,0, ++ 0,0,3,0,0,0,67,0,0,0,115,88,0,0,0,116, ++ 0,0,124,0,0,106,1,0,124,1,0,131,1,0,131,1, ++ 0,100,1,0,25,125,2,0,124,2,0,106,2,0,100,2, ++ 0,100,1,0,131,2,0,100,3,0,25,125,3,0,124,1, ++ 0,106,3,0,100,2,0,131,1,0,100,4,0,25,125,4, ++ 0,124,3,0,100,5,0,107,2,0,111,87,0,124,4,0, ++ 100,5,0,107,3,0,83,41,6,122,141,67,111,110,99,114, ++ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, ++ 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, ++ 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98, ++ 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32, ++ 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114, ++ 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102, ++ 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105, ++ 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105, ++ 116,95,95,46,112,121,39,46,114,30,0,0,0,114,59,0, ++ 0,0,114,60,0,0,0,114,57,0,0,0,218,8,95,95, ++ 105,110,105,116,95,95,41,4,114,39,0,0,0,114,158,0, ++ 0,0,114,35,0,0,0,114,33,0,0,0,41,5,114,109, ++ 0,0,0,114,127,0,0,0,114,95,0,0,0,90,13,102, ++ 105,108,101,110,97,109,101,95,98,97,115,101,90,9,116,97, ++ 105,108,95,110,97,109,101,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,160,0,0,0,133,2,0,0,115, ++ 8,0,0,0,0,3,25,1,22,1,19,1,122,24,95,76, ++ 111,97,100,101,114,66,97,115,105,99,115,46,105,115,95,112, ++ 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,2, ++ 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, ++ 100,1,0,83,41,2,122,42,85,115,101,32,100,101,102,97, ++ 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, ++ 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, ++ 110,46,78,114,5,0,0,0,41,2,114,109,0,0,0,114, ++ 165,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,13,99,114,101,97,116,101,95,109,111,100,117, ++ 108,101,141,2,0,0,115,0,0,0,0,122,27,95,76,111, ++ 97,100,101,114,66,97,115,105,99,115,46,99,114,101,97,116, ++ 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, ++ 0,3,0,0,0,4,0,0,0,67,0,0,0,115,80,0, ++ 0,0,124,0,0,106,0,0,124,1,0,106,1,0,131,1, ++ 0,125,2,0,124,2,0,100,1,0,107,8,0,114,54,0, ++ 116,2,0,100,2,0,106,3,0,124,1,0,106,1,0,131, ++ 1,0,131,1,0,130,1,0,116,4,0,106,5,0,116,6, ++ 0,124,2,0,124,1,0,106,7,0,131,3,0,1,100,1, ++ 0,83,41,3,122,19,69,120,101,99,117,116,101,32,116,104, ++ 101,32,109,111,100,117,108,101,46,78,122,52,99,97,110,110, ++ 111,116,32,108,111,97,100,32,109,111,100,117,108,101,32,123, ++ 33,114,125,32,119,104,101,110,32,103,101,116,95,99,111,100, ++ 101,40,41,32,114,101,116,117,114,110,115,32,78,111,110,101, ++ 41,8,218,8,103,101,116,95,99,111,100,101,114,113,0,0, ++ 0,114,108,0,0,0,114,48,0,0,0,114,122,0,0,0, ++ 218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,97, ++ 109,101,115,95,114,101,109,111,118,101,100,218,4,101,120,101, ++ 99,114,119,0,0,0,41,3,114,109,0,0,0,218,6,109, ++ 111,100,117,108,101,114,147,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,11,101,120,101,99,95, ++ 109,111,100,117,108,101,144,2,0,0,115,10,0,0,0,0, ++ 2,18,1,12,1,9,1,15,1,122,25,95,76,111,97,100, ++ 101,114,66,97,115,105,99,115,46,101,120,101,99,95,109,111, ++ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,116,0, ++ 0,106,1,0,124,0,0,124,1,0,131,2,0,83,41,1, ++ 78,41,2,114,122,0,0,0,218,17,95,108,111,97,100,95, ++ 109,111,100,117,108,101,95,115,104,105,109,41,2,114,109,0, ++ 0,0,114,127,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,218,11,108,111,97,100,95,109,111,100, ++ 117,108,101,152,2,0,0,115,2,0,0,0,0,1,122,25, ++ 95,76,111,97,100,101,114,66,97,115,105,99,115,46,108,111, ++ 97,100,95,109,111,100,117,108,101,78,41,8,114,113,0,0, ++ 0,114,112,0,0,0,114,114,0,0,0,114,115,0,0,0, ++ 114,160,0,0,0,114,187,0,0,0,114,192,0,0,0,114, ++ 194,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,185,0,0,0,128,2,0, ++ 0,115,10,0,0,0,12,3,6,2,12,8,12,3,12,8, ++ 114,185,0,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,4,0,0,0,64,0,0,0,115,106,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, ++ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, ++ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, ++ 7,0,100,8,0,132,0,0,90,6,0,100,9,0,100,10, ++ 0,132,0,0,90,7,0,100,11,0,100,18,0,100,13,0, ++ 100,14,0,132,0,1,90,8,0,100,15,0,100,16,0,132, ++ 0,0,90,9,0,100,17,0,83,41,19,218,12,83,111,117, ++ 114,99,101,76,111,97,100,101,114,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,10, ++ 0,0,0,116,0,0,130,1,0,100,1,0,83,41,2,122, ++ 178,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, ++ 32,116,104,97,116,32,114,101,116,117,114,110,115,32,116,104, ++ 101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116, ++ 105,109,101,32,40,97,110,32,105,110,116,41,32,102,111,114, ++ 32,116,104,101,10,32,32,32,32,32,32,32,32,115,112,101, ++ 99,105,102,105,101,100,32,112,97,116,104,44,32,119,104,101, ++ 114,101,32,112,97,116,104,32,105,115,32,97,32,115,116,114, ++ 46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101, + 115,32,73,79,69,114,114,111,114,32,119,104,101,110,32,116, + 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, + 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, +- 32,32,32,114,133,0,0,0,41,1,114,196,0,0,0,41, +- 2,114,108,0,0,0,114,35,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104, +- 95,115,116,97,116,115,166,2,0,0,115,2,0,0,0,0, +- 11,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, +- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, +- 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, +- 16,0,0,0,124,0,0,106,0,0,124,2,0,124,3,0, +- 131,2,0,83,41,1,122,228,79,112,116,105,111,110,97,108, +- 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, +- 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, +- 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, +- 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, +- 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, +- 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, +- 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, +- 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, +- 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, +- 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, +- 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, +- 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, +- 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, +- 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, +- 115,101,116,95,100,97,116,97,41,4,114,108,0,0,0,114, +- 90,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, +- 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, +- 101,99,111,100,101,179,2,0,0,115,2,0,0,0,0,8, +- 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, +- 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, +- 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, +- 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,150, +- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, +- 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, +- 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, +- 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, +- 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, +- 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, +- 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, +- 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, +- 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, +- 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,108, +- 0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,198,0,0, +- 0,189,2,0,0,115,0,0,0,0,122,21,83,111,117,114, +- 99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, +- 97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0, +- 0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0, +- 0,124,1,0,131,1,0,125,2,0,121,19,0,124,0,0, +- 106,1,0,124,2,0,131,1,0,125,3,0,87,110,58,0, +- 4,116,2,0,107,10,0,114,94,0,1,125,4,0,1,122, +- 26,0,116,3,0,100,1,0,100,2,0,124,1,0,131,1, +- 1,124,4,0,130,2,0,87,89,100,3,0,100,3,0,125, +- 4,0,126,4,0,88,110,1,0,88,116,4,0,124,3,0, +- 131,1,0,83,41,4,122,52,67,111,110,99,114,101,116,101, +- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, +- 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, +- 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, +- 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, +- 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, +- 97,116,97,40,41,114,106,0,0,0,78,41,5,114,157,0, +- 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, +- 0,114,107,0,0,0,114,155,0,0,0,41,5,114,108,0, +- 0,0,114,126,0,0,0,114,35,0,0,0,114,153,0,0, +- 0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, +- 101,196,2,0,0,115,14,0,0,0,0,2,15,1,3,1, +- 19,1,18,1,9,1,31,1,122,23,83,111,117,114,99,101, +- 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, +- 101,218,9,95,111,112,116,105,109,105,122,101,114,29,0,0, +- 0,99,3,0,0,0,1,0,0,0,4,0,0,0,9,0, +- 0,0,67,0,0,0,115,34,0,0,0,116,0,0,106,1, +- 0,116,2,0,124,1,0,124,2,0,100,1,0,100,2,0, +- 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, +- 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, +- 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, +- 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, +- 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, +- 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, +- 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, +- 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, +- 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, +- 32,32,32,114,189,0,0,0,218,12,100,111,110,116,95,105, +- 110,104,101,114,105,116,84,114,68,0,0,0,41,3,114,121, +- 0,0,0,114,188,0,0,0,218,7,99,111,109,112,105,108, +- 101,41,4,114,108,0,0,0,114,53,0,0,0,114,35,0, +- 0,0,114,203,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,116, +- 111,95,99,111,100,101,206,2,0,0,115,4,0,0,0,0, +- 5,21,1,122,27,83,111,117,114,99,101,76,111,97,100,101, +- 114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,101, +- 99,2,0,0,0,0,0,0,0,10,0,0,0,43,0,0, +- 0,67,0,0,0,115,174,1,0,0,124,0,0,106,0,0, +- 124,1,0,131,1,0,125,2,0,100,1,0,125,3,0,121, +- 16,0,116,1,0,124,2,0,131,1,0,125,4,0,87,110, +- 24,0,4,116,2,0,107,10,0,114,63,0,1,1,1,100, +- 1,0,125,4,0,89,110,202,0,88,121,19,0,124,0,0, +- 106,3,0,124,2,0,131,1,0,125,5,0,87,110,18,0, +- 4,116,4,0,107,10,0,114,103,0,1,1,1,89,110,162, +- 0,88,116,5,0,124,5,0,100,2,0,25,131,1,0,125, +- 3,0,121,19,0,124,0,0,106,6,0,124,4,0,131,1, +- 0,125,6,0,87,110,18,0,4,116,7,0,107,10,0,114, +- 159,0,1,1,1,89,110,106,0,88,121,34,0,116,8,0, +- 124,6,0,100,3,0,124,5,0,100,4,0,124,1,0,100, +- 5,0,124,4,0,131,1,3,125,7,0,87,110,24,0,4, +- 116,9,0,116,10,0,102,2,0,107,10,0,114,220,0,1, +- 1,1,89,110,45,0,88,116,11,0,100,6,0,124,4,0, +- 124,2,0,131,3,0,1,116,12,0,124,7,0,100,4,0, +- 124,1,0,100,7,0,124,4,0,100,8,0,124,2,0,131, +- 1,3,83,124,0,0,106,6,0,124,2,0,131,1,0,125, +- 8,0,124,0,0,106,13,0,124,8,0,124,2,0,131,2, +- 0,125,9,0,116,11,0,100,9,0,124,2,0,131,2,0, +- 1,116,14,0,106,15,0,12,114,170,1,124,4,0,100,1, +- 0,107,9,0,114,170,1,124,3,0,100,1,0,107,9,0, +- 114,170,1,116,16,0,124,9,0,124,3,0,116,17,0,124, +- 8,0,131,1,0,131,3,0,125,6,0,121,36,0,124,0, +- 0,106,18,0,124,2,0,124,4,0,124,6,0,131,3,0, +- 1,116,11,0,100,10,0,124,4,0,131,2,0,1,87,110, +- 18,0,4,116,2,0,107,10,0,114,169,1,1,1,1,89, +- 110,1,0,88,124,9,0,83,41,11,122,190,67,111,110,99, +- 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, +- 97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10, +- 32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32, +- 111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117, +- 105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32, +- 116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, +- 100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32, +- 32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101, +- 116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111, +- 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, +- 10,10,32,32,32,32,32,32,32,32,78,114,133,0,0,0, +- 114,138,0,0,0,114,106,0,0,0,114,35,0,0,0,122, +- 13,123,125,32,109,97,116,99,104,101,115,32,123,125,114,89, +- 0,0,0,114,90,0,0,0,122,19,99,111,100,101,32,111, +- 98,106,101,99,116,32,102,114,111,109,32,123,125,122,10,119, +- 114,111,116,101,32,123,33,114,125,41,19,114,157,0,0,0, +- 114,79,0,0,0,114,66,0,0,0,114,197,0,0,0,114, +- 195,0,0,0,114,14,0,0,0,114,200,0,0,0,114,40, +- 0,0,0,114,141,0,0,0,114,107,0,0,0,114,136,0, +- 0,0,114,105,0,0,0,114,147,0,0,0,114,206,0,0, +- 0,114,7,0,0,0,218,19,100,111,110,116,95,119,114,105, +- 116,101,95,98,121,116,101,99,111,100,101,114,150,0,0,0, +- 114,31,0,0,0,114,199,0,0,0,41,10,114,108,0,0, +- 0,114,126,0,0,0,114,90,0,0,0,114,139,0,0,0, +- 114,89,0,0,0,218,2,115,116,114,53,0,0,0,218,10, +- 98,121,116,101,115,95,100,97,116,97,114,153,0,0,0,90, +- 11,99,111,100,101,95,111,98,106,101,99,116,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,187,0,0,0, +- 214,2,0,0,115,78,0,0,0,0,7,15,1,6,1,3, +- 1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,16, +- 1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,13, +- 1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,15, +- 1,18,1,13,1,22,1,12,1,9,1,15,1,3,1,19, +- 1,17,1,13,1,5,1,122,21,83,111,117,114,99,101,76, +- 111,97,100,101,114,46,103,101,116,95,99,111,100,101,78,114, +- 87,0,0,0,41,10,114,112,0,0,0,114,111,0,0,0, +- 114,113,0,0,0,114,196,0,0,0,114,197,0,0,0,114, +- 199,0,0,0,114,198,0,0,0,114,202,0,0,0,114,206, +- 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0, +- 0,156,2,0,0,115,14,0,0,0,12,2,12,8,12,13, +- 12,10,12,7,12,10,18,8,114,194,0,0,0,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, +- 0,0,115,112,0,0,0,101,0,0,90,1,0,100,0,0, +- 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, +- 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, +- 0,100,6,0,100,7,0,132,0,0,90,6,0,101,7,0, +- 135,0,0,102,1,0,100,8,0,100,9,0,134,0,0,131, +- 1,0,90,8,0,101,7,0,100,10,0,100,11,0,132,0, +- 0,131,1,0,90,9,0,100,12,0,100,13,0,132,0,0, +- 90,10,0,135,0,0,83,41,14,218,10,70,105,108,101,76, +- 111,97,100,101,114,122,103,66,97,115,101,32,102,105,108,101, +- 32,108,111,97,100,101,114,32,99,108,97,115,115,32,119,104, +- 105,99,104,32,105,109,112,108,101,109,101,110,116,115,32,116, +- 104,101,32,108,111,97,100,101,114,32,112,114,111,116,111,99, +- 111,108,32,109,101,116,104,111,100,115,32,116,104,97,116,10, +- 32,32,32,32,114,101,113,117,105,114,101,32,102,105,108,101, +- 32,115,121,115,116,101,109,32,117,115,97,103,101,46,99,3, +- 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, +- 0,0,0,115,22,0,0,0,124,1,0,124,0,0,95,0, +- 0,124,2,0,124,0,0,95,1,0,100,1,0,83,41,2, +- 122,75,67,97,99,104,101,32,116,104,101,32,109,111,100,117, +- 108,101,32,110,97,109,101,32,97,110,100,32,116,104,101,32, +- 112,97,116,104,32,116,111,32,116,104,101,32,102,105,108,101, +- 32,102,111,117,110,100,32,98,121,32,116,104,101,10,32,32, +- 32,32,32,32,32,32,102,105,110,100,101,114,46,78,41,2, +- 114,106,0,0,0,114,35,0,0,0,41,3,114,108,0,0, +- 0,114,126,0,0,0,114,35,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,185,0,0,0,15, +- 3,0,0,115,4,0,0,0,0,3,9,1,122,19,70,105, +- 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, +- 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, +- 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, +- 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, +- 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, +- 41,2,218,9,95,95,99,108,97,115,115,95,95,114,118,0, +- 0,0,41,2,114,108,0,0,0,218,5,111,116,104,101,114, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 6,95,95,101,113,95,95,21,3,0,0,115,4,0,0,0, +- 0,1,18,1,122,17,70,105,108,101,76,111,97,100,101,114, +- 46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0, +- 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, +- 0,116,0,0,124,0,0,106,1,0,131,1,0,116,0,0, +- 124,0,0,106,2,0,131,1,0,65,83,41,1,78,41,3, +- 218,4,104,97,115,104,114,106,0,0,0,114,35,0,0,0, +- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,8,95,95,104,97,115,104,95,95, +- 25,3,0,0,115,2,0,0,0,0,1,122,19,70,105,108, +- 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, +- 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, +- 0,3,0,0,0,115,22,0,0,0,116,0,0,116,1,0, +- 124,0,0,131,2,0,106,2,0,124,1,0,131,1,0,83, +- 41,1,122,100,76,111,97,100,32,97,32,109,111,100,117,108, +- 101,32,102,114,111,109,32,97,32,102,105,108,101,46,10,10, +- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, +- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, +- 32,32,32,32,32,32,32,32,41,3,218,5,115,117,112,101, +- 114,114,210,0,0,0,114,193,0,0,0,41,2,114,108,0, +- 0,0,114,126,0,0,0,41,1,114,211,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,193,0,0,0,28,3,0, +- 0,115,2,0,0,0,0,10,122,22,70,105,108,101,76,111, +- 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, +- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, +- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, +- 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, +- 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, +- 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, +- 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, +- 1,114,35,0,0,0,41,2,114,108,0,0,0,114,126,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,157,0,0,0,40,3,0,0,115,2,0,0,0,0, +- 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, +- 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, +- 0,0,0,3,0,0,0,9,0,0,0,67,0,0,0,115, +- 42,0,0,0,116,0,0,106,1,0,124,1,0,100,1,0, +- 131,2,0,143,17,0,125,2,0,124,2,0,106,2,0,131, +- 0,0,83,87,100,2,0,81,82,88,100,2,0,83,41,3, +- 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, +- 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, +- 97,119,32,98,121,116,101,115,46,218,1,114,78,41,3,114, +- 49,0,0,0,114,50,0,0,0,90,4,114,101,97,100,41, +- 3,114,108,0,0,0,114,35,0,0,0,114,54,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 200,0,0,0,45,3,0,0,115,4,0,0,0,0,2,21, +- 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, +- 116,95,100,97,116,97,41,11,114,112,0,0,0,114,111,0, +- 0,0,114,113,0,0,0,114,114,0,0,0,114,185,0,0, +- 0,114,213,0,0,0,114,215,0,0,0,114,123,0,0,0, +- 114,193,0,0,0,114,157,0,0,0,114,200,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,41,1,114,211,0,0,0, +- 114,5,0,0,0,114,210,0,0,0,10,3,0,0,115,14, +- 0,0,0,12,3,6,2,12,6,12,4,12,3,24,12,18, +- 5,114,210,0,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,4,0,0,0,64,0,0,0,115,64,0,0,0, +- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, +- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, +- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, +- 100,8,0,100,9,0,132,0,1,90,6,0,100,10,0,83, +- 41,11,218,16,83,111,117,114,99,101,70,105,108,101,76,111, +- 97,100,101,114,122,62,67,111,110,99,114,101,116,101,32,105, +- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, +- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, +- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, +- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,4,0,0,0,67,0,0,0,115,34,0,0,0,116,0, +- 0,124,1,0,131,1,0,125,2,0,100,1,0,124,2,0, +- 106,1,0,100,2,0,124,2,0,106,2,0,105,2,0,83, +- 41,3,122,33,82,101,116,117,114,110,32,116,104,101,32,109, +- 101,116,97,100,97,116,97,32,102,111,114,32,116,104,101,32, +- 112,97,116,104,46,114,133,0,0,0,114,134,0,0,0,41, +- 3,114,39,0,0,0,218,8,115,116,95,109,116,105,109,101, +- 90,7,115,116,95,115,105,122,101,41,3,114,108,0,0,0, +- 114,35,0,0,0,114,208,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,197,0,0,0,55,3, +- 0,0,115,4,0,0,0,0,2,12,1,122,27,83,111,117, +- 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, +- 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, +- 0,5,0,0,0,5,0,0,0,67,0,0,0,115,34,0, +- 0,0,116,0,0,124,1,0,131,1,0,125,4,0,124,0, +- 0,106,1,0,124,2,0,124,3,0,100,1,0,124,4,0, +- 131,2,1,83,41,2,78,218,5,95,109,111,100,101,41,2, +- 114,97,0,0,0,114,198,0,0,0,41,5,114,108,0,0, +- 0,114,90,0,0,0,114,89,0,0,0,114,53,0,0,0, +- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,199,0,0,0,60,3,0,0,115,4,0, +- 0,0,0,2,12,1,122,32,83,111,117,114,99,101,70,105, +- 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, +- 98,121,116,101,99,111,100,101,114,220,0,0,0,105,182,1, +- 0,0,99,3,0,0,0,1,0,0,0,9,0,0,0,17, +- 0,0,0,67,0,0,0,115,53,1,0,0,116,0,0,124, +- 1,0,131,1,0,92,2,0,125,4,0,125,5,0,103,0, +- 0,125,6,0,120,54,0,124,4,0,114,80,0,116,1,0, +- 124,4,0,131,1,0,12,114,80,0,116,0,0,124,4,0, +- 131,1,0,92,2,0,125,4,0,125,7,0,124,6,0,106, +- 2,0,124,7,0,131,1,0,1,113,27,0,87,120,132,0, +- 116,3,0,124,6,0,131,1,0,68,93,118,0,125,7,0, +- 116,4,0,124,4,0,124,7,0,131,2,0,125,4,0,121, +- 17,0,116,5,0,106,6,0,124,4,0,131,1,0,1,87, +- 113,94,0,4,116,7,0,107,10,0,114,155,0,1,1,1, +- 119,94,0,89,113,94,0,4,116,8,0,107,10,0,114,211, +- 0,1,125,8,0,1,122,25,0,116,9,0,100,1,0,124, +- 4,0,124,8,0,131,3,0,1,100,2,0,83,87,89,100, +- 2,0,100,2,0,125,8,0,126,8,0,88,113,94,0,88, +- 113,94,0,87,121,33,0,116,10,0,124,1,0,124,2,0, +- 124,3,0,131,3,0,1,116,9,0,100,3,0,124,1,0, +- 131,2,0,1,87,110,53,0,4,116,8,0,107,10,0,114, +- 48,1,1,125,8,0,1,122,21,0,116,9,0,100,1,0, +- 124,1,0,124,8,0,131,3,0,1,87,89,100,2,0,100, +- 2,0,125,8,0,126,8,0,88,110,1,0,88,100,2,0, +- 83,41,4,122,27,87,114,105,116,101,32,98,121,116,101,115, +- 32,100,97,116,97,32,116,111,32,97,32,102,105,108,101,46, +- 122,27,99,111,117,108,100,32,110,111,116,32,99,114,101,97, +- 116,101,32,123,33,114,125,58,32,123,33,114,125,78,122,12, +- 99,114,101,97,116,101,100,32,123,33,114,125,41,11,114,38, +- 0,0,0,114,46,0,0,0,114,163,0,0,0,114,33,0, +- 0,0,114,28,0,0,0,114,3,0,0,0,90,5,109,107, +- 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, +- 114,114,111,114,114,40,0,0,0,114,105,0,0,0,114,55, +- 0,0,0,41,9,114,108,0,0,0,114,35,0,0,0,114, +- 53,0,0,0,114,220,0,0,0,218,6,112,97,114,101,110, +- 116,114,94,0,0,0,114,27,0,0,0,114,23,0,0,0, +- 114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,198,0,0,0,65,3,0,0,115,38,0, +- 0,0,0,2,18,1,6,2,22,1,18,1,17,2,19,1, +- 15,1,3,1,17,1,13,2,7,1,18,3,16,1,27,1, +- 3,1,16,1,17,1,18,2,122,25,83,111,117,114,99,101, +- 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, +- 97,116,97,78,41,7,114,112,0,0,0,114,111,0,0,0, +- 114,113,0,0,0,114,114,0,0,0,114,197,0,0,0,114, +- 199,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,218,0, +- 0,0,51,3,0,0,115,8,0,0,0,12,2,6,2,12, +- 5,12,5,114,218,0,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,0, +- 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, +- 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, +- 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,83, +- 41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105, +- 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, +- 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, +- 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, +- 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, +- 5,0,0,0,6,0,0,0,67,0,0,0,115,76,0,0, +- 0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,0, +- 124,0,0,106,1,0,124,2,0,131,1,0,125,3,0,116, +- 2,0,124,3,0,100,1,0,124,1,0,100,2,0,124,2, +- 0,131,1,2,125,4,0,116,3,0,124,4,0,100,1,0, +- 124,1,0,100,3,0,124,2,0,131,1,2,83,41,4,78, +- 114,106,0,0,0,114,35,0,0,0,114,89,0,0,0,41, +- 4,114,157,0,0,0,114,200,0,0,0,114,141,0,0,0, +- 114,147,0,0,0,41,5,114,108,0,0,0,114,126,0,0, +- 0,114,35,0,0,0,114,53,0,0,0,114,209,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 187,0,0,0,98,3,0,0,115,8,0,0,0,0,1,15, +- 1,15,1,24,1,122,29,83,111,117,114,99,101,108,101,115, +- 115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, +- 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, +- 0,83,41,2,122,39,82,101,116,117,114,110,32,78,111,110, +- 101,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111, +- 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,4, +- 0,0,0,41,2,114,108,0,0,0,114,126,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,202, +- 0,0,0,104,3,0,0,115,2,0,0,0,0,2,122,31, +- 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, +- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,78, +- 41,6,114,112,0,0,0,114,111,0,0,0,114,113,0,0, +- 0,114,114,0,0,0,114,187,0,0,0,114,202,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,223,0,0,0,94,3,0,0,115,6,0, +- 0,0,12,2,6,2,12,6,114,223,0,0,0,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, +- 0,0,115,136,0,0,0,101,0,0,90,1,0,100,0,0, ++ 32,32,32,78,41,1,218,7,73,79,69,114,114,111,114,41, ++ 2,114,109,0,0,0,114,36,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,10,112,97,116,104, ++ 95,109,116,105,109,101,158,2,0,0,115,2,0,0,0,0, ++ 6,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, ++ 112,97,116,104,95,109,116,105,109,101,99,2,0,0,0,0, ++ 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, ++ 19,0,0,0,100,1,0,124,0,0,106,0,0,124,1,0, ++ 131,1,0,105,1,0,83,41,2,97,170,1,0,0,79,112, ++ 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, ++ 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, ++ 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, ++ 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, ++ 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, ++ 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, ++ 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, ++ 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, ++ 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, ++ 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, ++ 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, ++ 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, ++ 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, ++ 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, ++ 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, ++ 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, ++ 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, ++ 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, + 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, + 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, -+ 108,111,119,115,32,102,111,114,32,116,104,101,32,119,114,105, -+ 116,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, ++ 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, ++ 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, -+ 78,114,5,0,0,0,41,3,114,72,0,0,0,114,36,0, -+ 0,0,114,54,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,38,1,0,0,229,5,0,0,115, -+ 0,0,0,0,122,21,83,111,117,114,99,101,76,111,97,100, -+ 101,114,46,115,101,116,95,100,97,116,97,99,2,0,0,0, -+ 0,0,0,0,5,0,0,0,16,0,0,0,67,0,0,0, -+ 115,105,0,0,0,124,0,0,106,0,0,124,1,0,131,1, -+ 0,125,2,0,121,19,0,124,0,0,106,1,0,124,2,0, -+ 131,1,0,125,3,0,87,110,58,0,4,116,2,0,107,10, -+ 0,114,94,0,1,125,4,0,1,122,26,0,116,3,0,100, -+ 1,0,100,2,0,124,1,0,131,1,1,124,4,0,130,2, -+ 0,87,89,100,3,0,100,3,0,125,4,0,126,4,0,88, -+ 110,1,0,88,116,4,0,124,3,0,131,1,0,83,41,4, -+ 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, -+ 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, -+ 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, -+ 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, -+ 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, -+ 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, -+ 68,0,0,0,78,41,5,114,239,0,0,0,218,8,103,101, -+ 116,95,100,97,116,97,114,41,0,0,0,114,154,0,0,0, -+ 114,204,0,0,0,41,5,114,72,0,0,0,114,159,0,0, -+ 0,114,36,0,0,0,114,202,0,0,0,218,3,101,120,99, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 17,1,0,0,236,5,0,0,115,14,0,0,0,0,2,15, -+ 1,3,1,19,1,18,1,9,1,31,1,122,23,83,111,117, -+ 114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, -+ 117,114,99,101,218,9,95,111,112,116,105,109,105,122,101,114, -+ 30,0,0,0,99,3,0,0,0,1,0,0,0,4,0,0, -+ 0,9,0,0,0,67,0,0,0,115,31,0,0,0,116,0, -+ 0,116,1,0,124,1,0,124,2,0,100,1,0,100,2,0, -+ 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, -+ 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, -+ 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, -+ 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, -+ 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, -+ 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, -+ 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, -+ 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, -+ 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, -+ 32,32,32,114,176,0,0,0,218,12,100,111,110,116,95,105, -+ 110,104,101,114,105,116,84,114,119,0,0,0,41,2,114,115, -+ 0,0,0,218,7,99,111,109,112,105,108,101,41,4,114,72, -+ 0,0,0,114,54,0,0,0,114,36,0,0,0,114,42,1, ++ 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, ++ 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, ++ 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, ++ 32,32,32,32,32,32,32,32,114,134,0,0,0,41,1,114, ++ 197,0,0,0,41,2,114,109,0,0,0,114,36,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 10,112,97,116,104,95,115,116,97,116,115,166,2,0,0,115, ++ 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, ++ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, ++ 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, ++ 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, ++ 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, ++ 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, ++ 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, ++ 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, ++ 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, ++ 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, ++ 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, ++ 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, ++ 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, ++ 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, ++ 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, ++ 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, ++ 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, ++ 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, ++ 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, ++ 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, ++ 109,0,0,0,114,91,0,0,0,90,10,99,97,99,104,101, ++ 95,112,97,116,104,114,54,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,15,95,99,97,99,104, ++ 101,95,98,121,116,101,99,111,100,101,179,2,0,0,115,2, ++ 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, ++ 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, ++ 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, ++ 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, ++ 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, ++ 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, ++ 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, ++ 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, ++ 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, ++ 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, ++ 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, ++ 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, ++ 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, ++ 115,46,10,32,32,32,32,32,32,32,32,78,114,5,0,0, ++ 0,41,3,114,109,0,0,0,114,36,0,0,0,114,54,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,199,0,0,0,189,2,0,0,115,0,0,0,0,122, ++ 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, ++ 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, ++ 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, ++ 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, ++ 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, ++ 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, ++ 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, ++ 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, ++ 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, ++ 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, ++ 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, ++ 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, ++ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, ++ 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, ++ 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, ++ 103,101,116,95,100,97,116,97,40,41,114,107,0,0,0,78, ++ 41,5,114,158,0,0,0,218,8,103,101,116,95,100,97,116, ++ 97,114,41,0,0,0,114,108,0,0,0,114,156,0,0,0, ++ 41,5,114,109,0,0,0,114,127,0,0,0,114,36,0,0, ++ 0,114,154,0,0,0,218,3,101,120,99,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, ++ 115,111,117,114,99,101,196,2,0,0,115,14,0,0,0,0, ++ 2,15,1,3,1,19,1,18,1,9,1,31,1,122,23,83, ++ 111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,95, ++ 115,111,117,114,99,101,218,9,95,111,112,116,105,109,105,122, ++ 101,114,30,0,0,0,99,3,0,0,0,1,0,0,0,4, ++ 0,0,0,9,0,0,0,67,0,0,0,115,34,0,0,0, ++ 116,0,0,106,1,0,116,2,0,124,1,0,124,2,0,100, ++ 1,0,100,2,0,100,3,0,100,4,0,124,3,0,131,4, ++ 2,83,41,5,122,130,82,101,116,117,114,110,32,116,104,101, ++ 32,99,111,100,101,32,111,98,106,101,99,116,32,99,111,109, ++ 112,105,108,101,100,32,102,114,111,109,32,115,111,117,114,99, ++ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, ++ 39,100,97,116,97,39,32,97,114,103,117,109,101,110,116,32, ++ 99,97,110,32,98,101,32,97,110,121,32,111,98,106,101,99, ++ 116,32,116,121,112,101,32,116,104,97,116,32,99,111,109,112, ++ 105,108,101,40,41,32,115,117,112,112,111,114,116,115,46,10, ++ 32,32,32,32,32,32,32,32,114,190,0,0,0,218,12,100, ++ 111,110,116,95,105,110,104,101,114,105,116,84,114,69,0,0, ++ 0,41,3,114,122,0,0,0,114,189,0,0,0,218,7,99, ++ 111,109,112,105,108,101,41,4,114,109,0,0,0,114,54,0, ++ 0,0,114,36,0,0,0,114,204,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,14,115,111,117, ++ 114,99,101,95,116,111,95,99,111,100,101,206,2,0,0,115, ++ 4,0,0,0,0,5,21,1,122,27,83,111,117,114,99,101, ++ 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, ++ 95,99,111,100,101,99,2,0,0,0,0,0,0,0,10,0, ++ 0,0,43,0,0,0,67,0,0,0,115,174,1,0,0,124, ++ 0,0,106,0,0,124,1,0,131,1,0,125,2,0,100,1, ++ 0,125,3,0,121,16,0,116,1,0,124,2,0,131,1,0, ++ 125,4,0,87,110,24,0,4,116,2,0,107,10,0,114,63, ++ 0,1,1,1,100,1,0,125,4,0,89,110,202,0,88,121, ++ 19,0,124,0,0,106,3,0,124,2,0,131,1,0,125,5, ++ 0,87,110,18,0,4,116,4,0,107,10,0,114,103,0,1, ++ 1,1,89,110,162,0,88,116,5,0,124,5,0,100,2,0, ++ 25,131,1,0,125,3,0,121,19,0,124,0,0,106,6,0, ++ 124,4,0,131,1,0,125,6,0,87,110,18,0,4,116,7, ++ 0,107,10,0,114,159,0,1,1,1,89,110,106,0,88,121, ++ 34,0,116,8,0,124,6,0,100,3,0,124,5,0,100,4, ++ 0,124,1,0,100,5,0,124,4,0,131,1,3,125,7,0, ++ 87,110,24,0,4,116,9,0,116,10,0,102,2,0,107,10, ++ 0,114,220,0,1,1,1,89,110,45,0,88,116,11,0,100, ++ 6,0,124,4,0,124,2,0,131,3,0,1,116,12,0,124, ++ 7,0,100,4,0,124,1,0,100,7,0,124,4,0,100,8, ++ 0,124,2,0,131,1,3,83,124,0,0,106,6,0,124,2, ++ 0,131,1,0,125,8,0,124,0,0,106,13,0,124,8,0, ++ 124,2,0,131,2,0,125,9,0,116,11,0,100,9,0,124, ++ 2,0,131,2,0,1,116,14,0,106,15,0,12,114,170,1, ++ 124,4,0,100,1,0,107,9,0,114,170,1,124,3,0,100, ++ 1,0,107,9,0,114,170,1,116,16,0,124,9,0,124,3, ++ 0,116,17,0,124,8,0,131,1,0,131,3,0,125,6,0, ++ 121,36,0,124,0,0,106,18,0,124,2,0,124,4,0,124, ++ 6,0,131,3,0,1,116,11,0,100,10,0,124,4,0,131, ++ 2,0,1,87,110,18,0,4,116,2,0,107,10,0,114,169, ++ 1,1,1,1,89,110,1,0,88,124,9,0,83,41,11,122, ++ 190,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, ++ 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, ++ 101,99,116,76,111,97,100,101,114,46,103,101,116,95,99,111, ++ 100,101,46,10,10,32,32,32,32,32,32,32,32,82,101,97, ++ 100,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, ++ 32,114,101,113,117,105,114,101,115,32,112,97,116,104,95,115, ++ 116,97,116,115,32,116,111,32,98,101,32,105,109,112,108,101, ++ 109,101,110,116,101,100,46,32,84,111,32,119,114,105,116,101, ++ 10,32,32,32,32,32,32,32,32,98,121,116,101,99,111,100, ++ 101,44,32,115,101,116,95,100,97,116,97,32,109,117,115,116, ++ 32,97,108,115,111,32,98,101,32,105,109,112,108,101,109,101, ++ 110,116,101,100,46,10,10,32,32,32,32,32,32,32,32,78, ++ 114,134,0,0,0,114,139,0,0,0,114,107,0,0,0,114, ++ 36,0,0,0,122,13,123,125,32,109,97,116,99,104,101,115, ++ 32,123,125,114,90,0,0,0,114,91,0,0,0,122,19,99, ++ 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, ++ 123,125,122,10,119,114,111,116,101,32,123,33,114,125,41,19, ++ 114,158,0,0,0,114,80,0,0,0,114,67,0,0,0,114, ++ 198,0,0,0,114,196,0,0,0,114,15,0,0,0,114,201, ++ 0,0,0,114,41,0,0,0,114,142,0,0,0,114,108,0, ++ 0,0,114,137,0,0,0,114,106,0,0,0,114,148,0,0, ++ 0,114,207,0,0,0,114,8,0,0,0,218,19,100,111,110, ++ 116,95,119,114,105,116,101,95,98,121,116,101,99,111,100,101, ++ 114,151,0,0,0,114,32,0,0,0,114,200,0,0,0,41, ++ 10,114,109,0,0,0,114,127,0,0,0,114,91,0,0,0, ++ 114,140,0,0,0,114,90,0,0,0,218,2,115,116,114,54, ++ 0,0,0,218,10,98,121,116,101,115,95,100,97,116,97,114, ++ 154,0,0,0,90,11,99,111,100,101,95,111,98,106,101,99, ++ 116,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,188,0,0,0,214,2,0,0,115,78,0,0,0,0,7, ++ 15,1,6,1,3,1,16,1,13,1,11,2,3,1,19,1, ++ 13,1,5,2,16,1,3,1,19,1,13,1,5,2,3,1, ++ 9,1,12,1,13,1,19,1,5,2,9,1,7,1,15,1, ++ 6,1,7,1,15,1,18,1,13,1,22,1,12,1,9,1, ++ 15,1,3,1,19,1,17,1,13,1,5,1,122,21,83,111, ++ 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,99, ++ 111,100,101,78,114,88,0,0,0,41,10,114,113,0,0,0, ++ 114,112,0,0,0,114,114,0,0,0,114,197,0,0,0,114, ++ 198,0,0,0,114,200,0,0,0,114,199,0,0,0,114,203, ++ 0,0,0,114,207,0,0,0,114,188,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,14,115,111,117,114,99,101,95,116,111,95,99,111,100, -+ 101,246,5,0,0,115,4,0,0,0,0,5,18,1,122,27, -+ 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, -+ 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, -+ 0,0,0,0,10,0,0,0,43,0,0,0,67,0,0,0, -+ 115,177,1,0,0,124,0,0,106,0,0,124,1,0,131,1, -+ 0,125,2,0,100,1,0,125,3,0,121,16,0,116,1,0, -+ 124,2,0,131,1,0,125,4,0,87,110,24,0,4,116,2, -+ 0,107,10,0,114,63,0,1,1,1,100,1,0,125,4,0, -+ 89,110,202,0,88,121,19,0,124,0,0,106,3,0,124,2, -+ 0,131,1,0,125,5,0,87,110,18,0,4,116,4,0,107, -+ 10,0,114,103,0,1,1,1,89,110,162,0,88,116,5,0, -+ 124,5,0,100,2,0,25,131,1,0,125,3,0,121,19,0, -+ 124,0,0,106,6,0,124,4,0,131,1,0,125,6,0,87, -+ 110,18,0,4,116,7,0,107,10,0,114,159,0,1,1,1, -+ 89,110,106,0,88,121,34,0,116,8,0,124,6,0,100,3, -+ 0,124,5,0,100,4,0,124,1,0,100,5,0,124,4,0, -+ 131,1,3,125,7,0,87,110,24,0,4,116,9,0,116,10, -+ 0,102,2,0,107,10,0,114,220,0,1,1,1,89,110,45, -+ 0,88,116,11,0,100,6,0,124,4,0,124,2,0,131,3, -+ 0,1,116,12,0,124,7,0,100,4,0,124,1,0,100,7, -+ 0,124,4,0,100,8,0,124,2,0,131,1,3,83,124,0, -+ 0,106,6,0,124,2,0,131,1,0,125,8,0,124,0,0, -+ 106,13,0,124,8,0,124,2,0,131,2,0,125,9,0,116, -+ 11,0,100,9,0,124,2,0,131,2,0,1,116,14,0,106, -+ 15,0,12,114,173,1,124,4,0,100,1,0,107,9,0,114, -+ 173,1,124,3,0,100,1,0,107,9,0,114,173,1,116,16, -+ 0,124,9,0,124,3,0,116,17,0,124,8,0,131,1,0, -+ 131,3,0,125,6,0,121,36,0,124,0,0,106,18,0,124, -+ 2,0,124,4,0,124,6,0,131,3,0,1,116,11,0,100, -+ 10,0,124,4,0,131,2,0,1,87,113,173,1,4,116,2, -+ 0,107,10,0,114,169,1,1,1,1,89,113,173,1,88,110, -+ 0,0,124,9,0,83,41,11,122,190,67,111,110,99,114,101, -+ 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, -+ 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, -+ 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, -+ 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, -+ 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, -+ 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, -+ 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, -+ 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, -+ 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, -+ 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, -+ 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, -+ 32,32,32,32,32,32,32,32,78,114,184,0,0,0,114,188, -+ 0,0,0,114,68,0,0,0,114,36,0,0,0,122,13,123, -+ 125,32,109,97,116,99,104,101,115,32,123,125,114,141,0,0, -+ 0,114,142,0,0,0,122,19,99,111,100,101,32,111,98,106, -+ 101,99,116,32,102,114,111,109,32,123,125,122,10,119,114,111, -+ 116,101,32,123,33,114,125,41,19,114,239,0,0,0,114,133, -+ 0,0,0,114,125,0,0,0,114,37,1,0,0,114,35,1, -+ 0,0,114,15,0,0,0,114,40,1,0,0,114,41,0,0, -+ 0,114,191,0,0,0,114,154,0,0,0,114,187,0,0,0, -+ 114,153,0,0,0,114,196,0,0,0,114,45,1,0,0,114, -+ 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, -+ 95,98,121,116,101,99,111,100,101,114,199,0,0,0,114,32, -+ 0,0,0,114,39,1,0,0,41,10,114,72,0,0,0,114, -+ 159,0,0,0,114,142,0,0,0,114,189,0,0,0,114,141, -+ 0,0,0,218,2,115,116,114,54,0,0,0,218,10,98,121, -+ 116,101,115,95,100,97,116,97,114,202,0,0,0,90,11,99, -+ 111,100,101,95,111,98,106,101,99,116,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,16,1,0,0,254,5, -+ 0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,16, -+ 1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,3, -+ 1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,19, -+ 1,5,2,9,1,7,1,15,1,6,1,7,1,15,1,18, -+ 1,13,1,22,1,12,1,9,1,15,1,3,1,19,1,17, -+ 1,13,1,8,1,122,21,83,111,117,114,99,101,76,111,97, -+ 100,101,114,46,103,101,116,95,99,111,100,101,78,114,139,0, -+ 0,0,41,10,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,36,1,0,0,114,37,1,0,0,114,39,1, -+ 0,0,114,38,1,0,0,114,17,1,0,0,114,45,1,0, -+ 0,114,16,1,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,34,1,0,0,196, -+ 5,0,0,115,14,0,0,0,12,2,12,8,12,13,12,10, -+ 12,7,12,10,18,8,114,34,1,0,0,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -+ 115,112,0,0,0,101,0,0,90,1,0,100,0,0,90,2, ++ 0,114,195,0,0,0,156,2,0,0,115,14,0,0,0,12, ++ 2,12,8,12,13,12,10,12,7,12,10,18,8,114,195,0, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, ++ 0,0,0,0,0,0,0,115,112,0,0,0,101,0,0,90, ++ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, ++ 0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0, ++ 132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90, ++ 6,0,101,7,0,135,0,0,102,1,0,100,8,0,100,9, ++ 0,134,0,0,131,1,0,90,8,0,101,7,0,100,10,0, ++ 100,11,0,132,0,0,131,1,0,90,9,0,100,12,0,100, ++ 13,0,132,0,0,90,10,0,135,0,0,83,41,14,218,10, ++ 70,105,108,101,76,111,97,100,101,114,122,103,66,97,115,101, ++ 32,102,105,108,101,32,108,111,97,100,101,114,32,99,108,97, ++ 115,115,32,119,104,105,99,104,32,105,109,112,108,101,109,101, ++ 110,116,115,32,116,104,101,32,108,111,97,100,101,114,32,112, ++ 114,111,116,111,99,111,108,32,109,101,116,104,111,100,115,32, ++ 116,104,97,116,10,32,32,32,32,114,101,113,117,105,114,101, ++ 32,102,105,108,101,32,115,121,115,116,101,109,32,117,115,97, ++ 103,101,46,99,3,0,0,0,0,0,0,0,3,0,0,0, ++ 2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,0, ++ 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,100, ++ 1,0,83,41,2,122,75,67,97,99,104,101,32,116,104,101, ++ 32,109,111,100,117,108,101,32,110,97,109,101,32,97,110,100, ++ 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, ++ 32,102,105,108,101,32,102,111,117,110,100,32,98,121,32,116, ++ 104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,101, ++ 114,46,78,41,2,114,107,0,0,0,114,36,0,0,0,41, ++ 3,114,109,0,0,0,114,127,0,0,0,114,36,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 186,0,0,0,15,3,0,0,115,4,0,0,0,0,3,9, ++ 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, ++ 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,2, ++ 0,0,0,2,0,0,0,67,0,0,0,115,34,0,0,0, ++ 124,0,0,106,0,0,124,1,0,106,0,0,107,2,0,111, ++ 33,0,124,0,0,106,1,0,124,1,0,106,1,0,107,2, ++ 0,83,41,1,78,41,2,218,9,95,95,99,108,97,115,115, ++ 95,95,114,119,0,0,0,41,2,114,109,0,0,0,218,5, ++ 111,116,104,101,114,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,6,95,95,101,113,95,95,21,3,0,0, ++ 115,4,0,0,0,0,1,18,1,122,17,70,105,108,101,76, ++ 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, ++ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, ++ 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, ++ 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, ++ 41,1,78,41,3,218,4,104,97,115,104,114,107,0,0,0, ++ 114,36,0,0,0,41,1,114,109,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,8,95,95,104, ++ 97,115,104,95,95,25,3,0,0,115,2,0,0,0,0,1, ++ 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,104, ++ 97,115,104,95,95,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,3,0,0,0,3,0,0,0,115,22,0,0,0,116, ++ 0,0,116,1,0,124,0,0,131,2,0,106,2,0,124,1, ++ 0,131,1,0,83,41,1,122,100,76,111,97,100,32,97,32, ++ 109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105, ++ 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, ++ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, ++ 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, ++ 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, ++ 97,100,46,10,10,32,32,32,32,32,32,32,32,41,3,218, ++ 5,115,117,112,101,114,114,211,0,0,0,114,194,0,0,0, ++ 41,2,114,109,0,0,0,114,127,0,0,0,41,1,114,212, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,194,0, ++ 0,0,28,3,0,0,115,2,0,0,0,0,10,122,22,70, ++ 105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109, ++ 111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, ++ 0,0,106,0,0,83,41,1,122,58,82,101,116,117,114,110, ++ 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, ++ 32,115,111,117,114,99,101,32,102,105,108,101,32,97,115,32, ++ 102,111,117,110,100,32,98,121,32,116,104,101,32,102,105,110, ++ 100,101,114,46,41,1,114,36,0,0,0,41,2,114,109,0, ++ 0,0,114,127,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,158,0,0,0,40,3,0,0,115, ++ 2,0,0,0,0,3,122,23,70,105,108,101,76,111,97,100, ++ 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,99, ++ 2,0,0,0,0,0,0,0,3,0,0,0,9,0,0,0, ++ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, ++ 1,0,100,1,0,131,2,0,143,17,0,125,2,0,124,2, ++ 0,106,2,0,131,0,0,83,87,100,2,0,81,82,88,100, ++ 2,0,83,41,3,122,39,82,101,116,117,114,110,32,116,104, ++ 101,32,100,97,116,97,32,102,114,111,109,32,112,97,116,104, ++ 32,97,115,32,114,97,119,32,98,121,116,101,115,46,218,1, ++ 114,78,41,3,114,50,0,0,0,114,51,0,0,0,90,4, ++ 114,101,97,100,41,3,114,109,0,0,0,114,36,0,0,0, ++ 114,55,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,201,0,0,0,45,3,0,0,115,4,0, ++ 0,0,0,2,21,1,122,19,70,105,108,101,76,111,97,100, ++ 101,114,46,103,101,116,95,100,97,116,97,41,11,114,113,0, ++ 0,0,114,112,0,0,0,114,114,0,0,0,114,115,0,0, ++ 0,114,186,0,0,0,114,214,0,0,0,114,216,0,0,0, ++ 114,124,0,0,0,114,194,0,0,0,114,158,0,0,0,114, ++ 201,0,0,0,114,5,0,0,0,114,5,0,0,0,41,1, ++ 114,212,0,0,0,114,6,0,0,0,114,211,0,0,0,10, ++ 3,0,0,115,14,0,0,0,12,3,6,2,12,6,12,4, ++ 12,3,24,12,18,5,114,211,0,0,0,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, ++ 115,64,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, + 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -+ 6,0,100,7,0,132,0,0,90,6,0,101,7,0,135,0, -+ 0,102,1,0,100,8,0,100,9,0,134,0,0,131,1,0, -+ 90,8,0,101,7,0,100,10,0,100,11,0,132,0,0,131, -+ 1,0,90,9,0,100,12,0,100,13,0,132,0,0,90,10, -+ 0,135,0,0,83,41,14,218,10,70,105,108,101,76,111,97, -+ 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, -+ 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, -+ 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, -+ 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, -+ 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, -+ 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, -+ 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, -+ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, -+ 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,124, -+ 2,0,124,0,0,95,1,0,100,1,0,83,41,2,122,75, -+ 67,97,99,104,101,32,116,104,101,32,109,111,100,117,108,101, -+ 32,110,97,109,101,32,97,110,100,32,116,104,101,32,112,97, -+ 116,104,32,116,111,32,116,104,101,32,102,105,108,101,32,102, -+ 111,117,110,100,32,98,121,32,116,104,101,10,32,32,32,32, -+ 32,32,32,32,102,105,110,100,101,114,46,78,41,2,114,68, -+ 0,0,0,114,36,0,0,0,41,3,114,72,0,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,55,6,0, -+ 0,115,4,0,0,0,0,3,9,1,122,19,70,105,108,101, -+ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,34,0,0,0,124,0,0,106,0,0,124, -+ 1,0,106,0,0,107,2,0,111,33,0,124,0,0,106,1, -+ 0,124,1,0,106,1,0,107,2,0,83,41,1,78,41,2, -+ 114,225,0,0,0,114,64,0,0,0,41,2,114,72,0,0, -+ 0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,230,0,0,0,61,6,0,0,115,4, -+ 0,0,0,0,1,18,1,122,17,70,105,108,101,76,111,97, -+ 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, -+ 26,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, -+ 116,0,0,124,0,0,106,2,0,131,1,0,65,83,41,1, -+ 78,41,3,218,4,104,97,115,104,114,68,0,0,0,114,36, -+ 0,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,8,95,95,104,97,115, -+ 104,95,95,65,6,0,0,115,2,0,0,0,0,1,122,19, -+ 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, -+ 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 3,0,0,0,3,0,0,0,115,22,0,0,0,116,0,0, -+ 116,1,0,124,0,0,131,2,0,106,2,0,124,1,0,131, -+ 1,0,83,41,1,122,100,76,111,97,100,32,97,32,109,111, -+ 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, -+ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, -+ 46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,115, -+ 117,112,101,114,114,49,1,0,0,114,5,1,0,0,41,2, -+ 114,72,0,0,0,114,159,0,0,0,41,1,114,225,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,5,1,0,0, -+ 68,6,0,0,115,2,0,0,0,0,10,122,22,70,105,108, -+ 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, -+ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, -+ 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, -+ 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, -+ 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, -+ 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, -+ 114,46,41,1,114,36,0,0,0,41,2,114,72,0,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,239,0,0,0,80,6,0,0,115,2,0, -+ 0,0,0,3,122,23,70,105,108,101,76,111,97,100,101,114, -+ 46,103,101,116,95,102,105,108,101,110,97,109,101,99,2,0, -+ 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, -+ 0,0,115,41,0,0,0,116,0,0,106,1,0,124,1,0, -+ 100,1,0,131,2,0,143,17,0,125,2,0,124,2,0,106, -+ 2,0,131,0,0,83,87,100,2,0,81,88,100,2,0,83, -+ 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, -+ 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, -+ 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, -+ 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, -+ 100,41,3,114,72,0,0,0,114,36,0,0,0,114,55,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,40,1,0,0,85,6,0,0,115,4,0,0,0,0, -+ 2,21,1,122,19,70,105,108,101,76,111,97,100,101,114,46, -+ 103,101,116,95,100,97,116,97,41,11,114,58,0,0,0,114, -+ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,73, -+ 0,0,0,114,230,0,0,0,114,51,1,0,0,114,157,0, -+ 0,0,114,5,1,0,0,114,239,0,0,0,114,40,1,0, -+ 0,114,5,0,0,0,114,5,0,0,0,41,1,114,225,0, -+ 0,0,114,6,0,0,0,114,49,1,0,0,50,6,0,0, -+ 115,14,0,0,0,12,3,6,2,12,6,12,4,12,3,24, -+ 12,18,5,114,49,1,0,0,99,0,0,0,0,0,0,0, -+ 0,0,0,0,0,4,0,0,0,64,0,0,0,115,64,0, -+ 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, -+ 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, -+ 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100, -+ 7,0,100,8,0,100,9,0,132,0,1,90,6,0,100,10, -+ 0,83,41,11,114,9,1,0,0,122,62,67,111,110,99,114, ++ 6,0,100,7,0,100,8,0,100,9,0,132,0,1,90,6, ++ 0,100,10,0,83,41,11,218,16,83,111,117,114,99,101,70, ++ 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, + 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, + 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, + 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,36, -+ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,105, -+ 2,0,124,2,0,106,1,0,100,1,0,54,124,2,0,106, -+ 2,0,100,2,0,54,83,41,3,122,33,82,101,116,117,114, -+ 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, -+ 111,114,32,116,104,101,32,112,97,116,104,46,114,184,0,0, -+ 0,114,185,0,0,0,41,3,114,40,0,0,0,218,8,115, -+ 116,95,109,116,105,109,101,90,7,115,116,95,115,105,122,101, -+ 41,3,114,72,0,0,0,114,36,0,0,0,114,47,1,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,37,1,0,0,95,6,0,0,115,4,0,0,0,0,2, -+ 12,1,122,27,83,111,117,114,99,101,70,105,108,101,76,111, -+ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, -+ 4,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, -+ 67,0,0,0,115,34,0,0,0,116,0,0,124,1,0,131, -+ 1,0,125,4,0,124,0,0,106,1,0,124,2,0,124,3, -+ 0,100,1,0,124,4,0,131,2,1,83,41,2,78,218,5, -+ 95,109,111,100,101,41,2,114,145,0,0,0,114,38,1,0, -+ 0,41,5,114,72,0,0,0,114,142,0,0,0,114,141,0, -+ 0,0,114,54,0,0,0,114,43,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,39,1,0,0, -+ 100,6,0,0,115,4,0,0,0,0,2,12,1,122,32,83, ++ 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,34, ++ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,100, ++ 1,0,124,2,0,106,1,0,100,2,0,124,2,0,106,2, ++ 0,105,2,0,83,41,3,122,33,82,101,116,117,114,110,32, ++ 116,104,101,32,109,101,116,97,100,97,116,97,32,102,111,114, ++ 32,116,104,101,32,112,97,116,104,46,114,134,0,0,0,114, ++ 135,0,0,0,41,3,114,40,0,0,0,218,8,115,116,95, ++ 109,116,105,109,101,90,7,115,116,95,115,105,122,101,41,3, ++ 114,109,0,0,0,114,36,0,0,0,114,209,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,198, ++ 0,0,0,55,3,0,0,115,4,0,0,0,0,2,12,1, ++ 122,27,83,111,117,114,99,101,70,105,108,101,76,111,97,100, ++ 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0, ++ 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, ++ 0,0,115,34,0,0,0,116,0,0,124,1,0,131,1,0, ++ 125,4,0,124,0,0,106,1,0,124,2,0,124,3,0,100, ++ 1,0,124,4,0,131,2,1,83,41,2,78,218,5,95,109, ++ 111,100,101,41,2,114,98,0,0,0,114,199,0,0,0,41, ++ 5,114,109,0,0,0,114,91,0,0,0,114,90,0,0,0, ++ 114,54,0,0,0,114,43,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,200,0,0,0,60,3, ++ 0,0,115,4,0,0,0,0,2,12,1,122,32,83,111,117, ++ 114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,99, ++ 97,99,104,101,95,98,121,116,101,99,111,100,101,114,221,0, ++ 0,0,105,182,1,0,0,99,3,0,0,0,1,0,0,0, ++ 9,0,0,0,17,0,0,0,67,0,0,0,115,53,1,0, ++ 0,116,0,0,124,1,0,131,1,0,92,2,0,125,4,0, ++ 125,5,0,103,0,0,125,6,0,120,54,0,124,4,0,114, ++ 80,0,116,1,0,124,4,0,131,1,0,12,114,80,0,116, ++ 0,0,124,4,0,131,1,0,92,2,0,125,4,0,125,7, ++ 0,124,6,0,106,2,0,124,7,0,131,1,0,1,113,27, ++ 0,87,120,132,0,116,3,0,124,6,0,131,1,0,68,93, ++ 118,0,125,7,0,116,4,0,124,4,0,124,7,0,131,2, ++ 0,125,4,0,121,17,0,116,5,0,106,6,0,124,4,0, ++ 131,1,0,1,87,113,94,0,4,116,7,0,107,10,0,114, ++ 155,0,1,1,1,119,94,0,89,113,94,0,4,116,8,0, ++ 107,10,0,114,211,0,1,125,8,0,1,122,25,0,116,9, ++ 0,100,1,0,124,4,0,124,8,0,131,3,0,1,100,2, ++ 0,83,87,89,100,2,0,100,2,0,125,8,0,126,8,0, ++ 88,113,94,0,88,113,94,0,87,121,33,0,116,10,0,124, ++ 1,0,124,2,0,124,3,0,131,3,0,1,116,9,0,100, ++ 3,0,124,1,0,131,2,0,1,87,110,53,0,4,116,8, ++ 0,107,10,0,114,48,1,1,125,8,0,1,122,21,0,116, ++ 9,0,100,1,0,124,1,0,124,8,0,131,3,0,1,87, ++ 89,100,2,0,100,2,0,125,8,0,126,8,0,88,110,1, ++ 0,88,100,2,0,83,41,4,122,27,87,114,105,116,101,32, ++ 98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,32, ++ 102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,116, ++ 32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,33, ++ 114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,114, ++ 125,41,11,114,39,0,0,0,114,47,0,0,0,114,164,0, ++ 0,0,114,34,0,0,0,114,29,0,0,0,114,4,0,0, ++ 0,90,5,109,107,100,105,114,218,15,70,105,108,101,69,120, ++ 105,115,116,115,69,114,114,111,114,114,41,0,0,0,114,106, ++ 0,0,0,114,56,0,0,0,41,9,114,109,0,0,0,114, ++ 36,0,0,0,114,54,0,0,0,114,221,0,0,0,218,6, ++ 112,97,114,101,110,116,114,95,0,0,0,114,28,0,0,0, ++ 114,24,0,0,0,114,202,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,199,0,0,0,65,3, ++ 0,0,115,38,0,0,0,0,2,18,1,6,2,22,1,18, ++ 1,17,2,19,1,15,1,3,1,17,1,13,2,7,1,18, ++ 3,16,1,27,1,3,1,16,1,17,1,18,2,122,25,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, -+ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,114, -+ 55,1,0,0,105,182,1,0,0,99,3,0,0,0,1,0, -+ 0,0,9,0,0,0,17,0,0,0,67,0,0,0,115,53, -+ 1,0,0,116,0,0,124,1,0,131,1,0,92,2,0,125, -+ 4,0,125,5,0,103,0,0,125,6,0,120,54,0,124,4, -+ 0,114,80,0,116,1,0,124,4,0,131,1,0,12,114,80, -+ 0,116,0,0,124,4,0,131,1,0,92,2,0,125,4,0, -+ 125,7,0,124,6,0,106,2,0,124,7,0,131,1,0,1, -+ 113,27,0,87,120,132,0,116,3,0,124,6,0,131,1,0, -+ 68,93,118,0,125,7,0,116,4,0,124,4,0,124,7,0, -+ 131,2,0,125,4,0,121,17,0,116,5,0,106,6,0,124, -+ 4,0,131,1,0,1,87,113,94,0,4,116,7,0,107,10, -+ 0,114,155,0,1,1,1,119,94,0,89,113,94,0,4,116, -+ 8,0,107,10,0,114,211,0,1,125,8,0,1,122,25,0, -+ 116,9,0,100,1,0,124,4,0,124,8,0,131,3,0,1, -+ 100,2,0,83,87,89,100,2,0,100,2,0,125,8,0,126, -+ 8,0,88,113,94,0,88,113,94,0,87,121,33,0,116,10, -+ 0,124,1,0,124,2,0,124,3,0,131,3,0,1,116,9, -+ 0,100,3,0,124,1,0,131,2,0,1,87,110,53,0,4, -+ 116,8,0,107,10,0,114,48,1,1,125,8,0,1,122,21, -+ 0,116,9,0,100,1,0,124,1,0,124,8,0,131,3,0, -+ 1,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, -+ 110,1,0,88,100,2,0,83,41,4,122,27,87,114,105,116, -+ 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, -+ 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, -+ 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, -+ 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, -+ 33,114,125,41,11,114,39,0,0,0,114,47,0,0,0,114, -+ 224,0,0,0,114,34,0,0,0,114,29,0,0,0,114,4, -+ 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, -+ 69,120,105,115,116,115,69,114,114,111,114,114,41,0,0,0, -+ 114,153,0,0,0,114,56,0,0,0,41,9,114,72,0,0, -+ 0,114,36,0,0,0,114,54,0,0,0,114,55,1,0,0, -+ 114,234,0,0,0,114,132,0,0,0,114,28,0,0,0,114, -+ 24,0,0,0,114,41,1,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,38,1,0,0,105,6,0, -+ 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, -+ 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, -+ 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, -+ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, -+ 101,116,95,100,97,116,97,78,41,7,114,58,0,0,0,114, -+ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,37, -+ 1,0,0,114,39,1,0,0,114,38,1,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,9,1,0,0,91,6,0,0,115,8,0,0,0,12, -+ 2,6,2,12,5,12,5,114,9,1,0,0,99,0,0,0, -+ 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, -+ 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, -+ 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, -+ 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, -+ 100,6,0,83,41,7,114,8,1,0,0,122,45,76,111,97, -+ 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, -+ 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, -+ 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, -+ 0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,115, -+ 76,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, -+ 125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,125, -+ 3,0,116,2,0,124,3,0,100,1,0,124,1,0,100,2, -+ 0,124,2,0,131,1,2,125,4,0,116,3,0,124,4,0, -+ 100,1,0,124,1,0,100,3,0,124,2,0,131,1,2,83, -+ 41,4,78,114,68,0,0,0,114,36,0,0,0,114,141,0, -+ 0,0,41,4,114,239,0,0,0,114,40,1,0,0,114,191, -+ 0,0,0,114,196,0,0,0,41,5,114,72,0,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,54,0,0,0,114,48, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,16,1,0,0,138,6,0,0,115,8,0,0,0, -+ 0,1,15,1,15,1,24,1,122,29,83,111,117,114,99,101, -+ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,103, -+ 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, -+ 0,100,1,0,83,41,2,122,39,82,101,116,117,114,110,32, -+ 78,111,110,101,32,97,115,32,116,104,101,114,101,32,105,115, -+ 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 78,114,5,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,17,1,0,0,144,6,0,0,115,2,0,0,0,0, -+ 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, -+ 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, -+ 99,101,78,41,6,114,58,0,0,0,114,57,0,0,0,114, -+ 59,0,0,0,114,60,0,0,0,114,16,1,0,0,114,17, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,8,1,0,0,134,6,0,0, -+ 115,6,0,0,0,12,2,6,2,12,6,114,8,1,0,0, -+ 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, -+ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -+ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -+ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -+ 101,7,0,100,8,0,100,9,0,132,0,0,131,1,0,90, -+ 8,0,100,10,0,100,11,0,132,0,0,90,9,0,100,12, -+ 0,100,13,0,132,0,0,90,10,0,100,14,0,100,15,0, -+ 132,0,0,90,11,0,101,7,0,100,16,0,100,17,0,132, -+ 0,0,131,1,0,90,12,0,100,18,0,83,41,19,218,19, -+ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -+ 100,101,114,122,93,76,111,97,100,101,114,32,102,111,114,32, -+ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, -+ 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, -+ 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, -+ 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, -+ 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, -+ 32,32,99,3,0,0,0,0,0,0,0,3,0,0,0,2, -+ 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,0, -+ 0,83,41,1,78,41,2,114,68,0,0,0,114,36,0,0, -+ 0,41,3,114,72,0,0,0,114,68,0,0,0,114,36,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,73,0,0,0,161,6,0,0,115,4,0,0,0,0, -+ 1,9,1,122,28,69,120,116,101,110,115,105,111,110,70,105, -+ 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, -+ 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, -+ 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, -+ 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, -+ 41,2,114,225,0,0,0,114,64,0,0,0,41,2,114,72, -+ 0,0,0,114,228,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,230,0,0,0,165,6,0,0, -+ 115,4,0,0,0,0,1,18,1,122,26,69,120,116,101,110, -+ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, -+ 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, -+ 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, -+ 0,106,2,0,131,1,0,65,83,41,1,78,41,3,114,50, -+ 1,0,0,114,68,0,0,0,114,36,0,0,0,41,1,114, -+ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,51,1,0,0,169,6,0,0,115,2,0,0, -+ 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, -+ 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, -+ 95,99,2,0,0,0,0,0,0,0,4,0,0,0,11,0, -+ 0,0,67,0,0,0,115,183,0,0,0,116,0,0,124,1, -+ 0,131,1,0,143,29,0,1,116,1,0,116,2,0,106,3, -+ 0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,0, -+ 87,100,1,0,81,88,116,5,0,100,2,0,124,0,0,106, -+ 4,0,131,2,0,1,124,0,0,106,6,0,124,1,0,131, -+ 1,0,125,3,0,124,3,0,114,124,0,116,7,0,124,2, -+ 0,100,3,0,131,2,0,12,114,124,0,116,8,0,124,0, -+ 0,106,4,0,131,1,0,100,4,0,25,103,1,0,124,2, -+ 0,95,9,0,110,0,0,124,0,0,124,2,0,95,10,0, -+ 124,2,0,106,11,0,124,2,0,95,12,0,124,3,0,115, -+ 179,0,124,2,0,106,12,0,106,13,0,100,5,0,131,1, -+ 0,100,4,0,25,124,2,0,95,12,0,110,0,0,124,2, -+ 0,83,41,6,122,25,76,111,97,100,32,97,110,32,101,120, -+ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,46,78, -+ 122,33,101,120,116,101,110,115,105,111,110,32,109,111,100,117, -+ 108,101,32,108,111,97,100,101,100,32,102,114,111,109,32,123, -+ 33,114,125,114,247,0,0,0,114,85,0,0,0,114,117,0, -+ 0,0,41,14,114,70,0,0,0,114,115,0,0,0,114,107, -+ 0,0,0,90,12,108,111,97,100,95,100,121,110,97,109,105, -+ 99,114,36,0,0,0,114,153,0,0,0,114,220,0,0,0, -+ 114,61,0,0,0,114,39,0,0,0,114,247,0,0,0,114, -+ 205,0,0,0,114,58,0,0,0,114,251,0,0,0,114,33, -+ 0,0,0,41,4,114,72,0,0,0,114,159,0,0,0,114, -+ 180,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,5,1,0,0,172,6,0, -+ 0,115,24,0,0,0,0,5,13,1,9,1,21,1,16,1, -+ 15,1,22,1,28,1,9,1,12,1,6,1,28,1,122,31, -+ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -+ 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, -+ 3,0,0,0,115,48,0,0,0,116,0,0,124,0,0,106, -+ 1,0,131,1,0,100,1,0,25,137,0,0,116,2,0,135, -+ 0,0,102,1,0,100,2,0,100,3,0,134,0,0,116,3, -+ 0,68,131,1,0,131,1,0,83,41,4,122,49,82,101,116, -+ 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, -+ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, -+ 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,30, -+ 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, -+ 4,0,0,0,51,0,0,0,115,31,0,0,0,124,0,0, -+ 93,21,0,125,1,0,136,0,0,100,0,0,124,1,0,23, -+ 107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,73, -+ 0,0,0,78,114,5,0,0,0,41,2,114,23,0,0,0, -+ 218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101, -+ 95,110,97,109,101,114,5,0,0,0,114,6,0,0,0,114, -+ 78,0,0,0,193,6,0,0,115,2,0,0,0,6,1,122, -+ 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, -+ 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, -+ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, -+ 114,62,41,4,114,39,0,0,0,114,36,0,0,0,114,79, -+ 0,0,0,218,18,69,88,84,69,78,83,73,79,78,95,83, -+ 85,70,70,73,88,69,83,41,2,114,72,0,0,0,114,159, -+ 0,0,0,114,5,0,0,0,41,1,114,59,1,0,0,114, -+ 6,0,0,0,114,220,0,0,0,190,6,0,0,115,6,0, -+ 0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115, -+ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, -+ 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, -+ 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, -+ 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, -+ 101,32,111,98,106,101,99,116,46,78,114,5,0,0,0,41, -+ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,16,1,0,0,196, -+ 6,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, -+ 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, -+ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105, -+ 111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32, -+ 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, -+ 114,5,0,0,0,41,2,114,72,0,0,0,114,159,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,17,1,0,0,200,6,0,0,115,2,0,0,0,0,2, -+ 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, -+ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -+ 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, -+ 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, -+ 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, -+ 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, -+ 1,114,36,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,239,0,0,0,204,6,0,0,115,2,0,0,0,0, -+ 3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, -+ 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, -+ 97,109,101,78,41,13,114,58,0,0,0,114,57,0,0,0, -+ 114,59,0,0,0,114,60,0,0,0,114,73,0,0,0,114, -+ 230,0,0,0,114,51,1,0,0,114,157,0,0,0,114,5, -+ 1,0,0,114,220,0,0,0,114,16,1,0,0,114,17,1, -+ 0,0,114,239,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,57,1,0,0, -+ 153,6,0,0,115,18,0,0,0,12,6,6,2,12,4,12, -+ 4,12,3,18,18,12,6,12,4,12,4,114,57,1,0,0, -+ 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -+ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -+ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -+ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -+ 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100, -+ 11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0, -+ 0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0, -+ 100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100, -+ 19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14, -+ 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, -+ 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, -+ 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, -+ 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, -+ 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, -+ 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, -+ 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, -+ 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, -+ 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, -+ 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, -+ 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, -+ 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, -+ 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, -+ 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, -+ 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, -+ 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, -+ 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, -+ 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, -+ 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, -+ 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, -+ 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52, -+ 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, -+ 0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0, -+ 0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0, -+ 95,5,0,100,0,0,83,41,1,78,41,6,114,71,0,0, -+ 0,114,254,0,0,0,114,232,0,0,0,218,16,95,103,101, -+ 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, -+ 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, -+ 218,12,95,112,97,116,104,95,102,105,110,100,101,114,41,4, -+ 114,72,0,0,0,114,68,0,0,0,114,36,0,0,0,218, -+ 11,112,97,116,104,95,102,105,110,100,101,114,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,73,0,0,0, -+ 217,6,0,0,115,8,0,0,0,0,1,9,1,9,1,21, -+ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, -+ 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, -+ 53,0,0,0,124,0,0,106,0,0,106,1,0,100,1,0, -+ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, -+ 2,0,100,2,0,107,2,0,114,43,0,100,6,0,83,124, -+ 1,0,100,5,0,102,2,0,83,41,7,122,62,82,101,116, -+ 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, -+ 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, -+ 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, -+ 45,97,116,116,114,45,110,97,109,101,41,114,117,0,0,0, -+ 114,31,0,0,0,114,8,0,0,0,114,36,0,0,0,114, -+ 247,0,0,0,41,2,122,3,115,121,115,122,4,112,97,116, -+ 104,41,2,114,71,0,0,0,114,33,0,0,0,41,4,114, -+ 72,0,0,0,114,234,0,0,0,218,3,100,111,116,114,95, ++ 115,101,116,95,100,97,116,97,78,41,7,114,113,0,0,0, ++ 114,112,0,0,0,114,114,0,0,0,114,115,0,0,0,114, ++ 198,0,0,0,114,200,0,0,0,114,199,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,23,95,102,105,110,100,95,112,97,114,101,110,116, -+ 95,112,97,116,104,95,110,97,109,101,115,223,6,0,0,115, -+ 8,0,0,0,0,2,27,1,12,2,4,3,122,38,95,78, -+ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, -+ 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, -+ 97,109,101,115,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, -+ 0,106,0,0,131,0,0,92,2,0,125,1,0,125,2,0, -+ 116,1,0,116,2,0,106,3,0,124,1,0,25,124,2,0, -+ 131,2,0,83,41,1,78,41,4,114,67,1,0,0,114,63, -+ 0,0,0,114,8,0,0,0,114,74,0,0,0,41,3,114, -+ 72,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, -+ 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, -+ 116,116,114,95,110,97,109,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,62,1,0,0,233,6,0,0, -+ 115,4,0,0,0,0,1,18,1,122,31,95,78,97,109,101, -+ 115,112,97,99,101,80,97,116,104,46,95,103,101,116,95,112, -+ 97,114,101,110,116,95,112,97,116,104,99,1,0,0,0,0, -+ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, -+ 127,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, -+ 131,1,0,125,1,0,124,1,0,124,0,0,106,2,0,107, -+ 3,0,114,120,0,124,0,0,106,3,0,124,0,0,106,4, -+ 0,124,1,0,131,2,0,125,2,0,124,2,0,100,0,0, -+ 107,9,0,114,108,0,124,2,0,106,5,0,100,0,0,107, -+ 8,0,114,108,0,124,2,0,106,6,0,114,108,0,124,2, -+ 0,106,6,0,124,0,0,95,7,0,113,108,0,110,0,0, -+ 124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106, -+ 7,0,83,41,1,78,41,8,114,232,0,0,0,114,62,1, -+ 0,0,114,63,1,0,0,114,64,1,0,0,114,71,0,0, -+ 0,114,170,0,0,0,114,221,0,0,0,114,254,0,0,0, -+ 41,3,114,72,0,0,0,90,11,112,97,114,101,110,116,95, -+ 112,97,116,104,114,178,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, -+ 99,117,108,97,116,101,237,6,0,0,115,16,0,0,0,0, -+ 2,18,1,15,1,21,3,27,1,9,1,18,1,12,1,122, -+ 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, -+ 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, -+ 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, -+ 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, -+ 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, -+ 114,114,68,1,0,0,41,1,114,72,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, -+ 105,116,101,114,95,95,250,6,0,0,115,2,0,0,0,0, -+ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, -+ 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, -+ 131,1,0,83,41,1,78,41,2,114,32,0,0,0,114,68, -+ 1,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, -+ 95,95,253,6,0,0,115,2,0,0,0,0,1,122,22,95, -+ 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, -+ 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, -+ 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, -+ 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, -+ 116,104,40,123,33,114,125,41,41,2,114,48,0,0,0,114, -+ 254,0,0,0,41,1,114,72,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,102,0,0,0,0, -+ 7,0,0,115,2,0,0,0,0,1,122,23,95,78,97,109, -+ 101,115,112,97,99,101,80,97,116,104,46,95,95,114,101,112, -+ 114,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,0, -+ 124,0,0,106,0,0,131,0,0,107,6,0,83,41,1,78, -+ 41,1,114,68,1,0,0,41,2,114,72,0,0,0,218,4, -+ 105,116,101,109,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, -+ 95,3,7,0,0,115,2,0,0,0,0,1,122,27,95,78, -+ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, -+ 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,20, -+ 0,0,0,124,0,0,106,0,0,106,1,0,124,1,0,131, -+ 1,0,1,100,0,0,83,41,1,78,41,2,114,254,0,0, -+ 0,114,224,0,0,0,41,2,114,72,0,0,0,114,72,1, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,224,0,0,0,6,7,0,0,115,2,0,0,0,0, -+ 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,97,112,112,101,110,100,78,41,13,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, -+ 73,0,0,0,114,67,1,0,0,114,62,1,0,0,114,68, -+ 1,0,0,114,70,1,0,0,114,71,1,0,0,114,102,0, -+ 0,0,114,73,1,0,0,114,224,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,61,1,0,0,210,6,0,0,115,20,0,0,0,12,5, -+ 6,2,12,6,12,10,12,4,12,13,12,3,12,3,12,3, -+ 12,3,114,61,1,0,0,99,0,0,0,0,0,0,0,0, -+ 0,0,0,0,3,0,0,0,64,0,0,0,115,106,0,0, - 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, -- 90,3,0,101,4,0,100,2,0,100,3,0,132,0,0,131, -- 1,0,90,5,0,101,6,0,100,4,0,100,4,0,100,5, -- 0,100,6,0,132,2,0,131,1,0,90,7,0,101,6,0, -- 100,4,0,100,7,0,100,8,0,132,1,0,131,1,0,90, -- 8,0,101,4,0,100,9,0,100,10,0,132,0,0,131,1, -- 0,90,9,0,101,6,0,100,11,0,100,12,0,132,0,0, -- 131,1,0,90,10,0,101,6,0,101,11,0,100,13,0,100, -- 14,0,132,0,0,131,1,0,131,1,0,90,12,0,101,6, -- 0,101,11,0,100,15,0,100,16,0,132,0,0,131,1,0, -- 131,1,0,90,13,0,101,6,0,101,11,0,100,17,0,100, -- 18,0,132,0,0,131,1,0,131,1,0,90,14,0,100,4, -- 0,83,41,19,218,14,70,114,111,122,101,110,73,109,112,111, -- 114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,32, -- 105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,101, -- 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, -- 65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,32, -- 101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,32, -- 115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,116, -- 111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,100, -- 32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,105, -- 97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,10, -- 32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,0, -+ 100,2,0,132,0,0,90,3,0,101,4,0,100,3,0,100, -+ 4,0,132,0,0,131,1,0,90,5,0,100,5,0,100,6, -+ 0,132,0,0,90,6,0,100,7,0,100,8,0,132,0,0, -+ 90,7,0,100,9,0,100,10,0,132,0,0,90,8,0,100, -+ 11,0,100,12,0,132,0,0,90,9,0,100,13,0,100,14, -+ 0,132,0,0,90,10,0,100,15,0,83,41,16,114,252,0, -+ 0,0,99,4,0,0,0,0,0,0,0,4,0,0,0,4, -+ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, -+ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, -+ 0,100,0,0,83,41,1,78,41,2,114,61,1,0,0,114, -+ 254,0,0,0,41,4,114,72,0,0,0,114,68,0,0,0, -+ 114,36,0,0,0,114,65,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,73,0,0,0,12,7, -+ 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, -+ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, -+ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, -- 0,106,0,0,124,0,0,106,1,0,131,1,0,83,41,2, -+ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, - 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, - 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, -@@ -2205,2171 +3230,1147 @@ - 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, - 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, - 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, -- 32,32,32,32,32,122,22,60,109,111,100,117,108,101,32,123, -- 33,114,125,32,40,102,114,111,122,101,110,41,62,41,2,114, -- 47,0,0,0,114,57,0,0,0,41,1,218,1,109,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,205,0, -- 0,0,47,5,0,0,115,2,0,0,0,0,7,122,26,70, -- 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111, -- 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0, -- 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, -- 42,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, -- 114,34,0,116,2,0,124,1,0,124,0,0,100,1,0,100, -- 2,0,131,2,1,83,100,0,0,83,100,0,0,83,41,3, -- 78,114,217,0,0,0,90,6,102,114,111,122,101,110,41,3, -- 114,106,0,0,0,114,162,0,0,0,114,173,0,0,0,41, -- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,12,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,13,1,0,0,56,5,0,0,115,6,0, -- 0,0,0,2,15,1,19,2,122,24,70,114,111,122,101,110, -- 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, -- 101,99,99,3,0,0,0,0,0,0,0,3,0,0,0,2, -- 0,0,0,67,0,0,0,115,23,0,0,0,116,0,0,106, -- 1,0,124,1,0,131,1,0,114,19,0,124,0,0,83,100, -- 1,0,83,41,2,122,93,70,105,110,100,32,97,32,102,114, -- 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, -- 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, -- 32,32,32,32,78,41,2,114,106,0,0,0,114,162,0,0, -- 0,41,3,114,11,1,0,0,114,158,0,0,0,114,35,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,14,1,0,0,63,5,0,0,115,2,0,0,0,0, -- 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, -- 114,46,102,105,110,100,95,109,111,100,117,108,101,99,1,0, -- 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, -- 0,0,115,95,0,0,0,124,0,0,106,0,0,106,1,0, -- 125,1,0,116,2,0,106,3,0,124,1,0,131,1,0,115, -- 57,0,116,4,0,100,1,0,106,5,0,124,1,0,131,1, -- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, -- 116,6,0,116,2,0,106,7,0,124,1,0,131,2,0,125, -- 2,0,116,8,0,124,2,0,124,0,0,106,9,0,131,2, -- 0,1,100,0,0,83,41,3,78,122,27,123,33,114,125,32, -- 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, -- 109,111,100,117,108,101,114,67,0,0,0,41,10,114,208,0, -- 0,0,114,67,0,0,0,114,106,0,0,0,114,162,0,0, -- 0,114,153,0,0,0,114,47,0,0,0,114,114,0,0,0, -- 218,17,103,101,116,95,102,114,111,122,101,110,95,111,98,106, -- 101,99,116,114,175,0,0,0,114,63,0,0,0,41,3,114, -- 179,0,0,0,114,67,0,0,0,114,194,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, -- 0,0,72,5,0,0,115,12,0,0,0,0,2,12,1,15, -- 1,18,1,12,1,18,1,122,26,70,114,111,122,101,110,73, -- 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, -- 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,0, -- 124,0,0,124,1,0,131,2,0,83,41,1,122,95,76,111, -- 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, -+ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, -+ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, -+ 41,2,114,48,0,0,0,114,58,0,0,0,41,2,114,12, -+ 1,0,0,114,180,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,206,0,0,0,15,7,0,0, -+ 115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112, -+ 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, -+ 95,114,101,112,114,99,2,0,0,0,0,0,0,0,2,0, -+ 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, -+ 1,0,83,41,2,78,84,114,5,0,0,0,41,2,114,72, -+ 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,220,0,0,0,24,7,0,0, -+ 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, -+ 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, -+ 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -+ 0,83,41,2,78,114,31,0,0,0,114,5,0,0,0,41, -+ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,17,1,0,0,27, -+ 7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, -+ 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, -+ 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,6,0,0,0,67,0,0,0,115,22,0,0, -+ 0,116,0,0,100,1,0,100,2,0,100,3,0,100,4,0, -+ 100,5,0,131,3,1,83,41,6,78,114,31,0,0,0,122, -+ 8,60,115,116,114,105,110,103,62,114,176,0,0,0,114,43, -+ 1,0,0,84,41,1,114,44,1,0,0,41,2,114,72,0, -+ 0,0,114,159,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,16,1,0,0,30,7,0,0,115, -+ 2,0,0,0,0,1,122,25,95,78,97,109,101,115,112,97, -+ 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, -+ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, -+ 0,0,67,0,0,0,115,4,0,0,0,100,0,0,83,41, -+ 1,78,114,5,0,0,0,41,2,114,72,0,0,0,114,180, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,2,1,0,0,33,7,0,0,115,2,0,0,0, -+ 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, -+ 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, -+ 0,67,0,0,0,115,29,0,0,0,116,0,0,100,1,0, -+ 124,0,0,106,1,0,131,2,0,1,116,2,0,124,0,0, -+ 124,1,0,131,2,0,83,41,2,122,98,76,111,97,100,32, -+ 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, -- 180,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, ++ 0,0,114,219,0,0,0,51,3,0,0,115,8,0,0,0, ++ 12,2,6,2,12,5,12,5,114,219,0,0,0,99,0,0, ++ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, ++ 0,0,115,46,0,0,0,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, + 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, +- 0,100,6,0,100,7,0,132,0,0,90,6,0,100,8,0, +- 100,9,0,132,0,0,90,7,0,100,10,0,100,11,0,132, +- 0,0,90,8,0,100,12,0,100,13,0,132,0,0,90,9, +- 0,100,14,0,100,15,0,132,0,0,90,10,0,100,16,0, +- 100,17,0,132,0,0,90,11,0,101,12,0,100,18,0,100, +- 19,0,132,0,0,131,1,0,90,13,0,100,20,0,83,41, +- 21,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, +- 76,111,97,100,101,114,122,93,76,111,97,100,101,114,32,102, +- 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, +- 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, +- 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, +- 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, +- 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, +- 10,32,32,32,32,99,3,0,0,0,0,0,0,0,3,0, +- 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124, +- 1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1, +- 0,100,0,0,83,41,1,78,41,2,114,106,0,0,0,114, +- 35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0, +- 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,185,0,0,0,121,3,0,0,115,4,0, +- 0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,111, +- 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, +- 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,2,0,0,0,67,0,0,0,115,34,0,0,0,124,0, +- 0,106,0,0,124,1,0,106,0,0,107,2,0,111,33,0, +- 124,0,0,106,1,0,124,1,0,106,1,0,107,2,0,83, +- 41,1,78,41,2,114,211,0,0,0,114,118,0,0,0,41, +- 2,114,108,0,0,0,114,212,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,213,0,0,0,125, +- 3,0,0,115,4,0,0,0,0,1,18,1,122,26,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, +- 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, +- 0,0,116,0,0,124,0,0,106,1,0,131,1,0,116,0, +- 0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,41, +- 3,114,214,0,0,0,114,106,0,0,0,114,35,0,0,0, +- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,215,0,0,0,129,3,0,0,115, +- 2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111, +- 110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, +- 115,104,95,95,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,4,0,0,0,67,0,0,0,115,47,0,0,0,116,0, +- 0,106,1,0,116,2,0,106,3,0,124,1,0,131,2,0, +- 125,2,0,116,4,0,100,1,0,124,1,0,106,5,0,124, +- 0,0,106,6,0,131,3,0,1,124,2,0,83,41,2,122, +- 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, +- 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, +- 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, +- 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, +- 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,41, +- 7,114,121,0,0,0,114,188,0,0,0,114,145,0,0,0, +- 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, +- 114,105,0,0,0,114,106,0,0,0,114,35,0,0,0,41, +- 3,114,108,0,0,0,114,164,0,0,0,114,190,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 4,1,0,0,81,5,0,0,115,2,0,0,0,0,7,122, -- 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, -- 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -- 115,13,0,0,0,116,0,0,106,1,0,124,1,0,131,1, -- 0,83,41,1,122,45,82,101,116,117,114,110,32,116,104,101, -- 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, -- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, -- 108,101,46,41,2,114,106,0,0,0,114,21,1,0,0,41, -- 2,114,11,1,0,0,114,158,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,15,1,0,0,90, -- 5,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122, -- 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, -- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108, -- 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, -- 0,41,2,114,11,1,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, -- 0,96,5,0,0,115,2,0,0,0,0,4,122,25,70,114, -- 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, -- 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, -- 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, -- 0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1, -- 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, -- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, -- 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, -- 41,2,114,106,0,0,0,90,17,105,115,95,102,114,111,122, -- 101,110,95,112,97,99,107,97,103,101,41,2,114,11,1,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,219,0,0,0,102,5,0,0,115,2, -- 0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112, -- 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, -- 41,15,114,57,0,0,0,114,56,0,0,0,114,58,0,0, -- 0,114,59,0,0,0,114,17,1,0,0,114,205,0,0,0, -- 114,18,1,0,0,114,13,1,0,0,114,14,1,0,0,114, -- 1,1,0,0,114,4,1,0,0,114,164,0,0,0,114,15, -- 1,0,0,114,16,1,0,0,114,219,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,19,1,0,0,38,5,0,0,115,28,0,0,0,12, -- 7,6,2,18,9,3,1,21,6,3,1,18,8,18,9,18, -- 9,3,1,21,5,3,1,21,5,3,1,114,19,1,0,0, -+ 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, -+ 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, -+ 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, -+ 32,123,33,114,125,41,3,114,153,0,0,0,114,254,0,0, -+ 0,114,181,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,5,1,0,0,36,7,0,0,115,4,0,0,0,0, -+ 7,16,1,122,28,95,78,97,109,101,115,112,97,99,101,76, -+ 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, -+ 101,78,41,11,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,73,0,0,0,114,19,1,0,0,114,206,0, -+ 0,0,114,220,0,0,0,114,17,1,0,0,114,16,1,0, -+ 0,114,2,1,0,0,114,5,1,0,0,114,5,0,0,0, +- 186,0,0,0,132,3,0,0,115,10,0,0,0,0,2,6, +- 1,15,1,6,1,16,1,122,33,69,120,116,101,110,115,105, +- 111,110,70,105,108,101,76,111,97,100,101,114,46,99,114,101, +- 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, +- 45,0,0,0,116,0,0,106,1,0,116,2,0,106,3,0, +- 124,1,0,131,2,0,1,116,4,0,100,1,0,124,0,0, +- 106,5,0,124,0,0,106,6,0,131,3,0,1,100,2,0, +- 83,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, +- 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, +- 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, +- 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, +- 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, +- 114,121,0,0,0,114,188,0,0,0,114,145,0,0,0,90, +- 12,101,120,101,99,95,100,121,110,97,109,105,99,114,105,0, +- 0,0,114,106,0,0,0,114,35,0,0,0,41,2,114,108, +- 0,0,0,114,190,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,191,0,0,0,140,3,0,0, +- 115,6,0,0,0,0,2,19,1,6,1,122,31,69,120,116, ++ 0,100,6,0,83,41,7,218,20,83,111,117,114,99,101,108, ++ 101,115,115,70,105,108,101,76,111,97,100,101,114,122,45,76, ++ 111,97,100,101,114,32,119,104,105,99,104,32,104,97,110,100, ++ 108,101,115,32,115,111,117,114,99,101,108,101,115,115,32,102, ++ 105,108,101,32,105,109,112,111,114,116,115,46,99,2,0,0, ++ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, ++ 0,115,76,0,0,0,124,0,0,106,0,0,124,1,0,131, ++ 1,0,125,2,0,124,0,0,106,1,0,124,2,0,131,1, ++ 0,125,3,0,116,2,0,124,3,0,100,1,0,124,1,0, ++ 100,2,0,124,2,0,131,1,2,125,4,0,116,3,0,124, ++ 4,0,100,1,0,124,1,0,100,3,0,124,2,0,131,1, ++ 2,83,41,4,78,114,107,0,0,0,114,36,0,0,0,114, ++ 90,0,0,0,41,4,114,158,0,0,0,114,201,0,0,0, ++ 114,142,0,0,0,114,148,0,0,0,41,5,114,109,0,0, ++ 0,114,127,0,0,0,114,36,0,0,0,114,54,0,0,0, ++ 114,210,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,188,0,0,0,98,3,0,0,115,8,0, ++ 0,0,0,1,15,1,15,1,24,1,122,29,83,111,117,114, ++ 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, ++ 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, ++ 0,0,0,100,1,0,83,41,2,122,39,82,101,116,117,114, ++ 110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32, ++ 105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100, ++ 101,46,78,114,5,0,0,0,41,2,114,109,0,0,0,114, ++ 127,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,203,0,0,0,104,3,0,0,115,2,0,0, ++ 0,0,2,122,31,83,111,117,114,99,101,108,101,115,115,70, ++ 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, ++ 117,114,99,101,78,41,6,114,113,0,0,0,114,112,0,0, ++ 0,114,114,0,0,0,114,115,0,0,0,114,188,0,0,0, ++ 114,203,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,224,0,0,0,94,3, ++ 0,0,115,6,0,0,0,12,2,6,2,12,6,114,224,0, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, ++ 0,0,0,64,0,0,0,115,136,0,0,0,101,0,0,90, ++ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, ++ 0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0, ++ 132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90, ++ 6,0,100,8,0,100,9,0,132,0,0,90,7,0,100,10, ++ 0,100,11,0,132,0,0,90,8,0,100,12,0,100,13,0, ++ 132,0,0,90,9,0,100,14,0,100,15,0,132,0,0,90, ++ 10,0,100,16,0,100,17,0,132,0,0,90,11,0,101,12, ++ 0,100,18,0,100,19,0,132,0,0,131,1,0,90,13,0, ++ 100,20,0,83,41,21,218,19,69,120,116,101,110,115,105,111, ++ 110,70,105,108,101,76,111,97,100,101,114,122,93,76,111,97, ++ 100,101,114,32,102,111,114,32,101,120,116,101,110,115,105,111, ++ 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, ++ 84,104,101,32,99,111,110,115,116,114,117,99,116,111,114,32, ++ 105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,119, ++ 111,114,107,32,119,105,116,104,32,70,105,108,101,70,105,110, ++ 100,101,114,46,10,10,32,32,32,32,99,3,0,0,0,0, ++ 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, ++ 22,0,0,0,124,1,0,124,0,0,95,0,0,124,2,0, ++ 124,0,0,95,1,0,100,0,0,83,41,1,78,41,2,114, ++ 107,0,0,0,114,36,0,0,0,41,3,114,109,0,0,0, ++ 114,107,0,0,0,114,36,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,186,0,0,0,121,3, ++ 0,0,115,4,0,0,0,0,1,9,1,122,28,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, +- 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, +- 0,115,48,0,0,0,116,0,0,124,0,0,106,1,0,131, +- 1,0,100,1,0,25,137,0,0,116,2,0,135,0,0,102, +- 1,0,100,2,0,100,3,0,134,0,0,116,3,0,68,131, +- 1,0,131,1,0,83,41,4,122,49,82,101,116,117,114,110, +- 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, +- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, +- 32,97,32,112,97,99,107,97,103,101,46,114,29,0,0,0, +- 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, +- 0,51,0,0,0,115,31,0,0,0,124,0,0,93,21,0, +- 125,1,0,136,0,0,100,0,0,124,1,0,23,107,2,0, +- 86,1,113,3,0,100,1,0,83,41,2,114,185,0,0,0, +- 78,114,4,0,0,0,41,2,114,22,0,0,0,218,6,115, +- 117,102,102,105,120,41,1,218,9,102,105,108,101,95,110,97, +- 109,101,114,4,0,0,0,114,5,0,0,0,250,9,60,103, +- 101,110,101,120,112,114,62,149,3,0,0,115,2,0,0,0, +- 6,1,122,49,69,120,116,101,110,115,105,111,110,70,105,108, +- 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, +- 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, +- 101,120,112,114,62,41,4,114,38,0,0,0,114,35,0,0, +- 0,218,3,97,110,121,218,18,69,88,84,69,78,83,73,79, +- 78,95,83,85,70,70,73,88,69,83,41,2,114,108,0,0, +- 0,114,126,0,0,0,114,4,0,0,0,41,1,114,226,0, +- 0,0,114,5,0,0,0,114,159,0,0,0,146,3,0,0, +- 115,6,0,0,0,0,2,19,1,18,1,122,30,69,120,116, ++ 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,34, ++ 0,0,0,124,0,0,106,0,0,124,1,0,106,0,0,107, ++ 2,0,111,33,0,124,0,0,106,1,0,124,1,0,106,1, ++ 0,107,2,0,83,41,1,78,41,2,114,212,0,0,0,114, ++ 119,0,0,0,41,2,114,109,0,0,0,114,213,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 252,0,0,0,11,7,0,0,115,14,0,0,0,12,1,12, -+ 3,18,9,12,3,12,3,12,3,12,3,114,252,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, -- 0,64,0,0,0,115,121,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,90, -- 4,0,100,3,0,90,5,0,100,4,0,90,6,0,101,7, -- 0,100,5,0,100,6,0,132,0,0,131,1,0,90,8,0, -- 101,7,0,100,7,0,100,8,0,132,0,0,131,1,0,90, -- 9,0,101,7,0,100,9,0,100,9,0,100,10,0,100,11, -- 0,132,2,0,131,1,0,90,10,0,101,7,0,100,9,0, -- 100,12,0,100,13,0,132,1,0,131,1,0,90,11,0,100, -- 9,0,83,41,14,218,21,87,105,110,100,111,119,115,82,101, -- 103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101, -- 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, -- 111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97, -- 114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111, -- 119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111, -- 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, -- 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, -- 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, -- 102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119, -- 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, -- 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, -- 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, -- 108,110,97,109,101,125,92,68,101,98,117,103,70,99,2,0, -- 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, -- 0,0,115,67,0,0,0,121,23,0,116,0,0,106,1,0, -- 116,0,0,106,2,0,124,1,0,131,2,0,83,87,110,37, -- 0,4,116,3,0,107,10,0,114,62,0,1,1,1,116,0, -- 0,106,1,0,116,0,0,106,4,0,124,1,0,131,2,0, -- 83,89,110,1,0,88,100,0,0,83,41,1,78,41,5,218, -- 7,95,119,105,110,114,101,103,90,7,79,112,101,110,75,101, -- 121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95, -- 85,83,69,82,114,40,0,0,0,90,18,72,75,69,89,95, -- 76,79,67,65,76,95,77,65,67,72,73,78,69,41,2,114, -- 11,1,0,0,218,3,107,101,121,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,14,95,111,112,101,110,95, -- 114,101,103,105,115,116,114,121,121,5,0,0,115,8,0,0, -- 0,0,2,3,1,23,1,13,1,122,36,87,105,110,100,111, -- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, -- 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, -- 2,0,0,0,0,0,0,0,6,0,0,0,16,0,0,0, -- 67,0,0,0,115,142,0,0,0,124,0,0,106,0,0,114, -- 21,0,124,0,0,106,1,0,125,2,0,110,9,0,124,0, -- 0,106,2,0,125,2,0,124,2,0,106,3,0,100,1,0, -- 124,1,0,100,2,0,116,4,0,106,5,0,100,0,0,100, -- 3,0,133,2,0,25,131,0,2,125,3,0,121,46,0,124, -- 0,0,106,6,0,124,3,0,131,1,0,143,25,0,125,4, -- 0,116,7,0,106,8,0,124,4,0,100,4,0,131,2,0, -- 125,5,0,87,100,0,0,81,88,87,110,22,0,4,116,9, -- 0,107,10,0,114,137,0,1,1,1,100,0,0,83,89,110, -- 1,0,88,124,5,0,83,41,5,78,114,158,0,0,0,90, -- 11,115,121,115,95,118,101,114,115,105,111,110,114,136,0,0, -- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, -- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, -- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, -- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, -- 0,218,7,118,101,114,115,105,111,110,114,25,1,0,0,114, -- 23,1,0,0,90,10,81,117,101,114,121,86,97,108,117,101, -- 114,40,0,0,0,41,6,114,11,1,0,0,114,158,0,0, -- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, -- 24,1,0,0,90,4,104,107,101,121,218,8,102,105,108,101, -- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, -- 105,115,116,114,121,128,5,0,0,115,22,0,0,0,0,2, -- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,28,1, -- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, -- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, -- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, -- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, -- 0,0,115,155,0,0,0,124,0,0,106,0,0,124,1,0, -- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, -- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, -- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, -- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,78,0, -- 116,3,0,131,0,0,68,93,67,0,92,2,0,125,5,0, -- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, -- 1,0,131,1,0,114,80,0,116,6,0,124,1,0,124,5, -- 0,124,1,0,124,4,0,131,2,0,100,1,0,124,4,0, -- 131,2,1,125,7,0,124,7,0,83,113,80,0,87,100,0, -- 0,83,41,2,78,114,217,0,0,0,41,7,114,31,1,0, -- 0,114,39,0,0,0,114,40,0,0,0,114,240,0,0,0, -- 114,230,0,0,0,114,231,0,0,0,114,173,0,0,0,41, -- 8,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,12,1,0,0,114,30,1,0,0,114,169,0,0,0,114, -- 127,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,13,1,0,0,143,5,0, -- 0,115,24,0,0,0,0,2,15,1,12,1,4,1,3,1, -- 14,1,13,1,9,1,22,1,21,1,21,1,9,1,122,31, -- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, -- 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, -- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, -- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, -- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, -- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, -- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, -- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, -- 32,32,32,32,32,32,78,41,2,114,13,1,0,0,114,169, -- 0,0,0,41,4,114,11,1,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,14,1,0,0,158,5,0, -- 0,115,8,0,0,0,0,7,18,1,12,1,7,2,122,33, -- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -- 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, -- 101,41,12,114,57,0,0,0,114,56,0,0,0,114,58,0, -- 0,0,114,59,0,0,0,114,28,1,0,0,114,27,1,0, -- 0,114,26,1,0,0,114,18,1,0,0,114,25,1,0,0, -- 114,31,1,0,0,114,13,1,0,0,114,14,1,0,0,114, ++ 214,0,0,0,125,3,0,0,115,4,0,0,0,0,1,18, ++ 1,122,26,69,120,116,101,110,115,105,111,110,70,105,108,101, ++ 76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,0, ++ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, ++ 0,0,115,26,0,0,0,116,0,0,124,0,0,106,1,0, ++ 131,1,0,116,0,0,124,0,0,106,2,0,131,1,0,65, ++ 83,41,1,78,41,3,114,215,0,0,0,114,107,0,0,0, ++ 114,36,0,0,0,41,1,114,109,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,216,0,0,0, ++ 129,3,0,0,115,2,0,0,0,0,1,122,28,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, +- 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 115,4,0,0,0,100,1,0,83,41,2,122,63,82,101,116, +- 117,114,110,32,78,111,110,101,32,97,115,32,97,110,32,101, +- 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, +- 99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32, +- 99,111,100,101,32,111,98,106,101,99,116,46,78,114,4,0, +- 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,187,0, +- 0,0,152,3,0,0,115,2,0,0,0,0,2,122,28,69, +- 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, +- 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 115,4,0,0,0,100,1,0,83,41,2,122,53,82,101,116, +- 117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101, +- 110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97, +- 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, +- 101,46,78,114,4,0,0,0,41,2,114,108,0,0,0,114, +- 126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,202,0,0,0,156,3,0,0,115,2,0,0, +- 0,0,2,122,30,69,120,116,101,110,115,105,111,110,70,105, +- 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, +- 114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, +- 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, +- 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, +- 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, +- 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, +- 114,46,41,1,114,35,0,0,0,41,2,114,108,0,0,0, +- 114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,157,0,0,0,160,3,0,0,115,2,0, +- 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, +- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, +- 108,101,110,97,109,101,78,41,14,114,112,0,0,0,114,111, +- 0,0,0,114,113,0,0,0,114,114,0,0,0,114,185,0, +- 0,0,114,213,0,0,0,114,215,0,0,0,114,186,0,0, +- 0,114,191,0,0,0,114,159,0,0,0,114,187,0,0,0, +- 114,202,0,0,0,114,123,0,0,0,114,157,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,22,1,0,0,109,5,0,0,115,20,0,0, -- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, -- 1,21,14,3,1,114,22,1,0,0,99,0,0,0,0,0, +- 0,0,0,114,224,0,0,0,113,3,0,0,115,20,0,0, +- 0,12,6,6,2,12,4,12,4,12,3,12,8,12,6,12, +- 6,12,4,12,4,114,224,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, -- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6, -- 0,90,7,0,100,6,0,83,41,7,218,13,95,76,111,97, -- 100,101,114,66,97,115,105,99,115,122,83,66,97,115,101,32, -- 99,108,97,115,115,32,111,102,32,99,111,109,109,111,110,32, -- 99,111,100,101,32,110,101,101,100,101,100,32,98,121,32,98, -- 111,116,104,32,83,111,117,114,99,101,76,111,97,100,101,114, -- 32,97,110,100,10,32,32,32,32,83,111,117,114,99,101,108, -- 101,115,115,70,105,108,101,76,111,97,100,101,114,46,99,2, -- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, -- 0,0,0,115,88,0,0,0,116,0,0,124,0,0,106,1, -- 0,124,1,0,131,1,0,131,1,0,100,1,0,25,125,2, -- 0,124,2,0,106,2,0,100,2,0,100,1,0,131,2,0, -- 100,3,0,25,125,3,0,124,1,0,106,3,0,100,2,0, -- 131,1,0,100,4,0,25,125,4,0,124,3,0,100,5,0, -- 107,2,0,111,87,0,124,4,0,100,5,0,107,3,0,83, -- 41,6,122,141,67,111,110,99,114,101,116,101,32,105,109,112, -- 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, -- 110,115,112,101,99,116,76,111,97,100,101,114,46,105,115,95, -- 112,97,99,107,97,103,101,32,98,121,32,99,104,101,99,107, -- 105,110,103,32,105,102,10,32,32,32,32,32,32,32,32,116, -- 104,101,32,112,97,116,104,32,114,101,116,117,114,110,101,100, -- 32,98,121,32,103,101,116,95,102,105,108,101,110,97,109,101, -- 32,104,97,115,32,97,32,102,105,108,101,110,97,109,101,32, -- 111,102,32,39,95,95,105,110,105,116,95,95,46,112,121,39, -- 46,114,29,0,0,0,114,116,0,0,0,114,84,0,0,0, -- 114,115,0,0,0,114,72,0,0,0,41,4,114,38,0,0, -- 0,114,238,0,0,0,114,34,0,0,0,114,32,0,0,0, -- 41,5,114,71,0,0,0,114,158,0,0,0,114,131,0,0, -- 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, -- 90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,177, -- 5,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1, -- 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, -- 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, -- 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, -- 80,0,0,0,124,0,0,106,0,0,124,1,0,106,1,0, -- 131,1,0,125,2,0,124,2,0,100,1,0,107,8,0,114, -- 57,0,116,2,0,100,2,0,106,3,0,124,1,0,106,1, -- 0,131,1,0,131,1,0,130,1,0,110,0,0,116,4,0, -- 116,5,0,124,2,0,124,1,0,106,6,0,131,3,0,1, -- 100,1,0,83,41,3,122,19,69,120,101,99,117,116,101,32, -- 116,104,101,32,109,111,100,117,108,101,46,78,122,52,99,97, -- 110,110,111,116,32,108,111,97,100,32,109,111,100,117,108,101, -- 32,123,33,114,125,32,119,104,101,110,32,103,101,116,95,99, -- 111,100,101,40,41,32,114,101,116,117,114,110,115,32,78,111, -- 110,101,41,7,114,15,1,0,0,114,57,0,0,0,114,153, -- 0,0,0,114,47,0,0,0,114,114,0,0,0,114,175,0, -- 0,0,114,63,0,0,0,41,3,114,71,0,0,0,114,179, -- 0,0,0,114,194,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,1,1,0,0,185,5,0,0, -- 115,10,0,0,0,0,2,18,1,12,1,3,1,24,1,122, -- 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,101, -- 120,101,99,95,109,111,100,117,108,101,78,41,8,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,114,219,0,0,0,114,1,1,0,0,114,180,0,0,0, -- 114,4,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,32,1,0,0,172,5, -- 0,0,115,8,0,0,0,12,3,6,2,12,8,12,8,114, -- 32,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, -- 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, -- 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, -- 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, -- 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, -- 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, -- 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, -- 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, -- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, -- 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, -- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, -- 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, -- 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, -- 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, -- 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, -- 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, -- 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, -- 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, -- 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, -- 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, -- 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, -- 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, -- 114,71,0,0,0,114,35,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,10,112,97,116,104,95, -- 109,116,105,109,101,198,5,0,0,115,2,0,0,0,0,6, -- 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, -- 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,20, -- 0,0,0,105,1,0,124,0,0,106,0,0,124,1,0,131, -- 1,0,100,1,0,54,83,41,2,97,170,1,0,0,79,112, -- 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, -- 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, -- 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, -- 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, -- 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, -- 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, -- 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, -- 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, -- 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, -- 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, -- 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, -- 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, -- 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, -- 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, -- 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, -- 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, -- 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, -- 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, -- 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, -- 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, -- 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, -- 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, -- 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, -- 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, -- 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, -- 32,32,32,32,32,32,32,32,114,183,0,0,0,41,1,114, -- 35,1,0,0,41,2,114,71,0,0,0,114,35,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 10,112,97,116,104,95,115,116,97,116,115,206,5,0,0,115, -- 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, -- 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, -- 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -- 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, -- 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, -- 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, -- 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, -- 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, -- 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, -- 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, -- 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, -- 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, -- 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, -- 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, -- 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, -- 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, -- 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, -- 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, -- 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, -- 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, -- 71,0,0,0,114,141,0,0,0,90,10,99,97,99,104,101, -- 95,112,97,116,104,114,53,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,15,95,99,97,99,104, -- 101,95,98,121,116,101,99,111,100,101,219,5,0,0,115,2, -- 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, -- 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, -- 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, -- 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, -- 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, -- 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, -- 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, -- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, -- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, -- 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, -- 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, -- 115,46,10,32,32,32,32,32,32,32,32,78,114,4,0,0, -- 0,41,3,114,71,0,0,0,114,35,0,0,0,114,53,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,37,1,0,0,229,5,0,0,115,0,0,0,0,122, -- 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, -- 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, -- 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, -- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, -- 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, -- 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, -- 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, -- 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, -- 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, -- 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, -- 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, -- 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, -- 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, -- 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, -- 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, -- 103,101,116,95,100,97,116,97,40,41,114,67,0,0,0,78, -- 41,5,114,238,0,0,0,218,8,103,101,116,95,100,97,116, -- 97,114,40,0,0,0,114,153,0,0,0,114,203,0,0,0, -- 41,5,114,71,0,0,0,114,158,0,0,0,114,35,0,0, -- 0,114,201,0,0,0,218,3,101,120,99,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,236, -- 5,0,0,115,14,0,0,0,0,2,15,1,3,1,19,1, -- 18,1,9,1,31,1,122,23,83,111,117,114,99,101,76,111, -- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,218, -- 9,95,111,112,116,105,109,105,122,101,114,29,0,0,0,99, -- 3,0,0,0,1,0,0,0,4,0,0,0,9,0,0,0, -- 67,0,0,0,115,31,0,0,0,116,0,0,116,1,0,124, -- 1,0,124,2,0,100,1,0,100,2,0,100,3,0,100,4, -- 0,124,3,0,131,4,2,83,41,5,122,130,82,101,116,117, -- 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, -- 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, -- 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, -- 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, -- 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, -- 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, -- 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, -- 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,175, -- 0,0,0,218,12,100,111,110,116,95,105,110,104,101,114,105, -- 116,84,114,118,0,0,0,41,2,114,114,0,0,0,218,7, -- 99,111,109,112,105,108,101,41,4,114,71,0,0,0,114,53, -- 0,0,0,114,35,0,0,0,114,41,1,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,14,115,111, -- 117,114,99,101,95,116,111,95,99,111,100,101,246,5,0,0, -- 115,4,0,0,0,0,5,18,1,122,27,83,111,117,114,99, -- 101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,116, -- 111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,10, -- 0,0,0,45,0,0,0,67,0,0,0,115,177,1,0,0, -- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,100, -- 1,0,125,3,0,121,16,0,116,1,0,124,2,0,131,1, -- 0,125,4,0,87,110,24,0,4,116,2,0,107,10,0,114, -- 63,0,1,1,1,100,1,0,125,4,0,89,110,202,0,88, -- 121,19,0,124,0,0,106,3,0,124,2,0,131,1,0,125, -- 5,0,87,110,18,0,4,116,4,0,107,10,0,114,103,0, -- 1,1,1,89,110,162,0,88,116,5,0,124,5,0,100,2, -- 0,25,131,1,0,125,3,0,121,19,0,124,0,0,106,6, -- 0,124,4,0,131,1,0,125,6,0,87,110,18,0,4,116, -- 7,0,107,10,0,114,159,0,1,1,1,89,110,106,0,88, -- 121,34,0,116,8,0,124,6,0,100,3,0,124,5,0,100, -- 4,0,124,1,0,100,5,0,124,4,0,131,1,3,125,7, -- 0,87,110,24,0,4,116,9,0,116,10,0,102,2,0,107, -- 10,0,114,220,0,1,1,1,89,110,45,0,88,116,11,0, -- 100,6,0,124,4,0,124,2,0,131,3,0,1,116,12,0, -- 124,7,0,100,4,0,124,1,0,100,7,0,124,4,0,100, -- 8,0,124,2,0,131,1,3,83,124,0,0,106,6,0,124, -- 2,0,131,1,0,125,8,0,124,0,0,106,13,0,124,8, -- 0,124,2,0,131,2,0,125,9,0,116,11,0,100,9,0, -- 124,2,0,131,2,0,1,116,14,0,106,15,0,12,114,173, -- 1,124,4,0,100,1,0,107,9,0,114,173,1,124,3,0, -- 100,1,0,107,9,0,114,173,1,116,16,0,124,9,0,124, -- 3,0,116,17,0,124,8,0,131,1,0,131,3,0,125,6, -- 0,121,36,0,124,0,0,106,18,0,124,2,0,124,4,0, -- 124,6,0,131,3,0,1,116,11,0,100,10,0,124,4,0, -- 131,2,0,1,87,113,173,1,4,116,2,0,107,10,0,114, -- 169,1,1,1,1,89,113,173,1,88,110,0,0,124,9,0, -- 83,41,11,122,190,67,111,110,99,114,101,116,101,32,105,109, -- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, -- 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, -- 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, -- 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, -- 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, -- 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, -- 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, -- 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, -- 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, -- 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, -- 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, -- 32,32,32,78,114,183,0,0,0,114,187,0,0,0,114,67, -- 0,0,0,114,35,0,0,0,122,13,123,125,32,109,97,116, -- 99,104,101,115,32,123,125,114,140,0,0,0,114,141,0,0, -- 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102, -- 114,111,109,32,123,125,122,10,119,114,111,116,101,32,123,33, -- 114,125,41,19,114,238,0,0,0,114,132,0,0,0,114,124, -- 0,0,0,114,36,1,0,0,114,34,1,0,0,114,14,0, -- 0,0,114,39,1,0,0,114,40,0,0,0,114,190,0,0, -- 0,114,153,0,0,0,114,186,0,0,0,114,152,0,0,0, -- 114,195,0,0,0,114,44,1,0,0,114,7,0,0,0,218, -- 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, -- 99,111,100,101,114,198,0,0,0,114,31,0,0,0,114,38, -- 1,0,0,41,10,114,71,0,0,0,114,158,0,0,0,114, -- 141,0,0,0,114,188,0,0,0,114,140,0,0,0,218,2, -- 115,116,114,53,0,0,0,218,10,98,121,116,101,115,95,100, -- 97,116,97,114,201,0,0,0,90,11,99,111,100,101,95,111, -- 98,106,101,99,116,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,15,1,0,0,254,5,0,0,115,78,0, -- 0,0,0,7,15,1,6,1,3,1,16,1,13,1,11,2, -- 3,1,19,1,13,1,5,2,16,1,3,1,19,1,13,1, -- 5,2,3,1,9,1,12,1,13,1,19,1,5,2,9,1, -- 7,1,15,1,6,1,7,1,15,1,18,1,13,1,22,1, -- 12,1,9,1,15,1,3,1,19,1,17,1,13,1,8,1, -- 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, -- 101,116,95,99,111,100,101,78,114,138,0,0,0,41,10,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,35, -- 1,0,0,114,36,1,0,0,114,38,1,0,0,114,37,1, -- 0,0,114,16,1,0,0,114,44,1,0,0,114,15,1,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,33,1,0,0,196,5,0,0,115,14, -- 0,0,0,12,2,12,8,12,13,12,10,12,7,12,10,18, -- 8,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,4,0,0,0,0,0,0,0,115,112,0,0,0, -- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, -- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, -- 132,0,0,90,6,0,101,7,0,135,0,0,102,1,0,100, -- 8,0,100,9,0,134,0,0,131,1,0,90,8,0,101,7, -- 0,100,10,0,100,11,0,132,0,0,131,1,0,90,9,0, -- 100,12,0,100,13,0,132,0,0,90,10,0,135,0,0,83, -- 41,14,218,10,70,105,108,101,76,111,97,100,101,114,122,103, -- 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, -- 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, -- 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, -- 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, -- 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, -- 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, -- 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, -- 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, -- 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, -- 95,1,0,100,1,0,83,41,2,122,75,67,97,99,104,101, -- 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, -- 32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111, -- 32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32, -- 98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102, -- 105,110,100,101,114,46,78,41,2,114,67,0,0,0,114,35, -- 0,0,0,41,3,114,71,0,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,55,6,0,0,115,4,0,0, -- 0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101, -- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, -- 34,0,0,0,124,0,0,106,0,0,124,1,0,106,0,0, -- 107,2,0,111,33,0,124,0,0,106,1,0,124,1,0,106, -- 1,0,107,2,0,83,41,1,78,41,2,114,224,0,0,0, -- 114,63,0,0,0,41,2,114,71,0,0,0,114,227,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,229,0,0,0,61,6,0,0,115,4,0,0,0,0,1, -- 18,1,122,17,70,105,108,101,76,111,97,100,101,114,46,95, -- 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, -- 0,106,2,0,131,1,0,65,83,41,1,78,41,3,218,4, -- 104,97,115,104,114,67,0,0,0,114,35,0,0,0,41,1, -- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,8,95,95,104,97,115,104,95,95,65,6, -- 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, -- 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, -- 0,0,0,115,22,0,0,0,116,0,0,116,1,0,124,0, -- 0,131,2,0,106,2,0,124,1,0,131,1,0,83,41,1, -- 122,100,76,111,97,100,32,97,32,109,111,100,117,108,101,32, -- 102,114,111,109,32,97,32,102,105,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, -- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, -- 32,32,32,32,32,32,41,3,218,5,115,117,112,101,114,114, -- 48,1,0,0,114,4,1,0,0,41,2,114,71,0,0,0, -- 114,158,0,0,0,41,1,114,224,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,4,1,0,0,68,6,0,0,115, -- 2,0,0,0,0,10,122,22,70,105,108,101,76,111,97,100, -- 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, -- 0,0,0,115,7,0,0,0,124,0,0,106,0,0,83,41, -- 1,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, -- 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, -- 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, -- 121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,114, -- 35,0,0,0,41,2,114,71,0,0,0,114,158,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 238,0,0,0,80,6,0,0,115,2,0,0,0,0,3,122, -- 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, -- 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, -- 0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,0, -- 0,0,116,0,0,106,1,0,124,1,0,100,1,0,131,2, -- 0,143,17,0,125,2,0,124,2,0,106,2,0,131,0,0, -- 83,87,100,2,0,81,88,100,2,0,83,41,3,122,39,82, -- 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,102, -- 114,111,109,32,112,97,116,104,32,97,115,32,114,97,119,32, -- 98,121,116,101,115,46,218,1,114,78,41,3,114,49,0,0, -- 0,114,50,0,0,0,90,4,114,101,97,100,41,3,114,71, -- 0,0,0,114,35,0,0,0,114,54,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,39,1,0, -- 0,85,6,0,0,115,4,0,0,0,0,2,21,1,122,19, -- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, -- 97,116,97,41,11,114,57,0,0,0,114,56,0,0,0,114, -- 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,229, -- 0,0,0,114,50,1,0,0,114,156,0,0,0,114,4,1, -- 0,0,114,238,0,0,0,114,39,1,0,0,114,4,0,0, -- 0,114,4,0,0,0,41,1,114,224,0,0,0,114,5,0, -- 0,0,114,48,1,0,0,50,6,0,0,115,14,0,0,0, -- 12,3,6,2,12,6,12,4,12,3,24,12,18,5,114,48, -- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -- 4,0,0,0,64,0,0,0,115,64,0,0,0,101,0,0, -- 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, -- 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, -- 0,132,0,0,90,5,0,100,6,0,100,7,0,100,8,0, -- 100,9,0,132,0,1,90,6,0,100,10,0,83,41,11,114, -- 8,1,0,0,122,62,67,111,110,99,114,101,116,101,32,105, -- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, -- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, -- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, -- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,3,0,0,0,67,0,0,0,115,36,0,0,0,116,0, -- 0,124,1,0,131,1,0,125,2,0,105,2,0,124,2,0, -- 106,1,0,100,1,0,54,124,2,0,106,2,0,100,2,0, -- 54,83,41,3,122,33,82,101,116,117,114,110,32,116,104,101, -- 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, -- 101,32,112,97,116,104,46,114,183,0,0,0,114,184,0,0, -- 0,41,3,114,39,0,0,0,218,8,115,116,95,109,116,105, -- 109,101,90,7,115,116,95,115,105,122,101,41,3,114,71,0, -- 0,0,114,35,0,0,0,114,46,1,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,36,1,0,0, -- 95,6,0,0,115,4,0,0,0,0,2,12,1,122,27,83, -- 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, -- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, -- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, -- 34,0,0,0,116,0,0,124,1,0,131,1,0,125,4,0, -- 124,0,0,106,1,0,124,2,0,124,3,0,100,1,0,124, -- 4,0,131,2,1,83,41,2,78,218,5,95,109,111,100,101, -- 41,2,114,144,0,0,0,114,37,1,0,0,41,5,114,71, -- 0,0,0,114,141,0,0,0,114,140,0,0,0,114,53,0, -- 0,0,114,42,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,38,1,0,0,100,6,0,0,115, -- 4,0,0,0,0,2,12,1,122,32,83,111,117,114,99,101, -- 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, -- 101,95,98,121,116,101,99,111,100,101,114,54,1,0,0,105, -- 182,1,0,0,99,3,0,0,0,1,0,0,0,9,0,0, -- 0,18,0,0,0,67,0,0,0,115,53,1,0,0,116,0, -- 0,124,1,0,131,1,0,92,2,0,125,4,0,125,5,0, -- 103,0,0,125,6,0,120,54,0,124,4,0,114,80,0,116, -- 1,0,124,4,0,131,1,0,12,114,80,0,116,0,0,124, -- 4,0,131,1,0,92,2,0,125,4,0,125,7,0,124,6, -- 0,106,2,0,124,7,0,131,1,0,1,113,27,0,87,120, -- 132,0,116,3,0,124,6,0,131,1,0,68,93,118,0,125, -- 7,0,116,4,0,124,4,0,124,7,0,131,2,0,125,4, -- 0,121,17,0,116,5,0,106,6,0,124,4,0,131,1,0, -- 1,87,113,94,0,4,116,7,0,107,10,0,114,155,0,1, -- 1,1,119,94,0,89,113,94,0,4,116,8,0,107,10,0, -- 114,211,0,1,125,8,0,1,122,25,0,116,9,0,100,1, -- 0,124,4,0,124,8,0,131,3,0,1,100,2,0,83,87, -- 89,100,2,0,100,2,0,125,8,0,126,8,0,88,113,94, -- 0,88,113,94,0,87,121,33,0,116,10,0,124,1,0,124, -- 2,0,124,3,0,131,3,0,1,116,9,0,100,3,0,124, -- 1,0,131,2,0,1,87,110,53,0,4,116,8,0,107,10, -- 0,114,48,1,1,125,8,0,1,122,21,0,116,9,0,100, -- 1,0,124,1,0,124,8,0,131,3,0,1,87,89,100,2, -- 0,100,2,0,125,8,0,126,8,0,88,110,1,0,88,100, -- 2,0,83,41,4,122,27,87,114,105,116,101,32,98,121,116, -- 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, -- 101,46,122,27,99,111,117,108,100,32,110,111,116,32,99,114, -- 101,97,116,101,32,123,33,114,125,58,32,123,33,114,125,78, -- 122,12,99,114,101,97,116,101,100,32,123,33,114,125,41,11, -- 114,38,0,0,0,114,46,0,0,0,114,223,0,0,0,114, -- 33,0,0,0,114,28,0,0,0,114,3,0,0,0,90,5, -- 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, -- 115,69,114,114,111,114,114,40,0,0,0,114,152,0,0,0, -- 114,55,0,0,0,41,9,114,71,0,0,0,114,35,0,0, -- 0,114,53,0,0,0,114,54,1,0,0,114,233,0,0,0, -- 114,131,0,0,0,114,27,0,0,0,114,23,0,0,0,114, -- 40,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,37,1,0,0,105,6,0,0,115,38,0,0, -- 0,0,2,18,1,6,2,22,1,18,1,17,2,19,1,15, -- 1,3,1,17,1,13,2,7,1,18,3,16,1,27,1,3, -- 1,16,1,17,1,18,2,122,25,83,111,117,114,99,101,70, -- 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, -- 116,97,78,41,7,114,57,0,0,0,114,56,0,0,0,114, -- 58,0,0,0,114,59,0,0,0,114,36,1,0,0,114,38, -- 1,0,0,114,37,1,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,8,1,0, -- 0,91,6,0,0,115,8,0,0,0,12,2,6,2,12,5, -- 12,5,114,8,1,0,0,99,0,0,0,0,0,0,0,0, -- 0,0,0,0,2,0,0,0,64,0,0,0,115,46,0,0, -- 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, -- 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, -- 4,0,100,5,0,132,0,0,90,5,0,100,6,0,83,41, -- 7,114,7,1,0,0,122,45,76,111,97,100,101,114,32,119, -- 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, -- 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, -- 111,114,116,115,46,99,2,0,0,0,0,0,0,0,5,0, -- 0,0,6,0,0,0,67,0,0,0,115,76,0,0,0,124, -- 0,0,106,0,0,124,1,0,131,1,0,125,2,0,124,0, -- 0,106,1,0,124,2,0,131,1,0,125,3,0,116,2,0, -- 124,3,0,100,1,0,124,1,0,100,2,0,124,2,0,131, -- 1,2,125,4,0,116,3,0,124,4,0,100,1,0,124,1, -- 0,100,3,0,124,2,0,131,1,2,83,41,4,78,114,67, -- 0,0,0,114,35,0,0,0,114,140,0,0,0,41,4,114, -- 238,0,0,0,114,39,1,0,0,114,190,0,0,0,114,195, -- 0,0,0,41,5,114,71,0,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,53,0,0,0,114,47,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,15,1, -- 0,0,138,6,0,0,115,8,0,0,0,0,1,15,1,15, -- 1,24,1,122,29,83,111,117,114,99,101,108,101,115,115,70, -- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, -- 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, -- 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, -- 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, -- 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, -- 0,144,6,0,0,115,2,0,0,0,0,2,122,31,83,111, -- 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, -- 101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6, -- 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, -- 59,0,0,0,114,15,1,0,0,114,16,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,7,1,0,0,134,6,0,0,115,6,0,0,0, -- 12,2,6,2,12,6,114,7,1,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, -- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -- 6,0,100,7,0,132,0,0,90,6,0,101,7,0,100,8, -- 0,100,9,0,132,0,0,131,1,0,90,8,0,100,10,0, -- 100,11,0,132,0,0,90,9,0,100,12,0,100,13,0,132, -- 0,0,90,10,0,100,14,0,100,15,0,132,0,0,90,11, -- 0,101,7,0,100,16,0,100,17,0,132,0,0,131,1,0, -- 90,12,0,100,18,0,83,41,19,218,19,69,120,116,101,110, -- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,122,93, -- 76,111,97,100,101,114,32,102,111,114,32,101,120,116,101,110, -- 115,105,111,110,32,109,111,100,117,108,101,115,46,10,10,32, -- 32,32,32,84,104,101,32,99,111,110,115,116,114,117,99,116, -- 111,114,32,105,115,32,100,101,115,105,103,110,101,100,32,116, -- 111,32,119,111,114,107,32,119,105,116,104,32,70,105,108,101, -- 70,105,110,100,101,114,46,10,10,32,32,32,32,99,3,0, -- 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, -- 0,0,115,22,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,2,0,124,0,0,95,1,0,100,0,0,83,41,1,78, -- 41,2,114,67,0,0,0,114,35,0,0,0,41,3,114,71, -- 0,0,0,114,67,0,0,0,114,35,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,0, -- 0,161,6,0,0,115,4,0,0,0,0,1,9,1,122,28, -- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -- 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, -- 0,115,34,0,0,0,124,0,0,106,0,0,124,1,0,106, -- 0,0,107,2,0,111,33,0,124,0,0,106,1,0,124,1, -- 0,106,1,0,107,2,0,83,41,1,78,41,2,114,224,0, -- 0,0,114,63,0,0,0,41,2,114,71,0,0,0,114,227, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,229,0,0,0,165,6,0,0,115,4,0,0,0, -- 0,1,18,1,122,26,69,120,116,101,110,115,105,111,110,70, -- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, -- 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, -- 106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131, -- 1,0,65,83,41,1,78,41,3,114,49,1,0,0,114,67, -- 0,0,0,114,35,0,0,0,41,1,114,71,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,50, -- 1,0,0,169,6,0,0,115,2,0,0,0,0,1,122,28, -- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -- 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, -- 0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0, -- 0,115,183,0,0,0,116,0,0,124,1,0,131,1,0,143, -- 29,0,1,116,1,0,116,2,0,106,3,0,124,1,0,124, -- 0,0,106,4,0,131,3,0,125,2,0,87,100,1,0,81, -- 88,116,5,0,100,2,0,124,0,0,106,4,0,131,2,0, -- 1,124,0,0,106,6,0,124,1,0,131,1,0,125,3,0, -- 124,3,0,114,124,0,116,7,0,124,2,0,100,3,0,131, -- 2,0,12,114,124,0,116,8,0,124,0,0,106,4,0,131, -- 1,0,100,4,0,25,103,1,0,124,2,0,95,9,0,110, -- 0,0,124,0,0,124,2,0,95,10,0,124,2,0,106,11, -- 0,124,2,0,95,12,0,124,3,0,115,179,0,124,2,0, -- 106,12,0,106,13,0,100,5,0,131,1,0,100,4,0,25, -- 124,2,0,95,12,0,110,0,0,124,2,0,83,41,6,122, -- 25,76,111,97,100,32,97,110,32,101,120,116,101,110,115,105, -- 111,110,32,109,111,100,117,108,101,46,78,122,33,101,120,116, -- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,108,111, -- 97,100,101,100,32,102,114,111,109,32,123,33,114,125,114,246, -- 0,0,0,114,84,0,0,0,114,116,0,0,0,41,14,114, -- 69,0,0,0,114,114,0,0,0,114,106,0,0,0,90,12, -- 108,111,97,100,95,100,121,110,97,109,105,99,114,35,0,0, -- 0,114,152,0,0,0,114,219,0,0,0,114,60,0,0,0, -- 114,38,0,0,0,114,246,0,0,0,114,204,0,0,0,114, -- 57,0,0,0,114,250,0,0,0,114,32,0,0,0,41,4, -- 114,71,0,0,0,114,158,0,0,0,114,179,0,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,4,1,0,0,172,6,0,0,115,24,0,0, -- 0,0,5,13,1,9,1,21,1,16,1,15,1,22,1,28, -- 1,9,1,12,1,6,1,28,1,122,31,69,120,116,101,110, -- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,108, -- 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,4,0,0,0,3,0,0,0,115, -- 48,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, -- 100,1,0,25,137,0,0,116,2,0,135,0,0,102,1,0, -- 100,2,0,100,3,0,134,0,0,116,3,0,68,131,1,0, -- 131,1,0,83,41,4,122,49,82,101,116,117,114,110,32,84, -- 114,117,101,32,105,102,32,116,104,101,32,101,120,116,101,110, -- 115,105,111,110,32,109,111,100,117,108,101,32,105,115,32,97, -- 32,112,97,99,107,97,103,101,46,114,29,0,0,0,99,1, -- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, -- 0,0,0,115,31,0,0,0,124,0,0,93,21,0,125,1, -- 0,136,0,0,100,0,0,124,1,0,23,107,2,0,86,1, -- 113,3,0,100,1,0,83,41,2,114,72,0,0,0,78,114, -- 4,0,0,0,41,2,114,22,0,0,0,218,6,115,117,102, -- 102,105,120,41,1,218,9,102,105,108,101,95,110,97,109,101, -- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,193, -- 6,0,0,115,2,0,0,0,6,1,122,49,69,120,116,101, -- 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, -- 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, -- 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, -- 38,0,0,0,114,35,0,0,0,114,78,0,0,0,218,18, -- 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, -- 69,83,41,2,114,71,0,0,0,114,158,0,0,0,114,4, -- 0,0,0,41,1,114,58,1,0,0,114,5,0,0,0,114, -- 219,0,0,0,190,6,0,0,115,6,0,0,0,0,2,19, -- 1,18,1,122,30,69,120,116,101,110,115,105,111,110,70,105, -- 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, -- 97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, -- 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, -- 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, -- 101,99,116,46,78,114,4,0,0,0,41,2,114,71,0,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,15,1,0,0,196,6,0,0,115,2, -- 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, -- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, -- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, -- 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, -- 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, -- 41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,0, -- 200,6,0,0,115,2,0,0,0,0,2,122,30,69,120,116, -- 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, -- 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, -- 115,7,0,0,0,124,0,0,106,0,0,83,41,1,122,58, -- 82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,105, -- 108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,116, -- 104,101,32,102,105,110,100,101,114,46,41,1,114,35,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,238,0,0, -- 0,204,6,0,0,115,2,0,0,0,0,3,122,32,69,120, -- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, -- 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, -- 13,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, -- 114,59,0,0,0,114,72,0,0,0,114,229,0,0,0,114, -- 50,1,0,0,114,156,0,0,0,114,4,1,0,0,114,219, -- 0,0,0,114,15,1,0,0,114,16,1,0,0,114,238,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,56,1,0,0,153,6,0,0,115, -- 18,0,0,0,12,6,6,2,12,4,12,4,12,3,18,18, -- 12,6,12,4,12,4,114,56,1,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, -- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -- 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, -- 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, -- 90,8,0,100,12,0,100,13,0,132,0,0,90,9,0,100, -- 14,0,100,15,0,132,0,0,90,10,0,100,16,0,100,17, -- 0,132,0,0,90,11,0,100,18,0,100,19,0,132,0,0, -- 90,12,0,100,20,0,83,41,21,218,14,95,78,97,109,101, -- 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, -- 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, -- 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, -- 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, -- 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, -- 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, -- 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, -- 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, -- 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, -- 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, -- 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, -- 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, -- 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, -- 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, -- 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, -- 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, -- 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, -- 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, -- 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, -- 97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0, -- 0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,1, -- 0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0, -- 116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,124, -- 0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,0, -- 0,83,41,1,78,41,6,114,70,0,0,0,114,253,0,0, -- 0,114,231,0,0,0,218,16,95,103,101,116,95,112,97,114, -- 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, -- 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, -- 116,104,95,102,105,110,100,101,114,41,4,114,71,0,0,0, -- 114,67,0,0,0,114,35,0,0,0,218,11,112,97,116,104, -- 95,102,105,110,100,101,114,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,72,0,0,0,217,6,0,0,115, -- 8,0,0,0,0,1,9,1,9,1,21,1,122,23,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, -- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,4,0, -- 0,0,3,0,0,0,67,0,0,0,115,53,0,0,0,124, -- 0,0,106,0,0,106,1,0,100,1,0,131,1,0,92,3, -- 0,125,1,0,125,2,0,125,3,0,124,2,0,100,2,0, -- 107,2,0,114,43,0,100,6,0,83,124,1,0,100,5,0, -- 102,2,0,83,41,7,122,62,82,101,116,117,114,110,115,32, -- 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, -- 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, -- 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, -- 45,110,97,109,101,41,114,116,0,0,0,114,30,0,0,0, -- 114,7,0,0,0,114,35,0,0,0,114,246,0,0,0,41, -- 2,122,3,115,121,115,122,4,112,97,116,104,41,2,114,70, -- 0,0,0,114,32,0,0,0,41,4,114,71,0,0,0,114, -- 233,0,0,0,218,3,100,111,116,114,94,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,23,95, +- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, +- 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, +- 132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90, +- 8,0,100,12,0,100,13,0,132,0,0,90,9,0,100,14, +- 0,100,15,0,132,0,0,90,10,0,100,16,0,100,17,0, +- 132,0,0,90,11,0,100,18,0,100,19,0,132,0,0,90, +- 12,0,100,20,0,83,41,21,218,14,95,78,97,109,101,115, +- 112,97,99,101,80,97,116,104,97,38,1,0,0,82,101,112, +- 114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,112, +- 97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,97, +- 116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,101, +- 32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,32, +- 32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,114, +- 101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,32, +- 102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,111, +- 111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,110, +- 116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,95, +- 46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,97, +- 110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,101, +- 39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,114, +- 101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,117, +- 115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,114, +- 46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,108, +- 32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,97, +- 114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,97, +- 116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,97, +- 116,104,46,99,4,0,0,0,0,0,0,0,4,0,0,0, +- 2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,0, +- 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,116, +- 2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,0, +- 0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,0, +- 83,41,1,78,41,6,218,5,95,110,97,109,101,218,5,95, +- 112,97,116,104,114,93,0,0,0,218,16,95,103,101,116,95, +- 112,97,114,101,110,116,95,112,97,116,104,218,17,95,108,97, +- 115,116,95,112,97,114,101,110,116,95,112,97,116,104,218,12, +- 95,112,97,116,104,95,102,105,110,100,101,114,41,4,114,108, +- 0,0,0,114,106,0,0,0,114,35,0,0,0,218,11,112, +- 97,116,104,95,102,105,110,100,101,114,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,185,0,0,0,173,3, +- 0,0,115,8,0,0,0,0,1,9,1,9,1,21,1,122, +- 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, +- 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, +- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,53,0, +- 0,0,124,0,0,106,0,0,106,1,0,100,1,0,131,1, +- 0,92,3,0,125,1,0,125,2,0,125,3,0,124,2,0, +- 100,2,0,107,2,0,114,43,0,100,6,0,83,124,1,0, +- 100,5,0,102,2,0,83,41,7,122,62,82,101,116,117,114, +- 110,115,32,97,32,116,117,112,108,101,32,111,102,32,40,112, +- 97,114,101,110,116,45,109,111,100,117,108,101,45,110,97,109, +- 101,44,32,112,97,114,101,110,116,45,112,97,116,104,45,97, +- 116,116,114,45,110,97,109,101,41,114,58,0,0,0,114,30, +- 0,0,0,114,7,0,0,0,114,35,0,0,0,90,8,95, +- 95,112,97,116,104,95,95,41,2,122,3,115,121,115,122,4, +- 112,97,116,104,41,2,114,231,0,0,0,114,32,0,0,0, +- 41,4,114,108,0,0,0,114,222,0,0,0,218,3,100,111, +- 116,90,2,109,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,23,95,102,105,110,100,95,112,97,114,101, +- 110,116,95,112,97,116,104,95,110,97,109,101,115,179,3,0, +- 0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,38, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, -- 95,110,97,109,101,115,223,6,0,0,115,8,0,0,0,0, -- 2,27,1,12,2,4,3,122,38,95,78,97,109,101,115,112, -- 97,99,101,80,97,116,104,46,95,102,105,110,100,95,112,97, -- 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, -- 67,0,0,0,115,38,0,0,0,124,0,0,106,0,0,131, -- 0,0,92,2,0,125,1,0,125,2,0,116,1,0,116,2, -- 0,106,3,0,124,1,0,25,124,2,0,131,2,0,83,41, -- 1,78,41,4,114,66,1,0,0,114,62,0,0,0,114,7, -- 0,0,0,114,73,0,0,0,41,3,114,71,0,0,0,90, -- 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, -- 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, -- 97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,61,1,0,0,233,6,0,0,115,4,0,0,0, -- 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, -- 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, -- 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, -- 0,0,3,0,0,0,67,0,0,0,115,127,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, -- 0,124,1,0,124,0,0,106,2,0,107,3,0,114,120,0, -- 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, -- 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,108, -- 0,124,2,0,106,5,0,100,0,0,107,8,0,114,108,0, -- 124,2,0,106,6,0,114,108,0,124,2,0,106,6,0,124, -- 0,0,95,7,0,113,108,0,110,0,0,124,1,0,124,0, -- 0,95,2,0,110,0,0,124,0,0,106,7,0,83,41,1, -- 78,41,8,114,231,0,0,0,114,61,1,0,0,114,62,1, -- 0,0,114,63,1,0,0,114,70,0,0,0,114,169,0,0, -- 0,114,220,0,0,0,114,253,0,0,0,41,3,114,71,0, -- 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, -- 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, -- 101,237,6,0,0,115,16,0,0,0,0,2,18,1,15,1, -- 21,3,27,1,9,1,18,1,12,1,122,27,95,78,97,109, -- 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, -- 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, -- 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, +- 95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,3, +- 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, +- 124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,125, +- 2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,124, +- 2,0,131,2,0,83,41,1,78,41,4,114,238,0,0,0, +- 114,117,0,0,0,114,7,0,0,0,218,7,109,111,100,117, +- 108,101,115,41,3,114,108,0,0,0,90,18,112,97,114,101, +- 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, +- 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,233,0, +- 0,0,189,3,0,0,115,4,0,0,0,0,1,18,1,122, +- 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, ++ 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,47, ++ 0,0,0,116,0,0,106,1,0,116,2,0,106,3,0,124, ++ 1,0,131,2,0,125,2,0,116,4,0,100,1,0,124,1, ++ 0,106,5,0,124,0,0,106,6,0,131,3,0,1,124,2, ++ 0,83,41,2,122,38,67,114,101,97,116,101,32,97,110,32, ++ 117,110,105,116,105,97,108,105,122,101,100,32,101,120,116,101, ++ 110,115,105,111,110,32,109,111,100,117,108,101,122,38,101,120, ++ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,123, ++ 33,114,125,32,108,111,97,100,101,100,32,102,114,111,109,32, ++ 123,33,114,125,41,7,114,122,0,0,0,114,189,0,0,0, ++ 114,146,0,0,0,90,14,99,114,101,97,116,101,95,100,121, ++ 110,97,109,105,99,114,106,0,0,0,114,107,0,0,0,114, ++ 36,0,0,0,41,3,114,109,0,0,0,114,165,0,0,0, ++ 114,191,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,187,0,0,0,132,3,0,0,115,10,0, ++ 0,0,0,2,6,1,15,1,6,1,16,1,122,33,69,120, ++ 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, ++ 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, ++ 67,0,0,0,115,45,0,0,0,116,0,0,106,1,0,116, ++ 2,0,106,3,0,124,1,0,131,2,0,1,116,4,0,100, ++ 1,0,124,0,0,106,5,0,124,0,0,106,6,0,131,3, ++ 0,1,100,2,0,83,41,3,122,30,73,110,105,116,105,97, ++ 108,105,122,101,32,97,110,32,101,120,116,101,110,115,105,111, ++ 110,32,109,111,100,117,108,101,122,40,101,120,116,101,110,115, ++ 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, ++ 101,120,101,99,117,116,101,100,32,102,114,111,109,32,123,33, ++ 114,125,78,41,7,114,122,0,0,0,114,189,0,0,0,114, ++ 146,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, ++ 105,99,114,106,0,0,0,114,107,0,0,0,114,36,0,0, ++ 0,41,2,114,109,0,0,0,114,191,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,192,0,0, ++ 0,140,3,0,0,115,6,0,0,0,0,2,19,1,6,1, ++ 122,31,69,120,116,101,110,115,105,111,110,70,105,108,101,76, ++ 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, ++ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, ++ 0,0,3,0,0,0,115,48,0,0,0,116,0,0,124,0, ++ 0,106,1,0,131,1,0,100,1,0,25,137,0,0,116,2, ++ 0,135,0,0,102,1,0,100,2,0,100,3,0,134,0,0, ++ 116,3,0,68,131,1,0,131,1,0,83,41,4,122,49,82, ++ 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, ++ 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, ++ 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, ++ 114,30,0,0,0,99,1,0,0,0,0,0,0,0,2,0, ++ 0,0,4,0,0,0,51,0,0,0,115,31,0,0,0,124, ++ 0,0,93,21,0,125,1,0,136,0,0,100,0,0,124,1, ++ 0,23,107,2,0,86,1,113,3,0,100,1,0,83,41,2, ++ 114,186,0,0,0,78,114,5,0,0,0,41,2,114,23,0, ++ 0,0,218,6,115,117,102,102,105,120,41,1,218,9,102,105, ++ 108,101,95,110,97,109,101,114,5,0,0,0,114,6,0,0, ++ 0,250,9,60,103,101,110,101,120,112,114,62,149,3,0,0, ++ 115,2,0,0,0,6,1,122,49,69,120,116,101,110,115,105, ++ 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, ++ 112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,62, ++ 46,60,103,101,110,101,120,112,114,62,41,4,114,39,0,0, ++ 0,114,36,0,0,0,218,3,97,110,121,218,18,69,88,84, ++ 69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,41, ++ 2,114,109,0,0,0,114,127,0,0,0,114,5,0,0,0, ++ 41,1,114,227,0,0,0,114,6,0,0,0,114,160,0,0, ++ 0,146,3,0,0,115,6,0,0,0,0,2,19,1,18,1, ++ 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, ++ 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, ++ 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, ++ 122,63,82,101,116,117,114,110,32,78,111,110,101,32,97,115, ++ 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, ++ 100,117,108,101,32,99,97,110,110,111,116,32,99,114,101,97, ++ 116,101,32,97,32,99,111,100,101,32,111,98,106,101,99,116, ++ 46,78,114,5,0,0,0,41,2,114,109,0,0,0,114,127, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,188,0,0,0,152,3,0,0,115,2,0,0,0, ++ 0,2,122,28,69,120,116,101,110,115,105,111,110,70,105,108, ++ 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, ++ 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, ++ 122,53,82,101,116,117,114,110,32,78,111,110,101,32,97,115, ++ 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, ++ 101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,99, ++ 101,32,99,111,100,101,46,78,114,5,0,0,0,41,2,114, ++ 109,0,0,0,114,127,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,203,0,0,0,156,3,0, ++ 0,115,2,0,0,0,0,2,122,30,69,120,116,101,110,115, ++ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, ++ 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,7,0, ++ 0,0,124,0,0,106,0,0,83,41,1,122,58,82,101,116, ++ 117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32, ++ 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,32, ++ 97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,32, ++ 102,105,110,100,101,114,46,41,1,114,36,0,0,0,41,2, ++ 114,109,0,0,0,114,127,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,158,0,0,0,160,3, ++ 0,0,115,2,0,0,0,0,3,122,32,69,120,116,101,110, ++ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, ++ 101,116,95,102,105,108,101,110,97,109,101,78,41,14,114,113, ++ 0,0,0,114,112,0,0,0,114,114,0,0,0,114,115,0, ++ 0,0,114,186,0,0,0,114,214,0,0,0,114,216,0,0, ++ 0,114,187,0,0,0,114,192,0,0,0,114,160,0,0,0, ++ 114,188,0,0,0,114,203,0,0,0,114,124,0,0,0,114, ++ 158,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,225,0,0,0,113,3,0, ++ 0,115,20,0,0,0,12,6,6,2,12,4,12,4,12,3, ++ 12,8,12,6,12,6,12,4,12,4,114,225,0,0,0,99, ++ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 64,0,0,0,115,130,0,0,0,101,0,0,90,1,0,100, ++ 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, ++ 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, ++ 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, ++ 8,0,100,9,0,132,0,0,90,7,0,100,10,0,100,11, ++ 0,132,0,0,90,8,0,100,12,0,100,13,0,132,0,0, ++ 90,9,0,100,14,0,100,15,0,132,0,0,90,10,0,100, ++ 16,0,100,17,0,132,0,0,90,11,0,100,18,0,100,19, ++ 0,132,0,0,90,12,0,100,20,0,83,41,21,218,14,95, ++ 78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,1, ++ 0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,110, ++ 97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,101, ++ 39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,101, ++ 115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, ++ 101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,116, ++ 115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,44, ++ 32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,32, ++ 105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,32, ++ 112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,112, ++ 97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,105, ++ 115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,109, ++ 111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,104, ++ 32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,10, ++ 32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,102, ++ 105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,45, ++ 108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,116, ++ 104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,101, ++ 39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,115, ++ 121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,0, ++ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,52,0, ++ 0,0,124,1,0,124,0,0,95,0,0,124,2,0,124,0, ++ 0,95,1,0,116,2,0,124,0,0,106,3,0,131,0,0, ++ 131,1,0,124,0,0,95,4,0,124,3,0,124,0,0,95, ++ 5,0,100,0,0,83,41,1,78,41,6,218,5,95,110,97, ++ 109,101,218,5,95,112,97,116,104,114,94,0,0,0,218,16, + 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, +- 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, +- 0,67,0,0,0,115,118,0,0,0,116,0,0,124,0,0, +- 106,1,0,131,0,0,131,1,0,125,1,0,124,1,0,124, +- 0,0,106,2,0,107,3,0,114,111,0,124,0,0,106,3, +- 0,124,0,0,106,4,0,124,1,0,131,2,0,125,2,0, +- 124,2,0,100,0,0,107,9,0,114,102,0,124,2,0,106, +- 5,0,100,0,0,107,8,0,114,102,0,124,2,0,106,6, +- 0,114,102,0,124,2,0,106,6,0,124,0,0,95,7,0, +- 124,1,0,124,0,0,95,2,0,124,0,0,106,7,0,83, +- 41,1,78,41,8,114,93,0,0,0,114,233,0,0,0,114, +- 234,0,0,0,114,235,0,0,0,114,231,0,0,0,114,127, +- 0,0,0,114,156,0,0,0,114,232,0,0,0,41,3,114, +- 108,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, +- 104,114,164,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,12,95,114,101,99,97,108,99,117,108, +- 97,116,101,193,3,0,0,115,16,0,0,0,0,2,18,1, +- 15,1,21,3,27,1,9,1,12,1,9,1,122,27,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101, +- 99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,0, +- 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, +- 0,0,0,116,0,0,124,0,0,106,1,0,131,0,0,131, +- 1,0,83,41,1,78,41,2,218,4,105,116,101,114,114,240, +- 0,0,0,41,1,114,108,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,8,95,95,105,116,101, +- 114,95,95,206,3,0,0,115,2,0,0,0,0,1,122,23, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, +- 95,105,116,101,114,95,95,99,1,0,0,0,0,0,0,0, ++ 218,17,95,108,97,115,116,95,112,97,114,101,110,116,95,112, ++ 97,116,104,218,12,95,112,97,116,104,95,102,105,110,100,101, ++ 114,41,4,114,109,0,0,0,114,107,0,0,0,114,36,0, ++ 0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,186, ++ 0,0,0,173,3,0,0,115,8,0,0,0,0,1,9,1, ++ 9,1,21,1,122,23,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0, ++ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, ++ 0,0,115,53,0,0,0,124,0,0,106,0,0,106,1,0, ++ 100,1,0,131,1,0,92,3,0,125,1,0,125,2,0,125, ++ 3,0,124,2,0,100,2,0,107,2,0,114,43,0,100,6, ++ 0,83,124,1,0,100,5,0,102,2,0,83,41,7,122,62, ++ 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, ++ 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, ++ 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, ++ 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,59, ++ 0,0,0,114,31,0,0,0,114,8,0,0,0,114,36,0, ++ 0,0,90,8,95,95,112,97,116,104,95,95,41,2,122,3, ++ 115,121,115,122,4,112,97,116,104,41,2,114,232,0,0,0, ++ 114,33,0,0,0,41,4,114,109,0,0,0,114,223,0,0, ++ 0,218,3,100,111,116,90,2,109,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,23,95,102,105,110,100, ++ 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, ++ 101,115,179,3,0,0,115,8,0,0,0,0,2,27,1,12, ++ 2,4,3,122,38,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,102,105,110,100,95,112,97,114,101,110,116, ++ 95,112,97,116,104,95,110,97,109,101,115,99,1,0,0,0, ++ 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, ++ 115,38,0,0,0,124,0,0,106,0,0,131,0,0,92,2, ++ 0,125,1,0,125,2,0,116,1,0,116,2,0,106,3,0, ++ 124,1,0,25,124,2,0,131,2,0,83,41,1,78,41,4, ++ 114,239,0,0,0,114,118,0,0,0,114,8,0,0,0,218, ++ 7,109,111,100,117,108,101,115,41,3,114,109,0,0,0,90, ++ 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, ++ 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, ++ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,234,0,0,0,189,3,0,0,115,4,0,0,0, ++ 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, ++ 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, ++ 0,0,3,0,0,0,67,0,0,0,115,118,0,0,0,116, ++ 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, ++ 0,124,1,0,124,0,0,106,2,0,107,3,0,114,111,0, ++ 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, ++ 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,102, ++ 0,124,2,0,106,5,0,100,0,0,107,8,0,114,102,0, ++ 124,2,0,106,6,0,114,102,0,124,2,0,106,6,0,124, ++ 0,0,95,7,0,124,1,0,124,0,0,95,2,0,124,0, ++ 0,106,7,0,83,41,1,78,41,8,114,94,0,0,0,114, ++ 234,0,0,0,114,235,0,0,0,114,236,0,0,0,114,232, ++ 0,0,0,114,128,0,0,0,114,157,0,0,0,114,233,0, ++ 0,0,41,3,114,109,0,0,0,90,11,112,97,114,101,110, ++ 116,95,112,97,116,104,114,165,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,12,95,114,101,99, ++ 97,108,99,117,108,97,116,101,193,3,0,0,115,16,0,0, ++ 0,0,2,18,1,15,1,21,3,27,1,9,1,12,1,9, ++ 1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,114,101,99,97,108,99,117,108,97,116,101,99,1, ++ 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, ++ 0,0,0,115,16,0,0,0,116,0,0,124,0,0,106,1, ++ 0,131,0,0,131,1,0,83,41,1,78,41,2,218,4,105, ++ 116,101,114,114,241,0,0,0,41,1,114,109,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,8, ++ 95,95,105,116,101,114,95,95,206,3,0,0,115,2,0,0, ++ 0,0,1,122,23,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,95,105,116,101,114,95,95,99,1,0,0, ++ 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, ++ 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, ++ 0,0,131,1,0,83,41,1,78,41,2,114,32,0,0,0, ++ 114,241,0,0,0,41,1,114,109,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,7,95,95,108, ++ 101,110,95,95,209,3,0,0,115,2,0,0,0,0,1,122, ++ 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, -- 83,41,1,78,41,2,218,4,105,116,101,114,114,67,1,0, -- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,8,95,95,105,116,101,114,95, -- 95,250,6,0,0,115,2,0,0,0,0,1,122,23,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, -- 116,101,114,95,95,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,41, -- 1,78,41,2,114,31,0,0,0,114,67,1,0,0,41,1, -- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,7,95,95,108,101,110,95,95,253,6,0, -- 0,115,2,0,0,0,0,1,122,22,95,78,97,109,101,115, -- 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, -- 0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0, -- 124,0,0,106,1,0,131,1,0,83,41,2,78,122,20,95, -- 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, -- 114,125,41,41,2,114,47,0,0,0,114,253,0,0,0,41, -- 1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,101,0,0,0,0,7,0,0,115,2, -- 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, -- 101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, -- 0,0,0,115,16,0,0,0,124,1,0,124,0,0,106,0, -- 0,131,0,0,107,6,0,83,41,1,78,41,1,114,67,1, -- 0,0,41,2,114,71,0,0,0,218,4,105,116,101,109,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12, -- 95,95,99,111,110,116,97,105,110,115,95,95,3,7,0,0, -- 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, -- 97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105, -- 110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,2,0,0,0,67,0,0,0,115,20,0,0,0,124,0, -- 0,106,0,0,106,1,0,124,1,0,131,1,0,1,100,0, -- 0,83,41,1,78,41,2,114,253,0,0,0,114,223,0,0, -- 0,41,2,114,71,0,0,0,114,71,1,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,223,0,0, -- 0,6,7,0,0,115,2,0,0,0,0,1,122,21,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112, -- 101,110,100,78,41,13,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, -- 66,1,0,0,114,61,1,0,0,114,67,1,0,0,114,69, -- 1,0,0,114,70,1,0,0,114,101,0,0,0,114,72,1, -- 0,0,114,223,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0, -- 210,6,0,0,115,20,0,0,0,12,5,6,2,12,6,12, -- 10,12,4,12,13,12,3,12,3,12,3,12,3,114,60,1, -- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, -- 0,0,0,64,0,0,0,115,106,0,0,0,101,0,0,90, -- 1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0, -- 0,90,3,0,101,4,0,100,3,0,100,4,0,132,0,0, -- 131,1,0,90,5,0,100,5,0,100,6,0,132,0,0,90, -- 6,0,100,7,0,100,8,0,132,0,0,90,7,0,100,9, -- 0,100,10,0,132,0,0,90,8,0,100,11,0,100,12,0, -- 132,0,0,90,9,0,100,13,0,100,14,0,132,0,0,90, -- 10,0,100,15,0,83,41,16,114,251,0,0,0,99,4,0, +- 83,41,1,78,41,2,114,31,0,0,0,114,240,0,0,0, +- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,7,95,95,108,101,110,95,95,209, +- 3,0,0,115,2,0,0,0,0,1,122,22,95,78,97,109, +- 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, +- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, +- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, +- 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, +- 123,33,114,125,41,41,2,114,47,0,0,0,114,232,0,0, +- 0,41,1,114,108,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,8,95,95,114,101,112,114,95, +- 95,212,3,0,0,115,2,0,0,0,0,1,122,23,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, +- 101,112,114,95,95,99,2,0,0,0,0,0,0,0,2,0, +- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, +- 1,0,124,0,0,106,0,0,131,0,0,107,6,0,83,41, +- 1,78,41,1,114,240,0,0,0,41,2,114,108,0,0,0, +- 218,4,105,116,101,109,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,12,95,95,99,111,110,116,97,105,110, +- 115,95,95,215,3,0,0,115,2,0,0,0,0,1,122,27, +- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, +- 95,99,111,110,116,97,105,110,115,95,95,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, +- 115,20,0,0,0,124,0,0,106,0,0,106,1,0,124,1, +- 0,131,1,0,1,100,0,0,83,41,1,78,41,2,114,232, +- 0,0,0,114,163,0,0,0,41,2,114,108,0,0,0,114, +- 245,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,163,0,0,0,218,3,0,0,115,2,0,0, +- 0,0,1,122,21,95,78,97,109,101,115,112,97,99,101,80, +- 97,116,104,46,97,112,112,101,110,100,78,41,13,114,112,0, +- 0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0, +- 0,114,185,0,0,0,114,238,0,0,0,114,233,0,0,0, +- 114,240,0,0,0,114,242,0,0,0,114,243,0,0,0,114, +- 244,0,0,0,114,246,0,0,0,114,163,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,230,0,0,0,166,3,0,0,115,20,0,0,0, +- 12,5,6,2,12,6,12,10,12,4,12,13,12,3,12,3, +- 12,3,12,3,114,230,0,0,0,99,0,0,0,0,0,0, +- 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,118, +- 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, +- 1,0,100,2,0,132,0,0,90,3,0,101,4,0,100,3, +- 0,100,4,0,132,0,0,131,1,0,90,5,0,100,5,0, +- 100,6,0,132,0,0,90,6,0,100,7,0,100,8,0,132, +- 0,0,90,7,0,100,9,0,100,10,0,132,0,0,90,8, +- 0,100,11,0,100,12,0,132,0,0,90,9,0,100,13,0, +- 100,14,0,132,0,0,90,10,0,100,15,0,100,16,0,132, +- 0,0,90,11,0,100,17,0,83,41,18,218,16,95,78,97, +- 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, - 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, - 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, -- 41,1,78,41,2,114,60,1,0,0,114,253,0,0,0,41, -- 4,114,71,0,0,0,114,67,0,0,0,114,35,0,0,0, -- 114,64,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,72,0,0,0,12,7,0,0,115,2,0, +- 41,1,78,41,2,114,230,0,0,0,114,232,0,0,0,41, +- 4,114,108,0,0,0,114,106,0,0,0,114,35,0,0,0, +- 114,236,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,185,0,0,0,224,3,0,0,115,2,0, - 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, @@ -37634,2259 +34855,1636 @@ diff -Nru orig/Python/importlib.h modified/Python/importlib.h - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, -- 0,0,114,57,0,0,0,41,2,114,11,1,0,0,114,179, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,205,0,0,0,15,7,0,0,115,2,0,0,0, -- 0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111, -- 97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114, -- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -- 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, -- 78,84,114,4,0,0,0,41,2,114,71,0,0,0,114,158, +- 0,0,114,112,0,0,0,41,2,114,170,0,0,0,114,190, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,219,0,0,0,24,7,0,0,115,2,0,0,0, -- 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, -- 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, -- 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, -- 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,78, -- 114,30,0,0,0,114,4,0,0,0,41,2,114,71,0,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,16,1,0,0,27,7,0,0,115,2, -- 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, -- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, -- 99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,6, -- 0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,100, -- 1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,3, -- 1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,114, -- 105,110,103,62,114,175,0,0,0,114,42,1,0,0,84,41, -- 1,114,43,1,0,0,41,2,114,71,0,0,0,114,158,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,15,1,0,0,30,7,0,0,115,2,0,0,0,0, -- 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, -- 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, -- 0,115,4,0,0,0,100,0,0,83,41,1,78,114,4,0, -- 0,0,41,2,114,71,0,0,0,114,179,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, -- 0,0,33,7,0,0,115,2,0,0,0,0,1,122,28,95, +- 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,227, +- 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, +- 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, +- 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, +- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, +- 0,0,100,1,0,83,41,2,78,84,114,4,0,0,0,41, +- 2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,159,0,0,0,236, +- 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, +- 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, +- 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, +- 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, +- 0,100,1,0,83,41,2,78,114,30,0,0,0,114,4,0, +- 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,202,0, +- 0,0,239,3,0,0,115,2,0,0,0,0,1,122,27,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, -- 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, -- 115,29,0,0,0,116,0,0,100,1,0,124,0,0,106,1, -- 0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2, -- 0,83,41,2,122,98,76,111,97,100,32,97,32,110,97,109, -- 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, -- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, -- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, -- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, -- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, -- 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, -- 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, -- 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, -- 41,3,114,152,0,0,0,114,253,0,0,0,114,180,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0, -- 0,36,7,0,0,115,4,0,0,0,0,7,16,1,122,28, -- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, -- 46,108,111,97,100,95,109,111,100,117,108,101,78,41,11,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, -- 0,0,0,114,18,1,0,0,114,205,0,0,0,114,219,0, -- 0,0,114,16,1,0,0,114,15,1,0,0,114,1,1,0, -- 0,114,4,1,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,11, -- 7,0,0,115,14,0,0,0,12,1,12,3,18,9,12,3, -- 12,3,12,3,12,3,114,251,0,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0, -- 115,160,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,101,4,0,100,2,0,100,3,0, -- 132,0,0,131,1,0,90,5,0,101,4,0,100,4,0,100, -- 5,0,132,0,0,131,1,0,90,6,0,101,4,0,100,6, -- 0,100,7,0,132,0,0,131,1,0,90,7,0,101,4,0, -- 100,8,0,100,9,0,132,0,0,131,1,0,90,8,0,101, -- 4,0,100,10,0,100,11,0,100,12,0,132,1,0,131,1, -- 0,90,9,0,101,4,0,100,10,0,100,10,0,100,13,0, -- 100,14,0,132,2,0,131,1,0,90,10,0,101,4,0,100, -- 10,0,100,15,0,100,16,0,132,1,0,131,1,0,90,11, -- 0,100,10,0,83,41,17,218,10,80,97,116,104,70,105,110, -- 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, -- 105,110,100,101,114,32,102,111,114,32,115,121,115,46,112,97, -- 116,104,32,97,110,100,32,112,97,99,107,97,103,101,32,95, -- 95,112,97,116,104,95,95,32,97,116,116,114,105,98,117,116, -- 101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0, -- 4,0,0,0,67,0,0,0,115,58,0,0,0,120,51,0, -- 116,0,0,106,1,0,106,2,0,131,0,0,68,93,34,0, -- 125,1,0,116,3,0,124,1,0,100,1,0,131,2,0,114, -- 16,0,124,1,0,106,4,0,131,0,0,1,113,16,0,113, -- 16,0,87,100,2,0,83,41,3,122,125,67,97,108,108,32, -- 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, -- 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, -- 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, -- 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, -- 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, -+ 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, -+ 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, -+ 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, -+ 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, -+ 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, -+ 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, -+ 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, -+ 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, -+ 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, -+ 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, -+ 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, -+ 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, -+ 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, -+ 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, -+ 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, -+ 0,2,0,0,0,4,0,0,0,67,0,0,0,115,58,0, -+ 0,0,120,51,0,116,0,0,106,1,0,106,2,0,131,0, -+ 0,68,93,34,0,125,1,0,116,3,0,124,1,0,100,1, -+ 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, -+ 1,113,16,0,113,16,0,87,100,2,0,83,41,3,122,125, -+ 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, -+ 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, -+ 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, -+ 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, -+ 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, -+ 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, -+ 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, -+ 105,109,112,108,101,109,101,110,116,101,100,41,46,218,17,105, -+ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, -+ 78,41,5,114,8,0,0,0,218,19,112,97,116,104,95,105, -+ 109,112,111,114,116,101,114,95,99,97,99,104,101,218,6,118, -+ 97,108,117,101,115,114,61,0,0,0,114,75,1,0,0,41, -+ 2,114,12,1,0,0,218,6,102,105,110,100,101,114,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,75,1, -+ 0,0,53,7,0,0,115,6,0,0,0,0,4,22,1,15, -+ 1,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, -+ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, -+ 2,0,0,0,0,0,0,0,3,0,0,0,12,0,0,0, -+ 67,0,0,0,115,94,0,0,0,116,0,0,106,1,0,115, -+ 28,0,116,2,0,106,3,0,100,1,0,116,4,0,131,2, -+ 0,1,110,0,0,120,59,0,116,0,0,106,1,0,68,93, -+ 44,0,125,2,0,121,14,0,124,2,0,124,1,0,131,1, -+ 0,83,87,113,38,0,4,116,5,0,107,10,0,114,81,0, -+ 1,1,1,119,38,0,89,113,38,0,88,113,38,0,87,100, -+ 2,0,83,100,2,0,83,41,3,122,113,83,101,97,114,99, -+ 104,32,115,101,113,117,101,110,99,101,32,111,102,32,104,111, -+ 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, -+ 32,102,111,114,32,39,112,97,116,104,39,46,10,10,32,32, -+ 32,32,32,32,32,32,73,102,32,39,104,111,111,107,115,39, -+ 32,105,115,32,102,97,108,115,101,32,116,104,101,110,32,117, -+ 115,101,32,115,121,115,46,112,97,116,104,95,104,111,111,107, -+ 115,46,10,10,32,32,32,32,32,32,32,32,122,23,115,121, -+ 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, -+ 101,109,112,116,121,78,41,6,114,8,0,0,0,218,10,112, -+ 97,116,104,95,104,111,111,107,115,114,167,0,0,0,114,168, -+ 0,0,0,114,169,0,0,0,114,154,0,0,0,41,3,114, -+ 12,1,0,0,114,36,0,0,0,90,4,104,111,111,107,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,11, -+ 95,112,97,116,104,95,104,111,111,107,115,61,7,0,0,115, -+ 16,0,0,0,0,7,9,1,19,1,16,1,3,1,14,1, -+ 13,1,12,2,122,22,80,97,116,104,70,105,110,100,101,114, -+ 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, -+ 0,0,0,0,0,3,0,0,0,11,0,0,0,67,0,0, -+ 0,115,97,0,0,0,124,1,0,100,1,0,107,2,0,114, -+ 27,0,116,0,0,106,1,0,131,0,0,125,1,0,110,0, -+ 0,121,17,0,116,2,0,106,3,0,124,1,0,25,125,2, -+ 0,87,110,46,0,4,116,4,0,107,10,0,114,92,0,1, -+ 1,1,124,0,0,106,5,0,124,1,0,131,1,0,125,2, -+ 0,124,2,0,116,2,0,106,3,0,124,1,0,60,89,110, -+ 1,0,88,124,2,0,83,41,2,122,210,71,101,116,32,116, -+ 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, -+ 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, -+ 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, -+ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, -+ 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, -+ 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, -+ 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, -+ 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, -+ 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, -+ 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, -+ 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, -+ 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, -+ 110,101,46,10,10,32,32,32,32,32,32,32,32,114,31,0, -+ 0,0,41,6,114,4,0,0,0,114,46,0,0,0,114,8, -+ 0,0,0,114,76,1,0,0,114,80,0,0,0,114,80,1, -+ 0,0,41,3,114,12,1,0,0,114,36,0,0,0,114,78, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, -+ 101,114,95,99,97,99,104,101,78,7,0,0,115,16,0,0, -+ 0,0,8,12,1,15,1,3,1,17,1,13,1,15,1,18, -+ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, -- 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, -- 109,101,110,116,101,100,41,46,218,17,105,110,118,97,108,105, -- 100,97,116,101,95,99,97,99,104,101,115,78,41,5,114,7, -- 0,0,0,218,19,112,97,116,104,95,105,109,112,111,114,116, -- 101,114,95,99,97,99,104,101,218,6,118,97,108,117,101,115, -- 114,60,0,0,0,114,74,1,0,0,41,2,114,11,1,0, -- 0,218,6,102,105,110,100,101,114,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,74,1,0,0,53,7,0, -- 0,115,6,0,0,0,0,4,22,1,15,1,122,28,80,97, -- 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, -- 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, -- 0,0,0,3,0,0,0,12,0,0,0,67,0,0,0,115, -- 94,0,0,0,116,0,0,106,1,0,115,28,0,116,2,0, -- 106,3,0,100,1,0,116,4,0,131,2,0,1,110,0,0, -- 120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,0, -- 121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,38, -- 0,4,116,5,0,107,10,0,114,81,0,1,1,1,119,38, -- 0,89,113,38,0,88,113,38,0,87,100,2,0,83,100,2, -- 0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,113, -- 117,101,110,99,101,32,111,102,32,104,111,111,107,115,32,102, -- 111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,32, -- 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, -- 32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,102, -- 97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,121, -- 115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,32, -- 32,32,32,32,32,32,32,122,23,115,121,115,46,112,97,116, -- 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, -- 78,41,6,114,7,0,0,0,218,10,112,97,116,104,95,104, -- 111,111,107,115,114,166,0,0,0,114,167,0,0,0,114,168, -- 0,0,0,114,153,0,0,0,41,3,114,11,1,0,0,114, -- 35,0,0,0,90,4,104,111,111,107,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,11,95,112,97,116,104, -- 95,104,111,111,107,115,61,7,0,0,115,16,0,0,0,0, -- 7,9,1,19,1,16,1,3,1,14,1,13,1,12,2,122, -- 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, -- 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, -- 3,0,0,0,11,0,0,0,67,0,0,0,115,97,0,0, -- 0,124,1,0,100,1,0,107,2,0,114,27,0,116,0,0, -- 106,1,0,131,0,0,125,1,0,110,0,0,121,17,0,116, -- 2,0,106,3,0,124,1,0,25,125,2,0,87,110,46,0, -- 4,116,4,0,107,10,0,114,92,0,1,1,1,124,0,0, -- 106,5,0,124,1,0,131,1,0,125,2,0,124,2,0,116, -- 2,0,106,3,0,124,1,0,60,89,110,1,0,88,124,2, -- 0,83,41,2,122,210,71,101,116,32,116,104,101,32,102,105, -- 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, -- 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, -- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, -- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, -- 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, -- 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, -- 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, -- 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, -- 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, -- 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, -- 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, -- 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, -- 32,32,32,32,32,32,32,32,114,30,0,0,0,41,6,114, -- 3,0,0,0,114,45,0,0,0,114,7,0,0,0,114,75, -- 1,0,0,114,79,0,0,0,114,79,1,0,0,41,3,114, -- 11,1,0,0,114,35,0,0,0,114,77,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,20,95, -- 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, -- 99,104,101,78,7,0,0,115,16,0,0,0,0,8,12,1, -- 15,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, +- 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, +- 22,0,0,0,116,0,0,100,1,0,100,2,0,100,3,0, +- 100,4,0,100,5,0,131,3,1,83,41,6,78,114,30,0, +- 0,0,122,8,60,115,116,114,105,110,103,62,114,189,0,0, +- 0,114,204,0,0,0,84,41,1,114,205,0,0,0,41,2, +- 114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,187,0,0,0,242,3, ++ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, ++ 83,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, ++ 80,97,116,104,40,123,33,114,125,41,41,2,114,48,0,0, ++ 0,114,233,0,0,0,41,1,114,109,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, ++ 114,101,112,114,95,95,212,3,0,0,115,2,0,0,0,0, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, ++ 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, ++ 16,0,0,0,124,1,0,124,0,0,106,0,0,131,0,0, ++ 107,6,0,83,41,1,78,41,1,114,241,0,0,0,41,2, ++ 114,109,0,0,0,218,4,105,116,101,109,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,12,95,95,99,111, ++ 110,116,97,105,110,115,95,95,215,3,0,0,115,2,0,0, ++ 0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,95,99,111,110,116,97,105,110,115,95,95, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, ++ 0,67,0,0,0,115,20,0,0,0,124,0,0,106,0,0, ++ 106,1,0,124,1,0,131,1,0,1,100,0,0,83,41,1, ++ 78,41,2,114,233,0,0,0,114,164,0,0,0,41,2,114, ++ 109,0,0,0,114,246,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,164,0,0,0,218,3,0, ++ 0,115,2,0,0,0,0,1,122,21,95,78,97,109,101,115, ++ 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, ++ 41,13,114,113,0,0,0,114,112,0,0,0,114,114,0,0, ++ 0,114,115,0,0,0,114,186,0,0,0,114,239,0,0,0, ++ 114,234,0,0,0,114,241,0,0,0,114,243,0,0,0,114, ++ 244,0,0,0,114,245,0,0,0,114,247,0,0,0,114,164, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,231,0,0,0,166,3,0,0, ++ 115,20,0,0,0,12,5,6,2,12,6,12,10,12,4,12, ++ 13,12,3,12,3,12,3,12,3,114,231,0,0,0,99,0, ++ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, ++ 0,0,0,115,118,0,0,0,101,0,0,90,1,0,100,0, ++ 0,90,2,0,100,1,0,100,2,0,132,0,0,90,3,0, ++ 101,4,0,100,3,0,100,4,0,132,0,0,131,1,0,90, ++ 5,0,100,5,0,100,6,0,132,0,0,90,6,0,100,7, ++ 0,100,8,0,132,0,0,90,7,0,100,9,0,100,10,0, ++ 132,0,0,90,8,0,100,11,0,100,12,0,132,0,0,90, ++ 9,0,100,13,0,100,14,0,132,0,0,90,10,0,100,15, ++ 0,100,16,0,132,0,0,90,11,0,100,17,0,83,41,18, ++ 218,16,95,78,97,109,101,115,112,97,99,101,76,111,97,100, ++ 101,114,99,4,0,0,0,0,0,0,0,4,0,0,0,4, ++ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, ++ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, ++ 0,100,0,0,83,41,1,78,41,2,114,231,0,0,0,114, ++ 233,0,0,0,41,4,114,109,0,0,0,114,107,0,0,0, ++ 114,36,0,0,0,114,237,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,186,0,0,0,224,3, + 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, +- 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, +- 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, +- 0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,108, +- 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, +- 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, +- 78,114,4,0,0,0,41,2,114,108,0,0,0,114,164,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,186,0,0,0,245,3,0,0,115,0,0,0,0,122, +- 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, +- 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, +- 67,0,0,0,115,4,0,0,0,100,0,0,83,41,1,78, +- 114,4,0,0,0,41,2,114,108,0,0,0,114,190,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,191,0,0,0,248,3,0,0,115,2,0,0,0,0,1, +- 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, +- 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, +- 0,0,0,115,32,0,0,0,116,0,0,100,1,0,124,0, +- 0,106,1,0,131,2,0,1,116,2,0,106,3,0,124,0, +- 0,124,1,0,131,2,0,83,41,2,122,98,76,111,97,100, +- 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, +- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, +- 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, +- 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, +- 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, +- 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, +- 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, +- 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, +- 104,32,123,33,114,125,41,4,114,105,0,0,0,114,232,0, +- 0,0,114,121,0,0,0,114,192,0,0,0,41,2,114,108, +- 0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,193,0,0,0,251,3,0,0, +- 115,4,0,0,0,0,7,16,1,122,28,95,78,97,109,101, +- 115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100, +- 95,109,111,100,117,108,101,78,41,12,114,112,0,0,0,114, +- 111,0,0,0,114,113,0,0,0,114,185,0,0,0,114,183, +- 0,0,0,114,248,0,0,0,114,159,0,0,0,114,202,0, +- 0,0,114,187,0,0,0,114,186,0,0,0,114,191,0,0, +- 0,114,193,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,223, +- 3,0,0,115,16,0,0,0,12,1,12,3,18,9,12,3, +- 12,3,12,3,12,3,12,3,114,247,0,0,0,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0, +- 0,0,115,160,0,0,0,101,0,0,90,1,0,100,0,0, +- 90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,100, +- 3,0,132,0,0,131,1,0,90,5,0,101,4,0,100,4, +- 0,100,5,0,132,0,0,131,1,0,90,6,0,101,4,0, +- 100,6,0,100,7,0,132,0,0,131,1,0,90,7,0,101, +- 4,0,100,8,0,100,9,0,132,0,0,131,1,0,90,8, +- 0,101,4,0,100,10,0,100,11,0,100,12,0,132,1,0, +- 131,1,0,90,9,0,101,4,0,100,10,0,100,10,0,100, +- 13,0,100,14,0,132,2,0,131,1,0,90,10,0,101,4, +- 0,100,10,0,100,15,0,100,16,0,132,1,0,131,1,0, +- 90,11,0,100,10,0,83,41,17,218,10,80,97,116,104,70, +- 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, +- 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, +- 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, +- 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, +- 117,116,101,115,46,99,1,0,0,0,0,0,0,0,2,0, +- 0,0,4,0,0,0,67,0,0,0,115,55,0,0,0,120, +- 48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,93, +- 31,0,125,1,0,116,3,0,124,1,0,100,1,0,131,2, +- 0,114,16,0,124,1,0,106,4,0,131,0,0,1,113,16, +- 0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,116, +- 104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97, +- 99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110, +- 32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32, +- 102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32, +- 115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97, +- 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, +- 101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109, +- 101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100, +- 97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,0, +- 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, +- 114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114, +- 115,0,0,0,114,250,0,0,0,41,2,114,170,0,0,0, +- 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,250,0,0,0,12,4,0,0, +- 115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116, +- 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, +- 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, +- 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,107, +- 0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,114, +- 41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,106, +- 3,0,100,2,0,116,4,0,131,2,0,1,120,59,0,116, +- 0,0,106,1,0,68,93,44,0,125,2,0,121,14,0,124, +- 2,0,124,1,0,131,1,0,83,87,113,51,0,4,116,5, +- 0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,51, +- 0,88,113,51,0,87,100,1,0,83,100,1,0,83,41,3, +- 122,113,83,101,97,114,99,104,32,115,101,113,117,101,110,99, +- 101,32,111,102,32,104,111,111,107,115,32,102,111,114,32,97, +- 32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,116, +- 104,39,46,10,10,32,32,32,32,32,32,32,32,73,102,32, +- 39,104,111,111,107,115,39,32,105,115,32,102,97,108,115,101, +- 32,116,104,101,110,32,117,115,101,32,115,121,115,46,112,97, +- 116,104,95,104,111,111,107,115,46,10,10,32,32,32,32,32, +- 32,32,32,78,122,23,115,121,115,46,112,97,116,104,95,104, +- 111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,114, +- 7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, +- 114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,114, +- 107,0,0,0,41,3,114,170,0,0,0,114,35,0,0,0, +- 90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,111, +- 107,115,20,4,0,0,115,16,0,0,0,0,7,25,1,16, +- 1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,116, +- 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, +- 111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,0, +- 19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,0, +- 100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,106, +- 1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,0, +- 107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,1, +- 0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,125, +- 2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,0, +- 1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,125, +- 2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,89, +- 110,1,0,88,124,2,0,83,41,3,122,210,71,101,116,32, +- 116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,116, +- 104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,114, +- 111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,111, +- 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, +- 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, +- 32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,110, +- 32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,100, +- 32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101, +- 32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,32, +- 97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,102, +- 32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,118, +- 97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,78, +- 111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,30, +- 0,0,0,78,41,7,114,3,0,0,0,114,45,0,0,0, +- 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, +- 114,111,114,114,7,0,0,0,114,251,0,0,0,114,137,0, +- 0,0,114,255,0,0,0,41,3,114,170,0,0,0,114,35, +- 0,0,0,114,253,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,20,95,112,97,116,104,95,105, +- 109,112,111,114,116,101,114,95,99,97,99,104,101,37,4,0, +- 0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,3, +- 9,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, - 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, -- 0,0,115,113,0,0,0,116,0,0,124,2,0,100,1,0, +- 0,0,115,119,0,0,0,116,0,0,124,2,0,100,1,0, - 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, - 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, - 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, -- 125,4,0,124,3,0,100,0,0,107,9,0,114,85,0,116, -- 3,0,124,1,0,124,3,0,131,2,0,83,116,4,0,124, -- 1,0,100,0,0,131,2,0,125,5,0,124,4,0,124,5, -- 0,95,5,0,124,5,0,83,41,2,78,114,165,0,0,0, -- 41,6,114,60,0,0,0,114,165,0,0,0,114,14,1,0, -- 0,114,173,0,0,0,114,216,0,0,0,114,220,0,0,0, -- 41,6,114,11,1,0,0,114,158,0,0,0,114,77,1,0, -- 0,114,169,0,0,0,114,170,0,0,0,114,177,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, -- 99,95,7,0,0,115,18,0,0,0,0,4,15,1,24,2, -- 15,1,6,1,12,1,13,1,15,1,9,1,122,27,80,97, -- 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, -- 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, -- 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, -- 252,0,0,0,103,0,0,125,4,0,120,239,0,124,2,0, -- 68,93,203,0,125,5,0,116,0,0,124,5,0,116,1,0, -- 116,2,0,102,2,0,131,2,0,115,46,0,113,13,0,110, -- 0,0,124,0,0,106,3,0,124,5,0,131,1,0,125,6, -- 0,124,6,0,100,1,0,107,9,0,114,13,0,116,4,0, -- 124,6,0,100,2,0,131,2,0,114,109,0,124,6,0,106, -- 5,0,124,1,0,124,3,0,131,2,0,125,7,0,110,18, -- 0,124,0,0,106,6,0,124,1,0,124,6,0,131,2,0, -- 125,7,0,124,7,0,100,1,0,107,8,0,114,145,0,113, -- 13,0,110,0,0,124,7,0,106,7,0,100,1,0,107,9, -- 0,114,164,0,124,7,0,83,124,7,0,106,8,0,125,8, -- 0,124,8,0,100,1,0,107,8,0,114,200,0,116,9,0, -- 100,3,0,131,1,0,130,1,0,110,0,0,124,4,0,106, -- 10,0,124,8,0,131,1,0,1,113,13,0,113,13,0,87, -- 116,11,0,124,1,0,100,1,0,131,2,0,125,7,0,124, -- 4,0,124,7,0,95,8,0,124,7,0,83,100,1,0,83, -- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, -- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, -- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, -- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, -- 109,101,46,78,114,13,1,0,0,122,19,115,112,101,99,32, -- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,12, -- 114,192,0,0,0,218,3,115,116,114,218,5,98,121,116,101, -- 115,114,80,1,0,0,114,60,0,0,0,114,13,1,0,0, -- 114,81,1,0,0,114,169,0,0,0,114,220,0,0,0,114, -- 153,0,0,0,114,197,0,0,0,114,216,0,0,0,41,9, -- 114,11,1,0,0,114,158,0,0,0,114,35,0,0,0,114, -- 12,1,0,0,218,14,110,97,109,101,115,112,97,99,101,95, -- 112,97,116,104,90,5,101,110,116,114,121,114,77,1,0,0, -- 114,177,0,0,0,114,170,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,9,95,103,101,116,95, -- 115,112,101,99,110,7,0,0,115,40,0,0,0,0,5,6, -- 1,13,1,21,1,6,1,15,1,12,1,15,1,21,2,18, -- 1,12,1,6,1,15,1,4,1,9,1,12,1,15,5,20, -- 2,15,1,9,1,122,20,80,97,116,104,70,105,110,100,101, -- 114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0, -- 0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,0, -- 115,143,0,0,0,124,2,0,100,1,0,107,8,0,114,24, -- 0,116,0,0,106,1,0,125,2,0,110,0,0,124,0,0, -- 106,2,0,124,1,0,124,2,0,124,3,0,131,3,0,125, -- 4,0,124,4,0,100,1,0,107,8,0,114,61,0,100,1, -- 0,83,124,4,0,106,3,0,100,1,0,107,8,0,114,135, -- 0,124,4,0,106,4,0,125,5,0,124,5,0,114,128,0, -- 100,2,0,124,4,0,95,5,0,116,6,0,124,1,0,124, -- 5,0,124,0,0,106,2,0,131,3,0,124,4,0,95,4, -- 0,124,4,0,83,100,1,0,83,110,4,0,124,4,0,83, -- 100,1,0,83,41,3,122,98,102,105,110,100,32,116,104,101, -- 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, -- 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, -- 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, -- 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, -- 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, -- 116,101,114,95,99,97,99,104,101,46,78,90,9,110,97,109, -- 101,115,112,97,99,101,41,7,114,7,0,0,0,114,35,0, -- 0,0,114,85,1,0,0,114,169,0,0,0,114,220,0,0, -- 0,114,217,0,0,0,114,60,1,0,0,41,6,114,11,1, -- 0,0,114,158,0,0,0,114,35,0,0,0,114,12,1,0, -- 0,114,177,0,0,0,114,84,1,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,13,1,0,0,142, -- 7,0,0,115,26,0,0,0,0,4,12,1,12,1,21,1, -- 12,1,4,1,15,1,9,1,6,3,9,1,24,1,4,2, -- 7,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, -- 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, -- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,41,0, -- 0,0,124,0,0,106,0,0,124,1,0,124,2,0,131,2, -- 0,125,3,0,124,3,0,100,1,0,107,8,0,114,34,0, -- 100,1,0,83,124,3,0,106,1,0,83,41,2,122,170,102, -- 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, -- 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, -- 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, -- 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, -- 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, -- 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, -- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -- 10,32,32,32,32,32,32,32,32,78,41,2,114,13,1,0, -- 0,114,169,0,0,0,41,4,114,11,1,0,0,114,158,0, -- 0,0,114,35,0,0,0,114,177,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,14,1,0,0, -- 164,7,0,0,115,8,0,0,0,0,8,18,1,12,1,4, -- 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, -- 110,100,95,109,111,100,117,108,101,41,12,114,57,0,0,0, -- 114,56,0,0,0,114,58,0,0,0,114,59,0,0,0,114, -- 18,1,0,0,114,74,1,0,0,114,79,1,0,0,114,80, -- 1,0,0,114,81,1,0,0,114,85,1,0,0,114,13,1, -- 0,0,114,14,1,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,73,1,0,0, -- 49,7,0,0,115,22,0,0,0,12,2,6,2,18,8,18, -- 17,18,17,18,15,3,1,18,31,3,1,21,21,3,1,114, -- 73,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,3,0,0,0,64,0,0,0,115,133,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, -- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, -- 5,0,132,0,0,90,5,0,101,6,0,90,7,0,100,6, -- 0,100,7,0,132,0,0,90,8,0,100,8,0,100,9,0, -- 132,0,0,90,9,0,100,10,0,100,11,0,100,12,0,132, -- 1,0,90,10,0,100,13,0,100,14,0,132,0,0,90,11, -- 0,101,12,0,100,15,0,100,16,0,132,0,0,131,1,0, -- 90,13,0,100,17,0,100,18,0,132,0,0,90,14,0,100, -- 10,0,83,41,19,218,10,70,105,108,101,70,105,110,100,101, -- 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105, -- 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114, -- 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101, -- 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101, -- 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102, -- 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32, -- 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101, -- 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, -- 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97, -- 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32, -- 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99, -- 2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, -- 7,0,0,0,115,122,0,0,0,103,0,0,125,3,0,120, -- 52,0,124,2,0,68,93,44,0,92,2,0,137,0,0,125, -- 4,0,124,3,0,106,0,0,135,0,0,102,1,0,100,1, -- 0,100,2,0,134,0,0,124,4,0,68,131,1,0,131,1, -- 0,1,113,13,0,87,124,3,0,124,0,0,95,1,0,124, -- 1,0,112,79,0,100,3,0,124,0,0,95,2,0,100,6, -- 0,124,0,0,95,3,0,116,4,0,131,0,0,124,0,0, -- 95,5,0,116,4,0,131,0,0,124,0,0,95,6,0,100, -- 5,0,83,41,7,122,154,73,110,105,116,105,97,108,105,122, -- 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, -- 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, -- 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, -- 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, -- 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, -- 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, -- 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, -- 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, -- 46,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, -- 0,0,51,0,0,0,115,27,0,0,0,124,0,0,93,17, -- 0,125,1,0,124,1,0,136,0,0,102,2,0,86,1,113, -- 3,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2, -- 114,22,0,0,0,114,57,1,0,0,41,1,114,169,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,77,0,0,0, -- 193,7,0,0,115,2,0,0,0,6,0,122,38,70,105,108, -+ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, -+ 0,0,0,67,0,0,0,115,113,0,0,0,116,0,0,124, -+ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, -+ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, -+ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, -+ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, -+ 0,114,85,0,116,3,0,124,1,0,124,3,0,131,2,0, -+ 83,116,4,0,124,1,0,100,0,0,131,2,0,125,5,0, -+ 124,4,0,124,5,0,95,5,0,124,5,0,83,41,2,78, -+ 114,166,0,0,0,41,6,114,61,0,0,0,114,166,0,0, -+ 0,114,15,1,0,0,114,174,0,0,0,114,217,0,0,0, -+ 114,221,0,0,0,41,6,114,12,1,0,0,114,159,0,0, -+ 0,114,78,1,0,0,114,170,0,0,0,114,171,0,0,0, -+ 114,178,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101, -+ 116,95,115,112,101,99,95,7,0,0,115,18,0,0,0,0, -+ 4,15,1,24,2,15,1,6,1,12,1,13,1,15,1,9, -+ 1,122,27,80,97,116,104,70,105,110,100,101,114,46,95,108, -+ 101,103,97,99,121,95,103,101,116,95,115,112,101,99,78,99, -+ 4,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, -+ 67,0,0,0,115,252,0,0,0,103,0,0,125,4,0,120, -+ 239,0,124,2,0,68,93,203,0,125,5,0,116,0,0,124, -+ 5,0,116,1,0,116,2,0,102,2,0,131,2,0,115,46, -+ 0,113,13,0,110,0,0,124,0,0,106,3,0,124,5,0, -+ 131,1,0,125,6,0,124,6,0,100,1,0,107,9,0,114, -+ 13,0,116,4,0,124,6,0,100,2,0,131,2,0,114,109, -+ 0,124,6,0,106,5,0,124,1,0,124,3,0,131,2,0, -+ 125,7,0,110,18,0,124,0,0,106,6,0,124,1,0,124, -+ 6,0,131,2,0,125,7,0,124,7,0,100,1,0,107,8, -+ 0,114,145,0,113,13,0,110,0,0,124,7,0,106,7,0, -+ 100,1,0,107,9,0,114,164,0,124,7,0,83,124,7,0, -+ 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, -+ 200,0,116,9,0,100,3,0,131,1,0,130,1,0,110,0, -+ 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, -+ 0,113,13,0,87,116,11,0,124,1,0,100,1,0,131,2, -+ 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, -+ 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, -+ 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, -+ 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, -+ 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, -+ 103,101,32,110,97,109,101,46,78,114,14,1,0,0,122,19, -+ 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, -+ 100,101,114,41,12,114,193,0,0,0,218,3,115,116,114,218, -+ 5,98,121,116,101,115,114,81,1,0,0,114,61,0,0,0, -+ 114,14,1,0,0,114,82,1,0,0,114,170,0,0,0,114, -+ 221,0,0,0,114,154,0,0,0,114,198,0,0,0,114,217, -+ 0,0,0,41,9,114,12,1,0,0,114,159,0,0,0,114, -+ 36,0,0,0,114,13,1,0,0,218,14,110,97,109,101,115, -+ 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, -+ 114,78,1,0,0,114,178,0,0,0,114,171,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,9, -+ 95,103,101,116,95,115,112,101,99,110,7,0,0,115,40,0, -+ 0,0,0,5,6,1,13,1,21,1,6,1,15,1,12,1, -+ 15,1,21,2,18,1,12,1,6,1,15,1,4,1,9,1, -+ 12,1,15,5,20,2,15,1,9,1,122,20,80,97,116,104, -+ 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, -+ 99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0, -+ 0,67,0,0,0,115,143,0,0,0,124,2,0,100,1,0, -+ 107,8,0,114,24,0,116,0,0,106,1,0,125,2,0,110, -+ 0,0,124,0,0,106,2,0,124,1,0,124,2,0,124,3, -+ 0,131,3,0,125,4,0,124,4,0,100,1,0,107,8,0, -+ 114,61,0,100,1,0,83,124,4,0,106,3,0,100,1,0, -+ 107,8,0,114,135,0,124,4,0,106,4,0,125,5,0,124, -+ 5,0,114,128,0,100,2,0,124,4,0,95,5,0,116,6, -+ 0,124,1,0,124,5,0,124,0,0,106,2,0,131,3,0, -+ 124,4,0,95,4,0,124,4,0,83,100,1,0,83,110,4, -+ 0,124,4,0,83,100,1,0,83,41,3,122,98,102,105,110, -+ 100,32,116,104,101,32,109,111,100,117,108,101,32,111,110,32, -+ 115,121,115,46,112,97,116,104,32,111,114,32,39,112,97,116, -+ 104,39,32,98,97,115,101,100,32,111,110,32,115,121,115,46, -+ 112,97,116,104,95,104,111,111,107,115,32,97,110,100,10,32, -+ 32,32,32,32,32,32,32,115,121,115,46,112,97,116,104,95, -+ 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,78, -+ 90,9,110,97,109,101,115,112,97,99,101,41,7,114,8,0, -+ 0,0,114,36,0,0,0,114,86,1,0,0,114,170,0,0, -+ 0,114,221,0,0,0,114,218,0,0,0,114,61,1,0,0, -+ 41,6,114,12,1,0,0,114,159,0,0,0,114,36,0,0, -+ 0,114,13,1,0,0,114,178,0,0,0,114,85,1,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 14,1,0,0,142,7,0,0,115,26,0,0,0,0,4,12, -+ 1,12,1,21,1,12,1,4,1,15,1,9,1,6,3,9, -+ 1,24,1,4,2,7,2,122,20,80,97,116,104,70,105,110, -+ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, -+ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, -+ 0,0,115,41,0,0,0,124,0,0,106,0,0,124,1,0, -+ 124,2,0,131,2,0,125,3,0,124,3,0,100,1,0,107, -+ 8,0,114,34,0,100,1,0,83,124,3,0,106,1,0,83, -+ 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, -+ 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, -+ 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, -+ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, -+ 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, -+ 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, -+ 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, -+ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, -+ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, -+ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, -+ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, -+ 2,114,14,1,0,0,114,170,0,0,0,41,4,114,12,1, -+ 0,0,114,159,0,0,0,114,36,0,0,0,114,178,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,15,1,0,0,164,7,0,0,115,8,0,0,0,0,8, -+ 18,1,12,1,4,1,122,22,80,97,116,104,70,105,110,100, -+ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, -+ 114,58,0,0,0,114,57,0,0,0,114,59,0,0,0,114, -+ 60,0,0,0,114,19,1,0,0,114,75,1,0,0,114,80, -+ 1,0,0,114,81,1,0,0,114,82,1,0,0,114,86,1, -+ 0,0,114,14,1,0,0,114,15,1,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,74,1,0,0,49,7,0,0,115,22,0,0,0,12,2, -+ 6,2,18,8,18,17,18,17,18,15,3,1,18,31,3,1, -+ 21,21,3,1,114,74,1,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,133, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, -+ 0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,0, -+ 90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,100, -+ 8,0,100,9,0,132,0,0,90,9,0,100,10,0,100,11, -+ 0,100,12,0,132,1,0,90,10,0,100,13,0,100,14,0, -+ 132,0,0,90,11,0,101,12,0,100,15,0,100,16,0,132, -+ 0,0,131,1,0,90,13,0,100,17,0,100,18,0,132,0, -+ 0,90,14,0,100,10,0,83,41,19,218,10,70,105,108,101, -+ 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, -+ 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, -+ 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, -+ 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, -+ 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, -+ 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, -+ 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, -+ 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, -+ 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, -+ 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, -+ 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, -+ 32,32,32,32,99,2,0,0,0,0,0,0,0,5,0,0, -+ 0,5,0,0,0,7,0,0,0,115,122,0,0,0,103,0, -+ 0,125,3,0,120,52,0,124,2,0,68,93,44,0,92,2, -+ 0,137,0,0,125,4,0,124,3,0,106,0,0,135,0,0, -+ 102,1,0,100,1,0,100,2,0,134,0,0,124,4,0,68, -+ 131,1,0,131,1,0,1,113,13,0,87,124,3,0,124,0, -+ 0,95,1,0,124,1,0,112,79,0,100,3,0,124,0,0, -+ 95,2,0,100,6,0,124,0,0,95,3,0,116,4,0,131, -+ 0,0,124,0,0,95,5,0,116,4,0,131,0,0,124,0, -+ 0,95,6,0,100,5,0,83,41,7,122,154,73,110,105,116, -+ 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, -+ 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, -+ 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, -+ 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, -+ 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, -+ 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, -+ 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, -+ 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, -+ 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,3,0,0,0,51,0,0,0,115,27,0,0,0, -+ 124,0,0,93,17,0,125,1,0,124,1,0,136,0,0,102, -+ 2,0,86,1,113,3,0,100,0,0,83,41,1,78,114,5, -+ 0,0,0,41,2,114,23,0,0,0,114,58,1,0,0,41, -+ 1,114,170,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,78,0,0,0,193,7,0,0,115,2,0,0,0,6,0, -+ 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, -+ 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, -+ 103,101,110,101,120,112,114,62,114,117,0,0,0,114,30,0, -+ 0,0,78,114,139,0,0,0,41,7,114,198,0,0,0,218, -+ 8,95,108,111,97,100,101,114,115,114,36,0,0,0,218,11, -+ 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, -+ 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, -+ 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, -+ 104,101,41,5,114,72,0,0,0,114,36,0,0,0,218,14, -+ 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, -+ 108,111,97,100,101,114,115,114,128,0,0,0,114,5,0,0, -+ 0,41,1,114,170,0,0,0,114,6,0,0,0,114,73,0, -+ 0,0,187,7,0,0,115,16,0,0,0,0,4,6,1,19, -+ 1,36,1,9,2,15,1,9,1,12,1,122,19,70,105,108, - 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, -- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, -- 112,114,62,114,116,0,0,0,114,29,0,0,0,78,114,138, -- 0,0,0,41,7,114,197,0,0,0,218,8,95,108,111,97, -- 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, -- 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, -- 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, -- 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, -- 71,0,0,0,114,35,0,0,0,218,14,108,111,97,100,101, -- 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, -- 114,115,114,127,0,0,0,114,4,0,0,0,41,1,114,169, -- 0,0,0,114,5,0,0,0,114,72,0,0,0,187,7,0, -- 0,115,16,0,0,0,0,4,6,1,19,1,36,1,9,2, -- 15,1,9,1,12,1,122,19,70,105,108,101,70,105,110,100, -- 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, -- 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, -- 115,13,0,0,0,100,3,0,124,0,0,95,0,0,100,2, -- 0,83,41,4,122,31,73,110,118,97,108,105,100,97,116,101, -- 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, -- 116,105,109,101,46,114,29,0,0,0,78,114,138,0,0,0, -- 41,1,114,88,1,0,0,41,1,114,71,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,74,1, -- 0,0,201,7,0,0,115,2,0,0,0,0,2,122,28,70, -- 105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,105, -- 100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,0, -- 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, -- 115,59,0,0,0,124,0,0,106,0,0,124,1,0,131,1, -- 0,125,2,0,124,2,0,100,1,0,107,8,0,114,37,0, -- 100,1,0,103,0,0,102,2,0,83,124,2,0,106,1,0, -- 124,2,0,106,2,0,112,55,0,103,0,0,102,2,0,83, -- 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32, -- 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101, -- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, -- 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112, -- 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107, -- 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101, -- 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108, -- 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41, -- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -- 10,32,32,32,32,32,32,32,32,78,41,3,114,13,1,0, -- 0,114,169,0,0,0,114,220,0,0,0,41,3,114,71,0, -- 0,0,114,158,0,0,0,114,177,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,165,0,0,0, -- 207,7,0,0,115,8,0,0,0,0,7,15,1,12,1,10, -- 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, -- 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, -- 0,0,7,0,0,0,7,0,0,0,67,0,0,0,115,40, -- 0,0,0,124,1,0,124,2,0,124,3,0,131,2,0,125, -- 6,0,116,0,0,124,2,0,124,3,0,100,1,0,124,6, -- 0,100,2,0,124,4,0,131,2,2,83,41,3,78,114,169, -- 0,0,0,114,220,0,0,0,41,1,114,239,0,0,0,41, -- 7,114,71,0,0,0,114,243,0,0,0,114,158,0,0,0, -- 114,35,0,0,0,114,228,0,0,0,114,12,1,0,0,114, -- 169,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,85,1,0,0,219,7,0,0,115,6,0,0, -- 0,0,1,15,1,18,1,122,20,70,105,108,101,70,105,110, -- 100,101,114,46,95,103,101,116,95,115,112,101,99,78,99,3, -- 0,0,0,0,0,0,0,14,0,0,0,15,0,0,0,67, -- 0,0,0,115,240,1,0,0,100,1,0,125,3,0,124,1, -- 0,106,0,0,100,2,0,131,1,0,100,3,0,25,125,4, -- 0,121,34,0,116,1,0,124,0,0,106,2,0,112,49,0, -- 116,3,0,106,4,0,131,0,0,131,1,0,106,5,0,125, -- 5,0,87,110,24,0,4,116,6,0,107,10,0,114,85,0, -- 1,1,1,100,10,0,125,5,0,89,110,1,0,88,124,5, -- 0,124,0,0,106,7,0,107,3,0,114,123,0,124,0,0, -- 106,8,0,131,0,0,1,124,5,0,124,0,0,95,7,0, -- 110,0,0,116,9,0,131,0,0,114,156,0,124,0,0,106, -- 10,0,125,6,0,124,4,0,106,11,0,131,0,0,125,7, -- 0,110,15,0,124,0,0,106,12,0,125,6,0,124,4,0, -- 125,7,0,124,7,0,124,6,0,107,6,0,114,51,1,116, -- 13,0,124,0,0,106,2,0,124,4,0,131,2,0,125,8, -- 0,120,103,0,124,0,0,106,14,0,68,93,77,0,92,2, -- 0,125,9,0,125,10,0,100,5,0,124,9,0,23,125,11, -- 0,116,13,0,124,8,0,124,11,0,131,2,0,125,12,0, -- 116,15,0,124,12,0,131,1,0,114,211,0,124,0,0,106, -- 16,0,124,10,0,124,1,0,124,12,0,124,8,0,103,1, -- 0,124,2,0,131,5,0,83,113,211,0,87,116,17,0,124, -- 8,0,131,1,0,125,3,0,110,0,0,120,126,0,124,0, -- 0,106,14,0,68,93,115,0,92,2,0,125,9,0,125,10, -- 0,116,13,0,124,0,0,106,2,0,124,4,0,124,9,0, -- 23,131,2,0,125,12,0,116,18,0,100,6,0,106,19,0, -- 124,12,0,131,1,0,100,7,0,100,3,0,131,1,1,1, -- 124,7,0,124,9,0,23,124,6,0,107,6,0,114,61,1, -- 116,15,0,124,12,0,131,1,0,114,176,1,124,0,0,106, -- 16,0,124,10,0,124,1,0,124,12,0,100,8,0,124,2, -- 0,131,5,0,83,113,61,1,113,61,1,87,124,3,0,114, -- 236,1,116,18,0,100,9,0,106,19,0,124,8,0,131,1, -- 0,131,1,0,1,116,20,0,124,1,0,100,8,0,131,2, -- 0,125,13,0,124,8,0,103,1,0,124,13,0,95,21,0, -- 124,13,0,83,100,8,0,83,41,11,122,125,84,114,121,32, -- 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, -- 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, -- 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, -- 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, -- 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, -- 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, -- 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, -- 111,114,116,105,111,110,115,41,46,70,114,116,0,0,0,114, -- 115,0,0,0,114,29,0,0,0,114,72,0,0,0,122,9, -- 116,114,121,105,110,103,32,123,125,114,145,0,0,0,78,122, -- 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, -- 97,99,101,32,102,111,114,32,123,125,114,138,0,0,0,41, -- 22,114,32,0,0,0,114,39,0,0,0,114,35,0,0,0, -- 114,3,0,0,0,114,45,0,0,0,114,53,1,0,0,114, -- 40,0,0,0,114,88,1,0,0,218,11,95,102,105,108,108, -- 95,99,97,99,104,101,114,6,0,0,0,114,91,1,0,0, -- 114,139,0,0,0,114,90,1,0,0,114,28,0,0,0,114, -- 87,1,0,0,114,44,0,0,0,114,85,1,0,0,114,46, -- 0,0,0,114,152,0,0,0,114,47,0,0,0,114,216,0, -- 0,0,114,220,0,0,0,41,14,114,71,0,0,0,114,158, -- 0,0,0,114,12,1,0,0,90,12,105,115,95,110,97,109, -- 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, -- 117,108,101,114,183,0,0,0,90,5,99,97,99,104,101,90, -- 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, -- 97,115,101,95,112,97,116,104,114,57,1,0,0,114,243,0, -- 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, -- 101,90,9,102,117,108,108,95,112,97,116,104,114,177,0,0, +- 125,4,0,124,3,0,100,0,0,107,9,0,114,88,0,116, +- 3,0,106,4,0,124,1,0,124,3,0,131,2,0,83,116, +- 3,0,106,5,0,124,1,0,100,0,0,131,2,0,125,5, +- 0,124,4,0,124,5,0,95,6,0,124,5,0,83,41,2, +- 78,114,124,0,0,0,41,7,114,115,0,0,0,114,124,0, +- 0,0,114,182,0,0,0,114,121,0,0,0,114,179,0,0, +- 0,114,160,0,0,0,114,156,0,0,0,41,6,114,170,0, +- 0,0,114,126,0,0,0,114,253,0,0,0,114,127,0,0, +- 0,114,128,0,0,0,114,164,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,16,95,108,101,103, +- 97,99,121,95,103,101,116,95,115,112,101,99,59,4,0,0, +- 115,18,0,0,0,0,4,15,1,24,2,15,1,6,1,12, +- 1,16,1,18,1,9,1,122,27,80,97,116,104,70,105,110, +- 100,101,114,46,95,108,101,103,97,99,121,95,103,101,116,95, +- 115,112,101,99,78,99,4,0,0,0,0,0,0,0,9,0, +- 0,0,5,0,0,0,67,0,0,0,115,243,0,0,0,103, +- 0,0,125,4,0,120,230,0,124,2,0,68,93,191,0,125, +- 5,0,116,0,0,124,5,0,116,1,0,116,2,0,102,2, +- 0,131,2,0,115,43,0,113,13,0,124,0,0,106,3,0, +- 124,5,0,131,1,0,125,6,0,124,6,0,100,1,0,107, +- 9,0,114,13,0,116,4,0,124,6,0,100,2,0,131,2, +- 0,114,106,0,124,6,0,106,5,0,124,1,0,124,3,0, +- 131,2,0,125,7,0,110,18,0,124,0,0,106,6,0,124, +- 1,0,124,6,0,131,2,0,125,7,0,124,7,0,100,1, +- 0,107,8,0,114,139,0,113,13,0,124,7,0,106,7,0, +- 100,1,0,107,9,0,114,158,0,124,7,0,83,124,7,0, +- 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, +- 191,0,116,9,0,100,3,0,131,1,0,130,1,0,124,4, +- 0,106,10,0,124,8,0,131,1,0,1,113,13,0,87,116, +- 11,0,106,12,0,124,1,0,100,1,0,131,2,0,125,7, +- 0,124,4,0,124,7,0,95,8,0,124,7,0,83,100,1, +- 0,83,41,4,122,63,70,105,110,100,32,116,104,101,32,108, +- 111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,97, +- 99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,115, +- 32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,32, +- 110,97,109,101,46,78,114,181,0,0,0,122,19,115,112,101, +- 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, +- 41,13,114,143,0,0,0,114,69,0,0,0,218,5,98,121, +- 116,101,115,114,1,1,0,0,114,115,0,0,0,114,181,0, +- 0,0,114,2,1,0,0,114,127,0,0,0,114,156,0,0, +- 0,114,107,0,0,0,114,149,0,0,0,114,121,0,0,0, +- 114,160,0,0,0,41,9,114,170,0,0,0,114,126,0,0, +- 0,114,35,0,0,0,114,180,0,0,0,218,14,110,97,109, +- 101,115,112,97,99,101,95,112,97,116,104,90,5,101,110,116, +- 114,121,114,253,0,0,0,114,164,0,0,0,114,128,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,13,1,0,0,224,7,0,0,115,68,0,0,0,0,3, -- 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, -- 12,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, -- 22,1,10,1,15,1,12,1,32,4,15,2,22,1,22,1, -- 25,1,16,1,12,1,32,1,6,1,19,1,15,1,12,1, -- 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, -- 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, -- 0,9,0,0,0,13,0,0,0,67,0,0,0,115,14,1, -- 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, -- 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, -- 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, -- 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, -- 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, -- 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, -- 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, -- 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, -- 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, -- 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, -- 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, -- 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, -- 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, -- 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, -- 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, -- 114,10,1,100,4,0,100,5,0,132,0,0,124,2,0,68, -- 131,1,0,124,0,0,95,17,0,110,0,0,100,6,0,83, -- 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, -- 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, -- 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, -- 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, -- 114,101,99,116,111,114,121,46,114,0,0,0,0,114,116,0, -- 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,28, -- 0,0,0,104,0,0,124,0,0,93,18,0,125,1,0,124, -- 1,0,106,0,0,131,0,0,146,2,0,113,6,0,83,114, -- 4,0,0,0,41,1,114,139,0,0,0,41,2,114,22,0, -- 0,0,90,2,102,110,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,250,9,60,115,101,116,99,111,109,112,62, -- 42,8,0,0,115,2,0,0,0,9,0,122,41,70,105,108, -- 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, -- 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, -- 116,99,111,109,112,62,78,41,18,114,35,0,0,0,114,3, -- 0,0,0,90,7,108,105,115,116,100,105,114,114,45,0,0, -- 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, -- 114,114,111,114,218,15,80,101,114,109,105,115,115,105,111,110, -- 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, -- 116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,8, -- 0,0,0,114,9,0,0,0,114,89,1,0,0,114,90,1, -- 0,0,114,121,0,0,0,114,47,0,0,0,114,139,0,0, -- 0,218,3,97,100,100,114,10,0,0,0,114,91,1,0,0, -- 41,9,114,71,0,0,0,114,35,0,0,0,90,8,99,111, -- 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, -- 102,102,105,120,95,99,111,110,116,101,110,116,115,114,71,1, -- 0,0,114,67,0,0,0,114,65,1,0,0,114,57,1,0, -- 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,93,1,0,0,13, -- 8,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, -- 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, -- 27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,101, -- 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, -- 104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,3, -- 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, -- 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, -- 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, -- 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, -- 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, -- 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, -- 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, -- 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, -- 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, -- 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, -- 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, -- 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, -- 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, -- 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, -- 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, -- 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, -- 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, -- 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, -- 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, -- 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, -- 0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0, -- 131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124, -- 0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0, +- 218,9,95,103,101,116,95,115,112,101,99,74,4,0,0,115, +- 40,0,0,0,0,5,6,1,13,1,21,1,3,1,15,1, +- 12,1,15,1,21,2,18,1,12,1,3,1,15,1,4,1, +- 9,1,12,1,12,5,17,2,18,1,9,1,122,20,80,97, +- 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, +- 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, +- 0,0,0,67,0,0,0,115,140,0,0,0,124,2,0,100, +- 1,0,107,8,0,114,21,0,116,0,0,106,1,0,125,2, +- 0,124,0,0,106,2,0,124,1,0,124,2,0,124,3,0, +- 131,3,0,125,4,0,124,4,0,100,1,0,107,8,0,114, +- 58,0,100,1,0,83,124,4,0,106,3,0,100,1,0,107, +- 8,0,114,132,0,124,4,0,106,4,0,125,5,0,124,5, +- 0,114,125,0,100,2,0,124,4,0,95,5,0,116,6,0, +- 124,1,0,124,5,0,124,0,0,106,2,0,131,3,0,124, +- 4,0,95,4,0,124,4,0,83,100,1,0,83,110,4,0, +- 124,4,0,83,100,1,0,83,41,3,122,98,102,105,110,100, +- 32,116,104,101,32,109,111,100,117,108,101,32,111,110,32,115, +- 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, +- 39,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, +- 97,116,104,95,104,111,111,107,115,32,97,110,100,10,32,32, +- 32,32,32,32,32,32,115,121,115,46,112,97,116,104,95,105, +- 109,112,111,114,116,101,114,95,99,97,99,104,101,46,78,90, +- 9,110,97,109,101,115,112,97,99,101,41,7,114,7,0,0, +- 0,114,35,0,0,0,114,5,1,0,0,114,127,0,0,0, +- 114,156,0,0,0,114,158,0,0,0,114,230,0,0,0,41, +- 6,114,170,0,0,0,114,126,0,0,0,114,35,0,0,0, +- 114,180,0,0,0,114,164,0,0,0,114,4,1,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181, +- 0,0,0,106,4,0,0,115,26,0,0,0,0,4,12,1, +- 9,1,21,1,12,1,4,1,15,1,9,1,6,3,9,1, +- 24,1,4,2,7,2,122,20,80,97,116,104,70,105,110,100, +- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, +- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, +- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, +- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,8, +- 0,114,34,0,100,1,0,83,124,3,0,106,1,0,83,41, +- 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, +- 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, +- 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, +- 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, +- 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, +- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, +- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, +- 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, +- 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, +- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, +- 114,181,0,0,0,114,127,0,0,0,41,4,114,170,0,0, +- 0,114,126,0,0,0,114,35,0,0,0,114,164,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 182,0,0,0,128,4,0,0,115,8,0,0,0,0,8,18, +- 1,12,1,4,1,122,22,80,97,116,104,70,105,110,100,101, +- 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, +- 112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114, +- 0,0,0,114,183,0,0,0,114,250,0,0,0,114,255,0, +- 0,0,114,1,1,0,0,114,2,1,0,0,114,5,1,0, +- 0,114,181,0,0,0,114,182,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 249,0,0,0,8,4,0,0,115,22,0,0,0,12,2,6, +- 2,18,8,18,17,18,22,18,15,3,1,18,31,3,1,21, +- 21,3,1,114,249,0,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,3,0,0,0,64,0,0,0,115,133,0, +- 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, +- 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, +- 100,4,0,100,5,0,132,0,0,90,5,0,101,6,0,90, +- 7,0,100,6,0,100,7,0,132,0,0,90,8,0,100,8, +- 0,100,9,0,132,0,0,90,9,0,100,10,0,100,11,0, +- 100,12,0,132,1,0,90,10,0,100,13,0,100,14,0,132, +- 0,0,90,11,0,101,12,0,100,15,0,100,16,0,132,0, +- 0,131,1,0,90,13,0,100,17,0,100,18,0,132,0,0, +- 90,14,0,100,10,0,83,41,19,218,10,70,105,108,101,70, +- 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, +- 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, +- 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, +- 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, +- 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, +- 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, +- 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, +- 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, +- 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, +- 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, +- 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, +- 32,32,32,99,2,0,0,0,0,0,0,0,5,0,0,0, +- 5,0,0,0,7,0,0,0,115,122,0,0,0,103,0,0, +- 125,3,0,120,52,0,124,2,0,68,93,44,0,92,2,0, +- 137,0,0,125,4,0,124,3,0,106,0,0,135,0,0,102, +- 1,0,100,1,0,100,2,0,134,0,0,124,4,0,68,131, +- 1,0,131,1,0,1,113,13,0,87,124,3,0,124,0,0, +- 95,1,0,124,1,0,112,79,0,100,3,0,124,0,0,95, +- 2,0,100,6,0,124,0,0,95,3,0,116,4,0,131,0, +- 0,124,0,0,95,5,0,116,4,0,131,0,0,124,0,0, +- 95,6,0,100,5,0,83,41,7,122,154,73,110,105,116,105, +- 97,108,105,122,101,32,119,105,116,104,32,116,104,101,32,112, +- 97,116,104,32,116,111,32,115,101,97,114,99,104,32,111,110, +- 32,97,110,100,32,97,32,118,97,114,105,97,98,108,101,32, +- 110,117,109,98,101,114,32,111,102,10,32,32,32,32,32,32, +- 32,32,50,45,116,117,112,108,101,115,32,99,111,110,116,97, +- 105,110,105,110,103,32,116,104,101,32,108,111,97,100,101,114, +- 32,97,110,100,32,116,104,101,32,102,105,108,101,32,115,117, +- 102,102,105,120,101,115,32,116,104,101,32,108,111,97,100,101, +- 114,10,32,32,32,32,32,32,32,32,114,101,99,111,103,110, +- 105,122,101,115,46,99,1,0,0,0,0,0,0,0,2,0, +- 0,0,3,0,0,0,51,0,0,0,115,27,0,0,0,124, +- 0,0,93,17,0,125,1,0,124,1,0,136,0,0,102,2, +- 0,86,1,113,3,0,100,0,0,83,41,1,78,114,4,0, +- 0,0,41,2,114,22,0,0,0,114,225,0,0,0,41,1, +- 114,127,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 227,0,0,0,157,4,0,0,115,2,0,0,0,6,0,122, +- 38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, +- 105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,103, +- 101,110,101,120,112,114,62,114,58,0,0,0,114,29,0,0, +- 0,78,114,87,0,0,0,41,7,114,149,0,0,0,218,8, +- 95,108,111,97,100,101,114,115,114,35,0,0,0,218,11,95, +- 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, +- 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, +- 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, +- 101,41,5,114,108,0,0,0,114,35,0,0,0,218,14,108, +- 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, +- 111,97,100,101,114,115,114,166,0,0,0,114,4,0,0,0, +- 41,1,114,127,0,0,0,114,5,0,0,0,114,185,0,0, +- 0,151,4,0,0,115,16,0,0,0,0,4,6,1,19,1, +- 36,1,9,2,15,1,9,1,12,1,122,19,70,105,108,101, +- 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, +- 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, +- 67,0,0,0,115,13,0,0,0,100,3,0,124,0,0,95, +- 0,0,100,2,0,83,41,4,122,31,73,110,118,97,108,105, +- 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111, +- 114,121,32,109,116,105,109,101,46,114,29,0,0,0,78,114, +- 87,0,0,0,41,1,114,8,1,0,0,41,1,114,108,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,250,0,0,0,165,4,0,0,115,2,0,0,0,0, +- 2,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, +- 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, +- 2,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, +- 67,0,0,0,115,59,0,0,0,124,0,0,106,0,0,124, +- 1,0,131,1,0,125,2,0,124,2,0,100,1,0,107,8, +- 0,114,37,0,100,1,0,103,0,0,102,2,0,83,124,2, +- 0,106,1,0,124,2,0,106,2,0,112,55,0,103,0,0, +- 102,2,0,83,41,2,122,197,84,114,121,32,116,111,32,102, +- 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, +- 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, +- 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, +- 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, +- 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, +- 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, +- 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, +- 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, +- 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, +- 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, +- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, +- 114,181,0,0,0,114,127,0,0,0,114,156,0,0,0,41, +- 3,114,108,0,0,0,114,126,0,0,0,114,164,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 124,0,0,0,171,4,0,0,115,8,0,0,0,0,7,15, +- 1,12,1,10,1,122,22,70,105,108,101,70,105,110,100,101, +- 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, +- 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, +- 0,0,115,40,0,0,0,124,1,0,124,2,0,124,3,0, +- 131,2,0,125,6,0,116,0,0,124,2,0,124,3,0,100, +- 1,0,124,6,0,100,2,0,124,4,0,131,2,2,83,41, +- 3,78,114,127,0,0,0,114,156,0,0,0,41,1,114,167, +- 0,0,0,41,7,114,108,0,0,0,114,165,0,0,0,114, +- 126,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, +- 180,0,0,0,114,127,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,5,1,0,0,183,4,0, +- 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, +- 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, +- 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, +- 15,0,0,0,67,0,0,0,115,234,1,0,0,100,1,0, +- 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, +- 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, +- 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, +- 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, +- 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, +- 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, +- 120,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, +- 0,0,95,7,0,116,9,0,131,0,0,114,153,0,124,0, +- 0,106,10,0,125,6,0,124,4,0,106,11,0,131,0,0, +- 125,7,0,110,15,0,124,0,0,106,12,0,125,6,0,124, +- 4,0,125,7,0,124,7,0,124,6,0,107,6,0,114,45, +- 1,116,13,0,124,0,0,106,2,0,124,4,0,131,2,0, +- 125,8,0,120,100,0,124,0,0,106,14,0,68,93,77,0, +- 92,2,0,125,9,0,125,10,0,100,5,0,124,9,0,23, +- 125,11,0,116,13,0,124,8,0,124,11,0,131,2,0,125, +- 12,0,116,15,0,124,12,0,131,1,0,114,208,0,124,0, +- 0,106,16,0,124,10,0,124,1,0,124,12,0,124,8,0, +- 103,1,0,124,2,0,131,5,0,83,113,208,0,87,116,17, +- 0,124,8,0,131,1,0,125,3,0,120,123,0,124,0,0, +- 106,14,0,68,93,112,0,92,2,0,125,9,0,125,10,0, +- 116,13,0,124,0,0,106,2,0,124,4,0,124,9,0,23, +- 131,2,0,125,12,0,116,18,0,100,6,0,106,19,0,124, +- 12,0,131,1,0,100,7,0,100,3,0,131,1,1,1,124, +- 7,0,124,9,0,23,124,6,0,107,6,0,114,55,1,116, +- 15,0,124,12,0,131,1,0,114,55,1,124,0,0,106,16, +- 0,124,10,0,124,1,0,124,12,0,100,8,0,124,2,0, +- 131,5,0,83,113,55,1,87,124,3,0,114,230,1,116,18, +- 0,100,9,0,106,19,0,124,8,0,131,1,0,131,1,0, +- 1,116,20,0,106,21,0,124,1,0,100,8,0,131,2,0, +- 125,13,0,124,8,0,103,1,0,124,13,0,95,22,0,124, +- 13,0,83,100,8,0,83,41,11,122,125,84,114,121,32,116, +- 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, +- 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, +- 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, +- 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, +- 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, +- 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, +- 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, +- 114,116,105,111,110,115,41,46,70,114,58,0,0,0,114,56, +- 0,0,0,114,29,0,0,0,114,185,0,0,0,122,9,116, +- 114,121,105,110,103,32,123,125,114,98,0,0,0,78,122,25, +- 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, +- 99,101,32,102,111,114,32,123,125,114,87,0,0,0,41,23, +- 114,32,0,0,0,114,39,0,0,0,114,35,0,0,0,114, +- 3,0,0,0,114,45,0,0,0,114,219,0,0,0,114,40, +- 0,0,0,114,8,1,0,0,218,11,95,102,105,108,108,95, +- 99,97,99,104,101,114,6,0,0,0,114,11,1,0,0,114, +- 88,0,0,0,114,10,1,0,0,114,28,0,0,0,114,7, +- 1,0,0,114,44,0,0,0,114,5,1,0,0,114,46,0, +- 0,0,114,105,0,0,0,114,47,0,0,0,114,121,0,0, +- 0,114,160,0,0,0,114,156,0,0,0,41,14,114,108,0, +- 0,0,114,126,0,0,0,114,180,0,0,0,90,12,105,115, +- 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, +- 95,109,111,100,117,108,101,114,133,0,0,0,90,5,99,97, +- 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, +- 101,90,9,98,97,115,101,95,112,97,116,104,114,225,0,0, +- 0,114,165,0,0,0,90,13,105,110,105,116,95,102,105,108, +- 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, +- 114,164,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,181,0,0,0,188,4,0,0,115,68,0, +- 0,0,0,3,6,1,19,1,3,1,34,1,13,1,11,1, +- 15,1,10,1,9,2,9,1,9,1,15,2,9,1,6,2, +- 12,1,18,1,22,1,10,1,15,1,12,1,32,4,12,2, +- 22,1,22,1,25,1,16,1,12,1,29,1,6,1,19,1, +- 18,1,12,1,4,1,122,20,70,105,108,101,70,105,110,100, +- 101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,0, +- 0,0,0,0,0,9,0,0,0,13,0,0,0,67,0,0, +- 0,115,11,1,0,0,124,0,0,106,0,0,125,1,0,121, +- 31,0,116,1,0,106,2,0,124,1,0,112,33,0,116,1, +- 0,106,3,0,131,0,0,131,1,0,125,2,0,87,110,33, +- 0,4,116,4,0,116,5,0,116,6,0,102,3,0,107,10, +- 0,114,75,0,1,1,1,103,0,0,125,2,0,89,110,1, +- 0,88,116,7,0,106,8,0,106,9,0,100,1,0,131,1, +- 0,115,112,0,116,10,0,124,2,0,131,1,0,124,0,0, +- 95,11,0,110,111,0,116,10,0,131,0,0,125,3,0,120, +- 90,0,124,2,0,68,93,82,0,125,4,0,124,4,0,106, +- 12,0,100,2,0,131,1,0,92,3,0,125,5,0,125,6, +- 0,125,7,0,124,6,0,114,191,0,100,3,0,106,13,0, +- 124,5,0,124,7,0,106,14,0,131,0,0,131,2,0,125, +- 8,0,110,6,0,124,5,0,125,8,0,124,3,0,106,15, +- 0,124,8,0,131,1,0,1,113,128,0,87,124,3,0,124, +- 0,0,95,11,0,116,7,0,106,8,0,106,9,0,116,16, +- 0,131,1,0,114,7,1,100,4,0,100,5,0,132,0,0, +- 124,2,0,68,131,1,0,124,0,0,95,17,0,100,6,0, +- 83,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, +- 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, +- 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, +- 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, +- 105,114,101,99,116,111,114,121,46,114,0,0,0,0,114,58, +- 0,0,0,122,5,123,125,46,123,125,99,1,0,0,0,0, +- 0,0,0,2,0,0,0,3,0,0,0,83,0,0,0,115, +- 28,0,0,0,104,0,0,124,0,0,93,18,0,125,1,0, +- 124,1,0,106,0,0,131,0,0,146,2,0,113,6,0,83, +- 114,4,0,0,0,41,1,114,88,0,0,0,41,2,114,22, +- 0,0,0,90,2,102,110,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,250,9,60,115,101,116,99,111,109,112, +- 62,6,5,0,0,115,2,0,0,0,9,0,122,41,70,105, +- 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, +- 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, +- 101,116,99,111,109,112,62,78,41,18,114,35,0,0,0,114, +- 3,0,0,0,90,7,108,105,115,116,100,105,114,114,45,0, +- 0,0,114,0,1,0,0,218,15,80,101,114,109,105,115,115, +- 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, +- 114,101,99,116,111,114,121,69,114,114,111,114,114,7,0,0, +- 0,114,8,0,0,0,114,9,0,0,0,114,9,1,0,0, +- 114,10,1,0,0,114,83,0,0,0,114,47,0,0,0,114, +- 88,0,0,0,218,3,97,100,100,114,10,0,0,0,114,11, +- 1,0,0,41,9,114,108,0,0,0,114,35,0,0,0,90, +- 8,99,111,110,116,101,110,116,115,90,21,108,111,119,101,114, +- 95,115,117,102,102,105,120,95,99,111,110,116,101,110,116,115, +- 114,245,0,0,0,114,106,0,0,0,114,237,0,0,0,114, +- 225,0,0,0,90,8,110,101,119,95,110,97,109,101,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,13,1, +- 0,0,233,4,0,0,115,34,0,0,0,0,2,9,1,3, +- 1,31,1,22,3,11,3,18,1,18,7,9,1,13,1,24, +- 1,6,1,27,2,6,1,17,1,9,1,18,1,122,22,70, +- 105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,95, +- 99,97,99,104,101,99,1,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,7,0,0,0,115,25,0,0,0,135, +- 0,0,135,1,0,102,2,0,100,1,0,100,2,0,134,0, +- 0,125,2,0,124,2,0,83,41,3,97,20,1,0,0,65, +- 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, +- 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, +- 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, +- 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, +- 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, +- 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, +- 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, +- 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, +- 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, +- 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, +- 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, +- 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, +- 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, +- 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, +- 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, +- 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, +- 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, +- 32,32,32,99,1,0,0,0,0,0,0,0,1,0,0,0, +- 4,0,0,0,19,0,0,0,115,43,0,0,0,116,0,0, +- 124,0,0,131,1,0,115,30,0,116,1,0,100,1,0,100, +- 2,0,124,0,0,131,1,1,130,1,0,136,0,0,124,0, - 0,136,1,0,140,1,0,83,41,3,122,45,80,97,116,104, - 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, - 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, - 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, - 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, - 115,117,112,112,111,114,116,101,100,114,35,0,0,0,41,2, -- 114,46,0,0,0,114,153,0,0,0,41,1,114,35,0,0, -- 0,41,2,114,11,1,0,0,114,92,1,0,0,114,4,0, +- 114,46,0,0,0,114,107,0,0,0,41,1,114,35,0,0, +- 0,41,2,114,170,0,0,0,114,12,1,0,0,114,4,0, - 0,0,114,5,0,0,0,218,24,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, -- 114,54,8,0,0,115,6,0,0,0,0,2,12,1,21,1, +- 114,18,5,0,0,115,6,0,0,0,0,2,12,1,18,1, - 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, - 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,114,4,0,0,0,41,3,114, -- 11,1,0,0,114,92,1,0,0,114,99,1,0,0,114,4, -- 0,0,0,41,2,114,11,1,0,0,114,92,1,0,0,114, -- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,44, -- 8,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, +- 170,0,0,0,114,12,1,0,0,114,18,1,0,0,114,4, +- 0,0,0,41,2,114,170,0,0,0,114,12,1,0,0,114, +- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,8, +- 5,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, - 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, - 41,41,2,114,47,0,0,0,114,35,0,0,0,41,1,114, -- 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,101,0,0,0,62,8,0,0,115,2,0,0, +- 108,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,244,0,0,0,26,5,0,0,115,2,0,0, - 0,0,1,122,19,70,105,108,101,70,105,110,100,101,114,46, -- 95,95,114,101,112,114,95,95,41,15,114,57,0,0,0,114, -- 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,72, -- 0,0,0,114,74,1,0,0,114,172,0,0,0,114,14,1, -- 0,0,114,165,0,0,0,114,85,1,0,0,114,13,1,0, -- 0,114,93,1,0,0,114,18,1,0,0,114,100,1,0,0, -- 114,101,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,86,1,0,0,178,7, +- 95,95,114,101,112,114,95,95,41,15,114,112,0,0,0,114, +- 111,0,0,0,114,113,0,0,0,114,114,0,0,0,114,185, +- 0,0,0,114,250,0,0,0,114,130,0,0,0,114,182,0, +- 0,0,114,124,0,0,0,114,5,1,0,0,114,181,0,0, +- 0,114,13,1,0,0,114,183,0,0,0,114,19,1,0,0, +- 114,244,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,6,1,0,0,142,4, - 0,0,115,20,0,0,0,12,7,6,2,12,14,12,4,6, -- 2,12,12,12,5,15,45,12,31,18,18,114,86,1,0,0, -- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,46,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -- 0,90,5,0,100,6,0,83,41,7,218,18,95,73,109,112, -- 111,114,116,76,111,99,107,67,111,110,116,101,120,116,122,36, -- 67,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32, -- 102,111,114,32,116,104,101,32,105,109,112,111,114,116,32,108, -- 111,99,107,46,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,1,0,0,0,67,0,0,0,115,14,0,0,0,116,0, -- 0,106,1,0,131,0,0,1,100,1,0,83,41,2,122,24, -- 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, -- 114,116,32,108,111,99,107,46,78,41,2,114,106,0,0,0, -- 114,3,1,0,0,41,1,114,71,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,75,0,0,0, -- 72,8,0,0,115,2,0,0,0,0,2,122,28,95,73,109, -- 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, -- 95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,0, -- 0,0,4,0,0,0,1,0,0,0,67,0,0,0,115,14, -+ 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, -+ 0,67,0,0,0,115,13,0,0,0,100,3,0,124,0,0, -+ 95,0,0,100,2,0,83,41,4,122,31,73,110,118,97,108, -+ 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, -+ 111,114,121,32,109,116,105,109,101,46,114,30,0,0,0,78, -+ 114,139,0,0,0,41,1,114,89,1,0,0,41,1,114,72, +- 2,12,12,12,5,15,45,12,31,18,18,114,6,1,0,0, +- 99,4,0,0,0,0,0,0,0,6,0,0,0,11,0,0, +- 0,67,0,0,0,115,195,0,0,0,124,0,0,106,0,0, +- 100,1,0,131,1,0,125,4,0,124,0,0,106,0,0,100, +- 2,0,131,1,0,125,5,0,124,4,0,115,99,0,124,5, +- 0,114,54,0,124,5,0,106,1,0,125,4,0,110,45,0, +- 124,2,0,124,3,0,107,2,0,114,84,0,116,2,0,124, +- 1,0,124,2,0,131,2,0,125,4,0,110,15,0,116,3, +- 0,124,1,0,124,2,0,131,2,0,125,4,0,124,5,0, +- 115,126,0,116,4,0,124,1,0,124,2,0,100,3,0,124, +- 4,0,131,2,1,125,5,0,121,44,0,124,5,0,124,0, +- 0,100,2,0,60,124,4,0,124,0,0,100,1,0,60,124, +- 2,0,124,0,0,100,4,0,60,124,3,0,124,0,0,100, +- 5,0,60,87,110,18,0,4,116,5,0,107,10,0,114,190, +- 0,1,1,1,89,110,1,0,88,100,0,0,83,41,6,78, +- 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, +- 115,112,101,99,95,95,114,127,0,0,0,90,8,95,95,102, +- 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, +- 95,41,6,218,3,103,101,116,114,127,0,0,0,114,223,0, +- 0,0,114,218,0,0,0,114,167,0,0,0,218,9,69,120, +- 99,101,112,116,105,111,110,41,6,90,2,110,115,114,106,0, +- 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, +- 97,116,104,110,97,109,101,114,127,0,0,0,114,164,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, +- 32,5,0,0,115,34,0,0,0,0,2,15,1,15,1,6, +- 1,6,1,12,1,12,1,18,2,15,1,6,1,21,1,3, +- 1,10,1,10,1,10,1,14,1,13,2,114,24,1,0,0, +- 99,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, +- 0,67,0,0,0,115,55,0,0,0,116,0,0,116,1,0, +- 106,2,0,131,0,0,102,2,0,125,0,0,116,3,0,116, +- 4,0,102,2,0,125,1,0,116,5,0,116,6,0,102,2, +- 0,125,2,0,124,0,0,124,1,0,124,2,0,103,3,0, +- 83,41,1,122,95,82,101,116,117,114,110,115,32,97,32,108, +- 105,115,116,32,111,102,32,102,105,108,101,45,98,97,115,101, +- 100,32,109,111,100,117,108,101,32,108,111,97,100,101,114,115, +- 46,10,10,32,32,32,32,69,97,99,104,32,105,116,101,109, +- 32,105,115,32,97,32,116,117,112,108,101,32,40,108,111,97, +- 100,101,114,44,32,115,117,102,102,105,120,101,115,41,46,10, +- 32,32,32,32,41,7,114,224,0,0,0,114,145,0,0,0, +- 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, +- 105,120,101,115,114,218,0,0,0,114,84,0,0,0,114,223, +- 0,0,0,114,74,0,0,0,41,3,90,10,101,120,116,101, +- 110,115,105,111,110,115,90,6,115,111,117,114,99,101,90,8, +- 98,121,116,101,99,111,100,101,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,161,0,0,0,55,5,0,0, +- 115,8,0,0,0,0,5,18,1,12,1,12,1,114,161,0, +- 0,0,99,1,0,0,0,0,0,0,0,12,0,0,0,12, +- 0,0,0,67,0,0,0,115,70,2,0,0,124,0,0,97, +- 0,0,116,0,0,106,1,0,97,1,0,116,0,0,106,2, +- 0,97,2,0,116,1,0,106,3,0,116,4,0,25,125,1, +- 0,120,76,0,100,26,0,68,93,68,0,125,2,0,124,2, +- 0,116,1,0,106,3,0,107,7,0,114,83,0,116,0,0, +- 106,5,0,124,2,0,131,1,0,125,3,0,110,13,0,116, +- 1,0,106,3,0,124,2,0,25,125,3,0,116,6,0,124, +- 1,0,124,2,0,124,3,0,131,3,0,1,113,44,0,87, +- 100,5,0,100,6,0,103,1,0,102,2,0,100,7,0,100, +- 8,0,100,6,0,103,2,0,102,2,0,102,2,0,125,4, +- 0,120,149,0,124,4,0,68,93,129,0,92,2,0,125,5, +- 0,125,6,0,116,7,0,100,9,0,100,10,0,132,0,0, +- 124,6,0,68,131,1,0,131,1,0,115,199,0,116,8,0, +- 130,1,0,124,6,0,100,11,0,25,125,7,0,124,5,0, +- 116,1,0,106,3,0,107,6,0,114,241,0,116,1,0,106, +- 3,0,124,5,0,25,125,8,0,80,113,156,0,121,20,0, +- 116,0,0,106,5,0,124,5,0,131,1,0,125,8,0,80, +- 87,113,156,0,4,116,9,0,107,10,0,114,28,1,1,1, +- 1,119,156,0,89,113,156,0,88,113,156,0,87,116,9,0, +- 100,12,0,131,1,0,130,1,0,116,6,0,124,1,0,100, +- 13,0,124,8,0,131,3,0,1,116,6,0,124,1,0,100, +- 14,0,124,7,0,131,3,0,1,116,6,0,124,1,0,100, +- 15,0,100,16,0,106,10,0,124,6,0,131,1,0,131,3, +- 0,1,121,19,0,116,0,0,106,5,0,100,17,0,131,1, +- 0,125,9,0,87,110,24,0,4,116,9,0,107,10,0,114, +- 147,1,1,1,1,100,18,0,125,9,0,89,110,1,0,88, +- 116,6,0,124,1,0,100,17,0,124,9,0,131,3,0,1, +- 116,0,0,106,5,0,100,19,0,131,1,0,125,10,0,116, +- 6,0,124,1,0,100,19,0,124,10,0,131,3,0,1,124, +- 5,0,100,7,0,107,2,0,114,238,1,116,0,0,106,5, +- 0,100,20,0,131,1,0,125,11,0,116,6,0,124,1,0, +- 100,21,0,124,11,0,131,3,0,1,116,6,0,124,1,0, +- 100,22,0,116,11,0,131,0,0,131,3,0,1,116,12,0, +- 106,13,0,116,2,0,106,14,0,131,0,0,131,1,0,1, +- 124,5,0,100,7,0,107,2,0,114,66,2,116,15,0,106, +- 16,0,100,23,0,131,1,0,1,100,24,0,116,12,0,107, +- 6,0,114,66,2,100,25,0,116,17,0,95,18,0,100,18, +- 0,83,41,27,122,205,83,101,116,117,112,32,116,104,101,32, ++ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, ++ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, ++ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, ++ 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, ++ 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, ++ 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, ++ 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, ++ 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, ++ 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, ++ 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, ++ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, ++ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, ++ 41,2,114,48,0,0,0,114,113,0,0,0,41,2,114,171, ++ 0,0,0,114,191,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,11,109,111,100,117,108,101,95, ++ 114,101,112,114,227,3,0,0,115,2,0,0,0,0,7,122, ++ 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, ++ 114,46,109,111,100,117,108,101,95,114,101,112,114,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,4,0,0,0,100,1,0,83,41,2,78,84,114, ++ 5,0,0,0,41,2,114,109,0,0,0,114,127,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 160,0,0,0,236,3,0,0,115,2,0,0,0,0,1,122, ++ 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, ++ 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, ++ 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, ++ 0,115,4,0,0,0,100,1,0,83,41,2,78,114,31,0, ++ 0,0,114,5,0,0,0,41,2,114,109,0,0,0,114,127, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,75,1,0,0,201,7,0,0,115,2,0,0,0, -+ 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, -+ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, -+ 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, -+ 0,67,0,0,0,115,59,0,0,0,124,0,0,106,0,0, -+ 124,1,0,131,1,0,125,2,0,124,2,0,100,1,0,107, -+ 8,0,114,37,0,100,1,0,103,0,0,102,2,0,83,124, -+ 2,0,106,1,0,124,2,0,106,2,0,112,55,0,103,0, -+ 0,102,2,0,83,41,2,122,197,84,114,121,32,116,111,32, -+ 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, -+ 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, -+ 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, -+ 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, -+ 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, -+ 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, -+ 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, -+ 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, -+ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, -+ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, -+ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, -+ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, -+ 3,114,14,1,0,0,114,170,0,0,0,114,221,0,0,0, -+ 41,3,114,72,0,0,0,114,159,0,0,0,114,178,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,166,0,0,0,207,7,0,0,115,8,0,0,0,0,7, -+ 15,1,12,1,10,1,122,22,70,105,108,101,70,105,110,100, -+ 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,6, -+ 0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,67, -+ 0,0,0,115,40,0,0,0,124,1,0,124,2,0,124,3, -+ 0,131,2,0,125,6,0,116,0,0,124,2,0,124,3,0, -+ 100,1,0,124,6,0,100,2,0,124,4,0,131,2,2,83, -+ 41,3,78,114,170,0,0,0,114,221,0,0,0,41,1,114, -+ 240,0,0,0,41,7,114,72,0,0,0,114,244,0,0,0, -+ 114,159,0,0,0,114,36,0,0,0,114,229,0,0,0,114, -+ 13,1,0,0,114,170,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,86,1,0,0,219,7,0, -+ 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, -+ 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, -+ 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, -+ 15,0,0,0,67,0,0,0,115,240,1,0,0,100,1,0, -+ 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, -+ 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, -+ 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, -+ 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, -+ 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, -+ 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, -+ 123,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, -+ 0,0,95,7,0,110,0,0,116,9,0,131,0,0,114,156, -+ 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, -+ 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, -+ 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, -+ 0,114,51,1,116,13,0,124,0,0,106,2,0,124,4,0, -+ 131,2,0,125,8,0,120,103,0,124,0,0,106,14,0,68, -+ 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, -+ 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, -+ 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,211, -+ 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, -+ 124,8,0,103,1,0,124,2,0,131,5,0,83,113,211,0, -+ 87,116,17,0,124,8,0,131,1,0,125,3,0,110,0,0, -+ 120,126,0,124,0,0,106,14,0,68,93,115,0,92,2,0, -+ 125,9,0,125,10,0,116,13,0,124,0,0,106,2,0,124, -+ 4,0,124,9,0,23,131,2,0,125,12,0,116,18,0,100, -+ 6,0,106,19,0,124,12,0,131,1,0,100,7,0,100,3, -+ 0,131,1,1,1,124,7,0,124,9,0,23,124,6,0,107, -+ 6,0,114,61,1,116,15,0,124,12,0,131,1,0,114,176, -+ 1,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, -+ 100,8,0,124,2,0,131,5,0,83,113,61,1,113,61,1, -+ 87,124,3,0,114,236,1,116,18,0,100,9,0,106,19,0, -+ 124,8,0,131,1,0,131,1,0,1,116,20,0,124,1,0, -+ 100,8,0,131,2,0,125,13,0,124,8,0,103,1,0,124, -+ 13,0,95,21,0,124,13,0,83,100,8,0,83,41,11,122, -+ 125,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, -+ 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, -+ 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, -+ 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, -+ 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, -+ 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, -+ 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, -+ 45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,114, -+ 117,0,0,0,114,116,0,0,0,114,30,0,0,0,114,73, -+ 0,0,0,122,9,116,114,121,105,110,103,32,123,125,114,146, -+ 0,0,0,78,122,25,112,111,115,115,105,98,108,101,32,110, -+ 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,114, -+ 139,0,0,0,41,22,114,33,0,0,0,114,40,0,0,0, -+ 114,36,0,0,0,114,4,0,0,0,114,46,0,0,0,114, -+ 54,1,0,0,114,41,0,0,0,114,89,1,0,0,218,11, -+ 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, -+ 114,92,1,0,0,114,140,0,0,0,114,91,1,0,0,114, -+ 29,0,0,0,114,88,1,0,0,114,45,0,0,0,114,86, -+ 1,0,0,114,47,0,0,0,114,153,0,0,0,114,48,0, -+ 0,0,114,217,0,0,0,114,221,0,0,0,41,14,114,72, -+ 0,0,0,114,159,0,0,0,114,13,1,0,0,90,12,105, -+ 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, -+ 108,95,109,111,100,117,108,101,114,184,0,0,0,90,5,99, -+ 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, -+ 108,101,90,9,98,97,115,101,95,112,97,116,104,114,58,1, -+ 0,0,114,244,0,0,0,90,13,105,110,105,116,95,102,105, -+ 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, -+ 104,114,178,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,14,1,0,0,224,7,0,0,115,68, -+ 0,0,0,0,3,6,1,19,1,3,1,34,1,13,1,11, -+ 1,15,1,10,1,12,2,9,1,9,1,15,2,9,1,6, -+ 2,12,1,18,1,22,1,10,1,15,1,12,1,32,4,15, -+ 2,22,1,22,1,25,1,16,1,12,1,32,1,6,1,19, -+ 1,15,1,12,1,4,1,122,20,70,105,108,101,70,105,110, -+ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, -+ 0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,0, -+ 0,0,115,14,1,0,0,124,0,0,106,0,0,125,1,0, -+ 121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,116, -+ 1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,110, -+ 33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,107, -+ 10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,110, -+ 1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,131, -+ 1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,0, -+ 0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,0, -+ 120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,0, -+ 106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,125, -+ 6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,13, -+ 0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,0, -+ 125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,106, -+ 15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,0, -+ 124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,116, -+ 16,0,131,1,0,114,10,1,100,4,0,100,5,0,132,0, -+ 0,124,2,0,68,131,1,0,124,0,0,95,17,0,110,0, -+ 0,100,6,0,83,41,7,122,68,70,105,108,108,32,116,104, -+ 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, -+ 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, -+ 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, -+ 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, -+ 0,0,114,117,0,0,0,122,5,123,125,46,123,125,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83, -+ 0,0,0,115,28,0,0,0,104,0,0,124,0,0,93,18, -+ 0,125,1,0,124,1,0,106,0,0,131,0,0,146,2,0, -+ 113,6,0,83,114,5,0,0,0,41,1,114,140,0,0,0, -+ 41,2,114,23,0,0,0,90,2,102,110,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,250,9,60,115,101,116, -+ 99,111,109,112,62,42,8,0,0,115,2,0,0,0,9,0, -+ 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, -+ 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, -+ 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,36, -+ 0,0,0,114,4,0,0,0,90,7,108,105,115,116,100,105, -+ 114,114,46,0,0,0,218,17,70,105,108,101,78,111,116,70, -+ 111,117,110,100,69,114,114,111,114,218,15,80,101,114,109,105, -+ 115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65, -+ 68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,8, -+ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,90,1, -+ 0,0,114,91,1,0,0,114,122,0,0,0,114,48,0,0, -+ 0,114,140,0,0,0,218,3,97,100,100,114,11,0,0,0, -+ 114,92,1,0,0,41,9,114,72,0,0,0,114,36,0,0, -+ 0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119, -+ 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, -+ 116,115,114,72,1,0,0,114,68,0,0,0,114,66,1,0, -+ 0,114,58,1,0,0,90,8,110,101,119,95,110,97,109,101, ++ 0,0,114,203,0,0,0,239,3,0,0,115,2,0,0,0, ++ 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, ++ 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0, ++ 67,0,0,0,115,22,0,0,0,116,0,0,100,1,0,100, ++ 2,0,100,3,0,100,4,0,100,5,0,131,3,1,83,41, ++ 6,78,114,31,0,0,0,122,8,60,115,116,114,105,110,103, ++ 62,114,190,0,0,0,114,205,0,0,0,84,41,1,114,206, ++ 0,0,0,41,2,114,109,0,0,0,114,127,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,188, ++ 0,0,0,242,3,0,0,115,2,0,0,0,0,1,122,25, ++ 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, ++ 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, ++ 0,0,0,100,1,0,83,41,2,122,42,85,115,101,32,100, ++ 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, ++ 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, ++ 116,105,111,110,46,78,114,5,0,0,0,41,2,114,109,0, ++ 0,0,114,165,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,187,0,0,0,245,3,0,0,115, ++ 0,0,0,0,122,30,95,78,97,109,101,115,112,97,99,101, ++ 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, ++ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0, ++ 0,83,41,1,78,114,5,0,0,0,41,2,114,109,0,0, ++ 0,114,191,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,192,0,0,0,248,3,0,0,115,2, ++ 0,0,0,0,1,122,28,95,78,97,109,101,115,112,97,99, ++ 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, ++ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 3,0,0,0,67,0,0,0,115,32,0,0,0,116,0,0, ++ 100,1,0,124,0,0,106,1,0,131,2,0,1,116,2,0, ++ 106,3,0,124,0,0,124,1,0,131,2,0,83,41,2,122, ++ 98,76,111,97,100,32,97,32,110,97,109,101,115,112,97,99, ++ 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, ++ 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, ++ 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, ++ 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, ++ 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, ++ 32,32,32,122,38,110,97,109,101,115,112,97,99,101,32,109, ++ 111,100,117,108,101,32,108,111,97,100,101,100,32,119,105,116, ++ 104,32,112,97,116,104,32,123,33,114,125,41,4,114,106,0, ++ 0,0,114,233,0,0,0,114,122,0,0,0,114,193,0,0, ++ 0,41,2,114,109,0,0,0,114,127,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,194,0,0, ++ 0,251,3,0,0,115,4,0,0,0,0,7,16,1,122,28, ++ 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, ++ 46,108,111,97,100,95,109,111,100,117,108,101,78,41,12,114, ++ 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,186, ++ 0,0,0,114,184,0,0,0,114,249,0,0,0,114,160,0, ++ 0,0,114,203,0,0,0,114,188,0,0,0,114,187,0,0, ++ 0,114,192,0,0,0,114,194,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 94,1,0,0,13,8,0,0,115,34,0,0,0,0,2,9, -+ 1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13, -+ 1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122, -+ 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, -+ 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, -+ 3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0, -+ 0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0, -+ 134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0, -+ 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, -+ 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, -+ 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, -+ 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, -+ 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, -+ 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, -+ 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, -+ 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, -+ 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, -+ 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, -+ 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, -+ 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, -+ 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, -+ 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, -+ 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, -+ 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, -+ 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, -+ 32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,4,0,0,0,19,0,0,0,115,46,0,0,0,116, -+ 0,0,124,0,0,131,1,0,115,33,0,116,1,0,100,1, -+ 0,100,2,0,124,0,0,131,1,1,130,1,0,110,0,0, ++ 248,0,0,0,223,3,0,0,115,16,0,0,0,12,1,12, ++ 3,18,9,12,3,12,3,12,3,12,3,12,3,114,248,0, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5, ++ 0,0,0,64,0,0,0,115,160,0,0,0,101,0,0,90, ++ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4, ++ 0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,0, ++ 101,4,0,100,4,0,100,5,0,132,0,0,131,1,0,90, ++ 6,0,101,4,0,100,6,0,100,7,0,132,0,0,131,1, ++ 0,90,7,0,101,4,0,100,8,0,100,9,0,132,0,0, ++ 131,1,0,90,8,0,101,4,0,100,10,0,100,11,0,100, ++ 12,0,132,1,0,131,1,0,90,9,0,101,4,0,100,10, ++ 0,100,10,0,100,13,0,100,14,0,132,2,0,131,1,0, ++ 90,10,0,101,4,0,100,10,0,100,15,0,100,16,0,132, ++ 1,0,131,1,0,90,11,0,100,10,0,83,41,17,218,10, ++ 80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97, ++ 32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114, ++ 32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97, ++ 99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97, ++ 116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0, ++ 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, ++ 55,0,0,0,120,48,0,116,0,0,106,1,0,106,2,0, ++ 131,0,0,68,93,31,0,125,1,0,116,3,0,124,1,0, ++ 100,1,0,131,2,0,114,16,0,124,1,0,106,4,0,131, ++ 0,0,1,113,16,0,87,100,2,0,83,41,3,122,125,67, ++ 97,108,108,32,116,104,101,32,105,110,118,97,108,105,100,97, ++ 116,101,95,99,97,99,104,101,115,40,41,32,109,101,116,104, ++ 111,100,32,111,110,32,97,108,108,32,112,97,116,104,32,101, ++ 110,116,114,121,32,102,105,110,100,101,114,115,10,32,32,32, ++ 32,32,32,32,32,115,116,111,114,101,100,32,105,110,32,115, ++ 121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114, ++ 95,99,97,99,104,101,115,32,40,119,104,101,114,101,32,105, ++ 109,112,108,101,109,101,110,116,101,100,41,46,218,17,105,110, ++ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,78, ++ 41,5,114,8,0,0,0,218,19,112,97,116,104,95,105,109, ++ 112,111,114,116,101,114,95,99,97,99,104,101,218,6,118,97, ++ 108,117,101,115,114,116,0,0,0,114,251,0,0,0,41,2, ++ 114,171,0,0,0,218,6,102,105,110,100,101,114,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,251,0,0, ++ 0,12,4,0,0,115,6,0,0,0,0,4,22,1,15,1, ++ 122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118, ++ 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, ++ 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67, ++ 0,0,0,115,107,0,0,0,116,0,0,106,1,0,100,1, ++ 0,107,9,0,114,41,0,116,0,0,106,1,0,12,114,41, ++ 0,116,2,0,106,3,0,100,2,0,116,4,0,131,2,0, ++ 1,120,59,0,116,0,0,106,1,0,68,93,44,0,125,2, ++ 0,121,14,0,124,2,0,124,1,0,131,1,0,83,87,113, ++ 51,0,4,116,5,0,107,10,0,114,94,0,1,1,1,119, ++ 51,0,89,113,51,0,88,113,51,0,87,100,1,0,83,100, ++ 1,0,83,41,3,122,113,83,101,97,114,99,104,32,115,101, ++ 113,117,101,110,99,101,32,111,102,32,104,111,111,107,115,32, ++ 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, ++ 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, ++ 32,32,73,102,32,39,104,111,111,107,115,39,32,105,115,32, ++ 102,97,108,115,101,32,116,104,101,110,32,117,115,101,32,115, ++ 121,115,46,112,97,116,104,95,104,111,111,107,115,46,10,10, ++ 32,32,32,32,32,32,32,32,78,122,23,115,121,115,46,112, ++ 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, ++ 116,121,41,6,114,8,0,0,0,218,10,112,97,116,104,95, ++ 104,111,111,107,115,114,61,0,0,0,114,62,0,0,0,114, ++ 126,0,0,0,114,108,0,0,0,41,3,114,171,0,0,0, ++ 114,36,0,0,0,90,4,104,111,111,107,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,11,95,112,97,116, ++ 104,95,104,111,111,107,115,20,4,0,0,115,16,0,0,0, ++ 0,7,25,1,16,1,16,1,3,1,14,1,13,1,12,2, ++ 122,22,80,97,116,104,70,105,110,100,101,114,46,95,112,97, ++ 116,104,95,104,111,111,107,115,99,2,0,0,0,0,0,0, ++ 0,3,0,0,0,19,0,0,0,67,0,0,0,115,123,0, ++ 0,0,124,1,0,100,1,0,107,2,0,114,53,0,121,16, ++ 0,116,0,0,106,1,0,131,0,0,125,1,0,87,110,22, ++ 0,4,116,2,0,107,10,0,114,52,0,1,1,1,100,2, ++ 0,83,89,110,1,0,88,121,17,0,116,3,0,106,4,0, ++ 124,1,0,25,125,2,0,87,110,46,0,4,116,5,0,107, ++ 10,0,114,118,0,1,1,1,124,0,0,106,6,0,124,1, ++ 0,131,1,0,125,2,0,124,2,0,116,3,0,106,4,0, ++ 124,1,0,60,89,110,1,0,88,124,2,0,83,41,3,122, ++ 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, ++ 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, ++ 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, ++ 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, ++ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, ++ 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, ++ 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, ++ 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, ++ 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, ++ 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, ++ 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, ++ 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, ++ 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, ++ 32,32,32,114,31,0,0,0,78,41,7,114,4,0,0,0, ++ 114,46,0,0,0,218,17,70,105,108,101,78,111,116,70,111, ++ 117,110,100,69,114,114,111,114,114,8,0,0,0,114,252,0, ++ 0,0,114,138,0,0,0,114,0,1,0,0,41,3,114,171, ++ 0,0,0,114,36,0,0,0,114,254,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,20,95,112, ++ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, ++ 104,101,37,4,0,0,115,22,0,0,0,0,8,12,1,3, ++ 1,16,1,13,3,9,1,3,1,17,1,13,1,15,1,18, ++ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, ++ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, ++ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, ++ 0,0,0,67,0,0,0,115,119,0,0,0,116,0,0,124, ++ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, ++ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, ++ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, ++ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, ++ 0,114,88,0,116,3,0,106,4,0,124,1,0,124,3,0, ++ 131,2,0,83,116,3,0,106,5,0,124,1,0,100,0,0, ++ 131,2,0,125,5,0,124,4,0,124,5,0,95,6,0,124, ++ 5,0,83,41,2,78,114,125,0,0,0,41,7,114,116,0, ++ 0,0,114,125,0,0,0,114,183,0,0,0,114,122,0,0, ++ 0,114,180,0,0,0,114,161,0,0,0,114,157,0,0,0, ++ 41,6,114,171,0,0,0,114,127,0,0,0,114,254,0,0, ++ 0,114,128,0,0,0,114,129,0,0,0,114,165,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, ++ 99,59,4,0,0,115,18,0,0,0,0,4,15,1,24,2, ++ 15,1,6,1,12,1,16,1,18,1,9,1,122,27,80,97, ++ 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, ++ 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, ++ 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, ++ 243,0,0,0,103,0,0,125,4,0,120,230,0,124,2,0, ++ 68,93,191,0,125,5,0,116,0,0,124,5,0,116,1,0, ++ 116,2,0,102,2,0,131,2,0,115,43,0,113,13,0,124, ++ 0,0,106,3,0,124,5,0,131,1,0,125,6,0,124,6, ++ 0,100,1,0,107,9,0,114,13,0,116,4,0,124,6,0, ++ 100,2,0,131,2,0,114,106,0,124,6,0,106,5,0,124, ++ 1,0,124,3,0,131,2,0,125,7,0,110,18,0,124,0, ++ 0,106,6,0,124,1,0,124,6,0,131,2,0,125,7,0, ++ 124,7,0,100,1,0,107,8,0,114,139,0,113,13,0,124, ++ 7,0,106,7,0,100,1,0,107,9,0,114,158,0,124,7, ++ 0,83,124,7,0,106,8,0,125,8,0,124,8,0,100,1, ++ 0,107,8,0,114,191,0,116,9,0,100,3,0,131,1,0, ++ 130,1,0,124,4,0,106,10,0,124,8,0,131,1,0,1, ++ 113,13,0,87,116,11,0,106,12,0,124,1,0,100,1,0, ++ 131,2,0,125,7,0,124,4,0,124,7,0,95,8,0,124, ++ 7,0,83,100,1,0,83,41,4,122,63,70,105,110,100,32, ++ 116,104,101,32,108,111,97,100,101,114,32,111,114,32,110,97, ++ 109,101,115,112,97,99,101,95,112,97,116,104,32,102,111,114, ++ 32,116,104,105,115,32,109,111,100,117,108,101,47,112,97,99, ++ 107,97,103,101,32,110,97,109,101,46,78,114,182,0,0,0, ++ 122,19,115,112,101,99,32,109,105,115,115,105,110,103,32,108, ++ 111,97,100,101,114,41,13,114,144,0,0,0,114,70,0,0, ++ 0,218,5,98,121,116,101,115,114,2,1,0,0,114,116,0, ++ 0,0,114,182,0,0,0,114,3,1,0,0,114,128,0,0, ++ 0,114,157,0,0,0,114,108,0,0,0,114,150,0,0,0, ++ 114,122,0,0,0,114,161,0,0,0,41,9,114,171,0,0, ++ 0,114,127,0,0,0,114,36,0,0,0,114,181,0,0,0, ++ 218,14,110,97,109,101,115,112,97,99,101,95,112,97,116,104, ++ 90,5,101,110,116,114,121,114,254,0,0,0,114,165,0,0, ++ 0,114,129,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,9,95,103,101,116,95,115,112,101,99, ++ 74,4,0,0,115,40,0,0,0,0,5,6,1,13,1,21, ++ 1,3,1,15,1,12,1,15,1,21,2,18,1,12,1,3, ++ 1,15,1,4,1,9,1,12,1,12,5,17,2,18,1,9, ++ 1,122,20,80,97,116,104,70,105,110,100,101,114,46,95,103, ++ 101,116,95,115,112,101,99,99,4,0,0,0,0,0,0,0, ++ 6,0,0,0,4,0,0,0,67,0,0,0,115,140,0,0, ++ 0,124,2,0,100,1,0,107,8,0,114,21,0,116,0,0, ++ 106,1,0,125,2,0,124,0,0,106,2,0,124,1,0,124, ++ 2,0,124,3,0,131,3,0,125,4,0,124,4,0,100,1, ++ 0,107,8,0,114,58,0,100,1,0,83,124,4,0,106,3, ++ 0,100,1,0,107,8,0,114,132,0,124,4,0,106,4,0, ++ 125,5,0,124,5,0,114,125,0,100,2,0,124,4,0,95, ++ 5,0,116,6,0,124,1,0,124,5,0,124,0,0,106,2, ++ 0,131,3,0,124,4,0,95,4,0,124,4,0,83,100,1, ++ 0,83,110,4,0,124,4,0,83,100,1,0,83,41,3,122, ++ 98,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, ++ 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, ++ 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, ++ 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, ++ 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, ++ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, ++ 104,101,46,78,90,9,110,97,109,101,115,112,97,99,101,41, ++ 7,114,8,0,0,0,114,36,0,0,0,114,6,1,0,0, ++ 114,128,0,0,0,114,157,0,0,0,114,159,0,0,0,114, ++ 231,0,0,0,41,6,114,171,0,0,0,114,127,0,0,0, ++ 114,36,0,0,0,114,181,0,0,0,114,165,0,0,0,114, ++ 5,1,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,182,0,0,0,106,4,0,0,115,26,0,0, ++ 0,0,4,12,1,9,1,21,1,12,1,4,1,15,1,9, ++ 1,6,3,9,1,24,1,4,2,7,2,122,20,80,97,116, ++ 104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, ++ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, ++ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, ++ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, ++ 100,1,0,107,8,0,114,34,0,100,1,0,83,124,3,0, ++ 106,1,0,83,41,2,122,170,102,105,110,100,32,116,104,101, ++ 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, ++ 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, ++ 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, ++ 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, ++ 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, ++ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, ++ 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, ++ 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, ++ 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, ++ 32,32,78,41,2,114,182,0,0,0,114,128,0,0,0,41, ++ 4,114,171,0,0,0,114,127,0,0,0,114,36,0,0,0, ++ 114,165,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,183,0,0,0,128,4,0,0,115,8,0, ++ 0,0,0,8,18,1,12,1,4,1,122,22,80,97,116,104, ++ 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, ++ 108,101,41,12,114,113,0,0,0,114,112,0,0,0,114,114, ++ 0,0,0,114,115,0,0,0,114,184,0,0,0,114,251,0, ++ 0,0,114,0,1,0,0,114,2,1,0,0,114,3,1,0, ++ 0,114,6,1,0,0,114,182,0,0,0,114,183,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,250,0,0,0,8,4,0,0,115,22,0, ++ 0,0,12,2,6,2,18,8,18,17,18,22,18,15,3,1, ++ 18,31,3,1,21,21,3,1,114,250,0,0,0,99,0,0, ++ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, ++ 0,0,115,133,0,0,0,101,0,0,90,1,0,100,0,0, ++ 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, ++ 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, ++ 0,101,6,0,90,7,0,100,6,0,100,7,0,132,0,0, ++ 90,8,0,100,8,0,100,9,0,132,0,0,90,9,0,100, ++ 10,0,100,11,0,100,12,0,132,1,0,90,10,0,100,13, ++ 0,100,14,0,132,0,0,90,11,0,101,12,0,100,15,0, ++ 100,16,0,132,0,0,131,1,0,90,13,0,100,17,0,100, ++ 18,0,132,0,0,90,14,0,100,10,0,83,41,19,218,10, ++ 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, ++ 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, ++ 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, ++ 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, ++ 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, ++ 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, ++ 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, ++ 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, ++ 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, ++ 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, ++ 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, ++ 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, ++ 0,5,0,0,0,5,0,0,0,7,0,0,0,115,122,0, ++ 0,0,103,0,0,125,3,0,120,52,0,124,2,0,68,93, ++ 44,0,92,2,0,137,0,0,125,4,0,124,3,0,106,0, ++ 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, ++ 124,4,0,68,131,1,0,131,1,0,1,113,13,0,87,124, ++ 3,0,124,0,0,95,1,0,124,1,0,112,79,0,100,3, ++ 0,124,0,0,95,2,0,100,6,0,124,0,0,95,3,0, ++ 116,4,0,131,0,0,124,0,0,95,5,0,116,4,0,131, ++ 0,0,124,0,0,95,6,0,100,5,0,83,41,7,122,154, ++ 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, ++ 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, ++ 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, ++ 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, ++ 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, ++ 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, ++ 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, ++ 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, ++ 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, ++ 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, ++ 0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,115, ++ 27,0,0,0,124,0,0,93,17,0,125,1,0,124,1,0, ++ 136,0,0,102,2,0,86,1,113,3,0,100,0,0,83,41, ++ 1,78,114,5,0,0,0,41,2,114,23,0,0,0,114,226, ++ 0,0,0,41,1,114,128,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,228,0,0,0,157,4,0,0,115,2,0, ++ 0,0,6,0,122,38,70,105,108,101,70,105,110,100,101,114, ++ 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, ++ 115,62,46,60,103,101,110,101,120,112,114,62,114,59,0,0, ++ 0,114,30,0,0,0,78,114,88,0,0,0,41,7,114,150, ++ 0,0,0,218,8,95,108,111,97,100,101,114,115,114,36,0, ++ 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, ++ 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, ++ 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, ++ 95,99,97,99,104,101,41,5,114,109,0,0,0,114,36,0, ++ 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, ++ 108,115,90,7,108,111,97,100,101,114,115,114,167,0,0,0, ++ 114,5,0,0,0,41,1,114,128,0,0,0,114,6,0,0, ++ 0,114,186,0,0,0,151,4,0,0,115,16,0,0,0,0, ++ 4,6,1,19,1,36,1,9,2,15,1,9,1,12,1,122, ++ 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, ++ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, ++ 0,2,0,0,0,67,0,0,0,115,13,0,0,0,100,3, ++ 0,124,0,0,95,0,0,100,2,0,83,41,4,122,31,73, ++ 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, ++ 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,30, ++ 0,0,0,78,114,88,0,0,0,41,1,114,9,1,0,0, ++ 41,1,114,109,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,251,0,0,0,165,4,0,0,115, ++ 2,0,0,0,0,2,122,28,70,105,108,101,70,105,110,100, ++ 101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97, ++ 99,104,101,115,99,2,0,0,0,0,0,0,0,3,0,0, ++ 0,2,0,0,0,67,0,0,0,115,59,0,0,0,124,0, ++ 0,106,0,0,124,1,0,131,1,0,125,2,0,124,2,0, ++ 100,1,0,107,8,0,114,37,0,100,1,0,103,0,0,102, ++ 2,0,83,124,2,0,106,1,0,124,2,0,106,2,0,112, ++ 55,0,103,0,0,102,2,0,83,41,2,122,197,84,114,121, ++ 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, ++ 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, ++ 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, ++ 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, ++ 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, ++ 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, ++ 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, ++ 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, ++ 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, ++ 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, ++ 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, ++ 32,32,78,41,3,114,182,0,0,0,114,128,0,0,0,114, ++ 157,0,0,0,41,3,114,109,0,0,0,114,127,0,0,0, ++ 114,165,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,125,0,0,0,171,4,0,0,115,8,0, ++ 0,0,0,7,15,1,12,1,10,1,122,22,70,105,108,101, ++ 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, ++ 101,114,99,6,0,0,0,0,0,0,0,7,0,0,0,7, ++ 0,0,0,67,0,0,0,115,40,0,0,0,124,1,0,124, ++ 2,0,124,3,0,131,2,0,125,6,0,116,0,0,124,2, ++ 0,124,3,0,100,1,0,124,6,0,100,2,0,124,4,0, ++ 131,2,2,83,41,3,78,114,128,0,0,0,114,157,0,0, ++ 0,41,1,114,168,0,0,0,41,7,114,109,0,0,0,114, ++ 166,0,0,0,114,127,0,0,0,114,36,0,0,0,90,4, ++ 115,109,115,108,114,181,0,0,0,114,128,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,6,1, ++ 0,0,183,4,0,0,115,6,0,0,0,0,1,15,1,18, ++ 1,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, ++ 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, ++ 0,14,0,0,0,15,0,0,0,67,0,0,0,115,234,1, ++ 0,0,100,1,0,125,3,0,124,1,0,106,0,0,100,2, ++ 0,131,1,0,100,3,0,25,125,4,0,121,34,0,116,1, ++ 0,124,0,0,106,2,0,112,49,0,116,3,0,106,4,0, ++ 131,0,0,131,1,0,106,5,0,125,5,0,87,110,24,0, ++ 4,116,6,0,107,10,0,114,85,0,1,1,1,100,10,0, ++ 125,5,0,89,110,1,0,88,124,5,0,124,0,0,106,7, ++ 0,107,3,0,114,120,0,124,0,0,106,8,0,131,0,0, ++ 1,124,5,0,124,0,0,95,7,0,116,9,0,131,0,0, ++ 114,153,0,124,0,0,106,10,0,125,6,0,124,4,0,106, ++ 11,0,131,0,0,125,7,0,110,15,0,124,0,0,106,12, ++ 0,125,6,0,124,4,0,125,7,0,124,7,0,124,6,0, ++ 107,6,0,114,45,1,116,13,0,124,0,0,106,2,0,124, ++ 4,0,131,2,0,125,8,0,120,100,0,124,0,0,106,14, ++ 0,68,93,77,0,92,2,0,125,9,0,125,10,0,100,5, ++ 0,124,9,0,23,125,11,0,116,13,0,124,8,0,124,11, ++ 0,131,2,0,125,12,0,116,15,0,124,12,0,131,1,0, ++ 114,208,0,124,0,0,106,16,0,124,10,0,124,1,0,124, ++ 12,0,124,8,0,103,1,0,124,2,0,131,5,0,83,113, ++ 208,0,87,116,17,0,124,8,0,131,1,0,125,3,0,120, ++ 123,0,124,0,0,106,14,0,68,93,112,0,92,2,0,125, ++ 9,0,125,10,0,116,13,0,124,0,0,106,2,0,124,4, ++ 0,124,9,0,23,131,2,0,125,12,0,116,18,0,100,6, ++ 0,106,19,0,124,12,0,131,1,0,100,7,0,100,3,0, ++ 131,1,1,1,124,7,0,124,9,0,23,124,6,0,107,6, ++ 0,114,55,1,116,15,0,124,12,0,131,1,0,114,55,1, ++ 124,0,0,106,16,0,124,10,0,124,1,0,124,12,0,100, ++ 8,0,124,2,0,131,5,0,83,113,55,1,87,124,3,0, ++ 114,230,1,116,18,0,100,9,0,106,19,0,124,8,0,131, ++ 1,0,131,1,0,1,116,20,0,106,21,0,124,1,0,100, ++ 8,0,131,2,0,125,13,0,124,8,0,103,1,0,124,13, ++ 0,95,22,0,124,13,0,83,100,8,0,83,41,11,122,125, ++ 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, ++ 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, ++ 99,105,102,105,101,100,32,109,111,100,117,108,101,44,32,111, ++ 114,32,116,104,101,32,110,97,109,101,115,112,97,99,101,10, ++ 32,32,32,32,32,32,32,32,112,97,99,107,97,103,101,32, ++ 112,111,114,116,105,111,110,115,46,32,82,101,116,117,114,110, ++ 115,32,40,108,111,97,100,101,114,44,32,108,105,115,116,45, ++ 111,102,45,112,111,114,116,105,111,110,115,41,46,70,114,59, ++ 0,0,0,114,57,0,0,0,114,30,0,0,0,114,186,0, ++ 0,0,122,9,116,114,121,105,110,103,32,123,125,114,99,0, ++ 0,0,78,122,25,112,111,115,115,105,98,108,101,32,110,97, ++ 109,101,115,112,97,99,101,32,102,111,114,32,123,125,114,88, ++ 0,0,0,41,23,114,33,0,0,0,114,40,0,0,0,114, ++ 36,0,0,0,114,4,0,0,0,114,46,0,0,0,114,220, ++ 0,0,0,114,41,0,0,0,114,9,1,0,0,218,11,95, ++ 102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,114, ++ 12,1,0,0,114,89,0,0,0,114,11,1,0,0,114,29, ++ 0,0,0,114,8,1,0,0,114,45,0,0,0,114,6,1, ++ 0,0,114,47,0,0,0,114,106,0,0,0,114,48,0,0, ++ 0,114,122,0,0,0,114,161,0,0,0,114,157,0,0,0, ++ 41,14,114,109,0,0,0,114,127,0,0,0,114,181,0,0, ++ 0,90,12,105,115,95,110,97,109,101,115,112,97,99,101,90, ++ 11,116,97,105,108,95,109,111,100,117,108,101,114,134,0,0, ++ 0,90,5,99,97,99,104,101,90,12,99,97,99,104,101,95, ++ 109,111,100,117,108,101,90,9,98,97,115,101,95,112,97,116, ++ 104,114,226,0,0,0,114,166,0,0,0,90,13,105,110,105, ++ 116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,108, ++ 95,112,97,116,104,114,165,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,182,0,0,0,188,4, ++ 0,0,115,68,0,0,0,0,3,6,1,19,1,3,1,34, ++ 1,13,1,11,1,15,1,10,1,9,2,9,1,9,1,15, ++ 2,9,1,6,2,12,1,18,1,22,1,10,1,15,1,12, ++ 1,32,4,12,2,22,1,22,1,25,1,16,1,12,1,29, ++ 1,6,1,19,1,18,1,12,1,4,1,122,20,70,105,108, ++ 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, ++ 99,99,1,0,0,0,0,0,0,0,9,0,0,0,13,0, ++ 0,0,67,0,0,0,115,11,1,0,0,124,0,0,106,0, ++ 0,125,1,0,121,31,0,116,1,0,106,2,0,124,1,0, ++ 112,33,0,116,1,0,106,3,0,131,0,0,131,1,0,125, ++ 2,0,87,110,33,0,4,116,4,0,116,5,0,116,6,0, ++ 102,3,0,107,10,0,114,75,0,1,1,1,103,0,0,125, ++ 2,0,89,110,1,0,88,116,7,0,106,8,0,106,9,0, ++ 100,1,0,131,1,0,115,112,0,116,10,0,124,2,0,131, ++ 1,0,124,0,0,95,11,0,110,111,0,116,10,0,131,0, ++ 0,125,3,0,120,90,0,124,2,0,68,93,82,0,125,4, ++ 0,124,4,0,106,12,0,100,2,0,131,1,0,92,3,0, ++ 125,5,0,125,6,0,125,7,0,124,6,0,114,191,0,100, ++ 3,0,106,13,0,124,5,0,124,7,0,106,14,0,131,0, ++ 0,131,2,0,125,8,0,110,6,0,124,5,0,125,8,0, ++ 124,3,0,106,15,0,124,8,0,131,1,0,1,113,128,0, ++ 87,124,3,0,124,0,0,95,11,0,116,7,0,106,8,0, ++ 106,9,0,116,16,0,131,1,0,114,7,1,100,4,0,100, ++ 5,0,132,0,0,124,2,0,68,131,1,0,124,0,0,95, ++ 17,0,100,6,0,83,41,7,122,68,70,105,108,108,32,116, ++ 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, ++ 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, ++ 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, ++ 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,0, ++ 0,0,0,114,59,0,0,0,122,5,123,125,46,123,125,99, ++ 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, ++ 83,0,0,0,115,28,0,0,0,104,0,0,124,0,0,93, ++ 18,0,125,1,0,124,1,0,106,0,0,131,0,0,146,2, ++ 0,113,6,0,83,114,5,0,0,0,41,1,114,89,0,0, ++ 0,41,2,114,23,0,0,0,90,2,102,110,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,250,9,60,115,101, ++ 116,99,111,109,112,62,6,5,0,0,115,2,0,0,0,9, ++ 0,122,41,70,105,108,101,70,105,110,100,101,114,46,95,102, ++ 105,108,108,95,99,97,99,104,101,46,60,108,111,99,97,108, ++ 115,62,46,60,115,101,116,99,111,109,112,62,78,41,18,114, ++ 36,0,0,0,114,4,0,0,0,90,7,108,105,115,116,100, ++ 105,114,114,46,0,0,0,114,1,1,0,0,218,15,80,101, ++ 114,109,105,115,115,105,111,110,69,114,114,111,114,218,18,78, ++ 111,116,65,68,105,114,101,99,116,111,114,121,69,114,114,111, ++ 114,114,8,0,0,0,114,9,0,0,0,114,10,0,0,0, ++ 114,10,1,0,0,114,11,1,0,0,114,84,0,0,0,114, ++ 48,0,0,0,114,89,0,0,0,218,3,97,100,100,114,11, ++ 0,0,0,114,12,1,0,0,41,9,114,109,0,0,0,114, ++ 36,0,0,0,90,8,99,111,110,116,101,110,116,115,90,21, ++ 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, ++ 116,101,110,116,115,114,246,0,0,0,114,107,0,0,0,114, ++ 238,0,0,0,114,226,0,0,0,90,8,110,101,119,95,110, ++ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,14,1,0,0,233,4,0,0,115,34,0,0,0, ++ 0,2,9,1,3,1,31,1,22,3,11,3,18,1,18,7, ++ 9,1,13,1,24,1,6,1,27,2,6,1,17,1,9,1, ++ 18,1,122,22,70,105,108,101,70,105,110,100,101,114,46,95, ++ 102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0, ++ 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, ++ 25,0,0,0,135,0,0,135,1,0,102,2,0,100,1,0, ++ 100,2,0,134,0,0,125,2,0,124,2,0,83,41,3,97, ++ 20,1,0,0,65,32,99,108,97,115,115,32,109,101,116,104, ++ 111,100,32,119,104,105,99,104,32,114,101,116,117,114,110,115, ++ 32,97,32,99,108,111,115,117,114,101,32,116,111,32,117,115, ++ 101,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, ++ 111,107,10,32,32,32,32,32,32,32,32,119,104,105,99,104, ++ 32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32, ++ 105,110,115,116,97,110,99,101,32,117,115,105,110,103,32,116, ++ 104,101,32,115,112,101,99,105,102,105,101,100,32,108,111,97, ++ 100,101,114,115,32,97,110,100,32,116,104,101,32,112,97,116, ++ 104,10,32,32,32,32,32,32,32,32,99,97,108,108,101,100, ++ 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,46, ++ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, ++ 32,112,97,116,104,32,99,97,108,108,101,100,32,111,110,32, ++ 116,104,101,32,99,108,111,115,117,114,101,32,105,115,32,110, ++ 111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32, ++ 73,109,112,111,114,116,69,114,114,111,114,32,105,115,10,32, ++ 32,32,32,32,32,32,32,114,97,105,115,101,100,46,10,10, ++ 32,32,32,32,32,32,32,32,99,1,0,0,0,0,0,0, ++ 0,1,0,0,0,4,0,0,0,19,0,0,0,115,43,0, ++ 0,0,116,0,0,124,0,0,131,1,0,115,30,0,116,1, ++ 0,100,1,0,100,2,0,124,0,0,131,1,1,130,1,0, + 136,0,0,124,0,0,136,1,0,140,1,0,83,41,3,122, + 45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105, + 109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101, + 114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30, + 111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115, + 32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,36, -+ 0,0,0,41,2,114,47,0,0,0,114,154,0,0,0,41, -+ 1,114,36,0,0,0,41,2,114,12,1,0,0,114,93,1, ++ 0,0,0,41,2,114,47,0,0,0,114,108,0,0,0,41, ++ 1,114,36,0,0,0,41,2,114,171,0,0,0,114,13,1, + 0,0,114,5,0,0,0,114,6,0,0,0,218,24,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, -+ 70,105,110,100,101,114,54,8,0,0,115,6,0,0,0,0, -+ 2,12,1,21,1,122,54,70,105,108,101,70,105,110,100,101, ++ 70,105,110,100,101,114,18,5,0,0,115,6,0,0,0,0, ++ 2,12,1,18,1,122,54,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, + 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,114,5,0, -+ 0,0,41,3,114,12,1,0,0,114,93,1,0,0,114,100, -+ 1,0,0,114,5,0,0,0,41,2,114,12,1,0,0,114, -+ 93,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, -+ 104,111,111,107,44,8,0,0,115,4,0,0,0,0,10,21, ++ 0,0,41,3,114,171,0,0,0,114,13,1,0,0,114,19, ++ 1,0,0,114,5,0,0,0,41,2,114,171,0,0,0,114, ++ 13,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, ++ 104,111,111,107,8,5,0,0,115,4,0,0,0,0,10,21, + 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, + 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, + 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, + 83,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, + 40,123,33,114,125,41,41,2,114,48,0,0,0,114,36,0, -+ 0,0,41,1,114,72,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,102,0,0,0,62,8,0, ++ 0,0,41,1,114,109,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,245,0,0,0,26,5,0, + 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,114,101,112,114,95,95,41,15,114, -+ 58,0,0,0,114,57,0,0,0,114,59,0,0,0,114,60, -+ 0,0,0,114,73,0,0,0,114,75,1,0,0,114,173,0, -+ 0,0,114,15,1,0,0,114,166,0,0,0,114,86,1,0, -+ 0,114,14,1,0,0,114,94,1,0,0,114,19,1,0,0, -+ 114,101,1,0,0,114,102,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,87, -+ 1,0,0,178,7,0,0,115,20,0,0,0,12,7,6,2, ++ 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,115, ++ 0,0,0,114,186,0,0,0,114,251,0,0,0,114,131,0, ++ 0,0,114,183,0,0,0,114,125,0,0,0,114,6,1,0, ++ 0,114,182,0,0,0,114,14,1,0,0,114,184,0,0,0, ++ 114,20,1,0,0,114,245,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,7, ++ 1,0,0,142,4,0,0,115,20,0,0,0,12,7,6,2, + 12,14,12,4,6,2,12,12,12,5,15,45,12,31,18,18, -+ 114,87,1,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,46,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, -+ 100,5,0,132,0,0,90,5,0,100,6,0,83,41,7,218, -+ 18,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, -+ 101,120,116,122,36,67,111,110,116,101,120,116,32,109,97,110, -+ 97,103,101,114,32,102,111,114,32,116,104,101,32,105,109,112, -+ 111,114,116,32,108,111,99,107,46,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,14, - 0,0,0,116,0,0,106,1,0,131,0,0,1,100,1,0, -- 83,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, -- 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, -- 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, -- 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, -- 46,78,41,2,114,106,0,0,0,114,107,0,0,0,41,4, -- 114,71,0,0,0,90,8,101,120,99,95,116,121,112,101,90, -- 9,101,120,99,95,118,97,108,117,101,90,13,101,120,99,95, -- 116,114,97,99,101,98,97,99,107,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,81,0,0,0,76,8,0, -- 0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,114, -- 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, -- 120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,0, -- 0,0,114,58,0,0,0,114,59,0,0,0,114,75,0,0, -- 0,114,81,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,101,1,0,0,68, -- 8,0,0,115,6,0,0,0,12,2,6,2,12,4,114,101, -- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, -- 4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,0, -- 106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,0, -- 125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,107, -- 0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,1, -- 0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,0, -- 0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,0, -- 131,2,0,83,124,4,0,83,41,6,122,50,82,101,115,111, -- 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, -- 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, -- 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,116, -- 0,0,0,114,29,0,0,0,122,50,97,116,116,101,109,112, -- 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, -- 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, -- 101,118,101,108,32,112,97,99,107,97,103,101,114,84,0,0, -- 0,122,5,123,125,46,123,125,41,4,114,34,0,0,0,114, -- 31,0,0,0,114,133,0,0,0,114,47,0,0,0,41,5, -- 114,67,0,0,0,218,7,112,97,99,107,97,103,101,218,5, -- 108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,115, -- 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,13,95,114,101,115,111,108,118,101,95,110,97,109,101,81, -- 8,0,0,115,10,0,0,0,0,2,22,1,18,1,15,1, -- 10,1,114,104,1,0,0,99,3,0,0,0,0,0,0,0, -- 4,0,0,0,3,0,0,0,67,0,0,0,115,47,0,0, -- 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, -- 125,3,0,124,3,0,100,0,0,107,8,0,114,34,0,100, -- 0,0,83,116,1,0,124,1,0,124,3,0,131,2,0,83, -- 41,1,78,41,2,114,14,1,0,0,114,173,0,0,0,41, -- 4,114,77,1,0,0,114,67,0,0,0,114,35,0,0,0, -- 114,169,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, -- 95,108,101,103,97,99,121,90,8,0,0,115,8,0,0,0, -- 0,3,18,1,12,1,4,1,114,105,1,0,0,99,3,0, -- 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, -- 0,0,115,34,1,0,0,116,0,0,106,1,0,115,28,0, -- 116,2,0,106,3,0,100,1,0,116,4,0,131,2,0,1, -- 110,0,0,124,0,0,116,0,0,106,5,0,107,6,0,125, -- 3,0,120,240,0,116,0,0,106,1,0,68,93,225,0,125, -- 4,0,116,6,0,131,0,0,143,93,0,1,121,13,0,124, -- 4,0,106,7,0,125,5,0,87,110,54,0,4,116,8,0, -- 107,10,0,114,138,0,1,1,1,116,9,0,124,4,0,124, -- 0,0,124,1,0,131,3,0,125,6,0,124,6,0,100,2, -- 0,107,8,0,114,134,0,119,53,0,110,0,0,89,110,19, -- 0,88,124,5,0,124,0,0,124,1,0,124,2,0,131,3, -- 0,125,6,0,87,100,2,0,81,88,124,6,0,100,2,0, -- 107,9,0,114,53,0,124,3,0,12,114,15,1,124,0,0, -- 116,0,0,106,5,0,107,6,0,114,15,1,116,0,0,106, -- 5,0,124,0,0,25,125,7,0,121,13,0,124,7,0,106, -- 10,0,125,8,0,87,110,22,0,4,116,8,0,107,10,0, -- 114,247,0,1,1,1,124,6,0,83,89,113,19,1,88,124, -- 8,0,100,2,0,107,8,0,114,8,1,124,6,0,83,124, -- 8,0,83,113,22,1,124,6,0,83,113,53,0,113,53,0, -- 87,100,2,0,83,100,2,0,83,41,3,122,23,70,105,110, -- 100,32,97,32,109,111,100,117,108,101,39,115,32,108,111,97, -- 100,101,114,46,122,22,115,121,115,46,109,101,116,97,95,112, -- 97,116,104,32,105,115,32,101,109,112,116,121,78,41,11,114, -- 7,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114, -- 166,0,0,0,114,167,0,0,0,114,168,0,0,0,114,73, -- 0,0,0,114,101,1,0,0,114,13,1,0,0,114,209,0, -- 0,0,114,105,1,0,0,114,208,0,0,0,41,9,114,67, -- 0,0,0,114,35,0,0,0,114,12,1,0,0,90,9,105, -- 115,95,114,101,108,111,97,100,114,77,1,0,0,114,13,1, -- 0,0,114,177,0,0,0,114,179,0,0,0,114,208,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,10,95,102,105,110,100,95,115,112,101,99,99,8,0,0, -- 115,48,0,0,0,0,2,9,1,19,4,15,1,16,1,10, -- 1,3,1,13,1,13,1,18,1,12,1,11,2,24,1,12, -- 2,22,1,13,1,3,1,13,1,13,4,9,2,12,1,4, -- 2,7,2,11,2,114,107,1,0,0,99,3,0,0,0,0, -- 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, -- 194,0,0,0,116,0,0,124,0,0,116,1,0,131,2,0, -- 115,45,0,116,2,0,100,1,0,106,3,0,116,4,0,124, -- 0,0,131,1,0,131,1,0,131,1,0,130,1,0,110,0, -- 0,124,2,0,100,2,0,107,0,0,114,72,0,116,5,0, -- 100,3,0,131,1,0,130,1,0,110,0,0,124,1,0,114, -- 156,0,116,0,0,124,1,0,116,1,0,131,2,0,115,108, -- 0,116,2,0,100,4,0,131,1,0,130,1,0,113,156,0, -- 124,1,0,116,6,0,106,7,0,107,7,0,114,156,0,100, -- 5,0,125,3,0,116,8,0,124,3,0,106,3,0,124,1, -- 0,131,1,0,131,1,0,130,1,0,113,156,0,110,0,0, -- 124,0,0,12,114,190,0,124,2,0,100,2,0,107,2,0, -- 114,190,0,116,5,0,100,6,0,131,1,0,130,1,0,110, -- 0,0,100,7,0,83,41,8,122,28,86,101,114,105,102,121, -- 32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,34, -- 115,97,110,101,34,46,122,31,109,111,100,117,108,101,32,110, -- 97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,44, -- 32,110,111,116,32,123,125,114,84,0,0,0,122,18,108,101, -- 118,101,108,32,109,117,115,116,32,98,101,32,62,61,32,48, -- 122,31,95,95,112,97,99,107,97,103,101,95,95,32,110,111, -- 116,32,115,101,116,32,116,111,32,97,32,115,116,114,105,110, -- 103,122,61,80,97,114,101,110,116,32,109,111,100,117,108,101, -- 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, -- 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, -- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, -- 122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,110, -- 97,109,101,78,41,9,114,192,0,0,0,114,82,1,0,0, -- 218,9,84,121,112,101,69,114,114,111,114,114,47,0,0,0, -- 114,66,0,0,0,114,133,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, -- 114,41,4,114,67,0,0,0,114,102,1,0,0,114,103,1, -- 0,0,114,171,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,13,95,115,97,110,105,116,121,95, -- 99,104,101,99,107,139,8,0,0,115,24,0,0,0,0,2, -- 15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1, -- 6,2,27,1,19,1,114,110,1,0,0,122,16,78,111,32, -- 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, -- 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, -- 12,0,0,0,67,0,0,0,115,52,1,0,0,100,0,0, -- 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, -- 2,0,25,125,3,0,124,3,0,114,178,0,124,3,0,116, -- 1,0,106,2,0,107,7,0,114,62,0,116,3,0,124,1, -- 0,124,3,0,131,2,0,1,110,0,0,124,0,0,116,1, -- 0,106,2,0,107,6,0,114,88,0,116,1,0,106,2,0, -- 124,0,0,25,83,116,1,0,106,2,0,124,3,0,25,125, -- 4,0,121,13,0,124,4,0,106,4,0,125,2,0,87,113, -- 178,0,4,116,5,0,107,10,0,114,174,0,1,1,1,116, -- 6,0,100,3,0,23,106,7,0,124,0,0,124,3,0,131, -- 2,0,125,5,0,116,8,0,124,5,0,100,4,0,124,0, -- 0,131,1,1,130,1,0,89,113,178,0,88,110,0,0,116, -- 9,0,124,0,0,124,2,0,131,2,0,125,6,0,124,6, -- 0,100,0,0,107,8,0,114,235,0,116,8,0,116,6,0, -- 106,7,0,124,0,0,131,1,0,100,4,0,124,0,0,131, -- 1,1,130,1,0,110,18,0,116,10,0,124,6,0,131,1, -- 0,106,11,0,131,0,0,125,7,0,124,3,0,114,48,1, -- 116,1,0,106,2,0,124,3,0,25,125,4,0,116,12,0, -- 124,4,0,124,0,0,106,0,0,100,1,0,131,1,0,100, -- 5,0,25,124,7,0,131,3,0,1,110,0,0,124,7,0, -- 83,41,6,78,114,116,0,0,0,114,84,0,0,0,122,23, -- 59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32, -- 112,97,99,107,97,103,101,114,67,0,0,0,114,115,0,0, -- 0,41,13,114,32,0,0,0,114,7,0,0,0,114,73,0, -- 0,0,114,114,0,0,0,114,246,0,0,0,114,209,0,0, -- 0,218,8,95,69,82,82,95,77,83,71,114,47,0,0,0, -- 114,153,0,0,0,114,107,1,0,0,114,174,0,0,0,114, -- 6,1,0,0,114,61,0,0,0,41,8,114,67,0,0,0, -- 218,7,105,109,112,111,114,116,95,114,35,0,0,0,114,233, -- 0,0,0,90,13,112,97,114,101,110,116,95,109,111,100,117, -- 108,101,114,171,0,0,0,114,177,0,0,0,114,179,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,100, -- 95,117,110,108,111,99,107,101,100,159,8,0,0,115,42,0, -- 0,0,0,1,6,1,19,1,6,1,15,1,16,2,15,1, -- 11,1,13,1,3,1,13,1,13,1,22,1,26,1,15,1, -- 12,1,30,2,18,1,6,2,13,1,32,1,114,113,1,0, -- 0,99,2,0,0,0,0,0,0,0,2,0,0,0,10,0, -- 0,0,67,0,0,0,115,36,0,0,0,116,0,0,124,0, -- 0,131,1,0,143,18,0,1,116,1,0,124,0,0,124,1, -- 0,131,2,0,83,87,100,1,0,81,88,100,1,0,83,41, -- 2,122,54,70,105,110,100,32,97,110,100,32,108,111,97,100, -- 32,116,104,101,32,109,111,100,117,108,101,44,32,97,110,100, -- 32,114,101,108,101,97,115,101,32,116,104,101,32,105,109,112, -- 111,114,116,32,108,111,99,107,46,78,41,2,114,103,0,0, -- 0,114,113,1,0,0,41,2,114,67,0,0,0,114,112,1, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, -- 100,186,8,0,0,115,4,0,0,0,0,2,13,1,114,114, -- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, -- 4,0,0,0,67,0,0,0,115,172,0,0,0,116,0,0, -- 124,0,0,124,1,0,124,2,0,131,3,0,1,124,2,0, -- 100,1,0,107,4,0,114,49,0,116,1,0,124,0,0,124, -- 1,0,124,2,0,131,3,0,125,0,0,110,0,0,116,2, -- 0,106,3,0,131,0,0,1,124,0,0,116,4,0,106,5, -- 0,107,7,0,114,87,0,116,6,0,124,0,0,116,7,0, -- 131,2,0,83,116,4,0,106,5,0,124,0,0,25,125,3, -- 0,124,3,0,100,2,0,107,8,0,114,158,0,116,2,0, -- 106,8,0,131,0,0,1,100,3,0,106,9,0,124,0,0, -- 131,1,0,125,4,0,116,10,0,124,4,0,100,4,0,124, -- 0,0,131,1,1,130,1,0,110,0,0,116,11,0,124,0, -- 0,131,1,0,1,124,3,0,83,41,5,97,50,1,0,0, -- 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, -- 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, -- 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, -- 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, -- 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, -- 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, -- 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, -- 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, -- 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, -- 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, -- 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, -- 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, -- 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, -- 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, -- 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, -- 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, -- 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, -- 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, -- 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, -- 32,32,114,84,0,0,0,78,122,40,105,109,112,111,114,116, -- 32,111,102,32,123,125,32,104,97,108,116,101,100,59,32,78, -- 111,110,101,32,105,110,32,115,121,115,46,109,111,100,117,108, -- 101,115,114,67,0,0,0,41,12,114,110,1,0,0,114,104, -- 1,0,0,114,106,0,0,0,114,3,1,0,0,114,7,0, -- 0,0,114,73,0,0,0,114,114,1,0,0,218,11,95,103, -- 99,100,95,105,109,112,111,114,116,114,107,0,0,0,114,47, -- 0,0,0,114,153,0,0,0,114,112,0,0,0,41,5,114, -- 67,0,0,0,114,102,1,0,0,114,103,1,0,0,114,179, -- 0,0,0,114,151,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,115,1,0,0,192,8,0,0, -- 115,26,0,0,0,0,9,16,1,12,1,21,1,10,1,15, -- 1,13,1,13,1,12,1,10,2,15,1,21,1,10,1,114, -- 115,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, -- 0,17,0,0,0,67,0,0,0,115,1,1,0,0,116,0, -- 0,124,0,0,100,1,0,131,2,0,114,253,0,100,2,0, -- 124,1,0,107,6,0,114,89,0,116,1,0,124,1,0,131, -- 1,0,125,1,0,124,1,0,106,2,0,100,2,0,131,1, -- 0,1,116,0,0,124,0,0,100,3,0,131,2,0,114,89, -- 0,124,1,0,106,3,0,124,0,0,106,4,0,131,1,0, -- 1,113,89,0,110,0,0,120,161,0,124,1,0,68,93,150, -- 0,125,3,0,116,0,0,124,0,0,124,3,0,131,2,0, -- 115,96,0,100,4,0,106,5,0,124,0,0,106,6,0,124, -- 3,0,131,2,0,125,4,0,121,17,0,116,7,0,124,2, -- 0,124,4,0,131,2,0,1,87,113,246,0,4,116,8,0, -- 107,10,0,114,242,0,1,125,5,0,1,122,53,0,116,9, -- 0,124,5,0,131,1,0,106,10,0,116,11,0,131,1,0, -- 114,221,0,124,5,0,106,12,0,124,4,0,107,2,0,114, -- 221,0,119,96,0,113,221,0,110,0,0,130,0,0,87,89, -- 100,5,0,100,5,0,125,5,0,126,5,0,88,113,246,0, -- 88,113,96,0,113,96,0,87,110,0,0,124,0,0,83,41, -- 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, -- 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, -- 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, -- 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, -- 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, -- 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, -- 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, -- 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, -- 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, -- 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, -- 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, -- 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, -- 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, -- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, -- 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, -- 32,114,246,0,0,0,250,1,42,218,7,95,95,97,108,108, -- 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, -- 0,114,245,0,0,0,218,6,114,101,109,111,118,101,114,197, -- 0,0,0,114,117,1,0,0,114,47,0,0,0,114,57,0, -- 0,0,114,114,0,0,0,114,153,0,0,0,114,82,1,0, -- 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, -- 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,179, -- 0,0,0,218,8,102,114,111,109,108,105,115,116,114,112,1, -- 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, -- 109,101,114,40,1,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, -- 102,114,111,109,108,105,115,116,216,8,0,0,115,34,0,0, -- 0,0,10,15,1,12,1,12,1,13,1,15,1,22,1,13, -- 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,9, -- 1,32,1,114,121,1,0,0,99,1,0,0,0,0,0,0, -- 0,2,0,0,0,2,0,0,0,67,0,0,0,115,78,0, -- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, -- 0,124,1,0,100,2,0,107,8,0,114,74,0,124,0,0, -- 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, -- 114,74,0,124,1,0,106,1,0,100,5,0,131,1,0,100, -- 6,0,25,125,1,0,113,74,0,110,0,0,124,1,0,83, -- 41,7,122,167,67,97,108,99,117,108,97,116,101,32,119,104, -- 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, -- 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, -- 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, -- 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, -- 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, -- 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, -- 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, -- 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, -- 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, -- 110,111,119,110,46,10,10,32,32,32,32,114,250,0,0,0, -- 78,114,57,0,0,0,114,246,0,0,0,114,116,0,0,0, -- 114,84,0,0,0,41,2,114,93,0,0,0,114,32,0,0, -- 0,41,2,218,7,103,108,111,98,97,108,115,114,102,1,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, -- 101,95,95,248,8,0,0,115,12,0,0,0,0,7,15,1, -- 12,1,10,1,12,1,25,1,114,123,1,0,0,99,0,0, -- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, -- 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, -- 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, -- 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, -- 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, -- 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, -- 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, -- 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, -- 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, -- 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, -- 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, -- 32,41,7,114,56,1,0,0,114,106,0,0,0,218,18,101, -- 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, -- 115,114,8,1,0,0,114,134,0,0,0,114,7,1,0,0, -- 114,232,0,0,0,41,3,90,10,101,120,116,101,110,115,105, -- 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, -- 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,240,0,0,0,7,9,0,0,115,8,0, -- 0,0,0,5,18,1,12,1,12,1,114,240,0,0,0,99, -- 5,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, -- 67,0,0,0,115,227,0,0,0,124,4,0,100,1,0,107, -- 2,0,114,27,0,116,0,0,124,0,0,131,1,0,125,5, -- 0,110,54,0,124,1,0,100,2,0,107,9,0,114,45,0, -- 124,1,0,110,3,0,105,0,0,125,6,0,116,1,0,124, -- 6,0,131,1,0,125,7,0,116,0,0,124,0,0,124,7, -- 0,124,4,0,131,3,0,125,5,0,124,3,0,115,207,0, -- 124,4,0,100,1,0,107,2,0,114,122,0,116,0,0,124, -- 0,0,106,2,0,100,3,0,131,1,0,100,1,0,25,131, -- 1,0,83,124,0,0,115,132,0,124,5,0,83,116,3,0, -- 124,0,0,131,1,0,116,3,0,124,0,0,106,2,0,100, -- 3,0,131,1,0,100,1,0,25,131,1,0,24,125,8,0, -- 116,4,0,106,5,0,124,5,0,106,6,0,100,2,0,116, -- 3,0,124,5,0,106,6,0,131,1,0,124,8,0,24,133, -- 2,0,25,25,83,110,16,0,116,7,0,124,5,0,124,3, -- 0,116,0,0,131,3,0,83,100,2,0,83,41,4,97,214, -- 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, -- 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, -- 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, -- 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, -- 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, -- 116,32,105,115,32,111,99,99,117,114,105,110,103,32,102,114, -- 111,109,10,32,32,32,32,116,111,32,104,97,110,100,108,101, -- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, -- 115,46,32,84,104,101,32,39,108,111,99,97,108,115,39,32, -- 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111, -- 114,101,100,46,32,84,104,101,10,32,32,32,32,39,102,114, -- 111,109,108,105,115,116,39,32,97,114,103,117,109,101,110,116, -- 32,115,112,101,99,105,102,105,101,115,32,119,104,97,116,32, -- 115,104,111,117,108,100,32,101,120,105,115,116,32,97,115,32, -- 97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,104, -- 101,32,109,111,100,117,108,101,10,32,32,32,32,98,101,105, -- 110,103,32,105,109,112,111,114,116,101,100,32,40,101,46,103, -- 46,32,96,96,102,114,111,109,32,109,111,100,117,108,101,32, -- 105,109,112,111,114,116,32,60,102,114,111,109,108,105,115,116, -- 62,96,96,41,46,32,32,84,104,101,32,39,108,101,118,101, -- 108,39,10,32,32,32,32,97,114,103,117,109,101,110,116,32, -- 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,112, -- 97,99,107,97,103,101,32,108,111,99,97,116,105,111,110,32, -- 116,111,32,105,109,112,111,114,116,32,102,114,111,109,32,105, -- 110,32,97,32,114,101,108,97,116,105,118,101,10,32,32,32, -- 32,105,109,112,111,114,116,32,40,101,46,103,46,32,96,96, -- 102,114,111,109,32,46,46,112,107,103,32,105,109,112,111,114, -- 116,32,109,111,100,96,96,32,119,111,117,108,100,32,104,97, -- 118,101,32,97,32,39,108,101,118,101,108,39,32,111,102,32, -- 50,41,46,10,10,32,32,32,32,114,84,0,0,0,78,114, -- 116,0,0,0,41,8,114,115,1,0,0,114,123,1,0,0, -- 114,121,0,0,0,114,31,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,114,57,0,0,0,114,121,1,0,0,41,9, -- 114,67,0,0,0,114,122,1,0,0,218,6,108,111,99,97, -- 108,115,114,120,1,0,0,114,103,1,0,0,114,179,0,0, -- 0,90,8,103,108,111,98,97,108,115,95,114,102,1,0,0, -- 90,7,99,117,116,95,111,102,102,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,10,95,95,105,109,112,111, -- 114,116,95,95,18,9,0,0,115,26,0,0,0,0,11,12, -- 1,15,2,24,1,12,1,18,1,6,3,12,1,23,1,6, -- 1,4,4,35,3,40,2,114,126,1,0,0,99,1,0,0, -- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, -- 0,115,68,0,0,0,116,0,0,106,1,0,124,0,0,131, -- 1,0,125,1,0,124,1,0,100,0,0,107,8,0,114,46, -- 0,116,2,0,100,1,0,124,0,0,23,131,1,0,130,1, -- 0,110,0,0,116,3,0,124,1,0,131,1,0,125,2,0, -- 124,2,0,106,4,0,131,0,0,83,41,2,78,122,25,110, -- 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, -- 101,32,110,97,109,101,100,32,41,5,114,10,1,0,0,114, -- 13,1,0,0,114,153,0,0,0,114,174,0,0,0,114,6, -- 1,0,0,41,3,114,67,0,0,0,114,177,0,0,0,114, -- 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, -- 111,109,95,110,97,109,101,53,9,0,0,115,10,0,0,0, -- 0,1,15,1,12,1,19,1,12,1,114,127,1,0,0,99, -- 2,0,0,0,0,0,0,0,19,0,0,0,12,0,0,0, -- 67,0,0,0,115,232,2,0,0,124,1,0,97,0,0,124, -- 0,0,97,1,0,116,1,0,106,2,0,106,3,0,114,33, -- 0,116,4,0,97,5,0,110,6,0,116,6,0,97,5,0, -- 116,7,0,116,1,0,131,1,0,125,2,0,120,138,0,116, -- 1,0,106,8,0,106,9,0,131,0,0,68,93,121,0,92, -- 2,0,125,3,0,125,4,0,116,10,0,124,4,0,124,2, -- 0,131,2,0,114,67,0,124,3,0,116,1,0,106,11,0, -- 107,6,0,114,118,0,116,12,0,125,5,0,110,27,0,116, -- 0,0,106,13,0,124,3,0,131,1,0,114,67,0,116,14, -- 0,125,5,0,110,3,0,113,67,0,116,15,0,124,4,0, -- 124,5,0,131,2,0,125,6,0,116,16,0,124,6,0,131, -- 1,0,125,7,0,124,7,0,106,17,0,124,4,0,131,1, -- 0,1,113,67,0,113,67,0,87,116,1,0,106,8,0,116, -- 18,0,25,125,8,0,120,73,0,100,26,0,68,93,65,0, -- 125,9,0,124,9,0,116,1,0,106,8,0,107,7,0,114, -- 248,0,116,19,0,124,9,0,131,1,0,125,10,0,110,13, -- 0,116,1,0,106,8,0,124,9,0,25,125,10,0,116,20, -- 0,124,8,0,124,9,0,124,10,0,131,3,0,1,113,212, -- 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, -- 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, -- 125,11,0,120,146,0,124,11,0,68,93,126,0,92,2,0, -- 125,12,0,125,13,0,116,21,0,100,9,0,100,10,0,132, -- 0,0,124,13,0,68,131,1,0,131,1,0,115,108,1,116, -- 22,0,130,1,0,124,13,0,100,11,0,25,125,14,0,124, -- 12,0,116,1,0,106,8,0,107,6,0,114,150,1,116,1, -- 0,106,8,0,124,12,0,25,125,15,0,80,113,65,1,121, -- 17,0,116,19,0,124,12,0,131,1,0,125,15,0,80,87, -- 113,65,1,4,116,23,0,107,10,0,114,190,1,1,1,1, -- 119,65,1,89,113,65,1,88,113,65,1,87,116,23,0,100, -- 12,0,131,1,0,130,1,0,116,20,0,124,8,0,100,13, -- 0,124,15,0,131,3,0,1,116,20,0,124,8,0,100,14, -- 0,124,14,0,131,3,0,1,116,20,0,124,8,0,100,15, -- 0,100,16,0,106,24,0,124,13,0,131,1,0,131,3,0, -- 1,121,16,0,116,19,0,100,17,0,131,1,0,125,16,0, -- 87,110,24,0,4,116,23,0,107,10,0,114,50,2,1,1, -- 1,100,18,0,125,16,0,89,110,1,0,88,116,20,0,124, -- 8,0,100,17,0,124,16,0,131,3,0,1,116,19,0,100, -- 19,0,131,1,0,125,17,0,116,20,0,124,8,0,100,19, -- 0,124,17,0,131,3,0,1,124,12,0,100,7,0,107,2, -- 0,114,138,2,116,19,0,100,20,0,131,1,0,125,18,0, -- 116,20,0,124,8,0,100,21,0,124,18,0,131,3,0,1, -- 110,0,0,116,20,0,124,8,0,100,22,0,116,25,0,131, -- 0,0,131,3,0,1,116,26,0,106,27,0,116,0,0,106, -- 28,0,131,0,0,131,1,0,1,124,12,0,100,7,0,107, -- 2,0,114,228,2,116,29,0,106,30,0,100,23,0,131,1, -- 0,1,100,24,0,116,26,0,107,6,0,114,228,2,100,25, -- 0,116,31,0,95,32,0,113,228,2,110,0,0,100,18,0, -- 83,41,27,122,250,83,101,116,117,112,32,105,109,112,111,114, -- 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, -- 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, -- 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, -- 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, -- 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, -- 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, -- 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, -- 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, -- 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, -- 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, -- 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, -- 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, -- 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, -- 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, -- 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114, -- 49,0,0,0,114,166,0,0,0,218,8,98,117,105,108,116, -- 105,110,115,114,191,0,0,0,90,5,112,111,115,105,120,250, -- 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, -- 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, -- 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, -- 100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31, -- 0,0,0,41,2,114,22,0,0,0,114,130,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77, -- 0,0,0,105,9,0,0,115,2,0,0,0,6,0,122,25, -- 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, -- 60,103,101,110,101,120,112,114,62,114,84,0,0,0,122,30, -- 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, -- 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, -- 0,0,0,114,25,0,0,0,114,21,0,0,0,114,30,0, -- 0,0,114,85,0,0,0,78,114,111,0,0,0,90,6,119, -- 105,110,114,101,103,114,23,1,0,0,114,6,0,0,0,122, -- 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, -- 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, -- 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, -- 104,97,108,41,33,114,106,0,0,0,114,7,0,0,0,114, -- 117,0,0,0,114,118,0,0,0,114,120,0,0,0,114,232, -- 0,0,0,114,119,0,0,0,114,66,0,0,0,114,73,0, -- 0,0,218,5,105,116,101,109,115,114,192,0,0,0,114,157, -- 0,0,0,114,10,1,0,0,114,162,0,0,0,114,19,1, -- 0,0,114,247,0,0,0,114,174,0,0,0,114,254,0,0, -- 0,114,57,0,0,0,114,127,1,0,0,114,61,0,0,0, -- 218,3,97,108,108,114,100,0,0,0,114,153,0,0,0,114, -- 26,0,0,0,114,11,0,0,0,114,59,1,0,0,114,197, -- 0,0,0,114,124,1,0,0,114,134,0,0,0,114,223,0, -- 0,0,114,22,1,0,0,114,26,1,0,0,41,19,218,10, -- 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, -- 95,109,111,100,117,108,101,90,11,109,111,100,117,108,101,95, -- 116,121,112,101,114,67,0,0,0,114,179,0,0,0,114,169, -- 0,0,0,114,177,0,0,0,114,178,0,0,0,90,11,115, -- 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, -- 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, -- 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, -- 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, -- 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, -- 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, -- 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, -- 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, -- 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,6,95,115,101,116,117,112,61,9,0,0,115,108, -- 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, -- 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, -- 1,12,1,20,3,13,1,13,1,15,1,15,2,13,1,20, -- 3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3, -- 1,12,1,5,1,13,1,12,2,12,1,16,1,16,1,25, -- 3,3,1,16,1,13,2,11,1,16,3,12,1,16,3,12, -- 1,12,1,19,3,19,1,19,1,12,1,13,1,12,1,114, -- 136,1,0,0,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,3,0,0,0,67,0,0,0,115,136,0,0,0,116,0, -- 0,124,0,0,124,1,0,131,2,0,1,116,1,0,131,0, -- 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, -- 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, -- 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, -- 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, -- 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, -- 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, -- 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, -- 0,1,100,2,0,83,41,3,122,50,73,110,115,116,97,108, -- 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, -- 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, -- 110,32,111,102,32,105,109,112,111,114,116,46,114,130,1,0, -- 0,78,41,15,114,136,1,0,0,114,240,0,0,0,114,7, -- 0,0,0,114,78,1,0,0,114,197,0,0,0,114,86,1, -- 0,0,114,100,1,0,0,114,106,1,0,0,114,223,0,0, -- 0,114,10,1,0,0,114,19,1,0,0,114,3,0,0,0, -- 114,57,0,0,0,114,22,1,0,0,114,73,1,0,0,41, -- 3,114,134,1,0,0,114,135,1,0,0,90,17,115,117,112, -- 112,111,114,116,101,100,95,108,111,97,100,101,114,115,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95, -- 105,110,115,116,97,108,108,148,9,0,0,115,16,0,0,0, -- 0,2,13,1,9,1,28,1,16,1,16,1,15,1,19,1, -- 114,137,1,0,0,41,3,122,3,119,105,110,114,1,0,0, -- 0,114,2,0,0,0,41,92,114,59,0,0,0,114,10,0, -- 0,0,114,11,0,0,0,114,17,0,0,0,114,19,0,0, -- 0,114,28,0,0,0,114,38,0,0,0,114,39,0,0,0, -- 114,43,0,0,0,114,44,0,0,0,114,46,0,0,0,114, -- 55,0,0,0,114,65,0,0,0,114,68,0,0,0,114,66, -- 0,0,0,218,8,95,95,99,111,100,101,95,95,114,193,0, -- 0,0,114,69,0,0,0,114,109,0,0,0,114,92,0,0, -- 0,114,99,0,0,0,114,82,0,0,0,114,83,0,0,0, -- 114,102,0,0,0,114,103,0,0,0,114,105,0,0,0,114, -- 112,0,0,0,114,114,0,0,0,114,15,0,0,0,114,185, -- 0,0,0,114,14,0,0,0,114,18,0,0,0,90,17,95, -- 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, -- 114,125,0,0,0,114,134,0,0,0,114,119,0,0,0,114, -- 120,0,0,0,114,132,0,0,0,114,135,0,0,0,114,142, -- 0,0,0,114,144,0,0,0,114,152,0,0,0,114,156,0, -- 0,0,114,161,0,0,0,114,164,0,0,0,114,172,0,0, -- 0,114,180,0,0,0,114,190,0,0,0,114,195,0,0,0, -- 114,198,0,0,0,114,203,0,0,0,114,211,0,0,0,114, -- 212,0,0,0,114,216,0,0,0,114,173,0,0,0,218,6, -- 111,98,106,101,99,116,114,241,0,0,0,114,239,0,0,0, -- 114,247,0,0,0,114,174,0,0,0,114,9,1,0,0,114, -- 10,1,0,0,114,19,1,0,0,114,22,1,0,0,114,32, -- 1,0,0,114,33,1,0,0,114,48,1,0,0,114,8,1, -- 0,0,114,7,1,0,0,114,59,1,0,0,114,56,1,0, -- 0,114,60,1,0,0,114,251,0,0,0,114,73,1,0,0, -- 114,86,1,0,0,114,101,1,0,0,114,104,1,0,0,114, -- 105,1,0,0,114,107,1,0,0,114,110,1,0,0,114,119, -- 1,0,0,114,111,1,0,0,114,113,1,0,0,114,114,1, -- 0,0,114,115,1,0,0,114,121,1,0,0,114,123,1,0, -- 0,114,240,0,0,0,114,126,1,0,0,114,127,1,0,0, -- 114,136,1,0,0,114,137,1,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, -- 60,109,111,100,117,108,101,62,8,0,0,0,115,170,0,0, -- 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, -- 10,12,9,12,5,12,7,15,22,12,8,12,4,15,4,19, -- 20,6,2,6,3,22,4,19,68,19,21,19,19,12,19,12, -- 20,12,114,22,1,18,2,6,2,9,2,9,1,9,2,15, -- 27,12,23,12,19,12,12,18,8,12,18,12,11,12,11,12, -- 17,12,16,21,55,21,12,18,10,12,14,12,36,19,27,19, -- 106,24,22,9,3,12,1,15,63,18,45,19,230,15,25,19, -- 70,19,71,19,63,19,24,22,110,19,41,25,43,25,16,6, -- 3,19,57,19,57,19,38,19,129,19,146,19,13,12,9,12, -- 9,15,40,12,17,6,1,10,2,12,27,12,6,18,24,12, -- 32,12,15,12,11,24,35,12,8,12,87, -+ 83,41,2,122,24,65,99,113,117,105,114,101,32,116,104,101, -+ 32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,2, -+ 114,107,0,0,0,114,4,1,0,0,41,1,114,72,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,76,0,0,0,72,8,0,0,115,2,0,0,0,0,2, -+ 122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,110, -+ 116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,4, -+ 0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,67, -+ 0,0,0,115,14,0,0,0,116,0,0,106,1,0,131,0, -+ 0,1,100,1,0,83,41,2,122,60,82,101,108,101,97,115, -+ 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, -+ 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, -+ 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, -+ 116,105,111,110,115,46,78,41,2,114,107,0,0,0,114,108, -+ 0,0,0,41,4,114,72,0,0,0,90,8,101,120,99,95, -+ 116,121,112,101,90,9,101,120,99,95,118,97,108,117,101,90, -+ 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,82,0, -+ 0,0,76,8,0,0,115,2,0,0,0,0,2,122,27,95, -+ 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, -+ 116,46,95,95,101,120,105,116,95,95,78,41,6,114,58,0, -+ 0,0,114,57,0,0,0,114,59,0,0,0,114,60,0,0, -+ 0,114,76,0,0,0,114,82,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 102,1,0,0,68,8,0,0,115,6,0,0,0,12,2,6, -+ 2,12,4,114,102,1,0,0,99,3,0,0,0,0,0,0, -+ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,91,0, -+ 0,0,124,1,0,106,0,0,100,1,0,124,2,0,100,2, -+ 0,24,131,2,0,125,3,0,116,1,0,124,3,0,131,1, -+ 0,124,2,0,107,0,0,114,55,0,116,2,0,100,3,0, -+ 131,1,0,130,1,0,110,0,0,124,3,0,100,4,0,25, -+ 125,4,0,124,0,0,114,87,0,100,5,0,106,3,0,124, -+ 4,0,124,0,0,131,2,0,83,124,4,0,83,41,6,122, -+ 50,82,101,115,111,108,118,101,32,97,32,114,101,108,97,116, -+ 105,118,101,32,109,111,100,117,108,101,32,110,97,109,101,32, -+ 116,111,32,97,110,32,97,98,115,111,108,117,116,101,32,111, -+ 110,101,46,114,117,0,0,0,114,30,0,0,0,122,50,97, -+ 116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118, -+ 101,32,105,109,112,111,114,116,32,98,101,121,111,110,100,32, -+ 116,111,112,45,108,101,118,101,108,32,112,97,99,107,97,103, -+ 101,114,85,0,0,0,122,5,123,125,46,123,125,41,4,114, -+ 35,0,0,0,114,32,0,0,0,114,134,0,0,0,114,48, -+ 0,0,0,41,5,114,68,0,0,0,218,7,112,97,99,107, -+ 97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,115, -+ 90,4,98,97,115,101,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,13,95,114,101,115,111,108,118,101,95, -+ 110,97,109,101,81,8,0,0,115,10,0,0,0,0,2,22, -+ 1,18,1,15,1,10,1,114,105,1,0,0,99,3,0,0, -+ 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, -+ 0,115,47,0,0,0,124,0,0,106,0,0,124,1,0,124, -+ 2,0,131,2,0,125,3,0,124,3,0,100,0,0,107,8, -+ 0,114,34,0,100,0,0,83,116,1,0,124,1,0,124,3, -+ 0,131,2,0,83,41,1,78,41,2,114,15,1,0,0,114, -+ 174,0,0,0,41,4,114,78,1,0,0,114,68,0,0,0, -+ 114,36,0,0,0,114,170,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, -+ 95,115,112,101,99,95,108,101,103,97,99,121,90,8,0,0, -+ 115,8,0,0,0,0,3,18,1,12,1,4,1,114,106,1, -+ 0,0,99,3,0,0,0,0,0,0,0,9,0,0,0,26, -+ 0,0,0,67,0,0,0,115,34,1,0,0,116,0,0,106, -+ 1,0,115,28,0,116,2,0,106,3,0,100,1,0,116,4, -+ 0,131,2,0,1,110,0,0,124,0,0,116,0,0,106,5, -+ 0,107,6,0,125,3,0,120,240,0,116,0,0,106,1,0, -+ 68,93,225,0,125,4,0,116,6,0,131,0,0,143,93,0, -+ 1,121,13,0,124,4,0,106,7,0,125,5,0,87,110,54, -+ 0,4,116,8,0,107,10,0,114,138,0,1,1,1,116,9, -+ 0,124,4,0,124,0,0,124,1,0,131,3,0,125,6,0, -+ 124,6,0,100,2,0,107,8,0,114,134,0,119,53,0,110, -+ 0,0,89,110,19,0,88,124,5,0,124,0,0,124,1,0, -+ 124,2,0,131,3,0,125,6,0,87,100,2,0,81,88,124, -+ 6,0,100,2,0,107,9,0,114,53,0,124,3,0,12,114, -+ 15,1,124,0,0,116,0,0,106,5,0,107,6,0,114,15, -+ 1,116,0,0,106,5,0,124,0,0,25,125,7,0,121,13, -+ 0,124,7,0,106,10,0,125,8,0,87,110,22,0,4,116, -+ 8,0,107,10,0,114,247,0,1,1,1,124,6,0,83,89, -+ 113,19,1,88,124,8,0,100,2,0,107,8,0,114,8,1, -+ 124,6,0,83,124,8,0,83,113,22,1,124,6,0,83,113, -+ 53,0,113,53,0,87,100,2,0,83,100,2,0,83,41,3, -+ 122,23,70,105,110,100,32,97,32,109,111,100,117,108,101,39, -+ 115,32,108,111,97,100,101,114,46,122,22,115,121,115,46,109, -+ 101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116, -+ 121,78,41,11,114,8,0,0,0,218,9,109,101,116,97,95, -+ 112,97,116,104,114,167,0,0,0,114,168,0,0,0,114,169, -+ 0,0,0,114,74,0,0,0,114,102,1,0,0,114,14,1, -+ 0,0,114,210,0,0,0,114,106,1,0,0,114,209,0,0, -+ 0,41,9,114,68,0,0,0,114,36,0,0,0,114,13,1, -+ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,78,1, -+ 0,0,114,14,1,0,0,114,178,0,0,0,114,180,0,0, -+ 0,114,209,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,10,95,102,105,110,100,95,115,112,101, -+ 99,99,8,0,0,115,48,0,0,0,0,2,9,1,19,4, -+ 15,1,16,1,10,1,3,1,13,1,13,1,18,1,12,1, -+ 11,2,24,1,12,2,22,1,13,1,3,1,13,1,13,4, -+ 9,2,12,1,4,2,7,2,11,2,114,108,1,0,0,99, -+ 3,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, -+ 67,0,0,0,115,194,0,0,0,116,0,0,124,0,0,116, -+ 1,0,131,2,0,115,45,0,116,2,0,100,1,0,106,3, -+ 0,116,4,0,124,0,0,131,1,0,131,1,0,131,1,0, -+ 130,1,0,110,0,0,124,2,0,100,2,0,107,0,0,114, -+ 72,0,116,5,0,100,3,0,131,1,0,130,1,0,110,0, -+ 0,124,1,0,114,156,0,116,0,0,124,1,0,116,1,0, -+ 131,2,0,115,108,0,116,2,0,100,4,0,131,1,0,130, -+ 1,0,113,156,0,124,1,0,116,6,0,106,7,0,107,7, -+ 0,114,156,0,100,5,0,125,3,0,116,8,0,124,3,0, -+ 106,3,0,124,1,0,131,1,0,131,1,0,130,1,0,113, -+ 156,0,110,0,0,124,0,0,12,114,190,0,124,2,0,100, -+ 2,0,107,2,0,114,190,0,116,5,0,100,6,0,131,1, -+ 0,130,1,0,110,0,0,100,7,0,83,41,8,122,28,86, -+ 101,114,105,102,121,32,97,114,103,117,109,101,110,116,115,32, -+ 97,114,101,32,34,115,97,110,101,34,46,122,31,109,111,100, -+ 117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101, -+ 32,115,116,114,44,32,110,111,116,32,123,125,114,85,0,0, -+ 0,122,18,108,101,118,101,108,32,109,117,115,116,32,98,101, -+ 32,62,61,32,48,122,31,95,95,112,97,99,107,97,103,101, -+ 95,95,32,110,111,116,32,115,101,116,32,116,111,32,97,32, -+ 115,116,114,105,110,103,122,61,80,97,114,101,110,116,32,109, -+ 111,100,117,108,101,32,123,33,114,125,32,110,111,116,32,108, -+ 111,97,100,101,100,44,32,99,97,110,110,111,116,32,112,101, -+ 114,102,111,114,109,32,114,101,108,97,116,105,118,101,32,105, -+ 109,112,111,114,116,122,17,69,109,112,116,121,32,109,111,100, -+ 117,108,101,32,110,97,109,101,78,41,9,114,193,0,0,0, -+ 114,83,1,0,0,218,9,84,121,112,101,69,114,114,111,114, -+ 114,48,0,0,0,114,67,0,0,0,114,134,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,218,11,83,121,115,116,101, -+ 109,69,114,114,111,114,41,4,114,68,0,0,0,114,103,1, -+ 0,0,114,104,1,0,0,114,172,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,13,95,115,97, -+ 110,105,116,121,95,99,104,101,99,107,139,8,0,0,115,24, -+ 0,0,0,0,2,15,1,30,1,12,1,15,1,6,1,15, -+ 1,15,1,15,1,6,2,27,1,19,1,114,111,1,0,0, -+ 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, -+ 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, -+ 0,8,0,0,0,12,0,0,0,67,0,0,0,115,52,1, -+ 0,0,100,0,0,125,2,0,124,0,0,106,0,0,100,1, -+ 0,131,1,0,100,2,0,25,125,3,0,124,3,0,114,178, -+ 0,124,3,0,116,1,0,106,2,0,107,7,0,114,62,0, -+ 116,3,0,124,1,0,124,3,0,131,2,0,1,110,0,0, -+ 124,0,0,116,1,0,106,2,0,107,6,0,114,88,0,116, -+ 1,0,106,2,0,124,0,0,25,83,116,1,0,106,2,0, -+ 124,3,0,25,125,4,0,121,13,0,124,4,0,106,4,0, -+ 125,2,0,87,113,178,0,4,116,5,0,107,10,0,114,174, -+ 0,1,1,1,116,6,0,100,3,0,23,106,7,0,124,0, -+ 0,124,3,0,131,2,0,125,5,0,116,8,0,124,5,0, -+ 100,4,0,124,0,0,131,1,1,130,1,0,89,113,178,0, -+ 88,110,0,0,116,9,0,124,0,0,124,2,0,131,2,0, -+ 125,6,0,124,6,0,100,0,0,107,8,0,114,235,0,116, -+ 8,0,116,6,0,106,7,0,124,0,0,131,1,0,100,4, -+ 0,124,0,0,131,1,1,130,1,0,110,18,0,116,10,0, -+ 124,6,0,131,1,0,106,11,0,131,0,0,125,7,0,124, -+ 3,0,114,48,1,116,1,0,106,2,0,124,3,0,25,125, -+ 4,0,116,12,0,124,4,0,124,0,0,106,0,0,100,1, -+ 0,131,1,0,100,5,0,25,124,7,0,131,3,0,1,110, -+ 0,0,124,7,0,83,41,6,78,114,117,0,0,0,114,85, -+ 0,0,0,122,23,59,32,123,33,114,125,32,105,115,32,110, -+ 111,116,32,97,32,112,97,99,107,97,103,101,114,68,0,0, -+ 0,114,116,0,0,0,41,13,114,33,0,0,0,114,8,0, -+ 0,0,114,74,0,0,0,114,115,0,0,0,114,247,0,0, -+ 0,114,210,0,0,0,218,8,95,69,82,82,95,77,83,71, -+ 114,48,0,0,0,114,154,0,0,0,114,108,1,0,0,114, -+ 175,0,0,0,114,7,1,0,0,114,62,0,0,0,41,8, -+ 114,68,0,0,0,218,7,105,109,112,111,114,116,95,114,36, -+ 0,0,0,114,234,0,0,0,90,13,112,97,114,101,110,116, -+ 95,109,111,100,117,108,101,114,172,0,0,0,114,178,0,0, -+ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,23,95,102,105,110,100,95,97,110,100, -+ 95,108,111,97,100,95,117,110,108,111,99,107,101,100,159,8, -+ 0,0,115,42,0,0,0,0,1,6,1,19,1,6,1,15, -+ 1,16,2,15,1,11,1,13,1,3,1,13,1,13,1,22, -+ 1,26,1,15,1,12,1,30,2,18,1,6,2,13,1,32, -+ 1,114,114,1,0,0,99,2,0,0,0,0,0,0,0,2, -+ 0,0,0,10,0,0,0,67,0,0,0,115,36,0,0,0, -+ 116,0,0,124,0,0,131,1,0,143,18,0,1,116,1,0, -+ 124,0,0,124,1,0,131,2,0,83,87,100,1,0,81,88, -+ 100,1,0,83,41,2,122,54,70,105,110,100,32,97,110,100, -+ 32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101, -+ 44,32,97,110,100,32,114,101,108,101,97,115,101,32,116,104, -+ 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, -+ 2,114,104,0,0,0,114,114,1,0,0,41,2,114,68,0, -+ 0,0,114,113,1,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,218,14,95,102,105,110,100,95,97,110, -+ 100,95,108,111,97,100,186,8,0,0,115,4,0,0,0,0, -+ 2,13,1,114,115,1,0,0,99,3,0,0,0,0,0,0, -+ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,172,0, -+ 0,0,116,0,0,124,0,0,124,1,0,124,2,0,131,3, -+ 0,1,124,2,0,100,1,0,107,4,0,114,49,0,116,1, -+ 0,124,0,0,124,1,0,124,2,0,131,3,0,125,0,0, -+ 110,0,0,116,2,0,106,3,0,131,0,0,1,124,0,0, -+ 116,4,0,106,5,0,107,7,0,114,87,0,116,6,0,124, -+ 0,0,116,7,0,131,2,0,83,116,4,0,106,5,0,124, -+ 0,0,25,125,3,0,124,3,0,100,2,0,107,8,0,114, -+ 158,0,116,2,0,106,8,0,131,0,0,1,100,3,0,106, -+ 9,0,124,0,0,131,1,0,125,4,0,116,10,0,124,4, -+ 0,100,4,0,124,0,0,131,1,1,130,1,0,110,0,0, -+ 116,11,0,124,0,0,131,1,0,1,124,3,0,83,41,5, -+ 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, -+ 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, -+ 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, -+ 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, -+ 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, -+ 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, -+ 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, -+ 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, -+ 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, -+ 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, -+ 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, -+ 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, -+ 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, -+ 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, -+ 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, -+ 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, -+ 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, -+ 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, -+ 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, -+ 46,10,10,32,32,32,32,114,85,0,0,0,78,122,40,105, -+ 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, -+ 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, -+ 109,111,100,117,108,101,115,114,68,0,0,0,41,12,114,111, -+ 1,0,0,114,105,1,0,0,114,107,0,0,0,114,4,1, -+ 0,0,114,8,0,0,0,114,74,0,0,0,114,115,1,0, -+ 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,108, -+ 0,0,0,114,48,0,0,0,114,154,0,0,0,114,113,0, -+ 0,0,41,5,114,68,0,0,0,114,103,1,0,0,114,104, -+ 1,0,0,114,180,0,0,0,114,152,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,116,1,0, -+ 0,192,8,0,0,115,26,0,0,0,0,9,16,1,12,1, -+ 21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, -+ 21,1,10,1,114,116,1,0,0,99,3,0,0,0,0,0, -+ 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,1, -+ 1,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, -+ 253,0,100,2,0,124,1,0,107,6,0,114,89,0,116,1, -+ 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, -+ 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, -+ 131,2,0,114,89,0,124,1,0,106,3,0,124,0,0,106, -+ 4,0,131,1,0,1,113,89,0,110,0,0,120,161,0,124, -+ 1,0,68,93,150,0,125,3,0,116,0,0,124,0,0,124, -+ 3,0,131,2,0,115,96,0,100,4,0,106,5,0,124,0, -+ 0,106,6,0,124,3,0,131,2,0,125,4,0,121,17,0, -+ 116,7,0,124,2,0,124,4,0,131,2,0,1,87,113,246, -+ 0,4,116,8,0,107,10,0,114,242,0,1,125,5,0,1, -+ 122,53,0,116,9,0,124,5,0,131,1,0,106,10,0,116, -+ 11,0,131,1,0,114,221,0,124,5,0,106,12,0,124,4, -+ 0,107,2,0,114,221,0,119,96,0,113,221,0,110,0,0, -+ 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, -+ 0,88,113,246,0,88,113,96,0,113,96,0,87,110,0,0, -+ 124,0,0,83,41,6,122,238,70,105,103,117,114,101,32,111, -+ 117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116, -+ 95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110, -+ 46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114, -+ 116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32, -+ 97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104, -+ 32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32, -+ 111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32, -+ 32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114, -+ 101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117, -+ 112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110, -+ 32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105, -+ 109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105, -+ 109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97, -+ 116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46, -+ 10,10,32,32,32,32,114,247,0,0,0,250,1,42,218,7, -+ 95,95,97,108,108,95,95,122,5,123,125,46,123,125,78,41, -+ 13,114,61,0,0,0,114,246,0,0,0,218,6,114,101,109, -+ 111,118,101,114,198,0,0,0,114,118,1,0,0,114,48,0, -+ 0,0,114,58,0,0,0,114,115,0,0,0,114,154,0,0, -+ 0,114,83,1,0,0,114,10,0,0,0,218,15,95,69,82, -+ 82,95,77,83,71,95,80,82,69,70,73,88,114,68,0,0, -+ 0,41,6,114,180,0,0,0,218,8,102,114,111,109,108,105, -+ 115,116,114,113,1,0,0,114,17,0,0,0,90,9,102,114, -+ 111,109,95,110,97,109,101,114,41,1,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,16,95,104,97, -+ 110,100,108,101,95,102,114,111,109,108,105,115,116,216,8,0, -+ 0,115,34,0,0,0,0,10,15,1,12,1,12,1,13,1, -+ 15,1,22,1,13,1,15,1,21,1,3,1,17,1,18,4, -+ 21,1,15,1,9,1,32,1,114,122,1,0,0,99,1,0, -+ 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, -+ 0,0,115,78,0,0,0,124,0,0,106,0,0,100,1,0, -+ 131,1,0,125,1,0,124,1,0,100,2,0,107,8,0,114, -+ 74,0,124,0,0,100,3,0,25,125,1,0,100,4,0,124, -+ 0,0,107,7,0,114,74,0,124,1,0,106,1,0,100,5, -+ 0,131,1,0,100,6,0,25,125,1,0,113,74,0,110,0, -+ 0,124,1,0,83,41,7,122,167,67,97,108,99,117,108,97, -+ 116,101,32,119,104,97,116,32,95,95,112,97,99,107,97,103, -+ 101,95,95,32,115,104,111,117,108,100,32,98,101,46,10,10, -+ 32,32,32,32,95,95,112,97,99,107,97,103,101,95,95,32, -+ 105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101, -+ 100,32,116,111,32,98,101,32,100,101,102,105,110,101,100,32, -+ 111,114,32,99,111,117,108,100,32,98,101,32,115,101,116,32, -+ 116,111,32,78,111,110,101,10,32,32,32,32,116,111,32,114, -+ 101,112,114,101,115,101,110,116,32,116,104,97,116,32,105,116, -+ 115,32,112,114,111,112,101,114,32,118,97,108,117,101,32,105, -+ 115,32,117,110,107,110,111,119,110,46,10,10,32,32,32,32, -+ 114,251,0,0,0,78,114,58,0,0,0,114,247,0,0,0, -+ 114,117,0,0,0,114,85,0,0,0,41,2,114,94,0,0, -+ 0,114,33,0,0,0,41,2,218,7,103,108,111,98,97,108, -+ 115,114,103,1,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,17,95,99,97,108,99,95,95,95,112, -+ 97,99,107,97,103,101,95,95,248,8,0,0,115,12,0,0, -+ 0,0,7,15,1,12,1,10,1,12,1,25,1,114,124,1, -+ 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, -+ 0,0,0,67,0,0,0,115,55,0,0,0,116,0,0,116, -+ 1,0,106,2,0,131,0,0,102,2,0,125,0,0,116,3, -+ 0,116,4,0,102,2,0,125,1,0,116,5,0,116,6,0, -+ 102,2,0,125,2,0,124,0,0,124,1,0,124,2,0,103, -+ 3,0,83,41,1,122,95,82,101,116,117,114,110,115,32,97, -+ 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, -+ 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, -+ 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, -+ 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, -+ 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, -+ 46,10,32,32,32,32,41,7,114,57,1,0,0,114,107,0, -+ 0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,117, -+ 102,102,105,120,101,115,114,9,1,0,0,114,135,0,0,0, -+ 114,8,1,0,0,114,233,0,0,0,41,3,90,10,101,120, -+ 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, -+ 90,8,98,121,116,101,99,111,100,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,241,0,0,0,7,9, -+ 0,0,115,8,0,0,0,0,5,18,1,12,1,12,1,114, -+ 241,0,0,0,99,5,0,0,0,0,0,0,0,9,0,0, -+ 0,5,0,0,0,67,0,0,0,115,227,0,0,0,124,4, -+ 0,100,1,0,107,2,0,114,27,0,116,0,0,124,0,0, -+ 131,1,0,125,5,0,110,54,0,124,1,0,100,2,0,107, -+ 9,0,114,45,0,124,1,0,110,3,0,105,0,0,125,6, -+ 0,116,1,0,124,6,0,131,1,0,125,7,0,116,0,0, -+ 124,0,0,124,7,0,124,4,0,131,3,0,125,5,0,124, -+ 3,0,115,207,0,124,4,0,100,1,0,107,2,0,114,122, -+ 0,116,0,0,124,0,0,106,2,0,100,3,0,131,1,0, -+ 100,1,0,25,131,1,0,83,124,0,0,115,132,0,124,5, -+ 0,83,116,3,0,124,0,0,131,1,0,116,3,0,124,0, -+ 0,106,2,0,100,3,0,131,1,0,100,1,0,25,131,1, -+ 0,24,125,8,0,116,4,0,106,5,0,124,5,0,106,6, -+ 0,100,2,0,116,3,0,124,5,0,106,6,0,131,1,0, -+ 124,8,0,24,133,2,0,25,25,83,110,16,0,116,7,0, -+ 124,5,0,124,3,0,116,0,0,131,3,0,83,100,2,0, -+ 83,41,4,97,214,1,0,0,73,109,112,111,114,116,32,97, -+ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, -+ 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, -+ 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, -+ 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, -+ 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, -+ 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, -+ 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, -+ 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, -+ 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, -+ 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, -+ 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, -+ 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, -+ 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, -+ 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, -+ 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, -+ 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, -+ 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, -+ 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, -+ 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, -+ 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, -+ 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, -+ 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, -+ 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, -+ 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, -+ 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, -+ 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, -+ 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, -+ 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, -+ 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,85, -+ 0,0,0,78,114,117,0,0,0,41,8,114,116,1,0,0, -+ 114,124,1,0,0,114,122,0,0,0,114,32,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,114,58,0,0,0,114,122, -+ 1,0,0,41,9,114,68,0,0,0,114,123,1,0,0,218, -+ 6,108,111,99,97,108,115,114,121,1,0,0,114,104,1,0, -+ 0,114,180,0,0,0,90,8,103,108,111,98,97,108,115,95, -+ 114,103,1,0,0,90,7,99,117,116,95,111,102,102,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, -+ 95,105,109,112,111,114,116,95,95,18,9,0,0,115,26,0, -+ 0,0,0,11,12,1,15,2,24,1,12,1,18,1,6,3, -+ 12,1,23,1,6,1,4,4,35,3,40,2,114,127,1,0, -+ 0,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, -+ 0,0,67,0,0,0,115,68,0,0,0,116,0,0,106,1, -+ 0,124,0,0,131,1,0,125,1,0,124,1,0,100,0,0, -+ 107,8,0,114,46,0,116,2,0,100,1,0,124,0,0,23, -+ 131,1,0,130,1,0,110,0,0,116,3,0,124,1,0,131, -+ 1,0,125,2,0,124,2,0,106,4,0,131,0,0,83,41, -+ 2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32, -+ 109,111,100,117,108,101,32,110,97,109,101,100,32,41,5,114, -+ 11,1,0,0,114,14,1,0,0,114,154,0,0,0,114,175, -+ 0,0,0,114,7,1,0,0,41,3,114,68,0,0,0,114, -+ 178,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, -+ 105,110,95,102,114,111,109,95,110,97,109,101,53,9,0,0, -+ 115,10,0,0,0,0,1,15,1,12,1,19,1,12,1,114, -+ 128,1,0,0,99,2,0,0,0,0,0,0,0,19,0,0, -+ 0,12,0,0,0,67,0,0,0,115,232,2,0,0,124,1, -+ 0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0, -+ 106,3,0,114,33,0,116,4,0,97,5,0,110,6,0,116, -+ 6,0,97,5,0,116,7,0,116,1,0,131,1,0,125,2, -+ 0,120,138,0,116,1,0,106,8,0,106,9,0,131,0,0, -+ 68,93,121,0,92,2,0,125,3,0,125,4,0,116,10,0, -+ 124,4,0,124,2,0,131,2,0,114,67,0,124,3,0,116, -+ 1,0,106,11,0,107,6,0,114,118,0,116,12,0,125,5, -+ 0,110,27,0,116,0,0,106,13,0,124,3,0,131,1,0, -+ 114,67,0,116,14,0,125,5,0,110,3,0,113,67,0,116, -+ 15,0,124,4,0,124,5,0,131,2,0,125,6,0,116,16, -+ 0,124,6,0,131,1,0,125,7,0,124,7,0,106,17,0, -+ 124,4,0,131,1,0,1,113,67,0,113,67,0,87,116,1, -+ 0,106,8,0,116,18,0,25,125,8,0,120,73,0,100,26, -+ 0,68,93,65,0,125,9,0,124,9,0,116,1,0,106,8, -+ 0,107,7,0,114,248,0,116,19,0,124,9,0,131,1,0, -+ 125,10,0,110,13,0,116,1,0,106,8,0,124,9,0,25, -+ 125,10,0,116,20,0,124,8,0,124,9,0,124,10,0,131, -+ 3,0,1,113,212,0,87,100,5,0,100,6,0,103,1,0, -+ 102,2,0,100,7,0,100,8,0,100,6,0,103,2,0,102, -+ 2,0,102,2,0,125,11,0,120,146,0,124,11,0,68,93, -+ 126,0,92,2,0,125,12,0,125,13,0,116,21,0,100,9, -+ 0,100,10,0,132,0,0,124,13,0,68,131,1,0,131,1, -+ 0,115,108,1,116,22,0,130,1,0,124,13,0,100,11,0, -+ 25,125,14,0,124,12,0,116,1,0,106,8,0,107,6,0, -+ 114,150,1,116,1,0,106,8,0,124,12,0,25,125,15,0, -+ 80,113,65,1,121,17,0,116,19,0,124,12,0,131,1,0, -+ 125,15,0,80,87,113,65,1,4,116,23,0,107,10,0,114, -+ 190,1,1,1,1,119,65,1,89,113,65,1,88,113,65,1, -+ 87,116,23,0,100,12,0,131,1,0,130,1,0,116,20,0, -+ 124,8,0,100,13,0,124,15,0,131,3,0,1,116,20,0, -+ 124,8,0,100,14,0,124,14,0,131,3,0,1,116,20,0, -+ 124,8,0,100,15,0,100,16,0,106,24,0,124,13,0,131, -+ 1,0,131,3,0,1,121,16,0,116,19,0,100,17,0,131, -+ 1,0,125,16,0,87,110,24,0,4,116,23,0,107,10,0, -+ 114,50,2,1,1,1,100,18,0,125,16,0,89,110,1,0, -+ 88,116,20,0,124,8,0,100,17,0,124,16,0,131,3,0, -+ 1,116,19,0,100,19,0,131,1,0,125,17,0,116,20,0, -+ 124,8,0,100,19,0,124,17,0,131,3,0,1,124,12,0, -+ 100,7,0,107,2,0,114,138,2,116,19,0,100,20,0,131, -+ 1,0,125,18,0,116,20,0,124,8,0,100,21,0,124,18, -+ 0,131,3,0,1,110,0,0,116,20,0,124,8,0,100,22, -+ 0,116,25,0,131,0,0,131,3,0,1,116,26,0,106,27, -+ 0,116,0,0,106,28,0,131,0,0,131,1,0,1,124,12, -+ 0,100,7,0,107,2,0,114,228,2,116,29,0,106,30,0, -+ 100,23,0,131,1,0,1,100,24,0,116,26,0,107,6,0, -+ 114,228,2,100,25,0,116,31,0,95,32,0,113,228,2,110, -+ 0,0,100,18,0,83,41,27,122,250,83,101,116,117,112,32, -+ 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, -+ 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, -+ 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, -+ 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, -+ 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, -+ 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, -+ 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, -+ 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, -+ 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, -+ 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, -+ 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, -+ 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, -+ 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, -+ 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, -+ 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, -+ 32,32,32,32,114,50,0,0,0,114,167,0,0,0,218,8, -+ 98,117,105,108,116,105,110,115,114,192,0,0,0,90,5,112, -+ 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, -+ 0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1, -+ 0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0, -+ 86,1,113,3,0,100,1,0,83,41,2,114,30,0,0,0, -+ 78,41,1,114,32,0,0,0,41,2,114,23,0,0,0,114, -+ 131,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,78,0,0,0,105,9,0,0,115,2,0,0, -+ 0,6,0,122,25,95,115,101,116,117,112,46,60,108,111,99, -+ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,85, -+ 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, -+ 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, -+ 32,110,116,114,4,0,0,0,114,26,0,0,0,114,22,0, -+ 0,0,114,31,0,0,0,114,86,0,0,0,78,114,112,0, -+ 0,0,90,6,119,105,110,114,101,103,114,24,1,0,0,114, -+ 7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,112, -+ 121,100,84,41,4,122,3,95,105,111,122,9,95,119,97,114, -+ 110,105,110,103,115,122,8,98,117,105,108,116,105,110,115,122, -+ 7,109,97,114,115,104,97,108,41,33,114,107,0,0,0,114, -+ 8,0,0,0,114,118,0,0,0,114,119,0,0,0,114,121, -+ 0,0,0,114,233,0,0,0,114,120,0,0,0,114,67,0, -+ 0,0,114,74,0,0,0,218,5,105,116,101,109,115,114,193, -+ 0,0,0,114,158,0,0,0,114,11,1,0,0,114,163,0, -+ 0,0,114,20,1,0,0,114,248,0,0,0,114,175,0,0, -+ 0,114,255,0,0,0,114,58,0,0,0,114,128,1,0,0, -+ 114,62,0,0,0,218,3,97,108,108,114,101,0,0,0,114, -+ 154,0,0,0,114,27,0,0,0,114,12,0,0,0,114,60, -+ 1,0,0,114,198,0,0,0,114,125,1,0,0,114,135,0, -+ 0,0,114,224,0,0,0,114,23,1,0,0,114,27,1,0, -+ 0,41,19,218,10,115,121,115,95,109,111,100,117,108,101,218, -+ 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, -+ 100,117,108,101,95,116,121,112,101,114,68,0,0,0,114,180, -+ 0,0,0,114,170,0,0,0,114,178,0,0,0,114,179,0, -+ 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90, -+ 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98, -+ 117,105,108,116,105,110,95,109,111,100,117,108,101,90,10,111, -+ 115,95,100,101,116,97,105,108,115,90,10,98,117,105,108,116, -+ 105,110,95,111,115,114,22,0,0,0,114,26,0,0,0,90, -+ 9,111,115,95,109,111,100,117,108,101,90,13,116,104,114,101, -+ 97,100,95,109,111,100,117,108,101,90,14,119,101,97,107,114, -+ 101,102,95,109,111,100,117,108,101,90,13,119,105,110,114,101, -+ 103,95,109,111,100,117,108,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,61, -+ 9,0,0,115,108,0,0,0,0,9,6,1,6,2,12,1, -+ 9,2,6,3,12,1,28,1,15,1,15,1,9,1,15,1, -+ 9,2,3,1,15,1,12,1,20,3,13,1,13,1,15,1, -+ 15,2,13,1,20,3,33,1,19,2,31,1,10,1,15,1, -+ 13,1,4,2,3,1,12,1,5,1,13,1,12,2,12,1, -+ 16,1,16,1,25,3,3,1,16,1,13,2,11,1,16,3, -+ 12,1,16,3,12,1,12,1,19,3,19,1,19,1,12,1, -+ 13,1,12,1,114,137,1,0,0,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,136, -+ 0,0,0,116,0,0,124,0,0,124,1,0,131,2,0,1, -+ 116,1,0,131,0,0,125,2,0,116,2,0,106,3,0,106, -+ 4,0,116,5,0,106,6,0,124,2,0,140,0,0,103,1, -+ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,9, -+ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,10, -+ 0,131,1,0,1,116,11,0,106,12,0,100,1,0,107,2, -+ 0,114,116,0,116,2,0,106,7,0,106,8,0,116,13,0, -+ 131,1,0,1,110,0,0,116,2,0,106,7,0,106,8,0, -+ 116,14,0,131,1,0,1,100,2,0,83,41,3,122,50,73, -+ 110,115,116,97,108,108,32,105,109,112,111,114,116,108,105,98, -+ 32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110, -+ 116,97,116,105,111,110,32,111,102,32,105,109,112,111,114,116, -+ 46,114,131,1,0,0,78,41,15,114,137,1,0,0,114,241, -+ 0,0,0,114,8,0,0,0,114,79,1,0,0,114,198,0, -+ 0,0,114,87,1,0,0,114,101,1,0,0,114,107,1,0, -+ 0,114,224,0,0,0,114,11,1,0,0,114,20,1,0,0, -+ 114,4,0,0,0,114,58,0,0,0,114,23,1,0,0,114, -+ 74,1,0,0,41,3,114,135,1,0,0,114,136,1,0,0, -+ 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, -+ 101,114,115,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,8,95,105,110,115,116,97,108,108,148,9,0,0, -+ 115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16, -+ 1,15,1,19,1,114,138,1,0,0,41,4,122,3,119,105, -+ 110,114,1,0,0,0,114,2,0,0,0,114,3,0,0,0, -+ 41,92,114,60,0,0,0,114,11,0,0,0,114,12,0,0, -+ 0,114,18,0,0,0,114,20,0,0,0,114,29,0,0,0, -+ 114,39,0,0,0,114,40,0,0,0,114,44,0,0,0,114, -+ 45,0,0,0,114,47,0,0,0,114,56,0,0,0,114,66, -+ 0,0,0,114,69,0,0,0,114,67,0,0,0,218,8,95, -+ 95,99,111,100,101,95,95,114,194,0,0,0,114,70,0,0, -+ 0,114,110,0,0,0,114,93,0,0,0,114,100,0,0,0, -+ 114,83,0,0,0,114,84,0,0,0,114,103,0,0,0,114, -+ 104,0,0,0,114,106,0,0,0,114,113,0,0,0,114,115, -+ 0,0,0,114,16,0,0,0,114,186,0,0,0,114,15,0, -+ 0,0,114,19,0,0,0,90,17,95,82,65,87,95,77,65, -+ 71,73,67,95,78,85,77,66,69,82,114,126,0,0,0,114, -+ 135,0,0,0,114,120,0,0,0,114,121,0,0,0,114,133, -+ 0,0,0,114,136,0,0,0,114,143,0,0,0,114,145,0, -+ 0,0,114,153,0,0,0,114,157,0,0,0,114,162,0,0, -+ 0,114,165,0,0,0,114,173,0,0,0,114,181,0,0,0, -+ 114,191,0,0,0,114,196,0,0,0,114,199,0,0,0,114, -+ 204,0,0,0,114,212,0,0,0,114,213,0,0,0,114,217, -+ 0,0,0,114,174,0,0,0,218,6,111,98,106,101,99,116, -+ 114,242,0,0,0,114,240,0,0,0,114,248,0,0,0,114, -+ 175,0,0,0,114,10,1,0,0,114,11,1,0,0,114,20, -+ 1,0,0,114,23,1,0,0,114,33,1,0,0,114,34,1, -+ 0,0,114,49,1,0,0,114,9,1,0,0,114,8,1,0, -+ 0,114,60,1,0,0,114,57,1,0,0,114,61,1,0,0, -+ 114,252,0,0,0,114,74,1,0,0,114,87,1,0,0,114, -+ 102,1,0,0,114,105,1,0,0,114,106,1,0,0,114,108, -+ 1,0,0,114,111,1,0,0,114,120,1,0,0,114,112,1, -+ 0,0,114,114,1,0,0,114,115,1,0,0,114,116,1,0, -+ 0,114,122,1,0,0,114,124,1,0,0,114,241,0,0,0, -+ 114,127,1,0,0,114,128,1,0,0,114,137,1,0,0,114, -+ 138,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, -+ 101,62,8,0,0,0,115,170,0,0,0,6,17,6,3,12, -+ 12,12,5,12,5,12,6,12,12,12,10,12,9,12,5,12, -+ 7,15,22,12,8,12,4,15,4,19,20,6,2,6,3,22, -+ 4,19,68,19,21,19,19,12,19,12,20,12,114,22,1,18, -+ 2,6,2,9,2,9,1,9,2,15,27,12,23,12,19,12, -+ 12,18,8,12,18,12,11,12,11,12,17,12,16,21,55,21, -+ 12,18,10,12,14,12,36,19,27,19,106,24,22,9,3,12, -+ 1,15,63,18,45,19,230,15,25,19,70,19,71,19,63,19, -+ 24,22,110,19,41,25,43,25,16,6,3,19,57,19,57,19, -+ 38,19,129,19,146,19,13,12,9,12,9,15,40,12,17,6, -+ 1,10,2,12,27,12,6,18,24,12,32,12,15,12,11,24, -+ 35,12,8,12,87, ++ 114,7,1,0,0,99,4,0,0,0,0,0,0,0,6,0, ++ 0,0,11,0,0,0,67,0,0,0,115,195,0,0,0,124, ++ 0,0,106,0,0,100,1,0,131,1,0,125,4,0,124,0, ++ 0,106,0,0,100,2,0,131,1,0,125,5,0,124,4,0, ++ 115,99,0,124,5,0,114,54,0,124,5,0,106,1,0,125, ++ 4,0,110,45,0,124,2,0,124,3,0,107,2,0,114,84, ++ 0,116,2,0,124,1,0,124,2,0,131,2,0,125,4,0, ++ 110,15,0,116,3,0,124,1,0,124,2,0,131,2,0,125, ++ 4,0,124,5,0,115,126,0,116,4,0,124,1,0,124,2, ++ 0,100,3,0,124,4,0,131,2,1,125,5,0,121,44,0, ++ 124,5,0,124,0,0,100,2,0,60,124,4,0,124,0,0, ++ 100,1,0,60,124,2,0,124,0,0,100,4,0,60,124,3, ++ 0,124,0,0,100,5,0,60,87,110,18,0,4,116,5,0, ++ 107,10,0,114,190,0,1,1,1,89,110,1,0,88,100,0, ++ 0,83,41,6,78,218,10,95,95,108,111,97,100,101,114,95, ++ 95,218,8,95,95,115,112,101,99,95,95,114,128,0,0,0, ++ 90,8,95,95,102,105,108,101,95,95,90,10,95,95,99,97, ++ 99,104,101,100,95,95,41,6,218,3,103,101,116,114,128,0, ++ 0,0,114,224,0,0,0,114,219,0,0,0,114,168,0,0, ++ 0,218,9,69,120,99,101,112,116,105,111,110,41,6,90,2, ++ 110,115,114,107,0,0,0,90,8,112,97,116,104,110,97,109, ++ 101,90,9,99,112,97,116,104,110,97,109,101,114,128,0,0, ++ 0,114,165,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,14,95,102,105,120,95,117,112,95,109, ++ 111,100,117,108,101,32,5,0,0,115,34,0,0,0,0,2, ++ 15,1,15,1,6,1,6,1,12,1,12,1,18,2,15,1, ++ 6,1,21,1,3,1,10,1,10,1,10,1,14,1,13,2, ++ 114,25,1,0,0,99,0,0,0,0,0,0,0,0,3,0, ++ 0,0,3,0,0,0,67,0,0,0,115,55,0,0,0,116, ++ 0,0,116,1,0,106,2,0,131,0,0,102,2,0,125,0, ++ 0,116,3,0,116,4,0,102,2,0,125,1,0,116,5,0, ++ 116,6,0,102,2,0,125,2,0,124,0,0,124,1,0,124, ++ 2,0,103,3,0,83,41,1,122,95,82,101,116,117,114,110, ++ 115,32,97,32,108,105,115,116,32,111,102,32,102,105,108,101, ++ 45,98,97,115,101,100,32,109,111,100,117,108,101,32,108,111, ++ 97,100,101,114,115,46,10,10,32,32,32,32,69,97,99,104, ++ 32,105,116,101,109,32,105,115,32,97,32,116,117,112,108,101, ++ 32,40,108,111,97,100,101,114,44,32,115,117,102,102,105,120, ++ 101,115,41,46,10,32,32,32,32,41,7,114,225,0,0,0, ++ 114,146,0,0,0,218,18,101,120,116,101,110,115,105,111,110, ++ 95,115,117,102,102,105,120,101,115,114,219,0,0,0,114,85, ++ 0,0,0,114,224,0,0,0,114,75,0,0,0,41,3,90, ++ 10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,117, ++ 114,99,101,90,8,98,121,116,101,99,111,100,101,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,162,0,0, ++ 0,55,5,0,0,115,8,0,0,0,0,5,18,1,12,1, ++ 12,1,114,162,0,0,0,99,1,0,0,0,0,0,0,0, ++ 12,0,0,0,12,0,0,0,67,0,0,0,115,70,2,0, ++ 0,124,0,0,97,0,0,116,0,0,106,1,0,97,1,0, ++ 116,0,0,106,2,0,97,2,0,116,1,0,106,3,0,116, ++ 4,0,25,125,1,0,120,76,0,100,26,0,68,93,68,0, ++ 125,2,0,124,2,0,116,1,0,106,3,0,107,7,0,114, ++ 83,0,116,0,0,106,5,0,124,2,0,131,1,0,125,3, ++ 0,110,13,0,116,1,0,106,3,0,124,2,0,25,125,3, ++ 0,116,6,0,124,1,0,124,2,0,124,3,0,131,3,0, ++ 1,113,44,0,87,100,5,0,100,6,0,103,1,0,102,2, ++ 0,100,7,0,100,8,0,100,6,0,103,2,0,102,2,0, ++ 102,2,0,125,4,0,120,149,0,124,4,0,68,93,129,0, ++ 92,2,0,125,5,0,125,6,0,116,7,0,100,9,0,100, ++ 10,0,132,0,0,124,6,0,68,131,1,0,131,1,0,115, ++ 199,0,116,8,0,130,1,0,124,6,0,100,11,0,25,125, ++ 7,0,124,5,0,116,1,0,106,3,0,107,6,0,114,241, ++ 0,116,1,0,106,3,0,124,5,0,25,125,8,0,80,113, ++ 156,0,121,20,0,116,0,0,106,5,0,124,5,0,131,1, ++ 0,125,8,0,80,87,113,156,0,4,116,9,0,107,10,0, ++ 114,28,1,1,1,1,119,156,0,89,113,156,0,88,113,156, ++ 0,87,116,9,0,100,12,0,131,1,0,130,1,0,116,6, ++ 0,124,1,0,100,13,0,124,8,0,131,3,0,1,116,6, ++ 0,124,1,0,100,14,0,124,7,0,131,3,0,1,116,6, ++ 0,124,1,0,100,15,0,100,16,0,106,10,0,124,6,0, ++ 131,1,0,131,3,0,1,121,19,0,116,0,0,106,5,0, ++ 100,17,0,131,1,0,125,9,0,87,110,24,0,4,116,9, ++ 0,107,10,0,114,147,1,1,1,1,100,18,0,125,9,0, ++ 89,110,1,0,88,116,6,0,124,1,0,100,17,0,124,9, ++ 0,131,3,0,1,116,0,0,106,5,0,100,19,0,131,1, ++ 0,125,10,0,116,6,0,124,1,0,100,19,0,124,10,0, ++ 131,3,0,1,124,5,0,100,7,0,107,2,0,114,238,1, ++ 116,0,0,106,5,0,100,20,0,131,1,0,125,11,0,116, ++ 6,0,124,1,0,100,21,0,124,11,0,131,3,0,1,116, ++ 6,0,124,1,0,100,22,0,116,11,0,131,0,0,131,3, ++ 0,1,116,12,0,106,13,0,116,2,0,106,14,0,131,0, ++ 0,131,1,0,1,124,5,0,100,7,0,107,2,0,114,66, ++ 2,116,15,0,106,16,0,100,23,0,131,1,0,1,100,24, ++ 0,116,12,0,107,6,0,114,66,2,100,25,0,116,17,0, ++ 95,18,0,100,18,0,83,41,27,122,205,83,101,116,117,112, ++ 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, ++ 105,109,112,111,114,116,101,114,115,32,102,111,114,32,105,109, ++ 112,111,114,116,108,105,98,32,98,121,32,105,109,112,111,114, ++ 116,105,110,103,32,110,101,101,100,101,100,10,32,32,32,32, ++ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, ++ 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, ++ 104,101,109,32,105,110,116,111,32,116,104,101,32,103,108,111, ++ 98,97,108,32,110,97,109,101,115,112,97,99,101,46,10,10, ++ 32,32,32,32,79,116,104,101,114,32,99,111,109,112,111,110, ++ 101,110,116,115,32,97,114,101,32,101,120,116,114,97,99,116, ++ 101,100,32,102,114,111,109,32,116,104,101,32,99,111,114,101, ++ 32,98,111,111,116,115,116,114,97,112,32,109,111,100,117,108, ++ 101,46,10,10,32,32,32,32,114,50,0,0,0,114,61,0, ++ 0,0,218,8,98,117,105,108,116,105,110,115,114,143,0,0, ++ 0,90,5,112,111,115,105,120,250,1,47,218,2,110,116,250, ++ 1,92,99,1,0,0,0,0,0,0,0,2,0,0,0,3, ++ 0,0,0,115,0,0,0,115,33,0,0,0,124,0,0,93, ++ 23,0,125,1,0,116,0,0,124,1,0,131,1,0,100,0, ++ 0,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, ++ 30,0,0,0,78,41,1,114,32,0,0,0,41,2,114,23, ++ 0,0,0,114,78,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,228,0,0,0,91,5,0,0, ++ 115,2,0,0,0,6,0,122,25,95,115,101,116,117,112,46, ++ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, ++ 114,62,114,60,0,0,0,122,30,105,109,112,111,114,116,108, ++ 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, ++ 120,32,111,114,32,110,116,114,4,0,0,0,114,26,0,0, ++ 0,114,22,0,0,0,114,31,0,0,0,90,7,95,116,104, ++ 114,101,97,100,78,90,8,95,119,101,97,107,114,101,102,90, ++ 6,119,105,110,114,101,103,114,170,0,0,0,114,7,0,0, ++ 0,122,4,46,112,121,119,122,6,95,100,46,112,121,100,84, ++ 41,4,122,3,95,105,111,122,9,95,119,97,114,110,105,110, ++ 103,115,122,8,98,117,105,108,116,105,110,115,122,7,109,97, ++ 114,115,104,97,108,41,19,114,122,0,0,0,114,8,0,0, ++ 0,114,146,0,0,0,114,240,0,0,0,114,113,0,0,0, ++ 90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95, ++ 110,97,109,101,114,117,0,0,0,218,3,97,108,108,218,14, ++ 65,115,115,101,114,116,105,111,110,69,114,114,111,114,114,108, ++ 0,0,0,114,27,0,0,0,114,12,0,0,0,114,230,0, ++ 0,0,114,150,0,0,0,114,26,1,0,0,114,85,0,0, ++ 0,114,164,0,0,0,114,169,0,0,0,114,174,0,0,0, ++ 41,12,218,17,95,98,111,111,116,115,116,114,97,112,95,109, ++ 111,100,117,108,101,90,11,115,101,108,102,95,109,111,100,117, ++ 108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, ++ 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, ++ 90,10,111,115,95,100,101,116,97,105,108,115,90,10,98,117, ++ 105,108,116,105,110,95,111,115,114,22,0,0,0,114,26,0, ++ 0,0,90,9,111,115,95,109,111,100,117,108,101,90,13,116, ++ 104,114,101,97,100,95,109,111,100,117,108,101,90,14,119,101, ++ 97,107,114,101,102,95,109,111,100,117,108,101,90,13,119,105, ++ 110,114,101,103,95,109,111,100,117,108,101,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,6,95,115,101,116, ++ 117,112,66,5,0,0,115,82,0,0,0,0,8,6,1,9, ++ 1,9,3,13,1,13,1,15,1,18,2,13,1,20,3,33, ++ 1,19,2,31,1,10,1,15,1,13,1,4,2,3,1,15, ++ 1,5,1,13,1,12,2,12,1,16,1,16,1,25,3,3, ++ 1,19,1,13,2,11,1,16,3,15,1,16,3,12,1,15, ++ 1,16,3,19,1,19,1,12,1,13,1,12,1,114,34,1, ++ 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,3, ++ 0,0,0,67,0,0,0,115,116,0,0,0,116,0,0,124, ++ 0,0,131,1,0,1,116,1,0,131,0,0,125,1,0,116, ++ 2,0,106,3,0,106,4,0,116,5,0,106,6,0,124,1, ++ 0,140,0,0,103,1,0,131,1,0,1,116,7,0,106,8, ++ 0,100,1,0,107,2,0,114,78,0,116,2,0,106,9,0, ++ 106,10,0,116,11,0,131,1,0,1,116,2,0,106,9,0, ++ 106,10,0,116,12,0,131,1,0,1,116,5,0,124,0,0, ++ 95,5,0,116,13,0,124,0,0,95,13,0,100,2,0,83, ++ 41,3,122,41,73,110,115,116,97,108,108,32,116,104,101,32, + 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, +- 116,101,114,115,32,102,111,114,32,105,109,112,111,114,116,108, +- 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32, +- 110,101,101,100,101,100,10,32,32,32,32,98,117,105,108,116, +- 45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32, +- 105,110,106,101,99,116,105,110,103,32,116,104,101,109,32,105, +- 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110, +- 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,79, +- 116,104,101,114,32,99,111,109,112,111,110,101,110,116,115,32, +- 97,114,101,32,101,120,116,114,97,99,116,101,100,32,102,114, +- 111,109,32,116,104,101,32,99,111,114,101,32,98,111,111,116, +- 115,116,114,97,112,32,109,111,100,117,108,101,46,10,10,32, +- 32,32,32,114,49,0,0,0,114,60,0,0,0,218,8,98, +- 117,105,108,116,105,110,115,114,142,0,0,0,90,5,112,111, +- 115,105,120,250,1,47,218,2,110,116,250,1,92,99,1,0, +- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0, +- 0,0,115,33,0,0,0,124,0,0,93,23,0,125,1,0, +- 116,0,0,124,1,0,131,1,0,100,0,0,107,2,0,86, +- 1,113,3,0,100,1,0,83,41,2,114,29,0,0,0,78, +- 41,1,114,31,0,0,0,41,2,114,22,0,0,0,114,77, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,227,0,0,0,91,5,0,0,115,2,0,0,0, +- 6,0,122,25,95,115,101,116,117,112,46,60,108,111,99,97, +- 108,115,62,46,60,103,101,110,101,120,112,114,62,114,59,0, +- 0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,101, +- 113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,32, +- 110,116,114,3,0,0,0,114,25,0,0,0,114,21,0,0, +- 0,114,30,0,0,0,90,7,95,116,104,114,101,97,100,78, +- 90,8,95,119,101,97,107,114,101,102,90,6,119,105,110,114, +- 101,103,114,169,0,0,0,114,6,0,0,0,122,4,46,112, +- 121,119,122,6,95,100,46,112,121,100,84,41,4,122,3,95, +- 105,111,122,9,95,119,97,114,110,105,110,103,115,122,8,98, +- 117,105,108,116,105,110,115,122,7,109,97,114,115,104,97,108, +- 41,19,114,121,0,0,0,114,7,0,0,0,114,145,0,0, +- 0,114,239,0,0,0,114,112,0,0,0,90,18,95,98,117, +- 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, +- 116,0,0,0,218,3,97,108,108,218,14,65,115,115,101,114, +- 116,105,111,110,69,114,114,111,114,114,107,0,0,0,114,26, +- 0,0,0,114,11,0,0,0,114,229,0,0,0,114,149,0, +- 0,0,114,25,1,0,0,114,84,0,0,0,114,163,0,0, +- 0,114,168,0,0,0,114,173,0,0,0,41,12,218,17,95, +- 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, +- 90,11,115,101,108,102,95,109,111,100,117,108,101,90,12,98, +- 117,105,108,116,105,110,95,110,97,109,101,90,14,98,117,105, +- 108,116,105,110,95,109,111,100,117,108,101,90,10,111,115,95, +- 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, +- 95,111,115,114,21,0,0,0,114,25,0,0,0,90,9,111, +- 115,95,109,111,100,117,108,101,90,13,116,104,114,101,97,100, +- 95,109,111,100,117,108,101,90,14,119,101,97,107,114,101,102, +- 95,109,111,100,117,108,101,90,13,119,105,110,114,101,103,95, +- 109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,6,95,115,101,116,117,112,66,5,0, +- 0,115,82,0,0,0,0,8,6,1,9,1,9,3,13,1, +- 13,1,15,1,18,2,13,1,20,3,33,1,19,2,31,1, +- 10,1,15,1,13,1,4,2,3,1,15,1,5,1,13,1, +- 12,2,12,1,16,1,16,1,25,3,3,1,19,1,13,2, +- 11,1,16,3,15,1,16,3,12,1,15,1,16,3,19,1, +- 19,1,12,1,13,1,12,1,114,33,1,0,0,99,1,0, +- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, +- 0,0,115,116,0,0,0,116,0,0,124,0,0,131,1,0, +- 1,116,1,0,131,0,0,125,1,0,116,2,0,106,3,0, +- 106,4,0,116,5,0,106,6,0,124,1,0,140,0,0,103, +- 1,0,131,1,0,1,116,7,0,106,8,0,100,1,0,107, +- 2,0,114,78,0,116,2,0,106,9,0,106,10,0,116,11, +- 0,131,1,0,1,116,2,0,106,9,0,106,10,0,116,12, +- 0,131,1,0,1,116,5,0,124,0,0,95,5,0,116,13, +- 0,124,0,0,95,13,0,100,2,0,83,41,3,122,41,73, +- 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, +- 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, +- 112,111,110,101,110,116,115,46,114,28,1,0,0,78,41,14, +- 114,33,1,0,0,114,161,0,0,0,114,7,0,0,0,114, +- 254,0,0,0,114,149,0,0,0,114,6,1,0,0,114,19, +- 1,0,0,114,3,0,0,0,114,112,0,0,0,218,9,109, +- 101,116,97,95,112,97,116,104,114,163,0,0,0,114,168,0, +- 0,0,114,249,0,0,0,114,218,0,0,0,41,2,114,32, +- 1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,108, +- 111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,134, +- 5,0,0,115,16,0,0,0,0,2,10,1,9,1,28,1, +- 15,1,16,1,16,4,9,1,114,35,1,0,0,41,3,122, +- 3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,57, +- 114,114,0,0,0,114,10,0,0,0,114,11,0,0,0,114, +- 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, +- 0,0,0,114,39,0,0,0,114,43,0,0,0,114,44,0, +- 0,0,114,46,0,0,0,114,55,0,0,0,218,4,116,121, +- 112,101,218,8,95,95,99,111,100,101,95,95,114,144,0,0, +- 0,114,15,0,0,0,114,135,0,0,0,114,14,0,0,0, +- 114,18,0,0,0,90,17,95,82,65,87,95,77,65,71,73, +- 67,95,78,85,77,66,69,82,114,73,0,0,0,114,72,0, +- 0,0,114,84,0,0,0,114,74,0,0,0,90,23,68,69, +- 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, +- 70,73,88,69,83,90,27,79,80,84,73,77,73,90,69,68, +- 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, +- 69,83,114,79,0,0,0,114,85,0,0,0,114,91,0,0, +- 0,114,95,0,0,0,114,97,0,0,0,114,105,0,0,0, +- 114,123,0,0,0,114,130,0,0,0,114,141,0,0,0,114, +- 147,0,0,0,114,150,0,0,0,114,155,0,0,0,218,6, +- 111,98,106,101,99,116,114,162,0,0,0,114,167,0,0,0, +- 114,168,0,0,0,114,184,0,0,0,114,194,0,0,0,114, +- 210,0,0,0,114,218,0,0,0,114,223,0,0,0,114,229, +- 0,0,0,114,224,0,0,0,114,230,0,0,0,114,247,0, +- 0,0,114,249,0,0,0,114,6,1,0,0,114,24,1,0, +- 0,114,161,0,0,0,114,33,1,0,0,114,35,1,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,0, +- 0,0,115,100,0,0,0,6,17,6,3,12,12,12,5,12, +- 5,12,6,12,12,12,10,12,9,12,5,12,7,15,22,15, +- 110,22,1,18,2,6,1,6,2,9,2,9,2,10,2,21, +- 44,12,33,12,19,12,12,12,12,18,8,12,28,12,17,21, +- 55,21,12,18,10,12,14,9,3,12,1,15,65,19,64,19, +- 28,22,110,19,41,25,43,25,16,6,3,25,53,19,57,19, +- 41,19,134,19,146,15,23,12,11,12,68, ++ 116,32,99,111,109,112,111,110,101,110,116,115,46,114,29,1, ++ 0,0,78,41,14,114,34,1,0,0,114,162,0,0,0,114, ++ 8,0,0,0,114,255,0,0,0,114,150,0,0,0,114,7, ++ 1,0,0,114,20,1,0,0,114,4,0,0,0,114,113,0, ++ 0,0,218,9,109,101,116,97,95,112,97,116,104,114,164,0, ++ 0,0,114,169,0,0,0,114,250,0,0,0,114,219,0,0, ++ 0,41,2,114,33,1,0,0,90,17,115,117,112,112,111,114, ++ 116,101,100,95,108,111,97,100,101,114,115,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,8,95,105,110,115, ++ 116,97,108,108,134,5,0,0,115,16,0,0,0,0,2,10, ++ 1,9,1,28,1,15,1,16,1,16,4,9,1,114,36,1, ++ 0,0,41,4,122,3,119,105,110,114,1,0,0,0,114,2, ++ 0,0,0,114,3,0,0,0,41,57,114,115,0,0,0,114, ++ 11,0,0,0,114,12,0,0,0,114,18,0,0,0,114,20, ++ 0,0,0,114,29,0,0,0,114,39,0,0,0,114,40,0, ++ 0,0,114,44,0,0,0,114,45,0,0,0,114,47,0,0, ++ 0,114,56,0,0,0,218,4,116,121,112,101,218,8,95,95, ++ 99,111,100,101,95,95,114,145,0,0,0,114,16,0,0,0, ++ 114,136,0,0,0,114,15,0,0,0,114,19,0,0,0,90, ++ 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, ++ 69,82,114,74,0,0,0,114,73,0,0,0,114,85,0,0, ++ 0,114,75,0,0,0,90,23,68,69,66,85,71,95,66,89, ++ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, ++ 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, ++ 79,68,69,95,83,85,70,70,73,88,69,83,114,80,0,0, ++ 0,114,86,0,0,0,114,92,0,0,0,114,96,0,0,0, ++ 114,98,0,0,0,114,106,0,0,0,114,124,0,0,0,114, ++ 131,0,0,0,114,142,0,0,0,114,148,0,0,0,114,151, ++ 0,0,0,114,156,0,0,0,218,6,111,98,106,101,99,116, ++ 114,163,0,0,0,114,168,0,0,0,114,169,0,0,0,114, ++ 185,0,0,0,114,195,0,0,0,114,211,0,0,0,114,219, ++ 0,0,0,114,224,0,0,0,114,230,0,0,0,114,225,0, ++ 0,0,114,231,0,0,0,114,248,0,0,0,114,250,0,0, ++ 0,114,7,1,0,0,114,25,1,0,0,114,162,0,0,0, ++ 114,34,1,0,0,114,36,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,8, ++ 60,109,111,100,117,108,101,62,8,0,0,0,115,100,0,0, ++ 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, ++ 10,12,9,12,5,12,7,15,22,15,110,22,1,18,2,6, ++ 1,6,2,9,2,9,2,10,2,21,44,12,33,12,19,12, ++ 12,12,12,18,8,12,28,12,17,21,55,21,12,18,10,12, ++ 14,9,3,12,1,15,65,19,64,19,28,22,110,19,41,25, ++ 43,25,16,6,3,25,53,19,57,19,41,19,134,19,146,15, ++ 23,12,11,12,68, }; diff -Nru orig/Python/marshal.c modified/Python/marshal.c ---- orig/Python/marshal.c 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Python/marshal.c 2015-05-04 12:43:06.000000000 +0800 -@@ -13,17 +13,26 @@ - #include "code.h" +--- orig/Python/marshal.c 2015-12-07 09:39:11.000000000 +0800 ++++ modified/Python/marshal.c 2016-02-15 20:17:07.000000000 +0800 +@@ -14,15 +14,23 @@ #include "marshal.h" + #include "../Modules/hashtable.h" +#ifdef __APPLE__ +# include "TargetConditionals.h" +#endif /* __APPLE__ */ + - #define ABS(x) ((x) < 0 ? -(x) : (x)) - /* High water mark to determine when the marshalled object is dangerously deep * and risks coring the interpreter. When the object stack gets this deep, * raise an exception instead of continuing. * On Windows debug builds, reduce this value. -+ * iOS also requires a reduced value. */ #if defined(MS_WINDOWS) && defined(_DEBUG) --#define MAX_MARSHAL_STACK_DEPTH 1500 -+# define MAX_MARSHAL_STACK_DEPTH 1500 +-#define MAX_MARSHAL_STACK_DEPTH 1000 ++# define MAX_MARSHAL_STACK_DEPTH 1000 #else -#define MAX_MARSHAL_STACK_DEPTH 2000 +# if TARGET_OS_IPHONE +# define MAX_MARSHAL_STACK_DEPTH 1500 +# else +# define MAX_MARSHAL_STACK_DEPTH 2000 -+# endif /* TARGET_OS_IPHONE */ ++# endif #endif #define TYPE_NULL '0' Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/iOS-test/main.py --- orig/Tools/iOS-test/app/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-17 13:49:19.000000000 +0800 ++++ modified/Tools/iOS-test/app/iOS-test/main.py 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,12 @@ +from datetime import datetime +import platform @@ -39902,13 +36500,13 @@ diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/i + diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_packages/README --- orig/Tools/iOS-test/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app_packages/README 2015-04-26 21:28:31.000000000 +0800 ++++ modified/Tools/iOS-test/app_packages/README 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1 @@ +This directory exists so that 3rd party packages can be installed here. \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json --- orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-07-04 17:34:59.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,58 @@ +{ + "images" : [ @@ -39971,7 +36569,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Conten \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json --- orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-04-26 21:28:31.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,51 @@ +{ + "images" : [ @@ -40027,12 +36625,12 @@ diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/C \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings --- orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2015-04-26 21:28:31.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist --- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-12-20 19:26:56.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -40081,7 +36679,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-te + diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch --- orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2015-04-26 21:28:31.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,16 @@ +// +// Prefix header @@ -40102,8 +36700,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2015-12-21 09:53:22.000000000 +0800 -@@ -0,0 +1,145 @@ ++++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-16 11:43:46.000000000 +0800 +@@ -0,0 +1,151 @@ +// +// main.m +// A main module for starting Python projects under iOS. @@ -40133,7 +36731,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + + python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; + NSLog(@"PythonHome is: %@", python_home); -+ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); ++ wpython_home = Py_DecodeLocale([python_home UTF8String], NULL); + Py_SetPythonHome(wpython_home); + + // iOS provides a specific directory for temp files. @@ -40166,10 +36764,20 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", +// "-v", // Verbose test output + "-W", // Display test output on failure -+ ++ ++ + "-x", // Arguments are tests to *exclude* ++ ++// Simulator failures ++// "test_coroutines", // docstring not being populated ++// "test_module", // docstring not being populated ++ +// ARM64 failures -+// "test_unicode", // # ctypes related; PyUnicode_FromFormat ++// "test_coroutines", // docstring not being populated ++// "test_ctypes", // DL loading? ++// "test_module" // docstring not being populated ++// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc ++// "test_unicode", // encoding problem + +// ARMv7 failures +// "test_cmath", // math domain error @@ -40178,15 +36786,11 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m +// "test_math", // math domain error +// "test_numeric_tower", // +// "test_strtod", // -+ "test_importlib", // Thread locking problem -+ -+// Fails on BOTH -+// "test_ctypes", // DL loading? -+// "test_socket", // Fails due to bad domain? Fails on simulator, OS/X, too. ++// "test_importlib", // Thread locking problem +// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc + -+// Hard crash on BOTH -+ "test_bytes" // ctypes related; PyBytes_FromFormat ++// COMMON FAILURES ++ "test_bytes" // HARD CRASH ctypes related; PyBytes_FromFormat + + }; + @@ -40204,9 +36808,9 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; + + python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * n_test_args); -+ python_argv[0] = _Py_char2wchar(main_script, NULL); ++ python_argv[0] = Py_DecodeLocale(main_script, NULL); + for (i = 1; i < n_test_args; i++) { -+ python_argv[i] = _Py_char2wchar(test_args[i-1], NULL); ++ python_argv[i] = Py_DecodeLocale(test_args[i-1], NULL); + } + + PySys_SetArgv(n_test_args, python_argv); @@ -40252,7 +36856,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj --- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-12-20 22:48:35.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,369 @@ +// !$*UTF8*$! +{ @@ -40624,8 +37228,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + rootObject = 60796EDA19190F4100A9926B /* Project object */; +} diff -Nru orig/config.sub modified/config.sub ---- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 -+++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 +--- orig/config.sub 2015-12-07 09:39:11.000000000 +0800 ++++ modified/config.sub 2016-02-14 10:29:41.000000000 +0800 @@ -1512,6 +1512,8 @@ ;; -nacl*) @@ -40636,9 +37240,9 @@ diff -Nru orig/config.sub modified/config.sub ;; *) diff -Nru orig/configure modified/configure ---- orig/configure 2015-02-03 19:49:02.000000000 +0800 -+++ modified/configure 2015-04-30 09:18:43.000000000 +0800 -@@ -3290,6 +3290,9 @@ +--- orig/configure 2015-12-07 09:39:11.000000000 +0800 ++++ modified/configure 2016-02-14 10:29:41.000000000 +0800 +@@ -3312,6 +3312,9 @@ *-*-cygwin*) ac_sys_system=Cygwin ;; @@ -40648,7 +37252,7 @@ diff -Nru orig/configure modified/configure *) # for now, limit cross builds to known configurations MACHDEP="unknown" -@@ -3332,6 +3335,15 @@ +@@ -3354,6 +3357,15 @@ _host_cpu=$host_cpu esac ;; @@ -40664,7 +37268,7 @@ diff -Nru orig/configure modified/configure *-*-cygwin*) _host_cpu= ;; -@@ -3411,6 +3423,9 @@ +@@ -3433,6 +3445,9 @@ define_xopen_source=no;; Darwin/1[0-9].*) define_xopen_source=no;; @@ -40674,7 +37278,7 @@ diff -Nru orig/configure modified/configure # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. -@@ -5993,11 +6008,17 @@ +@@ -6145,11 +6160,17 @@ fi if test "$cross_compiling" = yes; then @@ -40697,7 +37301,7 @@ diff -Nru orig/configure modified/configure fi -@@ -10421,6 +10442,8 @@ +@@ -10901,6 +10922,8 @@ hp*|HP*) DYNLOADFILE="dynload_hpux.o";; # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";; @@ -40706,7 +37310,7 @@ diff -Nru orig/configure modified/configure *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading -@@ -16732,7 +16755,17 @@ +@@ -17462,7 +17485,17 @@ echo "creating Modules/Setup.local" >&6 if test ! -f Modules/Setup.local then @@ -40726,8 +37330,8 @@ diff -Nru orig/configure modified/configure echo "creating Makefile" >&6 diff -Nru orig/configure.ac modified/configure.ac ---- orig/configure.ac 2015-02-25 21:21:37.000000000 +0800 -+++ modified/configure.ac 2015-04-30 09:18:57.000000000 +0800 +--- orig/configure.ac 2015-12-07 09:39:11.000000000 +0800 ++++ modified/configure.ac 2016-02-14 10:29:41.000000000 +0800 @@ -373,6 +373,9 @@ *-*-cygwin*) ac_sys_system=Cygwin @@ -40764,7 +37368,7 @@ diff -Nru orig/configure.ac modified/configure.ac # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. -@@ -1023,11 +1038,17 @@ +@@ -1152,11 +1167,17 @@ AC_CHECK_TOOLS([READELF], [readelf], [:]) if test "$cross_compiling" = yes; then @@ -40787,7 +37391,7 @@ diff -Nru orig/configure.ac modified/configure.ac fi AC_SUBST(READELF) -@@ -2898,6 +2919,8 @@ +@@ -3153,6 +3174,8 @@ hp*|HP*) DYNLOADFILE="dynload_hpux.o";; # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";; @@ -40796,7 +37400,7 @@ diff -Nru orig/configure.ac modified/configure.ac *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading -@@ -4826,7 +4849,17 @@ +@@ -5209,7 +5232,17 @@ echo "creating Modules/Setup.local" >&AS_MESSAGE_FD if test ! -f Modules/Setup.local then @@ -40817,8 +37421,8 @@ diff -Nru orig/configure.ac modified/configure.ac echo "creating Makefile" >&AS_MESSAGE_FD diff -Nru orig/iOS/Makefile modified/iOS/Makefile --- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2015-07-04 13:38:21.000000000 +0800 -@@ -0,0 +1,248 @@ ++++ modified/iOS/Makefile 2016-02-15 15:51:14.000000000 +0800 +@@ -0,0 +1,251 @@ +# This is a "Meta-makefile" for building an iOS-compatible Python.framework. +# It invokes the base makefile multiple times, once for each hardware platform +# that needs to be supported; then it combines the products into a single "fat" @@ -40868,6 +37472,7 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + +clean: + rm -rf build ++ rm -rf _freeze_importlib + rm -rf ../Python.framework + rm -rf ../Tools/iOS-test/Python.framework + @@ -40883,6 +37488,8 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + # Configure and make the local build, providing compiled resources. + if test -f ../Makefile; then cd .. && make distclean; fi + cd .. && ./configure --prefix=$(IOS_DIR)/build/host --without-ensurepip ++ cd .. && make Programs/_freeze_importlib ++ cp ../Programs/_freeze_importlib . + cd .. && make + cd .. && make install + # Now pack away all the built artefacts so that the top level distclean doesn't touch them @@ -41067,9 +37674,10 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + + # Link the current Python library to the top level + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python +Binary files orig/iOS/Programs and modified/iOS/Programs differ diff -Nru orig/iOS/README modified/iOS/README --- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2015-12-20 18:59:33.000000000 +0800 ++++ modified/iOS/README 2016-02-15 09:51:43.000000000 +0800 @@ -0,0 +1,165 @@ +==================== +Python on iOS README @@ -41078,7 +37686,7 @@ diff -Nru orig/iOS/README modified/iOS/README +:Authors: + Russell Keith-Magee (2015) + -+:Version: 3.4.2 ++:Version: 3.5.1 + +This document provides a overview of eccentricities of building and using +Python on iOS. @@ -41236,23 +37844,22 @@ diff -Nru orig/iOS/README modified/iOS/README +.. _Rubicon ObjC: http://pybee.org/rubicon +.. _Pyobjus: http://pyobjus.readthedocs.org/ +.. _PyObjC: https://pythonhosted.org/pyobjc/ -Binary files orig/iOS/XCode-sample/.DS_Store and modified/iOS/XCode-sample/.DS_Store differ diff -Nru orig/iOS/XCode-sample/app/sample/main.py modified/iOS/XCode-sample/app/sample/main.py --- orig/iOS/XCode-sample/app/sample/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app/sample/main.py 2015-03-14 22:02:09.000000000 +0800 ++++ modified/iOS/XCode-sample/app/sample/main.py 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,3 @@ + +if __name__ == '__main__': + print("Hello, World.") diff -Nru orig/iOS/XCode-sample/app_packages/README modified/iOS/XCode-sample/app_packages/README --- orig/iOS/XCode-sample/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app_packages/README 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/app_packages/README 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1 @@ +This directory exists so that 3rd party packages can be installed here. \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json --- orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,53 @@ +{ + "images" : [ @@ -41310,7 +37917,7 @@ diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Conten \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json --- orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,51 @@ +{ + "images" : [ @@ -41366,12 +37973,12 @@ diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/C \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings --- orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/main.m --- orig/iOS/XCode-sample/sample/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/main.m 2015-07-04 23:12:05.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/main.m 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,112 @@ +// +// main.m @@ -41488,7 +38095,7 @@ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/m \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-sample/sample/sample-Info.plist --- orig/iOS/XCode-sample/sample/sample-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Info.plist 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Info.plist 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -41538,7 +38145,7 @@ diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-samp \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-sample/sample/sample-Prefix.pch --- orig/iOS/XCode-sample/sample/sample-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2015-03-14 21:57:52.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,16 @@ +// +// Prefix header @@ -41559,7 +38166,7 @@ diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-samp \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj --- orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-07-04 23:17:10.000000000 +0800 ++++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ @@ -41914,9 +38521,10 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + }; + rootObject = 60796EDA19190F4100A9926B /* Project object */; +} +Binary files orig/iOS/iOS and modified/iOS/iOS differ diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h --- orig/iOS/include/pyconfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/include/pyconfig.h 2015-05-05 08:36:22.000000000 +0800 ++++ modified/iOS/include/pyconfig.h 2016-02-14 10:29:41.000000000 +0800 @@ -0,0 +1,15 @@ +#ifdef __arm__ +#include "pyconfig-armv7.h" @@ -41934,21 +38542,3 @@ diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h +#include "pyconfig-x86_64.h" +#endif \ No newline at end of file -diff -Nru orig/setup.py modified/setup.py ---- orig/setup.py 2015-02-03 19:49:05.000000000 +0800 -+++ modified/setup.py 2015-04-26 07:48:53.000000000 +0800 -@@ -252,7 +252,13 @@ - - build_ext.build_extensions(self) - -- longest = max([len(e.name) for e in self.extensions]) -+ # If there are any missing modules, use the longest name to -+ # set the column width for the list of missing modules. -+ if missing: -+ longest = max([len(m) for m in missing]) -+ else: -+ longest = 0 -+ - if self.failed: - longest = max(longest, max([len(name) for name in self.failed])) - diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded index 3269bad8..c0977ee7 100644 --- a/patch/Python/Setup.embedded +++ b/patch/Python/Setup.embedded @@ -60,7 +60,6 @@ resource resource.c select selectmodule.c syslog syslogmodule.c termios termios.c -time timemodule.c unicodedata unicodedata.c zlib zlibmodule.c -I$(prefix)/include -lz From e5b6e440335b46b00d110f3a5a19a2c21d659c71 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 16 Feb 2016 20:16:05 +0800 Subject: [PATCH 33/51] Added BZip2 to the builtins, plus stubs for lzma. --- Makefile | 136 +- patch/Python/Python.patch | 3004 +++++------------------------------ patch/Python/Setup.embedded | 4 +- 3 files changed, 488 insertions(+), 2656 deletions(-) diff --git a/Makefile b/Makefile index 7a4d8cb4..7d37eb0c 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,22 @@ # # Useful targets: -# - all - build everything -# - iOS - build everything for iOS -# - tvOS - build everything for tvOS -# - watchOS - build everything for watchOS -# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS -# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +# - all - build everything +# - iOS - build everything for iOS +# - tvOS - build everything for tvOS +# - watchOS - build everything for watchOS +# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS +# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS # - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - Python.framework-iOS - build Python.framework for iOS -# - Python.framework-tvOS - build Python.framework for tvOS -# - Python.framework-watchOS - build Python.framework for watchOS -# - Python-host - build host python +# - BZip2-iOS - build BZip2 library for iOS +# - BZip2-tvOS - build BZip2 library for tvOS +# - BZip2-watchOS - build BZip2 library for watchOS +# - XZ-iOS - build XZ library for iOS +# - XZ-tvOS - build XZ library for tvOS +# - XZ-watchOS - build XZ library for watchOS +# - Python.framework-iOS - build Python.framework for iOS +# - Python.framework-tvOS - build Python.framework for tvOS +# - Python.framework-watchOS - build Python.framework for watchOS +# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) @@ -19,32 +25,36 @@ BUILD_NUMBER=1 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.5.1 -PYTHON_VER= $(basename $(PYTHON_VERSION)) +PYTHON_VER= $(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 OPENSSL_REVISION=f OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) +BZIP2_VERSION=1.0.6 + +XZ_VERSION=5.2.2 + # Supported OS -OS= iOS tvOS watchOS +OS= iOS tvOS watchOS # iOS targets TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 CFLAGS-iOS=-miphoneos-version-min=7.0 -CFLAGS-iphoneos.armv7= -fembed-bitcode -CFLAGS-iphoneos.armv7s= -fembed-bitcode -CFLAGS-iphoneos.arm64= -fembed-bitcode +CFLAGS-iphoneos.armv7= -fembed-bitcode +CFLAGS-iphoneos.armv7s= -fembed-bitcode +CFLAGS-iphoneos.arm64= -fembed-bitcode # tvOS targets TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64 CFLAGS-tvOS=-mtvos-version-min=9.0 -CFLAGS-appletvos.arm64= -fembed-bitcode -PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no +CFLAGS-appletvos.arm64= -fembed-bitcode +PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no # watchOS targets TARGETS-watchOS=watchsimulator.i386 watchos.armv7k CFLAGS-watchOS=-mwatchos-version-min=2.0 -CFLAGS-watchos.armv7k= -fembed-bitcode +CFLAGS-watchos.armv7k= -fembed-bitcode PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no # override machine for arm64 @@ -80,6 +90,35 @@ downloads/openssl-$(OPENSSL_VERSION).tgz: -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi + +########################################################################### +# BZip2 +########################################################################### + +# Clean the bzip2 project +clean-bzip2: + rm -rf build/*/bzip2-$(BZIP2_VERSION)-* \ + build/*/bzip2 + +# Download original OpenSSL source code archive. +downloads/bzip2-$(BZIP2_VERSION).tgz: + mkdir -p downloads + if [ ! -e downloads/bzip2-$(BZIP2_VERSION).tgz ]; then curl --fail -L http://www.bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -o downloads/bzip2-$(BZIP2_VERSION).tgz; fi + +########################################################################### +# XZ (LZMA) +########################################################################### + +# Clean the XZ project +clean-xz: + rm -rf build/*/xz-$(XZ_VERSION)-* \ + build/*/xz + +# Download original OpenSSL source code archive. +downloads/xz-$(XZ_VERSION).tgz: + mkdir -p downloads + if [ ! -e downloads/xz-$(XZ_VERSION).tgz ]; then curl --fail -L http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz -o downloads/xz-$(XZ_VERSION).tgz; fi + ########################################################################### # Python ########################################################################### @@ -122,19 +161,21 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile define build-target ARCH-$1= $$(subst .,,$$(suffix $1)) ifdef MACHINE-$$(ARCH-$1) -MACHINE-$1= $$(MACHINE-$$(ARCH-$1)) +MACHINE-$1= $$(MACHINE-$$(ARCH-$1)) else -MACHINE-$1= $$(ARCH-$1) +MACHINE-$1= $$(ARCH-$1) endif -SDK-$1= $$(basename $1) +SDK-$1= $$(basename $1) SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1= xcrun --sdk $$(SDK-$1) clang\ +CC-$1= xcrun --sdk $$(SDK-$1) clang\ -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) -OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 -PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 -pyconfig.h-$1= pyconfig-$$(ARCH-$1).h +OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 +BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION)-$1 +XZ_DIR-$1= build/$2/xz-$(XZ_VERSION)-$1 +PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 +pyconfig.h-$1= pyconfig-$$(ARCH-$1).h # Unpack OpenSSL $$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz @@ -167,6 +208,35 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ make all +# Unpack BZip2 +$$(BZIP2_DIR-$1)/Makefile: downloads/bzip2-$(BZIP2_VERSION).tgz + # Unpack sources + mkdir -p $$(BZIP2_DIR-$1) + tar zxf downloads/bzip2-$(BZIP2_VERSION).tgz --strip-components 1 -C $$(BZIP2_DIR-$1) + # Patch sources to use correct compiler + sed -ie 's#CC=gcc#CC=$$(CC-$1)#' $$(BZIP2_DIR-$1)/Makefile + # Patch sources to use correct install directory + sed -ie 's#PREFIX=/usr/local#PREFIX=$(PROJECT_DIR)/build/$2/bzip2#' $$(BZIP2_DIR-$1)/Makefile + +# Build BZip2 +$$(BZIP2_DIR-$1)/libbz2.a: $$(BZIP2_DIR-$1)/Makefile + cd $$(BZIP2_DIR-$1) && make install + +# Unpack XZ +$$(XZ_DIR-$1)/Makefile: downloads/xz-$(XZ_VERSION).tgz + # Unpack sources + mkdir -p $$(XZ_DIR-$1) + tar zxf downloads/xz-$(XZ_VERSION).tgz --strip-components 1 -C $$(XZ_DIR-$1) + # Configure the build + cd $$(XZ_DIR-$1) && ./configure \ + CC="$$(CC-$1)" \ + --host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + --prefix=$(PROJECT_DIR)/build/$2/xz + +# Build XZ +$$(XZ_DIR-$1)/src/liblzma/.libs/liblzma.a: $$(XZ_DIR-$1)/Makefile + cd $$(XZ_DIR-$1) && make && make install + # Unpack Python $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST) # Unpack target Python @@ -187,7 +257,7 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST $$(PYTHON_CONFIGURE-$2) # Build Python -$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework +$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a # Build target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install @@ -219,6 +289,8 @@ define build $$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework +BZIP2_LIB-$1= build/$1/bzip2/lib/libbz2.a +XZ_LIB-$1= build/$1/xz/lib/liblzma.a PYTHON_FRAMEWORK-$1= build/$1/Python.framework PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources @@ -258,6 +330,18 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target) mkdir -p build/$1 xcrun lipo -create -output $$@ $$^ +BZip2-$1: $$(BZIP2_LIB-$1) + +build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1),$$(BZIP2_DIR-$$(target))/libbz2.a) + mkdir -p build/$1/bzip2/lib + xcrun lipo -create -o $$(BZIP2_LIB-$1) $$^ + +XZ-$1: $$(XZ_LIB-$1) + +build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1),$$(XZ_DIR-$$(target))/src/liblzma/.libs/liblzma.a) + mkdir -p build/$1/xz/lib + xcrun lipo -create -o $$(XZ_LIB-$1) $$^ + Python.framework-$1: $$(PYTHON_FRAMEWORK-$1) # Build Python.framework diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 12efa62d..8f392bac 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -771,7 +771,7 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py --- orig/Lib/distutils/tests/test_sysconfig.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-16 16:58:16.000000000 +0800 @@ -11,6 +11,7 @@ from distutils.tests import support from test.support import TESTFN, run_unittest, check_warnings @@ -784,7 +784,7 @@ diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/test self.assertIsNotNone(vars['SO']) self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "test requires subprocess.Popen()") def test_customize_compiler_before_get_config_vars(self): # Issue #21923: test that a Distribution compiler # instance can be called without an explicit call to @@ -9142,7 +9142,7 @@ diff -Nru orig/Lib/site.py modified/Lib/site.py return USER_SITE diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py --- orig/Lib/subprocess.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/subprocess.py 2016-02-14 11:07:15.000000000 +0800 ++++ modified/Lib/subprocess.py 2016-02-16 16:25:00.000000000 +0800 @@ -357,6 +357,7 @@ import sys @@ -9151,2533 +9151,59 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py import io import os -@@ -455,1320 +456,1324 @@ +@@ -455,10 +456,15 @@ else: _PopenSelector = selectors.SelectSelector -- --__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -- "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", ++if _ios: ++ # iOS doesn't support subprocesses. ++ supported = False ++else: ++ supported = True + + __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", + "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", - "SubprocessError", "TimeoutExpired", "CompletedProcess"] -- # NOTE: We intentionally exclude list2cmdline as it is -- # considered an internal implementation detail. issue10838. -- --if _mswindows: -- from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, -- STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, -- STD_ERROR_HANDLE, SW_HIDE, -- STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) -- -- __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", -- "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", -- "STD_ERROR_HANDLE", "SW_HIDE", -- "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) -- -- class Handle(int): -- closed = False -- -- def Close(self, CloseHandle=_winapi.CloseHandle): -- if not self.closed: -- self.closed = True -- CloseHandle(self) -- -- def Detach(self): -- if not self.closed: -- self.closed = True -- return int(self) -- raise ValueError("already closed") -- -- def __repr__(self): -- return "%s(%d)" % (self.__class__.__name__, int(self)) -- -- __del__ = Close -- __str__ = __repr__ -- -- --# This lists holds Popen instances for which the underlying process had not --# exited at the time its __del__ method got called: those processes are wait()ed --# for synchronously from _cleanup() when a new Popen object is created, to avoid --# zombie processes. --_active = [] -- --def _cleanup(): -- for inst in _active[:]: -- res = inst._internal_poll(_deadstate=sys.maxsize) -- if res is not None: -- try: -- _active.remove(inst) -- except ValueError: -- # This can happen if two threads create a new Popen instance. -- # It's harmless that it was already removed, so ignore. -- pass -- - PIPE = -1 ++ "SubprocessError", "TimeoutExpired", "CompletedProcess", "supported"] + # NOTE: We intentionally exclude list2cmdline as it is + # considered an internal implementation detail. issue10838. + +@@ -515,7 +521,6 @@ STDOUT = -2 DEVNULL = -3 -+if _ios: -+ # iOS doesn't support subprocesses; however, some modules still import -+ # subprocess, so it's helpful to retain the symbols in the namespace. -+ __all__ = ["PIPE", "STDOUT", "DEVNULL", "CalledProcessError"] -+else: -+ __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -+ "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", -+ "SubprocessError", "TimeoutExpired", "CompletedProcess"] -+ # NOTE: We intentionally exclude list2cmdline as it is -+ # considered an internal implementation detail. issue10838. - --# XXX This function is only used by multiprocessing and the test suite, --# but it's here so that it can be imported when Python is compiled without --# threads. -- --def _args_from_interpreter_flags(): -- """Return a list of command-line arguments reproducing the current -- settings in sys.flags and sys.warnoptions.""" -- flag_opt_map = { -- 'debug': 'd', -- # 'inspect': 'i', -- # 'interactive': 'i', -- 'optimize': 'O', -- 'dont_write_bytecode': 'B', -- 'no_user_site': 's', -- 'no_site': 'S', -- 'ignore_environment': 'E', -- 'verbose': 'v', -- 'bytes_warning': 'b', -- 'quiet': 'q', -- 'hash_randomization': 'R', -- } -- args = [] -- for flag, opt in flag_opt_map.items(): -- v = getattr(sys.flags, flag) -- if v > 0: -- if flag == 'hash_randomization': -- v = 1 # Handle specification of an exact seed -- args.append('-' + opt * v) -- for opt in sys.warnoptions: -- args.append('-W' + opt) -- return args -- -- --def call(*popenargs, timeout=None, **kwargs): -- """Run command with arguments. Wait for command to complete or -- timeout, then return the returncode attribute. -+ if _mswindows: -+ from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, -+ STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, -+ STD_ERROR_HANDLE, SW_HIDE, -+ STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) -+ -+ __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", -+ "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", -+ "STD_ERROR_HANDLE", "SW_HIDE", -+ "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) -+ -+ class Handle(int): -+ closed = False -+ -+ def Close(self, CloseHandle=_winapi.CloseHandle): -+ if not self.closed: -+ self.closed = True -+ CloseHandle(self) -+ -+ def Detach(self): -+ if not self.closed: -+ self.closed = True -+ return int(self) -+ raise ValueError("already closed") -+ -+ def __repr__(self): -+ return "%s(%d)" % (self.__class__.__name__, int(self)) -+ -+ __del__ = Close -+ __str__ = __repr__ -+ -+ -+ # This lists holds Popen instances for which the underlying process had not -+ # exited at the time its __del__ method got called: those processes are wait()ed -+ # for synchronously from _cleanup() when a new Popen object is created, to avoid -+ # zombie processes. -+ _active = [] -+ -+ def _cleanup(): -+ for inst in _active[:]: -+ res = inst._internal_poll(_deadstate=sys.maxsize) -+ if res is not None: -+ try: -+ _active.remove(inst) -+ except ValueError: -+ # This can happen if two threads create a new Popen instance. -+ # It's harmless that it was already removed, so ignore. -+ pass - -- The arguments are the same as for the Popen constructor. Example: - -- retcode = call(["ls", "-l"]) -- """ -- with Popen(*popenargs, **kwargs) as p: -- try: -- return p.wait(timeout=timeout) -- except: -- p.kill() -- p.wait() -- raise -- -- --def check_call(*popenargs, **kwargs): -- """Run command with arguments. Wait for command to complete. If -- the exit code was zero then return, otherwise raise -- CalledProcessError. The CalledProcessError object will have the -- return code in the returncode attribute. -+ # XXX This function is only used by multiprocessing and the test suite, -+ # but it's here so that it can be imported when Python is compiled without -+ # threads. -+ -+ def _args_from_interpreter_flags(): -+ """Return a list of command-line arguments reproducing the current -+ settings in sys.flags and sys.warnoptions.""" -+ flag_opt_map = { -+ 'debug': 'd', -+ # 'inspect': 'i', -+ # 'interactive': 'i', -+ 'optimize': 'O', -+ 'dont_write_bytecode': 'B', -+ 'no_user_site': 's', -+ 'no_site': 'S', -+ 'ignore_environment': 'E', -+ 'verbose': 'v', -+ 'bytes_warning': 'b', -+ 'quiet': 'q', -+ 'hash_randomization': 'R', -+ } -+ args = [] -+ for flag, opt in flag_opt_map.items(): -+ v = getattr(sys.flags, flag) -+ if v > 0: -+ if flag == 'hash_randomization': -+ v = 1 # Handle specification of an exact seed -+ args.append('-' + opt * v) -+ for opt in sys.warnoptions: -+ args.append('-W' + opt) -+ return args -+ -+ -+ def call(*popenargs, timeout=None, **kwargs): -+ """Run command with arguments. Wait for command to complete or -+ timeout, then return the returncode attribute. - -- The arguments are the same as for the call function. Example: -+ The arguments are the same as for the Popen constructor. Example: - -- check_call(["ls", "-l"]) -- """ -- retcode = call(*popenargs, **kwargs) -- if retcode: -- cmd = kwargs.get("args") -- if cmd is None: -- cmd = popenargs[0] -- raise CalledProcessError(retcode, cmd) -- return 0 -- -- --def check_output(*popenargs, timeout=None, **kwargs): -- r"""Run command with arguments and return its output. -- -- If the exit code was non-zero it raises a CalledProcessError. The -- CalledProcessError object will have the return code in the returncode -- attribute and output in the output attribute. -- -- The arguments are the same as for the Popen constructor. Example: -- -- >>> check_output(["ls", "-l", "/dev/null"]) -- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' -- -- The stdout argument is not allowed as it is used internally. -- To capture standard error in the result, use stderr=STDOUT. -- -- >>> check_output(["/bin/sh", "-c", -- ... "ls -l non_existent_file ; exit 0"], -- ... stderr=STDOUT) -- b'ls: non_existent_file: No such file or directory\n' -- -- There is an additional optional argument, "input", allowing you to -- pass a string to the subprocess's stdin. If you use this argument -- you may not also use the Popen constructor's "stdin" argument, as -- it too will be used internally. Example: -- -- >>> check_output(["sed", "-e", "s/foo/bar/"], -- ... input=b"when in the course of fooman events\n") -- b'when in the course of barman events\n' -+ retcode = call(["ls", "-l"]) -+ """ -+ with Popen(*popenargs, **kwargs) as p: -+ try: -+ return p.wait(timeout=timeout) -+ except: -+ p.kill() -+ p.wait() -+ raise -+ -+ -+ def check_call(*popenargs, **kwargs): -+ """Run command with arguments. Wait for command to complete. If -+ the exit code was zero then return, otherwise raise -+ CalledProcessError. The CalledProcessError object will have the -+ return code in the returncode attribute. - -- If universal_newlines=True is passed, the "input" argument must be a -- string and the return value will be a string rather than bytes. -- """ -- if 'stdout' in kwargs: -- raise ValueError('stdout argument not allowed, it will be overridden.') -+ The arguments are the same as for the call function. Example: - -- if 'input' in kwargs and kwargs['input'] is None: -- # Explicitly passing input=None was previously equivalent to passing an -- # empty string. That is maintained here for backwards compatibility. -- kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' -+ check_call(["ls", "-l"]) -+ """ -+ retcode = call(*popenargs, **kwargs) -+ if retcode: -+ cmd = kwargs.get("args") -+ if cmd is None: -+ cmd = popenargs[0] -+ raise CalledProcessError(retcode, cmd) -+ return 0 -+ -+ -+ def check_output(*popenargs, timeout=None, **kwargs): -+ r"""Run command with arguments and return its output. -+ -+ If the exit code was non-zero it raises a CalledProcessError. The -+ CalledProcessError object will have the return code in the returncode -+ attribute and output in the output attribute. -+ -+ The arguments are the same as for the Popen constructor. Example: -+ -+ >>> check_output(["ls", "-l", "/dev/null"]) -+ b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' -+ -+ The stdout argument is not allowed as it is used internally. -+ To capture standard error in the result, use stderr=STDOUT. -+ -+ >>> check_output(["/bin/sh", "-c", -+ ... "ls -l non_existent_file ; exit 0"], -+ ... stderr=STDOUT) -+ b'ls: non_existent_file: No such file or directory\n' -+ -+ There is an additional optional argument, "input", allowing you to -+ pass a string to the subprocess's stdin. If you use this argument -+ you may not also use the Popen constructor's "stdin" argument, as -+ it too will be used internally. Example: -+ -+ >>> check_output(["sed", "-e", "s/foo/bar/"], -+ ... input=b"when in the course of fooman events\n") -+ b'when in the course of barman events\n' - -- return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, -- **kwargs).stdout -+ If universal_newlines=True is passed, the "input" argument must be a -+ string and the return value will be a string rather than bytes. -+ """ -+ if 'stdout' in kwargs: -+ raise ValueError('stdout argument not allowed, it will be overridden.') - -+ if 'input' in kwargs and kwargs['input'] is None: -+ # Explicitly passing input=None was previously equivalent to passing an -+ # empty string. That is maintained here for backwards compatibility. -+ kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' - --class CompletedProcess(object): -- """A process that has finished running. -+ return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, -+ **kwargs).stdout - -- This is returned by run(). - -- Attributes: -- args: The list or str args passed to run(). -- returncode: The exit code of the process, negative for signals. -- stdout: The standard output (None if not captured). -- stderr: The standard error (None if not captured). -- """ -- def __init__(self, args, returncode, stdout=None, stderr=None): -- self.args = args -- self.returncode = returncode -- self.stdout = stdout -- self.stderr = stderr -+ class CompletedProcess(object): -+ """A process that has finished running. - -- def __repr__(self): -- args = ['args={!r}'.format(self.args), -- 'returncode={!r}'.format(self.returncode)] -- if self.stdout is not None: -- args.append('stdout={!r}'.format(self.stdout)) -- if self.stderr is not None: -- args.append('stderr={!r}'.format(self.stderr)) -- return "{}({})".format(type(self).__name__, ', '.join(args)) -- -- def check_returncode(self): -- """Raise CalledProcessError if the exit code is non-zero.""" -- if self.returncode: -- raise CalledProcessError(self.returncode, self.args, self.stdout, -- self.stderr) -- -- --def run(*popenargs, input=None, timeout=None, check=False, **kwargs): -- """Run command with arguments and return a CompletedProcess instance. -- -- The returned instance will have attributes args, returncode, stdout and -- stderr. By default, stdout and stderr are not captured, and those attributes -- will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. -- -- If check is True and the exit code was non-zero, it raises a -- CalledProcessError. The CalledProcessError object will have the return code -- in the returncode attribute, and output & stderr attributes if those streams -- were captured. -- -- If timeout is given, and the process takes too long, a TimeoutExpired -- exception will be raised. -- -- There is an optional argument "input", allowing you to -- pass a string to the subprocess's stdin. If you use this argument -- you may not also use the Popen constructor's "stdin" argument, as -- it will be used internally. -- -- The other arguments are the same as for the Popen constructor. -- -- If universal_newlines=True is passed, the "input" argument must be a -- string and stdout/stderr in the returned object will be strings rather than -- bytes. -- """ -- if input is not None: -- if 'stdin' in kwargs: -- raise ValueError('stdin and input arguments may not both be used.') -- kwargs['stdin'] = PIPE -+ This is returned by run(). - -- with Popen(*popenargs, **kwargs) as process: -- try: -- stdout, stderr = process.communicate(input, timeout=timeout) -- except TimeoutExpired: -- process.kill() -- stdout, stderr = process.communicate() -- raise TimeoutExpired(process.args, timeout, output=stdout, -- stderr=stderr) -- except: -- process.kill() -- process.wait() -- raise -- retcode = process.poll() -- if check and retcode: -- raise CalledProcessError(retcode, process.args, -- output=stdout, stderr=stderr) -- return CompletedProcess(process.args, retcode, stdout, stderr) -+ Attributes: -+ args: The list or str args passed to run(). -+ returncode: The exit code of the process, negative for signals. -+ stdout: The standard output (None if not captured). -+ stderr: The standard error (None if not captured). -+ """ -+ def __init__(self, args, returncode, stdout=None, stderr=None): -+ self.args = args -+ self.returncode = returncode -+ self.stdout = stdout -+ self.stderr = stderr - -+ def __repr__(self): -+ args = ['args={!r}'.format(self.args), -+ 'returncode={!r}'.format(self.returncode)] -+ if self.stdout is not None: -+ args.append('stdout={!r}'.format(self.stdout)) -+ if self.stderr is not None: -+ args.append('stderr={!r}'.format(self.stderr)) -+ return "{}({})".format(type(self).__name__, ', '.join(args)) - --def list2cmdline(seq): -- """ -- Translate a sequence of arguments into a command line -- string, using the same rules as the MS C runtime: -+ def check_returncode(self): -+ """Raise CalledProcessError if the exit code is non-zero.""" -+ if self.returncode: -+ raise CalledProcessError(self.returncode, self.args, self.stdout, -+ self.stderr) - -- 1) Arguments are delimited by white space, which is either a -- space or a tab. - -- 2) A string surrounded by double quotation marks is -- interpreted as a single argument, regardless of white space -- contained within. A quoted string can be embedded in an -- argument. -- -- 3) A double quotation mark preceded by a backslash is -- interpreted as a literal double quotation mark. -- -- 4) Backslashes are interpreted literally, unless they -- immediately precede a double quotation mark. -- -- 5) If backslashes immediately precede a double quotation mark, -- every pair of backslashes is interpreted as a literal -- backslash. If the number of backslashes is odd, the last -- backslash escapes the next double quotation mark as -- described in rule 3. -- """ -+ def run(*popenargs, input=None, timeout=None, check=False, **kwargs): -+ """Run command with arguments and return a CompletedProcess instance. - -- # See -- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -- # or search http://msdn.microsoft.com for -- # "Parsing C++ Command-Line Arguments" -- result = [] -- needquote = False -- for arg in seq: -- bs_buf = [] -- -- # Add a space to separate this argument from the others -- if result: -- result.append(' ') -- -- needquote = (" " in arg) or ("\t" in arg) or not arg -- if needquote: -- result.append('"') -- -- for c in arg: -- if c == '\\': -- # Don't know if we need to double yet. -- bs_buf.append(c) -- elif c == '"': -- # Double backslashes. -- result.append('\\' * len(bs_buf)*2) -- bs_buf = [] -- result.append('\\"') -- else: -- # Normal char -- if bs_buf: -- result.extend(bs_buf) -- bs_buf = [] -- result.append(c) -+ The returned instance will have attributes args, returncode, stdout and -+ stderr. By default, stdout and stderr are not captured, and those attributes -+ will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them. - -- # Add remaining backslashes, if any. -- if bs_buf: -- result.extend(bs_buf) -+ If check is True and the exit code was non-zero, it raises a -+ CalledProcessError. The CalledProcessError object will have the return code -+ in the returncode attribute, and output & stderr attributes if those streams -+ were captured. - -- if needquote: -- result.extend(bs_buf) -- result.append('"') -+ If timeout is given, and the process takes too long, a TimeoutExpired -+ exception will be raised. - -- return ''.join(result) -+ There is an optional argument "input", allowing you to -+ pass a string to the subprocess's stdin. If you use this argument -+ you may not also use the Popen constructor's "stdin" argument, as -+ it will be used internally. - -+ The other arguments are the same as for the Popen constructor. - --# Various tools for executing commands and looking at their output and status. --# -+ If universal_newlines=True is passed, the "input" argument must be a -+ string and stdout/stderr in the returned object will be strings rather than -+ bytes. -+ """ -+ if input is not None: -+ if 'stdin' in kwargs: -+ raise ValueError('stdin and input arguments may not both be used.') -+ kwargs['stdin'] = PIPE - --def getstatusoutput(cmd): -- """ Return (status, output) of executing cmd in a shell. -+ with Popen(*popenargs, **kwargs) as process: -+ try: -+ stdout, stderr = process.communicate(input, timeout=timeout) -+ except TimeoutExpired: -+ process.kill() -+ stdout, stderr = process.communicate() -+ raise TimeoutExpired(process.args, timeout, output=stdout, -+ stderr=stderr) -+ except: -+ process.kill() -+ process.wait() -+ raise -+ retcode = process.poll() -+ if check and retcode: -+ raise CalledProcessError(retcode, process.args, -+ output=stdout, stderr=stderr) -+ return CompletedProcess(process.args, retcode, stdout, stderr) - -- Execute the string 'cmd' in a shell with 'check_output' and -- return a 2-tuple (status, output). Universal newlines mode is used, -- meaning that the result with be decoded to a string. - -- A trailing newline is stripped from the output. -- The exit status for the command can be interpreted -- according to the rules for the function 'wait'. Example: -+ def list2cmdline(seq): -+ """ -+ Translate a sequence of arguments into a command line -+ string, using the same rules as the MS C runtime: - -- >>> import subprocess -- >>> subprocess.getstatusoutput('ls /bin/ls') -- (0, '/bin/ls') -- >>> subprocess.getstatusoutput('cat /bin/junk') -- (256, 'cat: /bin/junk: No such file or directory') -- >>> subprocess.getstatusoutput('/bin/junk') -- (256, 'sh: /bin/junk: not found') -- """ -- try: -- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) -- status = 0 -- except CalledProcessError as ex: -- data = ex.output -- status = ex.returncode -- if data[-1:] == '\n': -- data = data[:-1] -- return status, data -- --def getoutput(cmd): -- """Return output (stdout or stderr) of executing cmd in a shell. -- -- Like getstatusoutput(), except the exit status is ignored and the return -- value is a string containing the command's output. Example: -- -- >>> import subprocess -- >>> subprocess.getoutput('ls /bin/ls') -- '/bin/ls' -- """ -- return getstatusoutput(cmd)[1] -+ 1) Arguments are delimited by white space, which is either a -+ space or a tab. - -+ 2) A string surrounded by double quotation marks is -+ interpreted as a single argument, regardless of white space -+ contained within. A quoted string can be embedded in an -+ argument. -+ -+ 3) A double quotation mark preceded by a backslash is -+ interpreted as a literal double quotation mark. -+ -+ 4) Backslashes are interpreted literally, unless they -+ immediately precede a double quotation mark. -+ -+ 5) If backslashes immediately precede a double quotation mark, -+ every pair of backslashes is interpreted as a literal -+ backslash. If the number of backslashes is odd, the last -+ backslash escapes the next double quotation mark as -+ described in rule 3. -+ """ - --_PLATFORM_DEFAULT_CLOSE_FDS = object() -+ # See -+ # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -+ # or search http://msdn.microsoft.com for -+ # "Parsing C++ Command-Line Arguments" -+ result = [] -+ needquote = False -+ for arg in seq: -+ bs_buf = [] -+ -+ # Add a space to separate this argument from the others -+ if result: -+ result.append(' ') -+ -+ needquote = (" " in arg) or ("\t" in arg) or not arg -+ if needquote: -+ result.append('"') -+ -+ for c in arg: -+ if c == '\\': -+ # Don't know if we need to double yet. -+ bs_buf.append(c) -+ elif c == '"': -+ # Double backslashes. -+ result.append('\\' * len(bs_buf)*2) -+ bs_buf = [] -+ result.append('\\"') -+ else: -+ # Normal char -+ if bs_buf: -+ result.extend(bs_buf) -+ bs_buf = [] -+ result.append(c) -+ -+ # Add remaining backslashes, if any. -+ if bs_buf: -+ result.extend(bs_buf) -+ -+ if needquote: -+ result.extend(bs_buf) -+ result.append('"') -+ -+ return ''.join(result) -+ -+ -+ # Various tools for executing commands and looking at their output and status. -+ # -+ -+ def getstatusoutput(cmd): -+ """ Return (status, output) of executing cmd in a shell. -+ -+ Execute the string 'cmd' in a shell with 'check_output' and -+ return a 2-tuple (status, output). Universal newlines mode is used, -+ meaning that the result with be decoded to a string. -+ -+ A trailing newline is stripped from the output. -+ The exit status for the command can be interpreted -+ according to the rules for the function 'wait'. Example: -+ -+ >>> import subprocess -+ >>> subprocess.getstatusoutput('ls /bin/ls') -+ (0, '/bin/ls') -+ >>> subprocess.getstatusoutput('cat /bin/junk') -+ (256, 'cat: /bin/junk: No such file or directory') -+ >>> subprocess.getstatusoutput('/bin/junk') -+ (256, 'sh: /bin/junk: not found') -+ """ -+ try: -+ data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) -+ status = 0 -+ except CalledProcessError as ex: -+ data = ex.output -+ status = ex.returncode -+ if data[-1:] == '\n': -+ data = data[:-1] -+ return status, data -+ -+ def getoutput(cmd): -+ """Return output (stdout or stderr) of executing cmd in a shell. -+ -+ Like getstatusoutput(), except the exit status is ignored and the return -+ value is a string containing the command's output. Example: -+ -+ >>> import subprocess -+ >>> subprocess.getoutput('ls /bin/ls') -+ '/bin/ls' -+ """ -+ return getstatusoutput(cmd)[1] - - --class Popen(object): -+ _PLATFORM_DEFAULT_CLOSE_FDS = object() - -- _child_created = False # Set here since __del__ checks it -- -- def __init__(self, args, bufsize=-1, executable=None, -- stdin=None, stdout=None, stderr=None, -- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, -- shell=False, cwd=None, env=None, universal_newlines=False, -- startupinfo=None, creationflags=0, -- restore_signals=True, start_new_session=False, -- pass_fds=()): -- """Create new Popen instance.""" -- _cleanup() -- # Held while anything is calling waitpid before returncode has been -- # updated to prevent clobbering returncode if wait() or poll() are -- # called from multiple threads at once. After acquiring the lock, -- # code must re-check self.returncode to see if another thread just -- # finished a waitpid() call. -- self._waitpid_lock = threading.Lock() -- -- self._input = None -- self._communication_started = False -- if bufsize is None: -- bufsize = -1 # Restore default -- if not isinstance(bufsize, int): -- raise TypeError("bufsize must be an integer") - -- if _mswindows: -- if preexec_fn is not None: -- raise ValueError("preexec_fn is not supported on Windows " -- "platforms") -- any_stdio_set = (stdin is not None or stdout is not None or -- stderr is not None) -- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -- if any_stdio_set: -- close_fds = False -- else: -+ class Popen(object): -+ -+ _child_created = False # Set here since __del__ checks it -+ -+ def __init__(self, args, bufsize=-1, executable=None, -+ stdin=None, stdout=None, stderr=None, -+ preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, -+ shell=False, cwd=None, env=None, universal_newlines=False, -+ startupinfo=None, creationflags=0, -+ restore_signals=True, start_new_session=False, -+ pass_fds=()): -+ """Create new Popen instance.""" -+ _cleanup() -+ # Held while anything is calling waitpid before returncode has been -+ # updated to prevent clobbering returncode if wait() or poll() are -+ # called from multiple threads at once. After acquiring the lock, -+ # code must re-check self.returncode to see if another thread just -+ # finished a waitpid() call. -+ self._waitpid_lock = threading.Lock() -+ -+ self._input = None -+ self._communication_started = False -+ if bufsize is None: -+ bufsize = -1 # Restore default -+ if not isinstance(bufsize, int): -+ raise TypeError("bufsize must be an integer") -+ -+ if _mswindows: -+ if preexec_fn is not None: -+ raise ValueError("preexec_fn is not supported on Windows " -+ "platforms") -+ any_stdio_set = (stdin is not None or stdout is not None or -+ stderr is not None) -+ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -+ if any_stdio_set: -+ close_fds = False -+ else: -+ close_fds = True -+ elif close_fds and any_stdio_set: -+ raise ValueError( -+ "close_fds is not supported on Windows platforms" -+ " if you redirect stdin/stdout/stderr") -+ else: -+ # POSIX -+ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: - close_fds = True -- elif close_fds and any_stdio_set: -- raise ValueError( -- "close_fds is not supported on Windows platforms" -- " if you redirect stdin/stdout/stderr") -- else: -- # POSIX -- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -- close_fds = True -- if pass_fds and not close_fds: -- warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) -- close_fds = True -- if startupinfo is not None: -- raise ValueError("startupinfo is only supported on Windows " -- "platforms") -- if creationflags != 0: -- raise ValueError("creationflags is only supported on Windows " -- "platforms") -- -- self.args = args -- self.stdin = None -- self.stdout = None -- self.stderr = None -- self.pid = None -- self.returncode = None -- self.universal_newlines = universal_newlines -- -- # Input and output objects. The general principle is like -- # this: -- # -- # Parent Child -- # ------ ----- -- # p2cwrite ---stdin---> p2cread -- # c2pread <--stdout--- c2pwrite -- # errread <--stderr--- errwrite -- # -- # On POSIX, the child objects are file descriptors. On -- # Windows, these are Windows file handles. The parent objects -- # are file descriptors on both platforms. The parent objects -- # are -1 when not using PIPEs. The child objects are -1 -- # when not redirecting. -- -- (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) = self._get_handles(stdin, stdout, stderr) -- -- # We wrap OS handles *before* launching the child, otherwise a -- # quickly terminating child could make our fds unwrappable -- # (see #8458). -+ if pass_fds and not close_fds: -+ warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) -+ close_fds = True -+ if startupinfo is not None: -+ raise ValueError("startupinfo is only supported on Windows " -+ "platforms") -+ if creationflags != 0: -+ raise ValueError("creationflags is only supported on Windows " -+ "platforms") -+ -+ self.args = args -+ self.stdin = None -+ self.stdout = None -+ self.stderr = None -+ self.pid = None -+ self.returncode = None -+ self.universal_newlines = universal_newlines -+ -+ # Input and output objects. The general principle is like -+ # this: -+ # -+ # Parent Child -+ # ------ ----- -+ # p2cwrite ---stdin---> p2cread -+ # c2pread <--stdout--- c2pwrite -+ # errread <--stderr--- errwrite -+ # -+ # On POSIX, the child objects are file descriptors. On -+ # Windows, these are Windows file handles. The parent objects -+ # are file descriptors on both platforms. The parent objects -+ # are -1 when not using PIPEs. The child objects are -1 -+ # when not redirecting. -+ -+ (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) = self._get_handles(stdin, stdout, stderr) -+ -+ # We wrap OS handles *before* launching the child, otherwise a -+ # quickly terminating child could make our fds unwrappable -+ # (see #8458). -+ -+ if _mswindows: -+ if p2cwrite != -1: -+ p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) -+ if c2pread != -1: -+ c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) -+ if errread != -1: -+ errread = msvcrt.open_osfhandle(errread.Detach(), 0) - -- if _mswindows: - if p2cwrite != -1: -- p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) -+ self.stdin = io.open(p2cwrite, 'wb', bufsize) -+ if universal_newlines: -+ self.stdin = io.TextIOWrapper(self.stdin, write_through=True, -+ line_buffering=(bufsize == 1)) - if c2pread != -1: -- c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) -+ self.stdout = io.open(c2pread, 'rb', bufsize) -+ if universal_newlines: -+ self.stdout = io.TextIOWrapper(self.stdout) - if errread != -1: -- errread = msvcrt.open_osfhandle(errread.Detach(), 0) -- -- if p2cwrite != -1: -- self.stdin = io.open(p2cwrite, 'wb', bufsize) -- if universal_newlines: -- self.stdin = io.TextIOWrapper(self.stdin, write_through=True, -- line_buffering=(bufsize == 1)) -- if c2pread != -1: -- self.stdout = io.open(c2pread, 'rb', bufsize) -- if universal_newlines: -- self.stdout = io.TextIOWrapper(self.stdout) -- if errread != -1: -- self.stderr = io.open(errread, 'rb', bufsize) -- if universal_newlines: -- self.stderr = io.TextIOWrapper(self.stderr) -+ self.stderr = io.open(errread, 'rb', bufsize) -+ if universal_newlines: -+ self.stderr = io.TextIOWrapper(self.stderr) - -- self._closed_child_pipe_fds = False -- try: -- self._execute_child(args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- restore_signals, start_new_session) -- except: -- # Cleanup if the child failed starting. -- for f in filter(None, (self.stdin, self.stdout, self.stderr)): -- try: -- f.close() -- except OSError: -- pass # Ignore EBADF or other errors. -- -- if not self._closed_child_pipe_fds: -- to_close = [] -- if stdin == PIPE: -- to_close.append(p2cread) -- if stdout == PIPE: -- to_close.append(c2pwrite) -- if stderr == PIPE: -- to_close.append(errwrite) -- if hasattr(self, '_devnull'): -- to_close.append(self._devnull) -- for fd in to_close: -+ self._closed_child_pipe_fds = False -+ try: -+ self._execute_child(args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ restore_signals, start_new_session) -+ except: -+ # Cleanup if the child failed starting. -+ for f in filter(None, (self.stdin, self.stdout, self.stderr)): - try: -- os.close(fd) -+ f.close() - except OSError: -- pass -- -- raise -+ pass # Ignore EBADF or other errors. - -+ if not self._closed_child_pipe_fds: -+ to_close = [] -+ if stdin == PIPE: -+ to_close.append(p2cread) -+ if stdout == PIPE: -+ to_close.append(c2pwrite) -+ if stderr == PIPE: -+ to_close.append(errwrite) -+ if hasattr(self, '_devnull'): -+ to_close.append(self._devnull) -+ for fd in to_close: -+ try: -+ os.close(fd) -+ except OSError: -+ pass - -- def _translate_newlines(self, data, encoding): -- data = data.decode(encoding) -- return data.replace("\r\n", "\n").replace("\r", "\n") -- -- def __enter__(self): -- return self -- -- def __exit__(self, type, value, traceback): -- if self.stdout: -- self.stdout.close() -- if self.stderr: -- self.stderr.close() -- try: # Flushing a BufferedWriter may raise an error -- if self.stdin: -- self.stdin.close() -- finally: -- # Wait for the process to terminate, to avoid zombies. -- self.wait() -- -- def __del__(self, _maxsize=sys.maxsize): -- if not self._child_created: -- # We didn't get to successfully create a child process. -- return -- # In case the child hasn't been waited on, check if it's done. -- self._internal_poll(_deadstate=_maxsize) -- if self.returncode is None and _active is not None: -- # Child is still running, keep us alive until we can wait on it. -- _active.append(self) -- -- def _get_devnull(self): -- if not hasattr(self, '_devnull'): -- self._devnull = os.open(os.devnull, os.O_RDWR) -- return self._devnull -- -- def _stdin_write(self, input): -- if input: -- try: -- self.stdin.write(input) -- except BrokenPipeError: -- # communicate() must ignore broken pipe error -- pass -- except OSError as e: -- if e.errno == errno.EINVAL and self.poll() is not None: -- # Issue #19612: On Windows, stdin.write() fails with EINVAL -- # if the process already exited before the write -- pass -- else: -- raise -- self.stdin.close() -+ raise - -- def communicate(self, input=None, timeout=None): -- """Interact with process: Send data to stdin. Read data from -- stdout and stderr, until end-of-file is reached. Wait for -- process to terminate. -- -- The optional "input" argument should be data to be sent to the -- child process (if self.universal_newlines is True, this should -- be a string; if it is False, "input" should be bytes), or -- None, if no data should be sent to the child. - -- communicate() returns a tuple (stdout, stderr). These will be -- bytes or, if self.universal_newlines was True, a string. -- """ -+ def _translate_newlines(self, data, encoding): -+ data = data.decode(encoding) -+ return data.replace("\r\n", "\n").replace("\r", "\n") - -- if self._communication_started and input: -- raise ValueError("Cannot send input after starting communication") -+ def __enter__(self): -+ return self - -- # Optimization: If we are not worried about timeouts, we haven't -- # started communicating, and we have one or zero pipes, using select() -- # or threads is unnecessary. -- if (timeout is None and not self._communication_started and -- [self.stdin, self.stdout, self.stderr].count(None) >= 2): -- stdout = None -- stderr = None -- if self.stdin: -- self._stdin_write(input) -- elif self.stdout: -- stdout = self.stdout.read() -+ def __exit__(self, type, value, traceback): -+ if self.stdout: - self.stdout.close() -- elif self.stderr: -- stderr = self.stderr.read() -+ if self.stderr: - self.stderr.close() -- self.wait() -- else: -- if timeout is not None: -- endtime = _time() + timeout -- else: -- endtime = None -- -- try: -- stdout, stderr = self._communicate(input, endtime, timeout) -+ try: # Flushing a BufferedWriter may raise an error -+ if self.stdin: -+ self.stdin.close() - finally: -- self._communication_started = True -+ # Wait for the process to terminate, to avoid zombies. -+ self.wait() - -- sts = self.wait(timeout=self._remaining_time(endtime)) -+ def __del__(self, _maxsize=sys.maxsize): -+ if not self._child_created: -+ # We didn't get to successfully create a child process. -+ return -+ # In case the child hasn't been waited on, check if it's done. -+ self._internal_poll(_deadstate=_maxsize) -+ if self.returncode is None and _active is not None: -+ # Child is still running, keep us alive until we can wait on it. -+ _active.append(self) -+ -+ def _get_devnull(self): -+ if not hasattr(self, '_devnull'): -+ self._devnull = os.open(os.devnull, os.O_RDWR) -+ return self._devnull - -- return (stdout, stderr) -+ def _stdin_write(self, input): -+ if input: -+ try: -+ self.stdin.write(input) -+ except BrokenPipeError: -+ # communicate() must ignore broken pipe error -+ pass -+ except OSError as e: -+ if e.errno == errno.EINVAL and self.poll() is not None: -+ # Issue #19612: On Windows, stdin.write() fails with EINVAL -+ # if the process already exited before the write -+ pass -+ else: -+ raise -+ self.stdin.close() - -+ def communicate(self, input=None, timeout=None): -+ """Interact with process: Send data to stdin. Read data from -+ stdout and stderr, until end-of-file is reached. Wait for -+ process to terminate. -+ -+ The optional "input" argument should be data to be sent to the -+ child process (if self.universal_newlines is True, this should -+ be a string; if it is False, "input" should be bytes), or -+ None, if no data should be sent to the child. - -- def poll(self): -- return self._internal_poll() -+ communicate() returns a tuple (stdout, stderr). These will be -+ bytes or, if self.universal_newlines was True, a string. -+ """ - -+ if self._communication_started and input: -+ raise ValueError("Cannot send input after starting communication") - -- def _remaining_time(self, endtime): -- """Convenience for _communicate when computing timeouts.""" -- if endtime is None: -- return None -- else: -- return endtime - _time() -+ # Optimization: If we are not worried about timeouts, we haven't -+ # started communicating, and we have one or zero pipes, using select() -+ # or threads is unnecessary. -+ if (timeout is None and not self._communication_started and -+ [self.stdin, self.stdout, self.stderr].count(None) >= 2): -+ stdout = None -+ stderr = None -+ if self.stdin: -+ self._stdin_write(input) -+ elif self.stdout: -+ stdout = self.stdout.read() -+ self.stdout.close() -+ elif self.stderr: -+ stderr = self.stderr.read() -+ self.stderr.close() -+ self.wait() -+ else: -+ if timeout is not None: -+ endtime = _time() + timeout -+ else: -+ endtime = None - -+ try: -+ stdout, stderr = self._communicate(input, endtime, timeout) -+ finally: -+ self._communication_started = True - -- def _check_timeout(self, endtime, orig_timeout): -- """Convenience for checking if a timeout has expired.""" -- if endtime is None: -- return -- if _time() > endtime: -- raise TimeoutExpired(self.args, orig_timeout) -+ sts = self.wait(timeout=self._remaining_time(endtime)) - -+ return (stdout, stderr) - -- if _mswindows: -- # -- # Windows methods -- # -- def _get_handles(self, stdin, stdout, stderr): -- """Construct and return tuple with IO objects: -- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -- """ -- if stdin is None and stdout is None and stderr is None: -- return (-1, -1, -1, -1, -1, -1) - -- p2cread, p2cwrite = -1, -1 -- c2pread, c2pwrite = -1, -1 -- errread, errwrite = -1, -1 -- -- if stdin is None: -- p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) -- if p2cread is None: -- p2cread, _ = _winapi.CreatePipe(None, 0) -- p2cread = Handle(p2cread) -- _winapi.CloseHandle(_) -- elif stdin == PIPE: -- p2cread, p2cwrite = _winapi.CreatePipe(None, 0) -- p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) -- elif stdin == DEVNULL: -- p2cread = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stdin, int): -- p2cread = msvcrt.get_osfhandle(stdin) -- else: -- # Assuming file-like object -- p2cread = msvcrt.get_osfhandle(stdin.fileno()) -- p2cread = self._make_inheritable(p2cread) -- -- if stdout is None: -- c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) -- if c2pwrite is None: -- _, c2pwrite = _winapi.CreatePipe(None, 0) -- c2pwrite = Handle(c2pwrite) -- _winapi.CloseHandle(_) -- elif stdout == PIPE: -- c2pread, c2pwrite = _winapi.CreatePipe(None, 0) -- c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) -- elif stdout == DEVNULL: -- c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stdout, int): -- c2pwrite = msvcrt.get_osfhandle(stdout) -- else: -- # Assuming file-like object -- c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) -- c2pwrite = self._make_inheritable(c2pwrite) -- -- if stderr is None: -- errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) -- if errwrite is None: -- _, errwrite = _winapi.CreatePipe(None, 0) -- errwrite = Handle(errwrite) -- _winapi.CloseHandle(_) -- elif stderr == PIPE: -- errread, errwrite = _winapi.CreatePipe(None, 0) -- errread, errwrite = Handle(errread), Handle(errwrite) -- elif stderr == STDOUT: -- errwrite = c2pwrite -- elif stderr == DEVNULL: -- errwrite = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stderr, int): -- errwrite = msvcrt.get_osfhandle(stderr) -- else: -- # Assuming file-like object -- errwrite = msvcrt.get_osfhandle(stderr.fileno()) -- errwrite = self._make_inheritable(errwrite) -- -- return (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- -- def _make_inheritable(self, handle): -- """Return a duplicate of handle, which is inheritable""" -- h = _winapi.DuplicateHandle( -- _winapi.GetCurrentProcess(), handle, -- _winapi.GetCurrentProcess(), 0, 1, -- _winapi.DUPLICATE_SAME_ACCESS) -- return Handle(h) -- -- -- def _execute_child(self, args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- unused_restore_signals, unused_start_new_session): -- """Execute program (MS Windows version)""" -- -- assert not pass_fds, "pass_fds not supported on Windows." -- -- if not isinstance(args, str): -- args = list2cmdline(args) -- -- # Process startup details -- if startupinfo is None: -- startupinfo = STARTUPINFO() -- if -1 not in (p2cread, c2pwrite, errwrite): -- startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES -- startupinfo.hStdInput = p2cread -- startupinfo.hStdOutput = c2pwrite -- startupinfo.hStdError = errwrite -- -- if shell: -- startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW -- startupinfo.wShowWindow = _winapi.SW_HIDE -- comspec = os.environ.get("COMSPEC", "cmd.exe") -- args = '{} /c "{}"'.format (comspec, args) -+ def poll(self): -+ return self._internal_poll() - -- # Start the process -- try: -- hp, ht, pid, tid = _winapi.CreateProcess(executable, args, -- # no special security -- None, None, -- int(not close_fds), -- creationflags, -- env, -- cwd, -- startupinfo) -- finally: -- # Child is launched. Close the parent's copy of those pipe -- # handles that only the child should have open. You need -- # to make sure that no handles to the write end of the -- # output pipe are maintained in this process or else the -- # pipe will not close when the child process exits and the -- # ReadFile will hang. -- if p2cread != -1: -- p2cread.Close() -- if c2pwrite != -1: -- c2pwrite.Close() -- if errwrite != -1: -- errwrite.Close() -- if hasattr(self, '_devnull'): -- os.close(self._devnull) -- -- # Retain the process handle, but close the thread handle -- self._child_created = True -- self._handle = Handle(hp) -- self.pid = pid -- _winapi.CloseHandle(ht) -- -- def _internal_poll(self, _deadstate=None, -- _WaitForSingleObject=_winapi.WaitForSingleObject, -- _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, -- _GetExitCodeProcess=_winapi.GetExitCodeProcess): -- """Check if child process has terminated. Returns returncode -- attribute. - -- This method is called by __del__, so it can only refer to objects -- in its local scope. -+ def _remaining_time(self, endtime): -+ """Convenience for _communicate when computing timeouts.""" -+ if endtime is None: -+ return None -+ else: -+ return endtime - _time() - -- """ -- if self.returncode is None: -- if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: -- self.returncode = _GetExitCodeProcess(self._handle) -- return self.returncode - -+ def _check_timeout(self, endtime, orig_timeout): -+ """Convenience for checking if a timeout has expired.""" -+ if endtime is None: -+ return -+ if _time() > endtime: -+ raise TimeoutExpired(self.args, orig_timeout) - -- def wait(self, timeout=None, endtime=None): -- """Wait for child process to terminate. Returns returncode -- attribute.""" -- if endtime is not None: -- timeout = self._remaining_time(endtime) -- if timeout is None: -- timeout_millis = _winapi.INFINITE -- else: -- timeout_millis = int(timeout * 1000) -- if self.returncode is None: -- result = _winapi.WaitForSingleObject(self._handle, -- timeout_millis) -- if result == _winapi.WAIT_TIMEOUT: -- raise TimeoutExpired(self.args, timeout) -- self.returncode = _winapi.GetExitCodeProcess(self._handle) -- return self.returncode -- -- -- def _readerthread(self, fh, buffer): -- buffer.append(fh.read()) -- fh.close() -- -- -- def _communicate(self, input, endtime, orig_timeout): -- # Start reader threads feeding into a list hanging off of this -- # object, unless they've already been started. -- if self.stdout and not hasattr(self, "_stdout_buff"): -- self._stdout_buff = [] -- self.stdout_thread = \ -- threading.Thread(target=self._readerthread, -- args=(self.stdout, self._stdout_buff)) -- self.stdout_thread.daemon = True -- self.stdout_thread.start() -- if self.stderr and not hasattr(self, "_stderr_buff"): -- self._stderr_buff = [] -- self.stderr_thread = \ -- threading.Thread(target=self._readerthread, -- args=(self.stderr, self._stderr_buff)) -- self.stderr_thread.daemon = True -- self.stderr_thread.start() -- -- if self.stdin: -- self._stdin_write(input) -- -- # Wait for the reader threads, or time out. If we time out, the -- # threads remain reading and the fds left open in case the user -- # calls communicate again. -- if self.stdout is not None: -- self.stdout_thread.join(self._remaining_time(endtime)) -- if self.stdout_thread.is_alive(): -- raise TimeoutExpired(self.args, orig_timeout) -- if self.stderr is not None: -- self.stderr_thread.join(self._remaining_time(endtime)) -- if self.stderr_thread.is_alive(): -- raise TimeoutExpired(self.args, orig_timeout) -- -- # Collect the output from and close both pipes, now that we know -- # both have been read successfully. -- stdout = None -- stderr = None -- if self.stdout: -- stdout = self._stdout_buff -- self.stdout.close() -- if self.stderr: -- stderr = self._stderr_buff -- self.stderr.close() - -- # All data exchanged. Translate lists into strings. -- if stdout is not None: -- stdout = stdout[0] -- if stderr is not None: -- stderr = stderr[0] -+ if _mswindows: -+ # -+ # Windows methods -+ # -+ def _get_handles(self, stdin, stdout, stderr): -+ """Construct and return tuple with IO objects: -+ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -+ """ -+ if stdin is None and stdout is None and stderr is None: -+ return (-1, -1, -1, -1, -1, -1) -+ -+ p2cread, p2cwrite = -1, -1 -+ c2pread, c2pwrite = -1, -1 -+ errread, errwrite = -1, -1 -+ -+ if stdin is None: -+ p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) -+ if p2cread is None: -+ p2cread, _ = _winapi.CreatePipe(None, 0) -+ p2cread = Handle(p2cread) -+ _winapi.CloseHandle(_) -+ elif stdin == PIPE: -+ p2cread, p2cwrite = _winapi.CreatePipe(None, 0) -+ p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) -+ elif stdin == DEVNULL: -+ p2cread = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stdin, int): -+ p2cread = msvcrt.get_osfhandle(stdin) -+ else: -+ # Assuming file-like object -+ p2cread = msvcrt.get_osfhandle(stdin.fileno()) -+ p2cread = self._make_inheritable(p2cread) -+ -+ if stdout is None: -+ c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) -+ if c2pwrite is None: -+ _, c2pwrite = _winapi.CreatePipe(None, 0) -+ c2pwrite = Handle(c2pwrite) -+ _winapi.CloseHandle(_) -+ elif stdout == PIPE: -+ c2pread, c2pwrite = _winapi.CreatePipe(None, 0) -+ c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) -+ elif stdout == DEVNULL: -+ c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stdout, int): -+ c2pwrite = msvcrt.get_osfhandle(stdout) -+ else: -+ # Assuming file-like object -+ c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) -+ c2pwrite = self._make_inheritable(c2pwrite) -+ -+ if stderr is None: -+ errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) -+ if errwrite is None: -+ _, errwrite = _winapi.CreatePipe(None, 0) -+ errwrite = Handle(errwrite) -+ _winapi.CloseHandle(_) -+ elif stderr == PIPE: -+ errread, errwrite = _winapi.CreatePipe(None, 0) -+ errread, errwrite = Handle(errread), Handle(errwrite) -+ elif stderr == STDOUT: -+ errwrite = c2pwrite -+ elif stderr == DEVNULL: -+ errwrite = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stderr, int): -+ errwrite = msvcrt.get_osfhandle(stderr) -+ else: -+ # Assuming file-like object -+ errwrite = msvcrt.get_osfhandle(stderr.fileno()) -+ errwrite = self._make_inheritable(errwrite) -+ -+ return (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) -+ -+ -+ def _make_inheritable(self, handle): -+ """Return a duplicate of handle, which is inheritable""" -+ h = _winapi.DuplicateHandle( -+ _winapi.GetCurrentProcess(), handle, -+ _winapi.GetCurrentProcess(), 0, 1, -+ _winapi.DUPLICATE_SAME_ACCESS) -+ return Handle(h) -+ -+ -+ def _execute_child(self, args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ unused_restore_signals, unused_start_new_session): -+ """Execute program (MS Windows version)""" -+ -+ assert not pass_fds, "pass_fds not supported on Windows." -+ -+ if not isinstance(args, str): -+ args = list2cmdline(args) -+ -+ # Process startup details -+ if startupinfo is None: -+ startupinfo = STARTUPINFO() -+ if -1 not in (p2cread, c2pwrite, errwrite): -+ startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES -+ startupinfo.hStdInput = p2cread -+ startupinfo.hStdOutput = c2pwrite -+ startupinfo.hStdError = errwrite -+ -+ if shell: -+ startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW -+ startupinfo.wShowWindow = _winapi.SW_HIDE -+ comspec = os.environ.get("COMSPEC", "cmd.exe") -+ args = '{} /c "{}"'.format (comspec, args) - -- return (stdout, stderr) -+ # Start the process -+ try: -+ hp, ht, pid, tid = _winapi.CreateProcess(executable, args, -+ # no special security -+ None, None, -+ int(not close_fds), -+ creationflags, -+ env, -+ cwd, -+ startupinfo) -+ finally: -+ # Child is launched. Close the parent's copy of those pipe -+ # handles that only the child should have open. You need -+ # to make sure that no handles to the write end of the -+ # output pipe are maintained in this process or else the -+ # pipe will not close when the child process exits and the -+ # ReadFile will hang. -+ if p2cread != -1: -+ p2cread.Close() -+ if c2pwrite != -1: -+ c2pwrite.Close() -+ if errwrite != -1: -+ errwrite.Close() -+ if hasattr(self, '_devnull'): -+ os.close(self._devnull) -+ -+ # Retain the process handle, but close the thread handle -+ self._child_created = True -+ self._handle = Handle(hp) -+ self.pid = pid -+ _winapi.CloseHandle(ht) -+ -+ def _internal_poll(self, _deadstate=None, -+ _WaitForSingleObject=_winapi.WaitForSingleObject, -+ _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, -+ _GetExitCodeProcess=_winapi.GetExitCodeProcess): -+ """Check if child process has terminated. Returns returncode -+ attribute. -+ -+ This method is called by __del__, so it can only refer to objects -+ in its local scope. -+ -+ """ -+ if self.returncode is None: -+ if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: -+ self.returncode = _GetExitCodeProcess(self._handle) -+ return self.returncode - -- def send_signal(self, sig): -- """Send a signal to the process.""" -- # Don't signal a process that we know has already died. -- if self.returncode is not None: -- return -- if sig == signal.SIGTERM: -- self.terminate() -- elif sig == signal.CTRL_C_EVENT: -- os.kill(self.pid, signal.CTRL_C_EVENT) -- elif sig == signal.CTRL_BREAK_EVENT: -- os.kill(self.pid, signal.CTRL_BREAK_EVENT) -- else: -- raise ValueError("Unsupported signal: {}".format(sig)) - -- def terminate(self): -- """Terminates the process.""" -- # Don't terminate a process that we know has already died. -- if self.returncode is not None: -- return -- try: -- _winapi.TerminateProcess(self._handle, 1) -- except PermissionError: -- # ERROR_ACCESS_DENIED (winerror 5) is received when the -- # process already died. -- rc = _winapi.GetExitCodeProcess(self._handle) -- if rc == _winapi.STILL_ACTIVE: -- raise -- self.returncode = rc -+ def wait(self, timeout=None, endtime=None): -+ """Wait for child process to terminate. Returns returncode -+ attribute.""" -+ if endtime is not None: -+ timeout = self._remaining_time(endtime) -+ if timeout is None: -+ timeout_millis = _winapi.INFINITE -+ else: -+ timeout_millis = int(timeout * 1000) -+ if self.returncode is None: -+ result = _winapi.WaitForSingleObject(self._handle, -+ timeout_millis) -+ if result == _winapi.WAIT_TIMEOUT: -+ raise TimeoutExpired(self.args, timeout) -+ self.returncode = _winapi.GetExitCodeProcess(self._handle) -+ return self.returncode - -- kill = terminate - -- else: -- # -- # POSIX methods -- # -- def _get_handles(self, stdin, stdout, stderr): -- """Construct and return tuple with IO objects: -- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -- """ -- p2cread, p2cwrite = -1, -1 -- c2pread, c2pwrite = -1, -1 -- errread, errwrite = -1, -1 -- -- if stdin is None: -- pass -- elif stdin == PIPE: -- p2cread, p2cwrite = os.pipe() -- elif stdin == DEVNULL: -- p2cread = self._get_devnull() -- elif isinstance(stdin, int): -- p2cread = stdin -- else: -- # Assuming file-like object -- p2cread = stdin.fileno() -+ def _readerthread(self, fh, buffer): -+ buffer.append(fh.read()) -+ fh.close() -+ -+ -+ def _communicate(self, input, endtime, orig_timeout): -+ # Start reader threads feeding into a list hanging off of this -+ # object, unless they've already been started. -+ if self.stdout and not hasattr(self, "_stdout_buff"): -+ self._stdout_buff = [] -+ self.stdout_thread = \ -+ threading.Thread(target=self._readerthread, -+ args=(self.stdout, self._stdout_buff)) -+ self.stdout_thread.daemon = True -+ self.stdout_thread.start() -+ if self.stderr and not hasattr(self, "_stderr_buff"): -+ self._stderr_buff = [] -+ self.stderr_thread = \ -+ threading.Thread(target=self._readerthread, -+ args=(self.stderr, self._stderr_buff)) -+ self.stderr_thread.daemon = True -+ self.stderr_thread.start() -+ -+ if self.stdin: -+ self._stdin_write(input) -+ -+ # Wait for the reader threads, or time out. If we time out, the -+ # threads remain reading and the fds left open in case the user -+ # calls communicate again. -+ if self.stdout is not None: -+ self.stdout_thread.join(self._remaining_time(endtime)) -+ if self.stdout_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) -+ if self.stderr is not None: -+ self.stderr_thread.join(self._remaining_time(endtime)) -+ if self.stderr_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) - -- if stdout is None: -- pass -- elif stdout == PIPE: -- c2pread, c2pwrite = os.pipe() -- elif stdout == DEVNULL: -- c2pwrite = self._get_devnull() -- elif isinstance(stdout, int): -- c2pwrite = stdout -- else: -- # Assuming file-like object -- c2pwrite = stdout.fileno() -+ # Collect the output from and close both pipes, now that we know -+ # both have been read successfully. -+ stdout = None -+ stderr = None -+ if self.stdout: -+ stdout = self._stdout_buff -+ self.stdout.close() -+ if self.stderr: -+ stderr = self._stderr_buff -+ self.stderr.close() - -- if stderr is None: -- pass -- elif stderr == PIPE: -- errread, errwrite = os.pipe() -- elif stderr == STDOUT: -- errwrite = c2pwrite -- elif stderr == DEVNULL: -- errwrite = self._get_devnull() -- elif isinstance(stderr, int): -- errwrite = stderr -- else: -- # Assuming file-like object -- errwrite = stderr.fileno() -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = stdout[0] -+ if stderr is not None: -+ stderr = stderr[0] - -- return (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- -- def _execute_child(self, args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- restore_signals, start_new_session): -- """Execute program (POSIX version)""" -+ return (stdout, stderr) - -- if isinstance(args, (str, bytes)): -- args = [args] -- else: -- args = list(args) -+ def send_signal(self, sig): -+ """Send a signal to the process.""" -+ # Don't signal a process that we know has already died. -+ if self.returncode is not None: -+ return -+ if sig == signal.SIGTERM: -+ self.terminate() -+ elif sig == signal.CTRL_C_EVENT: -+ os.kill(self.pid, signal.CTRL_C_EVENT) -+ elif sig == signal.CTRL_BREAK_EVENT: -+ os.kill(self.pid, signal.CTRL_BREAK_EVENT) -+ else: -+ raise ValueError("Unsupported signal: {}".format(sig)) - -- if shell: -- args = ["/bin/sh", "-c"] + args -- if executable: -- args[0] = executable -- -- if executable is None: -- executable = args[0] -- orig_executable = executable -- -- # For transferring possible exec failure from child to parent. -- # Data format: "exception name:hex errno:description" -- # Pickle is not used; it is complex and involves memory allocation. -- errpipe_read, errpipe_write = os.pipe() -- # errpipe_write must not be in the standard io 0, 1, or 2 fd range. -- low_fds_to_close = [] -- while errpipe_write < 3: -- low_fds_to_close.append(errpipe_write) -- errpipe_write = os.dup(errpipe_write) -- for low_fd in low_fds_to_close: -- os.close(low_fd) -- try: -+ def terminate(self): -+ """Terminates the process.""" -+ # Don't terminate a process that we know has already died. -+ if self.returncode is not None: -+ return - try: -- # We must avoid complex work that could involve -- # malloc or free in the child process to avoid -- # potential deadlocks, thus we do all this here. -- # and pass it to fork_exec() -- -- if env is not None: -- env_list = [os.fsencode(k) + b'=' + os.fsencode(v) -- for k, v in env.items()] -- else: -- env_list = None # Use execv instead of execve. -- executable = os.fsencode(executable) -- if os.path.dirname(executable): -- executable_list = (executable,) -- else: -- # This matches the behavior of os._execvpe(). -- executable_list = tuple( -- os.path.join(os.fsencode(dir), executable) -- for dir in os.get_exec_path(env)) -- fds_to_keep = set(pass_fds) -- fds_to_keep.add(errpipe_write) -- self.pid = _posixsubprocess.fork_exec( -- args, executable_list, -- close_fds, sorted(fds_to_keep), cwd, env_list, -- p2cread, p2cwrite, c2pread, c2pwrite, -- errread, errwrite, -- errpipe_read, errpipe_write, -- restore_signals, start_new_session, preexec_fn) -- self._child_created = True -- finally: -- # be sure the FD is closed no matter what -- os.close(errpipe_write) -+ _winapi.TerminateProcess(self._handle, 1) -+ except PermissionError: -+ # ERROR_ACCESS_DENIED (winerror 5) is received when the -+ # process already died. -+ rc = _winapi.GetExitCodeProcess(self._handle) -+ if rc == _winapi.STILL_ACTIVE: -+ raise -+ self.returncode = rc - -- # self._devnull is not always defined. -- devnull_fd = getattr(self, '_devnull', None) -- if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: -- os.close(p2cread) -- if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: -- os.close(c2pwrite) -- if errwrite != -1 and errread != -1 and errwrite != devnull_fd: -- os.close(errwrite) -- if devnull_fd is not None: -- os.close(devnull_fd) -- # Prevent a double close of these fds from __init__ on error. -- self._closed_child_pipe_fds = True - -- # Wait for exec to fail or succeed; possibly raising an -- # exception (limited in size) -- errpipe_data = bytearray() -- while True: -- part = os.read(errpipe_read, 50000) -- errpipe_data += part -- if not part or len(errpipe_data) > 50000: -- break -- finally: -- # be sure the FD is closed no matter what -- os.close(errpipe_read) -+ kill = terminate - -- if errpipe_data: -- try: -- os.waitpid(self.pid, 0) -- except ChildProcessError: -+ else: -+ # -+ # POSIX methods -+ # -+ def _get_handles(self, stdin, stdout, stderr): -+ """Construct and return tuple with IO objects: -+ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -+ """ -+ p2cread, p2cwrite = -1, -1 -+ c2pread, c2pwrite = -1, -1 -+ errread, errwrite = -1, -1 -+ -+ if stdin is None: - pass -- try: -- exception_name, hex_errno, err_msg = ( -- errpipe_data.split(b':', 2)) -- except ValueError: -- exception_name = b'SubprocessError' -- hex_errno = b'0' -- err_msg = (b'Bad exception data from child: ' + -- repr(errpipe_data)) -- child_exception_type = getattr( -- builtins, exception_name.decode('ascii'), -- SubprocessError) -- err_msg = err_msg.decode(errors="surrogatepass") -- if issubclass(child_exception_type, OSError) and hex_errno: -- errno_num = int(hex_errno, 16) -- child_exec_never_called = (err_msg == "noexec") -- if child_exec_never_called: -- err_msg = "" -- if errno_num != 0: -- err_msg = os.strerror(errno_num) -- if errno_num == errno.ENOENT: -- if child_exec_never_called: -- # The error must be from chdir(cwd). -- err_msg += ': ' + repr(cwd) -- else: -- err_msg += ': ' + repr(orig_executable) -- raise child_exception_type(errno_num, err_msg) -- raise child_exception_type(err_msg) -- -- -- def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, -- _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, -- _WEXITSTATUS=os.WEXITSTATUS): -- """All callers to this function MUST hold self._waitpid_lock.""" -- # This method is called (indirectly) by __del__, so it cannot -- # refer to anything outside of its local scope. -- if _WIFSIGNALED(sts): -- self.returncode = -_WTERMSIG(sts) -- elif _WIFEXITED(sts): -- self.returncode = _WEXITSTATUS(sts) -- else: -- # Should never happen -- raise SubprocessError("Unknown child exit status!") -+ elif stdin == PIPE: -+ p2cread, p2cwrite = os.pipe() -+ elif stdin == DEVNULL: -+ p2cread = self._get_devnull() -+ elif isinstance(stdin, int): -+ p2cread = stdin -+ else: -+ # Assuming file-like object -+ p2cread = stdin.fileno() - -+ if stdout is None: -+ pass -+ elif stdout == PIPE: -+ c2pread, c2pwrite = os.pipe() -+ elif stdout == DEVNULL: -+ c2pwrite = self._get_devnull() -+ elif isinstance(stdout, int): -+ c2pwrite = stdout -+ else: -+ # Assuming file-like object -+ c2pwrite = stdout.fileno() -+ -+ if stderr is None: -+ pass -+ elif stderr == PIPE: -+ errread, errwrite = os.pipe() -+ elif stderr == STDOUT: -+ errwrite = c2pwrite -+ elif stderr == DEVNULL: -+ errwrite = self._get_devnull() -+ elif isinstance(stderr, int): -+ errwrite = stderr -+ else: -+ # Assuming file-like object -+ errwrite = stderr.fileno() + # XXX This function is only used by multiprocessing and the test suite, + # but it's here so that it can be imported when Python is compiled without + # threads. +@@ -842,6 +847,9 @@ + restore_signals=True, start_new_session=False, + pass_fds=()): + """Create new Popen instance.""" ++ if not supported: ++ raise RuntimeError("subprocesses are not supported on this platform.") ++ + _cleanup() + # Held while anything is calling waitpid before returncode has been + # updated to prevent clobbering returncode if wait() or poll() are +@@ -1560,7 +1568,7 @@ + raise SubprocessError("Unknown child exit status!") + - def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): -- """Check if child process has terminated. Returns returncode -- attribute. -+ return (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) -+ -+ -+ def _execute_child(self, args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ restore_signals, start_new_session): -+ """Execute program (POSIX version)""" - -- This method is called by __del__, so it cannot reference anything -- outside of the local scope (nor can any methods it calls). -+ if isinstance(args, (str, bytes)): -+ args = [args] -+ else: -+ args = list(args) - -- """ -- if self.returncode is None: -- if not self._waitpid_lock.acquire(False): -- # Something else is busy calling waitpid. Don't allow two -- # at once. We know nothing yet. -- return None -+ if shell: -+ args = ["/bin/sh", "-c"] + args -+ if executable: -+ args[0] = executable -+ -+ if executable is None: -+ executable = args[0] -+ orig_executable = executable -+ -+ # For transferring possible exec failure from child to parent. -+ # Data format: "exception name:hex errno:description" -+ # Pickle is not used; it is complex and involves memory allocation. -+ errpipe_read, errpipe_write = os.pipe() -+ # errpipe_write must not be in the standard io 0, 1, or 2 fd range. -+ low_fds_to_close = [] -+ while errpipe_write < 3: -+ low_fds_to_close.append(errpipe_write) -+ errpipe_write = os.dup(errpipe_write) -+ for low_fd in low_fds_to_close: -+ os.close(low_fd) - try: -- if self.returncode is not None: -- return self.returncode # Another thread waited. -- pid, sts = _waitpid(self.pid, _WNOHANG) -- if pid == self.pid: -- self._handle_exitstatus(sts) -- except OSError as e: -- if _deadstate is not None: -- self.returncode = _deadstate -- elif e.errno == _ECHILD: -- # This happens if SIGCLD is set to be ignored or -- # waiting for child processes has otherwise been -- # disabled for our process. This child is dead, we -- # can't get the status. -- # http://bugs.python.org/issue15756 -- self.returncode = 0 -+ try: -+ # We must avoid complex work that could involve -+ # malloc or free in the child process to avoid -+ # potential deadlocks, thus we do all this here. -+ # and pass it to fork_exec() -+ -+ if env is not None: -+ env_list = [os.fsencode(k) + b'=' + os.fsencode(v) -+ for k, v in env.items()] -+ else: -+ env_list = None # Use execv instead of execve. -+ executable = os.fsencode(executable) -+ if os.path.dirname(executable): -+ executable_list = (executable,) -+ else: -+ # This matches the behavior of os._execvpe(). -+ executable_list = tuple( -+ os.path.join(os.fsencode(dir), executable) -+ for dir in os.get_exec_path(env)) -+ fds_to_keep = set(pass_fds) -+ fds_to_keep.add(errpipe_write) -+ self.pid = _posixsubprocess.fork_exec( -+ args, executable_list, -+ close_fds, sorted(fds_to_keep), cwd, env_list, -+ p2cread, p2cwrite, c2pread, c2pwrite, -+ errread, errwrite, -+ errpipe_read, errpipe_write, -+ restore_signals, start_new_session, preexec_fn) -+ self._child_created = True -+ finally: -+ # be sure the FD is closed no matter what -+ os.close(errpipe_write) -+ -+ # self._devnull is not always defined. -+ devnull_fd = getattr(self, '_devnull', None) -+ if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: -+ os.close(p2cread) -+ if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: -+ os.close(c2pwrite) -+ if errwrite != -1 and errread != -1 and errwrite != devnull_fd: -+ os.close(errwrite) -+ if devnull_fd is not None: -+ os.close(devnull_fd) -+ # Prevent a double close of these fds from __init__ on error. -+ self._closed_child_pipe_fds = True -+ -+ # Wait for exec to fail or succeed; possibly raising an -+ # exception (limited in size) -+ errpipe_data = bytearray() -+ while True: -+ part = os.read(errpipe_read, 50000) -+ errpipe_data += part -+ if not part or len(errpipe_data) > 50000: -+ break - finally: -- self._waitpid_lock.release() -- return self.returncode -- -+ # be sure the FD is closed no matter what -+ os.close(errpipe_read) - -- def _try_wait(self, wait_flags): -- """All callers to this function MUST hold self._waitpid_lock.""" -- try: -- (pid, sts) = os.waitpid(self.pid, wait_flags) -- except ChildProcessError: -- # This happens if SIGCLD is set to be ignored or waiting -- # for child processes has otherwise been disabled for our -- # process. This child is dead, we can't get the status. -- pid = self.pid -- sts = 0 -- return (pid, sts) -+ if errpipe_data: -+ try: -+ os.waitpid(self.pid, 0) -+ except ChildProcessError: -+ pass -+ try: -+ exception_name, hex_errno, err_msg = ( -+ errpipe_data.split(b':', 2)) -+ except ValueError: -+ exception_name = b'SubprocessError' -+ hex_errno = b'0' -+ err_msg = (b'Bad exception data from child: ' + -+ repr(errpipe_data)) -+ child_exception_type = getattr( -+ builtins, exception_name.decode('ascii'), -+ SubprocessError) -+ err_msg = err_msg.decode(errors="surrogatepass") -+ if issubclass(child_exception_type, OSError) and hex_errno: -+ errno_num = int(hex_errno, 16) -+ child_exec_never_called = (err_msg == "noexec") -+ if child_exec_never_called: -+ err_msg = "" -+ if errno_num != 0: -+ err_msg = os.strerror(errno_num) -+ if errno_num == errno.ENOENT: -+ if child_exec_never_called: -+ # The error must be from chdir(cwd). -+ err_msg += ': ' + repr(cwd) -+ else: -+ err_msg += ': ' + repr(orig_executable) -+ raise child_exception_type(errno_num, err_msg) -+ raise child_exception_type(err_msg) -+ -+ -+ def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, -+ _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, -+ _WEXITSTATUS=os.WEXITSTATUS): -+ """All callers to this function MUST hold self._waitpid_lock.""" -+ # This method is called (indirectly) by __del__, so it cannot -+ # refer to anything outside of its local scope. -+ if _WIFSIGNALED(sts): -+ self.returncode = -_WTERMSIG(sts) -+ elif _WIFEXITED(sts): -+ self.returncode = _WEXITSTATUS(sts) -+ else: -+ # Should never happen -+ raise SubprocessError("Unknown child exit status!") - - -- def wait(self, timeout=None, endtime=None): -- """Wait for child process to terminate. Returns returncode -- attribute.""" -- if self.returncode is not None: -+ def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -+ _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): -+ """Check if child process has terminated. Returns returncode -+ attribute. -+ -+ This method is called by __del__, so it cannot reference anything -+ outside of the local scope (nor can any methods it calls). -+ -+ """ -+ if self.returncode is None: -+ if not self._waitpid_lock.acquire(False): -+ # Something else is busy calling waitpid. Don't allow two -+ # at once. We know nothing yet. -+ return None -+ try: -+ if self.returncode is not None: -+ return self.returncode # Another thread waited. -+ pid, sts = _waitpid(self.pid, _WNOHANG) -+ if pid == self.pid: -+ self._handle_exitstatus(sts) -+ except OSError as e: -+ if _deadstate is not None: -+ self.returncode = _deadstate -+ elif e.errno == _ECHILD: -+ # This happens if SIGCLD is set to be ignored or -+ # waiting for child processes has otherwise been -+ # disabled for our process. This child is dead, we -+ # can't get the status. -+ # http://bugs.python.org/issue15756 -+ self.returncode = 0 -+ finally: -+ self._waitpid_lock.release() - return self.returncode - -- # endtime is preferred to timeout. timeout is only used for -- # printing. -- if endtime is not None or timeout is not None: -- if endtime is None: -- endtime = _time() + timeout -- elif timeout is None: -- timeout = self._remaining_time(endtime) - -- if endtime is not None: -- # Enter a busy loop if we have a timeout. This busy loop was -- # cribbed from Lib/threading.py in Thread.wait() at r71065. -- delay = 0.0005 # 500 us -> initial delay of 1 ms -- while True: -- if self._waitpid_lock.acquire(False): -- try: -+ def _try_wait(self, wait_flags): -+ """All callers to this function MUST hold self._waitpid_lock.""" -+ try: -+ (pid, sts) = os.waitpid(self.pid, wait_flags) -+ except ChildProcessError: -+ # This happens if SIGCLD is set to be ignored or waiting -+ # for child processes has otherwise been disabled for our -+ # process. This child is dead, we can't get the status. -+ pid = self.pid -+ sts = 0 -+ return (pid, sts) -+ -+ -+ def wait(self, timeout=None, endtime=None): -+ """Wait for child process to terminate. Returns returncode -+ attribute.""" -+ if self.returncode is not None: -+ return self.returncode -+ -+ # endtime is preferred to timeout. timeout is only used for -+ # printing. -+ if endtime is not None or timeout is not None: -+ if endtime is None: -+ endtime = _time() + timeout -+ elif timeout is None: -+ timeout = self._remaining_time(endtime) -+ -+ if endtime is not None: -+ # Enter a busy loop if we have a timeout. This busy loop was -+ # cribbed from Lib/threading.py in Thread.wait() at r71065. -+ delay = 0.0005 # 500 us -> initial delay of 1 ms -+ while True: -+ if self._waitpid_lock.acquire(False): -+ try: -+ if self.returncode is not None: -+ break # Another thread waited. -+ (pid, sts) = self._try_wait(os.WNOHANG) -+ assert pid == self.pid or pid == 0 -+ if pid == self.pid: -+ self._handle_exitstatus(sts) -+ break -+ finally: -+ self._waitpid_lock.release() -+ remaining = self._remaining_time(endtime) -+ if remaining <= 0: -+ raise TimeoutExpired(self.args, timeout) -+ delay = min(delay * 2, remaining, .05) -+ time.sleep(delay) -+ else: -+ while self.returncode is None: -+ with self._waitpid_lock: - if self.returncode is not None: - break # Another thread waited. -- (pid, sts) = self._try_wait(os.WNOHANG) -- assert pid == self.pid or pid == 0 -+ (pid, sts) = self._try_wait(0) -+ # Check the pid and loop as waitpid has been known to -+ # return 0 even without WNOHANG in odd situations. -+ # http://bugs.python.org/issue14396. - if pid == self.pid: - self._handle_exitstatus(sts) -- break -- finally: -- self._waitpid_lock.release() -- remaining = self._remaining_time(endtime) -- if remaining <= 0: -- raise TimeoutExpired(self.args, timeout) -- delay = min(delay * 2, remaining, .05) -- time.sleep(delay) -- else: -- while self.returncode is None: -- with self._waitpid_lock: -- if self.returncode is not None: -- break # Another thread waited. -- (pid, sts) = self._try_wait(0) -- # Check the pid and loop as waitpid has been known to -- # return 0 even without WNOHANG in odd situations. -- # http://bugs.python.org/issue14396. -- if pid == self.pid: -- self._handle_exitstatus(sts) -- return self.returncode -- -- -- def _communicate(self, input, endtime, orig_timeout): -- if self.stdin and not self._communication_started: -- # Flush stdio buffer. This might block, if the user has -- # been writing to .stdin in an uncontrolled fashion. -- self.stdin.flush() -- if not input: -- self.stdin.close() -- -- stdout = None -- stderr = None -- -- # Only create this mapping if we haven't already. -- if not self._communication_started: -- self._fileobj2output = {} -- if self.stdout: -- self._fileobj2output[self.stdout] = [] -- if self.stderr: -- self._fileobj2output[self.stderr] = [] -- -- if self.stdout: -- stdout = self._fileobj2output[self.stdout] -- if self.stderr: -- stderr = self._fileobj2output[self.stderr] -+ return self.returncode - -- self._save_input(input) - -- if self._input: -- input_view = memoryview(self._input) -+ def _communicate(self, input, endtime, orig_timeout): -+ if self.stdin and not self._communication_started: -+ # Flush stdio buffer. This might block, if the user has -+ # been writing to .stdin in an uncontrolled fashion. -+ self.stdin.flush() -+ if not input: -+ self.stdin.close() -+ -+ stdout = None -+ stderr = None -+ -+ # Only create this mapping if we haven't already. -+ if not self._communication_started: -+ self._fileobj2output = {} -+ if self.stdout: -+ self._fileobj2output[self.stdout] = [] -+ if self.stderr: -+ self._fileobj2output[self.stderr] = [] - -- with _PopenSelector() as selector: -- if self.stdin and input: -- selector.register(self.stdin, selectors.EVENT_WRITE) - if self.stdout: -- selector.register(self.stdout, selectors.EVENT_READ) -+ stdout = self._fileobj2output[self.stdout] - if self.stderr: -- selector.register(self.stderr, selectors.EVENT_READ) -- -- while selector.get_map(): -- timeout = self._remaining_time(endtime) -- if timeout is not None and timeout < 0: -- raise TimeoutExpired(self.args, orig_timeout) -+ stderr = self._fileobj2output[self.stderr] - -- ready = selector.select(timeout) -- self._check_timeout(endtime, orig_timeout) -+ self._save_input(input) - -- # XXX Rewrite these to use non-blocking I/O on the file -- # objects; they are no longer using C stdio! -+ if self._input: -+ input_view = memoryview(self._input) - -- for key, events in ready: -- if key.fileobj is self.stdin: -- chunk = input_view[self._input_offset : -- self._input_offset + _PIPE_BUF] -- try: -- self._input_offset += os.write(key.fd, chunk) -- except BrokenPipeError: -- selector.unregister(key.fileobj) -- key.fileobj.close() -- else: -- if self._input_offset >= len(self._input): -+ with _PopenSelector() as selector: -+ if self.stdin and input: -+ selector.register(self.stdin, selectors.EVENT_WRITE) -+ if self.stdout: -+ selector.register(self.stdout, selectors.EVENT_READ) -+ if self.stderr: -+ selector.register(self.stderr, selectors.EVENT_READ) -+ -+ while selector.get_map(): -+ timeout = self._remaining_time(endtime) -+ if timeout is not None and timeout < 0: -+ raise TimeoutExpired(self.args, orig_timeout) -+ -+ ready = selector.select(timeout) -+ self._check_timeout(endtime, orig_timeout) -+ -+ # XXX Rewrite these to use non-blocking I/O on the file -+ # objects; they are no longer using C stdio! -+ -+ for key, events in ready: -+ if key.fileobj is self.stdin: -+ chunk = input_view[self._input_offset : -+ self._input_offset + _PIPE_BUF] -+ try: -+ self._input_offset += os.write(key.fd, chunk) -+ except BrokenPipeError: - selector.unregister(key.fileobj) - key.fileobj.close() -- elif key.fileobj in (self.stdout, self.stderr): -- data = os.read(key.fd, 32768) -- if not data: -- selector.unregister(key.fileobj) -- key.fileobj.close() -- self._fileobj2output[key.fileobj].append(data) -- -- self.wait(timeout=self._remaining_time(endtime)) -- -- # All data exchanged. Translate lists into strings. -- if stdout is not None: -- stdout = b''.join(stdout) -- if stderr is not None: -- stderr = b''.join(stderr) -- -- # Translate newlines, if requested. -- # This also turns bytes into strings. -- if self.universal_newlines: -- if stdout is not None: -- stdout = self._translate_newlines(stdout, -- self.stdout.encoding) -- if stderr is not None: -- stderr = self._translate_newlines(stderr, -- self.stderr.encoding) -- -- return (stdout, stderr) -- -+ else: -+ if self._input_offset >= len(self._input): -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ elif key.fileobj in (self.stdout, self.stderr): -+ data = os.read(key.fd, 32768) -+ if not data: -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ self._fileobj2output[key.fileobj].append(data) - -- def _save_input(self, input): -- # This method is called from the _communicate_with_*() methods -- # so that if we time out while communicating, we can continue -- # sending input if we retry. -- if self.stdin and self._input is None: -- self._input_offset = 0 -- self._input = input -- if self.universal_newlines and input is not None: -- self._input = self._input.encode(self.stdin.encoding) -- -- -- def send_signal(self, sig): -- """Send a signal to the process.""" -- # Skip signalling a process that we know has already died. -- if self.returncode is None: -- os.kill(self.pid, sig) -+ self.wait(timeout=self._remaining_time(endtime)) - -- def terminate(self): -- """Terminate the process with SIGTERM -- """ -- self.send_signal(signal.SIGTERM) -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = b''.join(stdout) -+ if stderr is not None: -+ stderr = b''.join(stderr) - -- def kill(self): -- """Kill the process with SIGKILL -- """ -- self.send_signal(signal.SIGKILL) -+ # Translate newlines, if requested. -+ # This also turns bytes into strings. -+ if self.universal_newlines: -+ if stdout is not None: -+ stdout = self._translate_newlines(stdout, -+ self.stdout.encoding) -+ if stderr is not None: -+ stderr = self._translate_newlines(stderr, -+ self.stderr.encoding) -+ -+ return (stdout, stderr) -+ -+ -+ def _save_input(self, input): -+ # This method is called from the _communicate_with_*() methods -+ # so that if we time out while communicating, we can continue -+ # sending input if we retry. -+ if self.stdin and self._input is None: -+ self._input_offset = 0 -+ self._input = input -+ if self.universal_newlines and input is not None: -+ self._input = self._input.encode(self.stdin.encoding) -+ -+ -+ def send_signal(self, sig): -+ """Send a signal to the process.""" -+ # Skip signalling a process that we know has already died. -+ if self.returncode is None: -+ os.kill(self.pid, sig) -+ -+ def terminate(self): -+ """Terminate the process with SIGTERM -+ """ -+ self.send_signal(signal.SIGTERM) -+ -+ def kill(self): -+ """Kill the process with SIGKILL -+ """ -+ self.send_signal(signal.SIGKILL) ++ def _internal_poll(self, _deadstate=None, _waitpid=None, + _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): + """Check if child process has terminated. Returns returncode + attribute. +@@ -1569,6 +1577,8 @@ + outside of the local scope (nor can any methods it calls). + + """ ++ if _waitpid is None: ++ _waitpid = os.waitpid + if self.returncode is None: + if not self._waitpid_lock.acquire(False): + # Something else is busy calling waitpid. Don't allow two diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py --- orig/Lib/sysconfig.py 2015-12-07 09:39:08.000000000 +0800 +++ modified/Lib/sysconfig.py 2016-02-14 10:29:10.000000000 +0800 @@ -11803,7 +9329,7 @@ diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.p b'\xff'.decode(TESTFN_ENCODING) diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/script_helper.py --- orig/Lib/test/support/script_helper.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/support/script_helper.py 2016-02-15 18:25:31.000000000 +0800 ++++ modified/Lib/test/support/script_helper.py 2016-02-16 15:51:58.000000000 +0800 @@ -11,6 +11,7 @@ import py_compile import contextlib @@ -11817,7 +9343,7 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip __cached_interp_requires_environment = None + -+@unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") def interpreter_requires_environment(): """ Returns True if our sys.executable interpreter requires environment @@ -11826,7 +9352,7 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip return _PythonRunResult(rc, out, err), cmd_line + -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def _assert_python(expected_success, *args, **env_vars): res, cmd_line = run_python_until_end(*args, **env_vars) if (res.rc and expected_success) or (not res.rc and not expected_success): @@ -11835,13 +9361,175 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip return _assert_python(False, *args, **env_vars) + -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): """Run a Python subprocess with the given arguments. +diff -Nru orig/Lib/test/test_asyncio/test_events.py modified/Lib/test/test_asyncio/test_events.py +--- orig/Lib/test/test_asyncio/test_events.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_events.py 2016-02-16 17:30:31.000000000 +0800 +@@ -435,6 +435,7 @@ + self._basetest_sock_client_ops(httpd, sock) + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_unix_sock_client_ops(self): + with test_utils.run_test_unix_server() as httpd: + sock = socket.socket(socket.AF_UNIX) +@@ -569,6 +570,7 @@ + self._basetest_create_connection(conn_fut) + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_connection(self): + # Issue #20682: On Mac OS X Tiger, getsockname() returns a + # zero-length address for UNIX socket. +@@ -704,6 +706,7 @@ + + @unittest.skipIf(ssl is None, 'No ssl module') + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_ssl_unix_connection(self): + # Issue #20682: On Mac OS X Tiger, getsockname() returns a + # zero-length address for UNIX socket. +@@ -850,6 +853,7 @@ + return server, path + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_server(self): + proto = MyProto(loop=self.loop) + server, path = self._make_unix_server(lambda: proto) +@@ -878,6 +882,7 @@ + server.close() + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_server_path_socket_error(self): + proto = MyProto(loop=self.loop) + sock = socket.socket() +@@ -947,6 +952,7 @@ + + @unittest.skipIf(ssl is None, 'No ssl module') + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_server_ssl(self): + proto = MyProto(loop=self.loop) + server, path = self._make_ssl_unix_server( +@@ -1015,6 +1021,7 @@ + + @unittest.skipIf(ssl is None, 'No ssl module') + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_server_ssl_verify_failed(self): + proto = MyProto(loop=self.loop) + server, path = self._make_ssl_unix_server( +@@ -1082,6 +1089,7 @@ + + @unittest.skipIf(ssl is None, 'No ssl module') + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_create_unix_server_ssl_verified(self): + proto = MyProto(loop=self.loop) + server, path = self._make_ssl_unix_server( +@@ -1661,6 +1669,7 @@ + self.loop.add_signal_handler(signal.SIGTERM, func) + + ++@unittest.skipUnless(subprocess.supported, "test requires subprocess.Popen()") + class SubprocessTestsMixin: + + def check_terminated(self, returncode): +diff -Nru orig/Lib/test/test_asyncio/test_streams.py modified/Lib/test/test_asyncio/test_streams.py +--- orig/Lib/test/test_asyncio/test_streams.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_streams.py 2016-02-16 17:28:52.000000000 +0800 +@@ -4,6 +4,7 @@ + import os + import queue + import socket ++import subprocess + import sys + import threading + import unittest +@@ -56,6 +57,7 @@ + self._basetest_open_connection(conn_fut) + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_open_unix_connection(self): + with test_utils.run_test_unix_server() as httpd: + conn_fut = asyncio.open_unix_connection(httpd.address, +@@ -86,6 +88,7 @@ + + @unittest.skipIf(ssl is None, 'No ssl module') + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_open_unix_connection_no_loop_ssl(self): + with test_utils.run_test_unix_server(use_ssl=True) as httpd: + conn_fut = asyncio.open_unix_connection( +@@ -112,6 +115,7 @@ + self._basetest_open_connection_error(conn_fut) + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_open_unix_connection_error(self): + with test_utils.run_test_unix_server() as httpd: + conn_fut = asyncio.open_unix_connection(httpd.address, +@@ -509,6 +513,7 @@ + self.assertEqual(msg, b"hello world!\n") + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') ++ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + def test_start_unix_server(self): + + class MyServer: +@@ -577,6 +582,7 @@ + self.assertEqual(msg, b"hello world!\n") + + @unittest.skipIf(sys.platform == 'win32', "Don't have pipes") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") + def test_read_all_from_pipe_reader(self): + # See asyncio issue 168. This test is derived from the example + # subprocess_attach_read_pipe.py, but we configure the +diff -Nru orig/Lib/test/test_asyncio/test_subprocess.py modified/Lib/test/test_asyncio/test_subprocess.py +--- orig/Lib/test/test_asyncio/test_subprocess.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_subprocess.py 2016-02-16 17:22:17.000000000 +0800 +@@ -1,4 +1,5 @@ + import signal ++import subprocess as sp + import sys + import unittest + import warnings +@@ -75,6 +76,7 @@ + transport.close() + + ++@unittest.skipUnless(sp.supported, '"Test requires subprocess.Popen()') + class SubprocessMixin: + + def test_stdin_stdout(self): +diff -Nru orig/Lib/test/test_asyncio/test_unix_events.py modified/Lib/test/test_asyncio/test_unix_events.py +--- orig/Lib/test/test_asyncio/test_unix_events.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_unix_events.py 2016-02-16 17:22:13.000000000 +0800 +@@ -230,6 +230,7 @@ + + @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), + 'UNIX Sockets are not supported') ++@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") + class SelectorEventLoopUnixSocketTests(test_utils.TestCase): + + def setUp(self): +@@ -793,6 +794,7 @@ + )) + + ++@unittest.skipUnless(hasattr(os, 'waitpid'), 'os.waitpid() is required') + class ChildWatcherTestsMixin: + + ignore_warnings = mock.patch.object(log.logger, "warning") diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py --- orig/Lib/test/test_base64.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_base64.py 2016-02-15 18:35:22.000000000 +0800 ++++ modified/Lib/test/test_base64.py 2016-02-16 15:50:14.000000000 +0800 @@ -3,6 +3,7 @@ import base64 import binascii @@ -11855,18 +9543,18 @@ diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py self.assertTrue(issubclass(binascii.Error, ValueError)) - -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") class TestMain(unittest.TestCase): def tearDown(self): if os.path.exists(support.TESTFN): diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py --- orig/Lib/test/test_capi.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_capi.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_capi.py 2016-02-16 15:50:14.000000000 +0800 @@ -49,6 +49,7 @@ self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") @unittest.skipUnless(threading, 'Threading required for this test.') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_no_FatalError_infinite_loop(self): with support.SuppressCrashReport(): p = subprocess.Popen([sys.executable, "-c", @@ -11880,12 +9568,12 @@ diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py --- orig/Lib/test/test_cmd_line.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_cmd_line.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_cmd_line.py 2016-02-16 15:50:13.000000000 +0800 @@ -57,6 +57,7 @@ rc, out, err = assert_python_ok('-vv') self.assertNotIn(b'stack overflow', err) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_xoptions(self): def get_xoptions(*args): # use subprocess module directly because test.support.script_helper adds @@ -11893,7 +9581,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py opts = get_xoptions('-Xa', '-Xb=c,d=e') self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_showrefcount(self): def run_python(*args): # this is similar to assert_python_ok but doesn't strip @@ -11901,7 +9589,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # arguments as unicode (using wmain() instead of main()). @unittest.skipIf(sys.platform == 'win32', 'Windows has a native unicode API') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_undecodable_code(self): undecodable = b"\xff" env = os.environ.copy() @@ -11909,7 +9597,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py ) check_output(text) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_unbuffered_output(self): # Test expected operation of the '-u' switch for stream in ('stdout', 'stderr'): @@ -11917,7 +9605,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # for empty and unset PYTHONPATH self.assertEqual(out1, out2) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_displayhook_unencodable(self): for encoding in ('ascii', 'latin-1', 'utf-8'): # We are testing a PYTHON environment variable here, so we can't @@ -11925,7 +9613,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py escaped = repr(text).encode(encoding, 'backslashreplace') self.assertIn(escaped, data) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def check_input(self, code, expected): with tempfile.NamedTemporaryFile("wb+") as stdin: sep = os.linesep.encode('ASCII') @@ -11933,7 +9621,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # Issue #7111: Python should work without standard streams @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def _test_no_stdio(self, streams): code = """if 1: import os, sys @@ -11950,6 +9638,17 @@ diff -Nru orig/Lib/test/test_compileall.py modified/Lib/test/test_compileall.py with self.assertRaisesRegex(ValueError, "workers must be greater or equal to 0"): compileall.compile_dir(self.directory, workers=-1) +diff -Nru orig/Lib/test/test_concurrent_futures.py modified/Lib/test/test_concurrent_futures.py +--- orig/Lib/test/test_concurrent_futures.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_concurrent_futures.py 2016-02-16 17:06:07.000000000 +0800 +@@ -91,6 +91,7 @@ + executor_type = futures.ThreadPoolExecutor + + ++@unittest.skipUnless(hasattr(os, 'fork'), 'os.fork() does not exist on this platform') + class ProcessPoolMixin(ExecutorMixin): + executor_type = futures.ProcessPoolExecutor + diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py --- orig/Lib/test/test_doctest.py 2015-12-07 09:39:09.000000000 +0800 +++ modified/Lib/test/test_doctest.py 2016-02-14 10:29:37.000000000 +0800 @@ -11969,18 +9668,18 @@ diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py diff -Nru orig/Lib/test/test_eintr.py modified/Lib/test/test_eintr.py --- orig/Lib/test/test_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_eintr.py 2016-02-15 18:30:29.000000000 +0800 ++++ modified/Lib/test/test_eintr.py 2016-02-16 15:50:13.000000000 +0800 @@ -9,6 +9,7 @@ @unittest.skipUnless(os.name == "posix", "only supported on Unix") -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") class EINTRTests(unittest.TestCase): @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py --- orig/Lib/test/test_faulthandler.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_faulthandler.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_faulthandler.py 2016-02-16 15:50:12.000000000 +0800 @@ -24,6 +24,7 @@ TIMEOUT = 0.5 @@ -12009,7 +9708,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler finally: sys.stderr = orig_stderr -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_disabled_by_default(self): # By default, the module should be disabled code = "import faulthandler; print(faulthandler.is_enabled())" @@ -12017,7 +9716,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"False") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_sys_xoptions(self): # Test python -X faulthandler code = "import faulthandler; print(faulthandler.is_enabled())" @@ -12025,7 +9724,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"True") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_env_var(self): # empty env var code = "import faulthandler; print(faulthandler.is_enabled())" @@ -12059,30 +9758,30 @@ diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py def setUp(self): diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py --- orig/Lib/test/test_file_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_file_eintr.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_file_eintr.py 2016-02-16 15:50:11.000000000 +0800 @@ -69,6 +69,7 @@ self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % (why, stdout.decode(), stderr.decode())) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def _test_reading(self, data_to_write, read_and_verify_code): """Generic buffered read method test harness to validate EINTR behavior. diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py --- orig/Lib/test/test_gc.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gc.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_gc.py 2016-02-16 15:50:11.000000000 +0800 @@ -650,6 +650,8 @@ del x gc.set_debug(%s) """ + -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def run_command(code): p = subprocess.Popen([sys.executable, "-Wd", "-c", code], stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py --- orig/Lib/test/test_gdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gdb.py 2016-02-14 11:22:03.000000000 +0800 ++++ modified/Lib/test/test_gdb.py 2016-02-16 16:48:39.000000000 +0800 @@ -5,7 +5,6 @@ import os @@ -12103,7 +9802,7 @@ diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py # This is what "no gdb" looks like. There may, however, be other # errors that manifest this way too. raise unittest.SkipTest("Couldn't find gdb on the path") -+ except AttributeError: ++ except RuntimeError: + raise unittest.SkipTest("subprocess module doesn't provide Popen()") # Regex to parse: @@ -12128,7 +9827,7 @@ diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py --- orig/Lib/test/test_httpservers.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2016-02-14 10:29:37.000000000 +0800 ++++ modified/Lib/test/test_httpservers.py 2016-02-16 15:50:10.000000000 +0800 @@ -16,6 +16,7 @@ import urllib.parse import html @@ -12155,7 +9854,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, "This test can't be run reliably as root (issue #13308).") -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") class CGIHTTPServerTestCase(BaseTestCase): class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): pass @@ -12266,7 +9965,7 @@ diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py --- orig/Lib/test/test_json/test_tool.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_json/test_tool.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_json/test_tool.py 2016-02-16 15:50:09.000000000 +0800 @@ -7,6 +7,7 @@ from test.support.script_helper import assert_python_ok @@ -12279,18 +9978,18 @@ diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_ ] """) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_stdin_stdout(self): with subprocess.Popen( (sys.executable, '-m', 'json.tool'), diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py --- orig/Lib/test/test_keyword.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_keyword.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_keyword.py 2016-02-16 15:50:08.000000000 +0800 @@ -46,6 +46,7 @@ fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def _generate_keywords(self, grammar_file, target_keyword_py_file): proc = subprocess.Popen([sys.executable, KEYWORD_FILE, @@ -12390,14 +10089,65 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py requires('largefile', 'test requires %s bytes and a long time to run' % str(0x180000000)) f = open(TESTFN, 'w+b') +diff -Nru orig/Lib/test/test_multiprocessing_fork.py modified/Lib/test/test_multiprocessing_fork.py +--- orig/Lib/test/test_multiprocessing_fork.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_fork.py 2016-02-16 19:53:54.000000000 +0800 +@@ -1,7 +1,13 @@ ++import subprocess + import unittest ++ ++if not subprocess.supported: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + import test._test_multiprocessing + + test._test_multiprocessing.install_tests_in_module_dict(globals(), 'fork') + ++ + if __name__ == '__main__': + unittest.main() +diff -Nru orig/Lib/test/test_multiprocessing_forkserver.py modified/Lib/test/test_multiprocessing_forkserver.py +--- orig/Lib/test/test_multiprocessing_forkserver.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_forkserver.py 2016-02-16 19:53:21.000000000 +0800 +@@ -1,7 +1,13 @@ ++import subprocess + import unittest ++ ++if not subprocess.supported: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + import test._test_multiprocessing + + test._test_multiprocessing.install_tests_in_module_dict(globals(), 'forkserver') + ++ + if __name__ == '__main__': + unittest.main() +diff -Nru orig/Lib/test/test_multiprocessing_spawn.py modified/Lib/test/test_multiprocessing_spawn.py +--- orig/Lib/test/test_multiprocessing_spawn.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_spawn.py 2016-02-16 19:53:43.000000000 +0800 +@@ -1,7 +1,13 @@ ++import subprocess + import unittest ++ ++if not subprocess.supported: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + import test._test_multiprocessing + + test._test_multiprocessing.install_tests_in_module_dict(globals(), 'spawn') + ++ + if __name__ == '__main__': + unittest.main() diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py --- orig/Lib/test/test_os.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_os.py 2016-02-15 18:29:10.000000000 +0800 ++++ modified/Lib/test/test_os.py 2016-02-16 15:50:07.000000000 +0800 @@ -657,6 +657,7 @@ # Bug 1110478 @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_update2(self): os.environ.clear() os.environ.update(HELLO="World") @@ -12405,7 +10155,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py self.assertEqual(value, "World") @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_os_popen_iter(self): with os.popen( "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: @@ -12421,7 +10171,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_setreuid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). @@ -12429,7 +10179,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_setregid(self): if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(OSError, os.setregid, 0, 0) @@ -12437,7 +10187,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py self.assertRaises(OverflowError, os.setregid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_setregid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). @@ -12445,7 +10195,7 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py class PidTests(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_getppid(self): p = subprocess.Popen([sys.executable, '-c', 'import os; print(os.getppid())'], @@ -12462,18 +10212,18 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py self.assertGreaterEqual(size.columns, 0) self.assertGreaterEqual(size.lines, 0) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_stty_match(self): """Check if stty returns the same results diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py --- orig/Lib/test/test_pdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pdb.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_pdb.py 2016-02-16 15:50:07.000000000 +0800 @@ -914,6 +914,7 @@ class PdbTestCase(unittest.TestCase): -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def run_pdb(self, script, commands): """Run 'script' lines with pdb and the pdb 'commands'.""" filename = 'main.py' @@ -12481,7 +10231,7 @@ diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py ('bar', 4), ) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_issue7964(self): # open the file as binary so we can force \r\n newline with open(support.TESTFN, 'wb') as f: @@ -12489,7 +10239,7 @@ diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 'Fail to step into the caller after a return') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_issue13210(self): # invoking "continue" on a non-main thread triggered an exception # inside signal.signal @@ -12559,7 +10309,7 @@ diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py for f in (TESTFN, TESTFN2): diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py --- orig/Lib/test/test_platform.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_platform.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_platform.py 2016-02-16 15:50:06.000000000 +0800 @@ -9,11 +9,13 @@ from test import support @@ -12570,7 +10320,7 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py res = platform.architecture() @support.skip_unless_symlink -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_architecture_via_symlink(self): # issue3762 # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. @@ -12595,13 +10345,13 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py ): self.assertEqual(platform._parse_release_file(input), output) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_popen(self): mswindows = (sys.platform == "win32") diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py --- orig/Lib/test/test_poll.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_poll.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_poll.py 2016-02-16 15:50:05.000000000 +0800 @@ -25,6 +25,7 @@ match.append(fd) return match @@ -12614,13 +10364,13 @@ diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py # Another test case for poll(). This is copied from the test case for # select(), modified to use poll() instead. -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_poll2(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py --- orig/Lib/test/test_popen.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_popen.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_popen.py 2016-02-16 15:50:04.000000000 +0800 @@ -5,7 +5,9 @@ import unittest @@ -12637,7 +10387,7 @@ diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py python = '"' + python + '"' # quote embedded space for cmdline + -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") class PopenTest(unittest.TestCase): def _do_test_commandline(self, cmdline, expected): @@ -12652,7 +10402,7 @@ diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py def test_popen(self): diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py --- orig/Lib/test/test_posix.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_posix.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_posix.py 2016-02-16 15:50:04.000000000 +0800 @@ -11,8 +11,8 @@ import os import platform @@ -12691,7 +10441,7 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py - @unittest.skipUnless(hasattr(os, 'getegid'), "test needs os.getegid()") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_getgroups(self): with os.popen('id -G 2>/dev/null') as idg: groups = idg.read().strip() @@ -12709,12 +10459,12 @@ diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py pid, master_fd = pty.fork() diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py --- orig/Lib/test/test_quopri.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_quopri.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_quopri.py 2016-02-16 15:50:03.000000000 +0800 @@ -180,6 +180,7 @@ for p, e in self.HSTRINGS: self.assertEqual(quopri.decodestring(e, header=True), p) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_scriptencode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri"], @@ -12722,18 +10472,18 @@ diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py self.assertEqual(cout[i], e[i]) self.assertEqual(cout, e) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_scriptdecode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri", "-d"], diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_helper.py --- orig/Lib/test/test_script_helper.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_script_helper.py 2016-02-15 19:02:46.000000000 +0800 ++++ modified/Lib/test/test_script_helper.py 2016-02-16 15:51:53.000000000 +0800 @@ -34,6 +34,7 @@ self.assertIn('import sys; sys.exit(0)', error_msg, msg='unexpected command line.') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") @mock.patch('subprocess.Popen') def test_assert_python_isolated_when_env_not_required(self, mock_popen): with mock.patch.object(script_helper, @@ -12741,7 +10491,7 @@ diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_help self.assertIn('-I', popen_command) self.assertNotIn('-E', popen_command) # -I overrides this -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") @mock.patch('subprocess.Popen') def test_assert_python_not_isolated_when_env_is_required(self, mock_popen): """Ensure that -I is not passed when the environment is required.""" @@ -12749,7 +10499,7 @@ diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_help # Reset the private cached state. script_helper.__dict__['__cached_interp_requires_environment'] = None -+ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_true(self, mock_check_call): mock_check_call.side_effect = subprocess.CalledProcessError('', '') @@ -12757,7 +10507,7 @@ diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_help self.assertTrue(script_helper.interpreter_requires_environment()) self.assertEqual(1, mock_check_call.call_count) -+ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_false(self, mock_check_call): # The mocked subprocess.check_call fakes a no-error process. @@ -12765,13 +10515,13 @@ diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_help self.assertFalse(script_helper.interpreter_requires_environment()) self.assertEqual(1, mock_check_call.call_count) -+ @unittest.skipUnless(hasattr(subprocess, 'check_call'), "test requires subprocess.check_call()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_details(self, mock_check_call): script_helper.interpreter_requires_environment() diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py --- orig/Lib/test/test_select.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_select.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_select.py 2016-02-16 15:50:01.000000000 +0800 @@ -1,11 +1,13 @@ import errno import os @@ -12791,13 +10541,13 @@ diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py self.assertIsNot(r, x) self.assertIsNot(w, x) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_select(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py --- orig/Lib/test/test_shutil.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2016-02-16 15:50:01.000000000 +0800 @@ -51,6 +51,7 @@ except ImportError: ZIP_SUPPORT = shutil.which('zip') @@ -12818,24 +10568,24 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py self.assertEqual(size.lines, 888) @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_stty_match(self): """Check if stty returns the same results ignoring env diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py --- orig/Lib/test/test_signal.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_signal.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_signal.py 2016-02-16 15:50:00.000000000 +0800 @@ -158,6 +158,7 @@ @unittest.skipIf(sys.platform=='freebsd6', 'inter process signals not reliable (do not mix well with threading) ' 'on freebsd6') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_main(self): # This function spawns a child process to insulate the main # test-running process from all the signals. It then diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py --- orig/Lib/test/test_site.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_site.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_site.py 2016-02-16 15:49:59.000000000 +0800 @@ -31,6 +31,7 @@ os.makedirs(site.USER_SITE) site.addsitedir(site.USER_SITE) @@ -12848,7 +10598,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " "user-site (site.ENABLE_USER_SITE)") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_s_option(self): usersite = site.USER_SITE self.assertIn(usersite, sys.path) @@ -12865,7 +10615,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py """Restore sys.path""" sys.path[:] = self.sys_path -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_abs_paths(self): # Make sure all imported modules have their __file__ and __cached__ # attributes as absolute paths. Arranging to put the Lib directory on @@ -12873,7 +10623,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py class StartupImportTests(unittest.TestCase): -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_startup_imports(self): # This tests checks which modules are loaded by Python when it # initially starts upon startup. @@ -13031,7 +10781,7 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver socketserver.StreamRequestHandler, diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py --- orig/Lib/test/test_source_encoding.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_source_encoding.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_source_encoding.py 2016-02-16 15:49:58.000000000 +0800 @@ -7,6 +7,7 @@ import sys import subprocess @@ -13044,18 +10794,18 @@ diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_en # two bytes in common with the UTF-8 BOM self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_20731(self): sub = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py --- orig/Lib/test/test_subprocess.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_subprocess.py 2016-02-14 10:58:22.000000000 +0800 ++++ modified/Lib/test/test_subprocess.py 2016-02-16 19:32:13.000000000 +0800 @@ -26,6 +26,9 @@ mswindows = (sys.platform == "win32") -+if not hasattr(subprocess, 'Popen'): ++if not subprocess.supported: + raise unittest.SkipTest("subprocess module doesn't provide Popen()") + # @@ -13076,7 +10826,7 @@ diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py import distutils.unixccompiler diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py --- orig/Lib/test/test_sys.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sys.py 2016-02-15 18:27:32.000000000 +0800 ++++ modified/Lib/test/test_sys.py 2016-02-16 15:49:57.000000000 +0800 @@ -20,6 +20,7 @@ except ImportError: threading = None @@ -13089,7 +10839,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py finally: sys.setrecursionlimit(oldlimit) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_recursionlimit_fatalerror(self): # A fatal error occurs if a second recursion limit is hit when recovering # from a first one. @@ -13097,7 +10847,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_clear_type_cache(self): sys._clear_type_cache() -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_ioencoding(self): env = dict(os.environ) @@ -13105,7 +10855,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py @unittest.skipUnless(test.support.FS_NONASCII, 'requires OS support of non-ASCII encodings') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_ioencoding_nonascii(self): env = dict(os.environ) @@ -13113,7 +10863,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py @unittest.skipIf(sys.base_prefix != sys.prefix, 'Test is not venv-compatible') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_executable(self): # sys.executable should be absolute self.assertEqual(os.path.abspath(sys.executable), sys.executable) @@ -13121,13 +10871,13 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py expected = None self.check_fsencoding(fs_encoding, expected) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def c_locale_get_error_handler(self, isolated=False, encoding=None): # Force the POSIX locale env = os.environ.copy() diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py --- orig/Lib/test/test_sysconfig.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2016-02-16 15:49:56.000000000 +0800 @@ -15,6 +15,7 @@ get_scheme_names, get_config_var, _main) import _osx_support @@ -13146,7 +10896,7 @@ diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py self.assertEqual(get_scheme_names(), wanted) @skip_unless_symlink -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_symlink(self): # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. @@ -13197,7 +10947,7 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py # Python code returned but before the thread state is deleted. diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py --- orig/Lib/test/test_traceback.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_traceback.py 2016-02-15 19:04:24.000000000 +0800 ++++ modified/Lib/test/test_traceback.py 2016-02-16 15:49:56.000000000 +0800 @@ -6,6 +6,7 @@ import sys import unittest @@ -13210,7 +10960,7 @@ diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py err = traceback.format_exception_only(None, None) self.assertEqual(err, ['None\n']) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_encoded_file(self): # Test that tracebacks are correctly printed for encoded source files: # - correct line number (Issue2384) @@ -13222,7 +10972,7 @@ diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py # encoding may be different from the current interpreter, on Windows diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py --- orig/Lib/test/test_unicodedata.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_unicodedata.py 2016-02-15 18:24:13.000000000 +0800 ++++ modified/Lib/test/test_unicodedata.py 2016-02-16 15:49:55.000000000 +0800 @@ -9,6 +9,7 @@ import sys import unittest @@ -13238,7 +10988,7 @@ diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.p + class UnicodeMiscTest(UnicodeDatabaseTest): -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_failed_import_during_compiling(self): # Issue 4367 # Decoding \N escapes requires the unicodedata module. If it can't be @@ -13274,7 +11024,7 @@ diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py with support.transient_internet(redirect_url_with_frag): diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py --- orig/Lib/test/test_uuid.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_uuid.py 2016-02-15 18:18:31.000000000 +0800 ++++ modified/Lib/test/test_uuid.py 2016-02-16 15:49:54.000000000 +0800 @@ -14,6 +14,7 @@ except: return False @@ -13295,7 +11045,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py class TestInternals(unittest.TestCase): @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_find_mac(self): data = ''' fake hwaddr @@ -13303,7 +11053,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py "%s is not an RFC 4122 node ID" % hex) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_ifconfig_getnode(self): node = uuid._ifconfig_getnode() self.check_node(node, 'ifconfig', True) @@ -13311,7 +11061,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py self.check_node(node, 'ip', True) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_arp_getnode(self): node = uuid._arp_getnode() self.check_node(node, 'arp', True) @@ -13319,13 +11069,13 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py self.check_node(node, 'lanscan', True) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_netstat_getnode(self): node = uuid._netstat_getnode() self.check_node(node, 'netstat', True) diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py --- orig/Lib/test/test_venv.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_venv.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_venv.py 2016-02-16 15:49:46.000000000 +0800 @@ -35,6 +35,7 @@ def failsOnWindows(f): return f @@ -13338,7 +11088,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) @skipInVenv -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_prefixes(self): """ Test that the prefix values are as expected. @@ -13346,7 +11096,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py # point to the venv being used to run the test, and we lose the link # to the source build - so Python can't initialise properly. @skipInVenv -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_executable(self): """ Test that the sys.executable value is as expected. @@ -13354,7 +11104,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py self.assertEqual(out.strip(), envpy.encode()) @unittest.skipUnless(can_symlink(), 'Needs symlinks') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_executable_symlinks(self): """ Test that the sys.executable value is as expected. @@ -13362,7 +11112,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py @skipInVenv class EnsurePipTest(BaseTest): """Test venv module installation of pip.""" -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def assert_pip_not_installed(self): envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe) @@ -13370,7 +11120,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py # Requesting pip fails without SSL (http://bugs.python.org/issue19744) @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_with_pip(self): rmtree(self.env_dir) with EnvironmentVarGuard() as envvars: @@ -13422,12 +11172,12 @@ diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_b class TestBreak(unittest.TestCase): diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py --- orig/Lib/unittest/test/test_runner.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/unittest/test/test_runner.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/unittest/test/test_runner.py 2016-02-16 15:49:39.000000000 +0800 @@ -274,6 +274,7 @@ expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) self.assertEqual(runner._makeResult(), expectedresult) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") ++ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") def test_warnings(self): """ Check that warnings argument of TextTestRunner correctly affects the @@ -31320,7 +29070,7 @@ diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c n++; diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h --- orig/Python/importlib_external.h 2015-12-07 09:39:11.000000000 +0800 -+++ modified/Python/importlib_external.h 2016-02-16 11:35:20.000000000 +0800 ++++ modified/Python/importlib_external.h 2016-02-16 16:06:55.000000000 +0800 @@ -2,52 +2,52 @@ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, @@ -36700,8 +34450,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-16 11:43:46.000000000 +0800 -@@ -0,0 +1,151 @@ ++++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-16 19:55:51.000000000 +0800 +@@ -0,0 +1,149 @@ +// +// main.m +// A main module for starting Python projects under iOS. @@ -36765,9 +34515,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m +// "-v", // Verbose test output + "-W", // Display test output on failure + -+ + "-x", // Arguments are tests to *exclude* -+ +// Simulator failures +// "test_coroutines", // docstring not being populated +// "test_module", // docstring not being populated diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded index c0977ee7..e087ef76 100644 --- a/patch/Python/Setup.embedded +++ b/patch/Python/Setup.embedded @@ -3,6 +3,7 @@ ##################################################################### _bisect _bisectmodule.c +_bz2 _bz2module.c -I$(srcdir)/../bzip2/include -L$(srcdir)/../bzip2/lib -lbz2 _codecs_cn cjkcodecs/_codecs_cn.c _codecs_hk cjkcodecs/_codecs_hk.c _codecs_iso2022 cjkcodecs/_codecs_iso2022.c @@ -18,6 +19,7 @@ _elementtree _elementtree.c \ _heapq _heapqmodule.c _json _json.c _lsprof _lsprof.o rotatingtree.c +# _lzma _lzmamodule.c -I$(srcdir)/../xz/include -L$(srcdir)/../xz/lib -llzma _md5 md5module.c _multibytecodec cjkcodecs/multibytecodec.c _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c @@ -74,12 +76,10 @@ _testimportmultiple _testimportmultiple.c ##################################################################### # Modules that require additional frameworks ##################################################################### -#_bz2 bz2module.c -lbz2 #_curses _cursesmodule.c -lcurses -ltermcap #_curses_panel _curses_panel.c -lpanel -lncurses #_dbm _dbmmodule.c #_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -#_lzma #_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... #nis nismodule.c -lnsl #ossaudiodev From 75b2f0df7e4e7718eadd531c5f9f0aebf4cddbea Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 16 Feb 2016 20:17:25 +0800 Subject: [PATCH 34/51] Updated README references. --- README.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index ecb4c29a..ecc3b196 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,6 @@ This should enable the code to run on: - iPad Air - iPad Air 2 - iPad retina - - iPad Pro * iPad Mini - iPad Mini (1st gen) - iPad Mini 2 @@ -42,7 +41,7 @@ This should enable the code to run on: - 4th gen * Apple Watch -This repository branch builds a packaged version of **Python 3.4.2**. +This repository branch builds a packaged version of **Python 3.5.1**. Other Python versions are available by cloning other branches of the main repository. @@ -69,9 +68,9 @@ This should: The build products will be in the `build` directory; the compiled frameworks will be in the `dist` directory. -.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz -.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz -.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz +.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz +.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz +.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz Acknowledgements ---------------- From 9266670750bf4cdfc1c13d9ad4a727aa70c313a4 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 17 Feb 2016 12:06:45 +0800 Subject: [PATCH 35/51] Updated patch to use os-based check for subprocess support. --- patch/Python/Python.patch | 622 ++++++++++++++++++++++---------------- 1 file changed, 361 insertions(+), 261 deletions(-) diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 8f392bac..70f75822 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -1,3 +1,35 @@ +diff -Nru orig/Doc/library/os.rst modified/Doc/library/os.rst +--- orig/Doc/library/os.rst 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Doc/library/os.rst 2016-02-17 12:02:58.000000000 +0800 +@@ -2743,6 +2743,13 @@ + Python signal handler registered for :const:`SIGABRT` with + :func:`signal.signal`. + ++.. data:: allows_subprocesses ++ ++ Boolean that describes whether subprocesses can be by the operating system. ++ Some platforms (e.g., iOS mobile devices) *implement* calls like ++ :func:`execv` and :func:`spawnv`, but will raise errors or break if ++ called. Calls to create subprocesses should only be invoked if ++ :data:`os.allows_subprocesses` is `True`. + + .. function:: execl(path, arg0, arg1, ...) + execle(path, arg0, arg1, ..., env) +diff -Nru orig/Doc/library/subprocess.rst modified/Doc/library/subprocess.rst +--- orig/Doc/library/subprocess.rst 2015-12-07 09:39:07.000000000 +0800 ++++ modified/Doc/library/subprocess.rst 2016-02-17 12:01:30.000000000 +0800 +@@ -21,6 +21,11 @@ + + :pep:`324` -- PEP proposing the subprocess module + ++:mod:`subprocess` can only be used on platforms that support subprocess ++creation. Some platforms (especially mobile platforms) may not support ++subprocesses; if :data:`os.allows_subprocesses` is `False`, any calls in ++this module that request a subprocess be created will raise a ++:exc:`RuntimeError`. + + Using the :mod:`subprocess` Module + ---------------------------------- diff -Nru orig/Include/datetime.h modified/Include/datetime.h --- orig/Include/datetime.h 2015-12-07 09:39:07.000000000 +0800 +++ modified/Include/datetime.h 2016-02-14 10:29:10.000000000 +0800 @@ -622,12 +654,12 @@ diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py possible = ['lib%s.dylib' % name, diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/tests/test_build_ext.py --- orig/Lib/distutils/tests/test_build_ext.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_ext.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_ext.py 2016-02-17 12:02:50.000000000 +0800 @@ -40,6 +40,7 @@ def build_ext(self, *args, **kwargs): return build_ext(*args, **kwargs) -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_build_ext(self): global ALREADY_TESTED copy_xxmodule_c(self.tmp_dir) @@ -635,29 +667,29 @@ diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/test cmd.run() self.assertEqual(cmd.compiler, 'unix') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_get_outputs(self): tmp_dir = self.mkdtemp() c_file = os.path.join(tmp_dir, 'foo.c') diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests/test_build_py.py --- orig/Lib/distutils/tests/test_build_py.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_py.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_py.py 2016-02-17 12:02:38.000000000 +0800 @@ -106,6 +106,7 @@ ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_byte_compile_optimized(self): project_dir, dist = self.create_dist(py_modules=['boiledeggs']) os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tests/test_config_cmd.py --- orig/Lib/distutils/tests/test_config_cmd.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_config_cmd.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_config_cmd.py 2016-02-17 09:45:32.000000000 +0800 @@ -38,6 +38,7 @@ self.assertEqual(len(self._logs), numlines+1) @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") -+ @unittest.skipUnless(hasattr(os, 'fork'), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_search_cpp(self): pkg_dir, dist = self.create_dist() cmd = config(dist) @@ -709,29 +741,29 @@ diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutil diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/test_install.py --- orig/Lib/distutils/tests/test_install.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install.py 2016-02-17 12:02:31.000000000 +0800 @@ -195,6 +195,7 @@ 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] self.assertEqual(found, expected) -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_record_extensions(self): install_dir = self.mkdtemp() project_dir, dist = self.create_dist(ext_modules=[ diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/tests/test_install_lib.py --- orig/Lib/distutils/tests/test_install_lib.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install_lib.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install_lib.py 2016-02-17 12:02:19.000000000 +0800 @@ -35,6 +35,7 @@ self.assertEqual(cmd.optimize, 2) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_byte_compile(self): project_dir, dist = self.create_dist() os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/test_spawn.py --- orig/Lib/distutils/tests/test_spawn.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_spawn.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_spawn.py 2016-02-17 12:02:10.000000000 +0800 @@ -1,14 +1,14 @@ """Tests for distutils.spawn.""" import unittest @@ -757,7 +789,7 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te - - @unittest.skipUnless(os.name in ('nt', 'posix'), - 'Runs only under posix or nt') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_spawn(self): tmpdir = self.mkdtemp() @@ -771,7 +803,7 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py --- orig/Lib/distutils/tests/test_sysconfig.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-16 16:58:16.000000000 +0800 ++++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-17 10:15:12.000000000 +0800 @@ -11,6 +11,7 @@ from distutils.tests import support from test.support import TESTFN, run_unittest, check_warnings @@ -784,13 +816,13 @@ diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/test self.assertIsNotNone(vars['SO']) self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) -+ @unittest.skipUnless(subprocess.supported, "test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_customize_compiler_before_get_config_vars(self): # Issue #21923: test that a Distribution compiler # instance can be called without an explicit call to diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/test_util.py --- orig/Lib/distutils/tests/test_util.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_util.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/distutils/tests/test_util.py 2016-02-17 12:02:04.000000000 +0800 @@ -10,12 +10,13 @@ check_environ, split_quoted, strtobool, rfc822_escape, byte_compile, @@ -810,7 +842,7 @@ diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/tes # XXX platforms to be covered: mac -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") def test_check_environ(self): util._environ_checked = 0 if 'HOME' in os.environ: @@ -826,6 +858,40 @@ diff -Nru orig/Lib/importlib/_bootstrap_external.py modified/Lib/importlib/_boot def _make_relax_case(): +diff -Nru orig/Lib/os.py modified/Lib/os.py +--- orig/Lib/os.py 2015-12-07 09:39:08.000000000 +0800 ++++ modified/Lib/os.py 2016-02-17 09:09:10.000000000 +0800 +@@ -32,7 +32,7 @@ + __all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", + "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR", + "SEEK_END", "fsencode", "fsdecode", "get_exec_path", "fdopen", +- "popen", "extsep"] ++ "popen", "extsep", "allows_subprocesses"] + + def _exists(name): + return name in globals() +@@ -115,7 +115,6 @@ + + del _names + +- + if _exists("_have_functions"): + _globals = globals() + def _add(str, fn): +@@ -837,6 +836,13 @@ + fsencode, fsdecode = _fscodec() + del _fscodec + ++ ++if sys.platform == "ios": ++ allows_subprocesses = False ++else: ++ allows_subprocesses = False ++ ++ + # Supply spawn*() (probably only for Unix) + if _exists("fork") and not _exists("spawnv") and _exists("execv"): + diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py --- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 +++ modified/Lib/plat-ios/IN.py 2016-02-14 10:29:10.000000000 +0800 @@ -9142,33 +9208,8 @@ diff -Nru orig/Lib/site.py modified/Lib/site.py return USER_SITE diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py --- orig/Lib/subprocess.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/subprocess.py 2016-02-16 16:25:00.000000000 +0800 -@@ -357,6 +357,7 @@ - - import sys - _mswindows = (sys.platform == "win32") -+_ios = (sys.platform == "ios") - - import io - import os -@@ -455,10 +456,15 @@ - else: - _PopenSelector = selectors.SelectSelector - -+if _ios: -+ # iOS doesn't support subprocesses. -+ supported = False -+else: -+ supported = True - - __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", - "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL", -- "SubprocessError", "TimeoutExpired", "CompletedProcess"] -+ "SubprocessError", "TimeoutExpired", "CompletedProcess", "supported"] - # NOTE: We intentionally exclude list2cmdline as it is - # considered an internal implementation detail. issue10838. - -@@ -515,7 +521,6 @@ ++++ modified/Lib/subprocess.py 2016-02-17 09:17:39.000000000 +0800 +@@ -515,7 +515,6 @@ STDOUT = -2 DEVNULL = -3 @@ -9176,17 +9217,17 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py # XXX This function is only used by multiprocessing and the test suite, # but it's here so that it can be imported when Python is compiled without # threads. -@@ -842,6 +847,9 @@ +@@ -842,6 +841,9 @@ restore_signals=True, start_new_session=False, pass_fds=()): """Create new Popen instance.""" -+ if not supported: -+ raise RuntimeError("subprocesses are not supported on this platform.") ++ if not os.allows_subprocesses: ++ raise RuntimeError("Subprocesses are not supported on this platform.") + _cleanup() # Held while anything is calling waitpid before returncode has been # updated to prevent clobbering returncode if wait() or poll() are -@@ -1560,7 +1568,7 @@ +@@ -1560,7 +1562,7 @@ raise SubprocessError("Unknown child exit status!") @@ -9195,7 +9236,7 @@ diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): """Check if child process has terminated. Returns returncode attribute. -@@ -1569,6 +1577,8 @@ +@@ -1569,6 +1571,8 @@ outside of the local scope (nor can any methods it calls). """ @@ -9329,7 +9370,7 @@ diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.p b'\xff'.decode(TESTFN_ENCODING) diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/script_helper.py --- orig/Lib/test/support/script_helper.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/support/script_helper.py 2016-02-16 15:51:58.000000000 +0800 ++++ modified/Lib/test/support/script_helper.py 2016-02-17 09:41:41.000000000 +0800 @@ -11,6 +11,7 @@ import py_compile import contextlib @@ -9343,7 +9384,7 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip __cached_interp_requires_environment = None + -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def interpreter_requires_environment(): """ Returns True if our sys.executable interpreter requires environment @@ -9352,7 +9393,7 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip return _PythonRunResult(rc, out, err), cmd_line + -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def _assert_python(expected_success, *args, **env_vars): res, cmd_line = run_python_until_end(*args, **env_vars) if (res.rc and expected_success) or (not res.rc and not expected_success): @@ -9361,13 +9402,13 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip return _assert_python(False, *args, **env_vars) + -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): """Run a Python subprocess with the given arguments. diff -Nru orig/Lib/test/test_asyncio/test_events.py modified/Lib/test/test_asyncio/test_events.py --- orig/Lib/test/test_asyncio/test_events.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_events.py 2016-02-16 17:30:31.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_events.py 2016-02-17 10:15:11.000000000 +0800 @@ -435,6 +435,7 @@ self._basetest_sock_client_ops(httpd, sock) @@ -9436,13 +9477,13 @@ diff -Nru orig/Lib/test/test_asyncio/test_events.py modified/Lib/test/test_async self.loop.add_signal_handler(signal.SIGTERM, func) -+@unittest.skipUnless(subprocess.supported, "test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class SubprocessTestsMixin: def check_terminated(self, returncode): diff -Nru orig/Lib/test/test_asyncio/test_streams.py modified/Lib/test/test_asyncio/test_streams.py --- orig/Lib/test/test_asyncio/test_streams.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_streams.py 2016-02-16 17:28:52.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_streams.py 2016-02-17 09:41:39.000000000 +0800 @@ -4,6 +4,7 @@ import os import queue @@ -9487,30 +9528,29 @@ diff -Nru orig/Lib/test/test_asyncio/test_streams.py modified/Lib/test/test_asyn self.assertEqual(msg, b"hello world!\n") @unittest.skipIf(sys.platform == 'win32', "Don't have pipes") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_read_all_from_pipe_reader(self): # See asyncio issue 168. This test is derived from the example # subprocess_attach_read_pipe.py, but we configure the diff -Nru orig/Lib/test/test_asyncio/test_subprocess.py modified/Lib/test/test_asyncio/test_subprocess.py --- orig/Lib/test/test_asyncio/test_subprocess.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_subprocess.py 2016-02-16 17:22:17.000000000 +0800 -@@ -1,4 +1,5 @@ ++++ modified/Lib/test/test_asyncio/test_subprocess.py 2016-02-17 09:37:30.000000000 +0800 +@@ -1,3 +1,4 @@ ++import os import signal -+import subprocess as sp import sys import unittest - import warnings @@ -75,6 +76,7 @@ transport.close() -+@unittest.skipUnless(sp.supported, '"Test requires subprocess.Popen()') ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class SubprocessMixin: def test_stdin_stdout(self): diff -Nru orig/Lib/test/test_asyncio/test_unix_events.py modified/Lib/test/test_asyncio/test_unix_events.py --- orig/Lib/test/test_asyncio/test_unix_events.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_unix_events.py 2016-02-16 17:22:13.000000000 +0800 ++++ modified/Lib/test/test_asyncio/test_unix_events.py 2016-02-17 10:15:42.000000000 +0800 @@ -230,6 +230,7 @@ @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), @@ -9523,38 +9563,30 @@ diff -Nru orig/Lib/test/test_asyncio/test_unix_events.py modified/Lib/test/test_ )) -+@unittest.skipUnless(hasattr(os, 'waitpid'), 'os.waitpid() is required') ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class ChildWatcherTestsMixin: ignore_warnings = mock.patch.object(log.logger, "warning") diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py --- orig/Lib/test/test_base64.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_base64.py 2016-02-16 15:50:14.000000000 +0800 -@@ -3,6 +3,7 @@ - import base64 - import binascii - import os -+import subprocess - from array import array - from test.support import script_helper - -@@ -619,7 +620,7 @@ ++++ modified/Lib/test/test_base64.py 2016-02-17 09:41:37.000000000 +0800 +@@ -619,7 +619,7 @@ def test_ErrorHeritage(self): self.assertTrue(issubclass(binascii.Error, ValueError)) - -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class TestMain(unittest.TestCase): def tearDown(self): if os.path.exists(support.TESTFN): diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py --- orig/Lib/test/test_capi.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_capi.py 2016-02-16 15:50:14.000000000 +0800 ++++ modified/Lib/test/test_capi.py 2016-02-17 09:41:32.000000000 +0800 @@ -49,6 +49,7 @@ self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") @unittest.skipUnless(threading, 'Threading required for this test.') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_no_FatalError_infinite_loop(self): with support.SuppressCrashReport(): p = subprocess.Popen([sys.executable, "-c", @@ -9568,12 +9600,12 @@ diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py --- orig/Lib/test/test_cmd_line.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_cmd_line.py 2016-02-16 15:50:13.000000000 +0800 ++++ modified/Lib/test/test_cmd_line.py 2016-02-17 09:41:27.000000000 +0800 @@ -57,6 +57,7 @@ rc, out, err = assert_python_ok('-vv') self.assertNotIn(b'stack overflow', err) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_xoptions(self): def get_xoptions(*args): # use subprocess module directly because test.support.script_helper adds @@ -9581,7 +9613,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py opts = get_xoptions('-Xa', '-Xb=c,d=e') self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_showrefcount(self): def run_python(*args): # this is similar to assert_python_ok but doesn't strip @@ -9589,7 +9621,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # arguments as unicode (using wmain() instead of main()). @unittest.skipIf(sys.platform == 'win32', 'Windows has a native unicode API') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_undecodable_code(self): undecodable = b"\xff" env = os.environ.copy() @@ -9597,7 +9629,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py ) check_output(text) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_unbuffered_output(self): # Test expected operation of the '-u' switch for stream in ('stdout', 'stderr'): @@ -9605,7 +9637,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # for empty and unset PYTHONPATH self.assertEqual(out1, out2) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_displayhook_unencodable(self): for encoding in ('ascii', 'latin-1', 'utf-8'): # We are testing a PYTHON environment variable here, so we can't @@ -9613,7 +9645,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py escaped = repr(text).encode(encoding, 'backslashreplace') self.assertIn(escaped, data) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def check_input(self, code, expected): with tempfile.NamedTemporaryFile("wb+") as stdin: sep = os.linesep.encode('ASCII') @@ -9621,7 +9653,7 @@ diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py # Issue #7111: Python should work without standard streams @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def _test_no_stdio(self, streams): code = """if 1: import os, sys @@ -9640,12 +9672,12 @@ diff -Nru orig/Lib/test/test_compileall.py modified/Lib/test/test_compileall.py compileall.compile_dir(self.directory, workers=-1) diff -Nru orig/Lib/test/test_concurrent_futures.py modified/Lib/test/test_concurrent_futures.py --- orig/Lib/test/test_concurrent_futures.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_concurrent_futures.py 2016-02-16 17:06:07.000000000 +0800 ++++ modified/Lib/test/test_concurrent_futures.py 2016-02-17 09:48:08.000000000 +0800 @@ -91,6 +91,7 @@ executor_type = futures.ThreadPoolExecutor -+@unittest.skipUnless(hasattr(os, 'fork'), 'os.fork() does not exist on this platform') ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class ProcessPoolMixin(ExecutorMixin): executor_type = futures.ProcessPoolExecutor @@ -9668,18 +9700,18 @@ diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py diff -Nru orig/Lib/test/test_eintr.py modified/Lib/test/test_eintr.py --- orig/Lib/test/test_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_eintr.py 2016-02-16 15:50:13.000000000 +0800 ++++ modified/Lib/test/test_eintr.py 2016-02-17 09:41:22.000000000 +0800 @@ -9,6 +9,7 @@ @unittest.skipUnless(os.name == "posix", "only supported on Unix") -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class EINTRTests(unittest.TestCase): @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py --- orig/Lib/test/test_faulthandler.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_faulthandler.py 2016-02-16 15:50:12.000000000 +0800 ++++ modified/Lib/test/test_faulthandler.py 2016-02-17 09:41:16.000000000 +0800 @@ -24,6 +24,7 @@ TIMEOUT = 0.5 @@ -9708,7 +9740,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler finally: sys.stderr = orig_stderr -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_disabled_by_default(self): # By default, the module should be disabled code = "import faulthandler; print(faulthandler.is_enabled())" @@ -9716,7 +9748,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"False") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_sys_xoptions(self): # Test python -X faulthandler code = "import faulthandler; print(faulthandler.is_enabled())" @@ -9724,7 +9756,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler output = subprocess.check_output(args, env=env) self.assertEqual(output.rstrip(), b"True") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_env_var(self): # empty env var code = "import faulthandler; print(faulthandler.is_enabled())" @@ -9758,30 +9790,38 @@ diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py def setUp(self): diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py --- orig/Lib/test/test_file_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_file_eintr.py 2016-02-16 15:50:11.000000000 +0800 ++++ modified/Lib/test/test_file_eintr.py 2016-02-17 09:41:13.000000000 +0800 @@ -69,6 +69,7 @@ self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % (why, stdout.decode(), stderr.decode())) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def _test_reading(self, data_to_write, read_and_verify_code): """Generic buffered read method test harness to validate EINTR behavior. diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py --- orig/Lib/test/test_gc.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gc.py 2016-02-16 15:50:11.000000000 +0800 -@@ -650,6 +650,8 @@ ++++ modified/Lib/test/test_gc.py 2016-02-17 09:41:09.000000000 +0800 +@@ -4,6 +4,7 @@ + temp_dir) + from test.support.script_helper import assert_python_ok, make_script + ++import os + import sys + import time + import gc +@@ -650,6 +651,8 @@ del x gc.set_debug(%s) """ + -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def run_command(code): p = subprocess.Popen([sys.executable, "-Wd", "-c", code], stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py --- orig/Lib/test/test_gdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gdb.py 2016-02-16 16:48:39.000000000 +0800 ++++ modified/Lib/test/test_gdb.py 2016-02-17 09:37:53.000000000 +0800 @@ -5,7 +5,6 @@ import os @@ -9803,7 +9843,7 @@ diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py # errors that manifest this way too. raise unittest.SkipTest("Couldn't find gdb on the path") + except RuntimeError: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ raise unittest.SkipTest('Test requires support for subprocesses.') # Regex to parse: # 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7 @@ -9827,7 +9867,7 @@ diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py --- orig/Lib/test/test_httpservers.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2016-02-16 15:50:10.000000000 +0800 ++++ modified/Lib/test/test_httpservers.py 2016-02-17 09:40:47.000000000 +0800 @@ -16,6 +16,7 @@ import urllib.parse import html @@ -9854,7 +9894,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, "This test can't be run reliably as root (issue #13308).") -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class CGIHTTPServerTestCase(BaseTestCase): class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): pass @@ -9965,7 +10005,7 @@ diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py --- orig/Lib/test/test_json/test_tool.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_json/test_tool.py 2016-02-16 15:50:09.000000000 +0800 ++++ modified/Lib/test/test_json/test_tool.py 2016-02-17 09:40:44.000000000 +0800 @@ -7,6 +7,7 @@ from test.support.script_helper import assert_python_ok @@ -9978,18 +10018,18 @@ diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_ ] """) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_stdin_stdout(self): with subprocess.Popen( (sys.executable, '-m', 'json.tool'), diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py --- orig/Lib/test/test_keyword.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_keyword.py 2016-02-16 15:50:08.000000000 +0800 ++++ modified/Lib/test/test_keyword.py 2016-02-17 09:40:38.000000000 +0800 @@ -46,6 +46,7 @@ fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def _generate_keywords(self, grammar_file, target_keyword_py_file): proc = subprocess.Popen([sys.executable, KEYWORD_FILE, @@ -10091,13 +10131,13 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py f = open(TESTFN, 'w+b') diff -Nru orig/Lib/test/test_multiprocessing_fork.py modified/Lib/test/test_multiprocessing_fork.py --- orig/Lib/test/test_multiprocessing_fork.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_fork.py 2016-02-16 19:53:54.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_fork.py 2016-02-17 09:38:08.000000000 +0800 @@ -1,7 +1,13 @@ -+import subprocess ++import os import unittest + -+if not subprocess.supported: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++if not os.allows_subprocesses: ++ raise unittest.SkipTest('Test requires support for subprocesses.') + import test._test_multiprocessing @@ -10108,13 +10148,13 @@ diff -Nru orig/Lib/test/test_multiprocessing_fork.py modified/Lib/test/test_mult unittest.main() diff -Nru orig/Lib/test/test_multiprocessing_forkserver.py modified/Lib/test/test_multiprocessing_forkserver.py --- orig/Lib/test/test_multiprocessing_forkserver.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_forkserver.py 2016-02-16 19:53:21.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_forkserver.py 2016-02-17 09:37:46.000000000 +0800 @@ -1,7 +1,13 @@ -+import subprocess ++import os import unittest + -+if not subprocess.supported: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++if not os.allows_subprocesses: ++ raise unittest.SkipTest('Test requires support for subprocesses.') + import test._test_multiprocessing @@ -10125,13 +10165,13 @@ diff -Nru orig/Lib/test/test_multiprocessing_forkserver.py modified/Lib/test/tes unittest.main() diff -Nru orig/Lib/test/test_multiprocessing_spawn.py modified/Lib/test/test_multiprocessing_spawn.py --- orig/Lib/test/test_multiprocessing_spawn.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_spawn.py 2016-02-16 19:53:43.000000000 +0800 ++++ modified/Lib/test/test_multiprocessing_spawn.py 2016-02-17 09:37:41.000000000 +0800 @@ -1,7 +1,13 @@ -+import subprocess ++import os import unittest + -+if not subprocess.supported: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++if not os.allows_subprocesses: ++ raise unittest.SkipTest('Test requires support for subprocesses.') + import test._test_multiprocessing @@ -10142,12 +10182,12 @@ diff -Nru orig/Lib/test/test_multiprocessing_spawn.py modified/Lib/test/test_mul unittest.main() diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py --- orig/Lib/test/test_os.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_os.py 2016-02-16 15:50:07.000000000 +0800 ++++ modified/Lib/test/test_os.py 2016-02-17 09:51:58.000000000 +0800 @@ -657,6 +657,7 @@ # Bug 1110478 @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_update2(self): os.environ.clear() os.environ.update(HELLO="World") @@ -10155,91 +10195,101 @@ diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py self.assertEqual(value, "World") @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_os_popen_iter(self): with os.popen( "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: -@@ -1343,6 +1345,7 @@ +@@ -1343,6 +1345,8 @@ os.execve = orig_execve os.defpath = orig_defpath +@unittest.skipUnless(hasattr(os, 'execv'), "os module doesn't provide execvpe()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class ExecTests(unittest.TestCase): @unittest.skipIf(USING_LINUXTHREADS, "avoid triggering a linuxthreads bug: see issue #4970") -@@ -1604,6 +1607,7 @@ +@@ -1604,6 +1608,7 @@ self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_setreuid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -1612,6 +1616,7 @@ +@@ -1612,6 +1617,7 @@ 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_setregid(self): if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(OSError, os.setregid, 0, 0) -@@ -1619,6 +1624,7 @@ +@@ -1619,6 +1625,7 @@ self.assertRaises(OverflowError, os.setregid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_setregid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -2075,6 +2081,7 @@ +@@ -2075,6 +2082,7 @@ class PidTests(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_getppid(self): p = subprocess.Popen([sys.executable, '-c', 'import os; print(os.getppid())'], -@@ -2083,6 +2090,8 @@ +@@ -2083,6 +2091,9 @@ # We are the parent of our subprocess self.assertEqual(int(stdout), os.getpid()) + @unittest.skipUnless(hasattr(os, 'spawnv'), "test needs os.spawnv") + @unittest.skipUnless(hasattr(os, 'waitpid'), "test needs os.waitpid") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_waitpid(self): args = [sys.executable, '-c', 'pass'] pid = os.spawnv(os.P_NOWAIT, args[0], args) -@@ -2548,6 +2557,7 @@ +@@ -2548,6 +2559,7 @@ self.assertGreaterEqual(size.columns, 0) self.assertGreaterEqual(size.lines, 0) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_stty_match(self): """Check if stty returns the same results diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py --- orig/Lib/test/test_pdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pdb.py 2016-02-16 15:50:07.000000000 +0800 -@@ -914,6 +914,7 @@ ++++ modified/Lib/test/test_pdb.py 2016-02-17 09:40:08.000000000 +0800 +@@ -1,6 +1,7 @@ + # A test suite for pdb; not very comprehensive at the moment. + + import doctest ++import os + import pdb + import sys + import types +@@ -914,6 +915,7 @@ class PdbTestCase(unittest.TestCase): -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def run_pdb(self, script, commands): """Run 'script' lines with pdb and the pdb 'commands'.""" filename = 'main.py' -@@ -962,6 +963,7 @@ +@@ -962,6 +964,7 @@ ('bar', 4), ) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_issue7964(self): # open the file as binary so we can force \r\n newline with open(support.TESTFN, 'wb') as f: -@@ -1013,6 +1015,7 @@ +@@ -1013,6 +1016,7 @@ any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 'Fail to step into the caller after a return') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_issue13210(self): # invoking "continue" on a non-main thread triggered an exception # inside signal.signal @@ -10309,7 +10359,7 @@ diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py for f in (TESTFN, TESTFN2): diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py --- orig/Lib/test/test_platform.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_platform.py 2016-02-16 15:50:06.000000000 +0800 ++++ modified/Lib/test/test_platform.py 2016-02-17 09:39:54.000000000 +0800 @@ -9,11 +9,13 @@ from test import support @@ -10320,7 +10370,7 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py res = platform.architecture() @support.skip_unless_symlink -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_architecture_via_symlink(self): # issue3762 # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. @@ -10345,13 +10395,13 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py ): self.assertEqual(platform._parse_release_file(input), output) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_popen(self): mswindows = (sys.platform == "win32") diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py --- orig/Lib/test/test_poll.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_poll.py 2016-02-16 15:50:05.000000000 +0800 ++++ modified/Lib/test/test_poll.py 2016-02-17 09:39:49.000000000 +0800 @@ -25,6 +25,7 @@ match.append(fd) return match @@ -10364,34 +10414,33 @@ diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py # Another test case for poll(). This is copied from the test case for # select(), modified to use poll() instead. -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_poll2(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py --- orig/Lib/test/test_popen.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_popen.py 2016-02-16 15:50:04.000000000 +0800 -@@ -5,7 +5,9 @@ ++++ modified/Lib/test/test_popen.py 2016-02-17 09:39:36.000000000 +0800 +@@ -5,7 +5,8 @@ import unittest from test import support -import os, sys +import os -+import subprocess +import sys # Test that command-lines get down as we expect. # To do this we execute: -@@ -16,6 +18,8 @@ +@@ -16,6 +17,8 @@ if ' ' in python: python = '"' + python + '"' # quote embedded space for cmdline + -+@unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class PopenTest(unittest.TestCase): def _do_test_commandline(self, cmdline, expected): -@@ -23,7 +27,7 @@ +@@ -23,7 +26,7 @@ cmd = cmd % (python, cmdline) with os.popen(cmd) as p: data = p.read() @@ -10402,18 +10451,16 @@ diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py def test_popen(self): diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py --- orig/Lib/test/test_posix.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_posix.py 2016-02-16 15:50:04.000000000 +0800 -@@ -11,8 +11,8 @@ ++++ modified/Lib/test/test_posix.py 2016-02-17 11:00:48.000000000 +0800 +@@ -11,7 +11,6 @@ import os import platform import pwd -import shutil import stat -+import subprocess import tempfile import unittest - import warnings -@@ -20,6 +20,7 @@ +@@ -20,6 +19,7 @@ _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(), support.TESTFN + '-dummy-symlink') @@ -10421,50 +10468,99 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py class PosixTester(unittest.TestCase): def setUp(self): -@@ -529,9 +530,10 @@ +@@ -40,17 +40,24 @@ + def testNoArgFunctions(self): + # test posix functions which take no arguments and have + # no side-effects which we need to cleanup (e.g., fork, wait, abort) +- NO_ARG_FUNCTIONS = [ "ctermid", "getcwd", "getcwdb", "uname", +- "times", "getloadavg", +- "getegid", "geteuid", "getgid", "getgroups", +- "getpid", "getpgrp", "getppid", "getuid", "sync", +- ] ++ NO_ARG_FUNCTIONS = [ ++ "ctermid", "getcwd", "getcwdb", "uname", ++ "times", "getloadavg", ++ "getegid", "geteuid", "getgid", ++ "getpid", "getpgrp", "getppid", "getuid", "sync", ++ ] ++ ++ if sys.platform != 'ios': ++ NO_ARG_FUNCTIONS.append("getgroups") + + for name in NO_ARG_FUNCTIONS: + posix_func = getattr(posix, name, None) + if posix_func is not None: +- posix_func() +- self.assertRaises(TypeError, posix_func, 1) ++ try: ++ posix_func() ++ self.assertRaises(TypeError, posix_func, 1) ++ except Exception as e: ++ self.fail('Problem invoking %s: %s' % (name, e)) + + @unittest.skipUnless(hasattr(posix, 'getresuid'), + 'test needs posix.getresuid()') +@@ -529,9 +536,10 @@ check_stat(uid, gid) self.assertRaises(OSError, chown_func, first_param, 0, -1) check_stat(uid, gid) - if 0 not in os.getgroups(): - self.assertRaises(OSError, chown_func, first_param, -1, 0) - check_stat(uid, gid) -+ if hasattr(os, 'getgroups'): ++ if hasattr(os, 'getgroups') and sys.platform != 'ios': + if 0 not in os.getgroups(): + self.assertRaises(OSError, chown_func, first_param, -1, 0) + check_stat(uid, gid) # test illegal types for t in str, float: self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) -@@ -791,8 +793,8 @@ +@@ -791,8 +799,8 @@ group = pwd.getpwuid(os.getuid())[3] self.assertIn(group, posix.getgrouplist(user, group)) - @unittest.skipUnless(hasattr(os, 'getegid'), "test needs os.getegid()") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_getgroups(self): with os.popen('id -G 2>/dev/null') as idg: groups = idg.read().strip() +@@ -1040,7 +1048,7 @@ + self.assertIsInstance(hi, int) + self.assertGreaterEqual(hi, lo) + # OSX evidently just returns 15 without checking the argument. +- if sys.platform != "darwin": ++ if sys.platform not in("darwin", "ios"): + self.assertRaises(OSError, posix.sched_get_priority_min, -23) + self.assertRaises(OSError, posix.sched_get_priority_max, -23) + +@@ -1212,6 +1220,7 @@ + open(fn, 'wb').close() + self.assertRaises(ValueError, os.stat, fn_with_NUL) + ++ + class PosixGroupsTester(unittest.TestCase): + + def setUp(self): diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py --- orig/Lib/test/test_pty.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pty.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_pty.py 2016-02-17 09:52:41.000000000 +0800 @@ -111,7 +111,7 @@ os.close(slave_fd) os.close(master_fd) - -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_fork(self): debug("calling pty.fork()") pid, master_fd = pty.fork() diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py --- orig/Lib/test/test_quopri.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_quopri.py 2016-02-16 15:50:03.000000000 +0800 ++++ modified/Lib/test/test_quopri.py 2016-02-17 09:39:28.000000000 +0800 @@ -180,6 +180,7 @@ for p, e in self.HSTRINGS: self.assertEqual(quopri.decodestring(e, header=True), p) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_scriptencode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri"], @@ -10472,62 +10568,64 @@ diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py self.assertEqual(cout[i], e[i]) self.assertEqual(cout, e) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_scriptdecode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri", "-d"], diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_helper.py --- orig/Lib/test/test_script_helper.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_script_helper.py 2016-02-16 15:51:53.000000000 +0800 -@@ -34,6 +34,7 @@ ++++ modified/Lib/test/test_script_helper.py 2016-02-17 09:38:53.000000000 +0800 +@@ -1,5 +1,6 @@ + """Unittests for test.support.script_helper. Who tests the test helper?""" + ++import os + import subprocess + import sys + from test.support import script_helper +@@ -34,6 +35,7 @@ self.assertIn('import sys; sys.exit(0)', error_msg, msg='unexpected command line.') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @mock.patch('subprocess.Popen') def test_assert_python_isolated_when_env_not_required(self, mock_popen): with mock.patch.object(script_helper, -@@ -52,6 +53,7 @@ +@@ -52,6 +54,7 @@ self.assertIn('-I', popen_command) self.assertNotIn('-E', popen_command) # -I overrides this -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @mock.patch('subprocess.Popen') def test_assert_python_not_isolated_when_env_is_required(self, mock_popen): """Ensure that -I is not passed when the environment is required.""" -@@ -81,6 +83,7 @@ +@@ -81,6 +84,7 @@ # Reset the private cached state. script_helper.__dict__['__cached_interp_requires_environment'] = None -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_true(self, mock_check_call): mock_check_call.side_effect = subprocess.CalledProcessError('', '') -@@ -88,6 +91,7 @@ +@@ -88,6 +92,7 @@ self.assertTrue(script_helper.interpreter_requires_environment()) self.assertEqual(1, mock_check_call.call_count) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_false(self, mock_check_call): # The mocked subprocess.check_call fakes a no-error process. -@@ -95,6 +99,7 @@ +@@ -95,6 +100,7 @@ self.assertFalse(script_helper.interpreter_requires_environment()) self.assertEqual(1, mock_check_call.call_count) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.check_call()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @mock.patch('subprocess.check_call') def test_interpreter_requires_environment_details(self, mock_check_call): script_helper.interpreter_requires_environment() diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py --- orig/Lib/test/test_select.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_select.py 2016-02-16 15:50:01.000000000 +0800 -@@ -1,11 +1,13 @@ - import errno - import os - import select -+import subprocess - import sys ++++ modified/Lib/test/test_select.py 2016-02-17 09:38:45.000000000 +0800 +@@ -5,7 +5,8 @@ import unittest from test import support @@ -10537,17 +10635,17 @@ diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py "can't easily test on this system") class SelectTestCase(unittest.TestCase): -@@ -44,6 +46,7 @@ +@@ -44,6 +45,7 @@ self.assertIsNot(r, x) self.assertIsNot(w, x) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_select(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py --- orig/Lib/test/test_shutil.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2016-02-16 15:50:01.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2016-02-17 09:38:37.000000000 +0800 @@ -51,6 +51,7 @@ except ImportError: ZIP_SUPPORT = shutil.which('zip') @@ -10568,24 +10666,24 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py self.assertEqual(size.lines, 888) @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_stty_match(self): """Check if stty returns the same results ignoring env diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py --- orig/Lib/test/test_signal.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_signal.py 2016-02-16 15:50:00.000000000 +0800 ++++ modified/Lib/test/test_signal.py 2016-02-17 09:38:33.000000000 +0800 @@ -158,6 +158,7 @@ @unittest.skipIf(sys.platform=='freebsd6', 'inter process signals not reliable (do not mix well with threading) ' 'on freebsd6') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_main(self): # This function spawns a child process to insulate the main # test-running process from all the signals. It then diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py --- orig/Lib/test/test_site.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_site.py 2016-02-16 15:49:59.000000000 +0800 ++++ modified/Lib/test/test_site.py 2016-02-17 09:38:29.000000000 +0800 @@ -31,6 +31,7 @@ os.makedirs(site.USER_SITE) site.addsitedir(site.USER_SITE) @@ -10598,7 +10696,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " "user-site (site.ENABLE_USER_SITE)") -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_s_option(self): usersite = site.USER_SITE self.assertIn(usersite, sys.path) @@ -10615,7 +10713,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py """Restore sys.path""" sys.path[:] = self.sys_path -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_abs_paths(self): # Make sure all imported modules have their __file__ and __cached__ # attributes as absolute paths. Arranging to put the Lib directory on @@ -10623,7 +10721,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py class StartupImportTests(unittest.TestCase): -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_startup_imports(self): # This tests checks which modules are loaded by Python when it # initially starts upon startup. @@ -10746,7 +10844,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py SendrecvmsgUnixStreamTestBase): diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver.py --- orig/Lib/test/test_socketserver.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_socketserver.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_socketserver.py 2016-02-17 11:02:33.000000000 +0800 @@ -7,7 +7,7 @@ import select import signal @@ -10756,8 +10854,12 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver import errno import tempfile import unittest -@@ -31,6 +31,7 @@ - HAVE_FORKING = hasattr(os, "fork") +@@ -28,9 +28,10 @@ + HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX") + requires_unix_sockets = unittest.skipUnless(HAVE_UNIX_SOCKETS, + 'requires Unix sockets') +-HAVE_FORKING = hasattr(os, "fork") ++HAVE_FORKING = hasattr(os, "fork") and os.allows_subprocesses requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking') + @@ -10781,7 +10883,7 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver socketserver.StreamRequestHandler, diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py --- orig/Lib/test/test_source_encoding.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_source_encoding.py 2016-02-16 15:49:58.000000000 +0800 ++++ modified/Lib/test/test_source_encoding.py 2016-02-17 09:38:26.000000000 +0800 @@ -7,6 +7,7 @@ import sys import subprocess @@ -10794,19 +10896,19 @@ diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_en # two bytes in common with the UTF-8 BOM self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_20731(self): sub = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py --- orig/Lib/test/test_subprocess.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_subprocess.py 2016-02-16 19:32:13.000000000 +0800 ++++ modified/Lib/test/test_subprocess.py 2016-02-17 09:36:48.000000000 +0800 @@ -26,6 +26,9 @@ mswindows = (sys.platform == "win32") -+if not subprocess.supported: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++if not os.allows_subprocesses: ++ raise unittest.SkipTest('Test requires support for subprocesses.') + # # Depends on the following external programs: Python @@ -10826,7 +10928,7 @@ diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py import distutils.unixccompiler diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py --- orig/Lib/test/test_sys.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sys.py 2016-02-16 15:49:57.000000000 +0800 ++++ modified/Lib/test/test_sys.py 2016-02-17 09:38:18.000000000 +0800 @@ -20,6 +20,7 @@ except ImportError: threading = None @@ -10839,7 +10941,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py finally: sys.setrecursionlimit(oldlimit) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_recursionlimit_fatalerror(self): # A fatal error occurs if a second recursion limit is hit when recovering # from a first one. @@ -10847,7 +10949,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py def test_clear_type_cache(self): sys._clear_type_cache() -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_ioencoding(self): env = dict(os.environ) @@ -10855,7 +10957,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py @unittest.skipUnless(test.support.FS_NONASCII, 'requires OS support of non-ASCII encodings') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_ioencoding_nonascii(self): env = dict(os.environ) @@ -10863,7 +10965,7 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py @unittest.skipIf(sys.base_prefix != sys.prefix, 'Test is not venv-compatible') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_executable(self): # sys.executable should be absolute self.assertEqual(os.path.abspath(sys.executable), sys.executable) @@ -10871,13 +10973,13 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py expected = None self.check_fsencoding(fs_encoding, expected) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def c_locale_get_error_handler(self, isolated=False, encoding=None): # Force the POSIX locale env = os.environ.copy() diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py --- orig/Lib/test/test_sysconfig.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2016-02-16 15:49:56.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2016-02-17 09:42:01.000000000 +0800 @@ -15,6 +15,7 @@ get_scheme_names, get_config_var, _main) import _osx_support @@ -10896,13 +10998,25 @@ diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py self.assertEqual(get_scheme_names(), wanted) @skip_unless_symlink -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_symlink(self): # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. +diff -Nru orig/Lib/test/test_tempfile.py modified/Lib/test/test_tempfile.py +--- orig/Lib/test/test_tempfile.py 2015-12-07 09:39:09.000000000 +0800 ++++ modified/Lib/test/test_tempfile.py 2016-02-17 11:43:31.000000000 +0800 +@@ -23,7 +23,7 @@ + has_stat = 0 + + has_textmode = (tempfile._text_openflags != tempfile._bin_openflags) +-has_spawnl = hasattr(os, 'spawnl') ++has_spawnl = hasattr(os, 'spawnl') and os.allows_subprocesses + + # TEST_FILES may need to be tweaked for systems depending on the maximum + # number of files that can be opened at one time (see ulimit -n) diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py --- orig/Lib/test/test_thread.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_thread.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Lib/test/test_thread.py 2016-02-17 09:53:21.000000000 +0800 @@ -14,12 +14,14 @@ _print_mutex = thread.allocate_lock() @@ -10922,7 +11036,7 @@ diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py @unittest.skipIf(sys.platform.startswith('win'), "This test is only appropriate for POSIX-like systems.") -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') @support.reap_threads def test_forkinthread(self): def thread1(): @@ -10947,20 +11061,22 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py # Python code returned but before the thread state is deleted. diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py --- orig/Lib/test/test_traceback.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_traceback.py 2016-02-16 15:49:56.000000000 +0800 -@@ -6,6 +6,7 @@ ++++ modified/Lib/test/test_traceback.py 2016-02-17 11:55:04.000000000 +0800 +@@ -5,7 +5,9 @@ + import linecache import sys import unittest ++import os import re +import subprocess from test import support from test.support import TESTFN, Error, captured_output, unlink, cpython_only from test.support.script_helper import assert_python_ok -@@ -110,11 +111,12 @@ +@@ -110,11 +112,12 @@ err = traceback.format_exception_only(None, None) self.assertEqual(err, ['None\n']) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_encoded_file(self): # Test that tracebacks are correctly printed for encoded source files: # - correct line number (Issue2384) @@ -10972,15 +11088,15 @@ diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py # encoding may be different from the current interpreter, on Windows diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py --- orig/Lib/test/test_unicodedata.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_unicodedata.py 2016-02-16 15:49:55.000000000 +0800 -@@ -9,6 +9,7 @@ ++++ modified/Lib/test/test_unicodedata.py 2016-02-17 09:41:56.000000000 +0800 +@@ -6,6 +6,7 @@ + + """ + ++import os import sys import unittest import hashlib -+import subprocess - from test.support import script_helper - - encoding = 'utf-8' @@ -222,8 +223,10 @@ self.assertEqual(eaw('\u2010'), 'A') self.assertEqual(eaw('\U00020000'), 'W') @@ -10988,7 +11104,7 @@ diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.p + class UnicodeMiscTest(UnicodeDatabaseTest): -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_failed_import_during_compiling(self): # Issue 4367 # Decoding \N escapes requires the unicodedata module. If it can't be @@ -11024,7 +11140,7 @@ diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py with support.transient_internet(redirect_url_with_frag): diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py --- orig/Lib/test/test_uuid.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_uuid.py 2016-02-16 15:49:54.000000000 +0800 ++++ modified/Lib/test/test_uuid.py 2016-02-17 10:14:39.000000000 +0800 @@ -14,6 +14,7 @@ except: return False @@ -11037,7 +11153,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py equal(str(u), v) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def testIssue8621(self): # On at least some versions of OSX uuid.uuid4 generates # the same sequence of UUIDs in the parent and any @@ -11045,7 +11161,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py class TestInternals(unittest.TestCase): @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_find_mac(self): data = ''' fake hwaddr @@ -11053,7 +11169,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py "%s is not an RFC 4122 node ID" % hex) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_ifconfig_getnode(self): node = uuid._ifconfig_getnode() self.check_node(node, 'ifconfig', True) @@ -11061,7 +11177,7 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py self.check_node(node, 'ip', True) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_arp_getnode(self): node = uuid._arp_getnode() self.check_node(node, 'arp', True) @@ -11069,13 +11185,13 @@ diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py self.check_node(node, 'lanscan', True) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_netstat_getnode(self): node = uuid._netstat_getnode() self.check_node(node, 'netstat', True) diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py --- orig/Lib/test/test_venv.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_venv.py 2016-02-16 15:49:46.000000000 +0800 ++++ modified/Lib/test/test_venv.py 2016-02-17 09:41:45.000000000 +0800 @@ -35,6 +35,7 @@ def failsOnWindows(f): return f @@ -11088,7 +11204,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) @skipInVenv -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_prefixes(self): """ Test that the prefix values are as expected. @@ -11096,7 +11212,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py # point to the venv being used to run the test, and we lose the link # to the source build - so Python can't initialise properly. @skipInVenv -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_executable(self): """ Test that the sys.executable value is as expected. @@ -11104,7 +11220,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py self.assertEqual(out.strip(), envpy.encode()) @unittest.skipUnless(can_symlink(), 'Needs symlinks') -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_executable_symlinks(self): """ Test that the sys.executable value is as expected. @@ -11112,7 +11228,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py @skipInVenv class EnsurePipTest(BaseTest): """Test venv module installation of pip.""" -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def assert_pip_not_installed(self): envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe) @@ -11120,7 +11236,7 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py # Requesting pip fails without SSL (http://bugs.python.org/issue19744) @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_with_pip(self): rmtree(self.env_dir) with EnvironmentVarGuard() as envvars: @@ -11172,12 +11288,12 @@ diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_b class TestBreak(unittest.TestCase): diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py --- orig/Lib/unittest/test/test_runner.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/unittest/test/test_runner.py 2016-02-16 15:49:39.000000000 +0800 ++++ modified/Lib/unittest/test/test_runner.py 2016-02-17 09:41:43.000000000 +0800 @@ -274,6 +274,7 @@ expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) self.assertEqual(runner._makeResult(), expectedresult) -+ @unittest.skipUnless(subprocess.supported, "Test requires subprocess.Popen()") ++ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') def test_warnings(self): """ Check that warnings argument of TextTestRunner correctly affects the @@ -28921,7 +29037,7 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c r = hypot(x, y); diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c --- orig/Modules/posixmodule.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/posixmodule.c 2016-02-14 10:41:08.000000000 +0800 ++++ modified/Modules/posixmodule.c 2016-02-17 09:05:04.000000000 +0800 @@ -20,6 +20,8 @@ # pragma weak statvfs # pragma weak fstatvfs @@ -28931,31 +29047,15 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* __APPLE__ */ #define PY_SSIZE_T_CLEAN -@@ -175,6 +177,23 @@ +@@ -175,7 +177,6 @@ #endif /* _MSC_VER */ #endif /* ! __WATCOMC__ || __QNX__ */ -+// iOS *defines* a number of POSIX functions, but you can't use them -+// because iOS isn't a conventional multiprocess environment. -+#if TARGET_OS_IPHONE -+# undef HAVE_EXECV -+# undef HAVE_FORK -+# undef HAVE_FORK1 -+# undef HAVE_FORKPTY -+# undef HAVE_GETGROUPS -+# undef HAVE_SCHED_H -+# undef HAVE_SENDFILE -+# undef HAVE_SETPRIORITY -+# undef HAVE_SPAWNV -+# undef HAVE_WAIT -+# undef HAVE_WAIT3 -+# undef HAVE_WAIT4 -+# undef HAVE_WAITPID -+#endif /* TARGET_OS_IPHONE */ - +- /*[clinic input] # one of the few times we lie about this name! -@@ -1127,7 +1146,9 @@ + module os +@@ -1127,7 +1128,9 @@ #include static char **environ; #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) @@ -28965,7 +29065,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* !_MSC_VER */ static PyObject * -@@ -1178,7 +1199,7 @@ +@@ -1178,7 +1181,7 @@ Py_DECREF(k); Py_DECREF(v); } @@ -28974,7 +29074,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c if (environ == NULL) return d; /* This part ignores errors */ -@@ -4285,7 +4306,12 @@ +@@ -4285,7 +4288,12 @@ long result; char *bytes = PyBytes_AsString(command); Py_BEGIN_ALLOW_THREADS @@ -29070,7 +29170,7 @@ diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c n++; diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h --- orig/Python/importlib_external.h 2015-12-07 09:39:11.000000000 +0800 -+++ modified/Python/importlib_external.h 2016-02-16 16:06:55.000000000 +0800 ++++ modified/Python/importlib_external.h 2016-02-17 10:08:14.000000000 +0800 @@ -2,52 +2,52 @@ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, @@ -34450,7 +34550,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-16 19:55:51.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-17 11:57:08.000000000 +0800 @@ -0,0 +1,149 @@ +// +// main.m From bb5695432d007ba2bc777efde91b608c5d115f6a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 17 Feb 2016 12:07:08 +0800 Subject: [PATCH 36/51] Added unittest and lib2to3 back into distribution list. --- patch/Python/lib-exclude.lst | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/patch/Python/lib-exclude.lst b/patch/Python/lib-exclude.lst index d931a4a0..88b5ef87 100644 --- a/patch/Python/lib-exclude.lst +++ b/patch/Python/lib-exclude.lst @@ -1,16 +1,15 @@ -bsddb/* -config-*/* -ctypes/test/* -curses/* +bsddb +config-* +ctypes/test +curses distutils/tests -ensurepip/* -hotshot/* -idlelib/* -lib*/* -site-packages/* +ensurepip +hotshot +idlelib +lib2to3/tests +site-packages sqlite3/test -*test*/* -tkinter/* -turtledemo/* -wsgiref/* -*.pyc +test +turtle.py +turtledemo +wsgiref From 3c4aede35903a9a5c081aedfbb35b9088c661270 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 17 Feb 2016 14:10:32 +0800 Subject: [PATCH 37/51] Added LZMA to the build. --- Makefile | 31 ++++++++++++++++++++----------- patch/Python/Setup.embedded | 2 +- patch/Python/lib-exclude.lst | 25 ++++++++++++------------- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 7d37eb0c..ef852636 100644 --- a/Makefile +++ b/Makefile @@ -57,8 +57,9 @@ CFLAGS-watchOS=-mwatchos-version-min=2.0 CFLAGS-watchos.armv7k= -fembed-bitcode PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no -# override machine for arm64 -MACHINE-arm64=aarch64 +# override machine types for arm64 +MACHINE_DETAILED-arm64=aarch64 +MACHINE_SIMPLE-arm64=arm all: $(foreach os,$(OS),$(os)) @@ -160,16 +161,22 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile # - $2 - OS define build-target ARCH-$1= $$(subst .,,$$(suffix $1)) -ifdef MACHINE-$$(ARCH-$1) -MACHINE-$1= $$(MACHINE-$$(ARCH-$1)) +ifdef MACHINE_DETAILED-$$(ARCH-$1) +MACHINE_DETAILED-$1= $$(MACHINE_DETAILED-$$(ARCH-$1)) else -MACHINE-$1= $$(ARCH-$1) +MACHINE_DETAILED-$1= $$(ARCH-$1) +endif +ifdef MACHINE_SIMPLE-$$(ARCH-$1) +MACHINE_SIMPLE-$1= $$(MACHINE_SIMPLE-$$(ARCH-$1)) +else +MACHINE_SIMPLE-$1= $$(ARCH-$1) endif SDK-$1= $$(basename $1) SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1= xcrun --sdk $$(SDK-$1) clang\ - -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) +CC-$1= xcrun --sdk $$(SDK-$1) clang\ + -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) +LDFLAGS-$1= -arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1) OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION)-$1 @@ -230,7 +237,9 @@ $$(XZ_DIR-$1)/Makefile: downloads/xz-$(XZ_VERSION).tgz # Configure the build cd $$(XZ_DIR-$1) && ./configure \ CC="$$(CC-$1)" \ - --host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + LDFLAGS="$$(LDFLAGS-$1)" \ + --disable-shared --enable-static \ + --host=$$(MACHINE_SIMPLE-$1)-apple-darwin \ --prefix=$(PROJECT_DIR)/build/$2/xz # Build XZ @@ -250,14 +259,14 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ - --host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + --host=$$(MACHINE_DETAILED-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ $$(PYTHON_CONFIGURE-$2) # Build Python -$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a +$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a build/$2/xz/lib/liblzma.a # Build target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install @@ -267,7 +276,7 @@ build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/p # Dump vars (for test) vars-$1: @echo "ARCH-$1: $$(ARCH-$1)" - @echo "MACHINE-$1: $$(MACHINE-$1)" + @echo "MACHINE_DETAILED-$1: $$(MACHINE_DETAILED-$1)" @echo "SDK-$1: $$(SDK-$1)" @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)" @echo "CC-$1: $$(CC-$1)" diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded index e087ef76..3c19d7f2 100644 --- a/patch/Python/Setup.embedded +++ b/patch/Python/Setup.embedded @@ -19,7 +19,7 @@ _elementtree _elementtree.c \ _heapq _heapqmodule.c _json _json.c _lsprof _lsprof.o rotatingtree.c -# _lzma _lzmamodule.c -I$(srcdir)/../xz/include -L$(srcdir)/../xz/lib -llzma +_lzma _lzmamodule.c -I$(srcdir)/../xz/include -L$(srcdir)/../xz/lib -llzma _md5 md5module.c _multibytecodec cjkcodecs/multibytecodec.c _multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c diff --git a/patch/Python/lib-exclude.lst b/patch/Python/lib-exclude.lst index 88b5ef87..7367ffa9 100644 --- a/patch/Python/lib-exclude.lst +++ b/patch/Python/lib-exclude.lst @@ -1,15 +1,14 @@ -bsddb config-* -ctypes/test -curses -distutils/tests -ensurepip -hotshot -idlelib -lib2to3/tests -site-packages -sqlite3/test -test +ctypes/test/* +curses/* +distutils/tests/* +ensurepip/* +idlelib/* +lib2to3/tests/* +site-packages/* +sqlite3/test/* +test/* +tkinter/* turtle.py -turtledemo -wsgiref +turtledemo/* +wsgiref/* From b34e9cab2b7e7e6a570c9bf9bd4ac74023febc13 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 17 Feb 2016 21:52:47 +0800 Subject: [PATCH 38/51] Restored #undefs needed for tvOS and watchOS. --- patch/Python/Python.patch | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 70f75822..66111bcb 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -29037,7 +29037,7 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c r = hypot(x, y); diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c --- orig/Modules/posixmodule.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/posixmodule.c 2016-02-17 09:05:04.000000000 +0800 ++++ modified/Modules/posixmodule.c 2016-02-17 14:14:22.000000000 +0800 @@ -20,6 +20,8 @@ # pragma weak statvfs # pragma weak fstatvfs @@ -29047,15 +29047,30 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* __APPLE__ */ #define PY_SSIZE_T_CLEAN -@@ -175,7 +177,6 @@ +@@ -175,6 +177,22 @@ #endif /* _MSC_VER */ #endif /* ! __WATCOMC__ || __QNX__ */ -- ++// tvOS and watchOS don't provide a number of important POSIX functions. ++#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++# undef HAVE_EXECV ++# undef HAVE_FORK ++# undef HAVE_FORK1 ++# undef HAVE_FORKPTY ++# undef HAVE_GETGROUPS ++# undef HAVE_SCHED_H ++# undef HAVE_SENDFILE ++# undef HAVE_SETPRIORITY ++# undef HAVE_SPAWNV ++# undef HAVE_WAIT ++# undef HAVE_WAIT3 ++# undef HAVE_WAIT4 ++# undef HAVE_WAITPID ++#endif /* TVOS || WATCHOS */ + /*[clinic input] # one of the few times we lie about this name! - module os -@@ -1127,7 +1128,9 @@ +@@ -1127,7 +1145,9 @@ #include static char **environ; #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) @@ -29065,7 +29080,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* !_MSC_VER */ static PyObject * -@@ -1178,7 +1181,7 @@ +@@ -1178,7 +1198,7 @@ Py_DECREF(k); Py_DECREF(v); } @@ -29074,7 +29089,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c if (environ == NULL) return d; /* This part ignores errors */ -@@ -4285,7 +4288,12 @@ +@@ -4285,7 +4305,12 @@ long result; char *bytes = PyBytes_AsString(command); Py_BEGIN_ALLOW_THREADS @@ -29170,7 +29185,7 @@ diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c n++; diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h --- orig/Python/importlib_external.h 2015-12-07 09:39:11.000000000 +0800 -+++ modified/Python/importlib_external.h 2016-02-17 10:08:14.000000000 +0800 ++++ modified/Python/importlib_external.h 2016-02-17 12:30:41.000000000 +0800 @@ -2,52 +2,52 @@ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, From 88c33c4081f357b736a0e003f091d714d14859fa Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 23 Feb 2016 22:32:50 +0800 Subject: [PATCH 39/51] Added missing entries in download target. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ef852636..c6d2654b 100644 --- a/Makefile +++ b/Makefile @@ -71,7 +71,7 @@ clean: distclean: clean rm -rf downloads -downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz +downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/bzip2-$(BZIP2_VERSION).tgz downloads/xz-$(XZ_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz ########################################################################### # OpenSSL From d431ce0aa1df9748066a13f350e22bcab804e634 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 24 Feb 2016 09:05:18 +0800 Subject: [PATCH 40/51] Added BZip2 and XZ support. --- Makefile | 165 +++++++++++++++++++++++++++++++++++++++++------------ README.rst | 6 +- 2 files changed, 132 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index a230537f..f9347558 100644 --- a/Makefile +++ b/Makefile @@ -1,54 +1,65 @@ # # Useful targets: -# - all - build everything -# - iOS - build everything for iOS -# - tvOS - build everything for tvOS -# - watchOS - build everything for watchOS -# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS -# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +# - all - build everything +# - iOS - build everything for iOS +# - tvOS - build everything for tvOS +# - watchOS - build everything for watchOS +# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS +# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS # - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - Python.framework-iOS - build Python.framework for iOS -# - Python.framework-tvOS - build Python.framework for tvOS -# - Python.framework-watchOS - build Python.framework for watchOS -# - Python-host - build host python +# - BZip2-iOS - build BZip2 library for iOS +# - BZip2-tvOS - build BZip2 library for tvOS +# - BZip2-watchOS - build BZip2 library for watchOS +# - XZ-iOS - build XZ library for iOS +# - XZ-tvOS - build XZ library for tvOS +# - XZ-watchOS - build XZ library for watchOS +# - Python.framework-iOS - build Python.framework for iOS +# - Python.framework-tvOS - build Python.framework for tvOS +# - Python.framework-watchOS - build Python.framework for watchOS +# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) -BUILD_NUMBER=4 +BUILD_NUMBER=5 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.4.2 -PYTHON_VER= $(basename $(PYTHON_VERSION)) +PYTHON_VER= $(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 -OPENSSL_REVISION=e +OPENSSL_REVISION=f OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) +BZIP2_VERSION=1.0.6 + +XZ_VERSION=5.2.2 + # Supported OS -OS= iOS tvOS watchOS +OS= iOS tvOS watchOS # iOS targets TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 CFLAGS-iOS=-miphoneos-version-min=7.0 -CFLAGS-iphoneos.armv7= -fembed-bitcode -CFLAGS-iphoneos.armv7s= -fembed-bitcode -CFLAGS-iphoneos.arm64= -fembed-bitcode +CFLAGS-iphoneos.armv7= -fembed-bitcode +CFLAGS-iphoneos.armv7s= -fembed-bitcode +CFLAGS-iphoneos.arm64= -fembed-bitcode # tvOS targets TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64 CFLAGS-tvOS=-mtvos-version-min=9.0 -CFLAGS-appletvos.arm64= -fembed-bitcode -PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no +CFLAGS-appletvos.arm64= -fembed-bitcode +PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no # watchOS targets TARGETS-watchOS=watchsimulator.i386 watchos.armv7k CFLAGS-watchOS=-mwatchos-version-min=2.0 -CFLAGS-watchos.armv7k= -fembed-bitcode +CFLAGS-watchos.armv7k= -fembed-bitcode PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no -# override machine for arm64 -MACHINE-arm64=aarch64 +# override machine types for arm64 +MACHINE_DETAILED-arm64=aarch64 +MACHINE_SIMPLE-arm64=arm all: $(foreach os,$(OS),$(os)) @@ -60,7 +71,7 @@ clean: distclean: clean rm -rf downloads -downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz +downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/bzip2-$(BZIP2_VERSION).tgz downloads/xz-$(XZ_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz ########################################################################### # OpenSSL @@ -80,6 +91,35 @@ downloads/openssl-$(OPENSSL_VERSION).tgz: -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi + +########################################################################### +# BZip2 +########################################################################### + +# Clean the bzip2 project +clean-bzip2: + rm -rf build/*/bzip2-$(BZIP2_VERSION)-* \ + build/*/bzip2 + +# Download original OpenSSL source code archive. +downloads/bzip2-$(BZIP2_VERSION).tgz: + mkdir -p downloads + if [ ! -e downloads/bzip2-$(BZIP2_VERSION).tgz ]; then curl --fail -L http://www.bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -o downloads/bzip2-$(BZIP2_VERSION).tgz; fi + +########################################################################### +# XZ (LZMA) +########################################################################### + +# Clean the XZ project +clean-xz: + rm -rf build/*/xz-$(XZ_VERSION)-* \ + build/*/xz + +# Download original OpenSSL source code archive. +downloads/xz-$(XZ_VERSION).tgz: + mkdir -p downloads + if [ ! -e downloads/xz-$(XZ_VERSION).tgz ]; then curl --fail -L http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz -o downloads/xz-$(XZ_VERSION).tgz; fi + ########################################################################### # Python ########################################################################### @@ -121,20 +161,28 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile # - $2 - OS define build-target ARCH-$1= $$(subst .,,$$(suffix $1)) -ifdef MACHINE-$$(ARCH-$1) -MACHINE-$1= $$(MACHINE-$$(ARCH-$1)) +ifdef MACHINE_DETAILED-$$(ARCH-$1) +MACHINE_DETAILED-$1= $$(MACHINE_DETAILED-$$(ARCH-$1)) +else +MACHINE_DETAILED-$1= $$(ARCH-$1) +endif +ifdef MACHINE_SIMPLE-$$(ARCH-$1) +MACHINE_SIMPLE-$1= $$(MACHINE_SIMPLE-$$(ARCH-$1)) else -MACHINE-$1= $$(ARCH-$1) +MACHINE_SIMPLE-$1= $$(ARCH-$1) endif -SDK-$1= $$(basename $1) +SDK-$1= $$(basename $1) SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1= xcrun --sdk $$(SDK-$1) clang\ - -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) +CC-$1= xcrun --sdk $$(SDK-$1) clang\ + -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) +LDFLAGS-$1= -arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1) -OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 -PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 -pyconfig.h-$1= pyconfig-$$(ARCH-$1).h +OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 +BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION)-$1 +XZ_DIR-$1= build/$2/xz-$(XZ_VERSION)-$1 +PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 +pyconfig.h-$1= pyconfig-$$(ARCH-$1).h # Unpack OpenSSL $$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz @@ -167,6 +215,37 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ make all +# Unpack BZip2 +$$(BZIP2_DIR-$1)/Makefile: downloads/bzip2-$(BZIP2_VERSION).tgz + # Unpack sources + mkdir -p $$(BZIP2_DIR-$1) + tar zxf downloads/bzip2-$(BZIP2_VERSION).tgz --strip-components 1 -C $$(BZIP2_DIR-$1) + # Patch sources to use correct compiler + sed -ie 's#CC=gcc#CC=$$(CC-$1)#' $$(BZIP2_DIR-$1)/Makefile + # Patch sources to use correct install directory + sed -ie 's#PREFIX=/usr/local#PREFIX=$(PROJECT_DIR)/build/$2/bzip2#' $$(BZIP2_DIR-$1)/Makefile + +# Build BZip2 +$$(BZIP2_DIR-$1)/libbz2.a: $$(BZIP2_DIR-$1)/Makefile + cd $$(BZIP2_DIR-$1) && make install + +# Unpack XZ +$$(XZ_DIR-$1)/Makefile: downloads/xz-$(XZ_VERSION).tgz + # Unpack sources + mkdir -p $$(XZ_DIR-$1) + tar zxf downloads/xz-$(XZ_VERSION).tgz --strip-components 1 -C $$(XZ_DIR-$1) + # Configure the build + cd $$(XZ_DIR-$1) && ./configure \ + CC="$$(CC-$1)" \ + LDFLAGS="$$(LDFLAGS-$1)" \ + --disable-shared --enable-static \ + --host=$$(MACHINE_SIMPLE-$1)-apple-darwin \ + --prefix=$(PROJECT_DIR)/build/$2/xz + +# Build XZ +$$(XZ_DIR-$1)/src/liblzma/.libs/liblzma.a: $$(XZ_DIR-$1)/Makefile + cd $$(XZ_DIR-$1) && make && make install + # Unpack Python $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST) # Unpack target Python @@ -178,14 +257,14 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ - --host=$$(MACHINE-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ + --host=$$(MACHINE_DETAILED-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ $$(PYTHON_CONFIGURE-$2) # Build Python -$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: $$(PYTHON_DIR-$1)/Makefile build/$2/OpenSSL.framework +$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a build/$2/xz/lib/liblzma.a $$(PYTHON_DIR-$1)/Makefile # Build target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install @@ -195,7 +274,7 @@ build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/p # Dump vars (for test) vars-$1: @echo "ARCH-$1: $$(ARCH-$1)" - @echo "MACHINE-$1: $$(MACHINE-$1)" + @echo "MACHINE_DETAILED-$1: $$(MACHINE_DETAILED-$1)" @echo "SDK-$1: $$(SDK-$1)" @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)" @echo "CC-$1: $$(CC-$1)" @@ -216,7 +295,9 @@ endef define build $$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) -OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework +OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework +BZIP2_LIB-$1= build/$1/bzip2/lib/libbz2.a +XZ_LIB-$1= build/$1/xz/lib/liblzma.a PYTHON_FRAMEWORK-$1= build/$1/Python.framework PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources @@ -256,6 +337,18 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target) mkdir -p build/$1 xcrun lipo -create -output $$@ $$^ +BZip2-$1: $$(BZIP2_LIB-$1) + +build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1),$$(BZIP2_DIR-$$(target))/libbz2.a) + mkdir -p build/$1/bzip2/lib + xcrun lipo -create -o $$(BZIP2_LIB-$1) $$^ + +XZ-$1: $$(XZ_LIB-$1) + +build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1),$$(XZ_DIR-$$(target))/src/liblzma/.libs/liblzma.a) + mkdir -p build/$1/xz/lib + xcrun lipo -create -o $$(XZ_LIB-$1) $$^ + Python.framework-$1: $$(PYTHON_FRAMEWORK-$1) # Build Python.framework diff --git a/README.rst b/README.rst index ecb4c29a..4c918c7b 100644 --- a/README.rst +++ b/README.rst @@ -69,9 +69,9 @@ This should: The build products will be in the `build` directory; the compiled frameworks will be in the `dist` directory. -.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz -.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz -.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b4/Python-3.4.2-iOS-support.b4.tar.gz +.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz +.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz +.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz Acknowledgements ---------------- From d9ff961fb7453294900804ad032ba911d5a2f017 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 24 Feb 2016 09:27:23 +0800 Subject: [PATCH 41/51] Cleaned up spacing in Makefile. --- Makefile | 70 +++++++++++++++++++++++++++--------------------------- README.rst | 6 ++--- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index c6d2654b..1efd1191 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,22 @@ # # Useful targets: -# - all - build everything -# - iOS - build everything for iOS -# - tvOS - build everything for tvOS -# - watchOS - build everything for watchOS -# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS -# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS -# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - BZip2-iOS - build BZip2 library for iOS -# - BZip2-tvOS - build BZip2 library for tvOS -# - BZip2-watchOS - build BZip2 library for watchOS -# - XZ-iOS - build XZ library for iOS -# - XZ-tvOS - build XZ library for tvOS -# - XZ-watchOS - build XZ library for watchOS -# - Python.framework-iOS - build Python.framework for iOS -# - Python.framework-tvOS - build Python.framework for tvOS -# - Python.framework-watchOS - build Python.framework for watchOS -# - Python-host - build host python +# - all - build everything +# - iOS - build everything for iOS +# - tvOS - build everything for tvOS +# - watchOS - build everything for watchOS +# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS +# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS +# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS +# - BZip2-iOS - build BZip2 library for iOS +# - BZip2-tvOS - build BZip2 library for tvOS +# - BZip2-watchOS - build BZip2 library for watchOS +# - XZ-iOS - build XZ library for iOS +# - XZ-tvOS - build XZ library for tvOS +# - XZ-watchOS - build XZ library for watchOS +# - Python.framework-iOS - build Python.framework for iOS +# - Python.framework-tvOS - build Python.framework for tvOS +# - Python.framework-watchOS - build Python.framework for watchOS +# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) @@ -41,21 +41,21 @@ OS= iOS tvOS watchOS # iOS targets TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 CFLAGS-iOS=-miphoneos-version-min=7.0 -CFLAGS-iphoneos.armv7= -fembed-bitcode +CFLAGS-iphoneos.armv7= -fembed-bitcode CFLAGS-iphoneos.armv7s= -fembed-bitcode -CFLAGS-iphoneos.arm64= -fembed-bitcode +CFLAGS-iphoneos.arm64= -fembed-bitcode # tvOS targets TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64 CFLAGS-tvOS=-mtvos-version-min=9.0 CFLAGS-appletvos.arm64= -fembed-bitcode -PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no +PYTHON_CONFIGURE-tvOS= ac_cv_func_sigaltstack=no # watchOS targets TARGETS-watchOS=watchsimulator.i386 watchos.armv7k CFLAGS-watchOS=-mwatchos-version-min=2.0 -CFLAGS-watchos.armv7k= -fembed-bitcode -PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no +CFLAGS-watchos.armv7k= -fembed-bitcode +PYTHON_CONFIGURE-watchOS= ac_cv_func_sigaltstack=no # override machine types for arm64 MACHINE_DETAILED-arm64=aarch64 @@ -173,16 +173,16 @@ MACHINE_SIMPLE-$1= $$(ARCH-$1) endif SDK-$1= $$(basename $1) -SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1= xcrun --sdk $$(SDK-$1) clang\ +SDK_ROOT-$1=$$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) +CC-$1=xcrun --sdk $$(SDK-$1) clang\ -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) -LDFLAGS-$1= -arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1) +LDFLAGS-$1=-arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1) -OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION)-$1 -BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION)-$1 -XZ_DIR-$1= build/$2/xz-$(XZ_VERSION)-$1 -PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION)-$1 -pyconfig.h-$1= pyconfig-$$(ARCH-$1).h +OPENSSL_DIR-$1=build/$2/openssl-$(OPENSSL_VERSION)-$1 +BZIP2_DIR-$1=build/$2/bzip2-$(BZIP2_VERSION)-$1 +XZ_DIR-$1=build/$2/xz-$(XZ_VERSION)-$1 +PYTHON_DIR-$1=build/$2/Python-$(PYTHON_VERSION)-$1 +pyconfig.h-$1=pyconfig-$$(ARCH-$1).h # Unpack OpenSSL $$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz @@ -297,11 +297,11 @@ endef define build $$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) -OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework -BZIP2_LIB-$1= build/$1/bzip2/lib/libbz2.a -XZ_LIB-$1= build/$1/xz/lib/liblzma.a -PYTHON_FRAMEWORK-$1= build/$1/Python.framework -PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources +OPENSSL_FRAMEWORK-$1=build/$1/OpenSSL.framework +BZIP2_LIB-$1=build/$1/bzip2/lib/libbz2.a +XZ_LIB-$1=build/$1/xz/lib/liblzma.a +PYTHON_FRAMEWORK-$1=build/$1/Python.framework +PYTHON_RESOURCES-$1=$$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources $1: dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz diff --git a/README.rst b/README.rst index ecc3b196..247f7d35 100644 --- a/README.rst +++ b/README.rst @@ -68,9 +68,9 @@ This should: The build products will be in the `build` directory; the compiled frameworks will be in the `dist` directory. -.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz -.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz -.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-i1S-support.b1.tar.gz +.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-iOS-support.b1.tar.gz +.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-iOS-support.b1.tar.gz +.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.5.1-b1/Python-3.5.1-iOS-support.b1.tar.gz Acknowledgements ---------------- From 03bea6625c7d6e1707e37a24801ec3c507cd9ecb Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 24 Feb 2016 15:08:16 +0800 Subject: [PATCH 42/51] Reverted accidental merge of 3.5 patch. --- Makefile | 4 +- patch/Python/Python.patch | 18067 +++++++++++++++++++++++------------- 2 files changed, 11808 insertions(+), 6263 deletions(-) diff --git a/Makefile b/Makefile index 3ac2dcf1..0d9d196c 100644 --- a/Makefile +++ b/Makefile @@ -252,10 +252,8 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST mkdir -p $$(PYTHON_DIR-$1) tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) # Apply target Python patches - cd $$(PYTHON_DIR-$1) && patch -p1 <$(PROJECT_DIR)/patch/Python/Python.patch + cd $$(PYTHON_DIR-$1) && patch -p1 < $(PROJECT_DIR)/patch/Python/Python.patch cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded - # Copy in the host _freeze_importlib - cp $(PYTHON_DIR-host)/Programs/_freeze_importlib $$(PYTHON_DIR-$1)/iOS/_freeze_importlib # Configure target Python cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch index 66111bcb..d1144180 100644 --- a/patch/Python/Python.patch +++ b/patch/Python/Python.patch @@ -1,38 +1,6 @@ -diff -Nru orig/Doc/library/os.rst modified/Doc/library/os.rst ---- orig/Doc/library/os.rst 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Doc/library/os.rst 2016-02-17 12:02:58.000000000 +0800 -@@ -2743,6 +2743,13 @@ - Python signal handler registered for :const:`SIGABRT` with - :func:`signal.signal`. - -+.. data:: allows_subprocesses -+ -+ Boolean that describes whether subprocesses can be by the operating system. -+ Some platforms (e.g., iOS mobile devices) *implement* calls like -+ :func:`execv` and :func:`spawnv`, but will raise errors or break if -+ called. Calls to create subprocesses should only be invoked if -+ :data:`os.allows_subprocesses` is `True`. - - .. function:: execl(path, arg0, arg1, ...) - execle(path, arg0, arg1, ..., env) -diff -Nru orig/Doc/library/subprocess.rst modified/Doc/library/subprocess.rst ---- orig/Doc/library/subprocess.rst 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Doc/library/subprocess.rst 2016-02-17 12:01:30.000000000 +0800 -@@ -21,6 +21,11 @@ - - :pep:`324` -- PEP proposing the subprocess module - -+:mod:`subprocess` can only be used on platforms that support subprocess -+creation. Some platforms (especially mobile platforms) may not support -+subprocesses; if :data:`os.allows_subprocesses` is `False`, any calls in -+this module that request a subprocess be created will raise a -+:exc:`RuntimeError`. - - Using the :mod:`subprocess` Module - ---------------------------------- diff -Nru orig/Include/datetime.h modified/Include/datetime.h ---- orig/Include/datetime.h 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Include/datetime.h 2016-02-14 10:29:10.000000000 +0800 +--- orig/Include/datetime.h 2015-02-03 19:49:02.000000000 +0800 ++++ modified/Include/datetime.h 2015-04-27 13:51:52.000000000 +0800 @@ -166,6 +166,11 @@ #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" @@ -59,8 +27,8 @@ diff -Nru orig/Include/datetime.h modified/Include/datetime.h #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/test_as_parameter.py ---- orig/Lib/ctypes/test/test_as_parameter.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_as_parameter.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_as_parameter.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_as_parameter.py 2015-06-28 21:35:59.000000000 +0800 @@ -1,9 +1,11 @@ +import os import unittest @@ -83,8 +51,8 @@ diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/tes def wrap(self, param): return param diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_bitfields.py ---- orig/Lib/ctypes/test/test_bitfields.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_bitfields.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_bitfields.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_bitfields.py 2015-06-28 21:36:06.000000000 +0800 @@ -1,11 +1,12 @@ from ctypes import * from ctypes.test import need_symbol @@ -109,8 +77,8 @@ diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_b ##for n in "ABCDEFGHIMNOPQRS": diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buffers.py ---- orig/Lib/ctypes/test/test_buffers.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_buffers.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_buffers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_buffers.py 2015-04-27 21:02:18.000000000 +0800 @@ -2,6 +2,7 @@ from ctypes.test import need_symbol import unittest @@ -120,8 +88,8 @@ diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buf def test_buffer(self): diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_callbacks.py ---- orig/Lib/ctypes/test/test_callbacks.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_callbacks.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_callbacks.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_callbacks.py 2015-06-28 21:36:18.000000000 +0800 @@ -1,8 +1,10 @@ +import os import unittest @@ -161,8 +129,8 @@ diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_c c_double, c_double) # All this function does is call the callback with its args squared diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfuncs.py ---- orig/Lib/ctypes/test/test_cfuncs.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_cfuncs.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_cfuncs.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_cfuncs.py 2015-06-28 21:36:25.000000000 +0800 @@ -1,17 +1,20 @@ # A lot of failures in these tests on Mac OS X. # Byte order related? @@ -195,8 +163,8 @@ diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfun if __name__ == '__main__': unittest.main() diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test_checkretval.py ---- orig/Lib/ctypes/test/test_checkretval.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_checkretval.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_checkretval.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_checkretval.py 2015-06-28 21:36:10.000000000 +0800 @@ -1,8 +1,10 @@ +import os import unittest @@ -218,8 +186,8 @@ diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test dll._testfunc_p_p.restype = CHECKED diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_funcptr.py ---- orig/Lib/ctypes/test/test_funcptr.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_funcptr.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_funcptr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_funcptr.py 2015-06-28 21:36:31.000000000 +0800 @@ -1,4 +1,5 @@ -import os, unittest +import os @@ -240,8 +208,8 @@ diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_fun class CFuncPtrTestCase(unittest.TestCase): def test_basic(self): diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_functions.py ---- orig/Lib/ctypes/test/test_functions.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_functions.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_functions.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_functions.py 2015-06-28 21:36:38.000000000 +0800 @@ -7,7 +7,9 @@ from ctypes import * @@ -278,8 +246,8 @@ diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_f def test_mro(self): diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.py ---- orig/Lib/ctypes/test/test_libc.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_libc.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_libc.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_libc.py 2015-06-28 21:36:41.000000000 +0800 @@ -1,14 +1,18 @@ +import os import unittest @@ -301,8 +269,8 @@ diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.p def test_sqrt(self): lib.my_sqrt.argtypes = c_double, diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_parameters.py ---- orig/Lib/ctypes/test/test_parameters.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_parameters.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_parameters.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_parameters.py 2015-06-28 21:36:45.000000000 +0800 @@ -1,6 +1,9 @@ -import unittest, sys +import os @@ -324,8 +292,8 @@ diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_ # TypeError: has no from_param method self.assertRaises(TypeError, setattr, func, "argtypes", (object,)) diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pickling.py ---- orig/Lib/ctypes/test/test_pickling.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pickling.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_pickling.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pickling.py 2015-06-28 21:36:49.000000000 +0800 @@ -1,8 +1,11 @@ -import unittest import pickle @@ -341,8 +309,8 @@ diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pi class X(Structure): _fields_ = [("a", c_int), ("b", c_double)] diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_pointers.py ---- orig/Lib/ctypes/test/test_pointers.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pointers.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_pointers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_pointers.py 2015-06-28 21:38:12.000000000 +0800 @@ -1,4 +1,6 @@ -import unittest, sys +import os @@ -366,9 +334,9 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po - dll = CDLL(_ctypes_test.__file__) + dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) func = dll._testfunc_p_p - if sizeof(c_longlong) == sizeof(c_void_p): - func.restype = c_longlong -@@ -38,7 +41,7 @@ + func.restype = c_long + +@@ -35,7 +38,7 @@ self.assertEqual(res[0], 12345678) def test_change_pointers(self): @@ -377,7 +345,7 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po func = dll._testfunc_p_p i = c_int(87654) -@@ -73,7 +76,7 @@ +@@ -70,7 +73,7 @@ return 0 callback = PROTOTYPE(func) @@ -386,7 +354,7 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po # This function expects a function pointer, # and calls this with an integer pointer as parameter. # The int pointer points to a table containing the numbers 1..10 -@@ -138,7 +141,7 @@ +@@ -135,7 +138,7 @@ def test_charpp(self): """Test that a character pointer-to-pointer is correctly passed""" @@ -396,8 +364,8 @@ diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_po func.restype = c_char_p argv = (c_char_p * 2)() diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_prototypes.py ---- orig/Lib/ctypes/test/test_prototypes.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_prototypes.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_prototypes.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_prototypes.py 2015-06-28 21:37:34.000000000 +0800 @@ -1,6 +1,7 @@ +import os +import unittest @@ -419,8 +387,8 @@ diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_ # Return machine address `a` as a (possibly long) non-negative integer. # Starting with Python 2.5, id(anything) is always non-negative, and diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_refcounts.py ---- orig/Lib/ctypes/test/test_refcounts.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_refcounts.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_refcounts.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_refcounts.py 2015-06-28 21:37:38.000000000 +0800 @@ -1,13 +1,17 @@ -import unittest -from test import support @@ -443,8 +411,8 @@ diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_r class RefcountTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/test_returnfuncptrs.py ---- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-06-28 21:37:45.000000000 +0800 @@ -1,15 +1,16 @@ +import os import unittest @@ -499,8 +467,8 @@ diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/t self.assertEqual(strchr(b"abcdef", b"x"), None) self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_slicing.py ---- orig/Lib/ctypes/test/test_slicing.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_slicing.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_slicing.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_slicing.py 2015-06-28 21:37:52.000000000 +0800 @@ -1,3 +1,4 @@ +import os import unittest @@ -534,8 +502,8 @@ diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_sli dll.my_wcsdup.argtypes = POINTER(c_wchar), dll.my_free.restype = None diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_stringptr.py ---- orig/Lib/ctypes/test/test_stringptr.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_stringptr.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_stringptr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_stringptr.py 2015-06-28 21:37:55.000000000 +0800 @@ -1,10 +1,12 @@ +import os import unittest @@ -551,8 +519,8 @@ diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_s class StringPtrTestCase(unittest.TestCase): diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_unicode.py ---- orig/Lib/ctypes/test/test_unicode.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_unicode.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_unicode.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_unicode.py 2015-06-28 21:37:59.000000000 +0800 @@ -1,13 +1,15 @@ +import os import unittest @@ -580,8 +548,8 @@ diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_uni class StringTestCase(UnicodeTestCase): def setUp(self): diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_values.py ---- orig/Lib/ctypes/test/test_values.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_values.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_values.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_values.py 2015-06-28 21:38:03.000000000 +0800 @@ -2,18 +2,20 @@ A testcase which accesses *values* in a dll. """ @@ -618,8 +586,8 @@ diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_valu class Win_ValuesTestCase(unittest.TestCase): """This test only works when python itself is a dll/shared library""" diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32.py ---- orig/Lib/ctypes/test/test_win32.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/test/test_win32.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/ctypes/test/test_win32.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/test/test_win32.py 2015-06-28 21:38:08.000000000 +0800 @@ -1,7 +1,9 @@ # Windows specific tests @@ -638,12 +606,12 @@ diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32 - dll = CDLL(_ctypes_test.__file__) + dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - pt = POINT(15, 25) - left = c_long.in_dll(dll, 'left') + pt = POINT(10, 10) + rect = RECT(0, 0, 20, 20) diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py ---- orig/Lib/ctypes/util.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/ctypes/util.py 2016-02-14 10:29:10.000000000 +0800 -@@ -76,7 +76,7 @@ +--- orig/Lib/ctypes/util.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/ctypes/util.py 2015-02-28 19:22:12.000000000 +0800 +@@ -70,7 +70,7 @@ def find_library(name): return name @@ -653,49 +621,49 @@ diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py def find_library(name): possible = ['lib%s.dylib' % name, diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/tests/test_build_ext.py ---- orig/Lib/distutils/tests/test_build_ext.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_ext.py 2016-02-17 12:02:50.000000000 +0800 -@@ -40,6 +40,7 @@ - def build_ext(self, *args, **kwargs): - return build_ext(*args, **kwargs) +--- orig/Lib/distutils/tests/test_build_ext.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_ext.py 2015-05-03 00:00:04.000000000 +0800 +@@ -37,6 +37,7 @@ + from distutils.command import build_ext + build_ext.USER_BASE = site.USER_BASE -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_build_ext(self): global ALREADY_TESTED copy_xxmodule_c(self.tmp_dir) -@@ -288,6 +289,7 @@ +@@ -285,6 +286,7 @@ cmd.run() self.assertEqual(cmd.compiler, 'unix') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_get_outputs(self): tmp_dir = self.mkdtemp() c_file = os.path.join(tmp_dir, 'foo.c') diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests/test_build_py.py ---- orig/Lib/distutils/tests/test_build_py.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_py.py 2016-02-17 12:02:38.000000000 +0800 +--- orig/Lib/distutils/tests/test_build_py.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_build_py.py 2015-05-03 00:00:35.000000000 +0800 @@ -106,6 +106,7 @@ ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_byte_compile_optimized(self): project_dir, dist = self.create_dist(py_modules=['boiledeggs']) os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tests/test_config_cmd.py ---- orig/Lib/distutils/tests/test_config_cmd.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_config_cmd.py 2016-02-17 09:45:32.000000000 +0800 +--- orig/Lib/distutils/tests/test_config_cmd.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_config_cmd.py 2015-05-03 00:01:43.000000000 +0800 @@ -38,6 +38,7 @@ self.assertEqual(len(self._logs), numlines+1) @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(os, 'fork'), "distutils cannot spawn child processes") def test_search_cpp(self): pkg_dir, dist = self.create_dist() cmd = config(dist) diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutils/tests/test_cygwinccompiler.py ---- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2015-04-30 08:21:03.000000000 +0800 @@ -3,16 +3,19 @@ import sys import os @@ -740,30 +708,30 @@ diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutil self.assertEqual(get_msvcr(), None) diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/test_install.py ---- orig/Lib/distutils/tests/test_install.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install.py 2016-02-17 12:02:31.000000000 +0800 -@@ -195,6 +195,7 @@ +--- orig/Lib/distutils/tests/test_install.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install.py 2015-05-02 23:58:59.000000000 +0800 +@@ -197,6 +197,7 @@ 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] self.assertEqual(found, expected) -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_record_extensions(self): install_dir = self.mkdtemp() project_dir, dist = self.create_dist(ext_modules=[ diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/tests/test_install_lib.py ---- orig/Lib/distutils/tests/test_install_lib.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install_lib.py 2016-02-17 12:02:19.000000000 +0800 +--- orig/Lib/distutils/tests/test_install_lib.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_install_lib.py 2015-05-03 00:02:08.000000000 +0800 @@ -35,6 +35,7 @@ self.assertEqual(cmd.optimize, 2) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_byte_compile(self): project_dir, dist = self.create_dist() os.chdir(project_dir) diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/test_spawn.py ---- orig/Lib/distutils/tests/test_spawn.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_spawn.py 2016-02-17 12:02:10.000000000 +0800 +--- orig/Lib/distutils/tests/test_spawn.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_spawn.py 2015-05-03 00:03:50.000000000 +0800 @@ -1,14 +1,14 @@ """Tests for distutils.spawn.""" import unittest @@ -789,7 +757,7 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te - - @unittest.skipUnless(os.name in ('nt', 'posix'), - 'Runs only under posix or nt') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_spawn(self): tmpdir = self.mkdtemp() @@ -802,8 +770,8 @@ diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/te return unittest.makeSuite(SpawnTestCase) diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py ---- orig/Lib/distutils/tests/test_sysconfig.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_sysconfig.py 2016-02-17 10:15:12.000000000 +0800 +--- orig/Lib/distutils/tests/test_sysconfig.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_sysconfig.py 2015-05-04 14:42:47.000000000 +0800 @@ -11,6 +11,7 @@ from distutils.tests import support from test.support import TESTFN, run_unittest, check_warnings @@ -816,13 +784,13 @@ diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/test self.assertIsNotNone(vars['SO']) self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_customize_compiler_before_get_config_vars(self): # Issue #21923: test that a Distribution compiler # instance can be called without an explicit call to diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/test_util.py ---- orig/Lib/distutils/tests/test_util.py 2015-12-07 09:39:07.000000000 +0800 -+++ modified/Lib/distutils/tests/test_util.py 2016-02-17 12:02:04.000000000 +0800 +--- orig/Lib/distutils/tests/test_util.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/distutils/tests/test_util.py 2015-05-03 00:04:32.000000000 +0800 @@ -10,12 +10,13 @@ check_environ, split_quoted, strtobool, rfc822_escape, byte_compile, @@ -842,13 +810,13 @@ diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/tes # XXX platforms to be covered: mac -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork') and os.allows_subprocesses), "distutils cannot spawn child processes") ++ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") def test_check_environ(self): util._environ_checked = 0 if 'HOME' in os.environ: -diff -Nru orig/Lib/importlib/_bootstrap_external.py modified/Lib/importlib/_bootstrap_external.py ---- orig/Lib/importlib/_bootstrap_external.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/importlib/_bootstrap_external.py 2016-02-14 11:00:13.000000000 +0800 +diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py +--- orig/Lib/importlib/_bootstrap.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/importlib/_bootstrap.py 2015-05-02 11:56:09.000000000 +0800 @@ -22,7 +22,7 @@ # Bootstrap-related code ###################################################### @@ -858,43 +826,9 @@ diff -Nru orig/Lib/importlib/_bootstrap_external.py modified/Lib/importlib/_boot def _make_relax_case(): -diff -Nru orig/Lib/os.py modified/Lib/os.py ---- orig/Lib/os.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/os.py 2016-02-17 09:09:10.000000000 +0800 -@@ -32,7 +32,7 @@ - __all__ = ["altsep", "curdir", "pardir", "sep", "pathsep", "linesep", - "defpath", "name", "path", "devnull", "SEEK_SET", "SEEK_CUR", - "SEEK_END", "fsencode", "fsdecode", "get_exec_path", "fdopen", -- "popen", "extsep"] -+ "popen", "extsep", "allows_subprocesses"] - - def _exists(name): - return name in globals() -@@ -115,7 +115,6 @@ - - del _names - -- - if _exists("_have_functions"): - _globals = globals() - def _add(str, fn): -@@ -837,6 +836,13 @@ - fsencode, fsdecode = _fscodec() - del _fscodec - -+ -+if sys.platform == "ios": -+ allows_subprocesses = False -+else: -+ allows_subprocesses = False -+ -+ - # Supply spawn*() (probably only for Unix) - if _exists("fork") and not _exists("spawnv") and _exists("execv"): - diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py --- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/IN.py 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/plat-ios/IN.py 2015-07-04 14:09:06.000000000 +0800 @@ -0,0 +1,8269 @@ +# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/netinet/in.h + @@ -9167,15 +9101,15 @@ diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py +IPV6CTL_MAXID = 51 diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen --- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/regen 2016-02-14 10:29:10.000000000 +0800 ++++ modified/Lib/plat-ios/regen 2015-04-26 09:08:15.000000000 +0800 @@ -0,0 +1,3 @@ +#! /bin/sh +set -v +include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h diff -Nru orig/Lib/platform.py modified/Lib/platform.py ---- orig/Lib/platform.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/platform.py 2016-02-14 10:29:10.000000000 +0800 -@@ -810,7 +810,7 @@ +--- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 +@@ -841,7 +841,7 @@ """ Interface to the system's uname command. """ @@ -9184,7 +9118,7 @@ diff -Nru orig/Lib/platform.py modified/Lib/platform.py # XXX Others too ? return default try: -@@ -833,7 +833,7 @@ +@@ -864,7 +864,7 @@ default in case the command should fail. """ @@ -9194,8 +9128,8 @@ diff -Nru orig/Lib/platform.py modified/Lib/platform.py return default target = _follow_symlinks(target) diff -Nru orig/Lib/site.py modified/Lib/site.py ---- orig/Lib/site.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/site.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/site.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/site.py 2015-07-04 21:19:43.000000000 +0800 @@ -266,6 +266,9 @@ if get_config_var('PYTHONFRAMEWORK'): USER_SITE = get_path('purelib', 'osx_framework_user') @@ -9207,47 +9141,2465 @@ diff -Nru orig/Lib/site.py modified/Lib/site.py USER_SITE = get_path('purelib', '%s_user' % os.name) return USER_SITE diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py ---- orig/Lib/subprocess.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/subprocess.py 2016-02-17 09:17:39.000000000 +0800 -@@ -515,7 +515,6 @@ +--- orig/Lib/subprocess.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/subprocess.py 2015-06-28 20:16:04.000000000 +0800 +@@ -423,1268 +423,1269 @@ + else: + _PopenSelector = selectors.SelectSelector + +- +-__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", +- "getoutput", "check_output", "CalledProcessError", "DEVNULL"] +- +-if mswindows: +- from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, +- STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, +- STD_ERROR_HANDLE, SW_HIDE, +- STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) +- +- __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", +- "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", +- "STD_ERROR_HANDLE", "SW_HIDE", +- "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) +- +- class Handle(int): +- closed = False +- +- def Close(self, CloseHandle=_winapi.CloseHandle): +- if not self.closed: +- self.closed = True +- CloseHandle(self) +- +- def Detach(self): +- if not self.closed: +- self.closed = True +- return int(self) +- raise ValueError("already closed") +- +- def __repr__(self): +- return "Handle(%d)" % int(self) +- +- __del__ = Close +- __str__ = __repr__ +- +-try: +- MAXFD = os.sysconf("SC_OPEN_MAX") +-except: +- MAXFD = 256 +- +-# This lists holds Popen instances for which the underlying process had not +-# exited at the time its __del__ method got called: those processes are wait()ed +-# for synchronously from _cleanup() when a new Popen object is created, to avoid +-# zombie processes. +-_active = [] +- +-def _cleanup(): +- for inst in _active[:]: +- res = inst._internal_poll(_deadstate=sys.maxsize) +- if res is not None: +- try: +- _active.remove(inst) +- except ValueError: +- # This can happen if two threads create a new Popen instance. +- # It's harmless that it was already removed, so ignore. +- pass +- + PIPE = -1 STDOUT = -2 DEVNULL = -3 ++if sys.platform == 'ios': ++ # iOS doesn't support subprocesses; however, some modules still import ++ # subprocess, so it's helpful to retain the symbols in the namespace. ++ __all__ = ["PIPE", "STDOUT", "DEVNULL", "CalledProcessError"] ++else: ++ __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", ++ "getoutput", "check_output", "CalledProcessError", "DEVNULL"] + +-def _eintr_retry_call(func, *args): +- while True: +- try: +- return func(*args) +- except InterruptedError: +- continue +- +- +-# XXX This function is only used by multiprocessing and the test suite, +-# but it's here so that it can be imported when Python is compiled without +-# threads. +- +-def _args_from_interpreter_flags(): +- """Return a list of command-line arguments reproducing the current +- settings in sys.flags and sys.warnoptions.""" +- flag_opt_map = { +- 'debug': 'd', +- # 'inspect': 'i', +- # 'interactive': 'i', +- 'optimize': 'O', +- 'dont_write_bytecode': 'B', +- 'no_user_site': 's', +- 'no_site': 'S', +- 'ignore_environment': 'E', +- 'verbose': 'v', +- 'bytes_warning': 'b', +- 'quiet': 'q', +- 'hash_randomization': 'R', +- } +- args = [] +- for flag, opt in flag_opt_map.items(): +- v = getattr(sys.flags, flag) +- if v > 0: +- if flag == 'hash_randomization': +- v = 1 # Handle specification of an exact seed +- args.append('-' + opt * v) +- for opt in sys.warnoptions: +- args.append('-W' + opt) +- return args +- +- +-def call(*popenargs, timeout=None, **kwargs): +- """Run command with arguments. Wait for command to complete or +- timeout, then return the returncode attribute. +- +- The arguments are the same as for the Popen constructor. Example: +- +- retcode = call(["ls", "-l"]) +- """ +- with Popen(*popenargs, **kwargs) as p: +- try: +- return p.wait(timeout=timeout) +- except: +- p.kill() +- p.wait() +- raise +- +- +-def check_call(*popenargs, **kwargs): +- """Run command with arguments. Wait for command to complete. If +- the exit code was zero then return, otherwise raise +- CalledProcessError. The CalledProcessError object will have the +- return code in the returncode attribute. +- +- The arguments are the same as for the call function. Example: +- +- check_call(["ls", "-l"]) +- """ +- retcode = call(*popenargs, **kwargs) +- if retcode: +- cmd = kwargs.get("args") +- if cmd is None: +- cmd = popenargs[0] +- raise CalledProcessError(retcode, cmd) +- return 0 +- +- +-def check_output(*popenargs, timeout=None, **kwargs): +- r"""Run command with arguments and return its output. +- +- If the exit code was non-zero it raises a CalledProcessError. The +- CalledProcessError object will have the return code in the returncode +- attribute and output in the output attribute. +- +- The arguments are the same as for the Popen constructor. Example: +- +- >>> check_output(["ls", "-l", "/dev/null"]) +- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' +- +- The stdout argument is not allowed as it is used internally. +- To capture standard error in the result, use stderr=STDOUT. +- +- >>> check_output(["/bin/sh", "-c", +- ... "ls -l non_existent_file ; exit 0"], +- ... stderr=STDOUT) +- b'ls: non_existent_file: No such file or directory\n' +- +- There is an additional optional argument, "input", allowing you to +- pass a string to the subprocess's stdin. If you use this argument +- you may not also use the Popen constructor's "stdin" argument, as +- it too will be used internally. Example: +- +- >>> check_output(["sed", "-e", "s/foo/bar/"], +- ... input=b"when in the course of fooman events\n") +- b'when in the course of barman events\n' +- +- If universal_newlines=True is passed, the return value will be a +- string rather than bytes. +- """ +- if 'stdout' in kwargs: +- raise ValueError('stdout argument not allowed, it will be overridden.') +- if 'input' in kwargs: +- if 'stdin' in kwargs: +- raise ValueError('stdin and input arguments may not both be used.') +- inputdata = kwargs['input'] +- del kwargs['input'] +- kwargs['stdin'] = PIPE +- else: +- inputdata = None +- with Popen(*popenargs, stdout=PIPE, **kwargs) as process: +- try: +- output, unused_err = process.communicate(inputdata, timeout=timeout) +- except TimeoutExpired: +- process.kill() +- output, unused_err = process.communicate() +- raise TimeoutExpired(process.args, timeout, output=output) +- except: +- process.kill() +- process.wait() +- raise +- retcode = process.poll() +- if retcode: +- raise CalledProcessError(retcode, process.args, output=output) +- return output +- +- +-def list2cmdline(seq): +- """ +- Translate a sequence of arguments into a command line +- string, using the same rules as the MS C runtime: +- +- 1) Arguments are delimited by white space, which is either a +- space or a tab. +- +- 2) A string surrounded by double quotation marks is +- interpreted as a single argument, regardless of white space +- contained within. A quoted string can be embedded in an +- argument. +- +- 3) A double quotation mark preceded by a backslash is +- interpreted as a literal double quotation mark. +- +- 4) Backslashes are interpreted literally, unless they +- immediately precede a double quotation mark. +- +- 5) If backslashes immediately precede a double quotation mark, +- every pair of backslashes is interpreted as a literal +- backslash. If the number of backslashes is odd, the last +- backslash escapes the next double quotation mark as +- described in rule 3. +- """ +- +- # See +- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx +- # or search http://msdn.microsoft.com for +- # "Parsing C++ Command-Line Arguments" +- result = [] +- needquote = False +- for arg in seq: +- bs_buf = [] +- +- # Add a space to separate this argument from the others +- if result: +- result.append(' ') +- +- needquote = (" " in arg) or ("\t" in arg) or not arg +- if needquote: +- result.append('"') +- +- for c in arg: +- if c == '\\': +- # Don't know if we need to double yet. +- bs_buf.append(c) +- elif c == '"': +- # Double backslashes. +- result.append('\\' * len(bs_buf)*2) +- bs_buf = [] +- result.append('\\"') +- else: +- # Normal char +- if bs_buf: +- result.extend(bs_buf) +- bs_buf = [] +- result.append(c) +- +- # Add remaining backslashes, if any. +- if bs_buf: +- result.extend(bs_buf) +- +- if needquote: +- result.extend(bs_buf) +- result.append('"') +- +- return ''.join(result) +- +- +-# Various tools for executing commands and looking at their output and status. +-# +- +-def getstatusoutput(cmd): +- """ Return (status, output) of executing cmd in a shell. ++ if mswindows: ++ from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, ++ STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, ++ STD_ERROR_HANDLE, SW_HIDE, ++ STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) ++ ++ __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", ++ "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", ++ "STD_ERROR_HANDLE", "SW_HIDE", ++ "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) ++ ++ class Handle(int): ++ closed = False ++ ++ def Close(self, CloseHandle=_winapi.CloseHandle): ++ if not self.closed: ++ self.closed = True ++ CloseHandle(self) ++ ++ def Detach(self): ++ if not self.closed: ++ self.closed = True ++ return int(self) ++ raise ValueError("already closed") + +- Execute the string 'cmd' in a shell with 'check_output' and +- return a 2-tuple (status, output). Universal newlines mode is used, +- meaning that the result with be decoded to a string. ++ def __repr__(self): ++ return "Handle(%d)" % int(self) + +- A trailing newline is stripped from the output. +- The exit status for the command can be interpreted +- according to the rules for the function 'wait'. Example: ++ __del__ = Close ++ __str__ = __repr__ + +- >>> import subprocess +- >>> subprocess.getstatusoutput('ls /bin/ls') +- (0, '/bin/ls') +- >>> subprocess.getstatusoutput('cat /bin/junk') +- (256, 'cat: /bin/junk: No such file or directory') +- >>> subprocess.getstatusoutput('/bin/junk') +- (256, 'sh: /bin/junk: not found') +- """ + try: +- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) +- status = 0 +- except CalledProcessError as ex: +- data = ex.output +- status = ex.returncode +- if data[-1:] == '\n': +- data = data[:-1] +- return status, data - - # XXX This function is only used by multiprocessing and the test suite, - # but it's here so that it can be imported when Python is compiled without - # threads. -@@ -842,6 +841,9 @@ - restore_signals=True, start_new_session=False, - pass_fds=()): - """Create new Popen instance.""" -+ if not os.allows_subprocesses: -+ raise RuntimeError("Subprocesses are not supported on this platform.") -+ - _cleanup() - # Held while anything is calling waitpid before returncode has been - # updated to prevent clobbering returncode if wait() or poll() are -@@ -1560,7 +1562,7 @@ - raise SubprocessError("Unknown child exit status!") +-def getoutput(cmd): +- """Return output (stdout or stderr) of executing cmd in a shell. +- +- Like getstatusoutput(), except the exit status is ignored and the return +- value is a string containing the command's output. Example: +- +- >>> import subprocess +- >>> subprocess.getoutput('ls /bin/ls') +- '/bin/ls' +- """ +- return getstatusoutput(cmd)[1] +- +- +-_PLATFORM_DEFAULT_CLOSE_FDS = object() +- +- +-class Popen(object): +- +- _child_created = False # Set here since __del__ checks it +- +- def __init__(self, args, bufsize=-1, executable=None, +- stdin=None, stdout=None, stderr=None, +- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, +- shell=False, cwd=None, env=None, universal_newlines=False, +- startupinfo=None, creationflags=0, +- restore_signals=True, start_new_session=False, +- pass_fds=()): +- """Create new Popen instance.""" +- _cleanup() +- # Held while anything is calling waitpid before returncode has been +- # updated to prevent clobbering returncode if wait() or poll() are +- # called from multiple threads at once. After acquiring the lock, +- # code must re-check self.returncode to see if another thread just +- # finished a waitpid() call. +- self._waitpid_lock = threading.Lock() +- +- self._input = None +- self._communication_started = False +- if bufsize is None: +- bufsize = -1 # Restore default +- if not isinstance(bufsize, int): +- raise TypeError("bufsize must be an integer") ++ MAXFD = os.sysconf("SC_OPEN_MAX") ++ except: ++ MAXFD = 256 ++ ++ # This lists holds Popen instances for which the underlying process had not ++ # exited at the time its __del__ method got called: those processes are wait()ed ++ # for synchronously from _cleanup() when a new Popen object is created, to avoid ++ # zombie processes. ++ _active = [] ++ ++ def _cleanup(): ++ for inst in _active[:]: ++ res = inst._internal_poll(_deadstate=sys.maxsize) ++ if res is not None: ++ try: ++ _active.remove(inst) ++ except ValueError: ++ # This can happen if two threads create a new Popen instance. ++ # It's harmless that it was already removed, so ignore. ++ pass + +- if mswindows: +- if preexec_fn is not None: +- raise ValueError("preexec_fn is not supported on Windows " +- "platforms") +- any_stdio_set = (stdin is not None or stdout is not None or +- stderr is not None) +- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: +- if any_stdio_set: +- close_fds = False ++ def _eintr_retry_call(func, *args): ++ while True: ++ try: ++ return func(*args) ++ except InterruptedError: ++ continue ++ ++ ++ # XXX This function is only used by multiprocessing and the test suite, ++ # but it's here so that it can be imported when Python is compiled without ++ # threads. ++ ++ def _args_from_interpreter_flags(): ++ """Return a list of command-line arguments reproducing the current ++ settings in sys.flags and sys.warnoptions.""" ++ flag_opt_map = { ++ 'debug': 'd', ++ # 'inspect': 'i', ++ # 'interactive': 'i', ++ 'optimize': 'O', ++ 'dont_write_bytecode': 'B', ++ 'no_user_site': 's', ++ 'no_site': 'S', ++ 'ignore_environment': 'E', ++ 'verbose': 'v', ++ 'bytes_warning': 'b', ++ 'quiet': 'q', ++ 'hash_randomization': 'R', ++ } ++ args = [] ++ for flag, opt in flag_opt_map.items(): ++ v = getattr(sys.flags, flag) ++ if v > 0: ++ if flag == 'hash_randomization': ++ v = 1 # Handle specification of an exact seed ++ args.append('-' + opt * v) ++ for opt in sys.warnoptions: ++ args.append('-W' + opt) ++ return args ++ ++ ++ def call(*popenargs, timeout=None, **kwargs): ++ """Run command with arguments. Wait for command to complete or ++ timeout, then return the returncode attribute. ++ ++ The arguments are the same as for the Popen constructor. Example: ++ ++ retcode = call(["ls", "-l"]) ++ """ ++ with Popen(*popenargs, **kwargs) as p: ++ try: ++ return p.wait(timeout=timeout) ++ except: ++ p.kill() ++ p.wait() ++ raise ++ ++ ++ def check_call(*popenargs, **kwargs): ++ """Run command with arguments. Wait for command to complete. If ++ the exit code was zero then return, otherwise raise ++ CalledProcessError. The CalledProcessError object will have the ++ return code in the returncode attribute. ++ ++ The arguments are the same as for the call function. Example: ++ ++ check_call(["ls", "-l"]) ++ """ ++ retcode = call(*popenargs, **kwargs) ++ if retcode: ++ cmd = kwargs.get("args") ++ if cmd is None: ++ cmd = popenargs[0] ++ raise CalledProcessError(retcode, cmd) ++ return 0 ++ ++ ++ def check_output(*popenargs, timeout=None, **kwargs): ++ r"""Run command with arguments and return its output. ++ ++ If the exit code was non-zero it raises a CalledProcessError. The ++ CalledProcessError object will have the return code in the returncode ++ attribute and output in the output attribute. ++ ++ The arguments are the same as for the Popen constructor. Example: ++ ++ >>> check_output(["ls", "-l", "/dev/null"]) ++ b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' ++ ++ The stdout argument is not allowed as it is used internally. ++ To capture standard error in the result, use stderr=STDOUT. ++ ++ >>> check_output(["/bin/sh", "-c", ++ ... "ls -l non_existent_file ; exit 0"], ++ ... stderr=STDOUT) ++ b'ls: non_existent_file: No such file or directory\n' ++ ++ There is an additional optional argument, "input", allowing you to ++ pass a string to the subprocess's stdin. If you use this argument ++ you may not also use the Popen constructor's "stdin" argument, as ++ it too will be used internally. Example: ++ ++ >>> check_output(["sed", "-e", "s/foo/bar/"], ++ ... input=b"when in the course of fooman events\n") ++ b'when in the course of barman events\n' ++ ++ If universal_newlines=True is passed, the return value will be a ++ string rather than bytes. ++ """ ++ if 'stdout' in kwargs: ++ raise ValueError('stdout argument not allowed, it will be overridden.') ++ if 'input' in kwargs: ++ if 'stdin' in kwargs: ++ raise ValueError('stdin and input arguments may not both be used.') ++ inputdata = kwargs['input'] ++ del kwargs['input'] ++ kwargs['stdin'] = PIPE ++ else: ++ inputdata = None ++ with Popen(*popenargs, stdout=PIPE, **kwargs) as process: ++ try: ++ output, unused_err = process.communicate(inputdata, timeout=timeout) ++ except TimeoutExpired: ++ process.kill() ++ output, unused_err = process.communicate() ++ raise TimeoutExpired(process.args, timeout, output=output) ++ except: ++ process.kill() ++ process.wait() ++ raise ++ retcode = process.poll() ++ if retcode: ++ raise CalledProcessError(retcode, process.args, output=output) ++ return output ++ ++ ++ def list2cmdline(seq): ++ """ ++ Translate a sequence of arguments into a command line ++ string, using the same rules as the MS C runtime: ++ ++ 1) Arguments are delimited by white space, which is either a ++ space or a tab. ++ ++ 2) A string surrounded by double quotation marks is ++ interpreted as a single argument, regardless of white space ++ contained within. A quoted string can be embedded in an ++ argument. ++ ++ 3) A double quotation mark preceded by a backslash is ++ interpreted as a literal double quotation mark. ++ ++ 4) Backslashes are interpreted literally, unless they ++ immediately precede a double quotation mark. ++ ++ 5) If backslashes immediately precede a double quotation mark, ++ every pair of backslashes is interpreted as a literal ++ backslash. If the number of backslashes is odd, the last ++ backslash escapes the next double quotation mark as ++ described in rule 3. ++ """ ++ ++ # See ++ # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx ++ # or search http://msdn.microsoft.com for ++ # "Parsing C++ Command-Line Arguments" ++ result = [] ++ needquote = False ++ for arg in seq: ++ bs_buf = [] ++ ++ # Add a space to separate this argument from the others ++ if result: ++ result.append(' ') ++ ++ needquote = (" " in arg) or ("\t" in arg) or not arg ++ if needquote: ++ result.append('"') ++ ++ for c in arg: ++ if c == '\\': ++ # Don't know if we need to double yet. ++ bs_buf.append(c) ++ elif c == '"': ++ # Double backslashes. ++ result.append('\\' * len(bs_buf)*2) ++ bs_buf = [] ++ result.append('\\"') + else: ++ # Normal char ++ if bs_buf: ++ result.extend(bs_buf) ++ bs_buf = [] ++ result.append(c) ++ ++ # Add remaining backslashes, if any. ++ if bs_buf: ++ result.extend(bs_buf) ++ ++ if needquote: ++ result.extend(bs_buf) ++ result.append('"') ++ ++ return ''.join(result) ++ ++ ++ # Various tools for executing commands and looking at their output and status. ++ # ++ ++ def getstatusoutput(cmd): ++ """ Return (status, output) of executing cmd in a shell. ++ ++ Execute the string 'cmd' in a shell with 'check_output' and ++ return a 2-tuple (status, output). Universal newlines mode is used, ++ meaning that the result with be decoded to a string. ++ ++ A trailing newline is stripped from the output. ++ The exit status for the command can be interpreted ++ according to the rules for the function 'wait'. Example: ++ ++ >>> import subprocess ++ >>> subprocess.getstatusoutput('ls /bin/ls') ++ (0, '/bin/ls') ++ >>> subprocess.getstatusoutput('cat /bin/junk') ++ (256, 'cat: /bin/junk: No such file or directory') ++ >>> subprocess.getstatusoutput('/bin/junk') ++ (256, 'sh: /bin/junk: not found') ++ """ ++ try: ++ data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) ++ status = 0 ++ except CalledProcessError as ex: ++ data = ex.output ++ status = ex.returncode ++ if data[-1:] == '\n': ++ data = data[:-1] ++ return status, data ++ ++ def getoutput(cmd): ++ """Return output (stdout or stderr) of executing cmd in a shell. ++ ++ Like getstatusoutput(), except the exit status is ignored and the return ++ value is a string containing the command's output. Example: ++ ++ >>> import subprocess ++ >>> subprocess.getoutput('ls /bin/ls') ++ '/bin/ls' ++ """ ++ return getstatusoutput(cmd)[1] ++ ++ _PLATFORM_DEFAULT_CLOSE_FDS = object() ++ ++ class Popen(object): ++ ++ _child_created = False # Set here since __del__ checks it ++ ++ def __init__(self, args, bufsize=-1, executable=None, ++ stdin=None, stdout=None, stderr=None, ++ preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, ++ shell=False, cwd=None, env=None, universal_newlines=False, ++ startupinfo=None, creationflags=0, ++ restore_signals=True, start_new_session=False, ++ pass_fds=()): ++ """Create new Popen instance.""" ++ _cleanup() ++ # Held while anything is calling waitpid before returncode has been ++ # updated to prevent clobbering returncode if wait() or poll() are ++ # called from multiple threads at once. After acquiring the lock, ++ # code must re-check self.returncode to see if another thread just ++ # finished a waitpid() call. ++ self._waitpid_lock = threading.Lock() ++ ++ self._input = None ++ self._communication_started = False ++ if bufsize is None: ++ bufsize = -1 # Restore default ++ if not isinstance(bufsize, int): ++ raise TypeError("bufsize must be an integer") ++ ++ if mswindows: ++ if preexec_fn is not None: ++ raise ValueError("preexec_fn is not supported on Windows " ++ "platforms") ++ any_stdio_set = (stdin is not None or stdout is not None or ++ stderr is not None) ++ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: ++ if any_stdio_set: ++ close_fds = False ++ else: ++ close_fds = True ++ elif close_fds and any_stdio_set: ++ raise ValueError( ++ "close_fds is not supported on Windows platforms" ++ " if you redirect stdin/stdout/stderr") ++ else: ++ # POSIX ++ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: + close_fds = True +- elif close_fds and any_stdio_set: +- raise ValueError( +- "close_fds is not supported on Windows platforms" +- " if you redirect stdin/stdout/stderr") +- else: +- # POSIX +- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: +- close_fds = True +- if pass_fds and not close_fds: +- warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) +- close_fds = True +- if startupinfo is not None: +- raise ValueError("startupinfo is only supported on Windows " +- "platforms") +- if creationflags != 0: +- raise ValueError("creationflags is only supported on Windows " +- "platforms") +- +- self.args = args +- self.stdin = None +- self.stdout = None +- self.stderr = None +- self.pid = None +- self.returncode = None +- self.universal_newlines = universal_newlines +- +- # Input and output objects. The general principle is like +- # this: +- # +- # Parent Child +- # ------ ----- +- # p2cwrite ---stdin---> p2cread +- # c2pread <--stdout--- c2pwrite +- # errread <--stderr--- errwrite +- # +- # On POSIX, the child objects are file descriptors. On +- # Windows, these are Windows file handles. The parent objects +- # are file descriptors on both platforms. The parent objects +- # are -1 when not using PIPEs. The child objects are -1 +- # when not redirecting. +- +- (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) = self._get_handles(stdin, stdout, stderr) +- +- # We wrap OS handles *before* launching the child, otherwise a +- # quickly terminating child could make our fds unwrappable +- # (see #8458). ++ if pass_fds and not close_fds: ++ warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) ++ close_fds = True ++ if startupinfo is not None: ++ raise ValueError("startupinfo is only supported on Windows " ++ "platforms") ++ if creationflags != 0: ++ raise ValueError("creationflags is only supported on Windows " ++ "platforms") ++ ++ self.args = args ++ self.stdin = None ++ self.stdout = None ++ self.stderr = None ++ self.pid = None ++ self.returncode = None ++ self.universal_newlines = universal_newlines ++ ++ # Input and output objects. The general principle is like ++ # this: ++ # ++ # Parent Child ++ # ------ ----- ++ # p2cwrite ---stdin---> p2cread ++ # c2pread <--stdout--- c2pwrite ++ # errread <--stderr--- errwrite ++ # ++ # On POSIX, the child objects are file descriptors. On ++ # Windows, these are Windows file handles. The parent objects ++ # are file descriptors on both platforms. The parent objects ++ # are -1 when not using PIPEs. The child objects are -1 ++ # when not redirecting. ++ ++ (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) = self._get_handles(stdin, stdout, stderr) ++ ++ # We wrap OS handles *before* launching the child, otherwise a ++ # quickly terminating child could make our fds unwrappable ++ # (see #8458). ++ ++ if mswindows: ++ if p2cwrite != -1: ++ p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) ++ if c2pread != -1: ++ c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) ++ if errread != -1: ++ errread = msvcrt.open_osfhandle(errread.Detach(), 0) + +- if mswindows: + if p2cwrite != -1: +- p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) ++ self.stdin = io.open(p2cwrite, 'wb', bufsize) ++ if universal_newlines: ++ self.stdin = io.TextIOWrapper(self.stdin, write_through=True) + if c2pread != -1: +- c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) ++ self.stdout = io.open(c2pread, 'rb', bufsize) ++ if universal_newlines: ++ self.stdout = io.TextIOWrapper(self.stdout) + if errread != -1: +- errread = msvcrt.open_osfhandle(errread.Detach(), 0) +- +- if p2cwrite != -1: +- self.stdin = io.open(p2cwrite, 'wb', bufsize) +- if universal_newlines: +- self.stdin = io.TextIOWrapper(self.stdin, write_through=True) +- if c2pread != -1: +- self.stdout = io.open(c2pread, 'rb', bufsize) +- if universal_newlines: +- self.stdout = io.TextIOWrapper(self.stdout) +- if errread != -1: +- self.stderr = io.open(errread, 'rb', bufsize) +- if universal_newlines: +- self.stderr = io.TextIOWrapper(self.stderr) ++ self.stderr = io.open(errread, 'rb', bufsize) ++ if universal_newlines: ++ self.stderr = io.TextIOWrapper(self.stderr) + +- self._closed_child_pipe_fds = False +- try: +- self._execute_child(args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- restore_signals, start_new_session) +- except: +- # Cleanup if the child failed starting. +- for f in filter(None, (self.stdin, self.stdout, self.stderr)): +- try: +- f.close() +- except OSError: +- pass # Ignore EBADF or other errors. +- +- if not self._closed_child_pipe_fds: +- to_close = [] +- if stdin == PIPE: +- to_close.append(p2cread) +- if stdout == PIPE: +- to_close.append(c2pwrite) +- if stderr == PIPE: +- to_close.append(errwrite) +- if hasattr(self, '_devnull'): +- to_close.append(self._devnull) +- for fd in to_close: ++ self._closed_child_pipe_fds = False ++ try: ++ self._execute_child(args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ restore_signals, start_new_session) ++ except: ++ # Cleanup if the child failed starting. ++ for f in filter(None, (self.stdin, self.stdout, self.stderr)): + try: +- os.close(fd) ++ f.close() + except OSError: +- pass ++ pass # Ignore EBADF or other errors. + +- raise ++ if not self._closed_child_pipe_fds: ++ to_close = [] ++ if stdin == PIPE: ++ to_close.append(p2cread) ++ if stdout == PIPE: ++ to_close.append(c2pwrite) ++ if stderr == PIPE: ++ to_close.append(errwrite) ++ if hasattr(self, '_devnull'): ++ to_close.append(self._devnull) ++ for fd in to_close: ++ try: ++ os.close(fd) ++ except OSError: ++ pass + ++ raise + +- def _translate_newlines(self, data, encoding): +- data = data.decode(encoding) +- return data.replace("\r\n", "\n").replace("\r", "\n") +- +- def __enter__(self): +- return self +- +- def __exit__(self, type, value, traceback): +- if self.stdout: +- self.stdout.close() +- if self.stderr: +- self.stderr.close() +- if self.stdin: +- self.stdin.close() +- # Wait for the process to terminate, to avoid zombies. +- self.wait() +- +- def __del__(self, _maxsize=sys.maxsize): +- if not self._child_created: +- # We didn't get to successfully create a child process. +- return +- # In case the child hasn't been waited on, check if it's done. +- self._internal_poll(_deadstate=_maxsize) +- if self.returncode is None and _active is not None: +- # Child is still running, keep us alive until we can wait on it. +- _active.append(self) +- +- def _get_devnull(self): +- if not hasattr(self, '_devnull'): +- self._devnull = os.open(os.devnull, os.O_RDWR) +- return self._devnull +- +- def communicate(self, input=None, timeout=None): +- """Interact with process: Send data to stdin. Read data from +- stdout and stderr, until end-of-file is reached. Wait for +- process to terminate. The optional input argument should be +- bytes to be sent to the child process, or None, if no data +- should be sent to the child. +- +- communicate() returns a tuple (stdout, stderr).""" +- +- if self._communication_started and input: +- raise ValueError("Cannot send input after starting communication") +- +- # Optimization: If we are not worried about timeouts, we haven't +- # started communicating, and we have one or zero pipes, using select() +- # or threads is unnecessary. +- if (timeout is None and not self._communication_started and +- [self.stdin, self.stdout, self.stderr].count(None) >= 2): +- stdout = None +- stderr = None +- if self.stdin: +- if input: +- try: +- self.stdin.write(input) +- except OSError as e: +- if e.errno != errno.EPIPE and e.errno != errno.EINVAL: +- raise +- self.stdin.close() +- elif self.stdout: +- stdout = _eintr_retry_call(self.stdout.read) +- self.stdout.close() +- elif self.stderr: +- stderr = _eintr_retry_call(self.stderr.read) +- self.stderr.close() +- self.wait() +- else: +- if timeout is not None: +- endtime = _time() + timeout +- else: +- endtime = None + +- try: +- stdout, stderr = self._communicate(input, endtime, timeout) +- finally: +- self._communication_started = True ++ def _translate_newlines(self, data, encoding): ++ data = data.decode(encoding) ++ return data.replace("\r\n", "\n").replace("\r", "\n") + +- sts = self.wait(timeout=self._remaining_time(endtime)) ++ def __enter__(self): ++ return self + +- return (stdout, stderr) ++ def __exit__(self, type, value, traceback): ++ if self.stdout: ++ self.stdout.close() ++ if self.stderr: ++ self.stderr.close() ++ if self.stdin: ++ self.stdin.close() ++ # Wait for the process to terminate, to avoid zombies. ++ self.wait() + ++ def __del__(self, _maxsize=sys.maxsize): ++ if not self._child_created: ++ # We didn't get to successfully create a child process. ++ return ++ # In case the child hasn't been waited on, check if it's done. ++ self._internal_poll(_deadstate=_maxsize) ++ if self.returncode is None and _active is not None: ++ # Child is still running, keep us alive until we can wait on it. ++ _active.append(self) ++ ++ def _get_devnull(self): ++ if not hasattr(self, '_devnull'): ++ self._devnull = os.open(os.devnull, os.O_RDWR) ++ return self._devnull ++ ++ def communicate(self, input=None, timeout=None): ++ """Interact with process: Send data to stdin. Read data from ++ stdout and stderr, until end-of-file is reached. Wait for ++ process to terminate. The optional input argument should be ++ bytes to be sent to the child process, or None, if no data ++ should be sent to the child. ++ ++ communicate() returns a tuple (stdout, stderr).""" ++ ++ if self._communication_started and input: ++ raise ValueError("Cannot send input after starting communication") ++ ++ # Optimization: If we are not worried about timeouts, we haven't ++ # started communicating, and we have one or zero pipes, using select() ++ # or threads is unnecessary. ++ if (timeout is None and not self._communication_started and ++ [self.stdin, self.stdout, self.stderr].count(None) >= 2): ++ stdout = None ++ stderr = None ++ if self.stdin: ++ if input: ++ try: ++ self.stdin.write(input) ++ except OSError as e: ++ if e.errno != errno.EPIPE and e.errno != errno.EINVAL: ++ raise ++ self.stdin.close() ++ elif self.stdout: ++ stdout = _eintr_retry_call(self.stdout.read) ++ self.stdout.close() ++ elif self.stderr: ++ stderr = _eintr_retry_call(self.stderr.read) ++ self.stderr.close() ++ self.wait() ++ else: ++ if timeout is not None: ++ endtime = _time() + timeout ++ else: ++ endtime = None +- def poll(self): +- return self._internal_poll() ++ try: ++ stdout, stderr = self._communicate(input, endtime, timeout) ++ finally: ++ self._communication_started = True + ++ sts = self.wait(timeout=self._remaining_time(endtime)) + +- def _remaining_time(self, endtime): +- """Convenience for _communicate when computing timeouts.""" +- if endtime is None: +- return None +- else: +- return endtime - _time() ++ return (stdout, stderr) + + +- def _check_timeout(self, endtime, orig_timeout): +- """Convenience for checking if a timeout has expired.""" +- if endtime is None: +- return +- if _time() > endtime: +- raise TimeoutExpired(self.args, orig_timeout) ++ def poll(self): ++ return self._internal_poll() + + +- if mswindows: +- # +- # Windows methods +- # +- def _get_handles(self, stdin, stdout, stderr): +- """Construct and return tuple with IO objects: +- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite +- """ +- if stdin is None and stdout is None and stderr is None: +- return (-1, -1, -1, -1, -1, -1) +- +- p2cread, p2cwrite = -1, -1 +- c2pread, c2pwrite = -1, -1 +- errread, errwrite = -1, -1 +- +- if stdin is None: +- p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) +- if p2cread is None: +- p2cread, _ = _winapi.CreatePipe(None, 0) +- p2cread = Handle(p2cread) +- _winapi.CloseHandle(_) +- elif stdin == PIPE: +- p2cread, p2cwrite = _winapi.CreatePipe(None, 0) +- p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) +- elif stdin == DEVNULL: +- p2cread = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stdin, int): +- p2cread = msvcrt.get_osfhandle(stdin) ++ def _remaining_time(self, endtime): ++ """Convenience for _communicate when computing timeouts.""" ++ if endtime is None: ++ return None + else: +- # Assuming file-like object +- p2cread = msvcrt.get_osfhandle(stdin.fileno()) +- p2cread = self._make_inheritable(p2cread) +- +- if stdout is None: +- c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) +- if c2pwrite is None: +- _, c2pwrite = _winapi.CreatePipe(None, 0) +- c2pwrite = Handle(c2pwrite) +- _winapi.CloseHandle(_) +- elif stdout == PIPE: +- c2pread, c2pwrite = _winapi.CreatePipe(None, 0) +- c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) +- elif stdout == DEVNULL: +- c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stdout, int): +- c2pwrite = msvcrt.get_osfhandle(stdout) +- else: +- # Assuming file-like object +- c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) +- c2pwrite = self._make_inheritable(c2pwrite) +- +- if stderr is None: +- errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) +- if errwrite is None: +- _, errwrite = _winapi.CreatePipe(None, 0) +- errwrite = Handle(errwrite) +- _winapi.CloseHandle(_) +- elif stderr == PIPE: +- errread, errwrite = _winapi.CreatePipe(None, 0) +- errread, errwrite = Handle(errread), Handle(errwrite) +- elif stderr == STDOUT: +- errwrite = c2pwrite +- elif stderr == DEVNULL: +- errwrite = msvcrt.get_osfhandle(self._get_devnull()) +- elif isinstance(stderr, int): +- errwrite = msvcrt.get_osfhandle(stderr) +- else: +- # Assuming file-like object +- errwrite = msvcrt.get_osfhandle(stderr.fileno()) +- errwrite = self._make_inheritable(errwrite) +- +- return (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) +- +- +- def _make_inheritable(self, handle): +- """Return a duplicate of handle, which is inheritable""" +- h = _winapi.DuplicateHandle( +- _winapi.GetCurrentProcess(), handle, +- _winapi.GetCurrentProcess(), 0, 1, +- _winapi.DUPLICATE_SAME_ACCESS) +- return Handle(h) +- +- +- def _execute_child(self, args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- unused_restore_signals, unused_start_new_session): +- """Execute program (MS Windows version)""" +- +- assert not pass_fds, "pass_fds not supported on Windows." +- +- if not isinstance(args, str): +- args = list2cmdline(args) +- +- # Process startup details +- if startupinfo is None: +- startupinfo = STARTUPINFO() +- if -1 not in (p2cread, c2pwrite, errwrite): +- startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES +- startupinfo.hStdInput = p2cread +- startupinfo.hStdOutput = c2pwrite +- startupinfo.hStdError = errwrite +- +- if shell: +- startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW +- startupinfo.wShowWindow = _winapi.SW_HIDE +- comspec = os.environ.get("COMSPEC", "cmd.exe") +- args = '{} /c "{}"'.format (comspec, args) ++ return endtime - _time() + +- # Start the process +- try: +- hp, ht, pid, tid = _winapi.CreateProcess(executable, args, +- # no special security +- None, None, +- int(not close_fds), +- creationflags, +- env, +- cwd, +- startupinfo) +- finally: +- # Child is launched. Close the parent's copy of those pipe +- # handles that only the child should have open. You need +- # to make sure that no handles to the write end of the +- # output pipe are maintained in this process or else the +- # pipe will not close when the child process exits and the +- # ReadFile will hang. +- if p2cread != -1: +- p2cread.Close() +- if c2pwrite != -1: +- c2pwrite.Close() +- if errwrite != -1: +- errwrite.Close() +- if hasattr(self, '_devnull'): +- os.close(self._devnull) +- +- # Retain the process handle, but close the thread handle +- self._child_created = True +- self._handle = Handle(hp) +- self.pid = pid +- _winapi.CloseHandle(ht) +- +- def _internal_poll(self, _deadstate=None, +- _WaitForSingleObject=_winapi.WaitForSingleObject, +- _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, +- _GetExitCodeProcess=_winapi.GetExitCodeProcess): +- """Check if child process has terminated. Returns returncode +- attribute. +- +- This method is called by __del__, so it can only refer to objects +- in its local scope. +- +- """ +- if self.returncode is None: +- if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: +- self.returncode = _GetExitCodeProcess(self._handle) +- return self.returncode +- +- +- def wait(self, timeout=None, endtime=None): +- """Wait for child process to terminate. Returns returncode +- attribute.""" +- if endtime is not None: +- timeout = self._remaining_time(endtime) +- if timeout is None: +- timeout_millis = _winapi.INFINITE +- else: +- timeout_millis = int(timeout * 1000) +- if self.returncode is None: +- result = _winapi.WaitForSingleObject(self._handle, +- timeout_millis) +- if result == _winapi.WAIT_TIMEOUT: +- raise TimeoutExpired(self.args, timeout) +- self.returncode = _winapi.GetExitCodeProcess(self._handle) +- return self.returncode +- +- +- def _readerthread(self, fh, buffer): +- buffer.append(fh.read()) +- fh.close() +- +- +- def _communicate(self, input, endtime, orig_timeout): +- # Start reader threads feeding into a list hanging off of this +- # object, unless they've already been started. +- if self.stdout and not hasattr(self, "_stdout_buff"): +- self._stdout_buff = [] +- self.stdout_thread = \ +- threading.Thread(target=self._readerthread, +- args=(self.stdout, self._stdout_buff)) +- self.stdout_thread.daemon = True +- self.stdout_thread.start() +- if self.stderr and not hasattr(self, "_stderr_buff"): +- self._stderr_buff = [] +- self.stderr_thread = \ +- threading.Thread(target=self._readerthread, +- args=(self.stderr, self._stderr_buff)) +- self.stderr_thread.daemon = True +- self.stderr_thread.start() + +- if self.stdin: +- if input is not None: +- try: +- self.stdin.write(input) +- except OSError as e: +- if e.errno == errno.EPIPE: +- # communicate() should ignore pipe full error +- pass +- elif (e.errno == errno.EINVAL +- and self.poll() is not None): +- # Issue #19612: stdin.write() fails with EINVAL +- # if the process already exited before the write +- pass +- else: +- raise +- self.stdin.close() ++ def _check_timeout(self, endtime, orig_timeout): ++ """Convenience for checking if a timeout has expired.""" ++ if endtime is None: ++ return ++ if _time() > endtime: ++ raise TimeoutExpired(self.args, orig_timeout) + +- # Wait for the reader threads, or time out. If we time out, the +- # threads remain reading and the fds left open in case the user +- # calls communicate again. +- if self.stdout is not None: +- self.stdout_thread.join(self._remaining_time(endtime)) +- if self.stdout_thread.is_alive(): +- raise TimeoutExpired(self.args, orig_timeout) +- if self.stderr is not None: +- self.stderr_thread.join(self._remaining_time(endtime)) +- if self.stderr_thread.is_alive(): +- raise TimeoutExpired(self.args, orig_timeout) +- +- # Collect the output from and close both pipes, now that we know +- # both have been read successfully. +- stdout = None +- stderr = None +- if self.stdout: +- stdout = self._stdout_buff +- self.stdout.close() +- if self.stderr: +- stderr = self._stderr_buff +- self.stderr.close() + +- # All data exchanged. Translate lists into strings. +- if stdout is not None: +- stdout = stdout[0] +- if stderr is not None: +- stderr = stderr[0] ++ if mswindows: ++ # ++ # Windows methods ++ # ++ def _get_handles(self, stdin, stdout, stderr): ++ """Construct and return tuple with IO objects: ++ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite ++ """ ++ if stdin is None and stdout is None and stderr is None: ++ return (-1, -1, -1, -1, -1, -1) ++ ++ p2cread, p2cwrite = -1, -1 ++ c2pread, c2pwrite = -1, -1 ++ errread, errwrite = -1, -1 ++ ++ if stdin is None: ++ p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) ++ if p2cread is None: ++ p2cread, _ = _winapi.CreatePipe(None, 0) ++ p2cread = Handle(p2cread) ++ _winapi.CloseHandle(_) ++ elif stdin == PIPE: ++ p2cread, p2cwrite = _winapi.CreatePipe(None, 0) ++ p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) ++ elif stdin == DEVNULL: ++ p2cread = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stdin, int): ++ p2cread = msvcrt.get_osfhandle(stdin) ++ else: ++ # Assuming file-like object ++ p2cread = msvcrt.get_osfhandle(stdin.fileno()) ++ p2cread = self._make_inheritable(p2cread) ++ ++ if stdout is None: ++ c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) ++ if c2pwrite is None: ++ _, c2pwrite = _winapi.CreatePipe(None, 0) ++ c2pwrite = Handle(c2pwrite) ++ _winapi.CloseHandle(_) ++ elif stdout == PIPE: ++ c2pread, c2pwrite = _winapi.CreatePipe(None, 0) ++ c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) ++ elif stdout == DEVNULL: ++ c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stdout, int): ++ c2pwrite = msvcrt.get_osfhandle(stdout) ++ else: ++ # Assuming file-like object ++ c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) ++ c2pwrite = self._make_inheritable(c2pwrite) ++ ++ if stderr is None: ++ errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) ++ if errwrite is None: ++ _, errwrite = _winapi.CreatePipe(None, 0) ++ errwrite = Handle(errwrite) ++ _winapi.CloseHandle(_) ++ elif stderr == PIPE: ++ errread, errwrite = _winapi.CreatePipe(None, 0) ++ errread, errwrite = Handle(errread), Handle(errwrite) ++ elif stderr == STDOUT: ++ errwrite = c2pwrite ++ elif stderr == DEVNULL: ++ errwrite = msvcrt.get_osfhandle(self._get_devnull()) ++ elif isinstance(stderr, int): ++ errwrite = msvcrt.get_osfhandle(stderr) ++ else: ++ # Assuming file-like object ++ errwrite = msvcrt.get_osfhandle(stderr.fileno()) ++ errwrite = self._make_inheritable(errwrite) ++ ++ return (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) ++ ++ ++ def _make_inheritable(self, handle): ++ """Return a duplicate of handle, which is inheritable""" ++ h = _winapi.DuplicateHandle( ++ _winapi.GetCurrentProcess(), handle, ++ _winapi.GetCurrentProcess(), 0, 1, ++ _winapi.DUPLICATE_SAME_ACCESS) ++ return Handle(h) ++ ++ ++ def _execute_child(self, args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ unused_restore_signals, unused_start_new_session): ++ """Execute program (MS Windows version)""" ++ ++ assert not pass_fds, "pass_fds not supported on Windows." ++ ++ if not isinstance(args, str): ++ args = list2cmdline(args) ++ ++ # Process startup details ++ if startupinfo is None: ++ startupinfo = STARTUPINFO() ++ if -1 not in (p2cread, c2pwrite, errwrite): ++ startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES ++ startupinfo.hStdInput = p2cread ++ startupinfo.hStdOutput = c2pwrite ++ startupinfo.hStdError = errwrite ++ ++ if shell: ++ startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW ++ startupinfo.wShowWindow = _winapi.SW_HIDE ++ comspec = os.environ.get("COMSPEC", "cmd.exe") ++ args = '{} /c "{}"'.format (comspec, args) + +- return (stdout, stderr) ++ # Start the process ++ try: ++ hp, ht, pid, tid = _winapi.CreateProcess(executable, args, ++ # no special security ++ None, None, ++ int(not close_fds), ++ creationflags, ++ env, ++ cwd, ++ startupinfo) ++ finally: ++ # Child is launched. Close the parent's copy of those pipe ++ # handles that only the child should have open. You need ++ # to make sure that no handles to the write end of the ++ # output pipe are maintained in this process or else the ++ # pipe will not close when the child process exits and the ++ # ReadFile will hang. ++ if p2cread != -1: ++ p2cread.Close() ++ if c2pwrite != -1: ++ c2pwrite.Close() ++ if errwrite != -1: ++ errwrite.Close() ++ if hasattr(self, '_devnull'): ++ os.close(self._devnull) ++ ++ # Retain the process handle, but close the thread handle ++ self._child_created = True ++ self._handle = Handle(hp) ++ self.pid = pid ++ _winapi.CloseHandle(ht) ++ ++ def _internal_poll(self, _deadstate=None, ++ _WaitForSingleObject=_winapi.WaitForSingleObject, ++ _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, ++ _GetExitCodeProcess=_winapi.GetExitCodeProcess): ++ """Check if child process has terminated. Returns returncode ++ attribute. ++ ++ This method is called by __del__, so it can only refer to objects ++ in its local scope. ++ ++ """ ++ if self.returncode is None: ++ if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: ++ self.returncode = _GetExitCodeProcess(self._handle) ++ return self.returncode + +- def send_signal(self, sig): +- """Send a signal to the process +- """ +- if sig == signal.SIGTERM: +- self.terminate() +- elif sig == signal.CTRL_C_EVENT: +- os.kill(self.pid, signal.CTRL_C_EVENT) +- elif sig == signal.CTRL_BREAK_EVENT: +- os.kill(self.pid, signal.CTRL_BREAK_EVENT) +- else: +- raise ValueError("Unsupported signal: {}".format(sig)) + +- def terminate(self): +- """Terminates the process +- """ +- try: +- _winapi.TerminateProcess(self._handle, 1) +- except PermissionError: +- # ERROR_ACCESS_DENIED (winerror 5) is received when the +- # process already died. +- rc = _winapi.GetExitCodeProcess(self._handle) +- if rc == _winapi.STILL_ACTIVE: +- raise +- self.returncode = rc ++ def wait(self, timeout=None, endtime=None): ++ """Wait for child process to terminate. Returns returncode ++ attribute.""" ++ if endtime is not None: ++ timeout = self._remaining_time(endtime) ++ if timeout is None: ++ timeout_millis = _winapi.INFINITE ++ else: ++ timeout_millis = int(timeout * 1000) ++ if self.returncode is None: ++ result = _winapi.WaitForSingleObject(self._handle, ++ timeout_millis) ++ if result == _winapi.WAIT_TIMEOUT: ++ raise TimeoutExpired(self.args, timeout) ++ self.returncode = _winapi.GetExitCodeProcess(self._handle) ++ return self.returncode + +- kill = terminate + +- else: +- # +- # POSIX methods +- # +- def _get_handles(self, stdin, stdout, stderr): +- """Construct and return tuple with IO objects: +- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite +- """ +- p2cread, p2cwrite = -1, -1 +- c2pread, c2pwrite = -1, -1 +- errread, errwrite = -1, -1 +- +- if stdin is None: +- pass +- elif stdin == PIPE: +- p2cread, p2cwrite = os.pipe() +- elif stdin == DEVNULL: +- p2cread = self._get_devnull() +- elif isinstance(stdin, int): +- p2cread = stdin +- else: +- # Assuming file-like object +- p2cread = stdin.fileno() ++ def _readerthread(self, fh, buffer): ++ buffer.append(fh.read()) ++ fh.close() ++ ++ ++ def _communicate(self, input, endtime, orig_timeout): ++ # Start reader threads feeding into a list hanging off of this ++ # object, unless they've already been started. ++ if self.stdout and not hasattr(self, "_stdout_buff"): ++ self._stdout_buff = [] ++ self.stdout_thread = \ ++ threading.Thread(target=self._readerthread, ++ args=(self.stdout, self._stdout_buff)) ++ self.stdout_thread.daemon = True ++ self.stdout_thread.start() ++ if self.stderr and not hasattr(self, "_stderr_buff"): ++ self._stderr_buff = [] ++ self.stderr_thread = \ ++ threading.Thread(target=self._readerthread, ++ args=(self.stderr, self._stderr_buff)) ++ self.stderr_thread.daemon = True ++ self.stderr_thread.start() + +- if stdout is None: +- pass +- elif stdout == PIPE: +- c2pread, c2pwrite = os.pipe() +- elif stdout == DEVNULL: +- c2pwrite = self._get_devnull() +- elif isinstance(stdout, int): +- c2pwrite = stdout +- else: +- # Assuming file-like object +- c2pwrite = stdout.fileno() ++ if self.stdin: ++ if input is not None: ++ try: ++ self.stdin.write(input) ++ except OSError as e: ++ if e.errno == errno.EPIPE: ++ # communicate() should ignore pipe full error ++ pass ++ elif (e.errno == errno.EINVAL ++ and self.poll() is not None): ++ # Issue #19612: stdin.write() fails with EINVAL ++ # if the process already exited before the write ++ pass ++ else: ++ raise ++ self.stdin.close() + +- if stderr is None: +- pass +- elif stderr == PIPE: +- errread, errwrite = os.pipe() +- elif stderr == STDOUT: +- errwrite = c2pwrite +- elif stderr == DEVNULL: +- errwrite = self._get_devnull() +- elif isinstance(stderr, int): +- errwrite = stderr +- else: +- # Assuming file-like object +- errwrite = stderr.fileno() ++ # Wait for the reader threads, or time out. If we time out, the ++ # threads remain reading and the fds left open in case the user ++ # calls communicate again. ++ if self.stdout is not None: ++ self.stdout_thread.join(self._remaining_time(endtime)) ++ if self.stdout_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) ++ if self.stderr is not None: ++ self.stderr_thread.join(self._remaining_time(endtime)) ++ if self.stderr_thread.is_alive(): ++ raise TimeoutExpired(self.args, orig_timeout) + +- return (p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite) +- +- +- def _close_fds(self, fds_to_keep): +- start_fd = 3 +- for fd in sorted(fds_to_keep): +- if fd >= start_fd: +- os.closerange(start_fd, fd) +- start_fd = fd + 1 +- if start_fd <= MAXFD: +- os.closerange(start_fd, MAXFD) +- +- +- def _execute_child(self, args, executable, preexec_fn, close_fds, +- pass_fds, cwd, env, +- startupinfo, creationflags, shell, +- p2cread, p2cwrite, +- c2pread, c2pwrite, +- errread, errwrite, +- restore_signals, start_new_session): +- """Execute program (POSIX version)""" ++ # Collect the output from and close both pipes, now that we know ++ # both have been read successfully. ++ stdout = None ++ stderr = None ++ if self.stdout: ++ stdout = self._stdout_buff ++ self.stdout.close() ++ if self.stderr: ++ stderr = self._stderr_buff ++ self.stderr.close() + +- if isinstance(args, (str, bytes)): +- args = [args] +- else: +- args = list(args) ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = stdout[0] ++ if stderr is not None: ++ stderr = stderr[0] + +- if shell: +- args = ["/bin/sh", "-c"] + args +- if executable: +- args[0] = executable +- +- if executable is None: +- executable = args[0] +- orig_executable = executable +- +- # For transferring possible exec failure from child to parent. +- # Data format: "exception name:hex errno:description" +- # Pickle is not used; it is complex and involves memory allocation. +- errpipe_read, errpipe_write = os.pipe() +- # errpipe_write must not be in the standard io 0, 1, or 2 fd range. +- low_fds_to_close = [] +- while errpipe_write < 3: +- low_fds_to_close.append(errpipe_write) +- errpipe_write = os.dup(errpipe_write) +- for low_fd in low_fds_to_close: +- os.close(low_fd) +- try: +- try: +- # We must avoid complex work that could involve +- # malloc or free in the child process to avoid +- # potential deadlocks, thus we do all this here. +- # and pass it to fork_exec() +- +- if env is not None: +- env_list = [os.fsencode(k) + b'=' + os.fsencode(v) +- for k, v in env.items()] +- else: +- env_list = None # Use execv instead of execve. +- executable = os.fsencode(executable) +- if os.path.dirname(executable): +- executable_list = (executable,) +- else: +- # This matches the behavior of os._execvpe(). +- executable_list = tuple( +- os.path.join(os.fsencode(dir), executable) +- for dir in os.get_exec_path(env)) +- fds_to_keep = set(pass_fds) +- fds_to_keep.add(errpipe_write) +- self.pid = _posixsubprocess.fork_exec( +- args, executable_list, +- close_fds, sorted(fds_to_keep), cwd, env_list, +- p2cread, p2cwrite, c2pread, c2pwrite, +- errread, errwrite, +- errpipe_read, errpipe_write, +- restore_signals, start_new_session, preexec_fn) +- self._child_created = True +- finally: +- # be sure the FD is closed no matter what +- os.close(errpipe_write) ++ return (stdout, stderr) + +- # self._devnull is not always defined. +- devnull_fd = getattr(self, '_devnull', None) +- if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: +- os.close(p2cread) +- if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: +- os.close(c2pwrite) +- if errwrite != -1 and errread != -1 and errwrite != devnull_fd: +- os.close(errwrite) +- if devnull_fd is not None: +- os.close(devnull_fd) +- # Prevent a double close of these fds from __init__ on error. +- self._closed_child_pipe_fds = True +- +- # Wait for exec to fail or succeed; possibly raising an +- # exception (limited in size) +- errpipe_data = bytearray() +- while True: +- part = _eintr_retry_call(os.read, errpipe_read, 50000) +- errpipe_data += part +- if not part or len(errpipe_data) > 50000: +- break +- finally: +- # be sure the FD is closed no matter what +- os.close(errpipe_read) ++ def send_signal(self, sig): ++ """Send a signal to the process ++ """ ++ if sig == signal.SIGTERM: ++ self.terminate() ++ elif sig == signal.CTRL_C_EVENT: ++ os.kill(self.pid, signal.CTRL_C_EVENT) ++ elif sig == signal.CTRL_BREAK_EVENT: ++ os.kill(self.pid, signal.CTRL_BREAK_EVENT) ++ else: ++ raise ValueError("Unsupported signal: {}".format(sig)) + +- if errpipe_data: ++ def terminate(self): ++ """Terminates the process ++ """ + try: +- _eintr_retry_call(os.waitpid, self.pid, 0) +- except OSError as e: +- if e.errno != errno.ECHILD: ++ _winapi.TerminateProcess(self._handle, 1) ++ except PermissionError: ++ # ERROR_ACCESS_DENIED (winerror 5) is received when the ++ # process already died. ++ rc = _winapi.GetExitCodeProcess(self._handle) ++ if rc == _winapi.STILL_ACTIVE: + raise +- try: +- exception_name, hex_errno, err_msg = ( +- errpipe_data.split(b':', 2)) +- except ValueError: +- exception_name = b'SubprocessError' +- hex_errno = b'0' +- err_msg = (b'Bad exception data from child: ' + +- repr(errpipe_data)) +- child_exception_type = getattr( +- builtins, exception_name.decode('ascii'), +- SubprocessError) +- err_msg = err_msg.decode(errors="surrogatepass") +- if issubclass(child_exception_type, OSError) and hex_errno: +- errno_num = int(hex_errno, 16) +- child_exec_never_called = (err_msg == "noexec") +- if child_exec_never_called: +- err_msg = "" +- if errno_num != 0: +- err_msg = os.strerror(errno_num) +- if errno_num == errno.ENOENT: +- if child_exec_never_called: +- # The error must be from chdir(cwd). +- err_msg += ': ' + repr(cwd) +- else: +- err_msg += ': ' + repr(orig_executable) +- raise child_exception_type(errno_num, err_msg) +- raise child_exception_type(err_msg) ++ self.returncode = rc + ++ kill = terminate + +- def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, +- _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, +- _WEXITSTATUS=os.WEXITSTATUS): +- """All callers to this function MUST hold self._waitpid_lock.""" +- # This method is called (indirectly) by __del__, so it cannot +- # refer to anything outside of its local scope. +- if _WIFSIGNALED(sts): +- self.returncode = -_WTERMSIG(sts) +- elif _WIFEXITED(sts): +- self.returncode = _WEXITSTATUS(sts) +- else: +- # Should never happen +- raise SubprocessError("Unknown child exit status!") ++ else: ++ # ++ # POSIX methods ++ # ++ def _get_handles(self, stdin, stdout, stderr): ++ """Construct and return tuple with IO objects: ++ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite ++ """ ++ p2cread, p2cwrite = -1, -1 ++ c2pread, c2pwrite = -1, -1 ++ errread, errwrite = -1, -1 ++ ++ if stdin is None: ++ pass ++ elif stdin == PIPE: ++ p2cread, p2cwrite = os.pipe() ++ elif stdin == DEVNULL: ++ p2cread = self._get_devnull() ++ elif isinstance(stdin, int): ++ p2cread = stdin ++ else: ++ # Assuming file-like object ++ p2cread = stdin.fileno() ++ ++ if stdout is None: ++ pass ++ elif stdout == PIPE: ++ c2pread, c2pwrite = os.pipe() ++ elif stdout == DEVNULL: ++ c2pwrite = self._get_devnull() ++ elif isinstance(stdout, int): ++ c2pwrite = stdout ++ else: ++ # Assuming file-like object ++ c2pwrite = stdout.fileno() ++ ++ if stderr is None: ++ pass ++ elif stderr == PIPE: ++ errread, errwrite = os.pipe() ++ elif stderr == STDOUT: ++ errwrite = c2pwrite ++ elif stderr == DEVNULL: ++ errwrite = self._get_devnull() ++ elif isinstance(stderr, int): ++ errwrite = stderr ++ else: ++ # Assuming file-like object ++ errwrite = stderr.fileno() + ++ return (p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite) ++ ++ ++ def _close_fds(self, fds_to_keep): ++ start_fd = 3 ++ for fd in sorted(fds_to_keep): ++ if fd >= start_fd: ++ os.closerange(start_fd, fd) ++ start_fd = fd + 1 ++ if start_fd <= MAXFD: ++ os.closerange(start_fd, MAXFD) ++ ++ ++ def _execute_child(self, args, executable, preexec_fn, close_fds, ++ pass_fds, cwd, env, ++ startupinfo, creationflags, shell, ++ p2cread, p2cwrite, ++ c2pread, c2pwrite, ++ errread, errwrite, ++ restore_signals, start_new_session): ++ """Execute program (POSIX version)""" - def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -+ def _internal_poll(self, _deadstate=None, _waitpid=None, - _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): - """Check if child process has terminated. Returns returncode - attribute. -@@ -1569,6 +1571,8 @@ - outside of the local scope (nor can any methods it calls). - - """ -+ if _waitpid is None: -+ _waitpid = os.waitpid - if self.returncode is None: - if not self._waitpid_lock.acquire(False): - # Something else is busy calling waitpid. Don't allow two +- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): +- """Check if child process has terminated. Returns returncode +- attribute. +- +- This method is called by __del__, so it cannot reference anything +- outside of the local scope (nor can any methods it calls). +- +- """ +- if self.returncode is None: +- if not self._waitpid_lock.acquire(False): +- # Something else is busy calling waitpid. Don't allow two +- # at once. We know nothing yet. +- return None ++ if isinstance(args, (str, bytes)): ++ args = [args] ++ else: ++ args = list(args) ++ ++ if shell: ++ args = ["/bin/sh", "-c"] + args ++ if executable: ++ args[0] = executable ++ ++ if executable is None: ++ executable = args[0] ++ orig_executable = executable ++ ++ # For transferring possible exec failure from child to parent. ++ # Data format: "exception name:hex errno:description" ++ # Pickle is not used; it is complex and involves memory allocation. ++ errpipe_read, errpipe_write = os.pipe() ++ # errpipe_write must not be in the standard io 0, 1, or 2 fd range. ++ low_fds_to_close = [] ++ while errpipe_write < 3: ++ low_fds_to_close.append(errpipe_write) ++ errpipe_write = os.dup(errpipe_write) ++ for low_fd in low_fds_to_close: ++ os.close(low_fd) + try: +- if self.returncode is not None: +- return self.returncode # Another thread waited. +- pid, sts = _waitpid(self.pid, _WNOHANG) +- if pid == self.pid: +- self._handle_exitstatus(sts) +- except OSError as e: +- if _deadstate is not None: +- self.returncode = _deadstate +- elif e.errno == _ECHILD: +- # This happens if SIGCLD is set to be ignored or +- # waiting for child processes has otherwise been +- # disabled for our process. This child is dead, we +- # can't get the status. +- # http://bugs.python.org/issue15756 +- self.returncode = 0 ++ try: ++ # We must avoid complex work that could involve ++ # malloc or free in the child process to avoid ++ # potential deadlocks, thus we do all this here. ++ # and pass it to fork_exec() ++ ++ if env is not None: ++ env_list = [os.fsencode(k) + b'=' + os.fsencode(v) ++ for k, v in env.items()] ++ else: ++ env_list = None # Use execv instead of execve. ++ executable = os.fsencode(executable) ++ if os.path.dirname(executable): ++ executable_list = (executable,) ++ else: ++ # This matches the behavior of os._execvpe(). ++ executable_list = tuple( ++ os.path.join(os.fsencode(dir), executable) ++ for dir in os.get_exec_path(env)) ++ fds_to_keep = set(pass_fds) ++ fds_to_keep.add(errpipe_write) ++ self.pid = _posixsubprocess.fork_exec( ++ args, executable_list, ++ close_fds, sorted(fds_to_keep), cwd, env_list, ++ p2cread, p2cwrite, c2pread, c2pwrite, ++ errread, errwrite, ++ errpipe_read, errpipe_write, ++ restore_signals, start_new_session, preexec_fn) ++ self._child_created = True ++ finally: ++ # be sure the FD is closed no matter what ++ os.close(errpipe_write) ++ ++ # self._devnull is not always defined. ++ devnull_fd = getattr(self, '_devnull', None) ++ if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: ++ os.close(p2cread) ++ if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: ++ os.close(c2pwrite) ++ if errwrite != -1 and errread != -1 and errwrite != devnull_fd: ++ os.close(errwrite) ++ if devnull_fd is not None: ++ os.close(devnull_fd) ++ # Prevent a double close of these fds from __init__ on error. ++ self._closed_child_pipe_fds = True ++ ++ # Wait for exec to fail or succeed; possibly raising an ++ # exception (limited in size) ++ errpipe_data = bytearray() ++ while True: ++ part = _eintr_retry_call(os.read, errpipe_read, 50000) ++ errpipe_data += part ++ if not part or len(errpipe_data) > 50000: ++ break + finally: +- self._waitpid_lock.release() +- return self.returncode ++ # be sure the FD is closed no matter what ++ os.close(errpipe_read) ++ ++ if errpipe_data: ++ try: ++ _eintr_retry_call(os.waitpid, self.pid, 0) ++ except OSError as e: ++ if e.errno != errno.ECHILD: ++ raise ++ try: ++ exception_name, hex_errno, err_msg = ( ++ errpipe_data.split(b':', 2)) ++ except ValueError: ++ exception_name = b'SubprocessError' ++ hex_errno = b'0' ++ err_msg = (b'Bad exception data from child: ' + ++ repr(errpipe_data)) ++ child_exception_type = getattr( ++ builtins, exception_name.decode('ascii'), ++ SubprocessError) ++ err_msg = err_msg.decode(errors="surrogatepass") ++ if issubclass(child_exception_type, OSError) and hex_errno: ++ errno_num = int(hex_errno, 16) ++ child_exec_never_called = (err_msg == "noexec") ++ if child_exec_never_called: ++ err_msg = "" ++ if errno_num != 0: ++ err_msg = os.strerror(errno_num) ++ if errno_num == errno.ENOENT: ++ if child_exec_never_called: ++ # The error must be from chdir(cwd). ++ err_msg += ': ' + repr(cwd) ++ else: ++ err_msg += ': ' + repr(orig_executable) ++ raise child_exception_type(errno_num, err_msg) ++ raise child_exception_type(err_msg) + + +- def _try_wait(self, wait_flags): +- """All callers to this function MUST hold self._waitpid_lock.""" +- try: +- (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) +- except OSError as e: +- if e.errno != errno.ECHILD: +- raise +- # This happens if SIGCLD is set to be ignored or waiting +- # for child processes has otherwise been disabled for our +- # process. This child is dead, we can't get the status. +- pid = self.pid +- sts = 0 +- return (pid, sts) +- +- +- def wait(self, timeout=None, endtime=None): +- """Wait for child process to terminate. Returns returncode +- attribute.""" +- if self.returncode is not None: +- return self.returncode ++ def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, ++ _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, ++ _WEXITSTATUS=os.WEXITSTATUS): ++ """All callers to this function MUST hold self._waitpid_lock.""" ++ # This method is called (indirectly) by __del__, so it cannot ++ # refer to anything outside of its local scope. ++ if _WIFSIGNALED(sts): ++ self.returncode = -_WTERMSIG(sts) ++ elif _WIFEXITED(sts): ++ self.returncode = _WEXITSTATUS(sts) ++ else: ++ # Should never happen ++ raise SubprocessError("Unknown child exit status!") + +- # endtime is preferred to timeout. timeout is only used for +- # printing. +- if endtime is not None or timeout is not None: +- if endtime is None: +- endtime = _time() + timeout +- elif timeout is None: +- timeout = self._remaining_time(endtime) + +- if endtime is not None: +- # Enter a busy loop if we have a timeout. This busy loop was +- # cribbed from Lib/threading.py in Thread.wait() at r71065. +- delay = 0.0005 # 500 us -> initial delay of 1 ms +- while True: +- if self._waitpid_lock.acquire(False): +- try: +- if self.returncode is not None: +- break # Another thread waited. +- (pid, sts) = self._try_wait(os.WNOHANG) +- assert pid == self.pid or pid == 0 +- if pid == self.pid: +- self._handle_exitstatus(sts) +- break +- finally: +- self._waitpid_lock.release() +- remaining = self._remaining_time(endtime) +- if remaining <= 0: +- raise TimeoutExpired(self.args, timeout) +- delay = min(delay * 2, remaining, .05) +- time.sleep(delay) +- else: +- while self.returncode is None: +- with self._waitpid_lock: ++ def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, ++ _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): ++ """Check if child process has terminated. Returns returncode ++ attribute. ++ ++ This method is called by __del__, so it cannot reference anything ++ outside of the local scope (nor can any methods it calls). ++ ++ """ ++ if self.returncode is None: ++ if not self._waitpid_lock.acquire(False): ++ # Something else is busy calling waitpid. Don't allow two ++ # at once. We know nothing yet. ++ return None ++ try: + if self.returncode is not None: +- break # Another thread waited. +- (pid, sts) = self._try_wait(0) +- # Check the pid and loop as waitpid has been known to +- # return 0 even without WNOHANG in odd situations. +- # http://bugs.python.org/issue14396. ++ return self.returncode # Another thread waited. ++ pid, sts = _waitpid(self.pid, _WNOHANG) + if pid == self.pid: + self._handle_exitstatus(sts) +- return self.returncode +- +- +- def _communicate(self, input, endtime, orig_timeout): +- if self.stdin and not self._communication_started: +- # Flush stdio buffer. This might block, if the user has +- # been writing to .stdin in an uncontrolled fashion. +- self.stdin.flush() +- if not input: +- self.stdin.close() +- +- stdout = None +- stderr = None ++ except OSError as e: ++ if _deadstate is not None: ++ self.returncode = _deadstate ++ elif e.errno == _ECHILD: ++ # This happens if SIGCLD is set to be ignored or ++ # waiting for child processes has otherwise been ++ # disabled for our process. This child is dead, we ++ # can't get the status. ++ # http://bugs.python.org/issue15756 ++ self.returncode = 0 ++ finally: ++ self._waitpid_lock.release() ++ return self.returncode + +- # Only create this mapping if we haven't already. +- if not self._communication_started: +- self._fileobj2output = {} +- if self.stdout: +- self._fileobj2output[self.stdout] = [] +- if self.stderr: +- self._fileobj2output[self.stderr] = [] + +- if self.stdout: +- stdout = self._fileobj2output[self.stdout] +- if self.stderr: +- stderr = self._fileobj2output[self.stderr] ++ def _try_wait(self, wait_flags): ++ """All callers to this function MUST hold self._waitpid_lock.""" ++ try: ++ (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) ++ except OSError as e: ++ if e.errno != errno.ECHILD: ++ raise ++ # This happens if SIGCLD is set to be ignored or waiting ++ # for child processes has otherwise been disabled for our ++ # process. This child is dead, we can't get the status. ++ pid = self.pid ++ sts = 0 ++ return (pid, sts) ++ ++ ++ def wait(self, timeout=None, endtime=None): ++ """Wait for child process to terminate. Returns returncode ++ attribute.""" ++ if self.returncode is not None: ++ return self.returncode ++ ++ # endtime is preferred to timeout. timeout is only used for ++ # printing. ++ if endtime is not None or timeout is not None: ++ if endtime is None: ++ endtime = _time() + timeout ++ elif timeout is None: ++ timeout = self._remaining_time(endtime) ++ ++ if endtime is not None: ++ # Enter a busy loop if we have a timeout. This busy loop was ++ # cribbed from Lib/threading.py in Thread.wait() at r71065. ++ delay = 0.0005 # 500 us -> initial delay of 1 ms ++ while True: ++ if self._waitpid_lock.acquire(False): ++ try: ++ if self.returncode is not None: ++ break # Another thread waited. ++ (pid, sts) = self._try_wait(os.WNOHANG) ++ assert pid == self.pid or pid == 0 ++ if pid == self.pid: ++ self._handle_exitstatus(sts) ++ break ++ finally: ++ self._waitpid_lock.release() ++ remaining = self._remaining_time(endtime) ++ if remaining <= 0: ++ raise TimeoutExpired(self.args, timeout) ++ delay = min(delay * 2, remaining, .05) ++ time.sleep(delay) ++ else: ++ while self.returncode is None: ++ with self._waitpid_lock: ++ if self.returncode is not None: ++ break # Another thread waited. ++ (pid, sts) = self._try_wait(0) ++ # Check the pid and loop as waitpid has been known to ++ # return 0 even without WNOHANG in odd situations. ++ # http://bugs.python.org/issue14396. ++ if pid == self.pid: ++ self._handle_exitstatus(sts) ++ return self.returncode + +- self._save_input(input) + +- if self._input: +- input_view = memoryview(self._input) ++ def _communicate(self, input, endtime, orig_timeout): ++ if self.stdin and not self._communication_started: ++ # Flush stdio buffer. This might block, if the user has ++ # been writing to .stdin in an uncontrolled fashion. ++ self.stdin.flush() ++ if not input: ++ self.stdin.close() ++ ++ stdout = None ++ stderr = None ++ ++ # Only create this mapping if we haven't already. ++ if not self._communication_started: ++ self._fileobj2output = {} ++ if self.stdout: ++ self._fileobj2output[self.stdout] = [] ++ if self.stderr: ++ self._fileobj2output[self.stderr] = [] + +- with _PopenSelector() as selector: +- if self.stdin and input: +- selector.register(self.stdin, selectors.EVENT_WRITE) + if self.stdout: +- selector.register(self.stdout, selectors.EVENT_READ) ++ stdout = self._fileobj2output[self.stdout] + if self.stderr: +- selector.register(self.stderr, selectors.EVENT_READ) ++ stderr = self._fileobj2output[self.stderr] + +- while selector.get_map(): +- timeout = self._remaining_time(endtime) +- if timeout is not None and timeout < 0: +- raise TimeoutExpired(self.args, orig_timeout) +- +- ready = selector.select(timeout) +- self._check_timeout(endtime, orig_timeout) ++ self._save_input(input) + +- # XXX Rewrite these to use non-blocking I/O on the file +- # objects; they are no longer using C stdio! ++ if self._input: ++ input_view = memoryview(self._input) + +- for key, events in ready: +- if key.fileobj is self.stdin: +- chunk = input_view[self._input_offset : +- self._input_offset + _PIPE_BUF] +- try: +- self._input_offset += os.write(key.fd, chunk) +- except OSError as e: +- if e.errno == errno.EPIPE: +- selector.unregister(key.fileobj) +- key.fileobj.close() ++ with _PopenSelector() as selector: ++ if self.stdin and input: ++ selector.register(self.stdin, selectors.EVENT_WRITE) ++ if self.stdout: ++ selector.register(self.stdout, selectors.EVENT_READ) ++ if self.stderr: ++ selector.register(self.stderr, selectors.EVENT_READ) ++ ++ while selector.get_map(): ++ timeout = self._remaining_time(endtime) ++ if timeout is not None and timeout < 0: ++ raise TimeoutExpired(self.args, orig_timeout) ++ ++ ready = selector.select(timeout) ++ self._check_timeout(endtime, orig_timeout) ++ ++ # XXX Rewrite these to use non-blocking I/O on the file ++ # objects; they are no longer using C stdio! ++ ++ for key, events in ready: ++ if key.fileobj is self.stdin: ++ chunk = input_view[self._input_offset : ++ self._input_offset + _PIPE_BUF] ++ try: ++ self._input_offset += os.write(key.fd, chunk) ++ except OSError as e: ++ if e.errno == errno.EPIPE: ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ else: ++ raise + else: +- raise +- else: +- if self._input_offset >= len(self._input): ++ if self._input_offset >= len(self._input): ++ selector.unregister(key.fileobj) ++ key.fileobj.close() ++ elif key.fileobj in (self.stdout, self.stderr): ++ data = os.read(key.fd, 32768) ++ if not data: + selector.unregister(key.fileobj) + key.fileobj.close() +- elif key.fileobj in (self.stdout, self.stderr): +- data = os.read(key.fd, 32768) +- if not data: +- selector.unregister(key.fileobj) +- key.fileobj.close() +- self._fileobj2output[key.fileobj].append(data) +- +- self.wait(timeout=self._remaining_time(endtime)) +- +- # All data exchanged. Translate lists into strings. +- if stdout is not None: +- stdout = b''.join(stdout) +- if stderr is not None: +- stderr = b''.join(stderr) +- +- # Translate newlines, if requested. +- # This also turns bytes into strings. +- if self.universal_newlines: +- if stdout is not None: +- stdout = self._translate_newlines(stdout, +- self.stdout.encoding) +- if stderr is not None: +- stderr = self._translate_newlines(stderr, +- self.stderr.encoding) ++ self._fileobj2output[key.fileobj].append(data) + +- return (stdout, stderr) ++ self.wait(timeout=self._remaining_time(endtime)) + ++ # All data exchanged. Translate lists into strings. ++ if stdout is not None: ++ stdout = b''.join(stdout) ++ if stderr is not None: ++ stderr = b''.join(stderr) + +- def _save_input(self, input): +- # This method is called from the _communicate_with_*() methods +- # so that if we time out while communicating, we can continue +- # sending input if we retry. +- if self.stdin and self._input is None: +- self._input_offset = 0 +- self._input = input +- if self.universal_newlines and input is not None: +- self._input = self._input.encode(self.stdin.encoding) +- +- +- def send_signal(self, sig): +- """Send a signal to the process +- """ +- os.kill(self.pid, sig) +- +- def terminate(self): +- """Terminate the process with SIGTERM +- """ +- self.send_signal(signal.SIGTERM) +- +- def kill(self): +- """Kill the process with SIGKILL +- """ +- self.send_signal(signal.SIGKILL) ++ # Translate newlines, if requested. ++ # This also turns bytes into strings. ++ if self.universal_newlines: ++ if stdout is not None: ++ stdout = self._translate_newlines(stdout, ++ self.stdout.encoding) ++ if stderr is not None: ++ stderr = self._translate_newlines(stderr, ++ self.stderr.encoding) ++ ++ return (stdout, stderr) ++ ++ ++ def _save_input(self, input): ++ # This method is called from the _communicate_with_*() methods ++ # so that if we time out while communicating, we can continue ++ # sending input if we retry. ++ if self.stdin and self._input is None: ++ self._input_offset = 0 ++ self._input = input ++ if self.universal_newlines and input is not None: ++ self._input = self._input.encode(self.stdin.encoding) ++ ++ ++ def send_signal(self, sig): ++ """Send a signal to the process ++ """ ++ os.kill(self.pid, sig) ++ ++ def terminate(self): ++ """Terminate the process with SIGTERM ++ """ ++ self.send_signal(signal.SIGTERM) ++ ++ def kill(self): ++ """Kill the process with SIGKILL ++ """ ++ self.send_signal(signal.SIGKILL) diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py ---- orig/Lib/sysconfig.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/sysconfig.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/sysconfig.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/sysconfig.py 2015-07-04 21:18:58.000000000 +0800 @@ -78,6 +78,15 @@ 'scripts': '{userbase}/bin', 'data': '{userbase}', @@ -9264,7 +11616,7 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py } _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', -@@ -174,6 +183,8 @@ +@@ -181,6 +190,8 @@ if os.name == 'posix': # the default scheme for posix is posix_prefix return 'posix_prefix' @@ -9273,7 +11625,7 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py return os.name -@@ -198,6 +209,11 @@ +@@ -205,6 +216,11 @@ else: return joinuser("~", "Library", framework, "%d.%d" % sys.version_info[:2]) @@ -9286,8 +11638,8 @@ diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py if env_base: return env_base diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py ---- orig/Lib/test/__main__.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/__main__.py 2016-02-14 10:29:10.000000000 +0800 +--- orig/Lib/test/__main__.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/__main__.py 2015-05-04 07:57:38.000000000 +0800 @@ -1,3 +1,5 @@ +import sys from test import regrtest @@ -9296,9 +11648,9 @@ diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py +result = regrtest.main_in_temp_cwd() +sys.exit(result) diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py ---- orig/Lib/test/regrtest.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/regrtest.py 2016-02-14 10:29:10.000000000 +0800 -@@ -551,7 +551,7 @@ +--- orig/Lib/test/regrtest.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/regrtest.py 2015-05-04 07:58:07.000000000 +0800 +@@ -538,7 +538,7 @@ sys.stdout.flush() print() # Force a newline (just in case) print(json.dumps(result)) @@ -9307,7 +11659,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py good = [] bad = [] -@@ -693,7 +693,7 @@ +@@ -678,7 +678,7 @@ from threading import Thread except ImportError: print("Multiprocess option requires thread support") @@ -9316,7 +11668,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py from queue import Queue debug_output_pat = re.compile(r"\[\d+ refs, \d+ blocks\]$") output = Queue() -@@ -863,7 +863,7 @@ +@@ -840,7 +840,7 @@ if ns.runleaks: os.system("leaks %d" % os.getpid()) @@ -9325,7 +11677,7 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py # small set of tests to determine if we have a basically functioning interpreter -@@ -1588,7 +1588,9 @@ +@@ -1561,7 +1561,9 @@ # change the CWD, the original CWD will be used. The original CWD is # available from support.SAVEDCWD. with support.temp_cwd(test_cwd, quiet=True): @@ -9336,42 +11688,17 @@ diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py if __name__ == '__main__': -@@ -1613,4 +1615,5 @@ +@@ -1586,4 +1588,5 @@ # sanity check assert __file__ == os.path.abspath(sys.argv[0]) - main_in_temp_cwd() + result = main_in_temp_cwd() + sys.exit(retval) -diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.py ---- orig/Lib/test/support/__init__.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/support/__init__.py 2016-02-14 10:29:37.000000000 +0800 -@@ -788,8 +788,8 @@ - - # TESTFN_UNICODE is a non-ascii filename - TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" --if sys.platform == 'darwin': -- # In Mac OS X's VFS API file names are, by definition, canonically -+if sys.platform in ('darwin', 'ios'): -+ # In iOS and Mac OS X, VFS API file names are, by definition, canonically - # decomposed Unicode, encoded using UTF-8. See QA1173: - # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html - import unicodedata -@@ -815,8 +815,8 @@ - 'Unicode filename tests may not be effective' - % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) - TESTFN_UNENCODABLE = None --# Mac OS X denies unencodable filenames (invalid utf-8) --elif sys.platform != 'darwin': -+# Mac OS X and iOS deny unencodable filenames (invalid utf-8) -+elif sys.platform not in ('darwin', 'ios'): - try: - # ascii and utf-8 cannot encode the byte 0xff - b'\xff'.decode(TESTFN_ENCODING) -diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/script_helper.py ---- orig/Lib/test/support/script_helper.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/support/script_helper.py 2016-02-17 09:41:41.000000000 +0800 -@@ -11,6 +11,7 @@ +diff -Nru orig/Lib/test/script_helper.py modified/Lib/test/script_helper.py +--- orig/Lib/test/script_helper.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/script_helper.py 2015-05-04 14:42:40.000000000 +0800 +@@ -10,12 +10,15 @@ import py_compile import contextlib import shutil @@ -9379,218 +11706,141 @@ diff -Nru orig/Lib/test/support/script_helper.py modified/Lib/test/support/scrip import zipfile from importlib.util import source_from_cache -@@ -20,6 +21,8 @@ - # Cached result of the expensive test performed in the function below. - __cached_interp_requires_environment = None + from test.support import make_legacy_pyc, strip_python_stderr, temp_dir + ++ + # Executing the interpreter in a subprocess ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") + def _assert_python(expected_success, *args, **env_vars): + if '__isolated' in env_vars: + isolated = env_vars.pop('__isolated') +@@ -55,6 +58,7 @@ + "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore'))) + return rc, out, err + -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def interpreter_requires_environment(): + def assert_python_ok(*args, **env_vars): + """ + Assert that running the interpreter with `args` and optional environment +@@ -68,6 +72,7 @@ """ - Returns True if our sys.executable interpreter requires environment -@@ -92,6 +95,8 @@ - err = strip_python_stderr(err) - return _PythonRunResult(rc, out, err), cmd_line + return _assert_python(True, *args, **env_vars) + -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def _assert_python(expected_success, *args, **env_vars): - res, cmd_line = run_python_until_end(*args, **env_vars) - if (res.rc and expected_success) or (not res.rc and not expected_success): -@@ -144,6 +149,8 @@ + def assert_python_failure(*args, **env_vars): + """ + Assert that running the interpreter with `args` and optional environment +@@ -78,6 +83,8 @@ """ return _assert_python(False, *args, **env_vars) + -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): """Run a Python subprocess with the given arguments. -diff -Nru orig/Lib/test/test_asyncio/test_events.py modified/Lib/test/test_asyncio/test_events.py ---- orig/Lib/test/test_asyncio/test_events.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_events.py 2016-02-17 10:15:11.000000000 +0800 -@@ -435,6 +435,7 @@ - self._basetest_sock_client_ops(httpd, sock) - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_unix_sock_client_ops(self): - with test_utils.run_test_unix_server() as httpd: - sock = socket.socket(socket.AF_UNIX) -@@ -569,6 +570,7 @@ - self._basetest_create_connection(conn_fut) - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_connection(self): - # Issue #20682: On Mac OS X Tiger, getsockname() returns a - # zero-length address for UNIX socket. -@@ -704,6 +706,7 @@ - - @unittest.skipIf(ssl is None, 'No ssl module') - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_ssl_unix_connection(self): - # Issue #20682: On Mac OS X Tiger, getsockname() returns a - # zero-length address for UNIX socket. -@@ -850,6 +853,7 @@ - return server, path - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_server(self): - proto = MyProto(loop=self.loop) - server, path = self._make_unix_server(lambda: proto) -@@ -878,6 +882,7 @@ - server.close() - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_server_path_socket_error(self): - proto = MyProto(loop=self.loop) - sock = socket.socket() -@@ -947,6 +952,7 @@ +@@ -98,6 +105,7 @@ + stdout=stdout, stderr=stderr, + **kw) - @unittest.skipIf(ssl is None, 'No ssl module') - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_server_ssl(self): - proto = MyProto(loop=self.loop) - server, path = self._make_ssl_unix_server( -@@ -1015,6 +1021,7 @@ ++ + def kill_python(p): + """Run the given Popen process until completion and return stdout.""" + p.stdin.close() +@@ -109,6 +117,7 @@ + subprocess._cleanup() + return data - @unittest.skipIf(ssl is None, 'No ssl module') - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_server_ssl_verify_failed(self): - proto = MyProto(loop=self.loop) - server, path = self._make_ssl_unix_server( -@@ -1082,6 +1089,7 @@ ++ + def make_script(script_dir, script_basename, source, omit_suffix=False): + script_filename = script_basename + if not omit_suffix: +@@ -121,6 +130,7 @@ + importlib.invalidate_caches() + return script_name - @unittest.skipIf(ssl is None, 'No ssl module') - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_create_unix_server_ssl_verified(self): - proto = MyProto(loop=self.loop) - server, path = self._make_ssl_unix_server( -@@ -1661,6 +1669,7 @@ - self.loop.add_signal_handler(signal.SIGTERM, func) ++ + def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None): + zip_filename = zip_basename+os.extsep+'zip' + zip_name = os.path.join(zip_dir, zip_filename) +@@ -142,10 +152,12 @@ + # zip_file.close() + return zip_name, os.path.join(zip_name, name_in_zip) ++ + def make_pkg(pkg_dir, init_source=''): + os.mkdir(pkg_dir) + make_script(pkg_dir, '__init__', init_source) -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - class SubprocessTestsMixin: ++ + def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, + source, depth=1, compiled=False): + unlink = [] +diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.py +--- orig/Lib/test/support/__init__.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/support/__init__.py 2015-05-04 13:16:34.000000000 +0800 +@@ -778,8 +778,8 @@ - def check_terminated(self, returncode): -diff -Nru orig/Lib/test/test_asyncio/test_streams.py modified/Lib/test/test_asyncio/test_streams.py ---- orig/Lib/test/test_asyncio/test_streams.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_streams.py 2016-02-17 09:41:39.000000000 +0800 -@@ -4,6 +4,7 @@ + # TESTFN_UNICODE is a non-ascii filename + TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" +-if sys.platform == 'darwin': +- # In Mac OS X's VFS API file names are, by definition, canonically ++if sys.platform in ('darwin', 'ios'): ++ # In iOS and Mac OS X, VFS API file names are, by definition, canonically + # decomposed Unicode, encoded using UTF-8. See QA1173: + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + import unicodedata +@@ -805,8 +805,8 @@ + 'Unicode filename tests may not be effective' + % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) + TESTFN_UNENCODABLE = None +-# Mac OS X denies unencodable filenames (invalid utf-8) +-elif sys.platform != 'darwin': ++# Mac OS X and iOS deny unencodable filenames (invalid utf-8) ++elif sys.platform not in ('darwin', 'ios'): + try: + # ascii and utf-8 cannot encode the byte 0xff + b'\xff'.decode(TESTFN_ENCODING) +diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py +--- orig/Lib/test/test_base64.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_base64.py 2015-05-04 14:42:53.000000000 +0800 +@@ -5,7 +5,6 @@ import os - import queue - import socket -+import subprocess - import sys - import threading - import unittest -@@ -56,6 +57,7 @@ - self._basetest_open_connection(conn_fut) - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_open_unix_connection(self): - with test_utils.run_test_unix_server() as httpd: - conn_fut = asyncio.open_unix_connection(httpd.address, -@@ -86,6 +88,7 @@ - - @unittest.skipIf(ssl is None, 'No ssl module') - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_open_unix_connection_no_loop_ssl(self): - with test_utils.run_test_unix_server(use_ssl=True) as httpd: - conn_fut = asyncio.open_unix_connection( -@@ -112,6 +115,7 @@ - self._basetest_open_connection_error(conn_fut) - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_open_unix_connection_error(self): - with test_utils.run_test_unix_server() as httpd: - conn_fut = asyncio.open_unix_connection(httpd.address, -@@ -509,6 +513,7 @@ - self.assertEqual(msg, b"hello world!\n") - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets') -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_start_unix_server(self): - - class MyServer: -@@ -577,6 +582,7 @@ - self.assertEqual(msg, b"hello world!\n") - - @unittest.skipIf(sys.platform == 'win32', "Don't have pipes") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def test_read_all_from_pipe_reader(self): - # See asyncio issue 168. This test is derived from the example - # subprocess_attach_read_pipe.py, but we configure the -diff -Nru orig/Lib/test/test_asyncio/test_subprocess.py modified/Lib/test/test_asyncio/test_subprocess.py ---- orig/Lib/test/test_asyncio/test_subprocess.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_subprocess.py 2016-02-17 09:37:30.000000000 +0800 -@@ -1,3 +1,4 @@ -+import os - import signal import sys - import unittest -@@ -75,6 +76,7 @@ - transport.close() - - -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - class SubprocessMixin: - - def test_stdin_stdout(self): -diff -Nru orig/Lib/test/test_asyncio/test_unix_events.py modified/Lib/test/test_asyncio/test_unix_events.py ---- orig/Lib/test/test_asyncio/test_unix_events.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_asyncio/test_unix_events.py 2016-02-17 10:15:42.000000000 +0800 -@@ -230,6 +230,7 @@ - - @unittest.skipUnless(hasattr(socket, 'AF_UNIX'), - 'UNIX Sockets are not supported') -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - class SelectorEventLoopUnixSocketTests(test_utils.TestCase): - - def setUp(self): -@@ -793,6 +794,7 @@ - )) - + import subprocess +-import struct + from array import array -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - class ChildWatcherTestsMixin: - ignore_warnings = mock.patch.object(log.logger, "warning") -diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py ---- orig/Lib/test/test_base64.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_base64.py 2016-02-17 09:41:37.000000000 +0800 -@@ -619,7 +619,7 @@ - def test_ErrorHeritage(self): +@@ -622,7 +621,7 @@ self.assertTrue(issubclass(binascii.Error, ValueError)) + - -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") class TestMain(unittest.TestCase): def tearDown(self): if os.path.exists(support.TESTFN): +@@ -658,7 +657,6 @@ + self.assertEqual(output.rstrip(), b'a\xffb') + + +- + def test_main(): + support.run_unittest(__name__) + diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py ---- orig/Lib/test/test_capi.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_capi.py 2016-02-17 09:41:32.000000000 +0800 -@@ -49,6 +49,7 @@ +--- orig/Lib/test/test_capi.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_capi.py 2015-05-04 14:42:39.000000000 +0800 +@@ -44,6 +44,7 @@ self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") @unittest.skipUnless(threading, 'Threading required for this test.') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_no_FatalError_infinite_loop(self): with support.SuppressCrashReport(): p = subprocess.Popen([sys.executable, "-c", -@@ -520,6 +521,7 @@ +@@ -433,6 +434,7 @@ self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, (), {}, b'', [42]) @@ -9599,92 +11849,68 @@ diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py class TestThreadState(unittest.TestCase): diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py ---- orig/Lib/test/test_cmd_line.py 2015-12-07 09:39:08.000000000 +0800 -+++ modified/Lib/test/test_cmd_line.py 2016-02-17 09:41:27.000000000 +0800 -@@ -57,6 +57,7 @@ +--- orig/Lib/test/test_cmd_line.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_cmd_line.py 2015-05-04 14:43:14.000000000 +0800 +@@ -56,6 +56,7 @@ rc, out, err = assert_python_ok('-vv') self.assertNotIn(b'stack overflow', err) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_xoptions(self): def get_xoptions(*args): - # use subprocess module directly because test.support.script_helper adds -@@ -73,6 +74,7 @@ + # use subprocess module directly because test.script_helper adds +@@ -72,6 +73,7 @@ opts = get_xoptions('-Xa', '-Xb=c,d=e') self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_showrefcount(self): def run_python(*args): # this is similar to assert_python_ok but doesn't strip -@@ -146,6 +148,7 @@ +@@ -145,6 +147,7 @@ # arguments as unicode (using wmain() instead of main()). @unittest.skipIf(sys.platform == 'win32', 'Windows has a native unicode API') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_undecodable_code(self): undecodable = b"\xff" env = os.environ.copy() -@@ -210,6 +213,7 @@ +@@ -209,6 +212,7 @@ ) check_output(text) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_unbuffered_output(self): # Test expected operation of the '-u' switch for stream in ('stdout', 'stderr'): -@@ -269,6 +273,7 @@ +@@ -268,6 +272,7 @@ # for empty and unset PYTHONPATH self.assertEqual(out1, out2) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_displayhook_unencodable(self): for encoding in ('ascii', 'latin-1', 'utf-8'): - # We are testing a PYTHON environment variable here, so we can't -@@ -291,6 +296,7 @@ + env = os.environ.copy() +@@ -286,6 +291,7 @@ escaped = repr(text).encode(encoding, 'backslashreplace') self.assertIn(escaped, data) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def check_input(self, code, expected): with tempfile.NamedTemporaryFile("wb+") as stdin: sep = os.linesep.encode('ASCII') -@@ -363,6 +369,7 @@ +@@ -357,6 +363,7 @@ # Issue #7111: Python should work without standard streams @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def _test_no_stdio(self, streams): code = """if 1: import os, sys -diff -Nru orig/Lib/test/test_compileall.py modified/Lib/test/test_compileall.py ---- orig/Lib/test/test_compileall.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_compileall.py 2016-02-16 11:42:28.000000000 +0800 -@@ -120,7 +120,8 @@ - compileall.compile_dir(self.directory, quiet=True, workers=5) - self.assertTrue(pool_mock.called) - -- def test_compile_workers_non_positive(self): -+ @mock.patch('compileall.ProcessPoolExecutor') -+ def test_compile_workers_non_positive(self, pool_mock): - with self.assertRaisesRegex(ValueError, - "workers must be greater or equal to 0"): - compileall.compile_dir(self.directory, workers=-1) -diff -Nru orig/Lib/test/test_concurrent_futures.py modified/Lib/test/test_concurrent_futures.py ---- orig/Lib/test/test_concurrent_futures.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_concurrent_futures.py 2016-02-17 09:48:08.000000000 +0800 -@@ -91,6 +91,7 @@ - executor_type = futures.ThreadPoolExecutor - - -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - class ProcessPoolMixin(ExecutorMixin): - executor_type = futures.ProcessPoolExecutor - diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py ---- orig/Lib/test/test_doctest.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_doctest.py 2016-02-14 10:29:37.000000000 +0800 -@@ -2707,7 +2707,12 @@ +--- orig/Lib/test/test_doctest.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_doctest.py 2015-04-27 21:32:27.000000000 +0800 +@@ -2657,7 +2657,12 @@ TestResults(failed=1, attempted=1) """ @@ -9698,21 +11924,18 @@ diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py The doctest module can be used to run doctests against an arbitrary file. These tests test this CLI functionality. -diff -Nru orig/Lib/test/test_eintr.py modified/Lib/test/test_eintr.py ---- orig/Lib/test/test_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_eintr.py 2016-02-17 09:41:22.000000000 +0800 -@@ -9,6 +9,7 @@ - - - @unittest.skipUnless(os.name == "posix", "only supported on Unix") -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - class EINTRTests(unittest.TestCase): - - @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py ---- orig/Lib/test/test_faulthandler.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_faulthandler.py 2016-02-17 09:41:16.000000000 +0800 -@@ -24,6 +24,7 @@ +--- orig/Lib/test/test_faulthandler.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_faulthandler.py 2015-05-04 14:45:25.000000000 +0800 +@@ -7,7 +7,6 @@ + import subprocess + import sys + from test import support, script_helper +-from test.script_helper import assert_python_ok + import tempfile + import unittest + from textwrap import dedent +@@ -20,6 +19,7 @@ TIMEOUT = 0.5 @@ -9720,7 +11943,7 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler def expected_traceback(lineno1, lineno2, header, min_count=1): regex = header regex += ' File "", line %s in func\n' % lineno1 -@@ -33,6 +34,7 @@ +@@ -29,6 +29,7 @@ else: return '^' + regex + '$' @@ -9728,41 +11951,41 @@ diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler @contextmanager def temporary_filename(): filename = tempfile.mktemp() -@@ -41,6 +43,7 @@ +@@ -37,6 +38,7 @@ finally: support.unlink(filename) + class FaultHandlerTests(unittest.TestCase): - def get_output(self, code, filename=None, fd=None): + def get_output(self, code, filename=None): """ -@@ -282,6 +285,7 @@ +@@ -247,6 +249,7 @@ finally: sys.stderr = orig_stderr -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_disabled_by_default(self): # By default, the module should be disabled code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -294,6 +298,7 @@ - output = subprocess.check_output(args, env=env) +@@ -255,6 +258,7 @@ + output = subprocess.check_output(args) self.assertEqual(output.rstrip(), b"False") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_sys_xoptions(self): # Test python -X faulthandler code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -306,6 +311,7 @@ - output = subprocess.check_output(args, env=env) +@@ -263,6 +267,7 @@ + output = subprocess.check_output(args) self.assertEqual(output.rstrip(), b"True") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_env_var(self): # empty env var code = "import faulthandler; print(faulthandler.is_enabled())" diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py ---- orig/Lib/test/test_fcntl.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_fcntl.py 2016-02-14 10:29:37.000000000 +0800 +--- orig/Lib/test/test_fcntl.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_fcntl.py 2015-04-27 21:44:57.000000000 +0800 @@ -23,7 +23,7 @@ start_len = "qq" @@ -9789,67 +12012,44 @@ diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py def setUp(self): diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py ---- orig/Lib/test/test_file_eintr.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_file_eintr.py 2016-02-17 09:41:13.000000000 +0800 -@@ -69,6 +69,7 @@ +--- orig/Lib/test/test_file_eintr.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_file_eintr.py 2015-05-04 14:42:38.000000000 +0800 +@@ -68,6 +68,7 @@ self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % (why, stdout.decode(), stderr.decode())) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def _test_reading(self, data_to_write, read_and_verify_code): """Generic buffered read method test harness to validate EINTR behavior. diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py ---- orig/Lib/test/test_gc.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gc.py 2016-02-17 09:41:09.000000000 +0800 -@@ -4,6 +4,7 @@ - temp_dir) - from test.support.script_helper import assert_python_ok, make_script - -+import os - import sys - import time - import gc -@@ -650,6 +651,8 @@ +--- orig/Lib/test/test_gc.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_gc.py 2015-05-04 14:42:37.000000000 +0800 +@@ -633,6 +633,8 @@ del x gc.set_debug(%s) """ + -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def run_command(code): p = subprocess.Popen([sys.executable, "-Wd", "-c", code], stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py ---- orig/Lib/test/test_gdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_gdb.py 2016-02-17 09:37:53.000000000 +0800 -@@ -5,7 +5,6 @@ - - import os - import re --import pprint - import subprocess - import sys - import sysconfig -@@ -21,6 +20,7 @@ - from test import support - from test.support import run_unittest, findfile, python_is_optimized - -+ - def get_gdb_version(): - try: - proc = subprocess.Popen(["gdb", "-nx", "--version"], -@@ -32,6 +32,8 @@ - # This is what "no gdb" looks like. There may, however, be other - # errors that manifest this way too. - raise unittest.SkipTest("Couldn't find gdb on the path") -+ except RuntimeError: -+ raise unittest.SkipTest('Test requires support for subprocesses.') - - # Regex to parse: - # 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7 +--- orig/Lib/test/test_gdb.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_gdb.py 2015-05-03 00:05:45.000000000 +0800 +@@ -28,6 +28,9 @@ + # This is what "no gdb" looks like. There may, however, be other + # errors that manifest this way too. + raise unittest.SkipTest("Couldn't find gdb on the path") ++except AttributeError: ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") ++ + gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version) + gdb_major_version = int(gdb_version_number.group(1)) + gdb_minor_version = int(gdb_version_number.group(2)) diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py ---- orig/Lib/test/test_getpass.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_getpass.py 2016-02-14 10:29:37.000000000 +0800 +--- orig/Lib/test/test_getpass.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_getpass.py 2015-05-02 22:48:44.000000000 +0800 @@ -1,5 +1,6 @@ import getpass import os @@ -9866,8 +12066,8 @@ diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py class GetpassGetuserTest(unittest.TestCase): diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py ---- orig/Lib/test/test_httpservers.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2016-02-17 09:40:47.000000000 +0800 +--- orig/Lib/test/test_httpservers.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_httpservers.py 2015-06-28 20:16:12.000000000 +0800 @@ -16,6 +16,7 @@ import urllib.parse import html @@ -9876,7 +12076,7 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p import tempfile from io import BytesIO -@@ -331,11 +332,11 @@ +@@ -277,11 +278,11 @@ with open(os.path.join(self.tempdir, filename), 'wb') as f: f.write(support.TESTFN_UNDECODABLE) response = self.request(self.tempdir_name + '/') @@ -9889,24 +12089,24 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p + if name != 'test': # Ignore a filename created in setUp(). filename = name break - body = self.check_status_and_reason(response, HTTPStatus.OK) -@@ -438,6 +439,7 @@ + body = self.check_status_and_reason(response, 200) +@@ -362,6 +363,7 @@ @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, "This test can't be run reliably as root (issue #13308).") -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") class CGIHTTPServerTestCase(BaseTestCase): class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): pass -@@ -653,6 +655,7 @@ +@@ -550,6 +552,7 @@ def log_message(self, format, *args): pass + class RejectingSocketlessRequestHandler(SocketlessRequestHandler): def handle_expect_100(self): - self.send_error(HTTPStatus.EXPECTATION_FAILED) -@@ -683,7 +686,7 @@ + self.send_error(417) +@@ -580,7 +583,7 @@ HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK') @@ -9915,18 +12115,18 @@ diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.p self.handler = SocketlessRequestHandler() def send_typical_request(self, message): -@@ -873,6 +876,7 @@ - self.handler.handle() - self.assertRaises(StopIteration, next, close_values) +@@ -731,6 +734,7 @@ + self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n') + self.assertFalse(self.handler.get_called) + class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): """ Test url parsing """ def setUp(self): diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py ---- orig/Lib/test/test_imp.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_imp.py 2016-02-14 10:29:37.000000000 +0800 -@@ -20,7 +20,7 @@ +--- orig/Lib/test/test_imp.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_imp.py 2015-04-30 10:07:30.000000000 +0800 +@@ -19,7 +19,7 @@ """Decorator to skip a test if not running under CPython or lacking imp.load_dynamic().""" meth = support.cpython_only(meth) @@ -9935,10 +12135,10 @@ diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py 'imp.load_dynamic() required')(meth) -diff -Nru orig/Lib/test/test_import/__init__.py modified/Lib/test/test_import/__init__.py ---- orig/Lib/test/test_import/__init__.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_import/__init__.py 2016-02-15 19:36:49.000000000 +0800 -@@ -278,6 +278,7 @@ +diff -Nru orig/Lib/test/test_import.py modified/Lib/test/test_import.py +--- orig/Lib/test/test_import.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_import.py 2015-07-04 22:52:30.000000000 +0800 +@@ -280,6 +280,7 @@ """)) script_helper.assert_python_ok(testfn) @@ -9947,11 +12147,11 @@ diff -Nru orig/Lib/test/test_import/__init__.py modified/Lib/test/test_import/__ # A modification timestamp larger than 2**32 should not be a problem # when importing a module (issue #11235). diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/test/test_importlib/extension/test_finder.py ---- orig/Lib/test/test_importlib/extension/test_finder.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_finder.py 2016-02-14 10:29:41.000000000 +0800 -@@ -3,11 +3,13 @@ +--- orig/Lib/test/test_importlib/extension/test_finder.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_finder.py 2015-04-30 22:06:18.000000000 +0800 +@@ -4,11 +4,13 @@ - machinery = util.import_importlib('importlib.machinery') + machinery = test_util.import_importlib('importlib.machinery') +import sys import unittest @@ -9964,29 +12164,46 @@ diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/tes """Test the finder for extension modules.""" diff -Nru orig/Lib/test/test_importlib/extension/test_loader.py modified/Lib/test/test_importlib/extension/test_loader.py ---- orig/Lib/test/test_importlib/extension/test_loader.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_loader.py 2016-02-15 20:18:13.000000000 +0800 -@@ -11,6 +11,7 @@ - import importlib +--- orig/Lib/test/test_importlib/extension/test_loader.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/extension/test_loader.py 2015-04-30 21:52:11.000000000 +0800 +@@ -10,6 +10,7 @@ + import unittest +@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') class LoaderTests(abc.LoaderTests): """Test load_module() for extension modules.""" -@@ -82,6 +83,8 @@ - Source_LoaderTests - ) = util.test_both(LoaderTests, machinery=machinery) +diff -Nru orig/Lib/test/test_importlib/source/test_case_sensitivity.py modified/Lib/test/test_importlib/source/test_case_sensitivity.py +--- orig/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-02-03 19:49:03.000000000 +0800 ++++ modified/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-05-02 19:23:40.000000000 +0800 +@@ -63,18 +63,22 @@ + self.assertIsNotNone(insensitive) + self.assertIn(self.name, insensitive.get_filename(self.name)) + -+@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') - class MultiPhaseExtensionModuleTests(abc.LoaderTests): - """Test loading extension modules with multi-phase initialization (PEP 489) - """ + class CaseSensitivityTestPEP302(CaseSensitivityTest): + def find(self, finder): + return finder.find_module(self.name) + ++ + Frozen_CaseSensitivityTestPEP302, Source_CaseSensitivityTestPEP302 = util.test_both( + CaseSensitivityTestPEP302, importlib=importlib, machinery=machinery) + ++ + class CaseSensitivityTestPEP451(CaseSensitivityTest): + def find(self, finder): + found = finder.find_spec(self.name) + return found.loader if found is not None else found + ++ + Frozen_CaseSensitivityTestPEP451, Source_CaseSensitivityTestPEP451 = util.test_both( + CaseSensitivityTestPEP451, importlib=importlib, machinery=machinery) + diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py ---- orig/Lib/test/test_io.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_io.py 2016-02-14 10:29:41.000000000 +0800 -@@ -416,7 +416,7 @@ +--- orig/Lib/test/test_io.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_io.py 2015-05-04 10:09:23.000000000 +0800 +@@ -420,7 +420,7 @@ # On Windows and Mac OSX this test comsumes large resources; It takes # a long time to build the >2GB file and takes >2GB of disk space # therefore the resource must be enabled to run this test. @@ -9995,48 +12212,48 @@ diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py support.requires( 'largefile', 'test requires %s bytes and a long time to run' % self.LARGE) -@@ -715,6 +715,7 @@ +@@ -688,6 +688,7 @@ support.gc_collect() - self.assertIsNone(wr(), wr) + self.assertTrue(wr() is None, wr) + class PyIOTest(IOTest): pass diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py ---- orig/Lib/test/test_json/test_tool.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_json/test_tool.py 2016-02-17 09:40:44.000000000 +0800 -@@ -7,6 +7,7 @@ - from test.support.script_helper import assert_python_ok - +--- orig/Lib/test/test_json/test_tool.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_json/test_tool.py 2015-05-04 14:42:37.000000000 +0800 +@@ -6,6 +6,7 @@ + from test import support + from test.script_helper import assert_python_ok + class TestTool(unittest.TestCase): data = """ -@@ -60,6 +61,7 @@ +@@ -37,6 +38,7 @@ ] """) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_stdin_stdout(self): with subprocess.Popen( (sys.executable, '-m', 'json.tool'), diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py ---- orig/Lib/test/test_keyword.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_keyword.py 2016-02-17 09:40:38.000000000 +0800 +--- orig/Lib/test/test_keyword.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_keyword.py 2015-05-04 14:42:36.000000000 +0800 @@ -46,6 +46,7 @@ fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def _generate_keywords(self, grammar_file, target_keyword_py_file): proc = subprocess.Popen([sys.executable, KEYWORD_FILE, diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py ---- orig/Lib/test/test_logging.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_logging.py 2016-02-14 10:29:41.000000000 +0800 -@@ -1452,9 +1452,20 @@ +--- orig/Lib/test/test_logging.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_logging.py 2015-07-04 22:52:40.000000000 +0800 +@@ -1460,9 +1460,20 @@ # just need a name - file can't be present, or we'll get an # 'address already in use' error. os.remove(fn) @@ -10057,7 +12274,7 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py @unittest.skipUnless(threading, 'Threading required for this test.') class UnixSocketHandlerTest(SocketHandlerTest): -@@ -1527,6 +1538,7 @@ +@@ -1535,6 +1546,7 @@ self.assertEqual(self.log_output, "spam\neggs\n") @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") @@ -10065,7 +12282,7 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py @unittest.skipUnless(threading, 'Threading required for this test.') class UnixDatagramHandlerTest(DatagramHandlerTest): -@@ -1602,6 +1614,7 @@ +@@ -1610,6 +1622,7 @@ self.assertEqual(self.log_output, b'<11>h\xc3\xa4m-sp\xc3\xa4m') @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") @@ -10074,8 +12291,8 @@ diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py class UnixSysLogHandlerTest(SysLogHandlerTest): diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py ---- orig/Lib/test/test_mailcap.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_mailcap.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_mailcap.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_mailcap.py 2015-05-04 14:35:55.000000000 +0800 @@ -1,6 +1,7 @@ import mailcap import os @@ -10094,11 +12311,11 @@ diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py # findmatch() will automatically check any "test" conditions and skip # the entry if the check fails. diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py ---- orig/Lib/test/test_marshal.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_marshal.py 2016-02-14 10:29:41.000000000 +0800 -@@ -195,7 +195,10 @@ +--- orig/Lib/test/test_marshal.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_marshal.py 2015-05-04 10:29:33.000000000 +0800 +@@ -190,7 +190,10 @@ if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'): - MAX_MARSHAL_STACK_DEPTH = 1000 + MAX_MARSHAL_STACK_DEPTH = 1500 else: - MAX_MARSHAL_STACK_DEPTH = 2000 + if sys.platform == 'ios': @@ -10109,8 +12326,8 @@ diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py last.append([0]) last = last[-1] diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py ---- orig/Lib/test/test_mmap.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_mmap.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_mmap.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_mmap.py 2015-05-04 13:15:53.000000000 +0800 @@ -229,7 +229,7 @@ with open(TESTFN, "r+b") as f: self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4) @@ -10120,7 +12337,7 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py # Try incompatible flags, prot and access parameters. with open(TESTFN, "r+b") as f: self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, -@@ -722,7 +722,7 @@ +@@ -718,7 +718,7 @@ unlink(TESTFN) def _make_test_file(self, num_zeroes, tail): @@ -10129,173 +12346,103 @@ diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py requires('largefile', 'test requires %s bytes and a long time to run' % str(0x180000000)) f = open(TESTFN, 'w+b') -diff -Nru orig/Lib/test/test_multiprocessing_fork.py modified/Lib/test/test_multiprocessing_fork.py ---- orig/Lib/test/test_multiprocessing_fork.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_fork.py 2016-02-17 09:38:08.000000000 +0800 -@@ -1,7 +1,13 @@ -+import os - import unittest -+ -+if not os.allows_subprocesses: -+ raise unittest.SkipTest('Test requires support for subprocesses.') -+ - import test._test_multiprocessing - - test._test_multiprocessing.install_tests_in_module_dict(globals(), 'fork') - -+ - if __name__ == '__main__': - unittest.main() -diff -Nru orig/Lib/test/test_multiprocessing_forkserver.py modified/Lib/test/test_multiprocessing_forkserver.py ---- orig/Lib/test/test_multiprocessing_forkserver.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_forkserver.py 2016-02-17 09:37:46.000000000 +0800 -@@ -1,7 +1,13 @@ -+import os - import unittest -+ -+if not os.allows_subprocesses: -+ raise unittest.SkipTest('Test requires support for subprocesses.') -+ - import test._test_multiprocessing - - test._test_multiprocessing.install_tests_in_module_dict(globals(), 'forkserver') - -+ - if __name__ == '__main__': - unittest.main() -diff -Nru orig/Lib/test/test_multiprocessing_spawn.py modified/Lib/test/test_multiprocessing_spawn.py ---- orig/Lib/test/test_multiprocessing_spawn.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_multiprocessing_spawn.py 2016-02-17 09:37:41.000000000 +0800 -@@ -1,7 +1,13 @@ -+import os - import unittest -+ -+if not os.allows_subprocesses: -+ raise unittest.SkipTest('Test requires support for subprocesses.') -+ - import test._test_multiprocessing - - test._test_multiprocessing.install_tests_in_module_dict(globals(), 'spawn') - -+ - if __name__ == '__main__': - unittest.main() diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py ---- orig/Lib/test/test_os.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_os.py 2016-02-17 09:51:58.000000000 +0800 -@@ -657,6 +657,7 @@ +--- orig/Lib/test/test_os.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_os.py 2015-05-04 14:42:36.000000000 +0800 +@@ -555,6 +555,7 @@ # Bug 1110478 @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_update2(self): os.environ.clear() os.environ.update(HELLO="World") -@@ -665,6 +666,7 @@ +@@ -563,6 +564,7 @@ self.assertEqual(value, "World") @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_os_popen_iter(self): with os.popen( "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: -@@ -1343,6 +1345,8 @@ +@@ -1147,6 +1149,7 @@ os.execve = orig_execve os.defpath = orig_defpath +@unittest.skipUnless(hasattr(os, 'execv'), "os module doesn't provide execvpe()") -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') class ExecTests(unittest.TestCase): @unittest.skipIf(USING_LINUXTHREADS, "avoid triggering a linuxthreads bug: see issue #4970") -@@ -1604,6 +1608,7 @@ +@@ -1398,6 +1401,7 @@ self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_setreuid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -1612,6 +1617,7 @@ +@@ -1406,6 +1410,7 @@ 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_setregid(self): if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(OSError, os.setregid, 0, 0) -@@ -1619,6 +1625,7 @@ +@@ -1413,6 +1418,7 @@ self.assertRaises(OverflowError, os.setregid, 0, 1<<32) @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_setregid_neg1(self): # Needs to accept -1. We run this in a subprocess to avoid # altering the test runner's process state (issue8045). -@@ -2075,6 +2082,7 @@ +@@ -1838,6 +1844,7 @@ class PidTests(unittest.TestCase): @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_getppid(self): p = subprocess.Popen([sys.executable, '-c', 'import os; print(os.getppid())'], -@@ -2083,6 +2091,9 @@ - # We are the parent of our subprocess - self.assertEqual(int(stdout), os.getpid()) - -+ @unittest.skipUnless(hasattr(os, 'spawnv'), "test needs os.spawnv") -+ @unittest.skipUnless(hasattr(os, 'waitpid'), "test needs os.waitpid") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def test_waitpid(self): - args = [sys.executable, '-c', 'pass'] - pid = os.spawnv(os.P_NOWAIT, args[0], args) -@@ -2548,6 +2559,7 @@ +@@ -2295,6 +2302,7 @@ self.assertGreaterEqual(size.columns, 0) self.assertGreaterEqual(size.lines, 0) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_stty_match(self): """Check if stty returns the same results diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py ---- orig/Lib/test/test_pdb.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pdb.py 2016-02-17 09:40:08.000000000 +0800 -@@ -1,6 +1,7 @@ - # A test suite for pdb; not very comprehensive at the moment. - - import doctest -+import os - import pdb - import sys - import types -@@ -914,6 +915,7 @@ +--- orig/Lib/test/test_pdb.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pdb.py 2015-05-04 14:42:35.000000000 +0800 +@@ -910,6 +910,7 @@ class PdbTestCase(unittest.TestCase): -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def run_pdb(self, script, commands): """Run 'script' lines with pdb and the pdb 'commands'.""" filename = 'main.py' -@@ -962,6 +964,7 @@ +@@ -957,6 +958,7 @@ ('bar', 4), ) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_issue7964(self): # open the file as binary so we can force \r\n newline with open(support.TESTFN, 'wb') as f: -@@ -1013,6 +1016,7 @@ +@@ -1008,6 +1010,7 @@ any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 'Fail to step into the caller after a return') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_issue13210(self): # invoking "continue" on a non-main thread triggered an exception # inside signal.signal diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py ---- orig/Lib/test/test_pep277.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pep277.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_pep277.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pep277.py 2015-05-04 13:16:06.000000000 +0800 @@ -27,7 +27,7 @@ # these normal forms. For example, HFS Plus uses a variant of Normal Form D # in which U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through @@ -10333,8 +12480,8 @@ diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py sf0 = set(self.files) with warnings.catch_warnings(): diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py ---- orig/Lib/test/test_pipes.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pipes.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_pipes.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pipes.py 2015-05-02 21:03:07.000000000 +0800 @@ -1,17 +1,21 @@ import pipes import os @@ -10358,8 +12505,8 @@ diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py def tearDown(self): for f in (TESTFN, TESTFN2): diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py ---- orig/Lib/test/test_platform.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_platform.py 2016-02-17 09:39:54.000000000 +0800 +--- orig/Lib/test/test_platform.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_platform.py 2015-05-04 14:43:41.000000000 +0800 @@ -9,11 +9,13 @@ from test import support @@ -10370,7 +12517,7 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py res = platform.architecture() @support.skip_unless_symlink -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_architecture_via_symlink(self): # issue3762 # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. @@ -10391,17 +12538,17 @@ diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") def test_mac_ver_with_fork(self): # Issue7895: platform.mac_ver() crashes when using fork without exec -@@ -272,6 +273,7 @@ +@@ -265,6 +266,7 @@ ): self.assertEqual(platform._parse_release_file(input), output) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_popen(self): mswindows = (sys.platform == "win32") diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py ---- orig/Lib/test/test_poll.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_poll.py 2016-02-17 09:39:49.000000000 +0800 +--- orig/Lib/test/test_poll.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_poll.py 2015-05-04 14:43:49.000000000 +0800 @@ -25,6 +25,7 @@ match.append(fd) return match @@ -10414,33 +12561,34 @@ diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py # Another test case for poll(). This is copied from the test case for # select(), modified to use poll() instead. -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_poll2(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py ---- orig/Lib/test/test_popen.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_popen.py 2016-02-17 09:39:36.000000000 +0800 -@@ -5,7 +5,8 @@ +--- orig/Lib/test/test_popen.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_popen.py 2015-05-04 14:42:34.000000000 +0800 +@@ -5,7 +5,9 @@ import unittest from test import support -import os, sys +import os ++import subprocess +import sys # Test that command-lines get down as we expect. # To do this we execute: -@@ -16,6 +17,8 @@ +@@ -16,6 +18,8 @@ if ' ' in python: python = '"' + python + '"' # quote embedded space for cmdline + -+@unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") class PopenTest(unittest.TestCase): def _do_test_commandline(self, cmdline, expected): -@@ -23,7 +26,7 @@ +@@ -23,7 +27,7 @@ cmd = cmd % (python, cmdline) with os.popen(cmd) as p: data = p.read() @@ -10449,18 +12597,28 @@ diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py self.assertEqual(got, expected) def test_popen(self): +@@ -57,6 +61,7 @@ + with os.popen("echo hello") as f: + self.assertEqual(list(f), ["hello\n"]) + ++ + def test_main(): + support.run_unittest(PopenTest) + diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py ---- orig/Lib/test/test_posix.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_posix.py 2016-02-17 11:00:48.000000000 +0800 -@@ -11,7 +11,6 @@ - import os +--- orig/Lib/test/test_posix.py 2015-05-02 23:43:12.000000000 +0800 ++++ modified/Lib/test/test_posix.py 2015-05-04 14:42:33.000000000 +0800 +@@ -12,8 +12,8 @@ + import fcntl import platform import pwd -import shutil import stat ++import subprocess import tempfile import unittest -@@ -20,6 +19,7 @@ + import warnings +@@ -21,6 +21,7 @@ _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(), support.TESTFN + '-dummy-symlink') @@ -10468,164 +12626,70 @@ diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py class PosixTester(unittest.TestCase): def setUp(self): -@@ -40,17 +40,24 @@ - def testNoArgFunctions(self): - # test posix functions which take no arguments and have - # no side-effects which we need to cleanup (e.g., fork, wait, abort) -- NO_ARG_FUNCTIONS = [ "ctermid", "getcwd", "getcwdb", "uname", -- "times", "getloadavg", -- "getegid", "geteuid", "getgid", "getgroups", -- "getpid", "getpgrp", "getppid", "getuid", "sync", -- ] -+ NO_ARG_FUNCTIONS = [ -+ "ctermid", "getcwd", "getcwdb", "uname", -+ "times", "getloadavg", -+ "getegid", "geteuid", "getgid", -+ "getpid", "getpgrp", "getppid", "getuid", "sync", -+ ] -+ -+ if sys.platform != 'ios': -+ NO_ARG_FUNCTIONS.append("getgroups") - - for name in NO_ARG_FUNCTIONS: - posix_func = getattr(posix, name, None) - if posix_func is not None: -- posix_func() -- self.assertRaises(TypeError, posix_func, 1) -+ try: -+ posix_func() -+ self.assertRaises(TypeError, posix_func, 1) -+ except Exception as e: -+ self.fail('Problem invoking %s: %s' % (name, e)) - - @unittest.skipUnless(hasattr(posix, 'getresuid'), - 'test needs posix.getresuid()') -@@ -529,9 +536,10 @@ +@@ -492,9 +493,10 @@ check_stat(uid, gid) self.assertRaises(OSError, chown_func, first_param, 0, -1) check_stat(uid, gid) - if 0 not in os.getgroups(): - self.assertRaises(OSError, chown_func, first_param, -1, 0) - check_stat(uid, gid) -+ if hasattr(os, 'getgroups') and sys.platform != 'ios': ++ if hasattr(os, 'getgroups'): + if 0 not in os.getgroups(): + self.assertRaises(OSError, chown_func, first_param, -1, 0) + check_stat(uid, gid) # test illegal types for t in str, float: self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) -@@ -791,8 +799,8 @@ +@@ -754,8 +756,8 @@ group = pwd.getpwuid(os.getuid())[3] self.assertIn(group, posix.getgrouplist(user, group)) - @unittest.skipUnless(hasattr(os, 'getegid'), "test needs os.getegid()") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_getgroups(self): with os.popen('id -G 2>/dev/null') as idg: groups = idg.read().strip() -@@ -1040,7 +1048,7 @@ - self.assertIsInstance(hi, int) - self.assertGreaterEqual(hi, lo) - # OSX evidently just returns 15 without checking the argument. -- if sys.platform != "darwin": -+ if sys.platform not in("darwin", "ios"): - self.assertRaises(OSError, posix.sched_get_priority_min, -23) - self.assertRaises(OSError, posix.sched_get_priority_max, -23) - -@@ -1212,6 +1220,7 @@ - open(fn, 'wb').close() - self.assertRaises(ValueError, os.stat, fn_with_NUL) - -+ - class PosixGroupsTester(unittest.TestCase): - - def setUp(self): diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py ---- orig/Lib/test/test_pty.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_pty.py 2016-02-17 09:52:41.000000000 +0800 -@@ -111,7 +111,7 @@ +--- orig/Lib/test/test_pty.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_pty.py 2015-05-04 14:42:26.000000000 +0800 +@@ -110,7 +110,7 @@ os.close(slave_fd) os.close(master_fd) - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") def test_fork(self): debug("calling pty.fork()") pid, master_fd = pty.fork() diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py ---- orig/Lib/test/test_quopri.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_quopri.py 2016-02-17 09:39:28.000000000 +0800 -@@ -180,6 +180,7 @@ +--- orig/Lib/test/test_quopri.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_quopri.py 2015-05-04 14:42:33.000000000 +0800 +@@ -174,6 +174,7 @@ for p, e in self.HSTRINGS: self.assertEqual(quopri.decodestring(e, header=True), p) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_scriptencode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri"], -@@ -196,6 +197,7 @@ +@@ -190,6 +191,7 @@ self.assertEqual(cout[i], e[i]) self.assertEqual(cout, e) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_scriptdecode(self): (p, e) = self.STRINGS[-1] process = subprocess.Popen([sys.executable, "-mquopri", "-d"], -diff -Nru orig/Lib/test/test_script_helper.py modified/Lib/test/test_script_helper.py ---- orig/Lib/test/test_script_helper.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_script_helper.py 2016-02-17 09:38:53.000000000 +0800 -@@ -1,5 +1,6 @@ - """Unittests for test.support.script_helper. Who tests the test helper?""" - -+import os - import subprocess - import sys - from test.support import script_helper -@@ -34,6 +35,7 @@ - self.assertIn('import sys; sys.exit(0)', error_msg, - msg='unexpected command line.') - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - @mock.patch('subprocess.Popen') - def test_assert_python_isolated_when_env_not_required(self, mock_popen): - with mock.patch.object(script_helper, -@@ -52,6 +54,7 @@ - self.assertIn('-I', popen_command) - self.assertNotIn('-E', popen_command) # -I overrides this - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - @mock.patch('subprocess.Popen') - def test_assert_python_not_isolated_when_env_is_required(self, mock_popen): - """Ensure that -I is not passed when the environment is required.""" -@@ -81,6 +84,7 @@ - # Reset the private cached state. - script_helper.__dict__['__cached_interp_requires_environment'] = None - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - @mock.patch('subprocess.check_call') - def test_interpreter_requires_environment_true(self, mock_check_call): - mock_check_call.side_effect = subprocess.CalledProcessError('', '') -@@ -88,6 +92,7 @@ - self.assertTrue(script_helper.interpreter_requires_environment()) - self.assertEqual(1, mock_check_call.call_count) - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - @mock.patch('subprocess.check_call') - def test_interpreter_requires_environment_false(self, mock_check_call): - # The mocked subprocess.check_call fakes a no-error process. -@@ -95,6 +100,7 @@ - self.assertFalse(script_helper.interpreter_requires_environment()) - self.assertEqual(1, mock_check_call.call_count) - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - @mock.patch('subprocess.check_call') - def test_interpreter_requires_environment_details(self, mock_check_call): - script_helper.interpreter_requires_environment() diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py ---- orig/Lib/test/test_select.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_select.py 2016-02-17 09:38:45.000000000 +0800 -@@ -5,7 +5,8 @@ +--- orig/Lib/test/test_select.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_select.py 2015-05-04 14:42:32.000000000 +0800 +@@ -1,11 +1,13 @@ + import errno + import os + import select ++import subprocess + import sys import unittest from test import support @@ -10635,26 +12699,26 @@ diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py "can't easily test on this system") class SelectTestCase(unittest.TestCase): -@@ -44,6 +45,7 @@ +@@ -44,6 +46,7 @@ self.assertIsNot(r, x) self.assertIsNot(w, x) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_select(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' p = os.popen(cmd, 'r') diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py ---- orig/Lib/test/test_shutil.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2016-02-17 09:38:37.000000000 +0800 -@@ -51,6 +51,7 @@ +--- orig/Lib/test/test_shutil.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_shutil.py 2015-07-04 22:52:47.000000000 +0800 +@@ -48,6 +48,7 @@ except ImportError: - ZIP_SUPPORT = shutil.which('zip') + ZIP_SUPPORT = find_executable('zip') + def _fake_rename(*args, **kwargs): # Pretend the destination path is on a different filesystem. raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") -@@ -1373,6 +1374,7 @@ +@@ -1318,6 +1319,7 @@ self.assertEqual(['foo'], os.listdir(rv)) @@ -10662,28 +12726,28 @@ diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py class TestWhich(unittest.TestCase): def setUp(self): -@@ -1814,6 +1816,7 @@ +@@ -1741,6 +1743,7 @@ self.assertEqual(size.lines, 888) @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_stty_match(self): """Check if stty returns the same results ignoring env diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py ---- orig/Lib/test/test_signal.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_signal.py 2016-02-17 09:38:33.000000000 +0800 -@@ -158,6 +158,7 @@ +--- orig/Lib/test/test_signal.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_signal.py 2015-05-04 14:42:31.000000000 +0800 +@@ -135,6 +135,7 @@ @unittest.skipIf(sys.platform=='freebsd6', 'inter process signals not reliable (do not mix well with threading) ' 'on freebsd6') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_main(self): # This function spawns a child process to insulate the main # test-running process from all the signals. It then diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py ---- orig/Lib/test/test_site.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_site.py 2016-02-17 09:38:29.000000000 +0800 +--- orig/Lib/test/test_site.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_site.py 2015-07-04 21:21:33.000000000 +0800 @@ -31,6 +31,7 @@ os.makedirs(site.USER_SITE) site.addsitedir(site.USER_SITE) @@ -10696,7 +12760,7 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " "user-site (site.ENABLE_USER_SITE)") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_s_option(self): usersite = site.USER_SITE self.assertIn(usersite, sys.path) @@ -10709,26 +12773,26 @@ diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py # OS X framework builds site.PREFIXES = ['Python.framework'] dirs = site.getsitepackages() -@@ -320,6 +322,7 @@ +@@ -322,6 +324,7 @@ """Restore sys.path""" sys.path[:] = self.sys_path -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_abs_paths(self): # Make sure all imported modules have their __file__ and __cached__ # attributes as absolute paths. Arranging to put the Lib directory on -@@ -435,6 +438,7 @@ +@@ -432,6 +435,7 @@ class StartupImportTests(unittest.TestCase): -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_startup_imports(self): # This tests checks which modules are loaded by Python when it # initially starts upon startup. diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py ---- orig/Lib/test/test_socket.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_socket.py 2016-02-15 19:36:34.000000000 +0800 -@@ -532,6 +532,7 @@ +--- orig/Lib/test/test_socket.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_socket.py 2015-07-04 22:53:12.000000000 +0800 +@@ -530,6 +530,7 @@ sock.bind(path) self.addCleanup(support.unlink, path) @@ -10736,7 +12800,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py class UnixStreamBase(UnixSocketTestBase): """Base class for Unix-domain SOCK_STREAM tests.""" -@@ -783,8 +784,7 @@ +@@ -774,8 +775,7 @@ self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names))) def test_host_resolution(self): @@ -10746,7 +12810,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py self.assertRaises(OSError, socket.gethostbyname, addr) self.assertRaises(OSError, socket.gethostbyaddr, addr) -@@ -796,6 +796,12 @@ +@@ -787,6 +787,12 @@ for host in [support.HOST]: self.assertIn(host, socket.gethostbyaddr(host)[2]) @@ -10759,52 +12823,52 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()") @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()") def test_sethostname(self): -@@ -896,7 +902,7 @@ - # I've ordered this by protocols that have both a tcp and udp - # protocol, at least for modern Linuxes. - if (sys.platform.startswith(('freebsd', 'netbsd', 'gnukfreebsd')) -- or sys.platform in ('linux', 'darwin')): -+ or sys.platform in ('linux', 'darwin', 'ios')): - # avoid the 'echo' service on this platform, as there is an - # assumption breaking non-standard port/protocol entry - services = ('daytime', 'qotd', 'domain') -@@ -2748,7 +2754,7 @@ +@@ -1286,7 +1292,7 @@ + # these should all be successful + socket.gethostbyname('испытание.python.org') + socket.gethostbyname_ex('испытание.python.org') +- socket.getaddrinfo('испытание.python.org',0,socket.AF_UNSPEC,socket.SOCK_STREAM) ++ socket.getaddrinfo('испытание.python.org', 0, socket.AF_UNSPEC, socket.SOCK_STREAM) + # this may not work if the forward lookup choses the IPv6 address, as that doesn't + # have a reverse entry yet + # socket.gethostbyaddr('испытание.python.org') +@@ -2727,7 +2733,7 @@ def _testFDPassCMSG_LEN(self): self.createAndSendFDs(1) - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") @requireAttrs(socket, "CMSG_SPACE") def testFDPassSeparate(self): -@@ -2759,7 +2765,7 @@ + # Pass two FDs in two separate arrays. Arrays may be combined +@@ -2737,7 +2743,7 @@ maxcmsgs=2) @testFDPassSeparate.client_skip - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") def _testFDPassSeparate(self): fd0, fd1 = self.newFDs(2) -@@ -2772,7 +2778,7 @@ + self.assertEqual( +@@ -2749,7 +2755,7 @@ array.array("i", [fd1]))]), len(MSG)) - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") @requireAttrs(socket, "CMSG_SPACE") def testFDPassSeparateMinSpace(self): -@@ -2785,7 +2791,7 @@ + # Pass two FDs in two separate arrays, receiving them into the +@@ -2761,7 +2767,7 @@ maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC) @testFDPassSeparateMinSpace.client_skip - @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") + @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @unittest.skipIf(sys.platform.startswith("aix"), "skipping, see issue #22397") def _testFDPassSeparateMinSpace(self): fd0, fd1 = self.newFDs(2) -@@ -3557,12 +3563,14 @@ + self.assertEqual( +@@ -3532,12 +3538,14 @@ @requireAttrs(socket.socket, "sendmsg") @requireAttrs(socket, "AF_UNIX") @@ -10819,7 +12883,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(thread, 'Threading required for this test.') class RecvmsgUnixStreamTest(RecvmsgTests, RecvmsgGenericStreamTests, SendrecvmsgUnixStreamTestBase): -@@ -3570,6 +3578,7 @@ +@@ -3545,6 +3553,7 @@ @requireAttrs(socket.socket, "recvmsg_into") @requireAttrs(socket, "AF_UNIX") @@ -10827,7 +12891,7 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py @unittest.skipUnless(thread, 'Threading required for this test.') class RecvmsgIntoUnixStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests, SendrecvmsgUnixStreamTestBase): -@@ -3577,12 +3586,14 @@ +@@ -3552,12 +3561,14 @@ @requireAttrs(socket.socket, "sendmsg", "recvmsg") @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") @@ -10843,9 +12907,9 @@ diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py class RecvmsgIntoSCMRightsStreamTest(RecvmsgIntoMixin, SCMRightsTest, SendrecvmsgUnixStreamTestBase): diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver.py ---- orig/Lib/test/test_socketserver.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_socketserver.py 2016-02-17 11:02:33.000000000 +0800 -@@ -7,7 +7,7 @@ +--- orig/Lib/test/test_socketserver.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_socketserver.py 2015-07-04 22:53:26.000000000 +0800 +@@ -8,7 +8,7 @@ import select import signal import socket @@ -10854,12 +12918,8 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver import errno import tempfile import unittest -@@ -28,9 +28,10 @@ - HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX") - requires_unix_sockets = unittest.skipUnless(HAVE_UNIX_SOCKETS, - 'requires Unix sockets') --HAVE_FORKING = hasattr(os, "fork") -+HAVE_FORKING = hasattr(os, "fork") and os.allows_subprocesses +@@ -32,6 +32,7 @@ + HAVE_FORKING = hasattr(os, "fork") requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking') + @@ -10882,8 +12942,8 @@ diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver self.run_server(socketserver.ThreadingUnixStreamServer, socketserver.StreamRequestHandler, diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py ---- orig/Lib/test/test_source_encoding.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_source_encoding.py 2016-02-17 09:38:26.000000000 +0800 +--- orig/Lib/test/test_source_encoding.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_source_encoding.py 2015-05-04 14:44:09.000000000 +0800 @@ -7,6 +7,7 @@ import sys import subprocess @@ -10896,26 +12956,26 @@ diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_en # two bytes in common with the UTF-8 BOM self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_20731(self): sub = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py ---- orig/Lib/test/test_subprocess.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_subprocess.py 2016-02-17 09:36:48.000000000 +0800 +--- orig/Lib/test/test_subprocess.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_subprocess.py 2015-05-02 21:04:07.000000000 +0800 @@ -26,6 +26,9 @@ mswindows = (sys.platform == "win32") -+if not os.allows_subprocesses: -+ raise unittest.SkipTest('Test requires support for subprocesses.') ++if not hasattr(subprocess, 'Popen'): ++ raise unittest.SkipTest("subprocess module doesn't provide Popen()") + # # Depends on the following external programs: Python # diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py ---- orig/Lib/test/test_sundry.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sundry.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_sundry.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sundry.py 2015-04-30 10:12:55.000000000 +0800 @@ -20,7 +20,8 @@ import distutils.bcppcompiler @@ -10924,11 +12984,11 @@ diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py + if sys.platform.startswith('win'): + import distutils.cygwinccompiler import distutils.filelist - import distutils.text_file - import distutils.unixccompiler + if sys.platform.startswith('win'): + import distutils.msvccompiler diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py ---- orig/Lib/test/test_sys.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sys.py 2016-02-17 09:38:18.000000000 +0800 +--- orig/Lib/test/test_sys.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sys.py 2015-05-04 14:44:19.000000000 +0800 @@ -20,6 +20,7 @@ except ImportError: threading = None @@ -10937,49 +12997,41 @@ diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py class SysModuleTest(unittest.TestCase): def setUp(self): -@@ -255,6 +256,7 @@ +@@ -216,6 +217,7 @@ finally: sys.setrecursionlimit(oldlimit) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_recursionlimit_fatalerror(self): # A fatal error occurs if a second recursion limit is hit when recovering # from a first one. -@@ -582,6 +584,7 @@ +@@ -542,6 +544,7 @@ def test_clear_type_cache(self): sys._clear_type_cache() -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_ioencoding(self): env = dict(os.environ) -@@ -627,6 +630,7 @@ +@@ -587,6 +590,7 @@ @unittest.skipUnless(test.support.FS_NONASCII, 'requires OS support of non-ASCII encodings') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_ioencoding_nonascii(self): env = dict(os.environ) -@@ -639,6 +643,7 @@ +@@ -599,6 +603,7 @@ @unittest.skipIf(sys.base_prefix != sys.prefix, 'Test is not venv-compatible') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_executable(self): # sys.executable should be absolute self.assertEqual(os.path.abspath(sys.executable), sys.executable) -@@ -675,6 +680,7 @@ - expected = None - self.check_fsencoding(fs_encoding, expected) - -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def c_locale_get_error_handler(self, isolated=False, encoding=None): - # Force the POSIX locale - env = os.environ.copy() diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py ---- orig/Lib/test/test_sysconfig.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2016-02-17 09:42:01.000000000 +0800 +--- orig/Lib/test/test_sysconfig.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_sysconfig.py 2015-07-04 22:53:33.000000000 +0800 @@ -15,6 +15,7 @@ get_scheme_names, get_config_var, _main) import _osx_support @@ -10998,25 +13050,13 @@ diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py self.assertEqual(get_scheme_names(), wanted) @skip_unless_symlink -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_symlink(self): # On Windows, the EXE needs to know where pythonXY.dll is at so we have # to add the directory to the path. -diff -Nru orig/Lib/test/test_tempfile.py modified/Lib/test/test_tempfile.py ---- orig/Lib/test/test_tempfile.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_tempfile.py 2016-02-17 11:43:31.000000000 +0800 -@@ -23,7 +23,7 @@ - has_stat = 0 - - has_textmode = (tempfile._text_openflags != tempfile._bin_openflags) --has_spawnl = hasattr(os, 'spawnl') -+has_spawnl = hasattr(os, 'spawnl') and os.allows_subprocesses - - # TEST_FILES may need to be tweaked for systems depending on the maximum - # number of files that can be opened at one time (see ulimit -n) diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py ---- orig/Lib/test/test_thread.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_thread.py 2016-02-17 09:53:21.000000000 +0800 +--- orig/Lib/test/test_thread.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_thread.py 2015-05-04 14:44:49.000000000 +0800 @@ -14,12 +14,14 @@ _print_mutex = thread.allocate_lock() @@ -11036,14 +13076,14 @@ diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py @unittest.skipIf(sys.platform.startswith('win'), "This test is only appropriate for POSIX-like systems.") -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") @support.reap_threads def test_forkinthread(self): def thread1(): diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py ---- orig/Lib/test/test_threading.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_threading.py 2016-02-14 10:29:41.000000000 +0800 -@@ -824,6 +824,7 @@ +--- orig/Lib/test/test_threading.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_threading.py 2015-05-02 16:19:47.000000000 +0800 +@@ -825,6 +825,7 @@ class SubinterpThreadingTests(BaseTestCase): @@ -11051,7 +13091,7 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py def test_threads_join(self): # Non-daemon threads should be joined at subinterpreter shutdown # (issue #18808) -@@ -847,6 +848,7 @@ +@@ -848,6 +849,7 @@ # The thread was joined properly. self.assertEqual(os.read(r, 1), b"x") @@ -11060,23 +13100,21 @@ diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py # Same as above, but a delay gets introduced after the thread's # Python code returned but before the thread state is deleted. diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py ---- orig/Lib/test/test_traceback.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_traceback.py 2016-02-17 11:55:04.000000000 +0800 -@@ -5,7 +5,9 @@ - import linecache +--- orig/Lib/test/test_traceback.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_traceback.py 2015-05-04 14:42:29.000000000 +0800 +@@ -1,6 +1,7 @@ + """Test cases for traceback module""" + + from io import StringIO ++import subprocess import sys import unittest -+import os import re -+import subprocess - from test import support - from test.support import TESTFN, Error, captured_output, unlink, cpython_only - from test.support.script_helper import assert_python_ok -@@ -110,11 +112,12 @@ +@@ -101,11 +102,12 @@ err = traceback.format_exception_only(None, None) self.assertEqual(err, ['None\n']) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_encoded_file(self): # Test that tracebacks are correctly printed for encoded source files: # - correct line number (Issue2384) @@ -11087,112 +13125,89 @@ diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py # The spawned subprocess has its stdout redirected to a PIPE, and its # encoding may be different from the current interpreter, on Windows diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py ---- orig/Lib/test/test_unicodedata.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_unicodedata.py 2016-02-17 09:41:56.000000000 +0800 -@@ -6,6 +6,7 @@ - - """ - -+import os - import sys - import unittest - import hashlib -@@ -222,8 +223,10 @@ +--- orig/Lib/test/test_unicodedata.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_unicodedata.py 2015-05-04 14:42:28.000000000 +0800 +@@ -222,8 +222,10 @@ self.assertEqual(eaw('\u2010'), 'A') self.assertEqual(eaw('\U00020000'), 'W') + class UnicodeMiscTest(UnicodeDatabaseTest): -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_failed_import_during_compiling(self): # Issue 4367 # Decoding \N escapes requires the unicodedata module. If it can't be diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py ---- orig/Lib/test/test_urllib2net.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_urllib2net.py 2016-02-15 18:20:45.000000000 +0800 -@@ -7,6 +7,10 @@ - import urllib.error - import urllib.request - import sys -+try: -+ import ssl -+except ImportError: -+ ssl = None - - support.requires("network") - -@@ -148,6 +152,7 @@ +--- orig/Lib/test/test_urllib2net.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_urllib2net.py 2015-05-04 13:16:45.000000000 +0800 +@@ -156,6 +156,7 @@ ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) + @unittest.skipIf(ssl is None, 'test requires ssl module') def test_urlwithfrag(self): - urlwith_frag = "http://www.pythontest.net/index.html#frag" + urlwith_frag = "https://docs.python.org/2/glossary.html#glossary" with support.transient_internet(urlwith_frag): -@@ -156,6 +161,7 @@ +@@ -164,6 +165,7 @@ self.assertEqual(res.geturl(), - "http://www.pythontest.net/index.html#frag") + "https://docs.python.org/2/glossary.html#glossary") + @unittest.skipIf(ssl is None, 'test requires ssl module') def test_redirect_url_withfrag(self): - redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/" + redirect_url_with_frag = "http://bit.ly/1iSHToT" with support.transient_internet(redirect_url_with_frag): diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py ---- orig/Lib/test/test_uuid.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_uuid.py 2016-02-17 10:14:39.000000000 +0800 -@@ -14,6 +14,7 @@ +--- orig/Lib/test/test_uuid.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_uuid.py 2015-05-04 14:44:34.000000000 +0800 +@@ -3,9 +3,11 @@ + import builtins + import io + import os ++import subprocess + import shutil + import uuid + ++ + def importable(name): + try: + __import__(name) +@@ -13,6 +15,7 @@ except: return False + class TestUUID(unittest.TestCase): - def test_UUID(self): - equal = self.assertEqual -@@ -388,6 +389,7 @@ - equal(str(u), v) - - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def testIssue8621(self): - # On at least some versions of OSX uuid.uuid4 generates - # the same sequence of UUIDs in the parent and any -@@ -412,6 +414,7 @@ - - class TestInternals(unittest.TestCase): - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def test_find_mac(self): - data = ''' - fake hwaddr -@@ -449,6 +452,7 @@ - "%s is not an RFC 4122 node ID" % hex) + last_node = None + source2node = {} +@@ -314,6 +317,7 @@ + TestUUID.last_node = node @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_ifconfig_getnode(self): node = uuid._ifconfig_getnode() - self.check_node(node, 'ifconfig', True) -@@ -459,6 +463,7 @@ - self.check_node(node, 'ip', True) - - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def test_arp_getnode(self): - node = uuid._arp_getnode() - self.check_node(node, 'arp', True) -@@ -469,6 +474,7 @@ - self.check_node(node, 'lanscan', True) + if node is not None: +@@ -472,6 +476,7 @@ + equal(str(u), v) @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') - def test_netstat_getnode(self): - node = uuid._netstat_getnode() - self.check_node(node, 'netstat', True) ++ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") + def testIssue8621(self): + # On at least some versions of OSX uuid.uuid4 generates + # the same sequence of UUIDs in the parent and any diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py ---- orig/Lib/test/test_venv.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_venv.py 2016-02-17 09:41:45.000000000 +0800 -@@ -35,6 +35,7 @@ +--- orig/Lib/test/test_venv.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_venv.py 2015-05-04 14:44:42.000000000 +0800 +@@ -15,7 +15,6 @@ + import tempfile + from test.support import (captured_stdout, captured_stderr, run_unittest, + can_symlink, EnvironmentVarGuard) +-import textwrap + import unittest + import venv + +@@ -36,6 +35,7 @@ def failsOnWindows(f): return f @@ -11200,49 +13215,49 @@ diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py class BaseTest(unittest.TestCase): """Base class for venv tests.""" -@@ -111,6 +112,7 @@ +@@ -112,6 +112,7 @@ self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) @skipInVenv -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_prefixes(self): """ Test that the prefix values are as expected. -@@ -249,6 +251,7 @@ +@@ -250,6 +251,7 @@ # point to the venv being used to run the test, and we lose the link # to the source build - so Python can't initialise properly. @skipInVenv -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_executable(self): """ Test that the sys.executable value is as expected. -@@ -263,6 +266,7 @@ +@@ -264,6 +266,7 @@ self.assertEqual(out.strip(), envpy.encode()) @unittest.skipUnless(can_symlink(), 'Needs symlinks') -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_executable_symlinks(self): """ Test that the sys.executable value is as expected. -@@ -281,6 +285,7 @@ +@@ -282,6 +285,7 @@ @skipInVenv class EnsurePipTest(BaseTest): """Test venv module installation of pip.""" -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def assert_pip_not_installed(self): envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe) -@@ -319,6 +324,7 @@ +@@ -320,6 +324,7 @@ # Requesting pip fails without SSL (http://bugs.python.org/issue19744) @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_with_pip(self): - rmtree(self.env_dir) + shutil.rmtree(self.env_dir) with EnvironmentVarGuard() as envvars: diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py ---- orig/Lib/test/test_webbrowser.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_webbrowser.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/test/test_webbrowser.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_webbrowser.py 2015-04-30 10:04:24.000000000 +0800 @@ -2,8 +2,11 @@ import unittest import subprocess @@ -11256,17 +13271,17 @@ diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py URL = 'http://www.example.com/' CMD_NAME = 'test' diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py ---- orig/Lib/test/test_zipfile.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/test/test_zipfile.py 2016-02-14 10:29:41.000000000 +0800 -@@ -692,6 +692,7 @@ - self.skipTest('requires write access to the installed location') - unlink(filename) +--- orig/Lib/test/test_zipfile.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/test/test_zipfile.py 2015-07-04 22:53:46.000000000 +0800 +@@ -583,6 +583,7 @@ + if name + 'o' not in namelist: + self.assertIn(name + 'c', namelist) + @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") def test_write_pyfile(self): - self.requiresWriteAccess(os.path.dirname(__file__)) with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: -@@ -736,6 +737,7 @@ + fn = __file__ +@@ -625,6 +626,7 @@ self.assertCompiledIn('email/__init__.py', names) self.assertCompiledIn('email/mime/text.py', names) @@ -11275,8 +13290,8 @@ diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py import test packagedir = os.path.dirname(test.__file__) diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_break.py ---- orig/Lib/unittest/test/test_break.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/unittest/test/test_break.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/unittest/test/test_break.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/unittest/test/test_break.py 2015-04-27 09:20:54.000000000 +0800 @@ -9,7 +9,7 @@ @@ -11287,19 +13302,19 @@ diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_b "if threads have been used") class TestBreak(unittest.TestCase): diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py ---- orig/Lib/unittest/test/test_runner.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/unittest/test/test_runner.py 2016-02-17 09:41:43.000000000 +0800 -@@ -274,6 +274,7 @@ +--- orig/Lib/unittest/test/test_runner.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/unittest/test/test_runner.py 2015-05-04 14:42:27.000000000 +0800 +@@ -270,6 +270,7 @@ expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) self.assertEqual(runner._makeResult(), expectedresult) -+ @unittest.skipUnless(os.allows_subprocesses, 'Test requires support for subprocesses.') ++ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") def test_warnings(self): """ Check that warnings argument of TextTestRunner correctly affects the diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py ---- orig/Lib/webbrowser.py 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Lib/webbrowser.py 2016-02-14 10:29:41.000000000 +0800 +--- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 @@ -602,6 +602,57 @@ register("firefox", None, MacOSXOSAScript('firefox'), -1) register("MacOSX", None, MacOSXOSAScript('default'), -1) @@ -11358,51 +13373,10 @@ diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py # OK, now that we know what the default preference orders for each # platform are, allow user to override them with the BROWSER variable. -diff -Nru orig/Makefile.pre.in modified/Makefile.pre.in ---- orig/Makefile.pre.in 2015-12-07 09:39:09.000000000 +0800 -+++ modified/Makefile.pre.in 2016-02-15 15:50:35.000000000 +0800 -@@ -712,11 +712,11 @@ - $(LINKCC) $(PY_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) - - Python/importlib_external.h: $(srcdir)/Lib/importlib/_bootstrap_external.py Programs/_freeze_importlib -- ./Programs/_freeze_importlib \ -+ ./iOS/_freeze_importlib \ - $(srcdir)/Lib/importlib/_bootstrap_external.py Python/importlib_external.h - - Python/importlib.h: $(srcdir)/Lib/importlib/_bootstrap.py Programs/_freeze_importlib -- ./Programs/_freeze_importlib \ -+ ./iOS/_freeze_importlib \ - $(srcdir)/Lib/importlib/_bootstrap.py Python/importlib.h - - -@@ -777,10 +777,12 @@ - - $(IO_OBJS): $(IO_H) - --$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) -+$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS) - @$(MKDIR_P) Include -+ $(MAKE) $(PGEN) - $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C) --$(GRAMMAR_C): $(GRAMMAR_H) -+$(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS) -+ $(MAKE) $(GRAMMAR_H) - touch $(GRAMMAR_C) - - $(PGEN): $(PGENOBJS) -@@ -862,7 +864,7 @@ - - Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h - --Python/frozen.o: Python/importlib.h Python/importlib_external.h -+Python/frozen.o: Python/importlib.h Python/importlib_external.h - - Objects/typeobject.o: Objects/typeslots.inc - Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded --- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.embedded 2016-02-14 12:15:08.000000000 +0800 -@@ -0,0 +1,90 @@ ++++ modified/Modules/Setup.embedded 2015-07-04 23:36:43.000000000 +0800 +@@ -0,0 +1,91 @@ +##################################################################### +# Static compilation instructions for all binary modules. +##################################################################### @@ -11464,6 +13438,7 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +select selectmodule.c +syslog syslogmodule.c +termios termios.c ++time timemodule.c +unicodedata unicodedata.c +zlib zlibmodule.c -I$(prefix)/include -lz + @@ -11495,7 +13470,7 @@ diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded +#spwd spwdmodule.c diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 --- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-aarch64 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/Setup.ios-aarch64 2015-12-20 23:03:15.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -11534,7 +13509,7 @@ diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 + -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm --- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-arm 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/Setup.ios-arm 2015-12-20 23:02:39.000000000 +0800 @@ -0,0 +1,36 @@ + +##################################################################### @@ -11574,7 +13549,7 @@ diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 --- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-i386 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/Setup.ios-i386 2015-12-20 23:01:44.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -11613,7 +13588,7 @@ diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 + -DCONFIG_32=1 -DANSI=1 diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 --- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-x86_64 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/Setup.ios-x86_64 2015-12-20 23:01:43.000000000 +0800 @@ -0,0 +1,35 @@ + +##################################################################### @@ -11652,7 +13627,7 @@ diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 + -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE --- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/LICENSE 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-04-26 07:29:16.000000000 +0800 @@ -0,0 +1,21 @@ +libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. +See source files for details. @@ -11677,7 +13652,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libff +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README --- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README 2015-12-21 09:55:54.000000000 +0800 @@ -0,0 +1,450 @@ +Status +====== @@ -12131,7 +14106,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi +libffi-discuss@sourceware.org. diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes/libffi_ios/README.python --- orig/Modules/_ctypes/libffi_ios/README.python 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README.python 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/README.python 2015-12-20 18:48:11.000000000 +0800 @@ -0,0 +1,14 @@ +This directory contains the generated source code for running libffi +on iOS platforms (physical and simulator). It contains support for @@ -12149,7 +14124,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes +and patched verion of libffi 4. diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c --- orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2015-12-20 22:04:51.000000000 +0800 @@ -0,0 +1,934 @@ +#ifdef __arm64__ + @@ -13088,7 +15063,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h --- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-12-20 19:03:29.000000000 +0800 @@ -0,0 +1,67 @@ +/* +Permission is hereby granted, free of charge, to any person obtaining @@ -13159,7 +15134,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_c +#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S --- orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2015-12-20 22:31:37.000000000 +0800 @@ -0,0 +1,443 @@ +#ifdef __arm64__ + @@ -13607,7 +15582,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c --- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-12-20 22:05:17.000000000 +0800 @@ -0,0 +1,813 @@ +#ifdef __arm__ + @@ -14425,7 +16400,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctyp \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h --- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-12-20 19:03:21.000000000 +0800 @@ -0,0 +1,7 @@ +#define ARM_TYPE_VFP_S 0 +#define ARM_TYPE_VFP_D 1 @@ -14436,7 +16411,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctype +#define ARM_TYPE_STRUCT 6 diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S --- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-12-20 22:31:41.000000000 +0800 @@ -0,0 +1,388 @@ +#ifdef __arm__ + @@ -14829,7 +16804,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_cty \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S --- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-12-20 18:50:24.000000000 +0800 @@ -0,0 +1,5 @@ +#ifdef __arm__ + @@ -14839,7 +16814,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Module \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c --- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/closures.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-12-20 22:04:37.000000000 +0800 @@ -0,0 +1,925 @@ +/* ----------------------------------------------------------------------- + closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. @@ -15768,7 +17743,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/li +#endif /* FFI_CLOSURES */ diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c --- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/debug.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-12-20 22:33:34.000000000 +0800 @@ -0,0 +1,64 @@ +/* ----------------------------------------------------------------------- + debug.c - Copyright (c) 1996 Red Hat, Inc. @@ -15836,7 +17811,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libff +} diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c --- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-12-20 18:49:03.000000000 +0800 @@ -0,0 +1,5161 @@ +/* + This is a version (aka dlmalloc) of malloc/free/realloc written by @@ -21001,7 +22976,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/li +*/ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h --- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-12-20 18:55:19.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -21029,7 +23004,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __arm64__ + @@ -21542,7 +23517,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __arm__ + @@ -22055,7 +24030,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-12-20 18:55:19.000000000 +0800 @@ -0,0 +1,55 @@ +/* ----------------------------------------------------------------------- + ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. @@ -22114,7 +24089,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ct +#endif /* FFI_CFI_H */ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-12-20 18:55:19.000000000 +0800 @@ -0,0 +1,132 @@ +/* ----------------------------------------------------------------------- + ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green @@ -22250,7 +24225,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __i386__ + @@ -22763,7 +24738,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_c \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,508 @@ +#ifdef __x86_64__ + @@ -23276,7 +25251,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/ \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-12-20 18:55:19.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -23304,7 +25279,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __arm64__ + @@ -23523,7 +25498,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __arm__ + @@ -23742,7 +25717,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __i386__ + @@ -23961,7 +25936,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modu \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,214 @@ +#ifdef __x86_64__ + @@ -24180,7 +26155,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Mo \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-12-20 18:55:19.000000000 +0800 @@ -0,0 +1,24 @@ +#ifdef __arm64__ + @@ -24208,7 +26183,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-12-20 22:05:32.000000000 +0800 @@ -0,0 +1,85 @@ +#ifdef __arm64__ + @@ -24298,7 +26273,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-12-20 22:05:39.000000000 +0800 @@ -0,0 +1,87 @@ +#ifdef __arm__ + @@ -24390,7 +26365,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Mod \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,144 @@ +#ifdef __i386__ + @@ -24539,7 +26514,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modu \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h --- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-12-20 18:55:29.000000000 +0800 @@ -0,0 +1,144 @@ +#ifdef __x86_64__ + @@ -24688,7 +26663,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Mo \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c --- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-12-20 18:49:11.000000000 +0800 @@ -0,0 +1,374 @@ +/* ----------------------------------------------------------------------- + java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. @@ -25066,7 +27041,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctype +#endif /* !NO_JAVA_RAW_API */ diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c --- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-12-20 18:49:22.000000000 +0800 @@ -0,0 +1,242 @@ +/* ----------------------------------------------------------------------- + prep_cif.c - Copyright (c) 2011, 2012 Anthony Green @@ -25312,7 +27287,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/li +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c --- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-12-20 18:49:26.000000000 +0800 @@ -0,0 +1,267 @@ +/* ----------------------------------------------------------------------- + raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. @@ -25583,11 +27558,11 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/lib +#endif /* !FFI_NO_RAW_API */ diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c --- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/types.c 2016-02-14 12:09:55.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/types.c 2015-12-20 18:49:29.000000000 +0800 @@ -0,0 +1,106 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. -+ ++ + Predefined ffi_types needed by libffi. + + Permission is hereby granted, free of charge, to any person obtaining @@ -25646,54 +27621,54 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libff + (ffi_type **)ffi_elements_complex_##name \ +} + -+// /* Size and alignment are fake here. They must not be 0. */ -+// const ffi_type ffi_type_void = { -+// 1, 1, FFI_TYPE_VOID, NULL -+// }; -+ -+// FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); -+// FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); -+// FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); -+// FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); -+// FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); -+// FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); -+// FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); -+// FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); -+ -+// FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); -+ -+// FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); -+// FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); -+ -+// #if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ -+// #define FFI_LDBL_CONST const -+// #else -+// #define FFI_LDBL_CONST -+// #endif -+ -+// #ifdef __alpha__ -+// /* Even if we're not configured to default to 128-bit long double, -+// maintain binary compatibility, as -mlong-double-128 can be used -+// at any time. */ -+// /* Validate the hard-coded number below. */ -+// # if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -+// # error FFI_TYPE_LONGDOUBLE out of date -+// # endif -+// const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -+// #elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+// FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); -+// #endif -+ -+// #ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+// FFI_COMPLEX_TYPEDEF(float, float, const); -+// FFI_COMPLEX_TYPEDEF(double, double, const); -+// #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+// FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); -+// #endif -+// #endif ++/* Size and alignment are fake here. They must not be 0. */ ++const ffi_type ffi_type_void = { ++ 1, 1, FFI_TYPE_VOID, NULL ++}; ++ ++FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); ++FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); ++FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); ++FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); ++FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); ++FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); ++FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); ++FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); ++ ++FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); ++ ++FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); ++FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); ++ ++#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ ++#define FFI_LDBL_CONST const ++#else ++#define FFI_LDBL_CONST ++#endif ++ ++#ifdef __alpha__ ++/* Even if we're not configured to default to 128-bit long double, ++ maintain binary compatibility, as -mlong-double-128 can be used ++ at any time. */ ++/* Validate the hard-coded number below. */ ++# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 ++# error FFI_TYPE_LONGDOUBLE out of date ++# endif ++const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; ++#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); ++#endif ++ ++#ifdef FFI_TARGET_HAS_COMPLEX_TYPE ++FFI_COMPLEX_TYPEDEF(float, float, const); ++FFI_COMPLEX_TYPEDEF(double, double, const); ++#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE ++FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); ++#endif ++#endif diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c --- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-12-20 18:53:04.000000000 +0800 @@ -0,0 +1,829 @@ +#ifdef __x86_64__ + @@ -26527,7 +28502,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_c \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c --- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-12-20 18:53:04.000000000 +0800 @@ -0,0 +1,734 @@ +#ifdef __i386__ + @@ -27266,7 +29241,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctype \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h --- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-12-20 19:03:47.000000000 +0800 @@ -0,0 +1,29 @@ +#define X86_RET_FLOAT 0 +#define X86_RET_DOUBLE 1 @@ -27299,7 +29274,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctype +#endif diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h --- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-12-20 19:03:50.000000000 +0800 @@ -0,0 +1,22 @@ +#define UNIX64_RET_VOID 0 +#define UNIX64_RET_UINT8 1 @@ -27325,7 +29300,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_cty +#define UNIX64_SIZE_SHIFT 12 diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S --- orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2015-12-20 18:53:04.000000000 +0800 @@ -0,0 +1,1045 @@ +#ifdef __i386__ + @@ -28375,7 +30350,7 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctyp \ No newline at end of file diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S --- orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2015-12-20 18:53:04.000000000 +0800 @@ -0,0 +1,551 @@ +#ifdef __x86_64__ + @@ -28930,9 +30905,9 @@ diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ +#endif \ No newline at end of file diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c ---- orig/Modules/_posixsubprocess.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/_posixsubprocess.c 2016-02-14 10:29:41.000000000 +0800 -@@ -490,11 +490,15 @@ +--- orig/Modules/_posixsubprocess.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/_posixsubprocess.c 2015-12-21 13:03:32.000000000 +0800 +@@ -479,11 +479,15 @@ saved_errno = 0; for (i = 0; exec_array[i] != NULL; ++i) { const char *executable = exec_array[i]; @@ -28948,7 +30923,7 @@ diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { saved_errno = errno; } -@@ -662,7 +666,12 @@ +@@ -646,7 +650,12 @@ cwd_obj2 = NULL; } @@ -28962,8 +30937,8 @@ diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c /* Child process */ /* diff -Nru orig/Modules/makesetup modified/Modules/makesetup ---- orig/Modules/makesetup 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/makesetup 2016-02-14 10:29:41.000000000 +0800 +--- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 @@ -128,7 +128,7 @@ # Output DEFS in reverse order so first definition overrides @@ -29004,9 +30979,18 @@ diff -Nru orig/Modules/makesetup modified/Modules/makesetup *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C *) continue;; esac +@@ -266,7 +271,7 @@ + *) sed -e " + 1i$NL/* Generated automatically from $config by makesetup. */ + /MARKER 1/i$NL$EXTDECLS +- ++ + /MARKER 2/i$NL$INITBITS + + " $config >config.c diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c ---- orig/Modules/mathmodule.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/mathmodule.c 2016-02-14 10:29:41.000000000 +0800 +--- orig/Modules/mathmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/mathmodule.c 2015-05-04 13:53:01.000000000 +0800 @@ -55,6 +55,10 @@ #include "Python.h" #include "_math.h" @@ -29018,7 +31002,7 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c /* sin(pi*x), giving accurate results for all finite x (especially x integral or close to an integer). This is here for use in the -@@ -1810,6 +1814,16 @@ +@@ -1746,6 +1750,16 @@ return PyFloat_FromDouble(fabs(x)); if (Py_IS_INFINITY(y)) return PyFloat_FromDouble(fabs(y)); @@ -29036,8 +31020,8 @@ diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c PyFPE_START_PROTECT("in math_hypot", return 0); r = hypot(x, y); diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c ---- orig/Modules/posixmodule.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/posixmodule.c 2016-02-17 14:14:22.000000000 +0800 +--- orig/Modules/posixmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/posixmodule.c 2015-12-21 13:03:32.000000000 +0800 @@ -20,6 +20,8 @@ # pragma weak statvfs # pragma weak fstatvfs @@ -29047,12 +31031,13 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* __APPLE__ */ #define PY_SSIZE_T_CLEAN -@@ -175,6 +177,22 @@ - #endif /* _MSC_VER */ +@@ -180,6 +182,23 @@ + #endif /* __BORLANDC__ */ #endif /* ! __WATCOMC__ || __QNX__ */ -+// tvOS and watchOS don't provide a number of important POSIX functions. -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) ++// iOS *defines* a number of POSIX functions, but you can't use them ++// because iOS isn't a conventional multiprocess environment. ++#if TARGET_OS_IPHONE +# undef HAVE_EXECV +# undef HAVE_FORK +# undef HAVE_FORK1 @@ -29066,11 +31051,11 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c +# undef HAVE_WAIT3 +# undef HAVE_WAIT4 +# undef HAVE_WAITPID -+#endif /* TVOS || WATCHOS */ ++#endif /* TARGET_OS_IPHONE */ /*[clinic input] - # one of the few times we lie about this name! -@@ -1127,7 +1145,9 @@ + module os +@@ -1178,7 +1197,9 @@ #include static char **environ; #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) @@ -29080,7 +31065,7 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c #endif /* !_MSC_VER */ static PyObject * -@@ -1178,7 +1198,7 @@ +@@ -1229,7 +1250,7 @@ Py_DECREF(k); Py_DECREF(v); } @@ -29089,22 +31074,22 @@ diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c if (environ == NULL) return d; /* This part ignores errors */ -@@ -4285,7 +4305,12 @@ - long result; - char *bytes = PyBytes_AsString(command); +@@ -4444,7 +4465,12 @@ + + command = PyBytes_AsString(command_obj); Py_BEGIN_ALLOW_THREADS +#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ result = -1; ++ sts = -1; + errno = ENOTSUP; +#else - result = system(bytes); + sts = system(command); +#endif Py_END_ALLOW_THREADS - return result; - } + Py_DECREF(command_obj); + #endif diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c ---- orig/Modules/pwdmodule.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Modules/pwdmodule.c 2016-02-14 10:29:41.000000000 +0800 +--- orig/Modules/pwdmodule.c 2015-02-03 19:49:04.000000000 +0800 ++++ modified/Modules/pwdmodule.c 2015-05-02 23:37:06.000000000 +0800 @@ -1,6 +1,10 @@ /* UNIX password file access module */ @@ -29116,7 +31101,7 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c #include "Python.h" #include "posixmodule.h" -@@ -118,6 +122,21 @@ +@@ -105,6 +109,21 @@ return NULL; } if ((p = getpwuid(uid)) == NULL) { @@ -29138,7 +31123,7 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c PyObject *uid_obj = _PyLong_FromUid(uid); if (uid_obj == NULL) return NULL; -@@ -153,6 +172,22 @@ +@@ -136,6 +155,22 @@ if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) goto out; if ((p = getpwnam(name)) == NULL) { @@ -29161,18 +31146,18 @@ diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c PyErr_Format(PyExc_KeyError, "getpwnam(): name not found: %s", name); goto out; -@@ -196,6 +231,7 @@ +@@ -176,6 +211,7 @@ } #endif + static PyMethodDef pwd_methods[] = { - PWD_GETPWUID_METHODDEF - PWD_GETPWNAM_METHODDEF + {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, + {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c ---- orig/Objects/bytesobject.c 2015-12-07 09:39:10.000000000 +0800 -+++ modified/Objects/bytesobject.c 2016-02-14 10:29:41.000000000 +0800 -@@ -201,8 +201,8 @@ +--- orig/Objects/bytesobject.c 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Objects/bytesobject.c 2015-08-03 12:54:33.000000000 +0800 +@@ -199,8 +199,8 @@ int c = va_arg(count, int); if (c < 0 || c > 255) { PyErr_SetString(PyExc_OverflowError, @@ -29183,14 +31168,14 @@ diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c return NULL; } n++; -diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h ---- orig/Python/importlib_external.h 2015-12-07 09:39:11.000000000 +0800 -+++ modified/Python/importlib_external.h 2016-02-17 12:30:41.000000000 +0800 -@@ -2,52 +2,52 @@ - const unsigned char _Py_M__importlib_external[] = { +diff -Nru orig/Python/importlib.h modified/Python/importlib.h +--- orig/Python/importlib.h 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Python/importlib.h 2015-05-02 11:58:42.000000000 +0800 +@@ -2,84 +2,84 @@ + const unsigned char _Py_M__importlib[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,2,0,0,100,0,0,90,0,0, -- 100,96,0,90,1,0,100,4,0,100,5,0,132,0,0,90, + 0,64,0,0,0,115,228,4,0,0,100,0,0,90,0,0, +- 100,163,0,90,1,0,100,4,0,100,5,0,132,0,0,90, - 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, - 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, - 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, @@ -29198,7 +31183,40 @@ diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h - 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, - 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, - 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, -+ 100,97,0,90,1,0,100,5,0,100,6,0,132,0,0,90, +- 0,100,25,0,100,26,0,132,0,0,90,12,0,100,27,0, +- 100,28,0,132,0,0,90,13,0,101,14,0,101,12,0,106, +- 15,0,131,1,0,90,16,0,71,100,29,0,100,30,0,132, +- 0,0,100,30,0,131,2,0,90,17,0,105,0,0,90,18, +- 0,105,0,0,90,19,0,71,100,31,0,100,32,0,132,0, +- 0,100,32,0,101,20,0,131,3,0,90,21,0,71,100,33, +- 0,100,34,0,132,0,0,100,34,0,131,2,0,90,22,0, +- 71,100,35,0,100,36,0,132,0,0,100,36,0,131,2,0, +- 90,23,0,71,100,37,0,100,38,0,132,0,0,100,38,0, +- 131,2,0,90,24,0,100,39,0,100,40,0,132,0,0,90, +- 25,0,100,41,0,100,42,0,132,0,0,90,26,0,100,43, +- 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, +- 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, +- 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, +- 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, +- 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, +- 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, +- 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, +- 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, +- 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, +- 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, +- 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, +- 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, +- 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, +- 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, +- 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, +- 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, +- 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, +- 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, +- 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, +- 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, +- 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, +- 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, ++ 100,164,0,90,1,0,100,5,0,100,6,0,132,0,0,90, + 2,0,100,7,0,100,8,0,132,0,0,90,3,0,100,9, + 0,100,10,0,132,0,0,90,4,0,100,11,0,100,12,0, + 132,0,0,90,5,0,100,13,0,100,14,0,132,0,0,90, @@ -29206,2021 +31224,4476 @@ diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h + 0,100,18,0,132,0,0,90,8,0,100,19,0,100,20,0, + 132,0,0,90,9,0,100,21,0,100,22,0,132,0,0,90, + 10,0,100,23,0,100,24,0,100,25,0,132,1,0,90,11, - 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, -- 100,25,0,106,15,0,100,26,0,100,27,0,131,2,0,100, -- 28,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, -- 27,0,131,2,0,90,19,0,100,29,0,90,20,0,100,30, -- 0,90,21,0,100,31,0,103,1,0,90,22,0,100,32,0, -+ 100,26,0,106,15,0,100,27,0,100,28,0,131,2,0,100, -+ 29,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, -+ 28,0,131,2,0,90,19,0,100,30,0,90,20,0,100,31, -+ 0,90,21,0,100,32,0,103,1,0,90,22,0,100,33,0, - 103,1,0,90,23,0,101,23,0,4,90,24,0,90,25,0, -- 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, -- 1,1,90,26,0,100,37,0,100,38,0,132,0,0,90,27, -- 0,100,39,0,100,40,0,132,0,0,90,28,0,100,41,0, -- 100,42,0,132,0,0,90,29,0,100,43,0,100,44,0,132, -- 0,0,90,30,0,100,45,0,100,46,0,100,47,0,100,48, -- 0,132,0,1,90,31,0,100,49,0,100,50,0,132,0,0, -- 90,32,0,100,51,0,100,52,0,132,0,0,90,33,0,100, -- 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, -- 0,90,34,0,100,33,0,100,33,0,100,33,0,100,55,0, -- 100,56,0,132,3,0,90,35,0,100,57,0,100,57,0,100, -- 58,0,100,59,0,132,2,0,90,36,0,100,60,0,100,61, -+ 100,34,0,100,35,0,100,34,0,100,36,0,100,37,0,132, -+ 1,1,90,26,0,100,38,0,100,39,0,132,0,0,90,27, -+ 0,100,40,0,100,41,0,132,0,0,90,28,0,100,42,0, -+ 100,43,0,132,0,0,90,29,0,100,44,0,100,45,0,132, -+ 0,0,90,30,0,100,46,0,100,47,0,100,48,0,100,49, -+ 0,132,0,1,90,31,0,100,50,0,100,51,0,132,0,0, -+ 90,32,0,100,52,0,100,53,0,132,0,0,90,33,0,100, -+ 34,0,100,34,0,100,34,0,100,54,0,100,55,0,132,3, -+ 0,90,34,0,100,34,0,100,34,0,100,34,0,100,56,0, -+ 100,57,0,132,3,0,90,35,0,100,58,0,100,58,0,100, -+ 59,0,100,60,0,132,2,0,90,36,0,100,61,0,100,62, - 0,132,0,0,90,37,0,101,38,0,131,0,0,90,39,0, -- 100,33,0,100,62,0,100,33,0,100,63,0,101,39,0,100, -- 64,0,100,65,0,132,1,2,90,40,0,71,100,66,0,100, -- 67,0,132,0,0,100,67,0,131,2,0,90,41,0,71,100, -- 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,42, -- 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,42, -- 0,131,3,0,90,43,0,71,100,72,0,100,73,0,132,0, -- 0,100,73,0,131,2,0,90,44,0,71,100,74,0,100,75, -- 0,132,0,0,100,75,0,101,44,0,101,43,0,131,4,0, -- 90,45,0,71,100,76,0,100,77,0,132,0,0,100,77,0, -+ 100,34,0,100,63,0,100,34,0,100,64,0,101,39,0,100, -+ 65,0,100,66,0,132,1,2,90,40,0,71,100,67,0,100, -+ 68,0,132,0,0,100,68,0,131,2,0,90,41,0,71,100, -+ 69,0,100,70,0,132,0,0,100,70,0,131,2,0,90,42, -+ 0,71,100,71,0,100,72,0,132,0,0,100,72,0,101,42, -+ 0,131,3,0,90,43,0,71,100,73,0,100,74,0,132,0, -+ 0,100,74,0,131,2,0,90,44,0,71,100,75,0,100,76, -+ 0,132,0,0,100,76,0,101,44,0,101,43,0,131,4,0, -+ 90,45,0,71,100,77,0,100,78,0,132,0,0,100,78,0, - 101,44,0,101,42,0,131,4,0,90,46,0,103,0,0,90, -- 47,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, -- 44,0,101,42,0,131,4,0,90,48,0,71,100,80,0,100, -- 81,0,132,0,0,100,81,0,131,2,0,90,49,0,71,100, -- 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,50, -- 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, -- 0,90,51,0,71,100,86,0,100,87,0,132,0,0,100,87, -- 0,131,2,0,90,52,0,100,33,0,100,88,0,100,89,0, -- 132,1,0,90,53,0,100,90,0,100,91,0,132,0,0,90, -- 54,0,100,92,0,100,93,0,132,0,0,90,55,0,100,94, -- 0,100,95,0,132,0,0,90,56,0,100,33,0,83,41,97, -+ 47,0,71,100,79,0,100,80,0,132,0,0,100,80,0,101, -+ 44,0,101,42,0,131,4,0,90,48,0,71,100,81,0,100, -+ 82,0,132,0,0,100,82,0,131,2,0,90,49,0,71,100, -+ 83,0,100,84,0,132,0,0,100,84,0,131,2,0,90,50, -+ 0,71,100,85,0,100,86,0,132,0,0,100,86,0,131,2, -+ 0,90,51,0,71,100,87,0,100,88,0,132,0,0,100,88, -+ 0,131,2,0,90,52,0,100,34,0,100,89,0,100,90,0, -+ 132,1,0,90,53,0,100,91,0,100,92,0,132,0,0,90, -+ 54,0,100,93,0,100,94,0,132,0,0,90,55,0,100,95, -+ 0,100,96,0,132,0,0,90,56,0,100,34,0,83,41,98, - 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, - 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, -@@ -71,2527 +71,2528 @@ - 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, - 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, - 46,10,10,218,3,119,105,110,218,6,99,121,103,119,105,110, -- 218,6,100,97,114,119,105,110,99,0,0,0,0,0,0,0, -- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,49,0, -- 0,0,116,0,0,106,1,0,106,2,0,116,3,0,131,1, -- 0,114,33,0,100,1,0,100,2,0,132,0,0,125,0,0, -- 110,12,0,100,3,0,100,2,0,132,0,0,125,0,0,124, -- 0,0,83,41,4,78,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,2,0,0,0,83,0,0,0,115,13,0,0,0, -- 100,1,0,116,0,0,106,1,0,107,6,0,83,41,2,122, -+ 218,6,100,97,114,119,105,110,218,3,105,111,115,99,0,0, -+ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, -+ 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, -+ 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, -+ 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, -+ 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, -+ 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, -+ 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, -+ 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, -+ 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, -+ 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, -+ 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, -+ 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,5, -+ 0,0,0,114,5,0,0,0,250,38,60,102,114,111,122,101, -+ 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, -+ 116,115,116,114,97,112,95,101,120,116,101,114,110,97,108,62, -+ 218,11,95,114,101,108,97,120,95,99,97,115,101,30,0,0, -+ 0,115,2,0,0,0,0,2,122,37,95,109,97,107,101,95, -+ 114,101,108,97,120,95,99,97,115,101,46,60,108,111,99,97, -+ 108,115,62,46,95,114,101,108,97,120,95,99,97,115,101,99, -+ 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -+ 83,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, - 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, - 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, - 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, -- 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, -- 78,67,65,83,69,79,75,41,2,218,3,95,111,115,90,7, -- 101,110,118,105,114,111,110,169,0,114,4,0,0,0,114,4, -- 0,0,0,250,38,60,102,114,111,122,101,110,32,105,109,112, -- 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, -- 112,95,101,120,116,101,114,110,97,108,62,218,11,95,114,101, -- 108,97,120,95,99,97,115,101,30,0,0,0,115,2,0,0, -- 0,0,2,122,37,95,109,97,107,101,95,114,101,108,97,120, -- 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, -- 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, -- 4,0,0,0,100,1,0,83,41,2,122,53,84,114,117,101, -- 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, -- 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, -- 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, -- 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, -- 34,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, -- 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, -- 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, -- 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, -- 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, -- 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, -- 0,115,8,0,0,0,0,1,18,1,15,4,12,3,114,11, -- 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, -- 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,0, -- 124,0,0,131,1,0,100,1,0,64,106,1,0,100,2,0, -- 100,3,0,131,2,0,83,41,4,122,42,67,111,110,118,101, -- 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, -- 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, -- 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, -- 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, -- 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, -- 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, -- 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, -- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, -- 115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1, -- 0,131,2,0,83,41,2,122,47,67,111,110,118,101,114,116, -- 32,52,32,98,121,116,101,115,32,105,110,32,108,105,116,116, -- 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, -- 105,110,116,101,103,101,114,46,114,13,0,0,0,41,2,114, -- 14,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, -- 41,1,90,9,105,110,116,95,98,121,116,101,115,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,114, -- 95,108,111,110,103,45,0,0,0,115,2,0,0,0,0,2, -- 114,19,0,0,0,99,0,0,0,0,0,0,0,0,1,0, -- 0,0,3,0,0,0,71,0,0,0,115,26,0,0,0,116, -- 0,0,106,1,0,100,1,0,100,2,0,132,0,0,124,0, -- 0,68,131,1,0,131,1,0,83,41,3,122,31,82,101,112, -- 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, -- 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, -- 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, -- 0,115,37,0,0,0,103,0,0,124,0,0,93,27,0,125, -- 1,0,124,1,0,114,6,0,124,1,0,106,0,0,116,1, -- 0,131,1,0,145,2,0,113,6,0,83,114,4,0,0,0, -- 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, -- 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, -- 48,218,4,112,97,114,116,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,250,10,60,108,105,115,116,99,111,109, -- 112,62,52,0,0,0,115,2,0,0,0,9,1,122,30,95, -- 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, -- 115,62,46,60,108,105,115,116,99,111,109,112,62,41,2,218, -- 8,112,97,116,104,95,115,101,112,218,4,106,111,105,110,41, -- 1,218,10,112,97,116,104,95,112,97,114,116,115,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,112, -- 97,116,104,95,106,111,105,110,50,0,0,0,115,4,0,0, -- 0,0,2,15,1,114,28,0,0,0,99,1,0,0,0,0, -- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, -- 134,0,0,0,116,0,0,116,1,0,131,1,0,100,1,0, -- 107,2,0,114,52,0,124,0,0,106,2,0,116,3,0,131, -+ 105,118,101,108,121,46,70,114,5,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,7,0,0,0,34,0,0,0,115,2,0,0,0,0,2, -+ 41,4,218,3,115,121,115,218,8,112,108,97,116,102,111,114, -+ 109,218,10,115,116,97,114,116,115,119,105,116,104,218,27,95, -+ 67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,69, -+ 95,80,76,65,84,70,79,82,77,83,41,1,114,7,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, -+ 115,101,28,0,0,0,115,8,0,0,0,0,1,18,1,15, -+ 4,12,3,114,12,0,0,0,99,1,0,0,0,0,0,0, -+ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, -+ 0,0,116,0,0,124,0,0,131,1,0,100,1,0,64,106, -+ 1,0,100,2,0,100,3,0,131,2,0,83,41,4,122,42, -+ 67,111,110,118,101,114,116,32,97,32,51,50,45,98,105,116, -+ 32,105,110,116,101,103,101,114,32,116,111,32,108,105,116,116, -+ 108,101,45,101,110,100,105,97,110,46,108,3,0,0,0,255, -+ 127,255,127,3,0,233,4,0,0,0,218,6,108,105,116,116, -+ 108,101,41,2,218,3,105,110,116,218,8,116,111,95,98,121, -+ 116,101,115,41,1,218,1,120,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,7,95,119,95,108,111,110,103, -+ 40,0,0,0,115,2,0,0,0,0,2,114,18,0,0,0, -+ 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, -+ 0,67,0,0,0,115,16,0,0,0,116,0,0,106,1,0, -+ 124,0,0,100,1,0,131,2,0,83,41,2,122,47,67,111, -+ 110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,110, -+ 32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,116, -+ 111,32,97,110,32,105,110,116,101,103,101,114,46,114,14,0, -+ 0,0,41,2,114,15,0,0,0,218,10,102,114,111,109,95, -+ 98,121,116,101,115,41,1,90,9,105,110,116,95,98,121,116, -+ 101,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,7,95,114,95,108,111,110,103,45,0,0,0,115,2, -+ 0,0,0,0,2,114,20,0,0,0,99,0,0,0,0,0, -+ 0,0,0,1,0,0,0,3,0,0,0,71,0,0,0,115, -+ 26,0,0,0,116,0,0,106,1,0,100,1,0,100,2,0, -+ 132,0,0,124,0,0,68,131,1,0,131,1,0,83,41,3, -+ 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111, -+ 114,32,111,115,46,112,97,116,104,46,106,111,105,110,40,41, -+ 46,99,1,0,0,0,0,0,0,0,2,0,0,0,4,0, -+ 0,0,83,0,0,0,115,37,0,0,0,103,0,0,124,0, -+ 0,93,27,0,125,1,0,124,1,0,114,6,0,124,1,0, -+ 106,0,0,116,1,0,131,1,0,145,2,0,113,6,0,83, -+ 114,5,0,0,0,41,2,218,6,114,115,116,114,105,112,218, -+ 15,112,97,116,104,95,115,101,112,97,114,97,116,111,114,115, -+ 41,2,218,2,46,48,218,4,112,97,114,116,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,250,10,60,108,105, -+ 115,116,99,111,109,112,62,52,0,0,0,115,2,0,0,0, -+ 9,1,122,30,95,112,97,116,104,95,106,111,105,110,46,60, -+ 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, -+ 112,62,41,2,218,8,112,97,116,104,95,115,101,112,218,4, -+ 106,111,105,110,41,1,218,10,112,97,116,104,95,112,97,114, -+ 116,115,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,10,95,112,97,116,104,95,106,111,105,110,50,0,0, -+ 0,115,4,0,0,0,0,2,15,1,114,29,0,0,0,99, -+ 1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, -+ 67,0,0,0,115,134,0,0,0,116,0,0,116,1,0,131, -+ 1,0,100,1,0,107,2,0,114,52,0,124,0,0,106,2, -+ 0,116,3,0,131,1,0,92,3,0,125,1,0,125,2,0, -+ 125,3,0,124,1,0,124,3,0,102,2,0,83,120,69,0, -+ 116,4,0,124,0,0,131,1,0,68,93,55,0,125,4,0, -+ 124,4,0,116,1,0,107,6,0,114,65,0,124,0,0,106, -+ 5,0,124,4,0,100,2,0,100,1,0,131,1,1,92,2, -+ 0,125,1,0,125,3,0,124,1,0,124,3,0,102,2,0, -+ 83,113,65,0,87,100,3,0,124,0,0,102,2,0,83,41, -+ 4,122,32,82,101,112,108,97,99,101,109,101,110,116,32,102, -+ 111,114,32,111,115,46,112,97,116,104,46,115,112,108,105,116, -+ 40,41,46,233,1,0,0,0,90,8,109,97,120,115,112,108, -+ 105,116,218,0,41,6,218,3,108,101,110,114,22,0,0,0, -+ 218,10,114,112,97,114,116,105,116,105,111,110,114,26,0,0, -+ 0,218,8,114,101,118,101,114,115,101,100,218,6,114,115,112, -+ 108,105,116,41,5,218,4,112,97,116,104,90,5,102,114,111, -+ 110,116,218,1,95,218,4,116,97,105,108,114,17,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 11,95,112,97,116,104,95,115,112,108,105,116,56,0,0,0, -+ 115,16,0,0,0,0,2,18,1,24,1,10,1,19,1,12, -+ 1,27,1,14,1,114,39,0,0,0,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, -+ 13,0,0,0,116,0,0,106,1,0,124,0,0,131,1,0, -+ 83,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97, -+ 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, -+ 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, -+ 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, -+ 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, -+ 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, -+ 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, -+ 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, -+ 32,32,32,41,2,114,4,0,0,0,90,4,115,116,97,116, -+ 41,1,114,36,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,218,10,95,112,97,116,104,95,115,116, -+ 97,116,68,0,0,0,115,2,0,0,0,0,7,114,40,0, -+ 0,0,99,2,0,0,0,0,0,0,0,3,0,0,0,11, -+ 0,0,0,67,0,0,0,115,58,0,0,0,121,16,0,116, -+ 0,0,124,0,0,131,1,0,125,2,0,87,110,22,0,4, -+ 116,1,0,107,10,0,114,40,0,1,1,1,100,1,0,83, -+ 89,110,1,0,88,124,2,0,106,2,0,100,2,0,64,124, -+ 1,0,107,2,0,83,41,3,122,49,84,101,115,116,32,119, -+ 104,101,116,104,101,114,32,116,104,101,32,112,97,116,104,32, -+ 105,115,32,116,104,101,32,115,112,101,99,105,102,105,101,100, -+ 32,109,111,100,101,32,116,121,112,101,46,70,105,0,240,0, -+ 0,41,3,114,40,0,0,0,218,7,79,83,69,114,114,111, -+ 114,218,7,115,116,95,109,111,100,101,41,3,114,36,0,0, -+ 0,218,4,109,111,100,101,90,9,115,116,97,116,95,105,110, -+ 102,111,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,18,95,112,97,116,104,95,105,115,95,109,111,100,101, -+ 95,116,121,112,101,78,0,0,0,115,10,0,0,0,0,2, -+ 3,1,16,1,13,1,9,1,114,44,0,0,0,99,1,0, -+ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, -+ 0,0,115,13,0,0,0,116,0,0,124,0,0,100,1,0, -+ 131,2,0,83,41,2,122,31,82,101,112,108,97,99,101,109, -+ 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, -+ 105,115,102,105,108,101,46,105,0,128,0,0,41,1,114,44, -+ 0,0,0,41,1,114,36,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,12,95,112,97,116,104, -+ 95,105,115,102,105,108,101,87,0,0,0,115,2,0,0,0, -+ 0,2,114,45,0,0,0,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,3,0,0,0,67,0,0,0,115,31,0,0, -+ 0,124,0,0,115,18,0,116,0,0,106,1,0,131,0,0, -+ 125,0,0,116,2,0,124,0,0,100,1,0,131,2,0,83, -+ 41,2,122,30,82,101,112,108,97,99,101,109,101,110,116,32, -+ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,100,105, -+ 114,46,105,0,64,0,0,41,3,114,4,0,0,0,218,6, -+ 103,101,116,99,119,100,114,44,0,0,0,41,1,114,36,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,11,95,112,97,116,104,95,105,115,100,105,114,92,0, -+ 0,0,115,6,0,0,0,0,2,6,1,12,1,114,47,0, -+ 0,0,105,182,1,0,0,99,3,0,0,0,0,0,0,0, -+ 6,0,0,0,17,0,0,0,67,0,0,0,115,193,0,0, -+ 0,100,1,0,106,0,0,124,0,0,116,1,0,124,0,0, -+ 131,1,0,131,2,0,125,3,0,116,2,0,106,3,0,124, -+ 3,0,116,2,0,106,4,0,116,2,0,106,5,0,66,116, -+ 2,0,106,6,0,66,124,2,0,100,2,0,64,131,3,0, -+ 125,4,0,121,61,0,116,7,0,106,8,0,124,4,0,100, -+ 3,0,131,2,0,143,20,0,125,5,0,124,5,0,106,9, -+ 0,124,1,0,131,1,0,1,87,100,4,0,81,82,88,116, -+ 2,0,106,10,0,124,3,0,124,0,0,131,2,0,1,87, -+ 110,59,0,4,116,11,0,107,10,0,114,188,0,1,1,1, -+ 121,17,0,116,2,0,106,12,0,124,3,0,131,1,0,1, -+ 87,110,18,0,4,116,11,0,107,10,0,114,180,0,1,1, -+ 1,89,110,1,0,88,130,0,0,89,110,1,0,88,100,4, -+ 0,83,41,5,122,162,66,101,115,116,45,101,102,102,111,114, -+ 116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,114, -+ 105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,97, -+ 116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,32, -+ 32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,116, -+ 111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,69, -+ 120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,111, -+ 110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,103, -+ 32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,112, -+ 111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,116, -+ 116,101,109,112,116,101,100,46,122,5,123,125,46,123,125,105, -+ 182,1,0,0,90,2,119,98,78,41,13,218,6,102,111,114, -+ 109,97,116,218,2,105,100,114,4,0,0,0,90,4,111,112, -+ 101,110,90,6,79,95,69,88,67,76,90,7,79,95,67,82, -+ 69,65,84,90,8,79,95,87,82,79,78,76,89,218,3,95, -+ 105,111,218,6,70,105,108,101,73,79,218,5,119,114,105,116, -+ 101,218,7,114,101,112,108,97,99,101,114,41,0,0,0,90, -+ 6,117,110,108,105,110,107,41,6,114,36,0,0,0,218,4, -+ 100,97,116,97,114,43,0,0,0,90,8,112,97,116,104,95, -+ 116,109,112,90,2,102,100,218,4,102,105,108,101,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,13,95,119, -+ 114,105,116,101,95,97,116,111,109,105,99,99,0,0,0,115, -+ 26,0,0,0,0,5,24,1,9,1,33,1,3,3,21,1, -+ 20,1,20,1,13,1,3,1,17,1,13,1,5,1,114,56, -+ 0,0,0,105,22,13,0,0,233,2,0,0,0,114,14,0, -+ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, -+ 97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112, -+ 121,122,4,46,112,121,99,78,218,12,111,112,116,105,109,105, -+ 122,97,116,105,111,110,99,2,0,0,0,1,0,0,0,11, -+ 0,0,0,6,0,0,0,67,0,0,0,115,87,1,0,0, -+ 124,1,0,100,1,0,107,9,0,114,76,0,116,0,0,106, -+ 1,0,100,2,0,116,2,0,131,2,0,1,124,2,0,100, -+ 1,0,107,9,0,114,58,0,100,3,0,125,3,0,116,3, -+ 0,124,3,0,131,1,0,130,1,0,124,1,0,114,70,0, -+ 100,4,0,110,3,0,100,5,0,125,2,0,116,4,0,124, -+ 0,0,131,1,0,92,2,0,125,4,0,125,5,0,124,5, -+ 0,106,5,0,100,6,0,131,1,0,92,3,0,125,6,0, -+ 125,7,0,125,8,0,116,6,0,106,7,0,106,8,0,125, -+ 9,0,124,9,0,100,1,0,107,8,0,114,154,0,116,9, -+ 0,100,7,0,131,1,0,130,1,0,100,4,0,106,10,0, -+ 124,6,0,114,172,0,124,6,0,110,3,0,124,8,0,124, -+ 7,0,124,9,0,103,3,0,131,1,0,125,10,0,124,2, -+ 0,100,1,0,107,8,0,114,241,0,116,6,0,106,11,0, -+ 106,12,0,100,8,0,107,2,0,114,229,0,100,4,0,125, -+ 2,0,110,12,0,116,6,0,106,11,0,106,12,0,125,2, -+ 0,116,13,0,124,2,0,131,1,0,125,2,0,124,2,0, -+ 100,4,0,107,3,0,114,63,1,124,2,0,106,14,0,131, -+ 0,0,115,42,1,116,15,0,100,9,0,106,16,0,124,2, -+ 0,131,1,0,131,1,0,130,1,0,100,10,0,106,16,0, -+ 124,10,0,116,17,0,124,2,0,131,3,0,125,10,0,116, -+ 18,0,124,4,0,116,19,0,124,10,0,116,20,0,100,8, -+ 0,25,23,131,3,0,83,41,11,97,254,2,0,0,71,105, -+ 118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32, -+ 97,32,46,112,121,32,102,105,108,101,44,32,114,101,116,117, -+ 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105, -+ 116,115,32,46,112,121,99,32,102,105,108,101,46,10,10,32, -+ 32,32,32,84,104,101,32,46,112,121,32,102,105,108,101,32, -+ 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, -+ 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, -+ 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,116,104,101,10,32,32,32,32, -+ 46,112,121,99,32,102,105,108,101,32,99,97,108,99,117,108, -+ 97,116,101,100,32,97,115,32,105,102,32,116,104,101,32,46, -+ 112,121,32,102,105,108,101,32,119,101,114,101,32,105,109,112, -+ 111,114,116,101,100,46,10,10,32,32,32,32,84,104,101,32, -+ 39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,112, -+ 97,114,97,109,101,116,101,114,32,99,111,110,116,114,111,108, -+ 115,32,116,104,101,32,112,114,101,115,117,109,101,100,32,111, -+ 112,116,105,109,105,122,97,116,105,111,110,32,108,101,118,101, -+ 108,32,111,102,10,32,32,32,32,116,104,101,32,98,121,116, -+ 101,99,111,100,101,32,102,105,108,101,46,32,73,102,32,39, -+ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,105,115, -+ 32,110,111,116,32,78,111,110,101,44,32,116,104,101,32,115, -+ 116,114,105,110,103,32,114,101,112,114,101,115,101,110,116,97, -+ 116,105,111,110,10,32,32,32,32,111,102,32,116,104,101,32, -+ 97,114,103,117,109,101,110,116,32,105,115,32,116,97,107,101, -+ 110,32,97,110,100,32,118,101,114,105,102,105,101,100,32,116, -+ 111,32,98,101,32,97,108,112,104,97,110,117,109,101,114,105, -+ 99,32,40,101,108,115,101,32,86,97,108,117,101,69,114,114, -+ 111,114,10,32,32,32,32,105,115,32,114,97,105,115,101,100, -+ 41,46,10,10,32,32,32,32,84,104,101,32,100,101,98,117, -+ 103,95,111,118,101,114,114,105,100,101,32,112,97,114,97,109, -+ 101,116,101,114,32,105,115,32,100,101,112,114,101,99,97,116, -+ 101,100,46,32,73,102,32,100,101,98,117,103,95,111,118,101, -+ 114,114,105,100,101,32,105,115,32,110,111,116,32,78,111,110, -+ 101,44,10,32,32,32,32,97,32,84,114,117,101,32,118,97, -+ 108,117,101,32,105,115,32,116,104,101,32,115,97,109,101,32, -+ 97,115,32,115,101,116,116,105,110,103,32,39,111,112,116,105, -+ 109,105,122,97,116,105,111,110,39,32,116,111,32,116,104,101, -+ 32,101,109,112,116,121,32,115,116,114,105,110,103,10,32,32, -+ 32,32,119,104,105,108,101,32,97,32,70,97,108,115,101,32, -+ 118,97,108,117,101,32,105,115,32,101,113,117,105,118,97,108, -+ 101,110,116,32,116,111,32,115,101,116,116,105,110,103,32,39, -+ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,116,111, -+ 32,39,49,39,46,10,10,32,32,32,32,73,102,32,115,121, -+ 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -+ 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, -+ 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, -+ 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, -+ 97,105,115,101,100,46,10,10,32,32,32,32,78,122,70,116, -+ 104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,100, -+ 101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,100, -+ 101,112,114,101,99,97,116,101,100,59,32,117,115,101,32,39, -+ 111,112,116,105,109,105,122,97,116,105,111,110,39,32,105,110, -+ 115,116,101,97,100,122,50,100,101,98,117,103,95,111,118,101, -+ 114,114,105,100,101,32,111,114,32,111,112,116,105,109,105,122, -+ 97,116,105,111,110,32,109,117,115,116,32,98,101,32,115,101, -+ 116,32,116,111,32,78,111,110,101,114,31,0,0,0,114,30, -+ 0,0,0,218,1,46,122,36,115,121,115,46,105,109,112,108, -+ 101,109,101,110,116,97,116,105,111,110,46,99,97,99,104,101, -+ 95,116,97,103,32,105,115,32,78,111,110,101,233,0,0,0, -+ 0,122,24,123,33,114,125,32,105,115,32,110,111,116,32,97, -+ 108,112,104,97,110,117,109,101,114,105,99,122,7,123,125,46, -+ 123,125,123,125,41,21,218,9,95,119,97,114,110,105,110,103, -+ 115,218,4,119,97,114,110,218,18,68,101,112,114,101,99,97, -+ 116,105,111,110,87,97,114,110,105,110,103,218,9,84,121,112, -+ 101,69,114,114,111,114,114,39,0,0,0,114,33,0,0,0, -+ 114,8,0,0,0,218,14,105,109,112,108,101,109,101,110,116, -+ 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103, -+ 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, -+ 69,114,114,111,114,114,27,0,0,0,218,5,102,108,97,103, -+ 115,218,8,111,112,116,105,109,105,122,101,218,3,115,116,114, -+ 218,7,105,115,97,108,110,117,109,218,10,86,97,108,117,101, -+ 69,114,114,111,114,114,48,0,0,0,218,4,95,79,80,84, -+ 114,29,0,0,0,218,8,95,80,89,67,65,67,72,69,218, -+ 17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, -+ 69,83,41,11,114,36,0,0,0,90,14,100,101,98,117,103, -+ 95,111,118,101,114,114,105,100,101,114,58,0,0,0,218,7, -+ 109,101,115,115,97,103,101,218,4,104,101,97,100,114,38,0, -+ 0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,114, -+ 101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,116, -+ 95,102,105,108,101,110,97,109,101,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,17,99,97,99,104,101,95, -+ 102,114,111,109,95,115,111,117,114,99,101,243,0,0,0,115, -+ 46,0,0,0,0,18,12,1,9,1,7,1,12,1,6,1, -+ 12,1,18,1,18,1,24,1,12,1,12,1,12,1,36,1, -+ 12,1,18,1,9,2,12,1,12,1,12,1,12,1,21,1, -+ 21,1,114,80,0,0,0,99,1,0,0,0,0,0,0,0, -+ 8,0,0,0,5,0,0,0,67,0,0,0,115,62,1,0, -+ 0,116,0,0,106,1,0,106,2,0,100,1,0,107,8,0, -+ 114,30,0,116,3,0,100,2,0,131,1,0,130,1,0,116, -+ 4,0,124,0,0,131,1,0,92,2,0,125,1,0,125,2, -+ 0,116,4,0,124,1,0,131,1,0,92,2,0,125,1,0, -+ 125,3,0,124,3,0,116,5,0,107,3,0,114,102,0,116, -+ 6,0,100,3,0,106,7,0,116,5,0,124,0,0,131,2, -+ 0,131,1,0,130,1,0,124,2,0,106,8,0,100,4,0, -+ 131,1,0,125,4,0,124,4,0,100,11,0,107,7,0,114, -+ 153,0,116,6,0,100,7,0,106,7,0,124,2,0,131,1, -+ 0,131,1,0,130,1,0,110,125,0,124,4,0,100,6,0, -+ 107,2,0,114,22,1,124,2,0,106,9,0,100,4,0,100, -+ 5,0,131,2,0,100,12,0,25,125,5,0,124,5,0,106, -+ 10,0,116,11,0,131,1,0,115,223,0,116,6,0,100,8, -+ 0,106,7,0,116,11,0,131,1,0,131,1,0,130,1,0, -+ 124,5,0,116,12,0,116,11,0,131,1,0,100,1,0,133, -+ 2,0,25,125,6,0,124,6,0,106,13,0,131,0,0,115, -+ 22,1,116,6,0,100,9,0,106,7,0,124,5,0,131,1, -+ 0,131,1,0,130,1,0,124,2,0,106,14,0,100,4,0, -+ 131,1,0,100,10,0,25,125,7,0,116,15,0,124,1,0, -+ 124,7,0,116,16,0,100,10,0,25,23,131,2,0,83,41, -+ 13,97,110,1,0,0,71,105,118,101,110,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,32, -+ 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, -+ 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, -+ 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, -+ 46,112,121,99,32,102,105,108,101,32,100,111,101,115,32,110, -+ 111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116, -+ 59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,101, -+ 116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,116, -+ 111,10,32,32,32,32,116,104,101,32,46,112,121,32,102,105, -+ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,116,111, -+ 32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116, -+ 104,101,32,46,112,121,99,32,102,105,108,101,46,32,32,73, -+ 102,32,112,97,116,104,32,100,111,101,115,10,32,32,32,32, -+ 110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,80, -+ 69,80,32,51,49,52,55,47,52,56,56,32,102,111,114,109, -+ 97,116,44,32,86,97,108,117,101,69,114,114,111,114,32,119, -+ 105,108,108,32,98,101,32,114,97,105,115,101,100,46,32,73, -+ 102,10,32,32,32,32,115,121,115,46,105,109,112,108,101,109, -+ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, -+ 97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32, -+ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, -+ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, -+ 32,32,32,32,78,122,36,115,121,115,46,105,109,112,108,101, -+ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, -+ 116,97,103,32,105,115,32,78,111,110,101,122,37,123,125,32, -+ 110,111,116,32,98,111,116,116,111,109,45,108,101,118,101,108, -+ 32,100,105,114,101,99,116,111,114,121,32,105,110,32,123,33, -+ 114,125,114,59,0,0,0,114,57,0,0,0,233,3,0,0, -+ 0,122,33,101,120,112,101,99,116,101,100,32,111,110,108,121, -+ 32,50,32,111,114,32,51,32,100,111,116,115,32,105,110,32, -+ 123,33,114,125,122,57,111,112,116,105,109,105,122,97,116,105, -+ 111,110,32,112,111,114,116,105,111,110,32,111,102,32,102,105, -+ 108,101,110,97,109,101,32,100,111,101,115,32,110,111,116,32, -+ 115,116,97,114,116,32,119,105,116,104,32,123,33,114,125,122, -+ 52,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, -+ 118,101,108,32,123,33,114,125,32,105,115,32,110,111,116,32, -+ 97,110,32,97,108,112,104,97,110,117,109,101,114,105,99,32, -+ 118,97,108,117,101,114,60,0,0,0,62,2,0,0,0,114, -+ 57,0,0,0,114,81,0,0,0,233,254,255,255,255,41,17, -+ 114,8,0,0,0,114,65,0,0,0,114,66,0,0,0,114, -+ 67,0,0,0,114,39,0,0,0,114,74,0,0,0,114,72, -+ 0,0,0,114,48,0,0,0,218,5,99,111,117,110,116,114, -+ 35,0,0,0,114,10,0,0,0,114,73,0,0,0,114,32, -+ 0,0,0,114,71,0,0,0,218,9,112,97,114,116,105,116, -+ 105,111,110,114,29,0,0,0,218,15,83,79,85,82,67,69, -+ 95,83,85,70,70,73,88,69,83,41,8,114,36,0,0,0, -+ 114,77,0,0,0,90,16,112,121,99,97,99,104,101,95,102, -+ 105,108,101,110,97,109,101,90,7,112,121,99,97,99,104,101, -+ 90,9,100,111,116,95,99,111,117,110,116,114,58,0,0,0, -+ 90,9,111,112,116,95,108,101,118,101,108,90,13,98,97,115, -+ 101,95,102,105,108,101,110,97,109,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,115,111,117,114,99, -+ 101,95,102,114,111,109,95,99,97,99,104,101,31,1,0,0, -+ 115,44,0,0,0,0,9,18,1,12,1,18,1,18,1,12, -+ 1,9,1,15,1,15,1,12,1,9,1,15,1,12,1,22, -+ 1,15,1,9,1,12,1,22,1,12,1,9,1,12,1,19, -+ 1,114,86,0,0,0,99,1,0,0,0,0,0,0,0,5, -+ 0,0,0,12,0,0,0,67,0,0,0,115,164,0,0,0, -+ 116,0,0,124,0,0,131,1,0,100,1,0,107,2,0,114, -+ 22,0,100,2,0,83,124,0,0,106,1,0,100,3,0,131, - 1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,1, -- 0,124,3,0,102,2,0,83,120,69,0,116,4,0,124,0, -- 0,131,1,0,68,93,55,0,125,4,0,124,4,0,116,1, -- 0,107,6,0,114,65,0,124,0,0,106,5,0,124,4,0, -- 100,2,0,100,1,0,131,1,1,92,2,0,125,1,0,125, -- 3,0,124,1,0,124,3,0,102,2,0,83,113,65,0,87, -- 100,3,0,124,0,0,102,2,0,83,41,4,122,32,82,101, ++ 0,100,26,0,100,27,0,132,0,0,90,12,0,100,28,0, ++ 100,29,0,132,0,0,90,13,0,101,14,0,101,12,0,106, ++ 15,0,131,1,0,90,16,0,71,100,30,0,100,31,0,132, ++ 0,0,100,31,0,131,2,0,90,17,0,105,0,0,90,18, ++ 0,105,0,0,90,19,0,71,100,32,0,100,33,0,132,0, ++ 0,100,33,0,101,20,0,131,3,0,90,21,0,71,100,34, ++ 0,100,35,0,132,0,0,100,35,0,131,2,0,90,22,0, ++ 71,100,36,0,100,37,0,132,0,0,100,37,0,131,2,0, ++ 90,23,0,71,100,38,0,100,39,0,132,0,0,100,39,0, ++ 131,2,0,90,24,0,100,40,0,100,41,0,132,0,0,90, ++ 25,0,100,42,0,100,43,0,132,0,0,90,26,0,100,44, ++ 0,100,45,0,132,0,0,90,27,0,100,46,0,106,28,0, ++ 100,47,0,100,48,0,131,2,0,100,49,0,23,90,29,0, ++ 101,30,0,106,31,0,101,29,0,100,48,0,131,2,0,90, ++ 32,0,100,50,0,90,33,0,100,51,0,103,1,0,90,34, ++ 0,100,52,0,103,1,0,90,35,0,100,53,0,103,1,0, ++ 90,36,0,100,54,0,100,55,0,100,56,0,132,1,0,90, ++ 37,0,100,57,0,100,58,0,132,0,0,90,38,0,100,59, ++ 0,100,60,0,132,0,0,90,39,0,100,61,0,100,62,0, ++ 132,0,0,90,40,0,100,63,0,100,64,0,100,65,0,100, ++ 66,0,132,0,1,90,41,0,100,67,0,100,68,0,132,0, ++ 0,90,42,0,100,69,0,100,70,0,132,0,0,90,43,0, ++ 100,71,0,100,72,0,132,0,0,90,44,0,100,73,0,100, ++ 74,0,132,0,0,90,45,0,100,75,0,100,76,0,132,0, ++ 0,90,46,0,100,54,0,100,54,0,100,54,0,100,77,0, ++ 100,78,0,132,3,0,90,47,0,100,54,0,100,54,0,100, ++ 54,0,100,79,0,100,80,0,132,3,0,90,48,0,100,81, ++ 0,100,81,0,100,82,0,100,83,0,132,2,0,90,49,0, ++ 100,84,0,100,85,0,132,0,0,90,50,0,100,86,0,100, ++ 87,0,132,0,0,90,51,0,71,100,88,0,100,89,0,132, ++ 0,0,100,89,0,131,2,0,90,52,0,71,100,90,0,100, ++ 91,0,132,0,0,100,91,0,131,2,0,90,53,0,100,92, ++ 0,100,54,0,100,93,0,100,54,0,100,94,0,100,95,0, + 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, +- 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, +- 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, +- 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, +- 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,100, +- 53,0,100,103,0,100,104,0,132,1,0,90,60,0,71,100, +- 105,0,100,106,0,132,0,0,100,106,0,131,2,0,90,61, +- 0,71,100,107,0,100,108,0,132,0,0,100,108,0,131,2, +- 0,90,62,0,71,100,109,0,100,110,0,132,0,0,100,110, +- 0,131,2,0,90,63,0,71,100,111,0,100,112,0,132,0, +- 0,100,112,0,131,2,0,90,64,0,71,100,113,0,100,114, +- 0,132,0,0,100,114,0,101,64,0,131,3,0,90,65,0, +- 71,100,115,0,100,116,0,132,0,0,100,116,0,131,2,0, +- 90,66,0,71,100,117,0,100,118,0,132,0,0,100,118,0, +- 101,66,0,101,65,0,131,4,0,90,67,0,71,100,119,0, +- 100,120,0,132,0,0,100,120,0,101,66,0,101,64,0,131, +- 4,0,90,68,0,103,0,0,90,69,0,71,100,121,0,100, +- 122,0,132,0,0,100,122,0,131,2,0,90,70,0,71,100, +- 123,0,100,124,0,132,0,0,100,124,0,131,2,0,90,71, +- 0,71,100,125,0,100,126,0,132,0,0,100,126,0,131,2, +- 0,90,72,0,71,100,127,0,100,128,0,132,0,0,100,128, +- 0,131,2,0,90,73,0,71,100,129,0,100,130,0,132,0, +- 0,100,130,0,131,2,0,90,74,0,71,100,131,0,100,132, +- 0,132,0,0,100,132,0,131,2,0,90,75,0,100,133,0, +- 100,134,0,132,0,0,90,76,0,100,135,0,100,136,0,132, +- 0,0,90,77,0,100,53,0,100,137,0,100,138,0,132,1, +- 0,90,78,0,100,139,0,100,140,0,132,0,0,90,79,0, +- 100,141,0,90,80,0,101,80,0,100,142,0,23,90,81,0, +- 100,143,0,100,144,0,132,0,0,90,82,0,100,145,0,100, +- 146,0,132,0,0,90,83,0,100,53,0,100,80,0,100,147, +- 0,100,148,0,132,2,0,90,84,0,100,149,0,100,150,0, +- 132,0,0,90,85,0,100,151,0,100,152,0,132,0,0,90, +- 86,0,100,153,0,100,154,0,132,0,0,90,87,0,100,53, +- 0,100,53,0,102,0,0,100,80,0,100,155,0,100,156,0, +- 132,4,0,90,88,0,100,157,0,100,158,0,132,0,0,90, +- 89,0,100,159,0,100,160,0,132,0,0,90,90,0,100,161, +- 0,100,162,0,132,0,0,90,91,0,100,53,0,83,41,164, ++ 54,0,100,96,0,100,54,0,100,97,0,101,56,0,100,98, ++ 0,100,99,0,132,1,2,90,57,0,100,54,0,100,54,0, ++ 100,100,0,100,101,0,132,2,0,90,58,0,71,100,102,0, ++ 100,103,0,132,0,0,100,103,0,131,2,0,90,59,0,100, ++ 54,0,100,104,0,100,105,0,132,1,0,90,60,0,71,100, ++ 106,0,100,107,0,132,0,0,100,107,0,131,2,0,90,61, ++ 0,71,100,108,0,100,109,0,132,0,0,100,109,0,131,2, ++ 0,90,62,0,71,100,110,0,100,111,0,132,0,0,100,111, ++ 0,131,2,0,90,63,0,71,100,112,0,100,113,0,132,0, ++ 0,100,113,0,131,2,0,90,64,0,71,100,114,0,100,115, ++ 0,132,0,0,100,115,0,101,64,0,131,3,0,90,65,0, ++ 71,100,116,0,100,117,0,132,0,0,100,117,0,131,2,0, ++ 90,66,0,71,100,118,0,100,119,0,132,0,0,100,119,0, ++ 101,66,0,101,65,0,131,4,0,90,67,0,71,100,120,0, ++ 100,121,0,132,0,0,100,121,0,101,66,0,101,64,0,131, ++ 4,0,90,68,0,103,0,0,90,69,0,71,100,122,0,100, ++ 123,0,132,0,0,100,123,0,131,2,0,90,70,0,71,100, ++ 124,0,100,125,0,132,0,0,100,125,0,131,2,0,90,71, ++ 0,71,100,126,0,100,127,0,132,0,0,100,127,0,131,2, ++ 0,90,72,0,71,100,128,0,100,129,0,132,0,0,100,129, ++ 0,131,2,0,90,73,0,71,100,130,0,100,131,0,132,0, ++ 0,100,131,0,131,2,0,90,74,0,71,100,132,0,100,133, ++ 0,132,0,0,100,133,0,131,2,0,90,75,0,100,134,0, ++ 100,135,0,132,0,0,90,76,0,100,136,0,100,137,0,132, ++ 0,0,90,77,0,100,54,0,100,138,0,100,139,0,132,1, ++ 0,90,78,0,100,140,0,100,141,0,132,0,0,90,79,0, ++ 100,142,0,90,80,0,101,80,0,100,143,0,23,90,81,0, ++ 100,144,0,100,145,0,132,0,0,90,82,0,100,146,0,100, ++ 147,0,132,0,0,90,83,0,100,54,0,100,81,0,100,148, ++ 0,100,149,0,132,2,0,90,84,0,100,150,0,100,151,0, ++ 132,0,0,90,85,0,100,152,0,100,153,0,132,0,0,90, ++ 86,0,100,154,0,100,155,0,132,0,0,90,87,0,100,54, ++ 0,100,54,0,102,0,0,100,81,0,100,156,0,100,157,0, ++ 132,4,0,90,88,0,100,158,0,100,159,0,132,0,0,90, ++ 89,0,100,160,0,100,161,0,132,0,0,90,90,0,100,162, ++ 0,100,163,0,132,0,0,90,91,0,100,54,0,83,41,165, + 97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, + 114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101, +@@ -102,2102 +102,3127 @@ + 32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118, + 101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109, + 111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99, +- 121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0, +- 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, +- 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, +- 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, +- 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, +- 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, +- 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, +- 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, +- 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, +- 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, +- 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, +- 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, +- 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4, +- 0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101, +- 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, +- 116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95, +- 99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122, +- 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, +- 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, +- 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, +- 100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32, +- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, +- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, +- 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0, +- 115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8, +- 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, +- 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, +- 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, +- 83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114, +- 101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0, +- 0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99, +- 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, +- 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131, +- 1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131, +- 2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97, +- 32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32, +- 116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110, +- 46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0, +- 0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116, +- 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7, +- 95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0, +- 0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0, +- 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, +- 0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0, +- 83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, +- 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, +- 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, +- 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, +- 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, +- 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, +- 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, +- 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, +- 0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1, +- 0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1, +- 0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101, +- 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, +- 46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0, +- 0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1, +- 0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0, +- 145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6, +- 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, +- 97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112, +- 97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0, +- 0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104, +- 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, +- 108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116, +- 104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112, +- 97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95, +- 106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15, +- 1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, +- 0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0, +- 116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114, +- 52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3, +- 0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0, +- 102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0, +- 68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0, +- 114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100, +- 1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1, +- 0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124, +- 0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99, +- 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, +- 104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90, +- 8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108, +- 101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116, +- 105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115, +- 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, +- 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, +- 105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112, +- 108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1, +- 24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0, +- 0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, +- 0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1, +- 0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116, +- 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, +- 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, +- 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, +- 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, +- 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, +- 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, +- 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, +- 116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0, +- 0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95, +- 112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0, +- 0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0, +- 0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58, +- 0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125, +- 2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0, +- 1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106, +- 2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122, +- 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, +- 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, +- 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, +- 101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218, +- 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100, +- 101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9, +- 115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95, +- 105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0, +- 115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114, +- 43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, +- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82, +- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, +- 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, +- 128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,12,95,112,97,116,104,95,105,115,102,105,108,101,87,0, +- 0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1, +- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, +- 0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0, +- 0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0, +- 124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101, - 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, -- 46,112,97,116,104,46,115,112,108,105,116,40,41,46,233,1, -- 0,0,0,90,8,109,97,120,115,112,108,105,116,218,0,41, -- 6,218,3,108,101,110,114,21,0,0,0,218,10,114,112,97, -- 114,116,105,116,105,111,110,114,25,0,0,0,218,8,114,101, -- 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, -- 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, -- 218,4,116,97,105,108,114,16,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, -- 104,95,115,112,108,105,116,56,0,0,0,115,16,0,0,0, -- 0,2,18,1,24,1,10,1,19,1,12,1,27,1,14,1, -- 114,38,0,0,0,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,116, -- 0,0,106,1,0,124,0,0,131,1,0,83,41,1,122,126, -- 83,116,97,116,32,116,104,101,32,112,97,116,104,46,10,10, -- 32,32,32,32,77,97,100,101,32,97,32,115,101,112,97,114, -- 97,116,101,32,102,117,110,99,116,105,111,110,32,116,111,32, -- 109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116, -- 111,32,111,118,101,114,114,105,100,101,32,105,110,32,101,120, -- 112,101,114,105,109,101,110,116,115,10,32,32,32,32,40,101, -- 46,103,46,32,99,97,99,104,101,32,115,116,97,116,32,114, -- 101,115,117,108,116,115,41,46,10,10,32,32,32,32,41,2, -- 114,3,0,0,0,90,4,115,116,97,116,41,1,114,35,0, +- 46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0, +- 0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100, +- 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, +- 116,104,95,105,115,100,105,114,92,0,0,0,115,6,0,0, +- 0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0, +- 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, +- 0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0, +- 0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0, +- 125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106, +- 4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66, +- 124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0, +- 116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143, +- 20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1, +- 0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3, +- 0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0, +- 107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106, +- 12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11, +- 0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130, +- 0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66, +- 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, +- 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, +- 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, +- 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, +- 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, +- 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, +- 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, +- 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, +- 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, +- 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, +- 46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119, +- 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, +- 114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69, +- 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, +- 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, +- 101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108, +- 97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107, +- 41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0, +- 0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100, +- 218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116, +- 111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24, +- 1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3, +- 1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0, +- 0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0, +- 0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100, +- 3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116, +- 0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1, +- 0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0, +- 131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0, +- 0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0, +- 1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32, +- 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, +- 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, +- 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, +- 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, +- 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, +- 100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116, +- 114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97, +- 116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117, +- 112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108, +- 100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,5,95,119,114,97,112,121,0,0,0, +- 115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0, +- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,116, +- 1,0,131,1,0,124,0,0,131,1,0,83,41,1,78,41, +- 2,218,4,116,121,112,101,114,7,0,0,0,41,1,218,4, +- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, +- 129,0,0,0,115,2,0,0,0,0,1,114,68,0,0,0, ++ 121,103,119,105,110,218,6,100,97,114,119,105,110,218,3,105, ++ 111,115,99,0,0,0,0,0,0,0,0,1,0,0,0,2, ++ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, ++ 1,0,106,2,0,116,3,0,131,1,0,114,33,0,100,1, ++ 0,100,2,0,132,0,0,125,0,0,110,12,0,100,3,0, ++ 100,2,0,132,0,0,125,0,0,124,0,0,83,41,4,78, + 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,58,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, +- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, +- 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, +- 100,8,0,83,41,9,218,13,95,77,97,110,97,103,101,82, +- 101,108,111,97,100,122,63,77,97,110,97,103,101,115,32,116, +- 104,101,32,112,111,115,115,105,98,108,101,32,99,108,101,97, +- 110,45,117,112,32,111,102,32,115,121,115,46,109,111,100,117, +- 108,101,115,32,102,111,114,32,108,111,97,100,95,109,111,100, +- 117,108,101,40,41,46,99,2,0,0,0,0,0,0,0,2, ++ 0,83,0,0,0,115,13,0,0,0,100,1,0,116,0,0, ++ 106,1,0,107,6,0,83,41,2,122,53,84,114,117,101,32, ++ 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, ++ 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, ++ 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, ++ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, ++ 75,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, ++ 110,169,0,114,5,0,0,0,114,5,0,0,0,250,29,60, ++ 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, ++ 46,95,98,111,111,116,115,116,114,97,112,62,218,11,95,114, ++ 101,108,97,120,95,99,97,115,101,30,0,0,0,115,2,0, ++ 0,0,0,2,122,37,95,109,97,107,101,95,114,101,108,97, ++ 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, ++ 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, ++ 115,4,0,0,0,100,1,0,83,41,2,122,53,84,114,117, ++ 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, ++ 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, ++ 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, ++ 121,46,70,114,5,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,7,0,0, ++ 0,34,0,0,0,115,2,0,0,0,0,2,41,4,218,3, ++ 115,121,115,218,8,112,108,97,116,102,111,114,109,218,10,115, ++ 116,97,114,116,115,119,105,116,104,218,27,95,67,65,83,69, ++ 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, ++ 84,70,79,82,77,83,41,1,114,7,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,16,95,109, ++ 97,107,101,95,114,101,108,97,120,95,99,97,115,101,28,0, ++ 0,0,115,8,0,0,0,0,1,18,1,15,4,12,3,114, ++ 12,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, ++ 0,3,0,0,0,67,0,0,0,115,26,0,0,0,116,0, ++ 0,124,0,0,131,1,0,100,1,0,64,106,1,0,100,2, ++ 0,100,3,0,131,2,0,83,41,4,122,42,67,111,110,118, ++ 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, ++ 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, ++ 110,100,105,97,110,46,108,3,0,0,0,255,127,255,127,3, ++ 0,233,4,0,0,0,218,6,108,105,116,116,108,101,41,2, ++ 218,3,105,110,116,218,8,116,111,95,98,121,116,101,115,41, ++ 1,218,1,120,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,7,95,119,95,108,111,110,103,40,0,0,0, ++ 115,2,0,0,0,0,2,114,18,0,0,0,99,1,0,0, ++ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, ++ 0,115,16,0,0,0,116,0,0,106,1,0,124,0,0,100, ++ 1,0,131,2,0,83,41,2,122,47,67,111,110,118,101,114, ++ 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, ++ 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, ++ 32,105,110,116,101,103,101,114,46,114,14,0,0,0,41,2, ++ 114,15,0,0,0,218,10,102,114,111,109,95,98,121,116,101, ++ 115,41,1,90,9,105,110,116,95,98,121,116,101,115,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,7,95, ++ 114,95,108,111,110,103,45,0,0,0,115,2,0,0,0,0, ++ 2,114,20,0,0,0,99,0,0,0,0,0,0,0,0,1, ++ 0,0,0,3,0,0,0,71,0,0,0,115,26,0,0,0, ++ 116,0,0,106,1,0,100,1,0,100,2,0,132,0,0,124, ++ 0,0,68,131,1,0,131,1,0,83,41,3,122,31,82,101, ++ 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, ++ 46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, ++ 0,0,115,37,0,0,0,103,0,0,124,0,0,93,27,0, ++ 125,1,0,124,1,0,114,6,0,124,1,0,106,0,0,116, ++ 1,0,131,1,0,145,2,0,113,6,0,83,114,5,0,0, ++ 0,41,2,218,6,114,115,116,114,105,112,218,15,112,97,116, ++ 104,95,115,101,112,97,114,97,116,111,114,115,41,2,218,2, ++ 46,48,218,4,112,97,114,116,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,250,10,60,108,105,115,116,99,111, ++ 109,112,62,52,0,0,0,115,2,0,0,0,9,1,122,30, ++ 95,112,97,116,104,95,106,111,105,110,46,60,108,111,99,97, ++ 108,115,62,46,60,108,105,115,116,99,111,109,112,62,41,2, ++ 218,8,112,97,116,104,95,115,101,112,218,4,106,111,105,110, ++ 41,1,218,10,112,97,116,104,95,112,97,114,116,115,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, ++ 112,97,116,104,95,106,111,105,110,50,0,0,0,115,4,0, ++ 0,0,0,2,15,1,114,29,0,0,0,99,1,0,0,0, ++ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, ++ 115,134,0,0,0,116,0,0,116,1,0,131,1,0,100,1, ++ 0,107,2,0,114,52,0,124,0,0,106,2,0,116,3,0, ++ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, ++ 1,0,124,3,0,102,2,0,83,120,69,0,116,4,0,124, ++ 0,0,131,1,0,68,93,55,0,125,4,0,124,4,0,116, ++ 1,0,107,6,0,114,65,0,124,0,0,106,5,0,124,4, ++ 0,100,2,0,100,1,0,131,1,1,92,2,0,125,1,0, ++ 125,3,0,124,1,0,124,3,0,102,2,0,83,113,65,0, ++ 87,100,3,0,124,0,0,102,2,0,83,41,4,122,32,82, ++ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, ++ 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, ++ 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, ++ 41,6,218,3,108,101,110,114,22,0,0,0,218,10,114,112, ++ 97,114,116,105,116,105,111,110,114,26,0,0,0,218,8,114, ++ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, ++ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, ++ 95,218,4,116,97,105,108,114,17,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,11,95,112,97, ++ 116,104,95,115,112,108,105,116,56,0,0,0,115,16,0,0, ++ 0,0,2,18,1,24,1,10,1,19,1,12,1,27,1,14, ++ 1,114,39,0,0,0,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, +- 124,1,0,124,0,0,95,0,0,100,0,0,83,41,1,78, +- 41,1,218,5,95,110,97,109,101,41,2,218,4,115,101,108, +- 102,114,67,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,8,95,95,105,110,105,116,95,95,141, +- 0,0,0,115,2,0,0,0,0,1,122,22,95,77,97,110, +- 97,103,101,82,101,108,111,97,100,46,95,95,105,110,105,116, +- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,25,0,0,0,124,0,0,106, +- 0,0,116,1,0,106,2,0,107,6,0,124,0,0,95,3, +- 0,100,0,0,83,41,1,78,41,4,114,70,0,0,0,114, +- 7,0,0,0,218,7,109,111,100,117,108,101,115,218,10,95, +- 105,115,95,114,101,108,111,97,100,41,1,114,71,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 9,95,95,101,110,116,101,114,95,95,144,0,0,0,115,2, +- 0,0,0,0,1,122,23,95,77,97,110,97,103,101,82,101, +- 108,111,97,100,46,95,95,101,110,116,101,114,95,95,99,1, +- 0,0,0,0,0,0,0,2,0,0,0,12,0,0,0,71, +- 0,0,0,115,80,0,0,0,116,0,0,100,1,0,100,2, +- 0,132,0,0,124,1,0,68,131,1,0,131,1,0,114,76, +- 0,124,0,0,106,1,0,12,114,76,0,121,17,0,116,2, +- 0,106,3,0,124,0,0,106,4,0,61,87,113,76,0,4, +- 116,5,0,107,10,0,114,72,0,1,1,1,89,113,76,0, +- 88,110,0,0,100,0,0,83,41,3,78,99,1,0,0,0, +- 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, +- 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, +- 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, +- 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,218, +- 3,97,114,103,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,250,9,60,103,101,110,101,120,112,114,62,148,0, +- 0,0,115,2,0,0,0,6,0,122,41,95,77,97,110,97, +- 103,101,82,101,108,111,97,100,46,95,95,101,120,105,116,95, +- 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, +- 120,112,114,62,41,6,218,3,97,110,121,114,74,0,0,0, +- 114,7,0,0,0,114,73,0,0,0,114,70,0,0,0,218, +- 8,75,101,121,69,114,114,111,114,41,2,114,71,0,0,0, +- 218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,8,95,95,101,120,105,116,95,95,147, +- 0,0,0,115,10,0,0,0,0,1,35,1,3,1,17,1, +- 13,1,122,22,95,77,97,110,97,103,101,82,101,108,111,97, +- 100,46,95,95,101,120,105,116,95,95,78,41,7,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,114,72,0,0,0,114,75,0,0,0,114,81,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,69,0,0,0,137,0,0,0,115,8,0, +- 0,0,12,2,6,2,12,3,12,3,114,69,0,0,0,99, +- 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, +- 64,0,0,0,115,16,0,0,0,101,0,0,90,1,0,100, +- 0,0,90,2,0,100,1,0,83,41,2,218,14,95,68,101, +- 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,57, +- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,218,10,95,112,97,116,104,95,115,116,97,116,68,0,0, -- 0,115,2,0,0,0,0,7,114,39,0,0,0,99,2,0, -- 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, -- 0,0,115,58,0,0,0,121,16,0,116,0,0,124,0,0, -- 131,1,0,125,2,0,87,110,22,0,4,116,1,0,107,10, -- 0,114,40,0,1,1,1,100,1,0,83,89,110,1,0,88, -- 124,2,0,106,2,0,100,2,0,64,124,1,0,107,2,0, -- 83,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, -- 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, -- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, -- 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,39, -- 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, -- 95,109,111,100,101,41,3,114,35,0,0,0,218,4,109,111, -- 100,101,90,9,115,116,97,116,95,105,110,102,111,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,112, -- 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, -- 78,0,0,0,115,10,0,0,0,0,2,3,1,16,1,13, -- 1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,0, -- 0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,0, -- 0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,41, -- 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, -- 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, -- 101,46,105,0,128,0,0,41,1,114,43,0,0,0,41,1, -- 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, -- 108,101,87,0,0,0,115,2,0,0,0,0,2,114,44,0, -- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, -- 0,0,0,67,0,0,0,115,31,0,0,0,124,0,0,115, -- 18,0,116,0,0,106,1,0,131,0,0,125,0,0,116,2, -- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, -- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, -- 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, -- 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, -- 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, -- 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, -- 0,0,0,2,6,1,12,1,114,46,0,0,0,105,182,1, -- 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, -- 0,0,0,67,0,0,0,115,193,0,0,0,100,1,0,106, -- 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, -- 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, -- 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, -- 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,61, -- 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, -- 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, -- 1,0,1,87,100,4,0,81,82,88,116,2,0,106,10,0, -- 124,3,0,124,0,0,131,2,0,1,87,110,59,0,4,116, -- 11,0,107,10,0,114,188,0,1,1,1,121,17,0,116,2, -- 0,106,12,0,124,3,0,131,1,0,1,87,110,18,0,4, -- 116,11,0,107,10,0,114,180,0,1,1,1,89,110,1,0, -- 88,130,0,0,89,110,1,0,88,100,4,0,83,41,5,122, -- 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110, -- 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100, -- 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116, -- 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101, -- 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110, -- 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115, -- 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114, -- 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116, -- 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121, -- 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116, -- 101,100,46,122,5,123,125,46,123,125,105,182,1,0,0,90, -- 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, -- 105,100,114,3,0,0,0,90,4,111,112,101,110,90,6,79, -- 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, -- 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, -- 105,108,101,73,79,218,5,119,114,105,116,101,218,7,114,101, -- 112,108,97,99,101,114,40,0,0,0,90,6,117,110,108,105, -- 110,107,41,6,114,35,0,0,0,218,4,100,97,116,97,114, -- 42,0,0,0,90,8,112,97,116,104,95,116,109,112,90,2, -- 102,100,218,4,102,105,108,101,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,13,95,119,114,105,116,101,95, -- 97,116,111,109,105,99,99,0,0,0,115,26,0,0,0,0, -- 5,24,1,9,1,33,1,3,3,21,1,20,1,20,1,13, -- 1,3,1,17,1,13,1,5,1,114,55,0,0,0,105,22, -- 13,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, +- 0,114,82,0,0,0,162,0,0,0,115,2,0,0,0,12, +- 1,114,82,0,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,64,0,0,0,115,82,0,0,0, +- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, +- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, +- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, +- 132,0,0,90,6,0,100,8,0,100,9,0,132,0,0,90, +- 7,0,100,10,0,100,11,0,132,0,0,90,8,0,100,12, +- 0,83,41,13,218,11,95,77,111,100,117,108,101,76,111,99, +- 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, +- 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, +- 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, +- 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, +- 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, +- 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, +- 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, +- 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, +- 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, +- 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, +- 0,115,70,0,0,0,116,0,0,106,1,0,131,0,0,124, +- 0,0,95,2,0,116,0,0,106,1,0,131,0,0,124,0, +- 0,95,3,0,124,1,0,124,0,0,95,4,0,100,0,0, +- 124,0,0,95,5,0,100,1,0,124,0,0,95,6,0,100, +- 1,0,124,0,0,95,7,0,100,0,0,83,41,2,78,233, +- 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, +- 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, +- 108,111,99,107,218,6,119,97,107,101,117,112,114,67,0,0, +- 0,218,5,111,119,110,101,114,218,5,99,111,117,110,116,218, +- 7,119,97,105,116,101,114,115,41,2,114,71,0,0,0,114, +- 67,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,172,0,0,0,115,12,0,0, +- 0,0,1,15,1,15,1,9,1,9,1,9,1,122,20,95, +- 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, +- 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, +- 2,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, +- 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,125, +- 2,0,120,59,0,116,3,0,106,4,0,124,2,0,131,1, +- 0,125,3,0,124,3,0,100,0,0,107,8,0,114,55,0, +- 100,1,0,83,124,3,0,106,2,0,125,2,0,124,2,0, +- 124,1,0,107,2,0,114,24,0,100,2,0,83,113,24,0, +- 100,0,0,83,41,3,78,70,84,41,5,114,85,0,0,0, +- 218,9,103,101,116,95,105,100,101,110,116,114,88,0,0,0, +- 218,12,95,98,108,111,99,107,105,110,103,95,111,110,218,3, +- 103,101,116,41,4,114,71,0,0,0,218,2,109,101,218,3, +- 116,105,100,114,86,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,12,104,97,115,95,100,101,97, +- 100,108,111,99,107,180,0,0,0,115,18,0,0,0,0,2, +- 12,1,9,1,3,1,15,1,12,1,4,1,9,1,12,1, +- 122,24,95,77,111,100,117,108,101,76,111,99,107,46,104,97, +- 115,95,100,101,97,100,108,111,99,107,99,1,0,0,0,0, +- 0,0,0,2,0,0,0,17,0,0,0,67,0,0,0,115, +- 214,0,0,0,116,0,0,106,1,0,131,0,0,125,1,0, +- 124,0,0,116,2,0,124,1,0,60,122,177,0,120,170,0, +- 124,0,0,106,3,0,143,130,0,1,124,0,0,106,4,0, +- 100,1,0,107,2,0,115,68,0,124,0,0,106,5,0,124, +- 1,0,107,2,0,114,96,0,124,1,0,124,0,0,95,5, +- 0,124,0,0,4,106,4,0,100,2,0,55,2,95,4,0, +- 100,3,0,83,124,0,0,106,6,0,131,0,0,114,127,0, +- 116,7,0,100,4,0,124,0,0,22,131,1,0,130,1,0, +- 110,0,0,124,0,0,106,8,0,106,9,0,100,5,0,131, +- 1,0,114,163,0,124,0,0,4,106,10,0,100,2,0,55, +- 2,95,10,0,110,0,0,87,100,6,0,81,88,124,0,0, +- 106,8,0,106,9,0,131,0,0,1,124,0,0,106,8,0, +- 106,11,0,131,0,0,1,113,28,0,87,100,6,0,116,2, +- 0,124,1,0,61,88,100,6,0,83,41,7,122,185,10,32, +- 32,32,32,32,32,32,32,65,99,113,117,105,114,101,32,116, +- 104,101,32,109,111,100,117,108,101,32,108,111,99,107,46,32, +- 32,73,102,32,97,32,112,111,116,101,110,116,105,97,108,32, +- 100,101,97,100,108,111,99,107,32,105,115,32,100,101,116,101, +- 99,116,101,100,44,10,32,32,32,32,32,32,32,32,97,32, +- 95,68,101,97,100,108,111,99,107,69,114,114,111,114,32,105, +- 115,32,114,97,105,115,101,100,46,10,32,32,32,32,32,32, +- 32,32,79,116,104,101,114,119,105,115,101,44,32,116,104,101, +- 32,108,111,99,107,32,105,115,32,97,108,119,97,121,115,32, +- 97,99,113,117,105,114,101,100,32,97,110,100,32,84,114,117, +- 101,32,105,115,32,114,101,116,117,114,110,101,100,46,10,32, +- 32,32,32,32,32,32,32,114,84,0,0,0,114,29,0,0, +- 0,84,122,23,100,101,97,100,108,111,99,107,32,100,101,116, +- 101,99,116,101,100,32,98,121,32,37,114,70,78,41,12,114, +- 85,0,0,0,114,91,0,0,0,114,92,0,0,0,114,86, +- 0,0,0,114,89,0,0,0,114,88,0,0,0,114,96,0, +- 0,0,114,82,0,0,0,114,87,0,0,0,218,7,97,99, +- 113,117,105,114,101,114,90,0,0,0,218,7,114,101,108,101, +- 97,115,101,41,2,114,71,0,0,0,114,95,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,97, +- 0,0,0,192,0,0,0,115,32,0,0,0,0,6,12,1, +- 10,1,3,1,3,1,10,1,30,1,9,1,15,1,4,1, +- 12,1,19,1,18,1,24,2,13,1,20,2,122,19,95,77, +- 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, +- 101,99,1,0,0,0,0,0,0,0,2,0,0,0,10,0, +- 0,0,67,0,0,0,115,165,0,0,0,116,0,0,106,1, +- 0,131,0,0,125,1,0,124,0,0,106,2,0,143,138,0, +- 1,124,0,0,106,3,0,124,1,0,107,3,0,114,52,0, +- 116,4,0,100,1,0,131,1,0,130,1,0,110,0,0,124, +- 0,0,106,5,0,100,2,0,107,4,0,115,73,0,116,6, +- 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, +- 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, +- 155,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, +- 0,114,155,0,124,0,0,4,106,7,0,100,3,0,56,2, +- 95,7,0,124,0,0,106,8,0,106,9,0,131,0,0,1, +- 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, +- 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, +- 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, +- 108,111,99,107,114,84,0,0,0,114,29,0,0,0,41,10, +- 114,85,0,0,0,114,91,0,0,0,114,86,0,0,0,114, +- 88,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, +- 111,114,114,89,0,0,0,218,14,65,115,115,101,114,116,105, +- 111,110,69,114,114,111,114,114,90,0,0,0,114,87,0,0, +- 0,114,98,0,0,0,41,2,114,71,0,0,0,114,95,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,98,0,0,0,217,0,0,0,115,22,0,0,0,0, +- 1,12,1,10,1,15,1,15,1,21,1,15,1,15,1,9, +- 1,9,1,15,1,122,19,95,77,111,100,117,108,101,76,111, +- 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, +- 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, +- 25,0,0,0,100,1,0,106,0,0,124,0,0,106,1,0, +- 116,2,0,124,0,0,131,1,0,131,2,0,83,41,2,78, +- 122,23,95,77,111,100,117,108,101,76,111,99,107,40,123,33, +- 114,125,41,32,97,116,32,123,125,41,3,114,47,0,0,0, +- 114,67,0,0,0,114,48,0,0,0,41,1,114,71,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,8,95,95,114,101,112,114,95,95,230,0,0,0,115,2, +- 0,0,0,0,1,122,20,95,77,111,100,117,108,101,76,111, +- 99,107,46,95,95,114,101,112,114,95,95,78,41,9,114,57, +- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, +- 0,0,114,72,0,0,0,114,96,0,0,0,114,97,0,0, +- 0,114,98,0,0,0,114,101,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 83,0,0,0,166,0,0,0,115,12,0,0,0,12,4,6, +- 2,12,8,12,12,12,25,12,13,114,83,0,0,0,99,0, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, +- 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, +- 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, +- 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, +- 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, +- 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, +- 218,16,95,68,117,109,109,121,77,111,100,117,108,101,76,111, +- 99,107,122,86,65,32,115,105,109,112,108,101,32,95,77,111, +- 100,117,108,101,76,111,99,107,32,101,113,117,105,118,97,108, +- 101,110,116,32,102,111,114,32,80,121,116,104,111,110,32,98, +- 117,105,108,100,115,32,119,105,116,104,111,117,116,10,32,32, +- 32,32,109,117,108,116,105,45,116,104,114,101,97,100,105,110, +- 103,32,115,117,112,112,111,114,116,46,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, +- 22,0,0,0,124,1,0,124,0,0,95,0,0,100,1,0, +- 124,0,0,95,1,0,100,0,0,83,41,2,78,114,84,0, +- 0,0,41,2,114,67,0,0,0,114,89,0,0,0,41,2, +- 114,71,0,0,0,114,67,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,72,0,0,0,238,0, +- 0,0,115,4,0,0,0,0,1,9,1,122,25,95,68,117, +- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, +- 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1, +- 0,0,0,3,0,0,0,67,0,0,0,115,19,0,0,0, +- 124,0,0,4,106,0,0,100,1,0,55,2,95,0,0,100, +- 2,0,83,41,3,78,114,29,0,0,0,84,41,1,114,89, +- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,97,0,0,0,242,0, +- 0,0,115,4,0,0,0,0,1,15,1,122,24,95,68,117, +- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,99, +- 113,117,105,114,101,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,67,0,0,0,115,49,0,0,0,124, +- 0,0,106,0,0,100,1,0,107,2,0,114,30,0,116,1, +- 0,100,2,0,131,1,0,130,1,0,110,0,0,124,0,0, +- 4,106,0,0,100,3,0,56,2,95,0,0,100,0,0,83, +- 41,4,78,114,84,0,0,0,122,31,99,97,110,110,111,116, ++ 116,0,0,106,1,0,124,0,0,131,1,0,83,41,1,122, ++ 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, ++ 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, ++ 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, ++ 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, ++ 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, ++ 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, ++ 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, ++ 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,41, ++ 2,114,4,0,0,0,90,4,115,116,97,116,41,1,114,36, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,10,95,112,97,116,104,95,115,116,97,116,68,0, ++ 0,0,115,2,0,0,0,0,7,114,40,0,0,0,99,2, ++ 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,67, ++ 0,0,0,115,58,0,0,0,121,16,0,116,0,0,124,0, ++ 0,131,1,0,125,2,0,87,110,22,0,4,116,1,0,107, ++ 10,0,114,40,0,1,1,1,100,1,0,83,89,110,1,0, ++ 88,124,2,0,106,2,0,100,2,0,64,124,1,0,107,2, ++ 0,83,41,3,122,49,84,101,115,116,32,119,104,101,116,104, ++ 101,114,32,116,104,101,32,112,97,116,104,32,105,115,32,116, ++ 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, ++ 101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,114, ++ 40,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, ++ 116,95,109,111,100,101,41,3,114,36,0,0,0,218,4,109, ++ 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,18,95, ++ 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, ++ 101,78,0,0,0,115,10,0,0,0,0,2,3,1,16,1, ++ 13,1,9,1,114,44,0,0,0,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,13, ++ 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,83, ++ 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, ++ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, ++ 108,101,46,105,0,128,0,0,41,1,114,44,0,0,0,41, ++ 1,114,36,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102, ++ 105,108,101,87,0,0,0,115,2,0,0,0,0,2,114,45, ++ 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, ++ 3,0,0,0,67,0,0,0,115,34,0,0,0,124,0,0, ++ 115,21,0,116,0,0,106,1,0,131,0,0,125,0,0,110, ++ 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, ++ 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, ++ 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, ++ 46,105,0,64,0,0,41,3,114,4,0,0,0,218,6,103, ++ 101,116,99,119,100,114,44,0,0,0,41,1,114,36,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,11,95,112,97,116,104,95,105,115,100,105,114,92,0,0, ++ 0,115,6,0,0,0,0,2,6,1,15,1,114,47,0,0, ++ 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, ++ 0,0,0,17,0,0,0,67,0,0,0,115,192,0,0,0, ++ 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, ++ 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, ++ 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, ++ 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, ++ 4,0,121,60,0,116,7,0,106,8,0,124,4,0,100,3, ++ 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, ++ 124,1,0,131,1,0,1,87,100,4,0,81,88,116,2,0, ++ 106,10,0,124,3,0,124,0,0,131,2,0,1,87,110,59, ++ 0,4,116,11,0,107,10,0,114,187,0,1,1,1,121,17, ++ 0,116,2,0,106,12,0,124,3,0,131,1,0,1,87,110, ++ 18,0,4,116,11,0,107,10,0,114,179,0,1,1,1,89, ++ 110,1,0,88,130,0,0,89,110,1,0,88,100,4,0,83, ++ 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, ++ 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, ++ 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, ++ 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, ++ 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, ++ 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, ++ 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, ++ 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, ++ 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, ++ 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, ++ 109,112,116,101,100,46,122,5,123,125,46,123,125,105,182,1, ++ 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, ++ 116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110, ++ 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, ++ 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, ++ 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, ++ 7,114,101,112,108,97,99,101,114,41,0,0,0,90,6,117, ++ 110,108,105,110,107,41,6,114,36,0,0,0,218,4,100,97, ++ 116,97,114,43,0,0,0,90,8,112,97,116,104,95,116,109, ++ 112,90,2,102,100,218,4,102,105,108,101,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,13,95,119,114,105, ++ 116,101,95,97,116,111,109,105,99,99,0,0,0,115,26,0, ++ 0,0,0,5,24,1,9,1,33,1,3,3,21,1,19,1, ++ 20,1,13,1,3,1,17,1,13,1,5,1,114,56,0,0, ++ 0,99,2,0,0,0,0,0,0,0,3,0,0,0,7,0, ++ 0,0,67,0,0,0,115,95,0,0,0,120,69,0,100,1, ++ 0,100,2,0,100,3,0,100,4,0,103,4,0,68,93,49, ++ 0,125,2,0,116,0,0,124,1,0,124,2,0,131,2,0, ++ 114,19,0,116,1,0,124,0,0,124,2,0,116,2,0,124, ++ 1,0,124,2,0,131,2,0,131,3,0,1,113,19,0,113, ++ 19,0,87,124,0,0,106,3,0,106,4,0,124,1,0,106, ++ 3,0,131,1,0,1,100,5,0,83,41,6,122,47,83,105, ++ 109,112,108,101,32,115,117,98,115,116,105,116,117,116,101,32, ++ 102,111,114,32,102,117,110,99,116,111,111,108,115,46,117,112, ++ 100,97,116,101,95,119,114,97,112,112,101,114,46,218,10,95, ++ 95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109, ++ 101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95, ++ 95,218,7,95,95,100,111,99,95,95,78,41,5,218,7,104, ++ 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, ++ 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, ++ 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, ++ 119,90,3,111,108,100,114,53,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,5,95,119,114,97, ++ 112,121,0,0,0,115,8,0,0,0,0,2,25,1,15,1, ++ 32,1,114,66,0,0,0,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, ++ 0,116,0,0,116,1,0,131,1,0,124,0,0,131,1,0, ++ 83,41,1,78,41,2,218,4,116,121,112,101,114,8,0,0, ++ 0,41,1,218,4,110,97,109,101,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,11,95,110,101,119,95,109, ++ 111,100,117,108,101,129,0,0,0,115,2,0,0,0,0,1, ++ 114,69,0,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,58,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, ++ 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132, ++ 0,0,90,6,0,100,8,0,83,41,9,218,13,95,77,97, ++ 110,97,103,101,82,101,108,111,97,100,122,63,77,97,110,97, ++ 103,101,115,32,116,104,101,32,112,111,115,115,105,98,108,101, ++ 32,99,108,101,97,110,45,117,112,32,111,102,32,115,121,115, ++ 46,109,111,100,117,108,101,115,32,102,111,114,32,108,111,97, ++ 100,95,109,111,100,117,108,101,40,41,46,99,2,0,0,0, ++ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, ++ 115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0, ++ 0,83,41,1,78,41,1,218,5,95,110,97,109,101,41,2, ++ 218,4,115,101,108,102,114,68,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,105,110, ++ 105,116,95,95,141,0,0,0,115,2,0,0,0,0,1,122, ++ 22,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, ++ 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,25,0,0, ++ 0,124,0,0,106,0,0,116,1,0,106,2,0,107,6,0, ++ 124,0,0,95,3,0,100,0,0,83,41,1,78,41,4,114, ++ 71,0,0,0,114,8,0,0,0,218,7,109,111,100,117,108, ++ 101,115,218,10,95,105,115,95,114,101,108,111,97,100,41,1, ++ 114,72,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,9,95,95,101,110,116,101,114,95,95,144, ++ 0,0,0,115,2,0,0,0,0,1,122,23,95,77,97,110, ++ 97,103,101,82,101,108,111,97,100,46,95,95,101,110,116,101, ++ 114,95,95,99,1,0,0,0,0,0,0,0,2,0,0,0, ++ 11,0,0,0,71,0,0,0,115,80,0,0,0,116,0,0, ++ 100,1,0,100,2,0,132,0,0,124,1,0,68,131,1,0, ++ 131,1,0,114,76,0,124,0,0,106,1,0,12,114,76,0, ++ 121,17,0,116,2,0,106,3,0,124,0,0,106,4,0,61, ++ 87,113,76,0,4,116,5,0,107,10,0,114,72,0,1,1, ++ 1,89,113,76,0,88,110,0,0,100,0,0,83,41,3,78, ++ 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,115,0,0,0,115,27,0,0,0,124,0,0,93,17,0, ++ 125,1,0,124,1,0,100,0,0,107,9,0,86,1,113,3, ++ 0,100,0,0,83,41,1,78,114,5,0,0,0,41,2,114, ++ 23,0,0,0,218,3,97,114,103,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,250,9,60,103,101,110,101,120, ++ 112,114,62,148,0,0,0,115,2,0,0,0,6,0,122,41, ++ 95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,95, ++ 101,120,105,116,95,95,46,60,108,111,99,97,108,115,62,46, ++ 60,103,101,110,101,120,112,114,62,41,6,218,3,97,110,121, ++ 114,75,0,0,0,114,8,0,0,0,114,74,0,0,0,114, ++ 71,0,0,0,218,8,75,101,121,69,114,114,111,114,41,2, ++ 114,72,0,0,0,218,4,97,114,103,115,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,101,120, ++ 105,116,95,95,147,0,0,0,115,10,0,0,0,0,1,35, ++ 1,3,1,17,1,13,1,122,22,95,77,97,110,97,103,101, ++ 82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78, ++ 41,7,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,114,73,0,0,0,114,76,0,0,0, ++ 114,82,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,70,0,0,0,137,0, ++ 0,0,115,8,0,0,0,12,2,6,2,12,3,12,3,114, ++ 70,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, ++ 0,1,0,0,0,64,0,0,0,115,16,0,0,0,101,0, ++ 0,90,1,0,100,0,0,90,2,0,100,1,0,83,41,2, ++ 218,14,95,68,101,97,100,108,111,99,107,69,114,114,111,114, ++ 78,41,3,114,58,0,0,0,114,57,0,0,0,114,59,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,83,0,0,0,162,0,0,0,115, ++ 2,0,0,0,12,1,114,83,0,0,0,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, ++ 115,82,0,0,0,101,0,0,90,1,0,100,0,0,90,2, ++ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, ++ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, ++ 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, ++ 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, ++ 90,8,0,100,12,0,83,41,13,218,11,95,77,111,100,117, ++ 108,101,76,111,99,107,122,169,65,32,114,101,99,117,114,115, ++ 105,118,101,32,108,111,99,107,32,105,109,112,108,101,109,101, ++ 110,116,97,116,105,111,110,32,119,104,105,99,104,32,105,115, ++ 32,97,98,108,101,32,116,111,32,100,101,116,101,99,116,32, ++ 100,101,97,100,108,111,99,107,115,10,32,32,32,32,40,101, ++ 46,103,46,32,116,104,114,101,97,100,32,49,32,116,114,121, ++ 105,110,103,32,116,111,32,116,97,107,101,32,108,111,99,107, ++ 115,32,65,32,116,104,101,110,32,66,44,32,97,110,100,32, ++ 116,104,114,101,97,100,32,50,32,116,114,121,105,110,103,32, ++ 116,111,10,32,32,32,32,116,97,107,101,32,108,111,99,107, ++ 115,32,66,32,116,104,101,110,32,65,41,46,10,32,32,32, ++ 32,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,70,0,0,0,116,0,0,106,1, ++ 0,131,0,0,124,0,0,95,2,0,116,0,0,106,1,0, ++ 131,0,0,124,0,0,95,3,0,124,1,0,124,0,0,95, ++ 4,0,100,0,0,124,0,0,95,5,0,100,1,0,124,0, ++ 0,95,6,0,100,1,0,124,0,0,95,7,0,100,0,0, ++ 83,41,2,78,233,0,0,0,0,41,8,218,7,95,116,104, ++ 114,101,97,100,90,13,97,108,108,111,99,97,116,101,95,108, ++ 111,99,107,218,4,108,111,99,107,218,6,119,97,107,101,117, ++ 112,114,68,0,0,0,218,5,111,119,110,101,114,218,5,99, ++ 111,117,110,116,218,7,119,97,105,116,101,114,115,41,2,114, ++ 72,0,0,0,114,68,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,172,0,0, ++ 0,115,12,0,0,0,0,1,15,1,15,1,9,1,9,1, ++ 9,1,122,20,95,77,111,100,117,108,101,76,111,99,107,46, ++ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, ++ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,87,0, ++ 0,0,116,0,0,106,1,0,131,0,0,125,1,0,124,0, ++ 0,106,2,0,125,2,0,120,59,0,116,3,0,106,4,0, ++ 124,2,0,131,1,0,125,3,0,124,3,0,100,0,0,107, ++ 8,0,114,55,0,100,1,0,83,124,3,0,106,2,0,125, ++ 2,0,124,2,0,124,1,0,107,2,0,114,24,0,100,2, ++ 0,83,113,24,0,100,0,0,83,41,3,78,70,84,41,5, ++ 114,86,0,0,0,218,9,103,101,116,95,105,100,101,110,116, ++ 114,89,0,0,0,218,12,95,98,108,111,99,107,105,110,103, ++ 95,111,110,218,3,103,101,116,41,4,114,72,0,0,0,218, ++ 2,109,101,218,3,116,105,100,114,87,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,12,104,97, ++ 115,95,100,101,97,100,108,111,99,107,180,0,0,0,115,18, ++ 0,0,0,0,2,12,1,9,1,3,1,15,1,12,1,4, ++ 1,9,1,12,1,122,24,95,77,111,100,117,108,101,76,111, ++ 99,107,46,104,97,115,95,100,101,97,100,108,111,99,107,99, ++ 1,0,0,0,0,0,0,0,2,0,0,0,16,0,0,0, ++ 67,0,0,0,115,214,0,0,0,116,0,0,106,1,0,131, ++ 0,0,125,1,0,124,0,0,116,2,0,124,1,0,60,122, ++ 177,0,120,170,0,124,0,0,106,3,0,143,130,0,1,124, ++ 0,0,106,4,0,100,1,0,107,2,0,115,68,0,124,0, ++ 0,106,5,0,124,1,0,107,2,0,114,96,0,124,1,0, ++ 124,0,0,95,5,0,124,0,0,4,106,4,0,100,2,0, ++ 55,2,95,4,0,100,3,0,83,124,0,0,106,6,0,131, ++ 0,0,114,127,0,116,7,0,100,4,0,124,0,0,22,131, ++ 1,0,130,1,0,110,0,0,124,0,0,106,8,0,106,9, ++ 0,100,5,0,131,1,0,114,163,0,124,0,0,4,106,10, ++ 0,100,2,0,55,2,95,10,0,110,0,0,87,100,6,0, ++ 81,88,124,0,0,106,8,0,106,9,0,131,0,0,1,124, ++ 0,0,106,8,0,106,11,0,131,0,0,1,113,28,0,87, ++ 100,6,0,116,2,0,124,1,0,61,88,100,6,0,83,41, ++ 7,122,185,10,32,32,32,32,32,32,32,32,65,99,113,117, ++ 105,114,101,32,116,104,101,32,109,111,100,117,108,101,32,108, ++ 111,99,107,46,32,32,73,102,32,97,32,112,111,116,101,110, ++ 116,105,97,108,32,100,101,97,100,108,111,99,107,32,105,115, ++ 32,100,101,116,101,99,116,101,100,44,10,32,32,32,32,32, ++ 32,32,32,97,32,95,68,101,97,100,108,111,99,107,69,114, ++ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,32, ++ 32,32,32,32,32,32,32,79,116,104,101,114,119,105,115,101, ++ 44,32,116,104,101,32,108,111,99,107,32,105,115,32,97,108, ++ 119,97,121,115,32,97,99,113,117,105,114,101,100,32,97,110, ++ 100,32,84,114,117,101,32,105,115,32,114,101,116,117,114,110, ++ 101,100,46,10,32,32,32,32,32,32,32,32,114,85,0,0, ++ 0,114,30,0,0,0,84,122,23,100,101,97,100,108,111,99, ++ 107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114, ++ 70,78,41,12,114,86,0,0,0,114,92,0,0,0,114,93, ++ 0,0,0,114,87,0,0,0,114,90,0,0,0,114,89,0, ++ 0,0,114,97,0,0,0,114,83,0,0,0,114,88,0,0, ++ 0,218,7,97,99,113,117,105,114,101,114,91,0,0,0,218, ++ 7,114,101,108,101,97,115,101,41,2,114,72,0,0,0,114, ++ 96,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,98,0,0,0,192,0,0,0,115,32,0,0, ++ 0,0,6,12,1,10,1,3,1,3,1,10,1,30,1,9, ++ 1,15,1,4,1,12,1,19,1,18,1,24,2,13,1,20, ++ 2,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97, ++ 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,10,0,0,0,67,0,0,0,115,165,0,0,0, ++ 116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,106, ++ 2,0,143,138,0,1,124,0,0,106,3,0,124,1,0,107, ++ 3,0,114,52,0,116,4,0,100,1,0,131,1,0,130,1, ++ 0,110,0,0,124,0,0,106,5,0,100,2,0,107,4,0, ++ 115,73,0,116,6,0,130,1,0,124,0,0,4,106,5,0, ++ 100,3,0,56,2,95,5,0,124,0,0,106,5,0,100,2, ++ 0,107,2,0,114,155,0,100,0,0,124,0,0,95,3,0, ++ 124,0,0,106,7,0,114,155,0,124,0,0,4,106,7,0, ++ 100,3,0,56,2,95,7,0,124,0,0,106,8,0,106,9, ++ 0,131,0,0,1,113,155,0,110,0,0,87,100,0,0,81, ++ 88,100,0,0,83,41,4,78,122,31,99,97,110,110,111,116, + 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, +- 105,114,101,100,32,108,111,99,107,114,29,0,0,0,41,2, +- 114,89,0,0,0,114,99,0,0,0,41,1,114,71,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,98,0,0,0,246,0,0,0,115,6,0,0,0,0,1, +- 15,1,15,1,122,24,95,68,117,109,109,121,77,111,100,117, +- 108,101,76,111,99,107,46,114,101,108,101,97,115,101,99,1, +- 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, +- 0,0,0,115,25,0,0,0,100,1,0,106,0,0,124,0, +- 0,106,1,0,116,2,0,124,0,0,131,1,0,131,2,0, +- 83,41,2,78,122,28,95,68,117,109,109,121,77,111,100,117, +- 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, +- 123,125,41,3,114,47,0,0,0,114,67,0,0,0,114,48, +- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,101,0,0,0,251,0, +- 0,0,115,2,0,0,0,0,1,122,25,95,68,117,109,109, +- 121,77,111,100,117,108,101,76,111,99,107,46,95,95,114,101, +- 112,114,95,95,78,41,8,114,57,0,0,0,114,56,0,0, +- 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, +- 114,97,0,0,0,114,98,0,0,0,114,101,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,102,0,0,0,234,0,0,0,115,10,0,0, +- 0,12,2,6,2,12,4,12,4,12,5,114,102,0,0,0, +- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,52,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, +- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, +- 0,100,6,0,132,0,0,90,5,0,100,7,0,83,41,8, +- 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, +- 97,103,101,114,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1, +- 0,124,0,0,95,0,0,100,0,0,124,0,0,95,1,0, +- 100,0,0,83,41,1,78,41,2,114,70,0,0,0,218,5, +- 95,108,111,99,107,41,2,114,71,0,0,0,114,67,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,72,0,0,0,1,1,0,0,115,4,0,0,0,0,1, +- 9,1,122,27,95,77,111,100,117,108,101,76,111,99,107,77, +- 97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,99, +- 1,0,0,0,0,0,0,0,1,0,0,0,10,0,0,0, +- 67,0,0,0,115,53,0,0,0,122,22,0,116,0,0,124, +- 0,0,106,1,0,131,1,0,124,0,0,95,2,0,87,100, +- 0,0,116,3,0,106,4,0,131,0,0,1,88,124,0,0, +- 106,2,0,106,5,0,131,0,0,1,100,0,0,83,41,1, +- 78,41,6,218,16,95,103,101,116,95,109,111,100,117,108,101, +- 95,108,111,99,107,114,70,0,0,0,114,104,0,0,0,218, +- 4,95,105,109,112,218,12,114,101,108,101,97,115,101,95,108, +- 111,99,107,114,97,0,0,0,41,1,114,71,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,75, +- 0,0,0,5,1,0,0,115,8,0,0,0,0,1,3,1, +- 22,2,11,1,122,28,95,77,111,100,117,108,101,76,111,99, +- 107,77,97,110,97,103,101,114,46,95,95,101,110,116,101,114, +- 95,95,99,1,0,0,0,0,0,0,0,3,0,0,0,1, +- 0,0,0,79,0,0,0,115,17,0,0,0,124,0,0,106, +- 0,0,106,1,0,131,0,0,1,100,0,0,83,41,1,78, +- 41,2,114,104,0,0,0,114,98,0,0,0,41,3,114,71, +- 0,0,0,114,80,0,0,0,218,6,107,119,97,114,103,115, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 81,0,0,0,12,1,0,0,115,2,0,0,0,0,1,122, +- 27,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, +- 103,101,114,46,95,95,101,120,105,116,95,95,78,41,6,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, +- 0,0,0,114,75,0,0,0,114,81,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,103,0,0,0,255,0,0,0,115,6,0,0,0,12, +- 2,12,4,12,7,114,103,0,0,0,99,1,0,0,0,0, +- 0,0,0,3,0,0,0,11,0,0,0,3,0,0,0,115, +- 142,0,0,0,100,1,0,125,1,0,121,17,0,116,0,0, +- 136,0,0,25,131,0,0,125,1,0,87,110,18,0,4,116, +- 1,0,107,10,0,114,43,0,1,1,1,89,110,1,0,88, +- 124,1,0,100,1,0,107,8,0,114,138,0,116,2,0,100, +- 1,0,107,8,0,114,83,0,116,3,0,136,0,0,131,1, +- 0,125,1,0,110,12,0,116,4,0,136,0,0,131,1,0, +- 125,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, +- 0,0,125,2,0,116,5,0,106,6,0,124,1,0,124,2, +- 0,131,2,0,116,0,0,136,0,0,60,110,0,0,124,1, +- 0,83,41,4,122,109,71,101,116,32,111,114,32,99,114,101, +- 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, ++ 105,114,101,100,32,108,111,99,107,114,85,0,0,0,114,30, ++ 0,0,0,41,10,114,86,0,0,0,114,92,0,0,0,114, ++ 87,0,0,0,114,89,0,0,0,218,12,82,117,110,116,105, ++ 109,101,69,114,114,111,114,114,90,0,0,0,218,14,65,115, ++ 115,101,114,116,105,111,110,69,114,114,111,114,114,91,0,0, ++ 0,114,88,0,0,0,114,99,0,0,0,41,2,114,72,0, ++ 0,0,114,96,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,99,0,0,0,217,0,0,0,115, ++ 22,0,0,0,0,1,12,1,10,1,15,1,15,1,21,1, ++ 15,1,15,1,9,1,9,1,15,1,122,19,95,77,111,100, ++ 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, ++ 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, ++ 67,0,0,0,115,25,0,0,0,100,1,0,106,0,0,124, ++ 0,0,106,1,0,116,2,0,124,0,0,131,1,0,131,2, ++ 0,83,41,2,78,122,23,95,77,111,100,117,108,101,76,111, ++ 99,107,40,123,33,114,125,41,32,97,116,32,123,125,41,3, ++ 114,48,0,0,0,114,68,0,0,0,114,49,0,0,0,41, ++ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,8,95,95,114,101,112,114,95,95,230, ++ 0,0,0,115,2,0,0,0,0,1,122,20,95,77,111,100, ++ 117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,95, ++ 78,41,9,114,58,0,0,0,114,57,0,0,0,114,59,0, ++ 0,0,114,60,0,0,0,114,73,0,0,0,114,97,0,0, ++ 0,114,98,0,0,0,114,99,0,0,0,114,102,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,84,0,0,0,166,0,0,0,115,12,0, ++ 0,0,12,4,6,2,12,8,12,12,12,25,12,13,114,84, ++ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 2,0,0,0,64,0,0,0,115,70,0,0,0,101,0,0, ++ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, ++ 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, ++ 0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,0, ++ 90,6,0,100,8,0,100,9,0,132,0,0,90,7,0,100, ++ 10,0,83,41,11,218,16,95,68,117,109,109,121,77,111,100, ++ 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, ++ 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, ++ 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, ++ 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, ++ 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, ++ 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,22,0,0,0,124,1,0,124,0,0,95, ++ 0,0,100,1,0,124,0,0,95,1,0,100,0,0,83,41, ++ 2,78,114,85,0,0,0,41,2,114,68,0,0,0,114,90, ++ 0,0,0,41,2,114,72,0,0,0,114,68,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,73, ++ 0,0,0,238,0,0,0,115,4,0,0,0,0,1,9,1, ++ 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, ++ 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, ++ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, ++ 115,19,0,0,0,124,0,0,4,106,0,0,100,1,0,55, ++ 2,95,0,0,100,2,0,83,41,3,78,114,30,0,0,0, ++ 84,41,1,114,90,0,0,0,41,1,114,72,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,98, ++ 0,0,0,242,0,0,0,115,4,0,0,0,0,1,15,1, ++ 122,24,95,68,117,109,109,121,77,111,100,117,108,101,76,111, ++ 99,107,46,97,99,113,117,105,114,101,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 49,0,0,0,124,0,0,106,0,0,100,1,0,107,2,0, ++ 114,30,0,116,1,0,100,2,0,131,1,0,130,1,0,110, ++ 0,0,124,0,0,4,106,0,0,100,3,0,56,2,95,0, ++ 0,100,0,0,83,41,4,78,114,85,0,0,0,122,31,99, ++ 97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110, ++ 45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,30, ++ 0,0,0,41,2,114,90,0,0,0,114,100,0,0,0,41, ++ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,99,0,0,0,246,0,0,0,115,6, ++ 0,0,0,0,1,15,1,15,1,122,24,95,68,117,109,109, ++ 121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101, ++ 97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,0, ++ 4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,0, ++ 106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,131, ++ 1,0,131,2,0,83,41,2,78,122,28,95,68,117,109,109, ++ 121,77,111,100,117,108,101,76,111,99,107,40,123,33,114,125, ++ 41,32,97,116,32,123,125,41,3,114,48,0,0,0,114,68, ++ 0,0,0,114,49,0,0,0,41,1,114,72,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,102, ++ 0,0,0,251,0,0,0,115,2,0,0,0,0,1,122,25, ++ 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, ++ 46,95,95,114,101,112,114,95,95,78,41,8,114,58,0,0, ++ 0,114,57,0,0,0,114,59,0,0,0,114,60,0,0,0, ++ 114,73,0,0,0,114,98,0,0,0,114,99,0,0,0,114, ++ 102,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,103,0,0,0,234,0,0, ++ 0,115,10,0,0,0,12,2,6,2,12,4,12,4,12,5, ++ 114,103,0,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, ++ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, ++ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, ++ 7,0,83,41,8,218,18,95,77,111,100,117,108,101,76,111, ++ 99,107,77,97,110,97,103,101,114,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,22, ++ 0,0,0,124,1,0,124,0,0,95,0,0,100,0,0,124, ++ 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,71, ++ 0,0,0,218,5,95,108,111,99,107,41,2,114,72,0,0, ++ 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,73,0,0,0,1,1,0,0,115,4, ++ 0,0,0,0,1,9,1,122,27,95,77,111,100,117,108,101, ++ 76,111,99,107,77,97,110,97,103,101,114,46,95,95,105,110, ++ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, ++ 0,10,0,0,0,67,0,0,0,115,53,0,0,0,122,22, ++ 0,116,0,0,124,0,0,106,1,0,131,1,0,124,0,0, ++ 95,2,0,87,100,0,0,116,3,0,106,4,0,131,0,0, ++ 1,88,124,0,0,106,2,0,106,5,0,131,0,0,1,100, ++ 0,0,83,41,1,78,41,6,218,16,95,103,101,116,95,109, ++ 111,100,117,108,101,95,108,111,99,107,114,71,0,0,0,114, ++ 105,0,0,0,218,4,95,105,109,112,218,12,114,101,108,101, ++ 97,115,101,95,108,111,99,107,114,98,0,0,0,41,1,114, ++ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,76,0,0,0,5,1,0,0,115,8,0,0, ++ 0,0,1,3,1,22,2,11,1,122,28,95,77,111,100,117, ++ 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, ++ 101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0, ++ 3,0,0,0,1,0,0,0,79,0,0,0,115,17,0,0, ++ 0,124,0,0,106,0,0,106,1,0,131,0,0,1,100,0, ++ 0,83,41,1,78,41,2,114,105,0,0,0,114,99,0,0, ++ 0,41,3,114,72,0,0,0,114,81,0,0,0,218,6,107, ++ 119,97,114,103,115,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,82,0,0,0,12,1,0,0,115,2,0, ++ 0,0,0,1,122,27,95,77,111,100,117,108,101,76,111,99, ++ 107,77,97,110,97,103,101,114,46,95,95,101,120,105,116,95, ++ 95,78,41,6,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,73,0,0,0,114,76,0,0,0,114,82,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,104,0,0,0,255,0,0,0,115, ++ 6,0,0,0,12,2,12,4,12,7,114,104,0,0,0,99, ++ 1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, ++ 3,0,0,0,115,142,0,0,0,100,1,0,125,1,0,121, ++ 17,0,116,0,0,136,0,0,25,131,0,0,125,1,0,87, ++ 110,18,0,4,116,1,0,107,10,0,114,43,0,1,1,1, ++ 89,110,1,0,88,124,1,0,100,1,0,107,8,0,114,138, ++ 0,116,2,0,100,1,0,107,8,0,114,83,0,116,3,0, ++ 136,0,0,131,1,0,125,1,0,110,12,0,116,4,0,136, ++ 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,2, ++ 0,100,3,0,134,0,0,125,2,0,116,5,0,106,6,0, ++ 124,1,0,124,2,0,131,2,0,116,0,0,136,0,0,60, ++ 110,0,0,124,1,0,83,41,4,122,109,71,101,116,32,111, ++ 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, ++ 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, ++ 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, ++ 46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110, ++ 108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116, ++ 104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, ++ 107,32,116,97,107,101,110,46,78,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,2,0,0,0,19,0,0,0,115,11, ++ 0,0,0,116,0,0,136,0,0,61,100,0,0,83,41,1, ++ 78,41,1,218,13,95,109,111,100,117,108,101,95,108,111,99, ++ 107,115,41,1,114,37,0,0,0,41,1,114,68,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,2,99,98,32,1, ++ 0,0,115,2,0,0,0,0,1,122,28,95,103,101,116,95, ++ 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99, ++ 97,108,115,62,46,99,98,41,7,114,110,0,0,0,114,80, ++ 0,0,0,114,86,0,0,0,114,103,0,0,0,114,84,0, ++ 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, ++ 102,41,3,114,68,0,0,0,114,87,0,0,0,114,111,0, ++ 0,0,114,5,0,0,0,41,1,114,68,0,0,0,114,6, ++ 0,0,0,114,106,0,0,0,18,1,0,0,115,24,0,0, ++ 0,0,4,6,1,3,1,17,1,13,1,5,1,12,1,12, ++ 1,15,2,12,1,18,2,25,1,114,106,0,0,0,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, ++ 0,0,0,115,71,0,0,0,116,0,0,124,0,0,131,1, ++ 0,125,1,0,116,1,0,106,2,0,131,0,0,1,121,14, ++ 0,124,1,0,106,3,0,131,0,0,1,87,110,18,0,4, ++ 116,4,0,107,10,0,114,56,0,1,1,1,89,110,11,0, ++ 88,124,1,0,106,5,0,131,0,0,1,100,1,0,83,41, ++ 2,97,21,1,0,0,82,101,108,101,97,115,101,32,116,104, ++ 101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,32, ++ 108,111,99,107,44,32,97,110,100,32,97,99,113,117,105,114, ++ 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,32, ++ 116,104,101,10,32,32,32,32,109,111,100,117,108,101,32,108, + 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, +- 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, +- 32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101, +- 32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101, +- 32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107, +- 101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,2,0,0,0,19,0,0,0,115,11,0,0,0,116,0, +- 0,136,0,0,61,100,0,0,83,41,1,78,41,1,218,13, +- 95,109,111,100,117,108,101,95,108,111,99,107,115,41,1,114, +- 36,0,0,0,41,1,114,67,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,2,99,98,32,1,0,0,115,2,0, +- 0,0,0,1,122,28,95,103,101,116,95,109,111,100,117,108, +- 101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46, +- 99,98,41,7,114,109,0,0,0,114,79,0,0,0,114,85, +- 0,0,0,114,102,0,0,0,114,83,0,0,0,218,8,95, +- 119,101,97,107,114,101,102,90,3,114,101,102,41,3,114,67, +- 0,0,0,114,86,0,0,0,114,110,0,0,0,114,4,0, +- 0,0,41,1,114,67,0,0,0,114,5,0,0,0,114,105, +- 0,0,0,18,1,0,0,115,24,0,0,0,0,4,6,1, +- 3,1,17,1,13,1,5,1,12,1,12,1,15,2,12,1, +- 18,2,25,1,114,105,0,0,0,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,71, +- 0,0,0,116,0,0,124,0,0,131,1,0,125,1,0,116, +- 1,0,106,2,0,131,0,0,1,121,14,0,124,1,0,106, +- 3,0,131,0,0,1,87,110,18,0,4,116,4,0,107,10, +- 0,114,56,0,1,1,1,89,110,11,0,88,124,1,0,106, +- 5,0,131,0,0,1,100,1,0,83,41,2,97,21,1,0, +- 0,82,101,108,101,97,115,101,32,116,104,101,32,103,108,111, +- 98,97,108,32,105,109,112,111,114,116,32,108,111,99,107,44, +- 32,97,110,100,32,97,99,113,117,105,114,101,115,32,116,104, +- 101,110,32,114,101,108,101,97,115,101,32,116,104,101,10,32, +- 32,32,32,109,111,100,117,108,101,32,108,111,99,107,32,102, +- 111,114,32,97,32,103,105,118,101,110,32,109,111,100,117,108, +- 101,32,110,97,109,101,46,10,32,32,32,32,84,104,105,115, +- 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, +- 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, +- 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, +- 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, +- 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, +- 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, +- 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, +- 10,32,32,32,32,83,104,111,117,108,100,32,111,110,108,121, +- 32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,32, +- 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,32, +- 116,97,107,101,110,46,78,41,6,114,105,0,0,0,114,106, +- 0,0,0,114,107,0,0,0,114,97,0,0,0,114,82,0, +- 0,0,114,98,0,0,0,41,2,114,67,0,0,0,114,86, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, +- 95,109,111,100,117,108,101,37,1,0,0,115,14,0,0,0, +- 0,7,12,1,10,1,3,1,14,1,13,3,5,2,114,112, +- 0,0,0,99,1,0,0,0,0,0,0,0,3,0,0,0, +- 3,0,0,0,79,0,0,0,115,13,0,0,0,124,0,0, +- 124,1,0,124,2,0,142,0,0,83,41,1,97,46,1,0, +- 0,114,101,109,111,118,101,95,105,109,112,111,114,116,108,105, +- 98,95,102,114,97,109,101,115,32,105,110,32,105,109,112,111, +- 114,116,46,99,32,119,105,108,108,32,97,108,119,97,121,115, +- 32,114,101,109,111,118,101,32,115,101,113,117,101,110,99,101, +- 115,10,32,32,32,32,111,102,32,105,109,112,111,114,116,108, +- 105,98,32,102,114,97,109,101,115,32,116,104,97,116,32,101, +- 110,100,32,119,105,116,104,32,97,32,99,97,108,108,32,116, +- 111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,10, +- 10,32,32,32,32,85,115,101,32,105,116,32,105,110,115,116, +- 101,97,100,32,111,102,32,97,32,110,111,114,109,97,108,32, +- 99,97,108,108,32,105,110,32,112,108,97,99,101,115,32,119, +- 104,101,114,101,32,105,110,99,108,117,100,105,110,103,32,116, +- 104,101,32,105,109,112,111,114,116,108,105,98,10,32,32,32, +- 32,102,114,97,109,101,115,32,105,110,116,114,111,100,117,99, +- 101,115,32,117,110,119,97,110,116,101,100,32,110,111,105,115, +- 101,32,105,110,116,111,32,116,104,101,32,116,114,97,99,101, +- 98,97,99,107,32,40,101,46,103,46,32,119,104,101,110,32, +- 101,120,101,99,117,116,105,110,103,10,32,32,32,32,109,111, +- 100,117,108,101,32,99,111,100,101,41,10,32,32,32,32,114, +- 4,0,0,0,41,3,218,1,102,114,80,0,0,0,90,4, +- 107,119,100,115,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, +- 102,114,97,109,101,115,95,114,101,109,111,118,101,100,57,1, +- 0,0,115,2,0,0,0,0,8,114,114,0,0,0,105,238, +- 12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, - 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, -- 95,122,4,111,112,116,45,122,3,46,112,121,122,4,46,112, -- 121,99,78,218,12,111,112,116,105,109,105,122,97,116,105,111, -- 110,99,2,0,0,0,1,0,0,0,11,0,0,0,6,0, -- 0,0,67,0,0,0,115,87,1,0,0,124,1,0,100,1, -- 0,107,9,0,114,76,0,116,0,0,106,1,0,100,2,0, -- 116,2,0,131,2,0,1,124,2,0,100,1,0,107,9,0, -- 114,58,0,100,3,0,125,3,0,116,3,0,124,3,0,131, -- 1,0,130,1,0,124,1,0,114,70,0,100,4,0,110,3, -- 0,100,5,0,125,2,0,116,4,0,124,0,0,131,1,0, -- 92,2,0,125,4,0,125,5,0,124,5,0,106,5,0,100, -- 6,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, -- 0,116,6,0,106,7,0,106,8,0,125,9,0,124,9,0, -- 100,1,0,107,8,0,114,154,0,116,9,0,100,7,0,131, -- 1,0,130,1,0,100,4,0,106,10,0,124,6,0,114,172, -- 0,124,6,0,110,3,0,124,8,0,124,7,0,124,9,0, -- 103,3,0,131,1,0,125,10,0,124,2,0,100,1,0,107, -- 8,0,114,241,0,116,6,0,106,11,0,106,12,0,100,8, -- 0,107,2,0,114,229,0,100,4,0,125,2,0,110,12,0, -- 116,6,0,106,11,0,106,12,0,125,2,0,116,13,0,124, -- 2,0,131,1,0,125,2,0,124,2,0,100,4,0,107,3, -- 0,114,63,1,124,2,0,106,14,0,131,0,0,115,42,1, -- 116,15,0,100,9,0,106,16,0,124,2,0,131,1,0,131, -- 1,0,130,1,0,100,10,0,106,16,0,124,10,0,116,17, -- 0,124,2,0,131,3,0,125,10,0,116,18,0,124,4,0, -- 116,19,0,124,10,0,116,20,0,100,8,0,25,23,131,3, -- 0,83,41,11,97,254,2,0,0,71,105,118,101,110,32,116, -- 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, -- 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, -- 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, -- 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, -- 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, -- 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, -- 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, -- 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, -- 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, -- 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, -- 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, -- 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, -- 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, -- 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, -- 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, -- 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, -- 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, -- 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, -- 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, -- 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, -- 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, -- 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, -- 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, -- 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, -- 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, -- 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, -- 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, -- 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, -- 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, -- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, -- 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, -- 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, -- 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, -- 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, -- 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, -- 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, -- 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, -- 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, -- 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, -- 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, -- 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, -- 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, -- 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, -- 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, -- 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, -- 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, -- 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, -- 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, -- 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, -- 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, -- 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, -- 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, -- 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, -- 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, -- 78,111,110,101,114,30,0,0,0,114,29,0,0,0,218,1, -- 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, -- 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, -- 105,115,32,78,111,110,101,233,0,0,0,0,122,24,123,33, -- 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, -- 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,41, -- 21,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, -- 114,110,218,18,68,101,112,114,101,99,97,116,105,111,110,87, -- 97,114,110,105,110,103,218,9,84,121,112,101,69,114,114,111, -- 114,114,38,0,0,0,114,32,0,0,0,114,7,0,0,0, -- 218,14,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -- 218,9,99,97,99,104,101,95,116,97,103,218,19,78,111,116, -- 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, -- 114,26,0,0,0,218,5,102,108,97,103,115,218,8,111,112, -- 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, -- 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, -- 114,47,0,0,0,218,4,95,79,80,84,114,28,0,0,0, -- 218,8,95,80,89,67,65,67,72,69,218,17,66,89,84,69, -- 67,79,68,69,95,83,85,70,70,73,88,69,83,41,11,114, -- 35,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, -- 114,105,100,101,114,57,0,0,0,218,7,109,101,115,115,97, -- 103,101,218,4,104,101,97,100,114,37,0,0,0,90,4,98, -- 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, -- 116,97,103,90,15,97,108,109,111,115,116,95,102,105,108,101, -- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,17,99,97,99,104,101,95,102,114,111,109,95, -- 115,111,117,114,99,101,243,0,0,0,115,46,0,0,0,0, -- 18,12,1,9,1,7,1,12,1,6,1,12,1,18,1,18, -- 1,24,1,12,1,12,1,12,1,36,1,12,1,18,1,9, -- 2,12,1,12,1,12,1,12,1,21,1,21,1,114,79,0, -- 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, -- 0,0,0,67,0,0,0,115,62,1,0,0,116,0,0,106, -- 1,0,106,2,0,100,1,0,107,8,0,114,30,0,116,3, -- 0,100,2,0,131,1,0,130,1,0,116,4,0,124,0,0, -- 131,1,0,92,2,0,125,1,0,125,2,0,116,4,0,124, -- 1,0,131,1,0,92,2,0,125,1,0,125,3,0,124,3, -- 0,116,5,0,107,3,0,114,102,0,116,6,0,100,3,0, -- 106,7,0,116,5,0,124,0,0,131,2,0,131,1,0,130, -- 1,0,124,2,0,106,8,0,100,4,0,131,1,0,125,4, -- 0,124,4,0,100,11,0,107,7,0,114,153,0,116,6,0, -- 100,7,0,106,7,0,124,2,0,131,1,0,131,1,0,130, -- 1,0,110,125,0,124,4,0,100,6,0,107,2,0,114,22, -- 1,124,2,0,106,9,0,100,4,0,100,5,0,131,2,0, -- 100,12,0,25,125,5,0,124,5,0,106,10,0,116,11,0, -- 131,1,0,115,223,0,116,6,0,100,8,0,106,7,0,116, -- 11,0,131,1,0,131,1,0,130,1,0,124,5,0,116,12, -- 0,116,11,0,131,1,0,100,1,0,133,2,0,25,125,6, -- 0,124,6,0,106,13,0,131,0,0,115,22,1,116,6,0, -- 100,9,0,106,7,0,124,5,0,131,1,0,131,1,0,130, -- 1,0,124,2,0,106,14,0,100,4,0,131,1,0,100,10, -- 0,25,125,7,0,116,15,0,124,1,0,124,7,0,116,16, -- 0,100,10,0,25,23,131,2,0,83,41,13,97,110,1,0, -- 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44, -- 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, -- 32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101, -- 46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32, -- 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, -- 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, -- 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, -- 32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32, -- 32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97, -- 108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114, -- 101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112, -- 121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116, -- 104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99, -- 111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49, -- 52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86, -- 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, -- 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, -- 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, -- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, -- 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, -- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, -- 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, +- 95,122,3,46,112,121,122,4,46,112,121,99,122,4,46,112, +- 121,111,78,99,2,0,0,0,0,0,0,0,11,0,0,0, +- 6,0,0,0,67,0,0,0,115,180,0,0,0,124,1,0, +- 100,1,0,107,8,0,114,25,0,116,0,0,106,1,0,106, +- 2,0,12,110,3,0,124,1,0,125,2,0,124,2,0,114, +- 46,0,116,3,0,125,3,0,110,6,0,116,4,0,125,3, +- 0,116,5,0,124,0,0,131,1,0,92,2,0,125,4,0, +- 125,5,0,124,5,0,106,6,0,100,2,0,131,1,0,92, +- 3,0,125,6,0,125,7,0,125,8,0,116,0,0,106,7, +- 0,106,8,0,125,9,0,124,9,0,100,1,0,107,8,0, +- 114,133,0,116,9,0,100,3,0,131,1,0,130,1,0,110, +- 0,0,100,4,0,106,10,0,124,6,0,124,7,0,124,9, +- 0,124,3,0,100,5,0,25,103,4,0,131,1,0,125,10, +- 0,116,11,0,124,4,0,116,12,0,124,10,0,131,3,0, +- 83,41,6,97,244,1,0,0,71,105,118,101,110,32,116,104, +- 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,32, +- 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, +- 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, +- 99,47,46,112,121,111,32,102,105,108,101,46,10,10,32,32, +- 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, +- 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, +- 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, +- 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, +- 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, +- 112,121,99,47,46,112,121,111,32,102,105,108,101,32,99,97, +- 108,99,117,108,97,116,101,100,32,97,115,32,105,102,32,116, +- 104,101,32,46,112,121,32,102,105,108,101,32,119,101,114,101, +- 32,105,109,112,111,114,116,101,100,46,32,32,84,104,101,32, +- 101,120,116,101,110,115,105,111,110,10,32,32,32,32,119,105, +- 108,108,32,98,101,32,46,112,121,99,32,117,110,108,101,115, +- 115,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, +- 109,105,122,101,32,105,115,32,110,111,110,45,122,101,114,111, +- 44,32,116,104,101,110,32,105,116,32,119,105,108,108,32,98, +- 101,32,46,112,121,111,46,10,10,32,32,32,32,73,102,32, +- 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105, +- 115,32,110,111,116,32,78,111,110,101,44,32,116,104,101,110, +- 32,105,116,32,109,117,115,116,32,98,101,32,97,32,98,111, +- 111,108,101,97,110,32,97,110,100,32,105,115,32,117,115,101, +- 100,32,105,110,10,32,32,32,32,112,108,97,99,101,32,111, +- 102,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, +- 109,105,122,101,46,10,10,32,32,32,32,73,102,32,115,121, +- 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, +- 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, +- 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, +- 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, +- 97,105,115,101,100,46,10,10,32,32,32,32,78,218,1,46, - 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, -- 115,32,78,111,110,101,122,37,123,125,32,110,111,116,32,98, -- 111,116,116,111,109,45,108,101,118,101,108,32,100,105,114,101, -- 99,116,111,114,121,32,105,110,32,123,33,114,125,114,58,0, -- 0,0,114,56,0,0,0,233,3,0,0,0,122,33,101,120, -- 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, -- 32,51,32,100,111,116,115,32,105,110,32,123,33,114,125,122, -- 57,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, -- 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, -- 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, -- 32,119,105,116,104,32,123,33,114,125,122,52,111,112,116,105, -- 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,123, -- 33,114,125,32,105,115,32,110,111,116,32,97,110,32,97,108, -- 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, -- 114,59,0,0,0,62,2,0,0,0,114,56,0,0,0,114, -- 80,0,0,0,233,254,255,255,255,41,17,114,7,0,0,0, -- 114,64,0,0,0,114,65,0,0,0,114,66,0,0,0,114, -- 38,0,0,0,114,73,0,0,0,114,71,0,0,0,114,47, -- 0,0,0,218,5,99,111,117,110,116,114,34,0,0,0,114, -- 9,0,0,0,114,72,0,0,0,114,31,0,0,0,114,70, -- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,28, -- 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, -- 73,88,69,83,41,8,114,35,0,0,0,114,76,0,0,0, -- 90,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, -- 109,101,90,7,112,121,99,97,99,104,101,90,9,100,111,116, -- 95,99,111,117,110,116,114,57,0,0,0,90,9,111,112,116, -- 95,108,101,118,101,108,90,13,98,97,115,101,95,102,105,108, -- 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,115,111,117,114,99,101,95,102,114,111, -- 109,95,99,97,99,104,101,31,1,0,0,115,44,0,0,0, -- 0,9,18,1,12,1,18,1,18,1,12,1,9,1,15,1, -- 15,1,12,1,9,1,15,1,12,1,22,1,15,1,9,1, -- 12,1,22,1,12,1,9,1,12,1,19,1,114,85,0,0, -- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,12,0, -- 0,0,67,0,0,0,115,164,0,0,0,116,0,0,124,0, -- 0,131,1,0,100,1,0,107,2,0,114,22,0,100,2,0, -- 83,124,0,0,106,1,0,100,3,0,131,1,0,92,3,0, -- 125,1,0,125,2,0,125,3,0,124,1,0,12,115,81,0, -- 124,3,0,106,2,0,131,0,0,100,7,0,100,8,0,133, -- 2,0,25,100,6,0,107,3,0,114,85,0,124,0,0,83, -- 121,16,0,116,3,0,124,0,0,131,1,0,125,4,0,87, -- 110,40,0,4,116,4,0,116,5,0,102,2,0,107,10,0, -- 114,143,0,1,1,1,124,0,0,100,2,0,100,9,0,133, -- 2,0,25,125,4,0,89,110,1,0,88,116,6,0,124,4, -- 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,41, -- 10,122,188,67,111,110,118,101,114,116,32,97,32,98,121,116, -- 101,99,111,100,101,32,102,105,108,101,32,112,97,116,104,32, -- 116,111,32,97,32,115,111,117,114,99,101,32,112,97,116,104, -- 32,40,105,102,32,112,111,115,115,105,98,108,101,41,46,10, -- 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, -- 111,110,32,101,120,105,115,116,115,32,112,117,114,101,108,121, -- 32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99, -- 111,109,112,97,116,105,98,105,108,105,116,121,32,102,111,114, -- 10,32,32,32,32,80,121,73,109,112,111,114,116,95,69,120, -- 101,99,67,111,100,101,77,111,100,117,108,101,87,105,116,104, -- 70,105,108,101,110,97,109,101,115,40,41,32,105,110,32,116, -- 104,101,32,67,32,65,80,73,46,10,10,32,32,32,32,114, -- 59,0,0,0,78,114,58,0,0,0,114,80,0,0,0,114, -- 29,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, -- 255,255,114,87,0,0,0,41,7,114,31,0,0,0,114,32, -- 0,0,0,218,5,108,111,119,101,114,114,85,0,0,0,114, -- 66,0,0,0,114,71,0,0,0,114,44,0,0,0,41,5, -- 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, -- 78,0,0,0,114,36,0,0,0,90,9,101,120,116,101,110, -- 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, -- 104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, -- 101,64,1,0,0,115,20,0,0,0,0,7,18,1,4,1, -- 24,1,35,1,4,1,3,1,16,1,19,1,21,1,114,91, -- 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, -- 11,0,0,0,67,0,0,0,115,92,0,0,0,124,0,0, -- 106,0,0,116,1,0,116,2,0,131,1,0,131,1,0,114, -- 59,0,121,14,0,116,3,0,124,0,0,131,1,0,83,87, -- 113,88,0,4,116,4,0,107,10,0,114,55,0,1,1,1, -- 89,113,88,0,88,110,29,0,124,0,0,106,0,0,116,1, -- 0,116,5,0,131,1,0,131,1,0,114,84,0,124,0,0, -- 83,100,0,0,83,100,0,0,83,41,1,78,41,6,218,8, -- 101,110,100,115,119,105,116,104,218,5,116,117,112,108,101,114, -- 84,0,0,0,114,79,0,0,0,114,66,0,0,0,114,74, -- 0,0,0,41,1,218,8,102,105,108,101,110,97,109,101,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11, -- 95,103,101,116,95,99,97,99,104,101,100,83,1,0,0,115, -- 16,0,0,0,0,1,21,1,3,1,14,1,13,1,8,1, -- 21,1,4,2,114,95,0,0,0,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,60, -- 0,0,0,121,19,0,116,0,0,124,0,0,131,1,0,106, -- 1,0,125,1,0,87,110,24,0,4,116,2,0,107,10,0, -- 114,45,0,1,1,1,100,1,0,125,1,0,89,110,1,0, -- 88,124,1,0,100,2,0,79,125,1,0,124,1,0,83,41, -- 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, -- 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, -- 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, -- 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, -- 41,3,114,39,0,0,0,114,41,0,0,0,114,40,0,0, -- 0,41,2,114,35,0,0,0,114,42,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,99, -- 97,108,99,95,109,111,100,101,95,1,0,0,115,12,0,0, -- 0,0,2,3,1,19,1,13,1,11,3,10,1,114,97,0, -- 0,0,218,9,118,101,114,98,111,115,105,116,121,114,29,0, -- 0,0,99,1,0,0,0,1,0,0,0,3,0,0,0,4, -- 0,0,0,71,0,0,0,115,75,0,0,0,116,0,0,106, -- 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, -- 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, -- 124,0,0,23,125,0,0,116,4,0,124,0,0,106,5,0, -- 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, -- 1,1,1,100,5,0,83,41,7,122,61,80,114,105,110,116, -- 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, -- 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, -- 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, -- 114,110,101,100,32,111,110,46,250,1,35,250,7,105,109,112, -- 111,114,116,32,122,2,35,32,114,54,0,0,0,78,41,2, -- 114,99,0,0,0,114,100,0,0,0,41,7,114,7,0,0, -- 0,114,67,0,0,0,218,7,118,101,114,98,111,115,101,114, -- 9,0,0,0,218,5,112,114,105,110,116,114,47,0,0,0, -- 218,6,115,116,100,101,114,114,41,3,114,75,0,0,0,114, -- 98,0,0,0,218,4,97,114,103,115,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,16,95,118,101,114,98, -- 111,115,101,95,109,101,115,115,97,103,101,107,1,0,0,115, -- 8,0,0,0,0,2,18,1,15,1,10,1,114,105,0,0, -- 0,99,1,0,0,0,0,0,0,0,3,0,0,0,11,0, -- 0,0,3,0,0,0,115,84,0,0,0,100,1,0,135,0, -- 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, -- 121,13,0,116,0,0,106,1,0,125,2,0,87,110,30,0, -- 4,116,2,0,107,10,0,114,66,0,1,1,1,100,4,0, -- 100,5,0,132,0,0,125,2,0,89,110,1,0,88,124,2, -- 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41, -- 6,122,252,68,101,99,111,114,97,116,111,114,32,116,111,32, -- 118,101,114,105,102,121,32,116,104,97,116,32,116,104,101,32, -- 109,111,100,117,108,101,32,98,101,105,110,103,32,114,101,113, -- 117,101,115,116,101,100,32,109,97,116,99,104,101,115,32,116, -- 104,101,32,111,110,101,32,116,104,101,10,32,32,32,32,108, -- 111,97,100,101,114,32,99,97,110,32,104,97,110,100,108,101, -- 46,10,10,32,32,32,32,84,104,101,32,102,105,114,115,116, -- 32,97,114,103,117,109,101,110,116,32,40,115,101,108,102,41, -- 32,109,117,115,116,32,100,101,102,105,110,101,32,95,110,97, -- 109,101,32,119,104,105,99,104,32,116,104,101,32,115,101,99, -- 111,110,100,32,97,114,103,117,109,101,110,116,32,105,115,10, -- 32,32,32,32,99,111,109,112,97,114,101,100,32,97,103,97, -- 105,110,115,116,46,32,73,102,32,116,104,101,32,99,111,109, -- 112,97,114,105,115,111,110,32,102,97,105,108,115,32,116,104, -- 101,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, -- 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, -- 99,2,0,0,0,0,0,0,0,4,0,0,0,5,0,0, -- 0,31,0,0,0,115,89,0,0,0,124,1,0,100,0,0, -- 107,8,0,114,24,0,124,0,0,106,0,0,125,1,0,110, -- 46,0,124,0,0,106,0,0,124,1,0,107,3,0,114,70, -- 0,116,1,0,100,1,0,124,0,0,106,0,0,124,1,0, -- 102,2,0,22,100,2,0,124,1,0,131,1,1,130,1,0, -- 136,0,0,124,0,0,124,1,0,124,2,0,124,3,0,142, -- 2,0,83,41,3,78,122,30,108,111,97,100,101,114,32,102, -- 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, -- 100,108,101,32,37,115,218,4,110,97,109,101,41,2,114,106, -- 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, -- 41,4,218,4,115,101,108,102,114,106,0,0,0,114,104,0, -- 0,0,90,6,107,119,97,114,103,115,41,1,218,6,109,101, -- 116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19, -- 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, -- 112,101,114,123,1,0,0,115,12,0,0,0,0,1,12,1, -- 12,1,15,1,6,1,25,1,122,40,95,99,104,101,99,107, -- 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, -- 99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112, -- 101,114,99,2,0,0,0,0,0,0,0,3,0,0,0,7, -- 0,0,0,83,0,0,0,115,92,0,0,0,120,66,0,100, -- 1,0,100,2,0,100,3,0,100,4,0,103,4,0,68,93, -- 46,0,125,2,0,116,0,0,124,1,0,124,2,0,131,2, -- 0,114,19,0,116,1,0,124,0,0,124,2,0,116,2,0, -- 124,1,0,124,2,0,131,2,0,131,3,0,1,113,19,0, -- 87,124,0,0,106,3,0,106,4,0,124,1,0,106,3,0, -- 131,1,0,1,100,0,0,83,41,5,78,218,10,95,95,109, -- 111,100,117,108,101,95,95,218,8,95,95,110,97,109,101,95, -- 95,218,12,95,95,113,117,97,108,110,97,109,101,95,95,218, -- 7,95,95,100,111,99,95,95,41,5,218,7,104,97,115,97, -- 116,116,114,218,7,115,101,116,97,116,116,114,218,7,103,101, -- 116,97,116,116,114,218,8,95,95,100,105,99,116,95,95,218, -- 6,117,112,100,97,116,101,41,3,90,3,110,101,119,90,3, -- 111,108,100,114,52,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,5,95,119,114,97,112,134,1, -- 0,0,115,8,0,0,0,0,1,25,1,15,1,29,1,122, -- 26,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, -- 99,97,108,115,62,46,95,119,114,97,112,41,3,218,10,95, -- 98,111,111,116,115,116,114,97,112,114,120,0,0,0,218,9, -- 78,97,109,101,69,114,114,111,114,41,3,114,109,0,0,0, -- 114,110,0,0,0,114,120,0,0,0,114,4,0,0,0,41, -- 1,114,109,0,0,0,114,5,0,0,0,218,11,95,99,104, -- 101,99,107,95,110,97,109,101,115,1,0,0,115,14,0,0, -- 0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114, -- 123,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, -- 0,4,0,0,0,67,0,0,0,115,84,0,0,0,124,0, +- 115,32,78,111,110,101,114,30,0,0,0,114,84,0,0,0, +- 41,13,114,7,0,0,0,218,5,102,108,97,103,115,218,8, +- 111,112,116,105,109,105,122,101,218,23,68,69,66,85,71,95, +- 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, +- 83,218,27,79,80,84,73,77,73,90,69,68,95,66,89,84, +- 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,38, +- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,218,14, +- 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, +- 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, +- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,26, +- 0,0,0,114,28,0,0,0,218,8,95,80,89,67,65,67, +- 72,69,41,11,114,35,0,0,0,90,14,100,101,98,117,103, +- 95,111,118,101,114,114,105,100,101,218,5,100,101,98,117,103, +- 218,8,115,117,102,102,105,120,101,115,218,4,104,101,97,100, +- 114,37,0,0,0,218,13,98,97,115,101,95,102,105,108,101, +- 110,97,109,101,218,3,115,101,112,114,36,0,0,0,90,3, +- 116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,97, +- 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,181, +- 1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,2, +- 6,1,18,1,24,1,12,1,12,1,15,1,31,1,114,132, ++ 109,111,100,117,108,101,32,110,97,109,101,46,10,32,32,32, ++ 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111, ++ 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101, ++ 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105, ++ 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116, ++ 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32, ++ 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101, ++ 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114, ++ 101,97,100,46,10,10,32,32,32,32,83,104,111,117,108,100, ++ 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, ++ 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, ++ 108,111,99,107,32,116,97,107,101,110,46,78,41,6,114,106, ++ 0,0,0,114,107,0,0,0,114,108,0,0,0,114,98,0, ++ 0,0,114,83,0,0,0,114,99,0,0,0,41,2,114,68, ++ 0,0,0,114,87,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,19,95,108,111,99,107,95,117, ++ 110,108,111,99,107,95,109,111,100,117,108,101,37,1,0,0, ++ 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, ++ 3,5,2,114,113,0,0,0,99,1,0,0,0,0,0,0, ++ 0,3,0,0,0,3,0,0,0,79,0,0,0,115,13,0, ++ 0,0,124,0,0,124,1,0,124,2,0,142,0,0,83,41, ++ 1,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, ++ 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, ++ 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, ++ 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, ++ 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, ++ 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, ++ 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, ++ 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, ++ 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, ++ 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, ++ 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, ++ 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, ++ 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, ++ 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, ++ 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, ++ 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, ++ 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, ++ 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, ++ 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, ++ 32,32,32,32,114,5,0,0,0,41,3,218,1,102,114,81, ++ 0,0,0,90,4,107,119,100,115,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,25,95,99,97,108,108,95, ++ 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, ++ 118,101,100,57,1,0,0,115,2,0,0,0,0,8,114,115, ++ 0,0,0,105,238,12,0,0,233,2,0,0,0,114,14,0, ++ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, ++ 97,99,104,101,95,95,122,3,46,112,121,122,4,46,112,121, ++ 99,122,4,46,112,121,111,78,99,2,0,0,0,0,0,0, ++ 0,11,0,0,0,6,0,0,0,67,0,0,0,115,180,0, ++ 0,0,124,1,0,100,1,0,107,8,0,114,25,0,116,0, ++ 0,106,1,0,106,2,0,12,110,3,0,124,1,0,125,2, ++ 0,124,2,0,114,46,0,116,3,0,125,3,0,110,6,0, ++ 116,4,0,125,3,0,116,5,0,124,0,0,131,1,0,92, ++ 2,0,125,4,0,125,5,0,124,5,0,106,6,0,100,2, ++ 0,131,1,0,92,3,0,125,6,0,125,7,0,125,8,0, ++ 116,0,0,106,7,0,106,8,0,125,9,0,124,9,0,100, ++ 1,0,107,8,0,114,133,0,116,9,0,100,3,0,131,1, ++ 0,130,1,0,110,0,0,100,4,0,106,10,0,124,6,0, ++ 124,7,0,124,9,0,124,3,0,100,5,0,25,103,4,0, ++ 131,1,0,125,10,0,116,11,0,124,4,0,116,12,0,124, ++ 10,0,131,3,0,83,41,6,97,244,1,0,0,71,105,118, ++ 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, ++ 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, ++ 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, ++ 115,32,46,112,121,99,47,46,112,121,111,32,102,105,108,101, ++ 46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,102, ++ 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, ++ 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, ++ 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, ++ 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,10, ++ 32,32,32,32,46,112,121,99,47,46,112,121,111,32,102,105, ++ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115, ++ 32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101, ++ 32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,32, ++ 32,84,104,101,32,101,120,116,101,110,115,105,111,110,10,32, ++ 32,32,32,119,105,108,108,32,98,101,32,46,112,121,99,32, ++ 117,110,108,101,115,115,32,115,121,115,46,102,108,97,103,115, ++ 46,111,112,116,105,109,105,122,101,32,105,115,32,110,111,110, ++ 45,122,101,114,111,44,32,116,104,101,110,32,105,116,32,119, ++ 105,108,108,32,98,101,32,46,112,121,111,46,10,10,32,32, ++ 32,32,73,102,32,100,101,98,117,103,95,111,118,101,114,114, ++ 105,100,101,32,105,115,32,110,111,116,32,78,111,110,101,44, ++ 32,116,104,101,110,32,105,116,32,109,117,115,116,32,98,101, ++ 32,97,32,98,111,111,108,101,97,110,32,97,110,100,32,105, ++ 115,32,117,115,101,100,32,105,110,10,32,32,32,32,112,108, ++ 97,99,101,32,111,102,32,115,121,115,46,102,108,97,103,115, ++ 46,111,112,116,105,109,105,122,101,46,10,10,32,32,32,32, ++ 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, ++ 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, ++ 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, ++ 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, ++ 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, ++ 32,78,218,1,46,122,36,115,121,115,46,105,109,112,108,101, ++ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, ++ 116,97,103,32,105,115,32,78,111,110,101,114,31,0,0,0, ++ 114,85,0,0,0,41,13,114,8,0,0,0,218,5,102,108, ++ 97,103,115,218,8,111,112,116,105,109,105,122,101,218,23,68, ++ 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, ++ 70,70,73,88,69,83,218,27,79,80,84,73,77,73,90,69, ++ 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, ++ 88,69,83,114,39,0,0,0,218,9,112,97,114,116,105,116, ++ 105,111,110,218,14,105,109,112,108,101,109,101,110,116,97,116, ++ 105,111,110,218,9,99,97,99,104,101,95,116,97,103,218,19, ++ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, ++ 114,111,114,114,27,0,0,0,114,29,0,0,0,218,8,95, ++ 80,89,67,65,67,72,69,41,11,114,36,0,0,0,90,14, ++ 100,101,98,117,103,95,111,118,101,114,114,105,100,101,218,5, ++ 100,101,98,117,103,218,8,115,117,102,102,105,120,101,115,218, ++ 4,104,101,97,100,114,38,0,0,0,218,13,98,97,115,101, ++ 95,102,105,108,101,110,97,109,101,218,3,115,101,112,114,37, ++ 0,0,0,90,3,116,97,103,218,8,102,105,108,101,110,97, ++ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, ++ 117,114,99,101,181,1,0,0,115,22,0,0,0,0,13,31, ++ 1,6,1,9,2,6,1,18,1,24,1,12,1,12,1,15, ++ 1,31,1,114,133,0,0,0,99,1,0,0,0,0,0,0, ++ 0,5,0,0,0,5,0,0,0,67,0,0,0,115,193,0, ++ 0,0,116,0,0,106,1,0,106,2,0,100,1,0,107,8, ++ 0,114,33,0,116,3,0,100,2,0,131,1,0,130,1,0, ++ 110,0,0,116,4,0,124,0,0,131,1,0,92,2,0,125, ++ 1,0,125,2,0,116,4,0,124,1,0,131,1,0,92,2, ++ 0,125,1,0,125,3,0,124,3,0,116,5,0,107,3,0, ++ 114,108,0,116,6,0,100,3,0,106,7,0,116,5,0,124, ++ 0,0,131,2,0,131,1,0,130,1,0,110,0,0,124,2, ++ 0,106,8,0,100,4,0,131,1,0,100,5,0,107,3,0, ++ 114,153,0,116,6,0,100,6,0,106,7,0,124,2,0,131, ++ 1,0,131,1,0,130,1,0,110,0,0,124,2,0,106,9, ++ 0,100,4,0,131,1,0,100,7,0,25,125,4,0,116,10, ++ 0,124,1,0,124,4,0,116,11,0,100,7,0,25,23,131, ++ 2,0,83,41,8,97,121,1,0,0,71,105,118,101,110,32, ++ 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, ++ 121,99,46,47,46,112,121,111,32,102,105,108,101,44,32,114, ++ 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, ++ 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10, ++ 10,32,32,32,32,84,104,101,32,46,112,121,99,47,46,112, ++ 121,111,32,102,105,108,101,32,100,111,101,115,32,110,111,116, ++ 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, ++ 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, ++ 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, ++ 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, ++ 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, ++ 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, ++ 32,46,112,121,99,47,46,112,121,111,32,102,105,108,101,46, ++ 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, ++ 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, ++ 111,32,80,69,80,32,51,49,52,55,32,102,111,114,109,97, ++ 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, ++ 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, ++ 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, ++ 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, ++ 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, ++ 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, ++ 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, ++ 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, ++ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, ++ 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, ++ 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, ++ 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, ++ 125,114,117,0,0,0,114,116,0,0,0,122,28,101,120,112, ++ 101,99,116,101,100,32,111,110,108,121,32,50,32,100,111,116, ++ 115,32,105,110,32,123,33,114,125,114,85,0,0,0,41,12, ++ 114,8,0,0,0,114,123,0,0,0,114,124,0,0,0,114, ++ 125,0,0,0,114,39,0,0,0,114,126,0,0,0,218,10, ++ 86,97,108,117,101,69,114,114,111,114,114,48,0,0,0,114, ++ 90,0,0,0,114,122,0,0,0,114,29,0,0,0,218,15, ++ 83,79,85,82,67,69,95,83,85,70,70,73,88,69,83,41, ++ 5,114,36,0,0,0,114,129,0,0,0,90,16,112,121,99, ++ 97,99,104,101,95,102,105,108,101,110,97,109,101,90,7,112, ++ 121,99,97,99,104,101,114,130,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,17,115,111,117,114, ++ 99,101,95,102,114,111,109,95,99,97,99,104,101,208,1,0, ++ 0,115,24,0,0,0,0,9,18,1,15,1,18,1,18,1, ++ 12,1,3,1,24,1,21,1,3,1,21,1,19,1,114,136, + 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, +- 5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,0, +- 106,1,0,106,2,0,100,1,0,107,8,0,114,33,0,116, +- 3,0,100,2,0,131,1,0,130,1,0,110,0,0,116,4, +- 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, +- 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, +- 3,0,124,3,0,116,5,0,107,3,0,114,108,0,116,6, +- 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, +- 131,1,0,130,1,0,110,0,0,124,2,0,106,8,0,100, +- 4,0,131,1,0,100,5,0,107,3,0,114,153,0,116,6, +- 0,100,6,0,106,7,0,124,2,0,131,1,0,131,1,0, +- 130,1,0,110,0,0,124,2,0,106,9,0,100,4,0,131, +- 1,0,100,7,0,25,125,4,0,116,10,0,124,1,0,124, +- 4,0,116,11,0,100,7,0,25,23,131,2,0,83,41,8, +- 97,121,1,0,0,71,105,118,101,110,32,116,104,101,32,112, +- 97,116,104,32,116,111,32,97,32,46,112,121,99,46,47,46, +- 112,121,111,32,102,105,108,101,44,32,114,101,116,117,114,110, +- 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, +- 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, +- 84,104,101,32,46,112,121,99,47,46,112,121,111,32,102,105, +- 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, +- 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, +- 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, +- 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, +- 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, +- 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, +- 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, +- 47,46,112,121,111,32,102,105,108,101,46,32,32,73,102,32, +- 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, +- 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, +- 32,51,49,52,55,32,102,111,114,109,97,116,44,32,86,97, +- 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, +- 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, +- 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, +- 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, +- 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, +- 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, +- 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, +- 32,78,111,110,101,122,37,123,125,32,110,111,116,32,98,111, +- 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, +- 116,111,114,121,32,105,110,32,123,33,114,125,114,116,0,0, +- 0,114,115,0,0,0,122,28,101,120,112,101,99,116,101,100, +- 32,111,110,108,121,32,50,32,100,111,116,115,32,105,110,32, +- 123,33,114,125,114,84,0,0,0,41,12,114,7,0,0,0, +- 114,122,0,0,0,114,123,0,0,0,114,124,0,0,0,114, +- 38,0,0,0,114,125,0,0,0,218,10,86,97,108,117,101, +- 69,114,114,111,114,114,47,0,0,0,114,89,0,0,0,114, +- 121,0,0,0,114,28,0,0,0,218,15,83,79,85,82,67, +- 69,95,83,85,70,70,73,88,69,83,41,5,114,35,0,0, +- 0,114,128,0,0,0,90,16,112,121,99,97,99,104,101,95, +- 102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,104, +- 101,114,129,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,114, +- 111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,0, +- 0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24, +- 1,21,1,3,1,21,1,19,1,114,135,0,0,0,99,1, +- 0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67, +- 0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1, +- 0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0, +- 0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0, +- 125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0, +- 106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25, +- 100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0, +- 116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0, +- 4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0, +- 1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25, +- 125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1, +- 0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188, +- 67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111, +- 100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32, +- 97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105, +- 102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32, +- 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, +- 101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111, +- 114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112, +- 97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32, +- 32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67, +- 111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108, +- 101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32, +- 67,32,65,80,73,46,10,10,32,32,32,32,114,84,0,0, +- 0,78,114,116,0,0,0,233,3,0,0,0,114,29,0,0, +- 0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114, +- 138,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0, +- 218,5,108,111,119,101,114,114,135,0,0,0,114,124,0,0, +- 0,114,133,0,0,0,114,44,0,0,0,41,5,218,13,98, +- 121,116,101,99,111,100,101,95,112,97,116,104,90,4,114,101, +- 115,116,114,36,0,0,0,90,9,101,120,116,101,110,115,105, +- 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15, +- 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,231, +- 1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1, +- 35,1,4,1,3,1,16,1,19,1,21,1,114,142,0,0, +- 0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, +- 0,0,67,0,0,0,115,60,0,0,0,121,19,0,116,0, +- 0,124,0,0,131,1,0,106,1,0,125,1,0,87,110,24, +- 0,4,116,2,0,107,10,0,114,45,0,1,1,1,100,1, +- 0,125,1,0,89,110,1,0,88,124,1,0,100,2,0,79, +- 125,1,0,124,1,0,83,41,3,122,51,67,97,108,99,117, +- 108,97,116,101,32,116,104,101,32,109,111,100,101,32,112,101, +- 114,109,105,115,115,105,111,110,115,32,102,111,114,32,97,32, +- 98,121,116,101,99,111,100,101,32,102,105,108,101,46,105,182, +- 1,0,0,233,128,0,0,0,41,3,114,39,0,0,0,114, +- 41,0,0,0,114,40,0,0,0,41,2,114,35,0,0,0, +- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, +- 250,1,0,0,115,12,0,0,0,0,2,3,1,19,1,13, +- 1,11,3,10,1,114,144,0,0,0,218,9,118,101,114,98, +- 111,115,105,116,121,114,29,0,0,0,99,1,0,0,0,1, +- 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, +- 81,0,0,0,116,0,0,106,1,0,106,2,0,124,1,0, +- 107,5,0,114,77,0,124,0,0,106,3,0,100,6,0,131, +- 1,0,115,46,0,100,3,0,124,0,0,23,125,0,0,110, +- 0,0,116,4,0,124,0,0,106,5,0,124,2,0,140,0, +- 0,100,4,0,116,0,0,106,6,0,131,1,1,1,110,0, +- 0,100,5,0,83,41,7,122,61,80,114,105,110,116,32,116, +- 104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,116, +- 100,101,114,114,32,105,102,32,45,118,47,80,89,84,72,79, +- 78,86,69,82,66,79,83,69,32,105,115,32,116,117,114,110, +- 101,100,32,111,110,46,250,1,35,250,7,105,109,112,111,114, +- 116,32,122,2,35,32,114,54,0,0,0,78,41,2,114,146, +- 0,0,0,114,147,0,0,0,41,7,114,7,0,0,0,114, +- 117,0,0,0,218,7,118,101,114,98,111,115,101,114,9,0, +- 0,0,218,5,112,114,105,110,116,114,47,0,0,0,218,6, +- 115,116,100,101,114,114,41,3,218,7,109,101,115,115,97,103, +- 101,114,145,0,0,0,114,80,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,16,95,118,101,114, +- 98,111,115,101,95,109,101,115,115,97,103,101,6,2,0,0, +- 115,8,0,0,0,0,2,18,1,15,1,13,1,114,152,0, +- 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,4, +- 0,0,0,3,0,0,0,115,38,0,0,0,100,1,0,135, +- 0,0,102,1,0,100,2,0,100,3,0,134,1,0,125,1, +- 0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,1, +- 0,83,41,4,122,252,68,101,99,111,114,97,116,111,114,32, +- 116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116, +- 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, +- 114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,101, +- 115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,32, +- 32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,110, +- 100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,105, +- 114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,101, +- 108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,32, +- 95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,32, +- 115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32, +- 105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,32, +- 97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,32, +- 99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,115, +- 32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,111, +- 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, +- 32,32,78,99,2,0,0,0,0,0,0,0,4,0,0,0, +- 5,0,0,0,31,0,0,0,115,83,0,0,0,124,1,0, +- 100,0,0,107,8,0,114,24,0,124,0,0,106,0,0,125, +- 1,0,110,40,0,124,0,0,106,0,0,124,1,0,107,3, +- 0,114,64,0,116,1,0,100,1,0,124,1,0,22,100,2, +- 0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0, +- 124,0,0,124,1,0,124,2,0,124,3,0,142,2,0,83, +- 41,3,78,122,23,108,111,97,100,101,114,32,99,97,110,110, +- 111,116,32,104,97,110,100,108,101,32,37,115,114,67,0,0, +- 0,41,2,114,67,0,0,0,218,11,73,109,112,111,114,116, +- 69,114,114,111,114,41,4,114,71,0,0,0,114,67,0,0, +- 0,114,80,0,0,0,114,108,0,0,0,41,1,218,6,109, +- 101,116,104,111,100,114,4,0,0,0,114,5,0,0,0,218, +- 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, +- 112,112,101,114,22,2,0,0,115,10,0,0,0,0,1,12, +- 1,12,1,15,1,25,1,122,40,95,99,104,101,99,107,95, +- 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,99, +- 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, +- 114,41,1,114,65,0,0,0,41,2,114,154,0,0,0,114, +- 155,0,0,0,114,4,0,0,0,41,1,114,154,0,0,0, +- 114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,97, +- 109,101,14,2,0,0,115,6,0,0,0,0,8,21,6,13, +- 1,114,156,0,0,0,99,1,0,0,0,0,0,0,0,2, +- 0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0, +- 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125, +- 1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124, +- 1,0,83,41,3,122,49,68,101,99,111,114,97,116,111,114, +- 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, +- 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, +- 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,19,0,0,0,115,58,0, +- 0,0,124,1,0,116,0,0,106,1,0,107,7,0,114,45, +- 0,116,2,0,100,1,0,106,3,0,124,1,0,131,1,0, +- 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,136, +- 0,0,124,0,0,124,1,0,131,2,0,83,41,3,78,122, +- 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, +- 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,67, +- 0,0,0,41,4,114,7,0,0,0,218,20,98,117,105,108, +- 116,105,110,95,109,111,100,117,108,101,95,110,97,109,101,115, +- 114,153,0,0,0,114,47,0,0,0,41,2,114,71,0,0, +- 0,218,8,102,117,108,108,110,97,109,101,41,1,218,3,102, +- 120,110,114,4,0,0,0,114,5,0,0,0,218,25,95,114, +- 101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,95, +- 119,114,97,112,112,101,114,34,2,0,0,115,8,0,0,0, +- 0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,105, +- 114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99, +- 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98, +- 117,105,108,116,105,110,95,119,114,97,112,112,101,114,41,1, +- 114,65,0,0,0,41,2,114,159,0,0,0,114,160,0,0, +- 0,114,4,0,0,0,41,1,114,159,0,0,0,114,5,0, +- 0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,117, +- 105,108,116,105,110,32,2,0,0,115,6,0,0,0,0,2, +- 18,5,13,1,114,161,0,0,0,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35, +- 0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, +- 0,0,125,1,0,116,0,0,124,1,0,136,0,0,131,2, +- 0,1,124,1,0,83,41,3,122,47,68,101,99,111,114,97, +- 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, +- 101,32,110,97,109,101,100,32,109,111,100,117,108,101,32,105, +- 115,32,102,114,111,122,101,110,46,99,2,0,0,0,0,0, +- 0,0,2,0,0,0,4,0,0,0,19,0,0,0,115,58, +- 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,115, +- 45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,1, +- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, +- 136,0,0,124,0,0,124,1,0,131,2,0,83,41,3,78, +- 122,27,123,33,114,125,32,105,115,32,110,111,116,32,97,32, +- 102,114,111,122,101,110,32,109,111,100,117,108,101,114,67,0, +- 0,0,41,4,114,106,0,0,0,218,9,105,115,95,102,114, +- 111,122,101,110,114,153,0,0,0,114,47,0,0,0,41,2, +- 114,71,0,0,0,114,158,0,0,0,41,1,114,159,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,24,95,114,101, +- 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, +- 97,112,112,101,114,45,2,0,0,115,8,0,0,0,0,1, +- 15,1,18,1,12,1,122,50,95,114,101,113,117,105,114,101, +- 115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,115, +- 62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,122, +- 101,110,95,119,114,97,112,112,101,114,41,1,114,65,0,0, +- 0,41,2,114,159,0,0,0,114,163,0,0,0,114,4,0, +- 0,0,41,1,114,159,0,0,0,114,5,0,0,0,218,16, +- 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, +- 43,2,0,0,115,6,0,0,0,0,2,18,5,13,1,114, +- 164,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, +- 0,5,0,0,0,67,0,0,0,115,87,0,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, -- 125,3,0,124,2,0,100,1,0,107,8,0,114,80,0,116, -- 1,0,124,3,0,131,1,0,114,80,0,100,2,0,125,4, +- 125,3,0,124,2,0,100,1,0,107,8,0,114,83,0,116, +- 1,0,124,3,0,131,1,0,114,83,0,100,2,0,125,4, - 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, -- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,124,2, -- 0,83,41,4,122,155,84,114,121,32,116,111,32,102,105,110, -- 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, -- 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, -- 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, -- 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, -- 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, -- 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, -- 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, -- 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, -- 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, -- 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, -- 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, -- 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, -- 114,59,0,0,0,41,6,218,11,102,105,110,100,95,108,111, -- 97,100,101,114,114,31,0,0,0,114,60,0,0,0,114,61, -- 0,0,0,114,47,0,0,0,218,13,73,109,112,111,114,116, -- 87,97,114,110,105,110,103,41,5,114,108,0,0,0,218,8, -- 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114, -- 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, -- 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, -- 109,143,1,0,0,115,10,0,0,0,0,10,21,1,24,1, -- 6,1,29,1,114,130,0,0,0,99,4,0,0,0,0,0, -- 0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,240, -- 1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107, -- 9,0,114,31,0,124,2,0,124,4,0,100,2,0,60,110, -- 6,0,100,3,0,125,2,0,124,3,0,100,1,0,107,9, -- 0,114,59,0,124,3,0,124,4,0,100,4,0,60,124,0, -- 0,100,1,0,100,5,0,133,2,0,25,125,5,0,124,0, -- 0,100,5,0,100,6,0,133,2,0,25,125,6,0,124,0, -- 0,100,6,0,100,7,0,133,2,0,25,125,7,0,124,5, -- 0,116,0,0,107,3,0,114,168,0,100,8,0,106,1,0, -- 124,2,0,124,5,0,131,2,0,125,8,0,116,2,0,100, -- 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, -- 4,0,141,1,0,130,1,0,110,119,0,116,4,0,124,6, -- 0,131,1,0,100,5,0,107,3,0,114,229,0,100,10,0, -- 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, -- 9,0,124,8,0,131,2,0,1,116,5,0,124,8,0,131, -- 1,0,130,1,0,110,58,0,116,4,0,124,7,0,131,1, -- 0,100,5,0,107,3,0,114,31,1,100,11,0,106,1,0, -- 124,2,0,131,1,0,125,8,0,116,2,0,100,9,0,124, -- 8,0,131,2,0,1,116,5,0,124,8,0,131,1,0,130, -- 1,0,124,1,0,100,1,0,107,9,0,114,226,1,121,20, -- 0,116,6,0,124,1,0,100,12,0,25,131,1,0,125,9, -- 0,87,110,18,0,4,116,7,0,107,10,0,114,83,1,1, -- 1,1,89,110,62,0,88,116,8,0,124,6,0,131,1,0, -- 124,9,0,107,3,0,114,145,1,100,13,0,106,1,0,124, -- 2,0,131,1,0,125,8,0,116,2,0,100,9,0,124,8, -- 0,131,2,0,1,116,3,0,124,8,0,124,4,0,141,1, -- 0,130,1,0,121,18,0,124,1,0,100,14,0,25,100,15, -- 0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0, -- 114,183,1,1,1,1,89,110,43,0,88,116,8,0,124,7, -- 0,131,1,0,124,10,0,107,3,0,114,226,1,116,3,0, -- 100,13,0,106,1,0,124,2,0,131,1,0,124,4,0,141, -- 1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2, -- 0,25,83,41,16,97,122,1,0,0,86,97,108,105,100,97, -- 116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,102, -- 32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,98, -- 121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,32, -- 115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,102, -- 10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,32, -- 114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,121, -- 116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,32, -- 98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,99, -- 111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,65, -- 108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,110, -- 116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101, -- 110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,112, -- 111,114,116,105,110,103,46,10,10,32,32,32,32,73,109,112, -- 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, -- 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, -- 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, -- 114,114,101,99,116,32,111,114,32,116,104,101,32,98,121,116, -- 101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,117, -- 110,100,32,116,111,32,98,101,32,115,116,97,108,101,46,32, -- 69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,115, -- 101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,97, -- 32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,10, -- 32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,10, -- 32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,116, -- 101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,0, -- 233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,32, -- 109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32, -- 123,33,114,125,58,32,123,33,114,125,122,2,123,125,122,43, -- 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, -- 101,32,114,101,97,100,105,110,103,32,116,105,109,101,115,116, -- 97,109,112,32,105,110,32,123,33,114,125,122,48,114,101,97, -- 99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114, -- 101,97,100,105,110,103,32,115,105,122,101,32,111,102,32,115, -- 111,117,114,99,101,32,105,110,32,123,33,114,125,218,5,109, -- 116,105,109,101,122,26,98,121,116,101,99,111,100,101,32,105, -- 115,32,115,116,97,108,101,32,102,111,114,32,123,33,114,125, -- 218,4,115,105,122,101,108,3,0,0,0,255,127,255,127,3, -- 0,41,9,218,12,77,65,71,73,67,95,78,85,77,66,69, -- 82,114,47,0,0,0,114,105,0,0,0,114,107,0,0,0, -- 114,31,0,0,0,218,8,69,79,70,69,114,114,111,114,114, -- 14,0,0,0,218,8,75,101,121,69,114,114,111,114,114,19, -- 0,0,0,41,11,114,53,0,0,0,218,12,115,111,117,114, -- 99,101,95,115,116,97,116,115,114,106,0,0,0,114,35,0, -- 0,0,90,11,101,120,99,95,100,101,116,97,105,108,115,90, -- 5,109,97,103,105,99,90,13,114,97,119,95,116,105,109,101, -- 115,116,97,109,112,90,8,114,97,119,95,115,105,122,101,114, -- 75,0,0,0,218,12,115,111,117,114,99,101,95,109,116,105, -- 109,101,218,11,115,111,117,114,99,101,95,115,105,122,101,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,25, -- 95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111, -- 100,101,95,104,101,97,100,101,114,160,1,0,0,115,76,0, -- 0,0,0,11,6,1,12,1,13,3,6,1,12,1,10,1, -- 16,1,16,1,16,1,12,1,18,1,13,1,18,1,18,1, -- 15,1,13,1,15,1,18,1,15,1,13,1,12,1,12,1, -- 3,1,20,1,13,1,5,2,18,1,15,1,13,1,15,1, -- 3,1,18,1,13,1,5,2,18,1,15,1,9,1,114,141, -- 0,0,0,99,4,0,0,0,0,0,0,0,5,0,0,0, -- 6,0,0,0,67,0,0,0,115,112,0,0,0,116,0,0, -- 106,1,0,124,0,0,131,1,0,125,4,0,116,2,0,124, -- 4,0,116,3,0,131,2,0,114,75,0,116,4,0,100,1, -- 0,124,2,0,131,2,0,1,124,3,0,100,2,0,107,9, -- 0,114,71,0,116,5,0,106,6,0,124,4,0,124,3,0, -- 131,2,0,1,124,4,0,83,116,7,0,100,3,0,106,8, -- 0,124,2,0,131,1,0,100,4,0,124,1,0,100,5,0, -- 124,2,0,131,1,2,130,1,0,100,2,0,83,41,6,122, -- 60,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, -- 101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121, -- 32,95,118,97,108,105,100,97,116,101,95,98,121,116,101,99, -- 111,100,101,95,104,101,97,100,101,114,40,41,46,122,21,99, -- 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, -- 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, -- 111,98,106,101,99,116,32,105,110,32,123,33,114,125,114,106, -- 0,0,0,114,35,0,0,0,41,9,218,7,109,97,114,115, -- 104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,110, -- 115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,121, -- 112,101,114,105,0,0,0,218,4,95,105,109,112,90,16,95, -- 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, -- 107,0,0,0,114,47,0,0,0,41,5,114,53,0,0,0, -- 114,106,0,0,0,114,89,0,0,0,114,90,0,0,0,218, -- 4,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,99,111,109,112,105,108,101,95,98, -- 121,116,101,99,111,100,101,215,1,0,0,115,16,0,0,0, -- 0,2,15,1,15,1,13,1,12,1,16,1,4,2,18,1, -- 114,147,0,0,0,114,59,0,0,0,99,3,0,0,0,0, -- 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, -- 76,0,0,0,116,0,0,116,1,0,131,1,0,125,3,0, -- 124,3,0,106,2,0,116,3,0,124,1,0,131,1,0,131, -- 1,0,1,124,3,0,106,2,0,116,3,0,124,2,0,131, -- 1,0,131,1,0,1,124,3,0,106,2,0,116,4,0,106, -- 5,0,124,0,0,131,1,0,131,1,0,1,124,3,0,83, -- 41,1,122,80,67,111,109,112,105,108,101,32,97,32,99,111, -- 100,101,32,111,98,106,101,99,116,32,105,110,116,111,32,98, -- 121,116,101,99,111,100,101,32,102,111,114,32,119,114,105,116, -- 105,110,103,32,111,117,116,32,116,111,32,97,32,98,121,116, -- 101,45,99,111,109,112,105,108,101,100,10,32,32,32,32,102, -- 105,108,101,46,41,6,218,9,98,121,116,101,97,114,114,97, -- 121,114,135,0,0,0,218,6,101,120,116,101,110,100,114,17, -- 0,0,0,114,142,0,0,0,90,5,100,117,109,112,115,41, -- 4,114,146,0,0,0,114,133,0,0,0,114,140,0,0,0, -- 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,99,111,100,101,95,116,111,95,98, -- 121,116,101,99,111,100,101,227,1,0,0,115,10,0,0,0, -- 0,3,12,1,19,1,19,1,22,1,114,150,0,0,0,99, -- 1,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, -- 67,0,0,0,115,89,0,0,0,100,1,0,100,2,0,108, -- 0,0,125,1,0,116,1,0,106,2,0,124,0,0,131,1, -- 0,106,3,0,125,2,0,124,1,0,106,4,0,124,2,0, -- 131,1,0,125,3,0,116,1,0,106,5,0,100,2,0,100, -- 3,0,131,2,0,125,4,0,124,4,0,106,6,0,124,0, -- 0,106,6,0,124,3,0,100,1,0,25,131,1,0,131,1, -- 0,83,41,4,122,121,68,101,99,111,100,101,32,98,121,116, -- 101,115,32,114,101,112,114,101,115,101,110,116,105,110,103,32, -- 115,111,117,114,99,101,32,99,111,100,101,32,97,110,100,32, -- 114,101,116,117,114,110,32,116,104,101,32,115,116,114,105,110, -- 103,46,10,10,32,32,32,32,85,110,105,118,101,114,115,97, -- 108,32,110,101,119,108,105,110,101,32,115,117,112,112,111,114, -- 116,32,105,115,32,117,115,101,100,32,105,110,32,116,104,101, -- 32,100,101,99,111,100,105,110,103,46,10,32,32,32,32,114, -- 59,0,0,0,78,84,41,7,218,8,116,111,107,101,110,105, -- 122,101,114,49,0,0,0,90,7,66,121,116,101,115,73,79, -- 90,8,114,101,97,100,108,105,110,101,90,15,100,101,116,101, -- 99,116,95,101,110,99,111,100,105,110,103,90,25,73,110,99, -- 114,101,109,101,110,116,97,108,78,101,119,108,105,110,101,68, -- 101,99,111,100,101,114,218,6,100,101,99,111,100,101,41,5, -- 218,12,115,111,117,114,99,101,95,98,121,116,101,115,114,151, -- 0,0,0,90,21,115,111,117,114,99,101,95,98,121,116,101, -- 115,95,114,101,97,100,108,105,110,101,218,8,101,110,99,111, -- 100,105,110,103,90,15,110,101,119,108,105,110,101,95,100,101, -- 99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,13,100,101,99,111,100,101,95,115,111,117, -- 114,99,101,237,1,0,0,115,10,0,0,0,0,5,12,1, -- 18,1,15,1,18,1,114,155,0,0,0,114,127,0,0,0, -- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, -- 99,104,95,108,111,99,97,116,105,111,110,115,99,2,0,0, -- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, -- 0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114, -- 73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, -- 0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0, -- 124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2, -- 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116, -- 3,0,106,4,0,124,0,0,124,2,0,100,4,0,124,1, -- 0,131,2,1,125,4,0,100,5,0,124,4,0,95,5,0, -- 124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116, -- 6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125, -- 6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1, -- 0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0, -- 131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80, -- 113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8, -- 0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0, -- 114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131, -- 1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0, -- 114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32, -- 1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0, -- 124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107, -- 2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1, -- 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12, -- 0,106,14,0,124,8,0,131,1,0,1,124,4,0,83,41, -- 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, -- 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, -- 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, -- 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, -- 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, -- 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, -- 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, -- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, -- 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, -- 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, -- 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, -- 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, -- 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, -- 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, -- 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, -- 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, -- 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, -- 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, -- 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, -- 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, -- 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, -- 12,103,101,116,95,102,105,108,101,110,97,109,101,218,6,111, -- 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, -- 103,101,114,59,0,0,0,41,15,114,115,0,0,0,114,157, -- 0,0,0,114,107,0,0,0,114,121,0,0,0,218,10,77, -- 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, -- 102,105,108,101,97,116,116,114,218,27,95,103,101,116,95,115, -- 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, -- 97,100,101,114,115,114,92,0,0,0,114,93,0,0,0,114, -- 127,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, -- 159,0,0,0,114,156,0,0,0,114,38,0,0,0,218,6, -- 97,112,112,101,110,100,41,9,114,106,0,0,0,90,8,108, -- 111,99,97,116,105,111,110,114,127,0,0,0,114,156,0,0, -- 0,218,4,115,112,101,99,218,12,108,111,97,100,101,114,95, -- 99,108,97,115,115,218,8,115,117,102,102,105,120,101,115,114, -- 159,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,23,115,112, -- 101,99,95,102,114,111,109,95,102,105,108,101,95,108,111,99, -- 97,116,105,111,110,254,1,0,0,115,60,0,0,0,0,12, -- 12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1, -- 9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3, -- 12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2, -- 9,1,15,1,6,1,16,1,16,2,114,167,0,0,0,99, -- 0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, -- 64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100, -- 0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4, -- 0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0, -- 100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101, -- 7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9, -- 0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0, -- 132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100, -- 12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9, -- 0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103, -- 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, -- 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, -- 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, -- 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, -- 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, -- 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, -- 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, -- 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, -- 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, -- 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, -- 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, -- 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, -- 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, -- 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, -- 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, -- 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, -- 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, -- 89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7, -- 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, -- 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, -- 83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76, -- 79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3, -- 99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114, -- 101,103,105,115,116,114,121,76,2,0,0,115,8,0,0,0, -- 0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119, -- 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, -- 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, -- 0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67, -- 0,0,0,115,143,0,0,0,124,0,0,106,0,0,114,21, -- 0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0, -- 106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124, -- 1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3, -- 0,133,2,0,25,131,0,2,125,3,0,121,47,0,124,0, -- 0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0, -- 116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125, -- 5,0,87,100,0,0,81,82,88,87,110,22,0,4,116,9, -- 0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,110, -- 1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,90, -- 11,115,121,115,95,118,101,114,115,105,111,110,114,80,0,0, -- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, -- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, -- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, -- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, -- 0,218,7,118,101,114,115,105,111,110,114,172,0,0,0,114, -- 169,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, -- 114,40,0,0,0,41,6,114,170,0,0,0,114,126,0,0, -- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, -- 171,0,0,0,90,4,104,107,101,121,218,8,102,105,108,101, -- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, -- 105,115,116,114,121,83,2,0,0,115,22,0,0,0,0,2, -- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,1, -- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, -- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, -- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, -- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, -- 0,0,115,158,0,0,0,124,0,0,106,0,0,124,1,0, -- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, -- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, -- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, -- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,81,0, -- 116,3,0,131,0,0,68,93,70,0,92,2,0,125,5,0, -- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, -- 1,0,131,1,0,114,80,0,116,6,0,106,7,0,124,1, -- 0,124,5,0,124,1,0,124,4,0,131,2,0,100,1,0, -- 124,4,0,131,2,1,125,7,0,124,7,0,83,113,80,0, -- 87,100,0,0,83,41,2,78,114,158,0,0,0,41,8,114, -- 178,0,0,0,114,39,0,0,0,114,40,0,0,0,114,161, -- 0,0,0,114,92,0,0,0,114,93,0,0,0,114,121,0, -- 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, -- 97,100,101,114,41,8,114,170,0,0,0,114,126,0,0,0, -- 114,35,0,0,0,218,6,116,97,114,103,101,116,114,177,0, -- 0,0,114,127,0,0,0,114,166,0,0,0,114,164,0,0, +- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,110,0, +- 0,124,2,0,83,41,4,122,155,84,114,121,32,116,111,32, +- 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, +- 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, +- 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, +- 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, +- 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, +- 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, +- 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, +- 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, +- 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, +- 32,32,32,32,78,122,44,78,111,116,32,105,109,112,111,114, +- 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, +- 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, +- 116,95,95,114,84,0,0,0,41,6,218,11,102,105,110,100, +- 95,108,111,97,100,101,114,114,31,0,0,0,218,9,95,119, +- 97,114,110,105,110,103,115,218,4,119,97,114,110,114,47,0, +- 0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,110, +- 103,41,5,114,71,0,0,0,114,158,0,0,0,218,6,108, +- 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, +- 3,109,115,103,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, +- 101,95,115,104,105,109,54,2,0,0,115,10,0,0,0,0, +- 10,21,1,24,1,6,1,32,1,114,172,0,0,0,99,2, +- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, +- 0,0,0,115,93,0,0,0,116,0,0,124,1,0,124,0, +- 0,131,2,0,125,2,0,116,1,0,124,2,0,131,1,0, +- 125,3,0,124,1,0,116,2,0,106,3,0,107,6,0,114, +- 79,0,116,2,0,106,3,0,124,1,0,25,125,4,0,124, +- 3,0,106,4,0,124,4,0,131,1,0,1,116,2,0,106, +- 3,0,124,1,0,25,83,124,3,0,106,5,0,131,0,0, +- 83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,104, +- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, +- 108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117, +- 108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105, +- 116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101, +- 120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,112, +- 101,99,95,102,114,111,109,95,108,111,97,100,101,114,218,12, +- 95,83,112,101,99,77,101,116,104,111,100,115,114,7,0,0, +- 0,114,73,0,0,0,218,4,101,120,101,99,218,4,108,111, +- 97,100,41,5,114,71,0,0,0,114,158,0,0,0,218,4, +- 115,112,101,99,218,7,109,101,116,104,111,100,115,218,6,109, +- 111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, +- 108,101,95,115,104,105,109,71,2,0,0,115,14,0,0,0, +- 0,6,15,1,12,1,15,1,13,1,13,1,11,2,114,180, +- 0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,0, +- 19,0,0,0,67,0,0,0,115,243,1,0,0,105,0,0, +- 125,4,0,124,2,0,100,1,0,107,9,0,114,31,0,124, +- 2,0,124,4,0,100,2,0,60,110,6,0,100,3,0,125, +- 2,0,124,3,0,100,1,0,107,9,0,114,62,0,124,3, +- 0,124,4,0,100,4,0,60,110,0,0,124,0,0,100,1, +- 0,100,5,0,133,2,0,25,125,5,0,124,0,0,100,5, +- 0,100,6,0,133,2,0,25,125,6,0,124,0,0,100,6, +- 0,100,7,0,133,2,0,25,125,7,0,124,5,0,116,0, +- 0,107,3,0,114,168,0,100,8,0,106,1,0,124,2,0, +- 124,5,0,131,2,0,125,8,0,116,2,0,124,8,0,131, +- 1,0,1,116,3,0,124,8,0,124,4,0,141,1,0,130, +- 1,0,110,116,0,116,4,0,124,6,0,131,1,0,100,5, +- 0,107,3,0,114,226,0,100,9,0,106,1,0,124,2,0, +- 131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1, +- 116,5,0,124,8,0,131,1,0,130,1,0,110,58,0,116, +- 4,0,124,7,0,131,1,0,100,5,0,107,3,0,114,28, +- 1,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, +- 116,2,0,124,8,0,131,1,0,1,116,5,0,124,8,0, +- 131,1,0,130,1,0,110,0,0,124,1,0,100,1,0,107, +- 9,0,114,229,1,121,20,0,116,6,0,124,1,0,100,11, +- 0,25,131,1,0,125,9,0,87,110,18,0,4,116,7,0, +- 107,10,0,114,80,1,1,1,1,89,110,62,0,88,116,8, +- 0,124,6,0,131,1,0,124,9,0,107,3,0,114,142,1, +- 100,12,0,106,1,0,124,2,0,131,1,0,125,8,0,116, +- 2,0,124,8,0,131,1,0,1,116,3,0,124,8,0,124, +- 4,0,141,1,0,130,1,0,110,0,0,121,18,0,124,1, +- 0,100,13,0,25,100,14,0,64,125,10,0,87,110,18,0, +- 4,116,7,0,107,10,0,114,180,1,1,1,1,89,113,229, +- 1,88,116,8,0,124,7,0,131,1,0,124,10,0,107,3, +- 0,114,229,1,116,3,0,100,12,0,106,1,0,124,2,0, +- 131,1,0,124,4,0,141,1,0,130,1,0,113,229,1,110, +- 0,0,124,0,0,100,7,0,100,1,0,133,2,0,25,83, +- 41,15,97,122,1,0,0,86,97,108,105,100,97,116,101,32, +- 116,104,101,32,104,101,97,100,101,114,32,111,102,32,116,104, +- 101,32,112,97,115,115,101,100,45,105,110,32,98,121,116,101, +- 99,111,100,101,32,97,103,97,105,110,115,116,32,115,111,117, +- 114,99,101,95,115,116,97,116,115,32,40,105,102,10,32,32, +- 32,32,103,105,118,101,110,41,32,97,110,100,32,114,101,116, +- 117,114,110,105,110,103,32,116,104,101,32,98,121,116,101,99, +- 111,100,101,32,116,104,97,116,32,99,97,110,32,98,101,32, +- 99,111,109,112,105,108,101,100,32,98,121,32,99,111,109,112, +- 105,108,101,40,41,46,10,10,32,32,32,32,65,108,108,32, +- 111,116,104,101,114,32,97,114,103,117,109,101,110,116,115,32, +- 97,114,101,32,117,115,101,100,32,116,111,32,101,110,104,97, +- 110,99,101,32,101,114,114,111,114,32,114,101,112,111,114,116, +- 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, +- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, +- 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, +- 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, +- 99,116,32,111,114,32,116,104,101,32,98,121,116,101,99,111, +- 100,101,32,105,115,10,32,32,32,32,102,111,117,110,100,32, +- 116,111,32,98,101,32,115,116,97,108,101,46,32,69,79,70, +- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, +- 119,104,101,110,32,116,104,101,32,100,97,116,97,32,105,115, +- 32,102,111,117,110,100,32,116,111,32,98,101,10,32,32,32, +- 32,116,114,117,110,99,97,116,101,100,46,10,10,32,32,32, +- 32,78,114,67,0,0,0,122,10,60,98,121,116,101,99,111, +- 100,101,62,114,35,0,0,0,114,12,0,0,0,233,8,0, +- 0,0,233,12,0,0,0,122,30,98,97,100,32,109,97,103, +- 105,99,32,110,117,109,98,101,114,32,105,110,32,123,33,114, +- 125,58,32,123,33,114,125,122,43,114,101,97,99,104,101,100, +- 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, +- 110,103,32,116,105,109,101,115,116,97,109,112,32,105,110,32, +- 123,33,114,125,122,48,114,101,97,99,104,101,100,32,69,79, +- 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, +- 115,105,122,101,32,111,102,32,115,111,117,114,99,101,32,105, +- 110,32,123,33,114,125,218,5,109,116,105,109,101,122,26,98, +- 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, +- 32,102,111,114,32,123,33,114,125,218,4,115,105,122,101,108, +- 3,0,0,0,255,127,255,127,3,0,41,9,218,12,77,65, +- 71,73,67,95,78,85,77,66,69,82,114,47,0,0,0,114, +- 152,0,0,0,114,153,0,0,0,114,31,0,0,0,218,8, +- 69,79,70,69,114,114,111,114,114,14,0,0,0,114,79,0, +- 0,0,114,19,0,0,0,41,11,114,53,0,0,0,218,12, +- 115,111,117,114,99,101,95,115,116,97,116,115,114,67,0,0, +- 0,114,35,0,0,0,90,11,101,120,99,95,100,101,116,97, +- 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, +- 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, +- 105,122,101,114,151,0,0,0,218,12,115,111,117,114,99,101, +- 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, +- 105,122,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, +- 116,101,99,111,100,101,95,104,101,97,100,101,114,87,2,0, +- 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, +- 12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1, +- 18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1, +- 15,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, +- 10,1,18,1,3,1,18,1,13,1,5,2,18,1,15,1, +- 15,1,114,190,0,0,0,99,4,0,0,0,0,0,0,0, +- 5,0,0,0,6,0,0,0,67,0,0,0,115,115,0,0, +- 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, +- 116,2,0,124,4,0,116,3,0,131,2,0,114,78,0,116, +- 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, +- 2,0,107,9,0,114,74,0,116,5,0,106,6,0,124,4, +- 0,124,3,0,131,2,0,1,110,0,0,124,4,0,83,116, +- 7,0,100,3,0,106,8,0,124,2,0,131,1,0,100,4, +- 0,124,1,0,100,5,0,124,2,0,131,1,2,130,1,0, +- 100,2,0,83,41,6,122,60,67,111,109,112,105,108,101,32, +- 98,121,116,101,99,111,100,101,32,97,115,32,114,101,116,117, +- 114,110,101,100,32,98,121,32,95,118,97,108,105,100,97,116, +- 101,95,98,121,116,101,99,111,100,101,95,104,101,97,100,101, +- 114,40,41,46,122,21,99,111,100,101,32,111,98,106,101,99, +- 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, +- 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, +- 32,123,33,114,125,114,67,0,0,0,114,35,0,0,0,41, +- 9,218,7,109,97,114,115,104,97,108,90,5,108,111,97,100, +- 115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,95, +- 99,111,100,101,95,116,121,112,101,114,152,0,0,0,114,106, +- 0,0,0,90,16,95,102,105,120,95,99,111,95,102,105,108, +- 101,110,97,109,101,114,153,0,0,0,114,47,0,0,0,41, +- 5,114,53,0,0,0,114,67,0,0,0,114,140,0,0,0, +- 114,141,0,0,0,218,4,99,111,100,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,109, +- 112,105,108,101,95,98,121,116,101,99,111,100,101,142,2,0, +- 0,115,16,0,0,0,0,2,15,1,15,1,13,1,12,1, +- 19,1,4,2,18,1,114,195,0,0,0,114,84,0,0,0, +- 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, +- 0,67,0,0,0,115,76,0,0,0,116,0,0,116,1,0, +- 131,1,0,125,3,0,124,3,0,106,2,0,116,3,0,124, +- 1,0,131,1,0,131,1,0,1,124,3,0,106,2,0,116, +- 3,0,124,2,0,131,1,0,131,1,0,1,124,3,0,106, +- 2,0,116,4,0,106,5,0,124,0,0,131,1,0,131,1, +- 0,1,124,3,0,83,41,1,122,80,67,111,109,112,105,108, +- 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,32, +- 105,110,116,111,32,98,121,116,101,99,111,100,101,32,102,111, +- 114,32,119,114,105,116,105,110,103,32,111,117,116,32,116,111, +- 32,97,32,98,121,116,101,45,99,111,109,112,105,108,101,100, +- 10,32,32,32,32,102,105,108,101,46,41,6,218,9,98,121, +- 116,101,97,114,114,97,121,114,185,0,0,0,218,6,101,120, +- 116,101,110,100,114,17,0,0,0,114,191,0,0,0,90,5, +- 100,117,109,112,115,41,4,114,194,0,0,0,114,183,0,0, +- 0,114,189,0,0,0,114,53,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,100, +- 101,95,116,111,95,98,121,116,101,99,111,100,101,154,2,0, +- 0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,1, +- 114,198,0,0,0,99,1,0,0,0,0,0,0,0,5,0, +- 0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,100, +- 1,0,100,2,0,108,0,0,125,1,0,116,1,0,106,2, +- 0,124,0,0,131,1,0,106,3,0,125,2,0,124,1,0, +- 106,4,0,124,2,0,131,1,0,125,3,0,116,1,0,106, +- 5,0,100,2,0,100,3,0,131,2,0,125,4,0,124,4, +- 0,106,6,0,124,0,0,106,6,0,124,3,0,100,1,0, +- 25,131,1,0,131,1,0,83,41,4,122,121,68,101,99,111, +- 100,101,32,98,121,116,101,115,32,114,101,112,114,101,115,101, +- 110,116,105,110,103,32,115,111,117,114,99,101,32,99,111,100, +- 101,32,97,110,100,32,114,101,116,117,114,110,32,116,104,101, +- 32,115,116,114,105,110,103,46,10,10,32,32,32,32,85,110, +- 105,118,101,114,115,97,108,32,110,101,119,108,105,110,101,32, +- 115,117,112,112,111,114,116,32,105,115,32,117,115,101,100,32, +- 105,110,32,116,104,101,32,100,101,99,111,100,105,110,103,46, +- 10,32,32,32,32,114,84,0,0,0,78,84,41,7,218,8, +- 116,111,107,101,110,105,122,101,114,49,0,0,0,90,7,66, +- 121,116,101,115,73,79,90,8,114,101,97,100,108,105,110,101, +- 90,15,100,101,116,101,99,116,95,101,110,99,111,100,105,110, +- 103,90,25,73,110,99,114,101,109,101,110,116,97,108,78,101, +- 119,108,105,110,101,68,101,99,111,100,101,114,218,6,100,101, +- 99,111,100,101,41,5,218,12,115,111,117,114,99,101,95,98, +- 121,116,101,115,114,199,0,0,0,90,21,115,111,117,114,99, +- 101,95,98,121,116,101,115,95,114,101,97,100,108,105,110,101, +- 218,8,101,110,99,111,100,105,110,103,90,15,110,101,119,108, +- 105,110,101,95,100,101,99,111,100,101,114,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,111, +- 100,101,95,115,111,117,114,99,101,164,2,0,0,115,10,0, +- 0,0,0,5,12,1,18,1,15,1,18,1,114,203,0,0, +- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,0, +- 0,0,67,0,0,0,115,15,1,0,0,116,0,0,124,0, +- 0,100,1,0,100,0,0,131,3,0,125,1,0,116,1,0, +- 124,1,0,100,2,0,131,2,0,114,74,0,121,17,0,124, +- 1,0,106,2,0,124,0,0,131,1,0,83,87,113,74,0, +- 4,116,3,0,107,10,0,114,70,0,1,1,1,89,113,74, +- 0,88,110,0,0,121,13,0,124,0,0,106,4,0,125,2, +- 0,87,110,18,0,4,116,5,0,107,10,0,114,107,0,1, +- 1,1,89,110,29,0,88,124,2,0,100,0,0,107,9,0, +- 114,136,0,116,6,0,124,2,0,131,1,0,106,2,0,131, +- 0,0,83,121,13,0,124,0,0,106,7,0,125,3,0,87, +- 110,24,0,4,116,5,0,107,10,0,114,175,0,1,1,1, +- 100,3,0,125,3,0,89,110,1,0,88,121,13,0,124,0, +- 0,106,8,0,125,4,0,87,110,59,0,4,116,5,0,107, +- 10,0,114,250,0,1,1,1,124,1,0,100,0,0,107,8, +- 0,114,230,0,100,4,0,106,9,0,124,3,0,131,1,0, +- 83,100,5,0,106,9,0,124,3,0,124,1,0,131,2,0, +- 83,89,110,17,0,88,100,6,0,106,9,0,124,3,0,124, +- 4,0,131,2,0,83,100,0,0,83,41,7,78,218,10,95, +- 95,108,111,97,100,101,114,95,95,218,11,109,111,100,117,108, +- 101,95,114,101,112,114,250,1,63,122,13,60,109,111,100,117, +- 108,101,32,123,33,114,125,62,122,20,60,109,111,100,117,108, +- 101,32,123,33,114,125,32,40,123,33,114,125,41,62,122,23, +- 60,109,111,100,117,108,101,32,123,33,114,125,32,102,114,111, +- 109,32,123,33,114,125,62,41,10,114,62,0,0,0,114,60, +- 0,0,0,114,205,0,0,0,218,9,69,120,99,101,112,116, +- 105,111,110,218,8,95,95,115,112,101,99,95,95,218,14,65, +- 116,116,114,105,98,117,116,101,69,114,114,111,114,114,174,0, +- 0,0,114,57,0,0,0,218,8,95,95,102,105,108,101,95, +- 95,114,47,0,0,0,41,5,114,179,0,0,0,114,169,0, +- 0,0,114,177,0,0,0,114,67,0,0,0,114,131,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,9,102,105,110,100,95,115,112,101,99,98,2,0,0,115, -- 26,0,0,0,0,2,15,1,12,1,4,1,3,1,14,1, -- 13,1,9,1,22,1,21,1,9,1,15,1,9,1,122,31, -- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, -+ 0,12,115,81,0,124,3,0,106,2,0,131,0,0,100,7, -+ 0,100,8,0,133,2,0,25,100,6,0,107,3,0,114,85, -+ 0,124,0,0,83,121,16,0,116,3,0,124,0,0,131,1, -+ 0,125,4,0,87,110,40,0,4,116,4,0,116,5,0,102, -+ 2,0,107,10,0,114,143,0,1,1,1,124,0,0,100,2, -+ 0,100,9,0,133,2,0,25,125,4,0,89,110,1,0,88, -+ 116,6,0,124,4,0,131,1,0,114,160,0,124,4,0,83, -+ 124,0,0,83,41,10,122,188,67,111,110,118,101,114,116,32, -+ 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,32, -+ 112,97,116,104,32,116,111,32,97,32,115,111,117,114,99,101, -+ 32,112,97,116,104,32,40,105,102,32,112,111,115,115,105,98, -+ 108,101,41,46,10,10,32,32,32,32,84,104,105,115,32,102, -+ 117,110,99,116,105,111,110,32,101,120,105,115,116,115,32,112, -+ 117,114,101,108,121,32,102,111,114,32,98,97,99,107,119,97, -+ 114,100,115,45,99,111,109,112,97,116,105,98,105,108,105,116, -+ 121,32,102,111,114,10,32,32,32,32,80,121,73,109,112,111, -+ 114,116,95,69,120,101,99,67,111,100,101,77,111,100,117,108, -+ 101,87,105,116,104,70,105,108,101,110,97,109,101,115,40,41, -+ 32,105,110,32,116,104,101,32,67,32,65,80,73,46,10,10, -+ 32,32,32,32,114,60,0,0,0,78,114,59,0,0,0,114, -+ 81,0,0,0,114,30,0,0,0,90,2,112,121,233,253,255, -+ 255,255,233,255,255,255,255,114,88,0,0,0,41,7,114,32, -+ 0,0,0,114,33,0,0,0,218,5,108,111,119,101,114,114, -+ 86,0,0,0,114,67,0,0,0,114,72,0,0,0,114,45, -+ 0,0,0,41,5,218,13,98,121,116,101,99,111,100,101,95, -+ 112,97,116,104,114,79,0,0,0,114,37,0,0,0,90,9, -+ 101,120,116,101,110,115,105,111,110,218,11,115,111,117,114,99, -+ 101,95,112,97,116,104,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,15,95,103,101,116,95,115,111,117,114, -+ 99,101,102,105,108,101,64,1,0,0,115,20,0,0,0,0, -+ 7,18,1,4,1,24,1,35,1,4,1,3,1,16,1,19, -+ 1,21,1,114,92,0,0,0,99,1,0,0,0,0,0,0, -+ 0,1,0,0,0,11,0,0,0,67,0,0,0,115,92,0, -+ 0,0,124,0,0,106,0,0,116,1,0,116,2,0,131,1, -+ 0,131,1,0,114,59,0,121,14,0,116,3,0,124,0,0, -+ 131,1,0,83,87,113,88,0,4,116,4,0,107,10,0,114, -+ 55,0,1,1,1,89,113,88,0,88,110,29,0,124,0,0, -+ 106,0,0,116,1,0,116,5,0,131,1,0,131,1,0,114, -+ 84,0,124,0,0,83,100,0,0,83,100,0,0,83,41,1, -+ 78,41,6,218,8,101,110,100,115,119,105,116,104,218,5,116, -+ 117,112,108,101,114,85,0,0,0,114,80,0,0,0,114,67, -+ 0,0,0,114,75,0,0,0,41,1,218,8,102,105,108,101, -+ 110,97,109,101,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, -+ 83,1,0,0,115,16,0,0,0,0,1,21,1,3,1,14, -+ 1,13,1,8,1,21,1,4,2,114,96,0,0,0,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, -+ 0,0,0,115,60,0,0,0,121,19,0,116,0,0,124,0, -+ 0,131,1,0,106,1,0,125,1,0,87,110,24,0,4,116, -+ 2,0,107,10,0,114,45,0,1,1,1,100,1,0,125,1, -+ 0,89,110,1,0,88,124,1,0,100,2,0,79,125,1,0, -+ 124,1,0,83,41,3,122,51,67,97,108,99,117,108,97,116, -+ 101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105, -+ 115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116, -+ 101,99,111,100,101,32,102,105,108,101,46,105,182,1,0,0, -+ 233,128,0,0,0,41,3,114,40,0,0,0,114,42,0,0, -+ 0,114,41,0,0,0,41,2,114,36,0,0,0,114,43,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,10,95,99,97,108,99,95,109,111,100,101,95,1,0, -+ 0,115,12,0,0,0,0,2,3,1,19,1,13,1,11,3, -+ 10,1,114,98,0,0,0,218,9,118,101,114,98,111,115,105, -+ 116,121,114,30,0,0,0,99,1,0,0,0,1,0,0,0, -+ 3,0,0,0,4,0,0,0,71,0,0,0,115,75,0,0, -+ 0,116,0,0,106,1,0,106,2,0,124,1,0,107,5,0, -+ 114,71,0,124,0,0,106,3,0,100,6,0,131,1,0,115, -+ 43,0,100,3,0,124,0,0,23,125,0,0,116,4,0,124, -+ 0,0,106,5,0,124,2,0,140,0,0,100,4,0,116,0, -+ 0,106,6,0,131,1,1,1,100,5,0,83,41,7,122,61, -+ 80,114,105,110,116,32,116,104,101,32,109,101,115,115,97,103, -+ 101,32,116,111,32,115,116,100,101,114,114,32,105,102,32,45, -+ 118,47,80,89,84,72,79,78,86,69,82,66,79,83,69,32, -+ 105,115,32,116,117,114,110,101,100,32,111,110,46,250,1,35, -+ 250,7,105,109,112,111,114,116,32,122,2,35,32,114,55,0, -+ 0,0,78,41,2,114,100,0,0,0,114,101,0,0,0,41, -+ 7,114,8,0,0,0,114,68,0,0,0,218,7,118,101,114, -+ 98,111,115,101,114,10,0,0,0,218,5,112,114,105,110,116, -+ 114,48,0,0,0,218,6,115,116,100,101,114,114,41,3,114, -+ 76,0,0,0,114,99,0,0,0,218,4,97,114,103,115,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,16, -+ 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, -+ 107,1,0,0,115,8,0,0,0,0,2,18,1,15,1,10, -+ 1,114,106,0,0,0,99,1,0,0,0,0,0,0,0,3, -+ 0,0,0,11,0,0,0,3,0,0,0,115,84,0,0,0, -+ 100,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, -+ 1,0,125,1,0,121,13,0,116,0,0,106,1,0,125,2, -+ 0,87,110,30,0,4,116,2,0,107,10,0,114,66,0,1, -+ 1,1,100,4,0,100,5,0,132,0,0,125,2,0,89,110, -+ 1,0,88,124,2,0,124,1,0,136,0,0,131,2,0,1, -+ 124,1,0,83,41,6,122,252,68,101,99,111,114,97,116,111, -+ 114,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116, -+ 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, -+ 103,32,114,101,113,117,101,115,116,101,100,32,109,97,116,99, -+ 104,101,115,32,116,104,101,32,111,110,101,32,116,104,101,10, -+ 32,32,32,32,108,111,97,100,101,114,32,99,97,110,32,104, -+ 97,110,100,108,101,46,10,10,32,32,32,32,84,104,101,32, -+ 102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40, -+ 115,101,108,102,41,32,109,117,115,116,32,100,101,102,105,110, -+ 101,32,95,110,97,109,101,32,119,104,105,99,104,32,116,104, -+ 101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110, -+ 116,32,105,115,10,32,32,32,32,99,111,109,112,97,114,101, -+ 100,32,97,103,97,105,110,115,116,46,32,73,102,32,116,104, -+ 101,32,99,111,109,112,97,114,105,115,111,110,32,102,97,105, -+ 108,115,32,116,104,101,110,32,73,109,112,111,114,116,69,114, -+ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, -+ 32,32,32,32,78,99,2,0,0,0,0,0,0,0,4,0, -+ 0,0,5,0,0,0,31,0,0,0,115,89,0,0,0,124, -+ 1,0,100,0,0,107,8,0,114,24,0,124,0,0,106,0, -+ 0,125,1,0,110,46,0,124,0,0,106,0,0,124,1,0, -+ 107,3,0,114,70,0,116,1,0,100,1,0,124,0,0,106, -+ 0,0,124,1,0,102,2,0,22,100,2,0,124,1,0,131, -+ 1,1,130,1,0,136,0,0,124,0,0,124,1,0,124,2, -+ 0,124,3,0,142,2,0,83,41,3,78,122,30,108,111,97, -+ 100,101,114,32,102,111,114,32,37,115,32,99,97,110,110,111, -+ 116,32,104,97,110,100,108,101,32,37,115,218,4,110,97,109, -+ 101,41,2,114,107,0,0,0,218,11,73,109,112,111,114,116, -+ 69,114,114,111,114,41,4,218,4,115,101,108,102,114,107,0, -+ 0,0,114,105,0,0,0,90,6,107,119,97,114,103,115,41, -+ 1,218,6,109,101,116,104,111,100,114,5,0,0,0,114,6, -+ 0,0,0,218,19,95,99,104,101,99,107,95,110,97,109,101, -+ 95,119,114,97,112,112,101,114,123,1,0,0,115,12,0,0, -+ 0,0,1,12,1,12,1,15,1,6,1,25,1,122,40,95, -+ 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, -+ 108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95, -+ 119,114,97,112,112,101,114,99,2,0,0,0,0,0,0,0, -+ 3,0,0,0,7,0,0,0,83,0,0,0,115,92,0,0, -+ 0,120,66,0,100,1,0,100,2,0,100,3,0,100,4,0, -+ 103,4,0,68,93,46,0,125,2,0,116,0,0,124,1,0, -+ 124,2,0,131,2,0,114,19,0,116,1,0,124,0,0,124, -+ 2,0,116,2,0,124,1,0,124,2,0,131,2,0,131,3, -+ 0,1,113,19,0,87,124,0,0,106,3,0,106,4,0,124, -+ 1,0,106,3,0,131,1,0,1,100,0,0,83,41,5,78, -+ 218,10,95,95,109,111,100,117,108,101,95,95,218,8,95,95, -+ 110,97,109,101,95,95,218,12,95,95,113,117,97,108,110,97, -+ 109,101,95,95,218,7,95,95,100,111,99,95,95,41,5,218, -+ 7,104,97,115,97,116,116,114,218,7,115,101,116,97,116,116, -+ 114,218,7,103,101,116,97,116,116,114,218,8,95,95,100,105, -+ 99,116,95,95,218,6,117,112,100,97,116,101,41,3,90,3, -+ 110,101,119,90,3,111,108,100,114,53,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,5,95,119, -+ 114,97,112,134,1,0,0,115,8,0,0,0,0,1,25,1, -+ 15,1,29,1,122,26,95,99,104,101,99,107,95,110,97,109, -+ 101,46,60,108,111,99,97,108,115,62,46,95,119,114,97,112, -+ 41,3,218,10,95,98,111,111,116,115,116,114,97,112,114,121, -+ 0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,3, -+ 114,110,0,0,0,114,111,0,0,0,114,121,0,0,0,114, -+ 5,0,0,0,41,1,114,110,0,0,0,114,6,0,0,0, -+ 218,11,95,99,104,101,99,107,95,110,97,109,101,115,1,0, -+ 0,115,14,0,0,0,0,8,21,7,3,1,13,1,13,2, -+ 17,5,13,1,114,124,0,0,0,99,2,0,0,0,0,0, -+ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,84, +- 218,12,95,109,111,100,117,108,101,95,114,101,112,114,178,2, +- 0,0,115,46,0,0,0,0,2,18,1,15,4,3,1,17, +- 1,13,1,8,1,3,1,13,1,13,1,5,2,12,1,16, +- 4,3,1,13,1,13,1,11,1,3,1,13,1,13,1,12, +- 1,13,2,21,2,114,211,0,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, +- 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, +- 0,90,5,0,100,7,0,83,41,8,218,17,95,105,110,115, +- 116,97,108,108,101,100,95,115,97,102,101,108,121,99,2,0, +- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, +- 0,0,115,25,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,1,0,106,1,0,124,0,0,95,2,0,100,0,0,83, +- 41,1,78,41,3,218,7,95,109,111,100,117,108,101,114,208, +- 0,0,0,218,5,95,115,112,101,99,41,2,114,71,0,0, +- 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,72,0,0,0,216,2,0,0,115,4, +- 0,0,0,0,1,9,1,122,26,95,105,110,115,116,97,108, +- 108,101,100,95,115,97,102,101,108,121,46,95,95,105,110,105, +- 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, +- 3,0,0,0,67,0,0,0,115,38,0,0,0,100,1,0, +- 124,0,0,106,0,0,95,1,0,124,0,0,106,2,0,116, +- 3,0,106,4,0,124,0,0,106,0,0,106,5,0,60,100, +- 0,0,83,41,2,78,84,41,6,114,214,0,0,0,218,13, +- 95,105,110,105,116,105,97,108,105,122,105,110,103,114,213,0, +- 0,0,114,7,0,0,0,114,73,0,0,0,114,67,0,0, +- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,75,0,0,0,220,2,0,0, +- 115,4,0,0,0,0,4,12,1,122,27,95,105,110,115,116, ++ 12,0,0,0,67,0,0,0,115,164,0,0,0,116,0,0, ++ 124,0,0,131,1,0,100,1,0,107,2,0,114,22,0,100, ++ 2,0,83,124,0,0,106,1,0,100,3,0,131,1,0,92, ++ 3,0,125,1,0,125,2,0,125,3,0,124,1,0,12,115, ++ 81,0,124,3,0,106,2,0,131,0,0,100,7,0,100,8, ++ 0,133,2,0,25,100,6,0,107,3,0,114,85,0,124,0, ++ 0,83,121,16,0,116,3,0,124,0,0,131,1,0,125,4, ++ 0,87,110,40,0,4,116,4,0,116,5,0,102,2,0,107, ++ 10,0,114,143,0,1,1,1,124,0,0,100,2,0,100,9, ++ 0,133,2,0,25,125,4,0,89,110,1,0,88,116,6,0, ++ 124,4,0,131,1,0,114,160,0,124,4,0,83,124,0,0, ++ 83,41,10,122,188,67,111,110,118,101,114,116,32,97,32,98, ++ 121,116,101,99,111,100,101,32,102,105,108,101,32,112,97,116, ++ 104,32,116,111,32,97,32,115,111,117,114,99,101,32,112,97, ++ 116,104,32,40,105,102,32,112,111,115,115,105,98,108,101,41, ++ 46,10,10,32,32,32,32,84,104,105,115,32,102,117,110,99, ++ 116,105,111,110,32,101,120,105,115,116,115,32,112,117,114,101, ++ 108,121,32,102,111,114,32,98,97,99,107,119,97,114,100,115, ++ 45,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102, ++ 111,114,10,32,32,32,32,80,121,73,109,112,111,114,116,95, ++ 69,120,101,99,67,111,100,101,77,111,100,117,108,101,87,105, ++ 116,104,70,105,108,101,110,97,109,101,115,40,41,32,105,110, ++ 32,116,104,101,32,67,32,65,80,73,46,10,10,32,32,32, ++ 32,114,85,0,0,0,78,114,117,0,0,0,233,3,0,0, ++ 0,114,30,0,0,0,90,2,112,121,233,253,255,255,255,233, ++ 255,255,255,255,114,139,0,0,0,41,7,114,32,0,0,0, ++ 114,33,0,0,0,218,5,108,111,119,101,114,114,136,0,0, ++ 0,114,125,0,0,0,114,134,0,0,0,114,45,0,0,0, ++ 41,5,218,13,98,121,116,101,99,111,100,101,95,112,97,116, ++ 104,90,4,114,101,115,116,114,37,0,0,0,90,9,101,120, ++ 116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95, ++ 112,97,116,104,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,15,95,103,101,116,95,115,111,117,114,99,101, ++ 102,105,108,101,231,1,0,0,115,20,0,0,0,0,7,18, ++ 1,4,1,24,1,35,1,4,1,3,1,16,1,19,1,21, ++ 1,114,143,0,0,0,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,0, ++ 121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,125, ++ 1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,0, ++ 1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,1, ++ 0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,51, ++ 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, ++ 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, ++ 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, ++ 108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,114, ++ 40,0,0,0,114,42,0,0,0,114,41,0,0,0,41,2, ++ 114,36,0,0,0,114,43,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,10,95,99,97,108,99, ++ 95,109,111,100,101,250,1,0,0,115,12,0,0,0,0,2, ++ 3,1,19,1,13,1,11,3,10,1,114,145,0,0,0,218, ++ 9,118,101,114,98,111,115,105,116,121,114,30,0,0,0,99, ++ 1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0, ++ 71,0,0,0,115,81,0,0,0,116,0,0,106,1,0,106, ++ 2,0,124,1,0,107,5,0,114,77,0,124,0,0,106,3, ++ 0,100,6,0,131,1,0,115,46,0,100,3,0,124,0,0, ++ 23,125,0,0,110,0,0,116,4,0,124,0,0,106,5,0, ++ 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, ++ 1,1,1,110,0,0,100,5,0,83,41,7,122,61,80,114, ++ 105,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32, ++ 116,111,32,115,116,100,101,114,114,32,105,102,32,45,118,47, ++ 80,89,84,72,79,78,86,69,82,66,79,83,69,32,105,115, ++ 32,116,117,114,110,101,100,32,111,110,46,250,1,35,250,7, ++ 105,109,112,111,114,116,32,122,2,35,32,114,55,0,0,0, ++ 78,41,2,114,147,0,0,0,114,148,0,0,0,41,7,114, ++ 8,0,0,0,114,118,0,0,0,218,7,118,101,114,98,111, ++ 115,101,114,10,0,0,0,218,5,112,114,105,110,116,114,48, ++ 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, ++ 101,115,115,97,103,101,114,146,0,0,0,114,81,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, ++ 101,6,2,0,0,115,8,0,0,0,0,2,18,1,15,1, ++ 13,1,114,153,0,0,0,99,1,0,0,0,0,0,0,0, ++ 2,0,0,0,4,0,0,0,3,0,0,0,115,38,0,0, ++ 0,100,1,0,135,0,0,102,1,0,100,2,0,100,3,0, ++ 134,1,0,125,1,0,116,0,0,124,1,0,136,0,0,131, ++ 2,0,1,124,1,0,83,41,4,122,252,68,101,99,111,114, ++ 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, ++ 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, ++ 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, ++ 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, ++ 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, ++ 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, ++ 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, ++ 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, ++ 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, ++ 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, ++ 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, ++ 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, ++ 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, ++ 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, ++ 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, ++ 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, ++ 0,4,0,0,0,5,0,0,0,31,0,0,0,115,83,0, ++ 0,0,124,1,0,100,0,0,107,8,0,114,24,0,124,0, ++ 0,106,0,0,125,1,0,110,40,0,124,0,0,106,0,0, ++ 124,1,0,107,3,0,114,64,0,116,1,0,100,1,0,124, ++ 1,0,22,100,2,0,124,1,0,131,1,1,130,1,0,110, ++ 0,0,136,0,0,124,0,0,124,1,0,124,2,0,124,3, ++ 0,142,2,0,83,41,3,78,122,23,108,111,97,100,101,114, ++ 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, ++ 115,114,68,0,0,0,41,2,114,68,0,0,0,218,11,73, ++ 109,112,111,114,116,69,114,114,111,114,41,4,114,72,0,0, ++ 0,114,68,0,0,0,114,81,0,0,0,114,109,0,0,0, ++ 41,1,218,6,109,101,116,104,111,100,114,5,0,0,0,114, ++ 6,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, ++ 101,95,119,114,97,112,112,101,114,22,2,0,0,115,10,0, ++ 0,0,0,1,12,1,12,1,15,1,25,1,122,40,95,99, ++ 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, ++ 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, ++ 114,97,112,112,101,114,41,1,114,66,0,0,0,41,2,114, ++ 155,0,0,0,114,156,0,0,0,114,5,0,0,0,41,1, ++ 114,155,0,0,0,114,6,0,0,0,218,11,95,99,104,101, ++ 99,107,95,110,97,109,101,14,2,0,0,115,6,0,0,0, ++ 0,8,21,6,13,1,114,157,0,0,0,99,1,0,0,0, ++ 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, ++ 115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,2, ++ 0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,0, ++ 131,2,0,1,124,1,0,83,41,3,122,49,68,101,99,111, ++ 114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,32, ++ 116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,101, ++ 32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,0, ++ 0,0,115,58,0,0,0,124,1,0,116,0,0,106,1,0, ++ 107,7,0,114,45,0,116,2,0,100,1,0,106,3,0,124, ++ 1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,1, ++ 0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,0, ++ 83,41,3,78,122,29,123,33,114,125,32,105,115,32,110,111, ++ 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, ++ 117,108,101,114,68,0,0,0,41,4,114,8,0,0,0,218, ++ 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, ++ 110,97,109,101,115,114,154,0,0,0,114,48,0,0,0,41, ++ 2,114,72,0,0,0,218,8,102,117,108,108,110,97,109,101, ++ 41,1,218,3,102,120,110,114,5,0,0,0,114,6,0,0, ++ 0,218,25,95,114,101,113,117,105,114,101,115,95,98,117,105, ++ 108,116,105,110,95,119,114,97,112,112,101,114,34,2,0,0, ++ 115,8,0,0,0,0,1,15,1,18,1,12,1,122,52,95, ++ 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, ++ 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, ++ 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, ++ 112,101,114,41,1,114,66,0,0,0,41,2,114,160,0,0, ++ 0,114,161,0,0,0,114,5,0,0,0,41,1,114,160,0, ++ 0,0,114,6,0,0,0,218,17,95,114,101,113,117,105,114, ++ 101,115,95,98,117,105,108,116,105,110,32,2,0,0,115,6, ++ 0,0,0,0,2,18,5,13,1,114,162,0,0,0,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, ++ 0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,1, ++ 0,100,2,0,134,0,0,125,1,0,116,0,0,124,1,0, ++ 136,0,0,131,2,0,1,124,1,0,83,41,3,122,47,68, ++ 101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105, ++ 102,121,32,116,104,101,32,110,97,109,101,100,32,109,111,100, ++ 117,108,101,32,105,115,32,102,114,111,122,101,110,46,99,2, ++ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19, ++ 0,0,0,115,58,0,0,0,116,0,0,106,1,0,124,1, ++ 0,131,1,0,115,45,0,116,2,0,100,1,0,106,3,0, ++ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, ++ 1,0,110,0,0,136,0,0,124,0,0,124,1,0,131,2, ++ 0,83,41,3,78,122,27,123,33,114,125,32,105,115,32,110, ++ 111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117, ++ 108,101,114,68,0,0,0,41,4,114,107,0,0,0,218,9, ++ 105,115,95,102,114,111,122,101,110,114,154,0,0,0,114,48, ++ 0,0,0,41,2,114,72,0,0,0,114,159,0,0,0,41, ++ 1,114,160,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, ++ 101,110,95,119,114,97,112,112,101,114,45,2,0,0,115,8, ++ 0,0,0,0,1,15,1,18,1,12,1,122,50,95,114,101, ++ 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, ++ 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, ++ 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,41, ++ 1,114,66,0,0,0,41,2,114,160,0,0,0,114,164,0, ++ 0,0,114,5,0,0,0,41,1,114,160,0,0,0,114,6, ++ 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, ++ 114,111,122,101,110,43,2,0,0,115,6,0,0,0,0,2, ++ 18,5,13,1,114,165,0,0,0,99,2,0,0,0,0,0, ++ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,87, + 0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,92, + 2,0,125,2,0,125,3,0,124,2,0,100,1,0,107,8, -+ 0,114,80,0,116,1,0,124,3,0,131,1,0,114,80,0, ++ 0,114,83,0,116,1,0,124,3,0,131,1,0,114,83,0, + 100,2,0,125,4,0,116,2,0,106,3,0,124,4,0,106, + 4,0,124,3,0,100,3,0,25,131,1,0,116,5,0,131, -+ 2,0,1,124,2,0,83,41,4,122,155,84,114,121,32,116, -+ 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, -+ 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, -+ 100,32,109,111,100,117,108,101,32,98,121,32,100,101,108,101, -+ 103,97,116,105,110,103,32,116,111,10,32,32,32,32,115,101, -+ 108,102,46,102,105,110,100,95,108,111,97,100,101,114,40,41, -+ 46,10,10,32,32,32,32,84,104,105,115,32,109,101,116,104, -+ 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, -+ 32,105,110,32,102,97,118,111,114,32,111,102,32,102,105,110, -+ 100,101,114,46,102,105,110,100,95,115,112,101,99,40,41,46, -+ 10,10,32,32,32,32,78,122,44,78,111,116,32,105,109,112, -+ 111,114,116,105,110,103,32,100,105,114,101,99,116,111,114,121, -+ 32,123,125,58,32,109,105,115,115,105,110,103,32,95,95,105, -+ 110,105,116,95,95,114,60,0,0,0,41,6,218,11,102,105, -+ 110,100,95,108,111,97,100,101,114,114,32,0,0,0,114,61, -+ 0,0,0,114,62,0,0,0,114,48,0,0,0,218,13,73, -+ 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,109, -+ 0,0,0,218,8,102,117,108,108,110,97,109,101,218,6,108, -+ 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, -+ 3,109,115,103,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, -+ 101,95,115,104,105,109,143,1,0,0,115,10,0,0,0,0, -+ 10,21,1,24,1,6,1,29,1,114,131,0,0,0,99,4, -+ 0,0,0,0,0,0,0,11,0,0,0,19,0,0,0,67, -+ 0,0,0,115,240,1,0,0,105,0,0,125,4,0,124,2, -+ 0,100,1,0,107,9,0,114,31,0,124,2,0,124,4,0, -+ 100,2,0,60,110,6,0,100,3,0,125,2,0,124,3,0, -+ 100,1,0,107,9,0,114,59,0,124,3,0,124,4,0,100, -+ 4,0,60,124,0,0,100,1,0,100,5,0,133,2,0,25, -+ 125,5,0,124,0,0,100,5,0,100,6,0,133,2,0,25, -+ 125,6,0,124,0,0,100,6,0,100,7,0,133,2,0,25, -+ 125,7,0,124,5,0,116,0,0,107,3,0,114,168,0,100, -+ 8,0,106,1,0,124,2,0,124,5,0,131,2,0,125,8, -+ 0,116,2,0,100,9,0,124,8,0,131,2,0,1,116,3, -+ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,119,0, -+ 116,4,0,124,6,0,131,1,0,100,5,0,107,3,0,114, -+ 229,0,100,10,0,106,1,0,124,2,0,131,1,0,125,8, -+ 0,116,2,0,100,9,0,124,8,0,131,2,0,1,116,5, -+ 0,124,8,0,131,1,0,130,1,0,110,58,0,116,4,0, -+ 124,7,0,131,1,0,100,5,0,107,3,0,114,31,1,100, -+ 11,0,106,1,0,124,2,0,131,1,0,125,8,0,116,2, -+ 0,100,9,0,124,8,0,131,2,0,1,116,5,0,124,8, -+ 0,131,1,0,130,1,0,124,1,0,100,1,0,107,9,0, -+ 114,226,1,121,20,0,116,6,0,124,1,0,100,12,0,25, -+ 131,1,0,125,9,0,87,110,18,0,4,116,7,0,107,10, -+ 0,114,83,1,1,1,1,89,110,62,0,88,116,8,0,124, -+ 6,0,131,1,0,124,9,0,107,3,0,114,145,1,100,13, -+ 0,106,1,0,124,2,0,131,1,0,125,8,0,116,2,0, -+ 100,9,0,124,8,0,131,2,0,1,116,3,0,124,8,0, -+ 124,4,0,141,1,0,130,1,0,121,18,0,124,1,0,100, -+ 14,0,25,100,15,0,64,125,10,0,87,110,18,0,4,116, -+ 7,0,107,10,0,114,183,1,1,1,1,89,110,43,0,88, -+ 116,8,0,124,7,0,131,1,0,124,10,0,107,3,0,114, -+ 226,1,116,3,0,100,13,0,106,1,0,124,2,0,131,1, -+ 0,124,4,0,141,1,0,130,1,0,124,0,0,100,7,0, -+ 100,1,0,133,2,0,25,83,41,16,97,122,1,0,0,86, -+ 97,108,105,100,97,116,101,32,116,104,101,32,104,101,97,100, -+ 101,114,32,111,102,32,116,104,101,32,112,97,115,115,101,100, -+ 45,105,110,32,98,121,116,101,99,111,100,101,32,97,103,97, -+ 105,110,115,116,32,115,111,117,114,99,101,95,115,116,97,116, -+ 115,32,40,105,102,10,32,32,32,32,103,105,118,101,110,41, -+ 32,97,110,100,32,114,101,116,117,114,110,105,110,103,32,116, -+ 104,101,32,98,121,116,101,99,111,100,101,32,116,104,97,116, -+ 32,99,97,110,32,98,101,32,99,111,109,112,105,108,101,100, -+ 32,98,121,32,99,111,109,112,105,108,101,40,41,46,10,10, -+ 32,32,32,32,65,108,108,32,111,116,104,101,114,32,97,114, -+ 103,117,109,101,110,116,115,32,97,114,101,32,117,115,101,100, -+ 32,116,111,32,101,110,104,97,110,99,101,32,101,114,114,111, -+ 114,32,114,101,112,111,114,116,105,110,103,46,10,10,32,32, -+ 32,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, -+ 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, -+ 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,115, -+ 32,105,110,99,111,114,114,101,99,116,32,111,114,32,116,104, -+ 101,32,98,121,116,101,99,111,100,101,32,105,115,10,32,32, -+ 32,32,102,111,117,110,100,32,116,111,32,98,101,32,115,116, -+ 97,108,101,46,32,69,79,70,69,114,114,111,114,32,105,115, -+ 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, -+ 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, -+ 111,32,98,101,10,32,32,32,32,116,114,117,110,99,97,116, -+ 101,100,46,10,10,32,32,32,32,78,114,107,0,0,0,122, -+ 10,60,98,121,116,101,99,111,100,101,62,114,36,0,0,0, -+ 114,13,0,0,0,233,8,0,0,0,233,12,0,0,0,122, -+ 30,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101, -+ 114,32,105,110,32,123,33,114,125,58,32,123,33,114,125,122, -+ 2,123,125,122,43,114,101,97,99,104,101,100,32,69,79,70, -+ 32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,116, -+ 105,109,101,115,116,97,109,112,32,105,110,32,123,33,114,125, -+ 122,48,114,101,97,99,104,101,100,32,69,79,70,32,119,104, -+ 105,108,101,32,114,101,97,100,105,110,103,32,115,105,122,101, -+ 32,111,102,32,115,111,117,114,99,101,32,105,110,32,123,33, -+ 114,125,218,5,109,116,105,109,101,122,26,98,121,116,101,99, -+ 111,100,101,32,105,115,32,115,116,97,108,101,32,102,111,114, -+ 32,123,33,114,125,218,4,115,105,122,101,108,3,0,0,0, -+ 255,127,255,127,3,0,41,9,218,12,77,65,71,73,67,95, -+ 78,85,77,66,69,82,114,48,0,0,0,114,106,0,0,0, -+ 114,108,0,0,0,114,32,0,0,0,218,8,69,79,70,69, -+ 114,114,111,114,114,15,0,0,0,218,8,75,101,121,69,114, -+ 114,111,114,114,20,0,0,0,41,11,114,54,0,0,0,218, -+ 12,115,111,117,114,99,101,95,115,116,97,116,115,114,107,0, -+ 0,0,114,36,0,0,0,90,11,101,120,99,95,100,101,116, -+ 97,105,108,115,90,5,109,97,103,105,99,90,13,114,97,119, -+ 95,116,105,109,101,115,116,97,109,112,90,8,114,97,119,95, -+ 115,105,122,101,114,76,0,0,0,218,12,115,111,117,114,99, -+ 101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95, -+ 115,105,122,101,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,25,95,118,97,108,105,100,97,116,101,95,98, -+ 121,116,101,99,111,100,101,95,104,101,97,100,101,114,160,1, -+ 0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,6, -+ 1,12,1,10,1,16,1,16,1,16,1,12,1,18,1,13, -+ 1,18,1,18,1,15,1,13,1,15,1,18,1,15,1,13, -+ 1,12,1,12,1,3,1,20,1,13,1,5,2,18,1,15, -+ 1,13,1,15,1,3,1,18,1,13,1,5,2,18,1,15, -+ 1,9,1,114,142,0,0,0,99,4,0,0,0,0,0,0, -+ 0,5,0,0,0,6,0,0,0,67,0,0,0,115,112,0, -+ 0,0,116,0,0,106,1,0,124,0,0,131,1,0,125,4, -+ 0,116,2,0,124,4,0,116,3,0,131,2,0,114,75,0, -+ 116,4,0,100,1,0,124,2,0,131,2,0,1,124,3,0, -+ 100,2,0,107,9,0,114,71,0,116,5,0,106,6,0,124, -+ 4,0,124,3,0,131,2,0,1,124,4,0,83,116,7,0, -+ 100,3,0,106,8,0,124,2,0,131,1,0,100,4,0,124, -+ 1,0,100,5,0,124,2,0,131,1,2,130,1,0,100,2, -+ 0,83,41,6,122,60,67,111,109,112,105,108,101,32,98,121, -+ 116,101,99,111,100,101,32,97,115,32,114,101,116,117,114,110, -+ 101,100,32,98,121,32,95,118,97,108,105,100,97,116,101,95, -+ 98,121,116,101,99,111,100,101,95,104,101,97,100,101,114,40, -+ 41,46,122,21,99,111,100,101,32,111,98,106,101,99,116,32, -+ 102,114,111,109,32,123,33,114,125,78,122,23,78,111,110,45, -+ 99,111,100,101,32,111,98,106,101,99,116,32,105,110,32,123, -+ 33,114,125,114,107,0,0,0,114,36,0,0,0,41,9,218, -+ 7,109,97,114,115,104,97,108,90,5,108,111,97,100,115,218, -+ 10,105,115,105,110,115,116,97,110,99,101,218,10,95,99,111, -+ 100,101,95,116,121,112,101,114,106,0,0,0,218,4,95,105, -+ 109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,101, -+ 110,97,109,101,114,108,0,0,0,114,48,0,0,0,41,5, -+ 114,54,0,0,0,114,107,0,0,0,114,90,0,0,0,114, -+ 91,0,0,0,218,4,99,111,100,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,99,111,109,112, -+ 105,108,101,95,98,121,116,101,99,111,100,101,215,1,0,0, -+ 115,16,0,0,0,0,2,15,1,15,1,13,1,12,1,16, -+ 1,4,2,18,1,114,148,0,0,0,114,60,0,0,0,99, - 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, -- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, -- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, -- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, -- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, -- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, -- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, -- 32,32,32,32,32,32,78,41,2,114,181,0,0,0,114,127, -- 0,0,0,41,4,114,170,0,0,0,114,126,0,0,0,114, -- 35,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,109, -- 111,100,117,108,101,114,2,0,0,115,8,0,0,0,0,7, -- 18,1,12,1,7,2,122,33,87,105,110,100,111,119,115,82, -- 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, -- 110,100,95,109,111,100,117,108,101,41,12,114,112,0,0,0, -- 114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114, -- 175,0,0,0,114,174,0,0,0,114,173,0,0,0,218,11, -- 99,108,97,115,115,109,101,116,104,111,100,114,172,0,0,0, -- 114,178,0,0,0,114,181,0,0,0,114,182,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,168,0,0,0,64,2,0,0,115,20,0,0, -- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, -- 1,21,15,3,1,114,168,0,0,0,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 70,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, -- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, -- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, -- 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, -- 132,0,0,90,7,0,100,10,0,83,41,11,218,13,95,76, -- 111,97,100,101,114,66,97,115,105,99,115,122,83,66,97,115, -- 101,32,99,108,97,115,115,32,111,102,32,99,111,109,109,111, -- 110,32,99,111,100,101,32,110,101,101,100,101,100,32,98,121, -- 32,98,111,116,104,32,83,111,117,114,99,101,76,111,97,100, -- 101,114,32,97,110,100,10,32,32,32,32,83,111,117,114,99, -- 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, -- 99,2,0,0,0,0,0,0,0,5,0,0,0,3,0,0, -- 0,67,0,0,0,115,88,0,0,0,116,0,0,124,0,0, -- 106,1,0,124,1,0,131,1,0,131,1,0,100,1,0,25, -- 125,2,0,124,2,0,106,2,0,100,2,0,100,1,0,131, -- 2,0,100,3,0,25,125,3,0,124,1,0,106,3,0,100, -- 2,0,131,1,0,100,4,0,25,125,4,0,124,3,0,100, -- 5,0,107,2,0,111,87,0,124,4,0,100,5,0,107,3, -- 0,83,41,6,122,141,67,111,110,99,114,101,116,101,32,105, -- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, -- 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105, -- 115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101, -- 99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32, -- 32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110, -- 101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97, -- 109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109, -- 101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112, -- 121,39,46,114,29,0,0,0,114,58,0,0,0,114,59,0, -- 0,0,114,56,0,0,0,218,8,95,95,105,110,105,116,95, -- 95,41,4,114,38,0,0,0,114,157,0,0,0,114,34,0, -- 0,0,114,32,0,0,0,41,5,114,108,0,0,0,114,126, -- 0,0,0,114,94,0,0,0,90,13,102,105,108,101,110,97, -- 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, -- 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,159,0,0,0,133,2,0,0,115,8,0,0,0,0, -- 3,25,1,22,1,19,1,122,24,95,76,111,97,100,101,114, -- 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, -- 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, -- 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, -- 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, -- 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, -- 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,4, -- 0,0,0,41,2,114,108,0,0,0,114,164,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, -- 99,114,101,97,116,101,95,109,111,100,117,108,101,141,2,0, -- 0,115,0,0,0,0,122,27,95,76,111,97,100,101,114,66, -- 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, -- 117,108,101,99,2,0,0,0,0,0,0,0,3,0,0,0, -- 4,0,0,0,67,0,0,0,115,80,0,0,0,124,0,0, -- 106,0,0,124,1,0,106,1,0,131,1,0,125,2,0,124, -- 2,0,100,1,0,107,8,0,114,54,0,116,2,0,100,2, -- 0,106,3,0,124,1,0,106,1,0,131,1,0,131,1,0, -- 130,1,0,116,4,0,106,5,0,116,6,0,124,2,0,124, -- 1,0,106,7,0,131,3,0,1,100,1,0,83,41,3,122, -- 19,69,120,101,99,117,116,101,32,116,104,101,32,109,111,100, -- 117,108,101,46,78,122,52,99,97,110,110,111,116,32,108,111, -- 97,100,32,109,111,100,117,108,101,32,123,33,114,125,32,119, -- 104,101,110,32,103,101,116,95,99,111,100,101,40,41,32,114, -- 101,116,117,114,110,115,32,78,111,110,101,41,8,218,8,103, -- 101,116,95,99,111,100,101,114,112,0,0,0,114,107,0,0, -- 0,114,47,0,0,0,114,121,0,0,0,218,25,95,99,97, -- 108,108,95,119,105,116,104,95,102,114,97,109,101,115,95,114, -- 101,109,111,118,101,100,218,4,101,120,101,99,114,118,0,0, -- 0,41,3,114,108,0,0,0,218,6,109,111,100,117,108,101, -- 114,146,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, -- 101,144,2,0,0,115,10,0,0,0,0,2,18,1,12,1, -- 9,1,15,1,122,25,95,76,111,97,100,101,114,66,97,115, -- 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,99, -- 2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, -- 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, -- 0,0,124,1,0,131,2,0,83,41,1,78,41,2,114,121, -- 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, -- 101,95,115,104,105,109,41,2,114,108,0,0,0,114,126,0, ++ 2,0,1,110,0,0,124,2,0,83,41,4,122,155,84,114, ++ 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100, ++ 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105, ++ 102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100, ++ 101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32, ++ 32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101, ++ 114,40,41,46,10,10,32,32,32,32,84,104,105,115,32,109, ++ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, ++ 116,101,100,32,105,110,32,102,97,118,111,114,32,111,102,32, ++ 102,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, ++ 40,41,46,10,10,32,32,32,32,78,122,44,78,111,116,32, ++ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116, ++ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32, ++ 95,95,105,110,105,116,95,95,114,85,0,0,0,41,6,218, ++ 11,102,105,110,100,95,108,111,97,100,101,114,114,32,0,0, ++ 0,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, ++ 114,110,114,48,0,0,0,218,13,73,109,112,111,114,116,87, ++ 97,114,110,105,110,103,41,5,114,72,0,0,0,114,159,0, ++ 0,0,218,6,108,111,97,100,101,114,218,8,112,111,114,116, ++ 105,111,110,115,218,3,109,115,103,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, ++ 109,111,100,117,108,101,95,115,104,105,109,54,2,0,0,115, ++ 10,0,0,0,0,10,21,1,24,1,6,1,32,1,114,173, ++ 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, ++ 3,0,0,0,67,0,0,0,115,93,0,0,0,116,0,0, ++ 124,1,0,124,0,0,131,2,0,125,2,0,116,1,0,124, ++ 2,0,131,1,0,125,3,0,124,1,0,116,2,0,106,3, ++ 0,107,6,0,114,79,0,116,2,0,106,3,0,124,1,0, ++ 25,125,4,0,124,3,0,106,4,0,124,4,0,131,1,0, ++ 1,116,2,0,106,3,0,124,1,0,25,83,124,3,0,106, ++ 5,0,131,0,0,83,100,1,0,83,41,2,122,128,76,111, ++ 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, ++ 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, ++ 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, ++ 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, ++ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, ++ 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, ++ 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41, ++ 6,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, ++ 100,101,114,218,12,95,83,112,101,99,77,101,116,104,111,100, ++ 115,114,8,0,0,0,114,74,0,0,0,218,4,101,120,101, ++ 99,218,4,108,111,97,100,41,5,114,72,0,0,0,114,159, ++ 0,0,0,218,4,115,112,101,99,218,7,109,101,116,104,111, ++ 100,115,218,6,109,111,100,117,108,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,108,111,97,100, ++ 95,109,111,100,117,108,101,95,115,104,105,109,71,2,0,0, ++ 115,14,0,0,0,0,6,15,1,12,1,15,1,13,1,13, ++ 1,11,2,114,181,0,0,0,99,4,0,0,0,0,0,0, ++ 0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,1, ++ 0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,9, ++ 0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,6, ++ 0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,0, ++ 114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,0, ++ 124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0, ++ 124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0, ++ 124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0, ++ 124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,106, ++ 1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2, ++ 0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4, ++ 0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,0, ++ 131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,106, ++ 1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8, ++ 0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1, ++ 0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,0, ++ 107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,131, ++ 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, ++ 5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,1, ++ 0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,0, ++ 124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,18, ++ 0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,110, ++ 62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,107, ++ 3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,1, ++ 0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,3, ++ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,0, ++ 121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,10, ++ 0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,1, ++ 1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,0, ++ 124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,106, ++ 1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,1, ++ 0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,0, ++ 133,2,0,25,83,41,15,97,122,1,0,0,86,97,108,105, ++ 100,97,116,101,32,116,104,101,32,104,101,97,100,101,114,32, ++ 111,102,32,116,104,101,32,112,97,115,115,101,100,45,105,110, ++ 32,98,121,116,101,99,111,100,101,32,97,103,97,105,110,115, ++ 116,32,115,111,117,114,99,101,95,115,116,97,116,115,32,40, ++ 105,102,10,32,32,32,32,103,105,118,101,110,41,32,97,110, ++ 100,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32, ++ 98,121,116,101,99,111,100,101,32,116,104,97,116,32,99,97, ++ 110,32,98,101,32,99,111,109,112,105,108,101,100,32,98,121, ++ 32,99,111,109,112,105,108,101,40,41,46,10,10,32,32,32, ++ 32,65,108,108,32,111,116,104,101,114,32,97,114,103,117,109, ++ 101,110,116,115,32,97,114,101,32,117,115,101,100,32,116,111, ++ 32,101,110,104,97,110,99,101,32,101,114,114,111,114,32,114, ++ 101,112,111,114,116,105,110,103,46,10,10,32,32,32,32,73, ++ 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, ++ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97, ++ 103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110, ++ 99,111,114,114,101,99,116,32,111,114,32,116,104,101,32,98, ++ 121,116,101,99,111,100,101,32,105,115,10,32,32,32,32,102, ++ 111,117,110,100,32,116,111,32,98,101,32,115,116,97,108,101, ++ 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, ++ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, ++ 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, ++ 101,10,32,32,32,32,116,114,117,110,99,97,116,101,100,46, ++ 10,10,32,32,32,32,78,114,68,0,0,0,122,10,60,98, ++ 121,116,101,99,111,100,101,62,114,36,0,0,0,114,13,0, ++ 0,0,233,8,0,0,0,233,12,0,0,0,122,30,98,97, ++ 100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105, ++ 110,32,123,33,114,125,58,32,123,33,114,125,122,43,114,101, ++ 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, ++ 114,101,97,100,105,110,103,32,116,105,109,101,115,116,97,109, ++ 112,32,105,110,32,123,33,114,125,122,48,114,101,97,99,104, ++ 101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97, ++ 100,105,110,103,32,115,105,122,101,32,111,102,32,115,111,117, ++ 114,99,101,32,105,110,32,123,33,114,125,218,5,109,116,105, ++ 109,101,122,26,98,121,116,101,99,111,100,101,32,105,115,32, ++ 115,116,97,108,101,32,102,111,114,32,123,33,114,125,218,4, ++ 115,105,122,101,108,3,0,0,0,255,127,255,127,3,0,41, ++ 9,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, ++ 48,0,0,0,114,153,0,0,0,114,154,0,0,0,114,32, ++ 0,0,0,218,8,69,79,70,69,114,114,111,114,114,15,0, ++ 0,0,114,80,0,0,0,114,20,0,0,0,41,11,114,54, ++ 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, ++ 115,114,68,0,0,0,114,36,0,0,0,90,11,101,120,99, ++ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90, ++ 13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8, ++ 114,97,119,95,115,105,122,101,114,152,0,0,0,218,12,115, ++ 111,117,114,99,101,95,109,116,105,109,101,218,11,115,111,117, ++ 114,99,101,95,115,105,122,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,25,95,118,97,108,105,100,97, ++ 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, ++ 101,114,87,2,0,0,115,76,0,0,0,0,11,6,1,12, ++ 1,13,3,6,1,12,1,13,1,16,1,16,1,16,1,12, ++ 1,18,1,10,1,18,1,18,1,15,1,10,1,15,1,18, ++ 1,15,1,10,1,15,1,12,1,3,1,20,1,13,1,5, ++ 2,18,1,15,1,10,1,18,1,3,1,18,1,13,1,5, ++ 2,18,1,15,1,15,1,114,191,0,0,0,99,4,0,0, ++ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, ++ 0,115,115,0,0,0,116,0,0,106,1,0,124,0,0,131, ++ 1,0,125,4,0,116,2,0,124,4,0,116,3,0,131,2, ++ 0,114,78,0,116,4,0,100,1,0,124,2,0,131,2,0, ++ 1,124,3,0,100,2,0,107,9,0,114,74,0,116,5,0, ++ 106,6,0,124,4,0,124,3,0,131,2,0,1,110,0,0, ++ 124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0, ++ 131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131, ++ 1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109, ++ 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, ++ 32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97, ++ 108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95, ++ 104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32, ++ 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, ++ 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, ++ 99,116,32,105,110,32,123,33,114,125,114,68,0,0,0,114, ++ 36,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90, ++ 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, ++ 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,153, ++ 0,0,0,114,107,0,0,0,90,16,95,102,105,120,95,99, ++ 111,95,102,105,108,101,110,97,109,101,114,154,0,0,0,114, ++ 48,0,0,0,41,5,114,54,0,0,0,114,68,0,0,0, ++ 114,141,0,0,0,114,142,0,0,0,218,4,99,111,100,101, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, ++ 100,101,142,2,0,0,115,16,0,0,0,0,2,15,1,15, ++ 1,13,1,12,1,19,1,4,2,18,1,114,196,0,0,0, ++ 114,85,0,0,0,99,3,0,0,0,0,0,0,0,4,0, ++ 0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,116, ++ 0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,2, ++ 0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,3, ++ 0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,0, ++ 1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,0, ++ 131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,67, ++ 111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,98, ++ 106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,111, ++ 100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,111, ++ 117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,109, ++ 112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,41, ++ 6,218,9,98,121,116,101,97,114,114,97,121,114,186,0,0, ++ 0,218,6,101,120,116,101,110,100,114,18,0,0,0,114,192, ++ 0,0,0,90,5,100,117,109,112,115,41,4,114,195,0,0, ++ 0,114,184,0,0,0,114,190,0,0,0,114,54,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,111, ++ 100,101,154,2,0,0,115,10,0,0,0,0,3,12,1,19, ++ 1,19,1,22,1,114,199,0,0,0,99,1,0,0,0,0, ++ 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, ++ 89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,0, ++ 116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,125, ++ 2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,3, ++ 0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,0, ++ 125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,124, ++ 3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,122, ++ 121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,101, ++ 112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,99, ++ 101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,114, ++ 110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,32, ++ 32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,119, ++ 108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,32, ++ 117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,111, ++ 100,105,110,103,46,10,32,32,32,32,114,85,0,0,0,78, ++ 84,41,7,218,8,116,111,107,101,110,105,122,101,114,50,0, ++ 0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,97, ++ 100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,110, ++ 99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,110, ++ 116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,101, ++ 114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,117, ++ 114,99,101,95,98,121,116,101,115,114,200,0,0,0,90,21, ++ 115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97, ++ 100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,90, ++ 15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,114, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 13,100,101,99,111,100,101,95,115,111,117,114,99,101,164,2, ++ 0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,18, ++ 1,114,204,0,0,0,99,1,0,0,0,0,0,0,0,5, ++ 0,0,0,35,0,0,0,67,0,0,0,115,15,1,0,0, ++ 116,0,0,124,0,0,100,1,0,100,0,0,131,3,0,125, ++ 1,0,116,1,0,124,1,0,100,2,0,131,2,0,114,74, ++ 0,121,17,0,124,1,0,106,2,0,124,0,0,131,1,0, ++ 83,87,113,74,0,4,116,3,0,107,10,0,114,70,0,1, ++ 1,1,89,113,74,0,88,110,0,0,121,13,0,124,0,0, ++ 106,4,0,125,2,0,87,110,18,0,4,116,5,0,107,10, ++ 0,114,107,0,1,1,1,89,110,29,0,88,124,2,0,100, ++ 0,0,107,9,0,114,136,0,116,6,0,124,2,0,131,1, ++ 0,106,2,0,131,0,0,83,121,13,0,124,0,0,106,7, ++ 0,125,3,0,87,110,24,0,4,116,5,0,107,10,0,114, ++ 175,0,1,1,1,100,3,0,125,3,0,89,110,1,0,88, ++ 121,13,0,124,0,0,106,8,0,125,4,0,87,110,59,0, ++ 4,116,5,0,107,10,0,114,250,0,1,1,1,124,1,0, ++ 100,0,0,107,8,0,114,230,0,100,4,0,106,9,0,124, ++ 3,0,131,1,0,83,100,5,0,106,9,0,124,3,0,124, ++ 1,0,131,2,0,83,89,110,17,0,88,100,6,0,106,9, ++ 0,124,3,0,124,4,0,131,2,0,83,100,0,0,83,41, ++ 7,78,218,10,95,95,108,111,97,100,101,114,95,95,218,11, ++ 109,111,100,117,108,101,95,114,101,112,114,250,1,63,122,13, ++ 60,109,111,100,117,108,101,32,123,33,114,125,62,122,20,60, ++ 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114, ++ 125,41,62,122,23,60,109,111,100,117,108,101,32,123,33,114, ++ 125,32,102,114,111,109,32,123,33,114,125,62,41,10,114,63, ++ 0,0,0,114,61,0,0,0,114,206,0,0,0,218,9,69, ++ 120,99,101,112,116,105,111,110,218,8,95,95,115,112,101,99, ++ 95,95,218,14,65,116,116,114,105,98,117,116,101,69,114,114, ++ 111,114,114,175,0,0,0,114,58,0,0,0,218,8,95,95, ++ 102,105,108,101,95,95,114,48,0,0,0,41,5,114,180,0, ++ 0,0,114,170,0,0,0,114,178,0,0,0,114,68,0,0, ++ 0,114,132,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,12,95,109,111,100,117,108,101,95,114, ++ 101,112,114,178,2,0,0,115,46,0,0,0,0,2,18,1, ++ 15,4,3,1,17,1,13,1,8,1,3,1,13,1,13,1, ++ 5,2,12,1,16,4,3,1,13,1,13,1,11,1,3,1, ++ 13,1,13,1,12,1,13,2,21,2,114,212,0,0,0,99, ++ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, ++ 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, ++ 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, ++ 100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218, ++ 17,95,105,110,115,116,97,108,108,101,100,95,115,97,102,101, ++ 108,121,99,2,0,0,0,0,0,0,0,2,0,0,0,2, ++ 0,0,0,67,0,0,0,115,25,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,1,0,106,1,0,124,0,0,95,2, ++ 0,100,0,0,83,41,1,78,41,3,218,7,95,109,111,100, ++ 117,108,101,114,209,0,0,0,218,5,95,115,112,101,99,41, ++ 2,114,72,0,0,0,114,180,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,73,0,0,0,216, ++ 2,0,0,115,4,0,0,0,0,1,9,1,122,26,95,105, ++ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, ++ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, ++ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,38,0, ++ 0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0, ++ 0,106,2,0,116,3,0,106,4,0,124,0,0,106,0,0, ++ 106,5,0,60,100,0,0,83,41,2,78,84,41,6,114,215, ++ 0,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, ++ 110,103,114,214,0,0,0,114,8,0,0,0,114,74,0,0, ++ 0,114,68,0,0,0,41,1,114,72,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,76,0,0, ++ 0,220,2,0,0,115,4,0,0,0,0,4,12,1,122,27, ++ 95,105,110,115,116,97,108,108,101,100,95,115,97,102,101,108, ++ 121,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, ++ 0,0,0,0,3,0,0,0,17,0,0,0,71,0,0,0, ++ 115,121,0,0,0,122,101,0,124,0,0,106,0,0,125,2, ++ 0,116,1,0,100,1,0,100,2,0,132,0,0,124,1,0, ++ 68,131,1,0,131,1,0,114,78,0,121,17,0,116,2,0, ++ 106,3,0,124,2,0,106,4,0,61,87,113,100,0,4,116, ++ 5,0,107,10,0,114,74,0,1,1,1,89,113,100,0,88, ++ 110,22,0,116,6,0,100,3,0,124,2,0,106,4,0,124, ++ 2,0,106,7,0,131,3,0,1,87,100,0,0,100,4,0, ++ 124,0,0,106,0,0,95,8,0,88,100,0,0,83,41,5, ++ 78,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, ++ 0,0,115,0,0,0,115,27,0,0,0,124,0,0,93,17, ++ 0,125,1,0,124,1,0,100,0,0,107,9,0,86,1,113, ++ 3,0,100,0,0,83,41,1,78,114,5,0,0,0,41,2, ++ 114,23,0,0,0,114,77,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,78,0,0,0,230,2, ++ 0,0,115,2,0,0,0,6,0,122,45,95,105,110,115,116, + 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, +- 110,116,101,114,95,95,99,1,0,0,0,0,0,0,0,3, +- 0,0,0,17,0,0,0,71,0,0,0,115,121,0,0,0, +- 122,101,0,124,0,0,106,0,0,125,2,0,116,1,0,100, +- 1,0,100,2,0,132,0,0,124,1,0,68,131,1,0,131, +- 1,0,114,78,0,121,17,0,116,2,0,106,3,0,124,2, +- 0,106,4,0,61,87,113,100,0,4,116,5,0,107,10,0, +- 114,74,0,1,1,1,89,113,100,0,88,110,22,0,116,6, +- 0,100,3,0,124,2,0,106,4,0,124,2,0,106,7,0, +- 131,3,0,1,87,100,0,0,100,4,0,124,0,0,106,0, +- 0,95,8,0,88,100,0,0,83,41,5,78,99,1,0,0, +- 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, +- 0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124, +- 1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,0, +- 83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0, +- 114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,77,0,0,0,230,2,0,0,115,2,0, +- 0,0,6,0,122,45,95,105,110,115,116,97,108,108,101,100, +- 95,115,97,102,101,108,121,46,95,95,101,120,105,116,95,95, +- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, +- 112,114,62,122,18,105,109,112,111,114,116,32,123,33,114,125, +- 32,35,32,123,33,114,125,70,41,9,114,214,0,0,0,114, +- 78,0,0,0,114,7,0,0,0,114,73,0,0,0,114,67, +- 0,0,0,114,79,0,0,0,114,152,0,0,0,114,169,0, +- 0,0,114,215,0,0,0,41,3,114,71,0,0,0,114,80, +- 0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,81,0,0,0,227,2,0,0, +- 115,18,0,0,0,0,1,3,1,9,1,25,1,3,1,17, +- 1,13,1,8,2,26,2,122,26,95,105,110,115,116,97,108, +- 108,101,100,95,115,97,102,101,108,121,46,95,95,101,120,105, +- 116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,72,0,0,0,114,75,0,0,0,114, +- 81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,212,0,0,0,214,2,0, +- 0,115,6,0,0,0,12,2,12,4,12,7,114,212,0,0, +- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,8,0, +- 0,0,64,0,0,0,115,172,0,0,0,101,0,0,90,1, +- 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, +- 100,3,0,100,4,0,100,3,0,100,5,0,100,3,0,100, +- 6,0,100,7,0,132,0,3,90,4,0,100,8,0,100,9, +- 0,132,0,0,90,5,0,100,10,0,100,11,0,132,0,0, +- 90,6,0,101,7,0,100,12,0,100,13,0,132,0,0,131, +- 1,0,90,8,0,101,8,0,106,9,0,100,14,0,100,13, +- 0,132,0,0,131,1,0,90,8,0,101,7,0,100,15,0, +- 100,16,0,132,0,0,131,1,0,90,10,0,101,7,0,100, +- 17,0,100,18,0,132,0,0,131,1,0,90,11,0,101,11, +- 0,106,9,0,100,19,0,100,18,0,132,0,0,131,1,0, +- 90,11,0,100,3,0,83,41,20,218,10,77,111,100,117,108, +- 101,83,112,101,99,97,208,5,0,0,84,104,101,32,115,112, +- 101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32, +- 97,32,109,111,100,117,108,101,44,32,117,115,101,100,32,102, +- 111,114,32,108,111,97,100,105,110,103,46,10,10,32,32,32, +- 32,65,32,109,111,100,117,108,101,39,115,32,115,112,101,99, +- 32,105,115,32,116,104,101,32,115,111,117,114,99,101,32,102, +- 111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97, +- 98,111,117,116,32,116,104,101,32,109,111,100,117,108,101,46, +- 32,32,70,111,114,10,32,32,32,32,100,97,116,97,32,97, +- 115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116, +- 104,101,32,109,111,100,117,108,101,44,32,105,110,99,108,117, +- 100,105,110,103,32,115,111,117,114,99,101,44,32,117,115,101, +- 32,116,104,101,32,115,112,101,99,39,115,10,32,32,32,32, +- 108,111,97,100,101,114,46,10,10,32,32,32,32,96,110,97, +- 109,101,96,32,105,115,32,116,104,101,32,97,98,115,111,108, +- 117,116,101,32,110,97,109,101,32,111,102,32,116,104,101,32, +- 109,111,100,117,108,101,46,32,32,96,108,111,97,100,101,114, +- 96,32,105,115,32,116,104,101,32,108,111,97,100,101,114,10, +- 32,32,32,32,116,111,32,117,115,101,32,119,104,101,110,32, +- 108,111,97,100,105,110,103,32,116,104,101,32,109,111,100,117, +- 108,101,46,32,32,96,112,97,114,101,110,116,96,32,105,115, +- 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, +- 10,32,32,32,32,112,97,99,107,97,103,101,32,116,104,101, +- 32,109,111,100,117,108,101,32,105,115,32,105,110,46,32,32, +- 84,104,101,32,112,97,114,101,110,116,32,105,115,32,100,101, +- 114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,110, +- 97,109,101,46,10,10,32,32,32,32,96,105,115,95,112,97, +- 99,107,97,103,101,96,32,100,101,116,101,114,109,105,110,101, +- 115,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32, +- 105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32, +- 112,97,99,107,97,103,101,32,111,114,10,32,32,32,32,110, +- 111,116,46,32,32,79,110,32,109,111,100,117,108,101,115,32, +- 116,104,105,115,32,105,115,32,114,101,102,108,101,99,116,101, +- 100,32,98,121,32,116,104,101,32,96,95,95,112,97,116,104, +- 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, +- 32,32,32,32,96,111,114,105,103,105,110,96,32,105,115,32, +- 116,104,101,32,115,112,101,99,105,102,105,99,32,108,111,99, +- 97,116,105,111,110,32,117,115,101,100,32,98,121,32,116,104, +- 101,32,108,111,97,100,101,114,32,102,114,111,109,32,119,104, +- 105,99,104,32,116,111,10,32,32,32,32,108,111,97,100,32, +- 116,104,101,32,109,111,100,117,108,101,44,32,105,102,32,116, +- 104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32, +- 105,115,32,97,118,97,105,108,97,98,108,101,46,32,32,87, +- 104,101,110,32,102,105,108,101,110,97,109,101,32,105,115,10, +- 32,32,32,32,115,101,116,44,32,111,114,105,103,105,110,32, +- 119,105,108,108,32,109,97,116,99,104,46,10,10,32,32,32, +- 32,96,104,97,115,95,108,111,99,97,116,105,111,110,96,32, +- 105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,97, +- 32,115,112,101,99,39,115,32,34,111,114,105,103,105,110,34, +- 32,114,101,102,108,101,99,116,115,32,97,32,108,111,99,97, +- 116,105,111,110,46,10,32,32,32,32,87,104,101,110,32,116, +- 104,105,115,32,105,115,32,84,114,117,101,44,32,96,95,95, +- 102,105,108,101,95,95,96,32,97,116,116,114,105,98,117,116, +- 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, +- 105,115,32,115,101,116,46,10,10,32,32,32,32,96,99,97, +- 99,104,101,100,96,32,105,115,32,116,104,101,32,108,111,99, +- 97,116,105,111,110,32,111,102,32,116,104,101,32,99,97,99, +- 104,101,100,32,98,121,116,101,99,111,100,101,32,102,105,108, +- 101,44,32,105,102,32,97,110,121,46,32,32,73,116,10,32, +- 32,32,32,99,111,114,114,101,115,112,111,110,100,115,32,116, +- 111,32,116,104,101,32,96,95,95,99,97,99,104,101,100,95, +- 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, +- 32,32,32,96,115,117,98,109,111,100,117,108,101,95,115,101, +- 97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,32, +- 105,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32, +- 111,102,32,112,97,116,104,32,101,110,116,114,105,101,115,32, +- 116,111,10,32,32,32,32,115,101,97,114,99,104,32,119,104, +- 101,110,32,105,109,112,111,114,116,105,110,103,32,115,117,98, +- 109,111,100,117,108,101,115,46,32,32,73,102,32,115,101,116, +- 44,32,105,115,95,112,97,99,107,97,103,101,32,115,104,111, +- 117,108,100,32,98,101,10,32,32,32,32,84,114,117,101,45, +- 45,97,110,100,32,70,97,108,115,101,32,111,116,104,101,114, +- 119,105,115,101,46,10,10,32,32,32,32,80,97,99,107,97, +- 103,101,115,32,97,114,101,32,115,105,109,112,108,121,32,109, +- 111,100,117,108,101,115,32,116,104,97,116,32,40,109,97,121, +- 41,32,104,97,118,101,32,115,117,98,109,111,100,117,108,101, +- 115,46,32,32,73,102,32,97,32,115,112,101,99,10,32,32, +- 32,32,104,97,115,32,97,32,110,111,110,45,78,111,110,101, +- 32,118,97,108,117,101,32,105,110,32,96,115,117,98,109,111, +- 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, +- 116,105,111,110,115,96,44,32,116,104,101,32,105,109,112,111, +- 114,116,10,32,32,32,32,115,121,115,116,101,109,32,119,105, +- 108,108,32,99,111,110,115,105,100,101,114,32,109,111,100,117, +- 108,101,115,32,108,111,97,100,101,100,32,102,114,111,109,32, +- 116,104,101,32,115,112,101,99,32,97,115,32,112,97,99,107, +- 97,103,101,115,46,10,10,32,32,32,32,79,110,108,121,32, +- 102,105,110,100,101,114,115,32,40,115,101,101,32,105,109,112, +- 111,114,116,108,105,98,46,97,98,99,46,77,101,116,97,80, +- 97,116,104,70,105,110,100,101,114,32,97,110,100,10,32,32, +- 32,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, +- 80,97,116,104,69,110,116,114,121,70,105,110,100,101,114,41, +- 32,115,104,111,117,108,100,32,109,111,100,105,102,121,32,77, +- 111,100,117,108,101,83,112,101,99,32,105,110,115,116,97,110, +- 99,101,115,46,10,10,32,32,32,32,218,6,111,114,105,103, +- 105,110,78,218,12,108,111,97,100,101,114,95,115,116,97,116, +- 101,218,10,105,115,95,112,97,99,107,97,103,101,99,3,0, +- 0,0,3,0,0,0,6,0,0,0,2,0,0,0,67,0, +- 0,0,115,79,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,2,0,124,0,0,95,1,0,124,3,0,124,0,0,95, +- 2,0,124,4,0,124,0,0,95,3,0,124,5,0,114,48, +- 0,103,0,0,110,3,0,100,0,0,124,0,0,95,4,0, +- 100,1,0,124,0,0,95,5,0,100,0,0,124,0,0,95, +- 6,0,100,0,0,83,41,2,78,70,41,7,114,67,0,0, +- 0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0, +- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, +- 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, +- 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, +- 99,104,101,100,41,6,114,71,0,0,0,114,67,0,0,0, +- 114,169,0,0,0,114,217,0,0,0,114,218,0,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,22,3,0,0,115,14,0,0, +- 0,0,2,9,1,9,1,9,1,9,1,21,3,9,1,122, +- 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, +- 105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,0, +- 0,4,0,0,0,67,0,0,0,115,153,0,0,0,100,1, +- 0,106,0,0,124,0,0,106,1,0,131,1,0,100,2,0, +- 106,0,0,124,0,0,106,2,0,131,1,0,103,2,0,125, +- 1,0,124,0,0,106,3,0,100,0,0,107,9,0,114,79, +- 0,124,1,0,106,4,0,100,3,0,106,0,0,124,0,0, +- 106,3,0,131,1,0,131,1,0,1,110,0,0,124,0,0, +- 106,5,0,100,0,0,107,9,0,114,122,0,124,1,0,106, +- 4,0,100,4,0,106,0,0,124,0,0,106,5,0,131,1, +- 0,131,1,0,1,110,0,0,100,5,0,106,0,0,124,0, +- 0,106,6,0,106,7,0,100,6,0,106,8,0,124,1,0, +- 131,1,0,131,2,0,83,41,7,78,122,9,110,97,109,101, +- 61,123,33,114,125,122,11,108,111,97,100,101,114,61,123,33, +- 114,125,122,11,111,114,105,103,105,110,61,123,33,114,125,122, +- 29,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, +- 104,95,108,111,99,97,116,105,111,110,115,61,123,125,122,6, +- 123,125,40,123,125,41,122,2,44,32,41,9,114,47,0,0, +- 0,114,67,0,0,0,114,169,0,0,0,114,217,0,0,0, +- 218,6,97,112,112,101,110,100,114,220,0,0,0,218,9,95, +- 95,99,108,97,115,115,95,95,114,57,0,0,0,114,26,0, +- 0,0,41,2,114,71,0,0,0,114,80,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,0, +- 0,0,34,3,0,0,115,16,0,0,0,0,1,15,1,21, +- 1,15,1,28,1,15,1,6,1,22,1,122,19,77,111,100, +- 117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95, +- 99,2,0,0,0,0,0,0,0,3,0,0,0,13,0,0, +- 0,67,0,0,0,115,145,0,0,0,124,0,0,106,0,0, +- 125,2,0,121,107,0,124,0,0,106,1,0,124,1,0,106, +- 1,0,107,2,0,111,114,0,124,0,0,106,2,0,124,1, +- 0,106,2,0,107,2,0,111,114,0,124,0,0,106,3,0, +- 124,1,0,106,3,0,107,2,0,111,114,0,124,2,0,124, +- 1,0,106,0,0,107,2,0,111,114,0,124,0,0,106,4, +- 0,124,1,0,106,4,0,107,2,0,111,114,0,124,0,0, +- 106,5,0,124,1,0,106,5,0,107,2,0,83,87,110,22, +- 0,4,116,6,0,107,10,0,114,140,0,1,1,1,100,1, +- 0,83,89,110,1,0,88,100,0,0,83,41,2,78,70,41, +- 7,114,220,0,0,0,114,67,0,0,0,114,169,0,0,0, +- 114,217,0,0,0,218,6,99,97,99,104,101,100,218,12,104, +- 97,115,95,108,111,99,97,116,105,111,110,114,209,0,0,0, +- 41,3,114,71,0,0,0,218,5,111,116,104,101,114,218,4, +- 115,109,115,108,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,6,95,95,101,113,95,95,44,3,0,0,115, +- 20,0,0,0,0,1,9,1,3,1,18,1,18,1,18,1, +- 15,1,18,1,20,1,13,1,122,17,77,111,100,117,108,101, +- 83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,0, +- 0,0,0,0,2,0,0,0,12,0,0,0,67,0,0,0, +- 115,158,0,0,0,124,0,0,106,0,0,100,0,0,107,8, +- 0,114,151,0,124,0,0,106,1,0,100,0,0,107,9,0, +- 114,151,0,124,0,0,106,2,0,114,151,0,124,0,0,106, +- 1,0,125,1,0,124,1,0,106,3,0,116,4,0,116,5, +- 0,131,1,0,131,1,0,114,112,0,121,19,0,116,6,0, +- 124,1,0,131,1,0,124,0,0,95,0,0,87,113,145,0, +- 4,116,7,0,107,10,0,114,108,0,1,1,1,89,113,145, +- 0,88,113,148,0,124,1,0,106,3,0,116,4,0,116,8, +- 0,131,1,0,131,1,0,114,148,0,124,1,0,124,0,0, +- 95,0,0,113,148,0,113,151,0,110,0,0,124,0,0,106, +- 0,0,83,41,1,78,41,9,114,222,0,0,0,114,217,0, +- 0,0,114,221,0,0,0,218,8,101,110,100,115,119,105,116, +- 104,218,5,116,117,112,108,101,114,134,0,0,0,114,132,0, +- 0,0,114,124,0,0,0,218,17,66,89,84,69,67,79,68, +- 69,95,83,85,70,70,73,88,69,83,41,2,114,71,0,0, +- 0,114,131,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,225,0,0,0,56,3,0,0,115,22, +- 0,0,0,0,2,15,1,24,1,9,1,21,1,3,1,19, +- 1,13,1,8,1,21,1,18,1,122,17,77,111,100,117,108, +- 101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, +- 0,115,13,0,0,0,124,1,0,124,0,0,95,0,0,100, +- 0,0,83,41,1,78,41,1,114,222,0,0,0,41,2,114, +- 71,0,0,0,114,225,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,225,0,0,0,70,3,0, +- 0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,0, +- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,46,0, +- 0,0,124,0,0,106,0,0,100,1,0,107,8,0,114,35, +- 0,124,0,0,106,1,0,106,2,0,100,2,0,131,1,0, +- 100,3,0,25,83,124,0,0,106,1,0,83,100,1,0,83, +- 41,4,122,32,84,104,101,32,110,97,109,101,32,111,102,32, +- 116,104,101,32,109,111,100,117,108,101,39,115,32,112,97,114, +- 101,110,116,46,78,114,116,0,0,0,114,84,0,0,0,41, +- 3,114,220,0,0,0,114,67,0,0,0,114,32,0,0,0, +- 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,6,112,97,114,101,110,116,74,3, +- 0,0,115,6,0,0,0,0,3,15,1,20,2,122,17,77, +- 111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,116, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0, +- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, +- 83,41,1,78,41,1,114,221,0,0,0,41,1,114,71,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,218,11,108,111,97,100,95,109,111,100,117,108,101,152,2, -- 0,0,115,2,0,0,0,0,1,122,25,95,76,111,97,100, -- 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, -- 100,117,108,101,78,41,8,114,112,0,0,0,114,111,0,0, -- 0,114,113,0,0,0,114,114,0,0,0,114,159,0,0,0, -- 114,186,0,0,0,114,191,0,0,0,114,193,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,184,0,0,0,128,2,0,0,115,10,0,0, -- 0,12,3,6,2,12,8,12,3,12,8,114,184,0,0,0, -- 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, -- 0,64,0,0,0,115,106,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, -- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, -- 0,100,6,0,132,0,0,90,5,0,100,7,0,100,8,0, -- 132,0,0,90,6,0,100,9,0,100,10,0,132,0,0,90, -- 7,0,100,11,0,100,18,0,100,13,0,100,14,0,132,0, -- 1,90,8,0,100,15,0,100,16,0,132,0,0,90,9,0, -- 100,17,0,83,41,19,218,12,83,111,117,114,99,101,76,111, -- 97,100,101,114,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,1,0,0,0,67,0,0,0,115,10,0,0,0,116,0, -- 0,130,1,0,100,1,0,83,41,2,122,178,79,112,116,105, -- 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, -- 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, -- 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, -- 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, -- 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, -- 100,32,112,97,116,104,44,32,119,104,101,114,101,32,112,97, -- 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, -- 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,69, -- 114,114,111,114,32,119,104,101,110,32,116,104,101,32,112,97, -- 116,104,32,99,97,110,110,111,116,32,98,101,32,104,97,110, -- 100,108,101,100,46,10,32,32,32,32,32,32,32,32,78,41, -- 1,218,7,73,79,69,114,114,111,114,41,2,114,108,0,0, -- 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, -- 101,158,2,0,0,115,2,0,0,0,0,6,122,23,83,111, -- 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, -- 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, -- 0,0,3,0,0,0,67,0,0,0,115,19,0,0,0,100, -- 1,0,124,0,0,106,0,0,124,1,0,131,1,0,105,1, -- 0,83,41,2,97,170,1,0,0,79,112,116,105,111,110,97, -- 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, -- 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, -- 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, -- 102,105,101,100,32,112,97,116,104,10,32,32,32,32,32,32, -- 32,32,116,111,32,98,121,32,116,104,101,32,112,97,116,104, -- 32,40,115,116,114,41,46,10,32,32,32,32,32,32,32,32, -- 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, -- 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, -- 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, -- 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, -- 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, -- 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, -- 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, -- 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, -- 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, -- 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, -- 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, -- 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, -- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, -- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, -- 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, -- 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, -- 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, -+ 67,0,0,0,115,76,0,0,0,116,0,0,116,1,0,131, -+ 1,0,125,3,0,124,3,0,106,2,0,116,3,0,124,1, -+ 0,131,1,0,131,1,0,1,124,3,0,106,2,0,116,3, -+ 0,124,2,0,131,1,0,131,1,0,1,124,3,0,106,2, -+ 0,116,4,0,106,5,0,124,0,0,131,1,0,131,1,0, -+ 1,124,3,0,83,41,1,122,80,67,111,109,112,105,108,101, -+ 32,97,32,99,111,100,101,32,111,98,106,101,99,116,32,105, -+ 110,116,111,32,98,121,116,101,99,111,100,101,32,102,111,114, -+ 32,119,114,105,116,105,110,103,32,111,117,116,32,116,111,32, -+ 97,32,98,121,116,101,45,99,111,109,112,105,108,101,100,10, -+ 32,32,32,32,102,105,108,101,46,41,6,218,9,98,121,116, -+ 101,97,114,114,97,121,114,136,0,0,0,218,6,101,120,116, -+ 101,110,100,114,18,0,0,0,114,143,0,0,0,90,5,100, -+ 117,109,112,115,41,4,114,147,0,0,0,114,134,0,0,0, -+ 114,141,0,0,0,114,54,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,99,111,100,101, -+ 95,116,111,95,98,121,116,101,99,111,100,101,227,1,0,0, -+ 115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,114, -+ 151,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0, -+ 0,4,0,0,0,67,0,0,0,115,89,0,0,0,100,1, -+ 0,100,2,0,108,0,0,125,1,0,116,1,0,106,2,0, -+ 124,0,0,131,1,0,106,3,0,125,2,0,124,1,0,106, -+ 4,0,124,2,0,131,1,0,125,3,0,116,1,0,106,5, -+ 0,100,2,0,100,3,0,131,2,0,125,4,0,124,4,0, -+ 106,6,0,124,0,0,106,6,0,124,3,0,100,1,0,25, -+ 131,1,0,131,1,0,83,41,4,122,121,68,101,99,111,100, -+ 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, -+ 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, -+ 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, -+ 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, -+ 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, -+ 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, -+ 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, -+ 32,32,32,32,114,60,0,0,0,78,84,41,7,218,8,116, -+ 111,107,101,110,105,122,101,114,50,0,0,0,90,7,66,121, -+ 116,101,115,73,79,90,8,114,101,97,100,108,105,110,101,90, -+ 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, -+ 90,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, -+ 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, -+ 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, -+ 116,101,115,114,152,0,0,0,90,21,115,111,117,114,99,101, -+ 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, -+ 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, -+ 110,101,95,100,101,99,111,100,101,114,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,13,100,101,99,111,100, -+ 101,95,115,111,117,114,99,101,237,1,0,0,115,10,0,0, -+ 0,0,5,12,1,18,1,15,1,18,1,114,156,0,0,0, -+ 114,128,0,0,0,218,26,115,117,98,109,111,100,117,108,101, +- 0,114,226,0,0,0,82,3,0,0,115,2,0,0,0,0, +- 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97, +- 115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, +- 19,0,0,0,116,0,0,124,1,0,131,1,0,124,0,0, +- 95,1,0,100,0,0,83,41,1,78,41,2,218,4,98,111, +- 111,108,114,221,0,0,0,41,2,114,71,0,0,0,218,5, +- 118,97,108,117,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,226,0,0,0,86,3,0,0,115,2,0, +- 0,0,0,2,41,12,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, +- 101,0,0,0,114,229,0,0,0,218,8,112,114,111,112,101, +- 114,116,121,114,225,0,0,0,218,6,115,101,116,116,101,114, +- 114,233,0,0,0,114,226,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,216, +- 0,0,0,241,2,0,0,115,20,0,0,0,12,35,6,2, +- 15,1,15,11,12,10,12,12,18,14,21,4,18,8,18,4, +- 114,216,0,0,0,114,217,0,0,0,114,219,0,0,0,99, +- 2,0,0,0,2,0,0,0,5,0,0,0,15,0,0,0, +- 67,0,0,0,115,193,0,0,0,116,0,0,124,1,0,100, +- 1,0,131,2,0,114,83,0,124,3,0,100,2,0,107,8, +- 0,114,43,0,116,1,0,124,0,0,100,3,0,124,1,0, +- 131,1,1,83,124,3,0,114,55,0,103,0,0,110,3,0, +- 100,2,0,125,4,0,116,1,0,124,0,0,100,3,0,124, +- 1,0,100,4,0,124,4,0,131,1,2,83,124,3,0,100, +- 2,0,107,8,0,114,168,0,116,0,0,124,1,0,100,5, +- 0,131,2,0,114,159,0,121,19,0,124,1,0,106,2,0, +- 124,0,0,131,1,0,125,3,0,87,113,165,0,4,116,3, +- 0,107,10,0,114,155,0,1,1,1,100,2,0,125,3,0, +- 89,113,165,0,88,113,168,0,100,6,0,125,3,0,110,0, +- 0,116,4,0,124,0,0,124,1,0,100,7,0,124,2,0, +- 100,5,0,124,3,0,131,2,2,83,41,8,122,53,82,101, +- 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, +- 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105, +- 111,117,115,32,108,111,97,100,101,114,32,109,101,116,104,111, +- 100,115,46,218,12,103,101,116,95,102,105,108,101,110,97,109, +- 101,78,114,169,0,0,0,114,220,0,0,0,114,219,0,0, +- 0,70,114,217,0,0,0,41,5,114,60,0,0,0,218,23, +- 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, +- 111,99,97,116,105,111,110,114,219,0,0,0,114,153,0,0, +- 0,114,216,0,0,0,41,5,114,67,0,0,0,114,169,0, +- 0,0,114,217,0,0,0,114,219,0,0,0,90,6,115,101, +- 97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,173,0,0,0,91,3,0,0,115,28,0,0, +- 0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,12, +- 1,15,1,3,1,19,1,13,1,14,3,9,2,114,173,0, +- 0,0,114,169,0,0,0,114,220,0,0,0,99,2,0,0, +- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, +- 0,115,110,1,0,0,124,1,0,100,1,0,107,8,0,114, +- 79,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, +- 0,131,2,0,114,79,0,121,19,0,124,2,0,106,1,0, +- 124,0,0,131,1,0,125,1,0,87,113,76,0,4,116,2, +- 0,107,10,0,114,72,0,1,1,1,89,113,76,0,88,113, +- 79,0,110,0,0,116,3,0,124,0,0,124,2,0,100,4, +- 0,124,1,0,131,2,1,125,4,0,100,5,0,124,4,0, +- 95,4,0,124,2,0,100,1,0,107,8,0,114,203,0,120, +- 79,0,116,5,0,131,0,0,68,93,61,0,92,2,0,125, +- 5,0,125,6,0,124,1,0,106,6,0,116,7,0,124,6, +- 0,131,1,0,131,1,0,114,131,0,124,5,0,124,0,0, +- 124,1,0,131,2,0,125,2,0,124,2,0,124,4,0,95, +- 8,0,80,113,131,0,113,131,0,87,100,1,0,83,110,0, +- 0,124,3,0,116,9,0,107,8,0,114,38,1,116,0,0, +- 124,2,0,100,6,0,131,2,0,114,47,1,121,19,0,124, +- 2,0,106,10,0,124,0,0,131,1,0,125,7,0,87,110, +- 18,0,4,116,2,0,107,10,0,114,13,1,1,1,1,89, +- 113,35,1,88,124,7,0,114,35,1,103,0,0,124,4,0, +- 95,11,0,113,35,1,113,47,1,110,9,0,124,3,0,124, +- 4,0,95,11,0,124,4,0,106,11,0,103,0,0,107,2, +- 0,114,106,1,124,1,0,114,106,1,116,12,0,124,1,0, +- 131,1,0,100,7,0,25,125,8,0,124,4,0,106,11,0, +- 106,13,0,124,8,0,131,1,0,1,113,106,1,110,0,0, +- 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, +- 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, +- 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, +- 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, +- 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, +- 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, +- 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, +- 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, +- 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, +- 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, +- 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, +- 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, +- 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, +- 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, +- 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, +- 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, +- 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, +- 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, +- 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, +- 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, +- 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, +- 111,119,110,62,114,238,0,0,0,114,217,0,0,0,84,114, +- 219,0,0,0,114,84,0,0,0,41,14,114,60,0,0,0, +- 114,238,0,0,0,114,153,0,0,0,114,216,0,0,0,114, +- 221,0,0,0,218,27,95,103,101,116,95,115,117,112,112,111, +- 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114, +- 115,114,230,0,0,0,114,231,0,0,0,114,169,0,0,0, +- 218,9,95,80,79,80,85,76,65,84,69,114,219,0,0,0, +- 114,220,0,0,0,114,38,0,0,0,114,223,0,0,0,41, +- 9,114,67,0,0,0,218,8,108,111,99,97,116,105,111,110, +- 114,169,0,0,0,114,220,0,0,0,114,177,0,0,0,218, +- 12,108,111,97,100,101,114,95,99,108,97,115,115,114,127,0, +- 0,0,114,219,0,0,0,90,7,100,105,114,110,97,109,101, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 239,0,0,0,116,3,0,0,115,60,0,0,0,0,12,12, +- 4,6,1,15,2,3,1,19,1,13,1,11,8,21,1,9, +- 3,12,1,22,1,21,1,15,1,9,1,8,2,7,3,12, +- 2,15,1,3,1,19,1,13,1,5,2,6,1,18,2,9, +- 1,15,1,6,1,16,1,22,2,114,239,0,0,0,99,3, +- 0,0,0,0,0,0,0,8,0,0,0,53,0,0,0,67, +- 0,0,0,115,124,1,0,0,121,13,0,124,0,0,106,0, +- 0,125,3,0,87,110,18,0,4,116,1,0,107,10,0,114, +- 33,0,1,1,1,89,110,17,0,88,124,3,0,100,0,0, +- 107,9,0,114,50,0,124,3,0,83,124,0,0,106,2,0, +- 125,4,0,124,1,0,100,0,0,107,8,0,114,108,0,121, +- 13,0,124,0,0,106,3,0,125,1,0,87,113,108,0,4, +- 116,1,0,107,10,0,114,104,0,1,1,1,89,113,108,0, +- 88,110,0,0,121,13,0,124,0,0,106,4,0,125,5,0, +- 87,110,24,0,4,116,1,0,107,10,0,114,147,0,1,1, +- 1,100,0,0,125,5,0,89,110,1,0,88,124,2,0,100, +- 0,0,107,8,0,114,224,0,124,5,0,100,0,0,107,8, +- 0,114,215,0,121,13,0,124,1,0,106,5,0,125,2,0, +- 87,113,221,0,4,116,1,0,107,10,0,114,211,0,1,1, +- 1,100,0,0,125,2,0,89,113,221,0,88,113,224,0,124, +- 5,0,125,2,0,110,0,0,121,13,0,124,0,0,106,6, +- 0,125,6,0,87,110,24,0,4,116,1,0,107,10,0,114, +- 7,1,1,1,1,100,0,0,125,6,0,89,110,1,0,88, +- 121,19,0,116,7,0,124,0,0,106,8,0,131,1,0,125, +- 7,0,87,110,24,0,4,116,1,0,107,10,0,114,53,1, +- 1,1,1,100,0,0,125,7,0,89,110,1,0,88,116,9, +- 0,124,4,0,124,1,0,100,1,0,124,2,0,131,2,1, +- 125,3,0,124,5,0,100,0,0,107,8,0,114,93,1,100, +- 2,0,110,3,0,100,3,0,124,3,0,95,10,0,124,6, +- 0,124,3,0,95,11,0,124,7,0,124,3,0,95,12,0, +- 124,3,0,83,41,4,78,114,217,0,0,0,70,84,41,13, +- 114,208,0,0,0,114,209,0,0,0,114,57,0,0,0,114, +- 204,0,0,0,114,210,0,0,0,90,7,95,79,82,73,71, +- 73,78,218,10,95,95,99,97,99,104,101,100,95,95,218,4, +- 108,105,115,116,218,8,95,95,112,97,116,104,95,95,114,216, +- 0,0,0,114,221,0,0,0,114,225,0,0,0,114,220,0, +- 0,0,41,8,114,179,0,0,0,114,169,0,0,0,114,217, +- 0,0,0,114,177,0,0,0,114,67,0,0,0,114,242,0, +- 0,0,114,225,0,0,0,114,220,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,17,95,115,112, +- 101,99,95,102,114,111,109,95,109,111,100,117,108,101,180,3, +- 0,0,115,72,0,0,0,0,2,3,1,13,1,13,1,5, +- 2,12,1,4,2,9,1,12,1,3,1,13,1,13,2,8, +- 1,3,1,13,1,13,1,11,1,12,1,12,1,3,1,13, +- 1,13,1,14,2,9,1,3,1,13,1,13,1,11,1,3, +- 1,19,1,13,1,11,2,21,1,27,1,9,1,9,1,114, +- 247,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,6,0,0,0,64,0,0,0,115,142,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, +- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, +- 5,0,132,0,0,90,5,0,100,6,0,100,7,0,100,8, +- 0,100,9,0,100,10,0,100,11,0,132,0,2,90,6,0, +- 100,12,0,100,13,0,132,0,0,90,7,0,100,14,0,100, +- 15,0,132,0,0,90,8,0,100,16,0,100,17,0,132,0, +- 0,90,9,0,100,18,0,100,19,0,132,0,0,90,10,0, +- 100,20,0,100,21,0,132,0,0,90,11,0,100,22,0,100, +- 23,0,132,0,0,90,12,0,100,24,0,83,41,25,114,174, +- 0,0,0,122,77,67,111,110,118,101,110,105,101,110,99,101, +- 32,119,114,97,112,112,101,114,32,97,114,111,117,110,100,32, +- 115,112,101,99,32,111,98,106,101,99,116,115,32,116,111,32, +- 112,114,111,118,105,100,101,32,115,112,101,99,45,115,112,101, +- 99,105,102,105,99,10,32,32,32,32,109,101,116,104,111,100, +- 115,46,99,2,0,0,0,0,0,0,0,2,0,0,0,2, +- 0,0,0,67,0,0,0,115,13,0,0,0,124,1,0,124, +- 0,0,95,0,0,100,0,0,83,41,1,78,41,1,114,177, +- 0,0,0,41,2,114,71,0,0,0,114,177,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, +- 0,0,0,232,3,0,0,115,2,0,0,0,0,1,122,21, +- 95,83,112,101,99,77,101,116,104,111,100,115,46,95,95,105, +- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,67,0,0,0,115,158,0,0,0,124, +- 0,0,106,0,0,125,1,0,124,1,0,106,1,0,100,1, +- 0,107,8,0,114,30,0,100,2,0,110,6,0,124,1,0, +- 106,1,0,125,2,0,124,1,0,106,2,0,100,1,0,107, +- 8,0,114,104,0,124,1,0,106,3,0,100,1,0,107,8, +- 0,114,82,0,100,3,0,106,4,0,124,2,0,131,1,0, +- 83,100,4,0,106,4,0,124,2,0,124,1,0,106,3,0, +- 131,2,0,83,110,50,0,124,1,0,106,5,0,114,132,0, +- 100,5,0,106,4,0,124,2,0,124,1,0,106,2,0,131, +- 2,0,83,100,6,0,106,4,0,124,1,0,106,1,0,124, +- 1,0,106,2,0,131,2,0,83,100,1,0,83,41,7,122, +- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, +- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, +- 109,111,100,117,108,101,46,78,114,206,0,0,0,122,13,60, +- 109,111,100,117,108,101,32,123,33,114,125,62,122,20,60,109, +- 111,100,117,108,101,32,123,33,114,125,32,40,123,33,114,125, +- 41,62,122,23,60,109,111,100,117,108,101,32,123,33,114,125, +- 32,102,114,111,109,32,123,33,114,125,62,122,18,60,109,111, +- 100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,41, +- 6,114,177,0,0,0,114,67,0,0,0,114,217,0,0,0, +- 114,169,0,0,0,114,47,0,0,0,114,226,0,0,0,41, +- 3,114,71,0,0,0,114,177,0,0,0,114,67,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 205,0,0,0,235,3,0,0,115,18,0,0,0,0,3,9, +- 1,30,1,15,1,15,1,13,2,22,2,9,1,19,2,122, +- 24,95,83,112,101,99,77,101,116,104,111,100,115,46,109,111, +- 100,117,108,101,95,114,101,112,114,218,9,95,111,118,101,114, +- 114,105,100,101,70,218,11,95,102,111,114,99,101,95,110,97, +- 109,101,84,99,2,0,0,0,2,0,0,0,6,0,0,0, +- 66,0,0,0,67,0,0,0,115,75,2,0,0,124,0,0, +- 106,0,0,125,4,0,124,2,0,115,45,0,124,3,0,115, +- 45,0,116,1,0,124,1,0,100,1,0,100,2,0,131,3, +- 0,100,2,0,107,8,0,114,85,0,121,16,0,124,4,0, +- 106,2,0,124,1,0,95,3,0,87,113,85,0,4,116,4, +- 0,107,10,0,114,81,0,1,1,1,89,113,85,0,88,110, +- 0,0,124,2,0,115,115,0,116,1,0,124,1,0,100,3, +- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,221,0, +- 124,4,0,106,5,0,125,5,0,124,5,0,100,2,0,107, +- 8,0,114,184,0,124,4,0,106,6,0,100,2,0,107,9, +- 0,114,184,0,116,7,0,106,8,0,116,7,0,131,1,0, +- 125,5,0,124,4,0,106,6,0,124,5,0,95,9,0,113, +- 184,0,110,0,0,121,13,0,124,5,0,124,1,0,95,10, +- 0,87,113,221,0,4,116,4,0,107,10,0,114,217,0,1, +- 1,1,89,113,221,0,88,110,0,0,124,2,0,115,251,0, +- 116,1,0,124,1,0,100,4,0,100,2,0,131,3,0,100, +- 2,0,107,8,0,114,35,1,121,16,0,124,4,0,106,11, +- 0,124,1,0,95,12,0,87,113,35,1,4,116,4,0,107, +- 10,0,114,31,1,1,1,1,89,113,35,1,88,110,0,0, +- 121,13,0,124,4,0,124,1,0,95,13,0,87,110,18,0, +- 4,116,4,0,107,10,0,114,68,1,1,1,1,89,110,1, +- 0,88,124,2,0,115,99,1,116,1,0,124,1,0,100,5, +- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,157,1, +- 124,4,0,106,6,0,100,2,0,107,9,0,114,157,1,121, +- 16,0,124,4,0,106,6,0,124,1,0,95,14,0,87,113, +- 154,1,4,116,4,0,107,10,0,114,150,1,1,1,1,89, +- 113,154,1,88,113,157,1,110,0,0,124,4,0,106,15,0, +- 114,71,2,124,2,0,115,196,1,116,1,0,124,1,0,100, +- 6,0,100,2,0,131,3,0,100,2,0,107,8,0,114,236, +- 1,121,16,0,124,4,0,106,16,0,124,1,0,95,17,0, +- 87,113,236,1,4,116,4,0,107,10,0,114,232,1,1,1, +- 1,89,113,236,1,88,110,0,0,124,2,0,115,10,2,116, +- 1,0,124,1,0,100,7,0,100,2,0,131,3,0,100,2, +- 0,107,8,0,114,71,2,124,4,0,106,18,0,100,2,0, +- 107,9,0,114,68,2,121,16,0,124,4,0,106,18,0,124, +- 1,0,95,19,0,87,113,65,2,4,116,4,0,107,10,0, +- 114,61,2,1,1,1,89,113,65,2,88,113,68,2,113,71, +- 2,110,0,0,100,2,0,83,41,8,97,29,2,0,0,83, +- 101,116,32,116,104,101,32,109,111,100,117,108,101,39,115,32, +- 97,116,116,114,105,98,117,116,101,115,46,10,10,32,32,32, +- 32,32,32,32,32,65,108,108,32,109,105,115,115,105,110,103, +- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, +- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, +- 115,32,119,105,108,108,32,98,101,32,115,101,116,46,32,32, +- 72,101,114,101,10,32,32,32,32,32,32,32,32,105,115,32, +- 104,111,119,32,116,104,101,32,115,112,101,99,32,97,116,116, +- 114,105,98,117,116,101,115,32,109,97,112,32,111,110,116,111, +- 32,116,104,101,32,109,111,100,117,108,101,58,10,10,32,32, +- 32,32,32,32,32,32,115,112,101,99,46,110,97,109,101,32, +- 45,62,32,109,111,100,117,108,101,46,95,95,110,97,109,101, +- 95,95,10,32,32,32,32,32,32,32,32,115,112,101,99,46, +- 108,111,97,100,101,114,32,45,62,32,109,111,100,117,108,101, +- 46,95,95,108,111,97,100,101,114,95,95,10,32,32,32,32, +- 32,32,32,32,115,112,101,99,46,112,97,114,101,110,116,32, +- 45,62,32,109,111,100,117,108,101,46,95,95,112,97,99,107, +- 97,103,101,95,95,10,32,32,32,32,32,32,32,32,115,112, +- 101,99,32,45,62,32,109,111,100,117,108,101,46,95,95,115, +- 112,101,99,95,95,10,10,32,32,32,32,32,32,32,32,79, +- 112,116,105,111,110,97,108,58,10,32,32,32,32,32,32,32, +- 32,115,112,101,99,46,111,114,105,103,105,110,32,45,62,32, +- 109,111,100,117,108,101,46,95,95,102,105,108,101,95,95,32, +- 40,105,102,32,115,112,101,99,46,115,101,116,95,102,105,108, +- 101,97,116,116,114,32,105,115,32,116,114,117,101,41,10,32, +- 32,32,32,32,32,32,32,115,112,101,99,46,99,97,99,104, +- 101,100,32,45,62,32,109,111,100,117,108,101,46,95,95,99, +- 97,99,104,101,100,95,95,32,40,105,102,32,95,95,102,105, +- 108,101,95,95,32,97,108,115,111,32,115,101,116,41,10,32, +- 32,32,32,32,32,32,32,115,112,101,99,46,115,117,98,109, +- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, +- 97,116,105,111,110,115,32,45,62,32,109,111,100,117,108,101, +- 46,95,95,112,97,116,104,95,95,32,40,105,102,32,115,101, +- 116,41,10,10,32,32,32,32,32,32,32,32,114,57,0,0, +- 0,78,114,204,0,0,0,218,11,95,95,112,97,99,107,97, +- 103,101,95,95,114,246,0,0,0,114,210,0,0,0,114,244, +- 0,0,0,41,20,114,177,0,0,0,114,62,0,0,0,114, +- 67,0,0,0,114,57,0,0,0,114,209,0,0,0,114,169, +- 0,0,0,114,220,0,0,0,218,16,95,78,97,109,101,115, +- 112,97,99,101,76,111,97,100,101,114,218,7,95,95,110,101, +- 119,95,95,218,5,95,112,97,116,104,114,204,0,0,0,114, +- 233,0,0,0,114,250,0,0,0,114,208,0,0,0,114,246, +- 0,0,0,114,226,0,0,0,114,217,0,0,0,114,210,0, +- 0,0,114,225,0,0,0,114,244,0,0,0,41,6,114,71, +- 0,0,0,114,179,0,0,0,114,248,0,0,0,114,249,0, +- 0,0,114,177,0,0,0,114,169,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,17,105,110,105, +- 116,95,109,111,100,117,108,101,95,97,116,116,114,115,251,3, +- 0,0,115,88,0,0,0,0,17,9,6,12,1,24,1,3, +- 1,16,1,13,1,8,3,30,1,9,1,12,2,15,1,15, +- 1,18,1,3,1,13,1,13,1,8,3,30,1,3,1,16, +- 1,13,1,8,3,3,1,13,1,13,1,5,3,30,1,15, +- 1,3,1,16,1,13,1,11,2,9,2,30,1,3,1,16, +- 1,13,1,8,3,30,1,15,1,3,1,16,1,13,1,122, +- 30,95,83,112,101,99,77,101,116,104,111,100,115,46,105,110, +- 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, +- 67,0,0,0,115,101,0,0,0,124,0,0,106,0,0,125, +- 1,0,116,1,0,124,1,0,106,2,0,100,1,0,131,2, +- 0,114,48,0,124,1,0,106,2,0,106,3,0,124,1,0, +- 131,1,0,125,2,0,110,6,0,100,2,0,125,2,0,124, +- 2,0,100,2,0,107,8,0,114,84,0,116,4,0,124,1, +- 0,106,5,0,131,1,0,125,2,0,110,0,0,124,0,0, +- 106,6,0,124,2,0,131,1,0,1,124,2,0,83,41,3, +- 122,153,82,101,116,117,114,110,32,97,32,110,101,119,32,109, +- 111,100,117,108,101,32,116,111,32,98,101,32,108,111,97,100, +- 101,100,46,10,10,32,32,32,32,32,32,32,32,84,104,101, +- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, +- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, +- 115,32,97,114,101,32,97,108,115,111,32,115,101,116,32,119, +- 105,116,104,32,116,104,101,10,32,32,32,32,32,32,32,32, +- 97,112,112,114,111,112,114,105,97,116,101,32,118,97,108,117, +- 101,115,32,102,114,111,109,32,116,104,101,32,115,112,101,99, +- 46,10,10,32,32,32,32,32,32,32,32,218,13,99,114,101, +- 97,116,101,95,109,111,100,117,108,101,78,41,7,114,177,0, +- 0,0,114,60,0,0,0,114,169,0,0,0,114,255,0,0, +- 0,114,68,0,0,0,114,67,0,0,0,114,254,0,0,0, +- 41,3,114,71,0,0,0,114,177,0,0,0,114,179,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,6,99,114,101,97,116,101,75,4,0,0,115,16,0,0, +- 0,0,7,9,2,18,3,21,2,6,1,12,4,18,1,13, +- 1,122,19,95,83,112,101,99,77,101,116,104,111,100,115,46, +- 99,114,101,97,116,101,99,2,0,0,0,0,0,0,0,2, +- 0,0,0,2,0,0,0,67,0,0,0,115,23,0,0,0, +- 124,0,0,106,0,0,106,1,0,106,2,0,124,1,0,131, +- 1,0,1,100,1,0,83,41,2,122,189,68,111,32,101,118, +- 101,114,121,116,104,105,110,103,32,110,101,99,101,115,115,97, +- 114,121,32,116,111,32,101,120,101,99,117,116,101,32,116,104, +- 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, +- 32,32,32,84,104,101,32,110,97,109,101,115,112,97,99,101, +- 32,111,102,32,96,109,111,100,117,108,101,96,32,105,115,32, +- 117,115,101,100,32,97,115,32,116,104,101,32,116,97,114,103, +- 101,116,32,111,102,32,101,120,101,99,117,116,105,111,110,46, +- 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, +- 116,104,111,100,32,117,115,101,115,32,116,104,101,32,108,111, +- 97,100,101,114,39,115,32,96,101,120,101,99,95,109,111,100, +- 117,108,101,40,41,96,32,109,101,116,104,111,100,46,10,10, +- 32,32,32,32,32,32,32,32,78,41,3,114,177,0,0,0, +- 114,169,0,0,0,218,11,101,120,101,99,95,109,111,100,117, +- 108,101,41,2,114,71,0,0,0,114,179,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, +- 101,120,101,99,98,4,0,0,115,2,0,0,0,0,7,122, +- 18,95,83,112,101,99,77,101,116,104,111,100,115,46,95,101, +- 120,101,99,99,2,0,0,0,0,0,0,0,4,0,0,0, +- 11,0,0,0,67,0,0,0,115,17,1,0,0,124,0,0, +- 106,0,0,106,1,0,125,2,0,116,2,0,106,3,0,131, +- 0,0,1,116,4,0,124,2,0,131,1,0,143,226,0,1, +- 116,5,0,106,6,0,106,7,0,124,2,0,131,1,0,124, +- 1,0,107,9,0,114,95,0,100,1,0,106,8,0,124,2, +- 0,131,1,0,125,3,0,116,9,0,124,3,0,100,2,0, +- 124,2,0,131,1,1,130,1,0,110,0,0,124,0,0,106, +- 0,0,106,10,0,100,3,0,107,8,0,114,181,0,124,0, +- 0,106,0,0,106,11,0,100,3,0,107,8,0,114,158,0, +- 116,9,0,100,4,0,100,2,0,124,0,0,106,0,0,106, +- 1,0,131,1,1,130,1,0,110,0,0,124,0,0,106,12, +- 0,124,1,0,100,5,0,100,6,0,131,1,1,1,124,1, +- 0,83,124,0,0,106,12,0,124,1,0,100,5,0,100,6, +- 0,131,1,1,1,116,13,0,124,0,0,106,0,0,106,10, +- 0,100,7,0,131,2,0,115,243,0,124,0,0,106,0,0, +- 106,10,0,106,14,0,124,2,0,131,1,0,1,110,13,0, +- 124,0,0,106,15,0,124,1,0,131,1,0,1,87,100,3, +- 0,81,88,116,5,0,106,6,0,124,2,0,25,83,41,8, +- 122,51,69,120,101,99,117,116,101,32,116,104,101,32,115,112, +- 101,99,32,105,110,32,97,110,32,101,120,105,115,116,105,110, +- 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115, +- 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33, +- 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111, +- 100,117,108,101,115,114,67,0,0,0,78,122,14,109,105,115, +- 115,105,110,103,32,108,111,97,100,101,114,114,248,0,0,0, +- 84,114,1,1,0,0,41,16,114,177,0,0,0,114,67,0, +- 0,0,114,106,0,0,0,218,12,97,99,113,117,105,114,101, +- 95,108,111,99,107,114,103,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,114,93,0,0,0,114,47,0,0,0,114,153, +- 0,0,0,114,169,0,0,0,114,220,0,0,0,114,254,0, +- 0,0,114,60,0,0,0,218,11,108,111,97,100,95,109,111, +- 100,117,108,101,114,2,1,0,0,41,4,114,71,0,0,0, +- 114,179,0,0,0,114,67,0,0,0,114,171,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,175, +- 0,0,0,108,4,0,0,115,32,0,0,0,0,2,12,1, +- 10,1,13,1,24,1,15,1,21,1,18,1,18,1,27,2, +- 19,1,4,1,19,1,21,4,22,2,19,1,122,17,95,83, +- 112,101,99,77,101,116,104,111,100,115,46,101,120,101,99,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,27,0,0,0, +- 67,0,0,0,115,24,1,0,0,124,0,0,106,0,0,125, +- 1,0,124,1,0,106,1,0,106,2,0,124,1,0,106,3, +- 0,131,1,0,1,116,4,0,106,5,0,124,1,0,106,3, +- 0,25,125,2,0,116,6,0,124,2,0,100,1,0,100,0, +- 0,131,3,0,100,0,0,107,8,0,114,108,0,121,16,0, +- 124,1,0,106,1,0,124,2,0,95,7,0,87,113,108,0, +- 4,116,8,0,107,10,0,114,104,0,1,1,1,89,113,108, +- 0,88,110,0,0,116,6,0,124,2,0,100,2,0,100,0, +- 0,131,3,0,100,0,0,107,8,0,114,215,0,121,59,0, +- 124,2,0,106,9,0,124,2,0,95,10,0,116,11,0,124, +- 2,0,100,3,0,131,2,0,115,190,0,124,1,0,106,3, +- 0,106,12,0,100,4,0,131,1,0,100,5,0,25,124,2, +- 0,95,10,0,110,0,0,87,113,215,0,4,116,8,0,107, +- 10,0,114,211,0,1,1,1,89,113,215,0,88,110,0,0, +- 116,6,0,124,2,0,100,6,0,100,0,0,131,3,0,100, +- 0,0,107,8,0,114,20,1,121,13,0,124,1,0,124,2, +- 0,95,13,0,87,113,20,1,4,116,8,0,107,10,0,114, +- 16,1,1,1,1,89,113,20,1,88,110,0,0,124,2,0, +- 83,41,7,78,114,204,0,0,0,114,250,0,0,0,114,246, +- 0,0,0,114,116,0,0,0,114,84,0,0,0,114,208,0, +- 0,0,41,14,114,177,0,0,0,114,169,0,0,0,114,4, +- 1,0,0,114,67,0,0,0,114,7,0,0,0,114,73,0, +- 0,0,114,62,0,0,0,114,204,0,0,0,114,209,0,0, +- 0,114,57,0,0,0,114,250,0,0,0,114,60,0,0,0, +- 114,32,0,0,0,114,208,0,0,0,41,3,114,71,0,0, +- 0,114,177,0,0,0,114,179,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,218,25,95,108,111,97, +- 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, +- 116,105,98,108,101,132,4,0,0,115,42,0,0,0,0,4, +- 9,1,19,2,16,1,24,1,3,1,16,1,13,1,8,1, +- 24,1,3,4,12,1,15,1,32,1,13,1,8,1,24,1, +- 3,1,13,1,13,1,8,1,122,38,95,83,112,101,99,77, +- 101,116,104,111,100,115,46,95,108,111,97,100,95,98,97,99, +- 107,119,97,114,100,95,99,111,109,112,97,116,105,98,108,101, ++ 120,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, ++ 103,101,110,101,120,112,114,62,122,18,105,109,112,111,114,116, ++ 32,123,33,114,125,32,35,32,123,33,114,125,70,41,9,114, ++ 215,0,0,0,114,79,0,0,0,114,8,0,0,0,114,74, ++ 0,0,0,114,68,0,0,0,114,80,0,0,0,114,153,0, ++ 0,0,114,170,0,0,0,114,216,0,0,0,41,3,114,72, ++ 0,0,0,114,81,0,0,0,114,178,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,82,0,0, ++ 0,227,2,0,0,115,18,0,0,0,0,1,3,1,9,1, ++ 25,1,3,1,17,1,13,1,8,2,26,2,122,26,95,105, ++ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, ++ 95,95,101,120,105,116,95,95,78,41,6,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,73,0,0,0,114, ++ 76,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,213,0, ++ 0,0,214,2,0,0,115,6,0,0,0,12,2,12,4,12, ++ 7,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, ++ 0,0,0,8,0,0,0,64,0,0,0,115,172,0,0,0, ++ 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, ++ 3,0,100,2,0,100,3,0,100,4,0,100,3,0,100,5, ++ 0,100,3,0,100,6,0,100,7,0,132,0,3,90,4,0, ++ 100,8,0,100,9,0,132,0,0,90,5,0,100,10,0,100, ++ 11,0,132,0,0,90,6,0,101,7,0,100,12,0,100,13, ++ 0,132,0,0,131,1,0,90,8,0,101,8,0,106,9,0, ++ 100,14,0,100,13,0,132,0,0,131,1,0,90,8,0,101, ++ 7,0,100,15,0,100,16,0,132,0,0,131,1,0,90,10, ++ 0,101,7,0,100,17,0,100,18,0,132,0,0,131,1,0, ++ 90,11,0,101,11,0,106,9,0,100,19,0,100,18,0,132, ++ 0,0,131,1,0,90,11,0,100,3,0,83,41,20,218,10, ++ 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, ++ 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, ++ 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, ++ 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, ++ 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, ++ 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, ++ 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, ++ 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, ++ 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, ++ 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, ++ 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, ++ 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, ++ 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, ++ 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, ++ 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, ++ 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, ++ 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, ++ 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, ++ 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, ++ 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, ++ 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, ++ 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, ++ 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, ++ 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, ++ 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, ++ 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, ++ 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, ++ 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, ++ 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, ++ 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, ++ 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, ++ 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, ++ 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, ++ 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, ++ 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, ++ 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, ++ 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, ++ 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, ++ 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, ++ 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, ++ 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, ++ 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, ++ 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, ++ 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, ++ 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, ++ 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, ++ 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, ++ 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, ++ 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, ++ 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, ++ 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, ++ 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, ++ 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, ++ 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, ++ 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, ++ 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, ++ 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, ++ 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, ++ 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, ++ 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, ++ 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, ++ 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, ++ 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, ++ 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, ++ 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, ++ 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, ++ 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, ++ 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, ++ 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, ++ 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, ++ 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, ++ 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, ++ 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, ++ 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, ++ 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, ++ 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, ++ 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, ++ 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, ++ 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, ++ 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, ++ 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, ++ 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, ++ 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, ++ 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, ++ 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, ++ 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, ++ 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, ++ 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, ++ 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, ++ 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, ++ 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, ++ 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, ++ 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, ++ 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,218, ++ 6,111,114,105,103,105,110,78,218,12,108,111,97,100,101,114, ++ 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, ++ 103,101,99,3,0,0,0,3,0,0,0,6,0,0,0,2, ++ 0,0,0,67,0,0,0,115,79,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,124,3, ++ 0,124,0,0,95,2,0,124,4,0,124,0,0,95,3,0, ++ 124,5,0,114,48,0,103,0,0,110,3,0,100,0,0,124, ++ 0,0,95,4,0,100,1,0,124,0,0,95,5,0,100,0, ++ 0,124,0,0,95,6,0,100,0,0,83,41,2,78,70,41, ++ 7,114,68,0,0,0,114,170,0,0,0,114,218,0,0,0, ++ 114,219,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, -+ 115,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, -+ 0,0,67,0,0,0,115,89,1,0,0,124,1,0,100,1, -+ 0,107,8,0,114,73,0,100,2,0,125,1,0,116,0,0, -+ 124,2,0,100,3,0,131,2,0,114,73,0,121,19,0,124, -+ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,110, -+ 18,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, -+ 110,1,0,88,116,3,0,106,4,0,124,0,0,124,2,0, -+ 100,4,0,124,1,0,131,2,1,125,4,0,100,5,0,124, -+ 4,0,95,5,0,124,2,0,100,1,0,107,8,0,114,194, -+ 0,120,73,0,116,6,0,131,0,0,68,93,58,0,92,2, -+ 0,125,5,0,125,6,0,124,1,0,106,7,0,116,8,0, -+ 124,6,0,131,1,0,131,1,0,114,128,0,124,5,0,124, -+ 0,0,124,1,0,131,2,0,125,2,0,124,2,0,124,4, -+ 0,95,9,0,80,113,128,0,87,100,1,0,83,124,3,0, -+ 116,10,0,107,8,0,114,23,1,116,0,0,124,2,0,100, -+ 6,0,131,2,0,114,32,1,121,19,0,124,2,0,106,11, -+ 0,124,0,0,131,1,0,125,7,0,87,110,18,0,4,116, -+ 2,0,107,10,0,114,4,1,1,1,1,89,113,32,1,88, -+ 124,7,0,114,32,1,103,0,0,124,4,0,95,12,0,110, -+ 9,0,124,3,0,124,4,0,95,12,0,124,4,0,106,12, -+ 0,103,0,0,107,2,0,114,85,1,124,1,0,114,85,1, -+ 116,13,0,124,1,0,131,1,0,100,7,0,25,125,8,0, -+ 124,4,0,106,12,0,106,14,0,124,8,0,131,1,0,1, -+ 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, -+ 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, -+ 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, -+ 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, -+ 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, -+ 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, -+ 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, -+ 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -+ 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, -+ 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, -+ 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, -+ 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, -+ 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, -+ 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, -+ 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, -+ 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, -+ 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, -+ 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, -+ 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, -+ 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, -+ 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, -+ 111,119,110,62,218,12,103,101,116,95,102,105,108,101,110,97, -+ 109,101,218,6,111,114,105,103,105,110,84,218,10,105,115,95, -+ 112,97,99,107,97,103,101,114,60,0,0,0,41,15,114,116, -+ 0,0,0,114,158,0,0,0,114,108,0,0,0,114,122,0, -+ 0,0,218,10,77,111,100,117,108,101,83,112,101,99,90,13, -+ 95,115,101,116,95,102,105,108,101,97,116,116,114,218,27,95, -+ 103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,105, -+ 108,101,95,108,111,97,100,101,114,115,114,93,0,0,0,114, -+ 94,0,0,0,114,128,0,0,0,218,9,95,80,79,80,85, -+ 76,65,84,69,114,160,0,0,0,114,157,0,0,0,114,39, -+ 0,0,0,218,6,97,112,112,101,110,100,41,9,114,107,0, -+ 0,0,90,8,108,111,99,97,116,105,111,110,114,128,0,0, -+ 0,114,157,0,0,0,218,4,115,112,101,99,218,12,108,111, -+ 97,100,101,114,95,99,108,97,115,115,218,8,115,117,102,102, -+ 105,120,101,115,114,160,0,0,0,90,7,100,105,114,110,97, -+ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,108, -+ 101,95,108,111,99,97,116,105,111,110,254,1,0,0,115,60, -+ 0,0,0,0,12,12,4,6,1,15,2,3,1,19,1,13, -+ 1,5,8,24,1,9,3,12,1,22,1,21,1,15,1,9, -+ 1,5,2,4,3,12,2,15,1,3,1,19,1,13,1,5, -+ 2,6,1,12,2,9,1,15,1,6,1,16,1,16,2,114, -+ 168,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -+ 0,5,0,0,0,64,0,0,0,115,121,0,0,0,101,0, -+ 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, -+ 100,2,0,90,4,0,100,3,0,90,5,0,100,4,0,90, -+ 6,0,101,7,0,100,5,0,100,6,0,132,0,0,131,1, -+ 0,90,8,0,101,7,0,100,7,0,100,8,0,132,0,0, -+ 131,1,0,90,9,0,101,7,0,100,9,0,100,9,0,100, -+ 10,0,100,11,0,132,2,0,131,1,0,90,10,0,101,7, -+ 0,100,9,0,100,12,0,100,13,0,132,1,0,131,1,0, -+ 90,11,0,100,9,0,83,41,14,218,21,87,105,110,100,111, -+ 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, -+ 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, -+ 101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,100, -+ 101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,87, -+ 105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,46, -+ 122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,111, -+ 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, -+ 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, -+ 101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,83, -+ 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, -+ 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, -+ 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, -+ 123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,103, -+ 70,99,2,0,0,0,0,0,0,0,2,0,0,0,11,0, -+ 0,0,67,0,0,0,115,67,0,0,0,121,23,0,116,0, -+ 0,106,1,0,116,0,0,106,2,0,124,1,0,131,2,0, -+ 83,87,110,37,0,4,116,3,0,107,10,0,114,62,0,1, -+ 1,1,116,0,0,106,1,0,116,0,0,106,4,0,124,1, -+ 0,131,2,0,83,89,110,1,0,88,100,0,0,83,41,1, -+ 78,41,5,218,7,95,119,105,110,114,101,103,90,7,79,112, -+ 101,110,75,101,121,90,17,72,75,69,89,95,67,85,82,82, -+ 69,78,84,95,85,83,69,82,114,41,0,0,0,90,18,72, -+ 75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,78, -+ 69,41,2,218,3,99,108,115,218,3,107,101,121,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,14,95,111, -+ 112,101,110,95,114,101,103,105,115,116,114,121,76,2,0,0, -+ 115,8,0,0,0,0,2,3,1,23,1,13,1,122,36,87, -+ 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, -+ 110,100,101,114,46,95,111,112,101,110,95,114,101,103,105,115, -+ 116,114,121,99,2,0,0,0,0,0,0,0,6,0,0,0, -+ 16,0,0,0,67,0,0,0,115,143,0,0,0,124,0,0, -+ 106,0,0,114,21,0,124,0,0,106,1,0,125,2,0,110, -+ 9,0,124,0,0,106,2,0,125,2,0,124,2,0,106,3, -+ 0,100,1,0,124,1,0,100,2,0,116,4,0,106,5,0, -+ 100,0,0,100,3,0,133,2,0,25,131,0,2,125,3,0, -+ 121,47,0,124,0,0,106,6,0,124,3,0,131,1,0,143, -+ 25,0,125,4,0,116,7,0,106,8,0,124,4,0,100,4, -+ 0,131,2,0,125,5,0,87,100,0,0,81,82,88,87,110, -+ 22,0,4,116,9,0,107,10,0,114,138,0,1,1,1,100, ++ 115,218,13,95,115,101,116,95,102,105,108,101,97,116,116,114, ++ 218,7,95,99,97,99,104,101,100,41,6,114,72,0,0,0, ++ 114,68,0,0,0,114,170,0,0,0,114,218,0,0,0,114, ++ 219,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,22,3,0, ++ 0,115,14,0,0,0,0,2,9,1,9,1,9,1,9,1, ++ 21,3,9,1,122,19,77,111,100,117,108,101,83,112,101,99, ++ 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, ++ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,153, ++ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, ++ 1,0,100,2,0,106,0,0,124,0,0,106,2,0,131,1, ++ 0,103,2,0,125,1,0,124,0,0,106,3,0,100,0,0, ++ 107,9,0,114,79,0,124,1,0,106,4,0,100,3,0,106, ++ 0,0,124,0,0,106,3,0,131,1,0,131,1,0,1,110, ++ 0,0,124,0,0,106,5,0,100,0,0,107,9,0,114,122, ++ 0,124,1,0,106,4,0,100,4,0,106,0,0,124,0,0, ++ 106,5,0,131,1,0,131,1,0,1,110,0,0,100,5,0, ++ 106,0,0,124,0,0,106,6,0,106,7,0,100,6,0,106, ++ 8,0,124,1,0,131,1,0,131,2,0,83,41,7,78,122, ++ 9,110,97,109,101,61,123,33,114,125,122,11,108,111,97,100, ++ 101,114,61,123,33,114,125,122,11,111,114,105,103,105,110,61, ++ 123,33,114,125,122,29,115,117,98,109,111,100,117,108,101,95, ++ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, ++ 61,123,125,122,6,123,125,40,123,125,41,122,2,44,32,41, ++ 9,114,48,0,0,0,114,68,0,0,0,114,170,0,0,0, ++ 114,218,0,0,0,218,6,97,112,112,101,110,100,114,221,0, ++ 0,0,218,9,95,95,99,108,97,115,115,95,95,114,58,0, ++ 0,0,114,27,0,0,0,41,2,114,72,0,0,0,114,81, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,102,0,0,0,34,3,0,0,115,16,0,0,0, ++ 0,1,15,1,21,1,15,1,28,1,15,1,6,1,22,1, ++ 122,19,77,111,100,117,108,101,83,112,101,99,46,95,95,114, ++ 101,112,114,95,95,99,2,0,0,0,0,0,0,0,3,0, ++ 0,0,11,0,0,0,67,0,0,0,115,145,0,0,0,124, ++ 0,0,106,0,0,125,2,0,121,107,0,124,0,0,106,1, ++ 0,124,1,0,106,1,0,107,2,0,111,114,0,124,0,0, ++ 106,2,0,124,1,0,106,2,0,107,2,0,111,114,0,124, ++ 0,0,106,3,0,124,1,0,106,3,0,107,2,0,111,114, ++ 0,124,2,0,124,1,0,106,0,0,107,2,0,111,114,0, ++ 124,0,0,106,4,0,124,1,0,106,4,0,107,2,0,111, ++ 114,0,124,0,0,106,5,0,124,1,0,106,5,0,107,2, ++ 0,83,87,110,22,0,4,116,6,0,107,10,0,114,140,0, ++ 1,1,1,100,1,0,83,89,110,1,0,88,100,0,0,83, ++ 41,2,78,70,41,7,114,221,0,0,0,114,68,0,0,0, ++ 114,170,0,0,0,114,218,0,0,0,218,6,99,97,99,104, ++ 101,100,218,12,104,97,115,95,108,111,99,97,116,105,111,110, ++ 114,210,0,0,0,41,3,114,72,0,0,0,218,5,111,116, ++ 104,101,114,218,4,115,109,115,108,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,6,95,95,101,113,95,95, ++ 44,3,0,0,115,20,0,0,0,0,1,9,1,3,1,18, ++ 1,18,1,18,1,15,1,18,1,20,1,13,1,122,17,77, ++ 111,100,117,108,101,83,112,101,99,46,95,95,101,113,95,95, + 99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,0, +- 0,67,0,0,0,115,179,0,0,0,124,0,0,106,0,0, +- 106,1,0,100,0,0,107,9,0,114,52,0,116,2,0,124, +- 0,0,106,0,0,106,1,0,100,1,0,131,2,0,115,52, +- 0,124,0,0,106,3,0,131,0,0,83,110,0,0,124,0, +- 0,106,4,0,131,0,0,125,1,0,116,5,0,124,1,0, +- 131,1,0,143,84,0,1,124,0,0,106,0,0,106,1,0, +- 100,0,0,107,8,0,114,143,0,124,0,0,106,0,0,106, +- 6,0,100,0,0,107,8,0,114,156,0,116,7,0,100,2, +- 0,100,3,0,124,0,0,106,0,0,106,8,0,131,1,1, +- 130,1,0,113,156,0,110,13,0,124,0,0,106,9,0,124, +- 1,0,131,1,0,1,87,100,0,0,81,88,116,10,0,106, +- 11,0,124,0,0,106,0,0,106,8,0,25,83,41,4,78, +- 114,1,1,0,0,122,14,109,105,115,115,105,110,103,32,108, +- 111,97,100,101,114,114,67,0,0,0,41,12,114,177,0,0, +- 0,114,169,0,0,0,114,60,0,0,0,114,5,1,0,0, +- 114,0,1,0,0,114,212,0,0,0,114,220,0,0,0,114, +- 153,0,0,0,114,67,0,0,0,114,2,1,0,0,114,7, +- 0,0,0,114,73,0,0,0,41,2,114,71,0,0,0,114, +- 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,99, +- 107,101,100,162,4,0,0,115,20,0,0,0,0,2,18,2, +- 21,1,13,2,12,1,13,1,18,1,18,1,30,3,19,5, +- 122,27,95,83,112,101,99,77,101,116,104,111,100,115,46,95, +- 108,111,97,100,95,117,110,108,111,99,107,101,100,99,1,0, +- 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, +- 0,0,115,49,0,0,0,116,0,0,106,1,0,131,0,0, +- 1,116,2,0,124,0,0,106,3,0,106,4,0,131,1,0, +- 143,15,0,1,124,0,0,106,5,0,131,0,0,83,87,100, +- 1,0,81,88,100,1,0,83,41,2,122,207,82,101,116,117, +- 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, +- 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, +- 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, +- 100,101,114,46,10,10,32,32,32,32,32,32,32,32,84,104, +- 101,32,109,111,100,117,108,101,32,105,115,32,110,111,116,32, +- 97,100,100,101,100,32,116,111,32,105,116,115,32,112,97,114, +- 101,110,116,46,10,10,32,32,32,32,32,32,32,32,73,102, +- 32,97,32,109,111,100,117,108,101,32,105,115,32,97,108,114, +- 101,97,100,121,32,105,110,32,115,121,115,46,109,111,100,117, +- 108,101,115,44,32,116,104,97,116,32,101,120,105,115,116,105, +- 110,103,32,109,111,100,117,108,101,32,103,101,116,115,10,32, +- 32,32,32,32,32,32,32,99,108,111,98,98,101,114,101,100, +- 46,10,10,32,32,32,32,32,32,32,32,78,41,6,114,106, +- 0,0,0,114,3,1,0,0,114,103,0,0,0,114,177,0, +- 0,0,114,67,0,0,0,114,6,1,0,0,41,1,114,71, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,176,0,0,0,185,4,0,0,115,6,0,0,0, +- 0,9,10,1,19,1,122,17,95,83,112,101,99,77,101,116, +- 104,111,100,115,46,108,111,97,100,78,41,13,114,57,0,0, +- 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, +- 114,72,0,0,0,114,205,0,0,0,114,254,0,0,0,114, +- 0,1,0,0,114,2,1,0,0,114,175,0,0,0,114,5, +- 1,0,0,114,6,1,0,0,114,176,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,174,0,0,0,225,3,0,0,115,20,0,0,0,12, +- 3,6,4,12,3,12,16,24,80,12,23,12,10,12,24,12, +- 30,12,23,114,174,0,0,0,99,4,0,0,0,0,0,0, +- 0,6,0,0,0,11,0,0,0,67,0,0,0,115,201,0, +- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,4, +- 0,124,0,0,106,0,0,100,2,0,131,1,0,125,5,0, +- 124,4,0,115,102,0,124,5,0,114,54,0,124,5,0,106, +- 1,0,125,4,0,113,102,0,124,2,0,124,3,0,107,2, +- 0,114,84,0,116,2,0,124,1,0,124,2,0,131,2,0, +- 125,4,0,113,102,0,116,3,0,124,1,0,124,2,0,131, +- 2,0,125,4,0,110,0,0,124,5,0,115,132,0,116,4, +- 0,124,1,0,124,2,0,100,3,0,124,4,0,131,2,1, +- 125,5,0,110,0,0,121,44,0,124,5,0,124,0,0,100, +- 2,0,60,124,4,0,124,0,0,100,1,0,60,124,2,0, +- 124,0,0,100,4,0,60,124,3,0,124,0,0,100,5,0, +- 60,87,110,18,0,4,116,5,0,107,10,0,114,196,0,1, +- 1,1,89,110,1,0,88,100,0,0,83,41,6,78,114,204, +- 0,0,0,114,208,0,0,0,114,169,0,0,0,114,210,0, +- 0,0,114,244,0,0,0,41,6,114,93,0,0,0,114,169, +- 0,0,0,218,20,83,111,117,114,99,101,108,101,115,115,70, +- 105,108,101,76,111,97,100,101,114,218,16,83,111,117,114,99, +- 101,70,105,108,101,76,111,97,100,101,114,114,239,0,0,0, +- 114,207,0,0,0,41,6,90,2,110,115,114,67,0,0,0, +- 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, +- 104,110,97,109,101,114,169,0,0,0,114,177,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,14, +- 95,102,105,120,95,117,112,95,109,111,100,117,108,101,199,4, +- 0,0,115,34,0,0,0,0,2,15,1,15,1,6,1,6, +- 1,12,1,12,1,18,2,18,1,6,1,24,1,3,1,10, +- 1,10,1,10,1,14,1,13,2,114,9,1,0,0,99,0, +- 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64, +- 0,0,0,115,181,0,0,0,101,0,0,90,1,0,100,0, +- 0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0, +- 100,3,0,132,0,0,131,1,0,90,5,0,101,6,0,100, +- 4,0,100,4,0,100,5,0,100,6,0,132,2,0,131,1, +- 0,90,7,0,101,6,0,100,4,0,100,7,0,100,8,0, +- 132,1,0,131,1,0,90,8,0,101,6,0,101,9,0,100, +- 9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,10, +- 0,101,6,0,101,9,0,100,11,0,100,12,0,132,0,0, +- 131,1,0,131,1,0,90,11,0,101,6,0,101,9,0,100, +- 13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,12, +- 0,101,6,0,101,9,0,100,15,0,100,16,0,132,0,0, +- 131,1,0,131,1,0,90,13,0,100,4,0,83,41,17,218, +- 15,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 122,144,77,101,116,97,32,112,97,116,104,32,105,109,112,111, +- 114,116,32,102,111,114,32,98,117,105,108,116,45,105,110,32, +- 109,111,100,117,108,101,115,46,10,10,32,32,32,32,65,108, +- 108,32,109,101,116,104,111,100,115,32,97,114,101,32,101,105, +- 116,104,101,114,32,99,108,97,115,115,32,111,114,32,115,116, +- 97,116,105,99,32,109,101,116,104,111,100,115,32,116,111,32, +- 97,118,111,105,100,32,116,104,101,32,110,101,101,100,32,116, +- 111,10,32,32,32,32,105,110,115,116,97,110,116,105,97,116, +- 101,32,116,104,101,32,99,108,97,115,115,46,10,10,32,32, +- 32,32,99,1,0,0,0,0,0,0,0,1,0,0,0,2, +- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, +- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,122,115, +- 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, +- 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, +- 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, +- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, +- 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, +- 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, +- 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, +- 32,32,32,122,24,60,109,111,100,117,108,101,32,123,33,114, +- 125,32,40,98,117,105,108,116,45,105,110,41,62,41,2,114, +- 47,0,0,0,114,57,0,0,0,41,1,114,179,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 205,0,0,0,233,4,0,0,115,2,0,0,0,0,7,122, +- 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0, +- 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, +- 0,0,115,58,0,0,0,124,2,0,100,0,0,107,9,0, +- 114,16,0,100,0,0,83,116,0,0,106,1,0,124,1,0, +- 131,1,0,114,50,0,116,2,0,124,1,0,124,0,0,100, +- 1,0,100,2,0,131,2,1,83,100,0,0,83,100,0,0, +- 83,41,3,78,114,217,0,0,0,122,8,98,117,105,108,116, +- 45,105,110,41,3,114,106,0,0,0,90,10,105,115,95,98, +- 117,105,108,116,105,110,114,173,0,0,0,41,4,218,3,99, +- 108,115,114,158,0,0,0,114,35,0,0,0,218,6,116,97, +- 114,103,101,116,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,242,4, +- 0,0,115,10,0,0,0,0,2,12,1,4,1,15,1,19, +- 2,122,25,66,117,105,108,116,105,110,73,109,112,111,114,116, +- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, +- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, +- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, +- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,9, +- 0,114,37,0,124,3,0,106,1,0,83,100,1,0,83,41, +- 2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, +- 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, +- 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, +- 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, +- 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, +- 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, +- 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, +- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, +- 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, +- 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, +- 32,32,78,41,2,114,13,1,0,0,114,169,0,0,0,41, +- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108, +- 101,251,4,0,0,115,4,0,0,0,0,9,18,1,122,27, +- 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, +- 102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,3,0,0,0,10,0,0,0,67,0,0,0, +- 115,59,0,0,0,116,0,0,124,1,0,131,1,0,143,23, +- 0,1,116,1,0,116,2,0,106,3,0,124,1,0,131,2, +- 0,125,2,0,87,100,1,0,81,88,124,0,0,124,2,0, +- 95,4,0,100,2,0,124,2,0,95,5,0,124,2,0,83, +- 41,3,122,23,76,111,97,100,32,97,32,98,117,105,108,116, +- 45,105,110,32,109,111,100,117,108,101,46,78,114,30,0,0, +- 0,41,6,114,69,0,0,0,114,114,0,0,0,114,106,0, +- 0,0,90,12,105,110,105,116,95,98,117,105,108,116,105,110, +- 114,204,0,0,0,114,250,0,0,0,41,3,114,11,1,0, +- 0,114,158,0,0,0,114,179,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,7, +- 5,0,0,115,10,0,0,0,0,6,13,1,24,1,9,1, +- 9,1,122,27,66,117,105,108,116,105,110,73,109,112,111,114, +- 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, ++ 0,67,0,0,0,115,158,0,0,0,124,0,0,106,0,0, ++ 100,0,0,107,8,0,114,151,0,124,0,0,106,1,0,100, ++ 0,0,107,9,0,114,151,0,124,0,0,106,2,0,114,151, ++ 0,124,0,0,106,1,0,125,1,0,124,1,0,106,3,0, ++ 116,4,0,116,5,0,131,1,0,131,1,0,114,112,0,121, ++ 19,0,116,6,0,124,1,0,131,1,0,124,0,0,95,0, ++ 0,87,113,145,0,4,116,7,0,107,10,0,114,108,0,1, ++ 1,1,89,113,145,0,88,113,148,0,124,1,0,106,3,0, ++ 116,4,0,116,8,0,131,1,0,131,1,0,114,148,0,124, ++ 1,0,124,0,0,95,0,0,113,148,0,113,151,0,110,0, ++ 0,124,0,0,106,0,0,83,41,1,78,41,9,114,223,0, ++ 0,0,114,218,0,0,0,114,222,0,0,0,218,8,101,110, ++ 100,115,119,105,116,104,218,5,116,117,112,108,101,114,135,0, ++ 0,0,114,133,0,0,0,114,125,0,0,0,218,17,66,89, ++ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,41, ++ 2,114,72,0,0,0,114,132,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,226,0,0,0,56, ++ 3,0,0,115,22,0,0,0,0,2,15,1,24,1,9,1, ++ 21,1,3,1,19,1,13,1,8,1,21,1,18,1,122,17, ++ 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101, ++ 100,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,0, ++ 0,95,0,0,100,0,0,83,41,1,78,41,1,114,223,0, ++ 0,0,41,2,114,72,0,0,0,114,226,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,226,0, ++ 0,0,70,3,0,0,115,2,0,0,0,0,2,99,1,0, ++ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, ++ 0,0,115,46,0,0,0,124,0,0,106,0,0,100,1,0, ++ 107,8,0,114,35,0,124,0,0,106,1,0,106,2,0,100, ++ 2,0,131,1,0,100,3,0,25,83,124,0,0,106,1,0, ++ 83,100,1,0,83,41,4,122,32,84,104,101,32,110,97,109, ++ 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,39, ++ 115,32,112,97,114,101,110,116,46,78,114,117,0,0,0,114, ++ 85,0,0,0,41,3,114,221,0,0,0,114,68,0,0,0, ++ 114,33,0,0,0,41,1,114,72,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,6,112,97,114, ++ 101,110,116,74,3,0,0,115,6,0,0,0,0,3,15,1, ++ 20,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112, ++ 97,114,101,110,116,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, ++ 0,0,106,0,0,83,41,1,78,41,1,114,222,0,0,0, ++ 41,1,114,72,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,227,0,0,0,82,3,0,0,115, ++ 2,0,0,0,0,2,122,23,77,111,100,117,108,101,83,112, ++ 101,99,46,104,97,115,95,108,111,99,97,116,105,111,110,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,19,0,0,0,116,0,0,124,1,0,131, ++ 1,0,124,0,0,95,1,0,100,0,0,83,41,1,78,41, ++ 2,218,4,98,111,111,108,114,222,0,0,0,41,2,114,72, ++ 0,0,0,218,5,118,97,108,117,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,227,0,0,0,86,3, ++ 0,0,115,2,0,0,0,0,2,41,12,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, ++ 73,0,0,0,114,102,0,0,0,114,230,0,0,0,218,8, ++ 112,114,111,112,101,114,116,121,114,226,0,0,0,218,6,115, ++ 101,116,116,101,114,114,234,0,0,0,114,227,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,217,0,0,0,241,2,0,0,115,20,0,0, ++ 0,12,35,6,2,15,1,15,11,12,10,12,12,18,14,21, ++ 4,18,8,18,4,114,217,0,0,0,114,218,0,0,0,114, ++ 220,0,0,0,99,2,0,0,0,2,0,0,0,5,0,0, ++ 0,15,0,0,0,67,0,0,0,115,193,0,0,0,116,0, ++ 0,124,1,0,100,1,0,131,2,0,114,83,0,124,3,0, ++ 100,2,0,107,8,0,114,43,0,116,1,0,124,0,0,100, ++ 3,0,124,1,0,131,1,1,83,124,3,0,114,55,0,103, ++ 0,0,110,3,0,100,2,0,125,4,0,116,1,0,124,0, ++ 0,100,3,0,124,1,0,100,4,0,124,4,0,131,1,2, ++ 83,124,3,0,100,2,0,107,8,0,114,168,0,116,0,0, ++ 124,1,0,100,5,0,131,2,0,114,159,0,121,19,0,124, ++ 1,0,106,2,0,124,0,0,131,1,0,125,3,0,87,113, ++ 165,0,4,116,3,0,107,10,0,114,155,0,1,1,1,100, ++ 2,0,125,3,0,89,113,165,0,88,113,168,0,100,6,0, ++ 125,3,0,110,0,0,116,4,0,124,0,0,124,1,0,100, ++ 7,0,124,2,0,100,5,0,124,3,0,131,2,2,83,41, ++ 8,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, ++ 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, ++ 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, ++ 109,101,116,104,111,100,115,46,218,12,103,101,116,95,102,105, ++ 108,101,110,97,109,101,78,114,170,0,0,0,114,221,0,0, ++ 0,114,220,0,0,0,70,114,218,0,0,0,41,5,114,61, ++ 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, ++ 105,108,101,95,108,111,99,97,116,105,111,110,114,220,0,0, ++ 0,114,154,0,0,0,114,217,0,0,0,41,5,114,68,0, ++ 0,0,114,170,0,0,0,114,218,0,0,0,114,220,0,0, ++ 0,90,6,115,101,97,114,99,104,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,174,0,0,0,91,3,0, ++ 0,115,28,0,0,0,0,2,15,1,12,1,16,1,18,1, ++ 15,1,7,2,12,1,15,1,3,1,19,1,13,1,14,3, ++ 9,2,114,174,0,0,0,114,170,0,0,0,114,221,0,0, ++ 0,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, ++ 0,0,67,0,0,0,115,110,1,0,0,124,1,0,100,1, ++ 0,107,8,0,114,79,0,100,2,0,125,1,0,116,0,0, ++ 124,2,0,100,3,0,131,2,0,114,79,0,121,19,0,124, ++ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,113, ++ 76,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, ++ 113,76,0,88,113,79,0,110,0,0,116,3,0,124,0,0, ++ 124,2,0,100,4,0,124,1,0,131,2,1,125,4,0,100, ++ 5,0,124,4,0,95,4,0,124,2,0,100,1,0,107,8, ++ 0,114,203,0,120,79,0,116,5,0,131,0,0,68,93,61, ++ 0,92,2,0,125,5,0,125,6,0,124,1,0,106,6,0, ++ 116,7,0,124,6,0,131,1,0,131,1,0,114,131,0,124, ++ 5,0,124,0,0,124,1,0,131,2,0,125,2,0,124,2, ++ 0,124,4,0,95,8,0,80,113,131,0,113,131,0,87,100, ++ 1,0,83,110,0,0,124,3,0,116,9,0,107,8,0,114, ++ 38,1,116,0,0,124,2,0,100,6,0,131,2,0,114,47, ++ 1,121,19,0,124,2,0,106,10,0,124,0,0,131,1,0, ++ 125,7,0,87,110,18,0,4,116,2,0,107,10,0,114,13, ++ 1,1,1,1,89,113,35,1,88,124,7,0,114,35,1,103, ++ 0,0,124,4,0,95,11,0,113,35,1,113,47,1,110,9, ++ 0,124,3,0,124,4,0,95,11,0,124,4,0,106,11,0, ++ 103,0,0,107,2,0,114,106,1,124,1,0,114,106,1,116, ++ 12,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, ++ 4,0,106,11,0,106,13,0,124,8,0,131,1,0,1,113, ++ 106,1,110,0,0,124,4,0,83,41,8,97,61,1,0,0, ++ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, ++ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, ++ 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, ++ 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, ++ 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, ++ 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, ++ 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, ++ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, ++ 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, ++ 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, ++ 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, ++ 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, ++ 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, ++ 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, ++ 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, ++ 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, ++ 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, ++ 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, ++ 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, ++ 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, ++ 60,117,110,107,110,111,119,110,62,114,239,0,0,0,114,218, ++ 0,0,0,84,114,220,0,0,0,114,85,0,0,0,41,14, ++ 114,61,0,0,0,114,239,0,0,0,114,154,0,0,0,114, ++ 217,0,0,0,114,222,0,0,0,218,27,95,103,101,116,95, ++ 115,117,112,112,111,114,116,101,100,95,102,105,108,101,95,108, ++ 111,97,100,101,114,115,114,231,0,0,0,114,232,0,0,0, ++ 114,170,0,0,0,218,9,95,80,79,80,85,76,65,84,69, ++ 114,220,0,0,0,114,221,0,0,0,114,39,0,0,0,114, ++ 224,0,0,0,41,9,114,68,0,0,0,218,8,108,111,99, ++ 97,116,105,111,110,114,170,0,0,0,114,221,0,0,0,114, ++ 178,0,0,0,218,12,108,111,97,100,101,114,95,99,108,97, ++ 115,115,114,128,0,0,0,114,220,0,0,0,90,7,100,105, ++ 114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,240,0,0,0,116,3,0,0,115,60,0, ++ 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, ++ 11,8,21,1,9,3,12,1,22,1,21,1,15,1,9,1, ++ 8,2,7,3,12,2,15,1,3,1,19,1,13,1,5,2, ++ 6,1,18,2,9,1,15,1,6,1,16,1,22,2,114,240, ++ 0,0,0,99,3,0,0,0,0,0,0,0,8,0,0,0, ++ 53,0,0,0,67,0,0,0,115,124,1,0,0,121,13,0, ++ 124,0,0,106,0,0,125,3,0,87,110,18,0,4,116,1, ++ 0,107,10,0,114,33,0,1,1,1,89,110,17,0,88,124, ++ 3,0,100,0,0,107,9,0,114,50,0,124,3,0,83,124, ++ 0,0,106,2,0,125,4,0,124,1,0,100,0,0,107,8, ++ 0,114,108,0,121,13,0,124,0,0,106,3,0,125,1,0, ++ 87,113,108,0,4,116,1,0,107,10,0,114,104,0,1,1, ++ 1,89,113,108,0,88,110,0,0,121,13,0,124,0,0,106, ++ 4,0,125,5,0,87,110,24,0,4,116,1,0,107,10,0, ++ 114,147,0,1,1,1,100,0,0,125,5,0,89,110,1,0, ++ 88,124,2,0,100,0,0,107,8,0,114,224,0,124,5,0, ++ 100,0,0,107,8,0,114,215,0,121,13,0,124,1,0,106, ++ 5,0,125,2,0,87,113,221,0,4,116,1,0,107,10,0, ++ 114,211,0,1,1,1,100,0,0,125,2,0,89,113,221,0, ++ 88,113,224,0,124,5,0,125,2,0,110,0,0,121,13,0, ++ 124,0,0,106,6,0,125,6,0,87,110,24,0,4,116,1, ++ 0,107,10,0,114,7,1,1,1,1,100,0,0,125,6,0, ++ 89,110,1,0,88,121,19,0,116,7,0,124,0,0,106,8, ++ 0,131,1,0,125,7,0,87,110,24,0,4,116,1,0,107, ++ 10,0,114,53,1,1,1,1,100,0,0,125,7,0,89,110, ++ 1,0,88,116,9,0,124,4,0,124,1,0,100,1,0,124, ++ 2,0,131,2,1,125,3,0,124,5,0,100,0,0,107,8, ++ 0,114,93,1,100,2,0,110,3,0,100,3,0,124,3,0, ++ 95,10,0,124,6,0,124,3,0,95,11,0,124,7,0,124, ++ 3,0,95,12,0,124,3,0,83,41,4,78,114,218,0,0, ++ 0,70,84,41,13,114,209,0,0,0,114,210,0,0,0,114, ++ 58,0,0,0,114,205,0,0,0,114,211,0,0,0,90,7, ++ 95,79,82,73,71,73,78,218,10,95,95,99,97,99,104,101, ++ 100,95,95,218,4,108,105,115,116,218,8,95,95,112,97,116, ++ 104,95,95,114,217,0,0,0,114,222,0,0,0,114,226,0, ++ 0,0,114,221,0,0,0,41,8,114,180,0,0,0,114,170, ++ 0,0,0,114,218,0,0,0,114,178,0,0,0,114,68,0, ++ 0,0,114,243,0,0,0,114,226,0,0,0,114,221,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,17,95,115,112,101,99,95,102,114,111,109,95,109,111,100, ++ 117,108,101,180,3,0,0,115,72,0,0,0,0,2,3,1, ++ 13,1,13,1,5,2,12,1,4,2,9,1,12,1,3,1, ++ 13,1,13,2,8,1,3,1,13,1,13,1,11,1,12,1, ++ 12,1,3,1,13,1,13,1,14,2,9,1,3,1,13,1, ++ 13,1,11,1,3,1,19,1,13,1,11,2,21,1,27,1, ++ 9,1,9,1,114,248,0,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,6,0,0,0,64,0,0,0,115,142, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, ++ 0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0, ++ 100,7,0,100,8,0,100,9,0,100,10,0,100,11,0,132, ++ 0,2,90,6,0,100,12,0,100,13,0,132,0,0,90,7, ++ 0,100,14,0,100,15,0,132,0,0,90,8,0,100,16,0, ++ 100,17,0,132,0,0,90,9,0,100,18,0,100,19,0,132, ++ 0,0,90,10,0,100,20,0,100,21,0,132,0,0,90,11, ++ 0,100,22,0,100,23,0,132,0,0,90,12,0,100,24,0, ++ 83,41,25,114,175,0,0,0,122,77,67,111,110,118,101,110, ++ 105,101,110,99,101,32,119,114,97,112,112,101,114,32,97,114, ++ 111,117,110,100,32,115,112,101,99,32,111,98,106,101,99,116, ++ 115,32,116,111,32,112,114,111,118,105,100,101,32,115,112,101, ++ 99,45,115,112,101,99,105,102,105,99,10,32,32,32,32,109, ++ 101,116,104,111,100,115,46,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, ++ 0,124,1,0,124,0,0,95,0,0,100,0,0,83,41,1, ++ 78,41,1,114,178,0,0,0,41,2,114,72,0,0,0,114, ++ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,73,0,0,0,232,3,0,0,115,2,0,0, ++ 0,0,1,122,21,95,83,112,101,99,77,101,116,104,111,100, ++ 115,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, ++ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, ++ 158,0,0,0,124,0,0,106,0,0,125,1,0,124,1,0, ++ 106,1,0,100,1,0,107,8,0,114,30,0,100,2,0,110, ++ 6,0,124,1,0,106,1,0,125,2,0,124,1,0,106,2, ++ 0,100,1,0,107,8,0,114,104,0,124,1,0,106,3,0, ++ 100,1,0,107,8,0,114,82,0,100,3,0,106,4,0,124, ++ 2,0,131,1,0,83,100,4,0,106,4,0,124,2,0,124, ++ 1,0,106,3,0,131,2,0,83,110,50,0,124,1,0,106, ++ 5,0,114,132,0,100,5,0,106,4,0,124,2,0,124,1, ++ 0,106,2,0,131,2,0,83,100,6,0,106,4,0,124,1, ++ 0,106,1,0,124,1,0,106,2,0,131,2,0,83,100,1, ++ 0,83,41,7,122,38,82,101,116,117,114,110,32,116,104,101, ++ 32,114,101,112,114,32,116,111,32,117,115,101,32,102,111,114, ++ 32,116,104,101,32,109,111,100,117,108,101,46,78,114,207,0, ++ 0,0,122,13,60,109,111,100,117,108,101,32,123,33,114,125, ++ 62,122,20,60,109,111,100,117,108,101,32,123,33,114,125,32, ++ 40,123,33,114,125,41,62,122,23,60,109,111,100,117,108,101, ++ 32,123,33,114,125,32,102,114,111,109,32,123,33,114,125,62, ++ 122,18,60,109,111,100,117,108,101,32,123,33,114,125,32,40, ++ 123,125,41,62,41,6,114,178,0,0,0,114,68,0,0,0, ++ 114,218,0,0,0,114,170,0,0,0,114,48,0,0,0,114, ++ 227,0,0,0,41,3,114,72,0,0,0,114,178,0,0,0, ++ 114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,206,0,0,0,235,3,0,0,115,18,0, ++ 0,0,0,3,9,1,30,1,15,1,15,1,13,2,22,2, ++ 9,1,19,2,122,24,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,109,111,100,117,108,101,95,114,101,112,114,218,9, ++ 95,111,118,101,114,114,105,100,101,70,218,11,95,102,111,114, ++ 99,101,95,110,97,109,101,84,99,2,0,0,0,2,0,0, ++ 0,6,0,0,0,59,0,0,0,67,0,0,0,115,75,2, ++ 0,0,124,0,0,106,0,0,125,4,0,124,2,0,115,45, ++ 0,124,3,0,115,45,0,116,1,0,124,1,0,100,1,0, ++ 100,2,0,131,3,0,100,2,0,107,8,0,114,85,0,121, ++ 16,0,124,4,0,106,2,0,124,1,0,95,3,0,87,113, ++ 85,0,4,116,4,0,107,10,0,114,81,0,1,1,1,89, ++ 113,85,0,88,110,0,0,124,2,0,115,115,0,116,1,0, ++ 124,1,0,100,3,0,100,2,0,131,3,0,100,2,0,107, ++ 8,0,114,221,0,124,4,0,106,5,0,125,5,0,124,5, ++ 0,100,2,0,107,8,0,114,184,0,124,4,0,106,6,0, ++ 100,2,0,107,9,0,114,184,0,116,7,0,106,8,0,116, ++ 7,0,131,1,0,125,5,0,124,4,0,106,6,0,124,5, ++ 0,95,9,0,113,184,0,110,0,0,121,13,0,124,5,0, ++ 124,1,0,95,10,0,87,113,221,0,4,116,4,0,107,10, ++ 0,114,217,0,1,1,1,89,113,221,0,88,110,0,0,124, ++ 2,0,115,251,0,116,1,0,124,1,0,100,4,0,100,2, ++ 0,131,3,0,100,2,0,107,8,0,114,35,1,121,16,0, ++ 124,4,0,106,11,0,124,1,0,95,12,0,87,113,35,1, ++ 4,116,4,0,107,10,0,114,31,1,1,1,1,89,113,35, ++ 1,88,110,0,0,121,13,0,124,4,0,124,1,0,95,13, ++ 0,87,110,18,0,4,116,4,0,107,10,0,114,68,1,1, ++ 1,1,89,110,1,0,88,124,2,0,115,99,1,116,1,0, ++ 124,1,0,100,5,0,100,2,0,131,3,0,100,2,0,107, ++ 8,0,114,157,1,124,4,0,106,6,0,100,2,0,107,9, ++ 0,114,157,1,121,16,0,124,4,0,106,6,0,124,1,0, ++ 95,14,0,87,113,154,1,4,116,4,0,107,10,0,114,150, ++ 1,1,1,1,89,113,154,1,88,113,157,1,110,0,0,124, ++ 4,0,106,15,0,114,71,2,124,2,0,115,196,1,116,1, ++ 0,124,1,0,100,6,0,100,2,0,131,3,0,100,2,0, ++ 107,8,0,114,236,1,121,16,0,124,4,0,106,16,0,124, ++ 1,0,95,17,0,87,113,236,1,4,116,4,0,107,10,0, ++ 114,232,1,1,1,1,89,113,236,1,88,110,0,0,124,2, ++ 0,115,10,2,116,1,0,124,1,0,100,7,0,100,2,0, ++ 131,3,0,100,2,0,107,8,0,114,71,2,124,4,0,106, ++ 18,0,100,2,0,107,9,0,114,68,2,121,16,0,124,4, ++ 0,106,18,0,124,1,0,95,19,0,87,113,65,2,4,116, ++ 4,0,107,10,0,114,61,2,1,1,1,89,113,65,2,88, ++ 113,68,2,113,71,2,110,0,0,100,2,0,83,41,8,97, ++ 29,2,0,0,83,101,116,32,116,104,101,32,109,111,100,117, ++ 108,101,39,115,32,97,116,116,114,105,98,117,116,101,115,46, ++ 10,10,32,32,32,32,32,32,32,32,65,108,108,32,109,105, ++ 115,115,105,110,103,32,105,109,112,111,114,116,45,114,101,108, ++ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, ++ 105,98,117,116,101,115,32,119,105,108,108,32,98,101,32,115, ++ 101,116,46,32,32,72,101,114,101,10,32,32,32,32,32,32, ++ 32,32,105,115,32,104,111,119,32,116,104,101,32,115,112,101, ++ 99,32,97,116,116,114,105,98,117,116,101,115,32,109,97,112, ++ 32,111,110,116,111,32,116,104,101,32,109,111,100,117,108,101, ++ 58,10,10,32,32,32,32,32,32,32,32,115,112,101,99,46, ++ 110,97,109,101,32,45,62,32,109,111,100,117,108,101,46,95, ++ 95,110,97,109,101,95,95,10,32,32,32,32,32,32,32,32, ++ 115,112,101,99,46,108,111,97,100,101,114,32,45,62,32,109, ++ 111,100,117,108,101,46,95,95,108,111,97,100,101,114,95,95, ++ 10,32,32,32,32,32,32,32,32,115,112,101,99,46,112,97, ++ 114,101,110,116,32,45,62,32,109,111,100,117,108,101,46,95, ++ 95,112,97,99,107,97,103,101,95,95,10,32,32,32,32,32, ++ 32,32,32,115,112,101,99,32,45,62,32,109,111,100,117,108, ++ 101,46,95,95,115,112,101,99,95,95,10,10,32,32,32,32, ++ 32,32,32,32,79,112,116,105,111,110,97,108,58,10,32,32, ++ 32,32,32,32,32,32,115,112,101,99,46,111,114,105,103,105, ++ 110,32,45,62,32,109,111,100,117,108,101,46,95,95,102,105, ++ 108,101,95,95,32,40,105,102,32,115,112,101,99,46,115,101, ++ 116,95,102,105,108,101,97,116,116,114,32,105,115,32,116,114, ++ 117,101,41,10,32,32,32,32,32,32,32,32,115,112,101,99, ++ 46,99,97,99,104,101,100,32,45,62,32,109,111,100,117,108, ++ 101,46,95,95,99,97,99,104,101,100,95,95,32,40,105,102, ++ 32,95,95,102,105,108,101,95,95,32,97,108,115,111,32,115, ++ 101,116,41,10,32,32,32,32,32,32,32,32,115,112,101,99, ++ 46,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, ++ 104,95,108,111,99,97,116,105,111,110,115,32,45,62,32,109, ++ 111,100,117,108,101,46,95,95,112,97,116,104,95,95,32,40, ++ 105,102,32,115,101,116,41,10,10,32,32,32,32,32,32,32, ++ 32,114,58,0,0,0,78,114,205,0,0,0,218,11,95,95, ++ 112,97,99,107,97,103,101,95,95,114,247,0,0,0,114,211, ++ 0,0,0,114,245,0,0,0,41,20,114,178,0,0,0,114, ++ 63,0,0,0,114,68,0,0,0,114,58,0,0,0,114,210, ++ 0,0,0,114,170,0,0,0,114,221,0,0,0,218,16,95, ++ 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,218, ++ 7,95,95,110,101,119,95,95,218,5,95,112,97,116,104,114, ++ 205,0,0,0,114,234,0,0,0,114,251,0,0,0,114,209, ++ 0,0,0,114,247,0,0,0,114,227,0,0,0,114,218,0, ++ 0,0,114,211,0,0,0,114,226,0,0,0,114,245,0,0, ++ 0,41,6,114,72,0,0,0,114,180,0,0,0,114,249,0, ++ 0,0,114,250,0,0,0,114,178,0,0,0,114,170,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,17,105,110,105,116,95,109,111,100,117,108,101,95,97,116, ++ 116,114,115,251,3,0,0,115,88,0,0,0,0,17,9,6, ++ 12,1,24,1,3,1,16,1,13,1,8,3,30,1,9,1, ++ 12,2,15,1,15,1,18,1,3,1,13,1,13,1,8,3, ++ 30,1,3,1,16,1,13,1,8,3,3,1,13,1,13,1, ++ 5,3,30,1,15,1,3,1,16,1,13,1,11,2,9,2, ++ 30,1,3,1,16,1,13,1,8,3,30,1,15,1,3,1, ++ 16,1,13,1,122,30,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,105,110,105,116,95,109,111,100,117,108,101,95,97, ++ 116,116,114,115,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,3,0,0,0,67,0,0,0,115,101,0,0,0,124,0, ++ 0,106,0,0,125,1,0,116,1,0,124,1,0,106,2,0, ++ 100,1,0,131,2,0,114,48,0,124,1,0,106,2,0,106, ++ 3,0,124,1,0,131,1,0,125,2,0,110,6,0,100,2, ++ 0,125,2,0,124,2,0,100,2,0,107,8,0,114,84,0, ++ 116,4,0,124,1,0,106,5,0,131,1,0,125,2,0,110, ++ 0,0,124,0,0,106,6,0,124,2,0,131,1,0,1,124, ++ 2,0,83,41,3,122,153,82,101,116,117,114,110,32,97,32, ++ 110,101,119,32,109,111,100,117,108,101,32,116,111,32,98,101, ++ 32,108,111,97,100,101,100,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,101,32,105,109,112,111,114,116,45,114,101,108, ++ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, ++ 105,98,117,116,101,115,32,97,114,101,32,97,108,115,111,32, ++ 115,101,116,32,119,105,116,104,32,116,104,101,10,32,32,32, ++ 32,32,32,32,32,97,112,112,114,111,112,114,105,97,116,101, ++ 32,118,97,108,117,101,115,32,102,114,111,109,32,116,104,101, ++ 32,115,112,101,99,46,10,10,32,32,32,32,32,32,32,32, ++ 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,78, ++ 41,7,114,178,0,0,0,114,61,0,0,0,114,170,0,0, ++ 0,114,0,1,0,0,114,69,0,0,0,114,68,0,0,0, ++ 114,255,0,0,0,41,3,114,72,0,0,0,114,178,0,0, ++ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,6,99,114,101,97,116,101,75,4,0, ++ 0,115,16,0,0,0,0,7,9,2,18,3,21,2,6,1, ++ 12,4,18,1,13,1,122,19,95,83,112,101,99,77,101,116, ++ 104,111,100,115,46,99,114,101,97,116,101,99,2,0,0,0, ++ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, ++ 115,23,0,0,0,124,0,0,106,0,0,106,1,0,106,2, ++ 0,124,1,0,131,1,0,1,100,1,0,83,41,2,122,189, ++ 68,111,32,101,118,101,114,121,116,104,105,110,103,32,110,101, ++ 99,101,115,115,97,114,121,32,116,111,32,101,120,101,99,117, ++ 116,101,32,116,104,101,32,109,111,100,117,108,101,46,10,10, ++ 32,32,32,32,32,32,32,32,84,104,101,32,110,97,109,101, ++ 115,112,97,99,101,32,111,102,32,96,109,111,100,117,108,101, ++ 96,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101, ++ 32,116,97,114,103,101,116,32,111,102,32,101,120,101,99,117, ++ 116,105,111,110,46,10,32,32,32,32,32,32,32,32,84,104, ++ 105,115,32,109,101,116,104,111,100,32,117,115,101,115,32,116, ++ 104,101,32,108,111,97,100,101,114,39,115,32,96,101,120,101, ++ 99,95,109,111,100,117,108,101,40,41,96,32,109,101,116,104, ++ 111,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, ++ 114,178,0,0,0,114,170,0,0,0,218,11,101,120,101,99, ++ 95,109,111,100,117,108,101,41,2,114,72,0,0,0,114,180, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,5,95,101,120,101,99,98,4,0,0,115,2,0, ++ 0,0,0,7,122,18,95,83,112,101,99,77,101,116,104,111, ++ 100,115,46,95,101,120,101,99,99,2,0,0,0,0,0,0, ++ 0,4,0,0,0,11,0,0,0,67,0,0,0,115,17,1, ++ 0,0,124,0,0,106,0,0,106,1,0,125,2,0,116,2, ++ 0,106,3,0,131,0,0,1,116,4,0,124,2,0,131,1, ++ 0,143,226,0,1,116,5,0,106,6,0,106,7,0,124,2, ++ 0,131,1,0,124,1,0,107,9,0,114,95,0,100,1,0, ++ 106,8,0,124,2,0,131,1,0,125,3,0,116,9,0,124, ++ 3,0,100,2,0,124,2,0,131,1,1,130,1,0,110,0, ++ 0,124,0,0,106,0,0,106,10,0,100,3,0,107,8,0, ++ 114,181,0,124,0,0,106,0,0,106,11,0,100,3,0,107, ++ 8,0,114,158,0,116,9,0,100,4,0,100,2,0,124,0, ++ 0,106,0,0,106,1,0,131,1,1,130,1,0,110,0,0, ++ 124,0,0,106,12,0,124,1,0,100,5,0,100,6,0,131, ++ 1,1,1,124,1,0,83,124,0,0,106,12,0,124,1,0, ++ 100,5,0,100,6,0,131,1,1,1,116,13,0,124,0,0, ++ 106,0,0,106,10,0,100,7,0,131,2,0,115,243,0,124, ++ 0,0,106,0,0,106,10,0,106,14,0,124,2,0,131,1, ++ 0,1,110,13,0,124,0,0,106,15,0,124,1,0,131,1, ++ 0,1,87,100,3,0,81,88,116,5,0,106,6,0,124,2, ++ 0,25,83,41,8,122,51,69,120,101,99,117,116,101,32,116, ++ 104,101,32,115,112,101,99,32,105,110,32,97,110,32,101,120, ++ 105,115,116,105,110,103,32,109,111,100,117,108,101,39,115,32, ++ 110,97,109,101,115,112,97,99,101,46,122,30,109,111,100,117, ++ 108,101,32,123,33,114,125,32,110,111,116,32,105,110,32,115, ++ 121,115,46,109,111,100,117,108,101,115,114,68,0,0,0,78, ++ 122,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, ++ 114,249,0,0,0,84,114,2,1,0,0,41,16,114,178,0, ++ 0,0,114,68,0,0,0,114,107,0,0,0,218,12,97,99, ++ 113,117,105,114,101,95,108,111,99,107,114,104,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,114,94,0,0,0,114,48, ++ 0,0,0,114,154,0,0,0,114,170,0,0,0,114,221,0, ++ 0,0,114,255,0,0,0,114,61,0,0,0,218,11,108,111, ++ 97,100,95,109,111,100,117,108,101,114,3,1,0,0,41,4, ++ 114,72,0,0,0,114,180,0,0,0,114,68,0,0,0,114, ++ 172,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,176,0,0,0,108,4,0,0,115,32,0,0, ++ 0,0,2,12,1,10,1,13,1,24,1,15,1,21,1,18, ++ 1,18,1,27,2,19,1,4,1,19,1,21,4,22,2,19, ++ 1,122,17,95,83,112,101,99,77,101,116,104,111,100,115,46, ++ 101,120,101,99,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,27,0,0,0,67,0,0,0,115,24,1,0,0,124,0, ++ 0,106,0,0,125,1,0,124,1,0,106,1,0,106,2,0, ++ 124,1,0,106,3,0,131,1,0,1,116,4,0,106,5,0, ++ 124,1,0,106,3,0,25,125,2,0,116,6,0,124,2,0, ++ 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, ++ 108,0,121,16,0,124,1,0,106,1,0,124,2,0,95,7, ++ 0,87,113,108,0,4,116,8,0,107,10,0,114,104,0,1, ++ 1,1,89,113,108,0,88,110,0,0,116,6,0,124,2,0, ++ 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, ++ 215,0,121,59,0,124,2,0,106,9,0,124,2,0,95,10, ++ 0,116,11,0,124,2,0,100,3,0,131,2,0,115,190,0, ++ 124,1,0,106,3,0,106,12,0,100,4,0,131,1,0,100, ++ 5,0,25,124,2,0,95,10,0,110,0,0,87,113,215,0, ++ 4,116,8,0,107,10,0,114,211,0,1,1,1,89,113,215, ++ 0,88,110,0,0,116,6,0,124,2,0,100,6,0,100,0, ++ 0,131,3,0,100,0,0,107,8,0,114,20,1,121,13,0, ++ 124,1,0,124,2,0,95,13,0,87,113,20,1,4,116,8, ++ 0,107,10,0,114,16,1,1,1,1,89,113,20,1,88,110, ++ 0,0,124,2,0,83,41,7,78,114,205,0,0,0,114,251, ++ 0,0,0,114,247,0,0,0,114,117,0,0,0,114,85,0, ++ 0,0,114,209,0,0,0,41,14,114,178,0,0,0,114,170, ++ 0,0,0,114,5,1,0,0,114,68,0,0,0,114,8,0, ++ 0,0,114,74,0,0,0,114,63,0,0,0,114,205,0,0, ++ 0,114,210,0,0,0,114,58,0,0,0,114,251,0,0,0, ++ 114,61,0,0,0,114,33,0,0,0,114,209,0,0,0,41, ++ 3,114,72,0,0,0,114,178,0,0,0,114,180,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, ++ 25,95,108,111,97,100,95,98,97,99,107,119,97,114,100,95, ++ 99,111,109,112,97,116,105,98,108,101,132,4,0,0,115,42, ++ 0,0,0,0,4,9,1,19,2,16,1,24,1,3,1,16, ++ 1,13,1,8,1,24,1,3,4,12,1,15,1,32,1,13, ++ 1,8,1,24,1,3,1,13,1,13,1,8,1,122,38,95, ++ 83,112,101,99,77,101,116,104,111,100,115,46,95,108,111,97, ++ 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, ++ 116,105,98,108,101,99,1,0,0,0,0,0,0,0,2,0, ++ 0,0,11,0,0,0,67,0,0,0,115,179,0,0,0,124, ++ 0,0,106,0,0,106,1,0,100,0,0,107,9,0,114,52, ++ 0,116,2,0,124,0,0,106,0,0,106,1,0,100,1,0, ++ 131,2,0,115,52,0,124,0,0,106,3,0,131,0,0,83, ++ 110,0,0,124,0,0,106,4,0,131,0,0,125,1,0,116, ++ 5,0,124,1,0,131,1,0,143,84,0,1,124,0,0,106, ++ 0,0,106,1,0,100,0,0,107,8,0,114,143,0,124,0, ++ 0,106,0,0,106,6,0,100,0,0,107,8,0,114,156,0, ++ 116,7,0,100,2,0,100,3,0,124,0,0,106,0,0,106, ++ 8,0,131,1,1,130,1,0,113,156,0,110,13,0,124,0, ++ 0,106,9,0,124,1,0,131,1,0,1,87,100,0,0,81, ++ 88,116,10,0,106,11,0,124,0,0,106,0,0,106,8,0, ++ 25,83,41,4,78,114,2,1,0,0,122,14,109,105,115,115, ++ 105,110,103,32,108,111,97,100,101,114,114,68,0,0,0,41, ++ 12,114,178,0,0,0,114,170,0,0,0,114,61,0,0,0, ++ 114,6,1,0,0,114,1,1,0,0,114,213,0,0,0,114, ++ 221,0,0,0,114,154,0,0,0,114,68,0,0,0,114,3, ++ 1,0,0,114,8,0,0,0,114,74,0,0,0,41,2,114, ++ 72,0,0,0,114,180,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,14,95,108,111,97,100,95, ++ 117,110,108,111,99,107,101,100,162,4,0,0,115,20,0,0, ++ 0,0,2,18,2,21,1,13,2,12,1,13,1,18,1,18, ++ 1,30,3,19,5,122,27,95,83,112,101,99,77,101,116,104, ++ 111,100,115,46,95,108,111,97,100,95,117,110,108,111,99,107, ++ 101,100,99,1,0,0,0,0,0,0,0,1,0,0,0,8, ++ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, ++ 1,0,131,0,0,1,116,2,0,124,0,0,106,3,0,106, ++ 4,0,131,1,0,143,15,0,1,124,0,0,106,5,0,131, ++ 0,0,83,87,100,1,0,81,88,100,1,0,83,41,2,122, ++ 207,82,101,116,117,114,110,32,97,32,110,101,119,32,109,111, ++ 100,117,108,101,32,111,98,106,101,99,116,44,32,108,111,97, ++ 100,101,100,32,98,121,32,116,104,101,32,115,112,101,99,39, ++ 115,32,108,111,97,100,101,114,46,10,10,32,32,32,32,32, ++ 32,32,32,84,104,101,32,109,111,100,117,108,101,32,105,115, ++ 32,110,111,116,32,97,100,100,101,100,32,116,111,32,105,116, ++ 115,32,112,97,114,101,110,116,46,10,10,32,32,32,32,32, ++ 32,32,32,73,102,32,97,32,109,111,100,117,108,101,32,105, ++ 115,32,97,108,114,101,97,100,121,32,105,110,32,115,121,115, ++ 46,109,111,100,117,108,101,115,44,32,116,104,97,116,32,101, ++ 120,105,115,116,105,110,103,32,109,111,100,117,108,101,32,103, ++ 101,116,115,10,32,32,32,32,32,32,32,32,99,108,111,98, ++ 98,101,114,101,100,46,10,10,32,32,32,32,32,32,32,32, ++ 78,41,6,114,107,0,0,0,114,4,1,0,0,114,104,0, ++ 0,0,114,178,0,0,0,114,68,0,0,0,114,7,1,0, ++ 0,41,1,114,72,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,177,0,0,0,185,4,0,0, ++ 115,6,0,0,0,0,9,10,1,19,1,122,17,95,83,112, ++ 101,99,77,101,116,104,111,100,115,46,108,111,97,100,78,41, ++ 13,114,58,0,0,0,114,57,0,0,0,114,59,0,0,0, ++ 114,60,0,0,0,114,73,0,0,0,114,206,0,0,0,114, ++ 255,0,0,0,114,1,1,0,0,114,3,1,0,0,114,176, ++ 0,0,0,114,6,1,0,0,114,7,1,0,0,114,177,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,175,0,0,0,225,3,0,0,115, ++ 20,0,0,0,12,3,6,4,12,3,12,16,24,80,12,23, ++ 12,10,12,24,12,30,12,23,114,175,0,0,0,99,4,0, ++ 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, ++ 0,0,115,201,0,0,0,124,0,0,106,0,0,100,1,0, ++ 131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,131, ++ 1,0,125,5,0,124,4,0,115,102,0,124,5,0,114,54, ++ 0,124,5,0,106,1,0,125,4,0,113,102,0,124,2,0, ++ 124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,124, ++ 2,0,131,2,0,125,4,0,113,102,0,116,3,0,124,1, ++ 0,124,2,0,131,2,0,125,4,0,110,0,0,124,5,0, ++ 115,132,0,116,4,0,124,1,0,124,2,0,100,3,0,124, ++ 4,0,131,2,1,125,5,0,110,0,0,121,44,0,124,5, ++ 0,124,0,0,100,2,0,60,124,4,0,124,0,0,100,1, ++ 0,60,124,2,0,124,0,0,100,4,0,60,124,3,0,124, ++ 0,0,100,5,0,60,87,110,18,0,4,116,5,0,107,10, ++ 0,114,196,0,1,1,1,89,110,1,0,88,100,0,0,83, ++ 41,6,78,114,205,0,0,0,114,209,0,0,0,114,170,0, ++ 0,0,114,211,0,0,0,114,245,0,0,0,41,6,114,94, ++ 0,0,0,114,170,0,0,0,218,20,83,111,117,114,99,101, ++ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,218,16, ++ 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, ++ 114,240,0,0,0,114,208,0,0,0,41,6,90,2,110,115, ++ 114,68,0,0,0,90,8,112,97,116,104,110,97,109,101,90, ++ 9,99,112,97,116,104,110,97,109,101,114,170,0,0,0,114, ++ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,14,95,102,105,120,95,117,112,95,109,111,100, ++ 117,108,101,199,4,0,0,115,34,0,0,0,0,2,15,1, ++ 15,1,6,1,6,1,12,1,12,1,18,2,18,1,6,1, ++ 24,1,3,1,10,1,10,1,10,1,14,1,13,2,114,10, ++ 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 5,0,0,0,64,0,0,0,115,181,0,0,0,101,0,0, ++ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,101, ++ 4,0,100,2,0,100,3,0,132,0,0,131,1,0,90,5, ++ 0,101,6,0,100,4,0,100,4,0,100,5,0,100,6,0, ++ 132,2,0,131,1,0,90,7,0,101,6,0,100,4,0,100, ++ 7,0,100,8,0,132,1,0,131,1,0,90,8,0,101,6, ++ 0,101,9,0,100,9,0,100,10,0,132,0,0,131,1,0, ++ 131,1,0,90,10,0,101,6,0,101,9,0,100,11,0,100, ++ 12,0,132,0,0,131,1,0,131,1,0,90,11,0,101,6, ++ 0,101,9,0,100,13,0,100,14,0,132,0,0,131,1,0, ++ 131,1,0,90,12,0,101,6,0,101,9,0,100,15,0,100, ++ 16,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4, ++ 0,83,41,17,218,15,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,122,144,77,101,116,97,32,112,97,116,104, ++ 32,105,109,112,111,114,116,32,102,111,114,32,98,117,105,108, ++ 116,45,105,110,32,109,111,100,117,108,101,115,46,10,10,32, ++ 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, ++ 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, ++ 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, ++ 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, ++ 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, ++ 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, ++ 46,10,10,32,32,32,32,99,1,0,0,0,0,0,0,0, ++ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, ++ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, ++ 83,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114, ++ 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, ++ 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, ++ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, ++ 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, ++ 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, ++ 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, ++ 32,32,32,32,32,32,32,32,122,24,60,109,111,100,117,108, ++ 101,32,123,33,114,125,32,40,98,117,105,108,116,45,105,110, ++ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, ++ 114,180,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,206,0,0,0,233,4,0,0,115,2,0, ++ 0,0,0,7,122,27,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, ++ 114,78,99,4,0,0,0,0,0,0,0,4,0,0,0,5, ++ 0,0,0,67,0,0,0,115,58,0,0,0,124,2,0,100, ++ 0,0,107,9,0,114,16,0,100,0,0,83,116,0,0,106, ++ 1,0,124,1,0,131,1,0,114,50,0,116,2,0,124,1, ++ 0,124,0,0,100,1,0,100,2,0,131,2,1,83,100,0, ++ 0,83,100,0,0,83,41,3,78,114,218,0,0,0,122,8, ++ 98,117,105,108,116,45,105,110,41,3,114,107,0,0,0,90, ++ 10,105,115,95,98,117,105,108,116,105,110,114,174,0,0,0, ++ 41,4,218,3,99,108,115,114,159,0,0,0,114,36,0,0, ++ 0,218,6,116,97,114,103,101,116,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,9,102,105,110,100,95,115, ++ 112,101,99,242,4,0,0,115,10,0,0,0,0,2,12,1, ++ 4,1,15,1,19,2,122,25,66,117,105,108,116,105,110,73, ++ 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, ++ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, ++ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, ++ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, ++ 100,1,0,107,9,0,114,37,0,124,3,0,106,1,0,83, ++ 100,1,0,83,41,2,122,175,70,105,110,100,32,116,104,101, ++ 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, ++ 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, ++ 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, ++ 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, ++ 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, ++ 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, ++ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, ++ 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, ++ 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, ++ 32,32,32,32,32,32,32,78,41,2,114,14,1,0,0,114, ++ 170,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,178,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,11,102,105,110,100,95, ++ 109,111,100,117,108,101,251,4,0,0,115,4,0,0,0,0, ++ 9,18,1,122,27,66,117,105,108,116,105,110,73,109,112,111, ++ 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,3,0,0,0,10,0,0, ++ 0,67,0,0,0,115,59,0,0,0,116,0,0,124,1,0, ++ 131,1,0,143,23,0,1,116,1,0,116,2,0,106,3,0, ++ 124,1,0,131,2,0,125,2,0,87,100,1,0,81,88,124, ++ 0,0,124,2,0,95,4,0,100,2,0,124,2,0,95,5, ++ 0,124,2,0,83,41,3,122,23,76,111,97,100,32,97,32, ++ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, ++ 78,114,31,0,0,0,41,6,114,70,0,0,0,114,115,0, ++ 0,0,114,107,0,0,0,90,12,105,110,105,116,95,98,117, ++ 105,108,116,105,110,114,205,0,0,0,114,251,0,0,0,41, ++ 3,114,12,1,0,0,114,159,0,0,0,114,180,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 5,1,0,0,7,5,0,0,115,10,0,0,0,0,6,13, ++ 1,24,1,9,1,9,1,122,27,66,117,105,108,116,105,110, ++ 73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,111, ++ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, ++ 0,83,41,2,122,57,82,101,116,117,114,110,32,78,111,110, ++ 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111, ++ 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118, ++ 101,32,99,111,100,101,32,111,98,106,101,99,116,115,46,78, ++ 114,5,0,0,0,41,2,114,12,1,0,0,114,159,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 218,8,103,101,116,95,99,111,100,101,19,5,0,0,115,2, ++ 0,0,0,0,4,122,24,66,117,105,108,116,105,110,73,109, ++ 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, +- 57,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, ++ 56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, +- 32,100,111,32,110,111,116,32,104,97,118,101,32,99,111,100, +- 101,32,111,98,106,101,99,116,115,46,78,114,4,0,0,0, +- 41,2,114,11,1,0,0,114,158,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,218,8,103,101,116, +- 95,99,111,100,101,19,5,0,0,115,2,0,0,0,0,4, +- 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, +- 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, +- 4,0,0,0,100,1,0,83,41,2,122,56,82,101,116,117, +- 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, +- 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, +- 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, +- 111,100,101,46,78,114,4,0,0,0,41,2,114,11,1,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, +- 101,25,5,0,0,115,2,0,0,0,0,4,122,26,66,117, +- 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, +- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, ++ 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, ++ 114,99,101,32,99,111,100,101,46,78,114,5,0,0,0,41, ++ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, ++ 115,111,117,114,99,101,25,5,0,0,115,2,0,0,0,0, ++ 4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, ++ 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,4,0,0,0,100,1,0,83,41,2,122,52,82, ++ 101,116,117,114,110,32,70,97,108,115,101,32,97,115,32,98, ++ 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, ++ 97,114,101,32,110,101,118,101,114,32,112,97,99,107,97,103, ++ 101,115,46,70,114,5,0,0,0,41,2,114,12,1,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,220,0,0,0,31,5,0,0,115,2,0, ++ 0,0,0,4,122,26,66,117,105,108,116,105,110,73,109,112, ++ 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, ++ 41,14,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,218,12,115,116,97,116,105,99,109,101, ++ 116,104,111,100,114,206,0,0,0,218,11,99,108,97,115,115, ++ 109,101,116,104,111,100,114,14,1,0,0,114,15,1,0,0, ++ 114,162,0,0,0,114,5,1,0,0,114,16,1,0,0,114, ++ 17,1,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,11,1, ++ 0,0,224,4,0,0,115,28,0,0,0,12,7,6,2,18, ++ 9,3,1,21,8,3,1,18,11,3,1,21,11,3,1,21, ++ 5,3,1,21,5,3,1,114,11,1,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,0, ++ 0,115,193,0,0,0,101,0,0,90,1,0,100,0,0,90, ++ 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, ++ 0,132,0,0,131,1,0,90,5,0,101,6,0,100,4,0, ++ 100,4,0,100,5,0,100,6,0,132,2,0,131,1,0,90, ++ 7,0,101,6,0,100,4,0,100,7,0,100,8,0,132,1, ++ 0,131,1,0,90,8,0,101,4,0,100,9,0,100,10,0, ++ 132,0,0,131,1,0,90,9,0,101,6,0,100,11,0,100, ++ 12,0,132,0,0,131,1,0,90,10,0,101,6,0,101,11, ++ 0,100,13,0,100,14,0,132,0,0,131,1,0,131,1,0, ++ 90,12,0,101,6,0,101,11,0,100,15,0,100,16,0,132, ++ 0,0,131,1,0,131,1,0,90,13,0,101,6,0,101,11, ++ 0,100,17,0,100,18,0,132,0,0,131,1,0,131,1,0, ++ 90,14,0,100,4,0,83,41,19,218,14,70,114,111,122,101, ++ 110,73,109,112,111,114,116,101,114,122,142,77,101,116,97,32, ++ 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, ++ 102,114,111,122,101,110,32,109,111,100,117,108,101,115,46,10, ++ 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, ++ 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, ++ 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, ++ 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, ++ 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, ++ 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, ++ 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, ++ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, ++ 1,0,83,41,2,122,115,82,101,116,117,114,110,32,114,101, ++ 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, ++ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, ++ 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, ++ 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, ++ 10,10,32,32,32,32,32,32,32,32,122,22,60,109,111,100, ++ 117,108,101,32,123,33,114,125,32,40,102,114,111,122,101,110, ++ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, ++ 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,206,0,0,0,47,5,0,0,115,2,0,0,0, ++ 0,7,122,26,70,114,111,122,101,110,73,109,112,111,114,116, ++ 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, ++ 4,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, ++ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, ++ 1,0,131,1,0,114,34,0,116,2,0,124,1,0,124,0, ++ 0,100,1,0,100,2,0,131,2,1,83,100,0,0,83,100, ++ 0,0,83,41,3,78,114,218,0,0,0,90,6,102,114,111, ++ 122,101,110,41,3,114,107,0,0,0,114,163,0,0,0,114, ++ 174,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,13,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,14,1,0,0,56,5, ++ 0,0,115,6,0,0,0,0,2,15,1,19,2,122,24,70, ++ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, ++ 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, ++ 3,0,0,0,2,0,0,0,67,0,0,0,115,23,0,0, ++ 0,116,0,0,106,1,0,124,1,0,131,1,0,114,19,0, ++ 124,0,0,83,100,1,0,83,41,2,122,93,70,105,110,100, ++ 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, ++ 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, ++ 10,32,32,32,32,32,32,32,32,78,41,2,114,107,0,0, ++ 0,114,163,0,0,0,41,3,114,12,1,0,0,114,159,0, ++ 0,0,114,36,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,15,1,0,0,63,5,0,0,115, ++ 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, ++ 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, ++ 108,101,99,1,0,0,0,0,0,0,0,3,0,0,0,4, ++ 0,0,0,67,0,0,0,115,95,0,0,0,124,0,0,106, ++ 0,0,106,1,0,125,1,0,116,2,0,106,3,0,124,1, ++ 0,131,1,0,115,57,0,116,4,0,100,1,0,106,5,0, ++ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, ++ 1,0,110,0,0,116,6,0,116,2,0,106,7,0,124,1, ++ 0,131,2,0,125,2,0,116,8,0,124,2,0,124,0,0, ++ 106,9,0,131,2,0,1,100,0,0,83,41,3,78,122,27, ++ 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, ++ 111,122,101,110,32,109,111,100,117,108,101,114,68,0,0,0, ++ 41,10,114,209,0,0,0,114,68,0,0,0,114,107,0,0, ++ 0,114,163,0,0,0,114,154,0,0,0,114,48,0,0,0, ++ 114,115,0,0,0,218,17,103,101,116,95,102,114,111,122,101, ++ 110,95,111,98,106,101,99,116,114,176,0,0,0,114,64,0, ++ 0,0,41,3,114,180,0,0,0,114,68,0,0,0,114,195, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,2,1,0,0,72,5,0,0,115,12,0,0,0, ++ 0,2,12,1,15,1,18,1,12,1,18,1,122,26,70,114, ++ 111,122,101,110,73,109,112,111,114,116,101,114,46,101,120,101, ++ 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,3,0,0,0,67,0,0,0,115,13,0, ++ 0,0,116,0,0,124,0,0,124,1,0,131,2,0,83,41, ++ 1,122,95,76,111,97,100,32,97,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, ++ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, ++ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, ++ 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, ++ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, ++ 32,32,41,1,114,181,0,0,0,41,2,114,12,1,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,5,1,0,0,81,5,0,0,115,2,0, ++ 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, ++ 114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, ++ 0,67,0,0,0,115,13,0,0,0,116,0,0,106,1,0, ++ 124,1,0,131,1,0,83,41,1,122,45,82,101,116,117,114, ++ 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, ++ 116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,46,41,2,114,107,0,0,0,114, ++ 22,1,0,0,41,2,114,12,1,0,0,114,159,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 16,1,0,0,90,5,0,0,115,2,0,0,0,0,4,122, ++ 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, ++ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, +- 0,0,100,1,0,83,41,2,122,52,82,101,116,117,114,110, +- 32,70,97,108,115,101,32,97,115,32,98,117,105,108,116,45, +- 105,110,32,109,111,100,117,108,101,115,32,97,114,101,32,110, +- 101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,114, +- 4,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 219,0,0,0,31,5,0,0,115,2,0,0,0,0,4,122, +- 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, +- 46,105,115,95,112,97,99,107,97,103,101,41,14,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114, +- 205,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111, +- 100,114,13,1,0,0,114,14,1,0,0,114,161,0,0,0, +- 114,4,1,0,0,114,15,1,0,0,114,16,1,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,10,1,0,0,224,4,0, +- 0,115,28,0,0,0,12,7,6,2,18,9,3,1,21,8, +- 3,1,18,11,3,1,21,11,3,1,21,5,3,1,21,5, +- 3,1,114,10,1,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,5,0,0,0,64,0,0,0,115,193,0,0, ++ 0,0,100,1,0,83,41,2,122,54,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, ++ 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, ++ 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 78,114,5,0,0,0,41,2,114,12,1,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,17,1,0,0,96,5,0,0,115,2,0,0,0,0, ++ 4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,101, ++ 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, ++ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, ++ 0,115,13,0,0,0,116,0,0,106,1,0,124,1,0,131, ++ 1,0,83,41,1,122,46,82,101,116,117,114,110,32,84,114, ++ 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, ++ 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, ++ 107,97,103,101,46,41,2,114,107,0,0,0,90,17,105,115, ++ 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,41, ++ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,220,0,0,0,102, ++ 5,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, ++ 101,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, ++ 99,107,97,103,101,41,15,114,58,0,0,0,114,57,0,0, ++ 0,114,59,0,0,0,114,60,0,0,0,114,18,1,0,0, ++ 114,206,0,0,0,114,19,1,0,0,114,14,1,0,0,114, ++ 15,1,0,0,114,2,1,0,0,114,5,1,0,0,114,165, ++ 0,0,0,114,16,1,0,0,114,17,1,0,0,114,220,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,20,1,0,0,38,5,0,0,115, ++ 28,0,0,0,12,7,6,2,18,9,3,1,21,6,3,1, ++ 18,8,18,9,18,9,3,1,21,5,3,1,21,5,3,1, ++ 114,20,1,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,5,0,0,0,64,0,0,0,115,121,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,90,4,0,100,3,0,90,5,0,100,4,0, ++ 90,6,0,101,7,0,100,5,0,100,6,0,132,0,0,131, ++ 1,0,90,8,0,101,7,0,100,7,0,100,8,0,132,0, ++ 0,131,1,0,90,9,0,101,7,0,100,9,0,100,9,0, ++ 100,10,0,100,11,0,132,2,0,131,1,0,90,10,0,101, ++ 7,0,100,9,0,100,12,0,100,13,0,132,1,0,131,1, ++ 0,90,11,0,100,9,0,83,41,14,218,21,87,105,110,100, ++ 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, ++ 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, ++ 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, ++ 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, ++ 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, ++ 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, ++ 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, ++ 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, ++ 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, ++ 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, ++ 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, ++ 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, ++ 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, ++ 103,70,99,2,0,0,0,0,0,0,0,2,0,0,0,11, ++ 0,0,0,67,0,0,0,115,67,0,0,0,121,23,0,116, ++ 0,0,106,1,0,116,0,0,106,2,0,124,1,0,131,2, ++ 0,83,87,110,37,0,4,116,3,0,107,10,0,114,62,0, ++ 1,1,1,116,0,0,106,1,0,116,0,0,106,4,0,124, ++ 1,0,131,2,0,83,89,110,1,0,88,100,0,0,83,41, ++ 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, ++ 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, ++ 82,69,78,84,95,85,83,69,82,114,41,0,0,0,90,18, ++ 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, ++ 78,69,41,2,114,12,1,0,0,218,3,107,101,121,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,14,95, ++ 111,112,101,110,95,114,101,103,105,115,116,114,121,121,5,0, ++ 0,115,8,0,0,0,0,2,3,1,23,1,13,1,122,36, ++ 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, ++ 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, ++ 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, ++ 0,16,0,0,0,67,0,0,0,115,142,0,0,0,124,0, ++ 0,106,0,0,114,21,0,124,0,0,106,1,0,125,2,0, ++ 110,9,0,124,0,0,106,2,0,125,2,0,124,2,0,106, ++ 3,0,100,1,0,124,1,0,100,2,0,116,4,0,106,5, ++ 0,100,0,0,100,3,0,133,2,0,25,131,0,2,125,3, ++ 0,121,46,0,124,0,0,106,6,0,124,3,0,131,1,0, ++ 143,25,0,125,4,0,116,7,0,106,8,0,124,4,0,100, ++ 4,0,131,2,0,125,5,0,87,100,0,0,81,88,87,110, ++ 22,0,4,116,9,0,107,10,0,114,137,0,1,1,1,100, + 0,0,83,89,110,1,0,88,124,5,0,83,41,5,78,114, -+ 127,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, -+ 110,114,81,0,0,0,114,31,0,0,0,41,10,218,11,68, ++ 159,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, ++ 110,114,137,0,0,0,114,31,0,0,0,41,10,218,11,68, + 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, + 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, + 82,69,71,73,83,84,82,89,95,75,69,89,114,48,0,0, + 0,114,8,0,0,0,218,7,118,101,114,115,105,111,110,114, -+ 173,0,0,0,114,170,0,0,0,90,10,81,117,101,114,121, -+ 86,97,108,117,101,114,41,0,0,0,41,6,114,171,0,0, -+ 0,114,127,0,0,0,90,12,114,101,103,105,115,116,114,121, -+ 95,107,101,121,114,172,0,0,0,90,4,104,107,101,121,218, ++ 26,1,0,0,114,24,1,0,0,90,10,81,117,101,114,121, ++ 86,97,108,117,101,114,41,0,0,0,41,6,114,12,1,0, ++ 0,114,159,0,0,0,90,12,114,101,103,105,115,116,114,121, ++ 95,107,101,121,114,25,1,0,0,90,4,104,107,101,121,218, + 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,218,16,95,115,101,97,114,99, -+ 104,95,114,101,103,105,115,116,114,121,83,2,0,0,115,22, ++ 104,95,114,101,103,105,115,116,114,121,128,5,0,0,115,22, + 0,0,0,0,2,9,1,12,2,9,1,15,1,22,1,3, -+ 1,18,1,29,1,13,1,9,1,122,38,87,105,110,100,111, ++ 1,18,1,28,1,13,1,9,1,122,38,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, + 121,78,99,4,0,0,0,0,0,0,0,8,0,0,0,14, -+ 0,0,0,67,0,0,0,115,158,0,0,0,124,0,0,106, ++ 0,0,0,67,0,0,0,115,155,0,0,0,124,0,0,106, + 0,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, + 0,107,8,0,114,31,0,100,0,0,83,121,14,0,116,1, + 0,124,4,0,131,1,0,1,87,110,22,0,4,116,2,0, + 107,10,0,114,69,0,1,1,1,100,0,0,83,89,110,1, -+ 0,88,120,81,0,116,3,0,131,0,0,68,93,70,0,92, ++ 0,88,120,78,0,116,3,0,131,0,0,68,93,67,0,92, + 2,0,125,5,0,125,6,0,124,4,0,106,4,0,116,5, + 0,124,6,0,131,1,0,131,1,0,114,80,0,116,6,0, -+ 106,7,0,124,1,0,124,5,0,124,1,0,124,4,0,131, -+ 2,0,100,1,0,124,4,0,131,2,1,125,7,0,124,7, -+ 0,83,113,80,0,87,100,0,0,83,41,2,78,114,159,0, -+ 0,0,41,8,114,179,0,0,0,114,40,0,0,0,114,41, -+ 0,0,0,114,162,0,0,0,114,93,0,0,0,114,94,0, -+ 0,0,114,122,0,0,0,218,16,115,112,101,99,95,102,114, -+ 111,109,95,108,111,97,100,101,114,41,8,114,171,0,0,0, -+ 114,127,0,0,0,114,36,0,0,0,218,6,116,97,114,103, -+ 101,116,114,178,0,0,0,114,128,0,0,0,114,167,0,0, -+ 0,114,165,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,9,102,105,110,100,95,115,112,101,99, -+ 98,2,0,0,115,26,0,0,0,0,2,15,1,12,1,4, -+ 1,3,1,14,1,13,1,9,1,22,1,21,1,9,1,15, ++ 124,1,0,124,5,0,124,1,0,124,4,0,131,2,0,100, ++ 1,0,124,4,0,131,2,1,125,7,0,124,7,0,83,113, ++ 80,0,87,100,0,0,83,41,2,78,114,218,0,0,0,41, ++ 7,114,32,1,0,0,114,40,0,0,0,114,41,0,0,0, ++ 114,241,0,0,0,114,231,0,0,0,114,232,0,0,0,114, ++ 174,0,0,0,41,8,114,12,1,0,0,114,159,0,0,0, ++ 114,36,0,0,0,114,13,1,0,0,114,31,1,0,0,114, ++ 170,0,0,0,114,128,0,0,0,114,178,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,14,1, ++ 0,0,143,5,0,0,115,24,0,0,0,0,2,15,1,12, ++ 1,4,1,3,1,14,1,13,1,9,1,22,1,21,1,21, + 1,9,1,122,31,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,3,0,0,0,0,0,0,0,4,0,0, @@ -31234,1478 +35707,1919 @@ diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, -+ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,182, -+ 0,0,0,114,128,0,0,0,41,4,114,171,0,0,0,114, -+ 127,0,0,0,114,36,0,0,0,114,165,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,11,102, -+ 105,110,100,95,109,111,100,117,108,101,114,2,0,0,115,8, -+ 0,0,0,0,7,18,1,12,1,7,2,122,33,87,105,110, -+ 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, -+ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, -+ 114,113,0,0,0,114,112,0,0,0,114,114,0,0,0,114, -+ 115,0,0,0,114,176,0,0,0,114,175,0,0,0,114,174, -+ 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, -+ 114,173,0,0,0,114,179,0,0,0,114,182,0,0,0,114, -+ 183,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,169,0,0,0,64,2,0, ++ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,14, ++ 1,0,0,114,170,0,0,0,41,4,114,12,1,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,178,0,0,0,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,15,1, ++ 0,0,158,5,0,0,115,8,0,0,0,0,7,18,1,12, ++ 1,7,2,122,33,87,105,110,100,111,119,115,82,101,103,105, ++ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, ++ 109,111,100,117,108,101,41,12,114,58,0,0,0,114,57,0, ++ 0,0,114,59,0,0,0,114,60,0,0,0,114,29,1,0, ++ 0,114,28,1,0,0,114,27,1,0,0,114,19,1,0,0, ++ 114,26,1,0,0,114,32,1,0,0,114,14,1,0,0,114, ++ 15,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,23,1,0,0,109,5,0, + 0,115,20,0,0,0,12,2,6,3,6,3,6,2,6,2, -+ 18,7,18,15,3,1,21,15,3,1,114,169,0,0,0,99, ++ 18,7,18,15,3,1,21,14,3,1,114,23,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,70,0,0,0,101,0,0,90,1,0,100, ++ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, + 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, -+ 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, -+ 8,0,100,9,0,132,0,0,90,7,0,100,10,0,83,41, -+ 11,218,13,95,76,111,97,100,101,114,66,97,115,105,99,115, -+ 122,83,66,97,115,101,32,99,108,97,115,115,32,111,102,32, -+ 99,111,109,109,111,110,32,99,111,100,101,32,110,101,101,100, -+ 101,100,32,98,121,32,98,111,116,104,32,83,111,117,114,99, -+ 101,76,111,97,100,101,114,32,97,110,100,10,32,32,32,32, -+ 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, -+ 97,100,101,114,46,99,2,0,0,0,0,0,0,0,5,0, -+ 0,0,3,0,0,0,67,0,0,0,115,88,0,0,0,116, -+ 0,0,124,0,0,106,1,0,124,1,0,131,1,0,131,1, -+ 0,100,1,0,25,125,2,0,124,2,0,106,2,0,100,2, -+ 0,100,1,0,131,2,0,100,3,0,25,125,3,0,124,1, -+ 0,106,3,0,100,2,0,131,1,0,100,4,0,25,125,4, -+ 0,124,3,0,100,5,0,107,2,0,111,87,0,124,4,0, -+ 100,5,0,107,3,0,83,41,6,122,141,67,111,110,99,114, -+ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, -+ 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, -+ 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98, -+ 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32, -+ 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114, -+ 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102, -+ 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105, -+ 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105, -+ 116,95,95,46,112,121,39,46,114,30,0,0,0,114,59,0, -+ 0,0,114,60,0,0,0,114,57,0,0,0,218,8,95,95, -+ 105,110,105,116,95,95,41,4,114,39,0,0,0,114,158,0, -+ 0,0,114,35,0,0,0,114,33,0,0,0,41,5,114,109, -+ 0,0,0,114,127,0,0,0,114,95,0,0,0,90,13,102, -+ 105,108,101,110,97,109,101,95,98,97,115,101,90,9,116,97, -+ 105,108,95,110,97,109,101,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,160,0,0,0,133,2,0,0,115, -+ 8,0,0,0,0,3,25,1,22,1,19,1,122,24,95,76, -+ 111,97,100,101,114,66,97,115,105,99,115,46,105,115,95,112, -+ 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,2, -+ 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, -+ 100,1,0,83,41,2,122,42,85,115,101,32,100,101,102,97, -+ 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, -+ 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, -+ 110,46,78,114,5,0,0,0,41,2,114,109,0,0,0,114, -+ 165,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,13,99,114,101,97,116,101,95,109,111,100,117, -+ 108,101,141,2,0,0,115,0,0,0,0,122,27,95,76,111, -+ 97,100,101,114,66,97,115,105,99,115,46,99,114,101,97,116, -+ 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, -+ 0,3,0,0,0,4,0,0,0,67,0,0,0,115,80,0, -+ 0,0,124,0,0,106,0,0,124,1,0,106,1,0,131,1, -+ 0,125,2,0,124,2,0,100,1,0,107,8,0,114,54,0, -+ 116,2,0,100,2,0,106,3,0,124,1,0,106,1,0,131, -+ 1,0,131,1,0,130,1,0,116,4,0,106,5,0,116,6, -+ 0,124,2,0,124,1,0,106,7,0,131,3,0,1,100,1, -+ 0,83,41,3,122,19,69,120,101,99,117,116,101,32,116,104, -+ 101,32,109,111,100,117,108,101,46,78,122,52,99,97,110,110, -+ 111,116,32,108,111,97,100,32,109,111,100,117,108,101,32,123, -+ 33,114,125,32,119,104,101,110,32,103,101,116,95,99,111,100, -+ 101,40,41,32,114,101,116,117,114,110,115,32,78,111,110,101, -+ 41,8,218,8,103,101,116,95,99,111,100,101,114,113,0,0, -+ 0,114,108,0,0,0,114,48,0,0,0,114,122,0,0,0, -+ 218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,97, -+ 109,101,115,95,114,101,109,111,118,101,100,218,4,101,120,101, -+ 99,114,119,0,0,0,41,3,114,109,0,0,0,218,6,109, -+ 111,100,117,108,101,114,147,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,11,101,120,101,99,95, -+ 109,111,100,117,108,101,144,2,0,0,115,10,0,0,0,0, -+ 2,18,1,12,1,9,1,15,1,122,25,95,76,111,97,100, -+ 101,114,66,97,115,105,99,115,46,101,120,101,99,95,109,111, -+ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,116,0, -+ 0,106,1,0,124,0,0,124,1,0,131,2,0,83,41,1, -+ 78,41,2,114,122,0,0,0,218,17,95,108,111,97,100,95, -+ 109,111,100,117,108,101,95,115,104,105,109,41,2,114,109,0, -+ 0,0,114,127,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,218,11,108,111,97,100,95,109,111,100, -+ 117,108,101,152,2,0,0,115,2,0,0,0,0,1,122,25, -+ 95,76,111,97,100,101,114,66,97,115,105,99,115,46,108,111, -+ 97,100,95,109,111,100,117,108,101,78,41,8,114,113,0,0, -+ 0,114,112,0,0,0,114,114,0,0,0,114,115,0,0,0, -+ 114,160,0,0,0,114,187,0,0,0,114,192,0,0,0,114, -+ 194,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,185,0,0,0,128,2,0, -+ 0,115,10,0,0,0,12,3,6,2,12,8,12,3,12,8, -+ 114,185,0,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,4,0,0,0,64,0,0,0,115,106,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, -+ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, -+ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, -+ 7,0,100,8,0,132,0,0,90,6,0,100,9,0,100,10, -+ 0,132,0,0,90,7,0,100,11,0,100,18,0,100,13,0, -+ 100,14,0,132,0,1,90,8,0,100,15,0,100,16,0,132, -+ 0,0,90,9,0,100,17,0,83,41,19,218,12,83,111,117, -+ 114,99,101,76,111,97,100,101,114,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,10, -+ 0,0,0,116,0,0,130,1,0,100,1,0,83,41,2,122, -+ 178,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, -+ 32,116,104,97,116,32,114,101,116,117,114,110,115,32,116,104, -+ 101,32,109,111,100,105,102,105,99,97,116,105,111,110,32,116, -+ 105,109,101,32,40,97,110,32,105,110,116,41,32,102,111,114, -+ 32,116,104,101,10,32,32,32,32,32,32,32,32,115,112,101, -+ 99,105,102,105,101,100,32,112,97,116,104,44,32,119,104,101, -+ 114,101,32,112,97,116,104,32,105,115,32,97,32,115,116,114, -+ 46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101, - 115,32,73,79,69,114,114,111,114,32,119,104,101,110,32,116, - 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, - 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, -- 32,32,32,114,133,0,0,0,41,1,114,196,0,0,0,41, -- 2,114,108,0,0,0,114,35,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104, -- 95,115,116,97,116,115,166,2,0,0,115,2,0,0,0,0, -- 11,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, -- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, -- 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, -- 16,0,0,0,124,0,0,106,0,0,124,2,0,124,3,0, -- 131,2,0,83,41,1,122,228,79,112,116,105,111,110,97,108, -- 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, -- 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, -- 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, -- 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, -- 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, -- 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, -- 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, -- 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, -- 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, -- 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, -- 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, -- 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, -- 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, -- 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, -- 115,101,116,95,100,97,116,97,41,4,114,108,0,0,0,114, -- 90,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, -- 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, -- 101,99,111,100,101,179,2,0,0,115,2,0,0,0,0,8, -- 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, -- 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, -- 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, -- 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,150, -- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, -- 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, -- 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, -- 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, -- 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, -- 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, -- 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, -- 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, -- 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, -- 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,108, -- 0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,198,0,0, -- 0,189,2,0,0,115,0,0,0,0,122,21,83,111,117,114, -- 99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, -- 97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0, -- 0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0, -- 0,124,1,0,131,1,0,125,2,0,121,19,0,124,0,0, -- 106,1,0,124,2,0,131,1,0,125,3,0,87,110,58,0, -- 4,116,2,0,107,10,0,114,94,0,1,125,4,0,1,122, -- 26,0,116,3,0,100,1,0,100,2,0,124,1,0,131,1, -- 1,124,4,0,130,2,0,87,89,100,3,0,100,3,0,125, -- 4,0,126,4,0,88,110,1,0,88,116,4,0,124,3,0, -- 131,1,0,83,41,4,122,52,67,111,110,99,114,101,116,101, -- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, -- 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, -- 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, -- 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, -- 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, -- 97,116,97,40,41,114,106,0,0,0,78,41,5,114,157,0, -- 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, -- 0,114,107,0,0,0,114,155,0,0,0,41,5,114,108,0, -- 0,0,114,126,0,0,0,114,35,0,0,0,114,153,0,0, -- 0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, -- 101,196,2,0,0,115,14,0,0,0,0,2,15,1,3,1, -- 19,1,18,1,9,1,31,1,122,23,83,111,117,114,99,101, -- 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, -- 101,218,9,95,111,112,116,105,109,105,122,101,114,29,0,0, -- 0,99,3,0,0,0,1,0,0,0,4,0,0,0,9,0, -- 0,0,67,0,0,0,115,34,0,0,0,116,0,0,106,1, -- 0,116,2,0,124,1,0,124,2,0,100,1,0,100,2,0, -- 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, -- 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, -- 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, -- 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, -- 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, -- 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, -- 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, -- 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, -- 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, -- 32,32,32,114,189,0,0,0,218,12,100,111,110,116,95,105, -- 110,104,101,114,105,116,84,114,68,0,0,0,41,3,114,121, -- 0,0,0,114,188,0,0,0,218,7,99,111,109,112,105,108, -- 101,41,4,114,108,0,0,0,114,53,0,0,0,114,35,0, -- 0,0,114,203,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,116, -- 111,95,99,111,100,101,206,2,0,0,115,4,0,0,0,0, -- 5,21,1,122,27,83,111,117,114,99,101,76,111,97,100,101, -- 114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,101, -- 99,2,0,0,0,0,0,0,0,10,0,0,0,43,0,0, -- 0,67,0,0,0,115,174,1,0,0,124,0,0,106,0,0, -- 124,1,0,131,1,0,125,2,0,100,1,0,125,3,0,121, -- 16,0,116,1,0,124,2,0,131,1,0,125,4,0,87,110, -- 24,0,4,116,2,0,107,10,0,114,63,0,1,1,1,100, -- 1,0,125,4,0,89,110,202,0,88,121,19,0,124,0,0, -- 106,3,0,124,2,0,131,1,0,125,5,0,87,110,18,0, -- 4,116,4,0,107,10,0,114,103,0,1,1,1,89,110,162, -- 0,88,116,5,0,124,5,0,100,2,0,25,131,1,0,125, -- 3,0,121,19,0,124,0,0,106,6,0,124,4,0,131,1, -- 0,125,6,0,87,110,18,0,4,116,7,0,107,10,0,114, -- 159,0,1,1,1,89,110,106,0,88,121,34,0,116,8,0, -- 124,6,0,100,3,0,124,5,0,100,4,0,124,1,0,100, -- 5,0,124,4,0,131,1,3,125,7,0,87,110,24,0,4, -- 116,9,0,116,10,0,102,2,0,107,10,0,114,220,0,1, -- 1,1,89,110,45,0,88,116,11,0,100,6,0,124,4,0, -- 124,2,0,131,3,0,1,116,12,0,124,7,0,100,4,0, -- 124,1,0,100,7,0,124,4,0,100,8,0,124,2,0,131, -- 1,3,83,124,0,0,106,6,0,124,2,0,131,1,0,125, -- 8,0,124,0,0,106,13,0,124,8,0,124,2,0,131,2, -- 0,125,9,0,116,11,0,100,9,0,124,2,0,131,2,0, -- 1,116,14,0,106,15,0,12,114,170,1,124,4,0,100,1, -- 0,107,9,0,114,170,1,124,3,0,100,1,0,107,9,0, -- 114,170,1,116,16,0,124,9,0,124,3,0,116,17,0,124, -- 8,0,131,1,0,131,3,0,125,6,0,121,36,0,124,0, -- 0,106,18,0,124,2,0,124,4,0,124,6,0,131,3,0, -- 1,116,11,0,100,10,0,124,4,0,131,2,0,1,87,110, -- 18,0,4,116,2,0,107,10,0,114,169,1,1,1,1,89, -- 110,1,0,88,124,9,0,83,41,11,122,190,67,111,110,99, -- 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, -- 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, -- 97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10, -- 32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32, -- 111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117, -- 105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32, -- 116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, -- 100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32, -- 32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101, -- 116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111, -- 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, -- 10,10,32,32,32,32,32,32,32,32,78,114,133,0,0,0, -- 114,138,0,0,0,114,106,0,0,0,114,35,0,0,0,122, -- 13,123,125,32,109,97,116,99,104,101,115,32,123,125,114,89, -- 0,0,0,114,90,0,0,0,122,19,99,111,100,101,32,111, -- 98,106,101,99,116,32,102,114,111,109,32,123,125,122,10,119, -- 114,111,116,101,32,123,33,114,125,41,19,114,157,0,0,0, -- 114,79,0,0,0,114,66,0,0,0,114,197,0,0,0,114, -- 195,0,0,0,114,14,0,0,0,114,200,0,0,0,114,40, -- 0,0,0,114,141,0,0,0,114,107,0,0,0,114,136,0, -- 0,0,114,105,0,0,0,114,147,0,0,0,114,206,0,0, -- 0,114,7,0,0,0,218,19,100,111,110,116,95,119,114,105, -- 116,101,95,98,121,116,101,99,111,100,101,114,150,0,0,0, -- 114,31,0,0,0,114,199,0,0,0,41,10,114,108,0,0, -- 0,114,126,0,0,0,114,90,0,0,0,114,139,0,0,0, -- 114,89,0,0,0,218,2,115,116,114,53,0,0,0,218,10, -- 98,121,116,101,115,95,100,97,116,97,114,153,0,0,0,90, -- 11,99,111,100,101,95,111,98,106,101,99,116,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,187,0,0,0, -- 214,2,0,0,115,78,0,0,0,0,7,15,1,6,1,3, -- 1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,16, -- 1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,13, -- 1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,15, -- 1,18,1,13,1,22,1,12,1,9,1,15,1,3,1,19, -- 1,17,1,13,1,5,1,122,21,83,111,117,114,99,101,76, -- 111,97,100,101,114,46,103,101,116,95,99,111,100,101,78,114, -- 87,0,0,0,41,10,114,112,0,0,0,114,111,0,0,0, -- 114,113,0,0,0,114,196,0,0,0,114,197,0,0,0,114, -- 199,0,0,0,114,198,0,0,0,114,202,0,0,0,114,206, -- 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0, -- 0,156,2,0,0,115,14,0,0,0,12,2,12,8,12,13, -- 12,10,12,7,12,10,18,8,114,194,0,0,0,99,0,0, -- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, -- 0,0,115,112,0,0,0,101,0,0,90,1,0,100,0,0, -- 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, -- 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, -- 0,100,6,0,100,7,0,132,0,0,90,6,0,101,7,0, -- 135,0,0,102,1,0,100,8,0,100,9,0,134,0,0,131, -- 1,0,90,8,0,101,7,0,100,10,0,100,11,0,132,0, -- 0,131,1,0,90,9,0,100,12,0,100,13,0,132,0,0, -- 90,10,0,135,0,0,83,41,14,218,10,70,105,108,101,76, -- 111,97,100,101,114,122,103,66,97,115,101,32,102,105,108,101, -- 32,108,111,97,100,101,114,32,99,108,97,115,115,32,119,104, -- 105,99,104,32,105,109,112,108,101,109,101,110,116,115,32,116, -- 104,101,32,108,111,97,100,101,114,32,112,114,111,116,111,99, -- 111,108,32,109,101,116,104,111,100,115,32,116,104,97,116,10, -- 32,32,32,32,114,101,113,117,105,114,101,32,102,105,108,101, -- 32,115,121,115,116,101,109,32,117,115,97,103,101,46,99,3, -- 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, -- 0,0,0,115,22,0,0,0,124,1,0,124,0,0,95,0, -- 0,124,2,0,124,0,0,95,1,0,100,1,0,83,41,2, -- 122,75,67,97,99,104,101,32,116,104,101,32,109,111,100,117, -- 108,101,32,110,97,109,101,32,97,110,100,32,116,104,101,32, -- 112,97,116,104,32,116,111,32,116,104,101,32,102,105,108,101, -- 32,102,111,117,110,100,32,98,121,32,116,104,101,10,32,32, -- 32,32,32,32,32,32,102,105,110,100,101,114,46,78,41,2, -- 114,106,0,0,0,114,35,0,0,0,41,3,114,108,0,0, -- 0,114,126,0,0,0,114,35,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,185,0,0,0,15, -- 3,0,0,115,4,0,0,0,0,3,9,1,122,19,70,105, -- 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, -- 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -- 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, -- 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, -- 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, -- 41,2,218,9,95,95,99,108,97,115,115,95,95,114,118,0, -- 0,0,41,2,114,108,0,0,0,218,5,111,116,104,101,114, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 6,95,95,101,113,95,95,21,3,0,0,115,4,0,0,0, -- 0,1,18,1,122,17,70,105,108,101,76,111,97,100,101,114, -- 46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0, -- 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, -- 0,116,0,0,124,0,0,106,1,0,131,1,0,116,0,0, -- 124,0,0,106,2,0,131,1,0,65,83,41,1,78,41,3, -- 218,4,104,97,115,104,114,106,0,0,0,114,35,0,0,0, -- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,8,95,95,104,97,115,104,95,95, -- 25,3,0,0,115,2,0,0,0,0,1,122,19,70,105,108, -- 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, -- 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, -- 0,3,0,0,0,115,22,0,0,0,116,0,0,116,1,0, -- 124,0,0,131,2,0,106,2,0,124,1,0,131,1,0,83, -- 41,1,122,100,76,111,97,100,32,97,32,109,111,100,117,108, -- 101,32,102,114,111,109,32,97,32,102,105,108,101,46,10,10, -- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, -- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, -- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, -- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, -- 32,32,32,32,32,32,32,32,41,3,218,5,115,117,112,101, -- 114,114,210,0,0,0,114,193,0,0,0,41,2,114,108,0, -- 0,0,114,126,0,0,0,41,1,114,211,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,193,0,0,0,28,3,0, -- 0,115,2,0,0,0,0,10,122,22,70,105,108,101,76,111, -- 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, -- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, -- 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, -- 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, -- 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, -- 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, -- 1,114,35,0,0,0,41,2,114,108,0,0,0,114,126,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,157,0,0,0,40,3,0,0,115,2,0,0,0,0, -- 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, -- 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, -- 0,0,0,3,0,0,0,9,0,0,0,67,0,0,0,115, -- 42,0,0,0,116,0,0,106,1,0,124,1,0,100,1,0, -- 131,2,0,143,17,0,125,2,0,124,2,0,106,2,0,131, -- 0,0,83,87,100,2,0,81,82,88,100,2,0,83,41,3, -- 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, -- 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, -- 97,119,32,98,121,116,101,115,46,218,1,114,78,41,3,114, -- 49,0,0,0,114,50,0,0,0,90,4,114,101,97,100,41, -- 3,114,108,0,0,0,114,35,0,0,0,114,54,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 200,0,0,0,45,3,0,0,115,4,0,0,0,0,2,21, -- 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, -- 116,95,100,97,116,97,41,11,114,112,0,0,0,114,111,0, -- 0,0,114,113,0,0,0,114,114,0,0,0,114,185,0,0, -- 0,114,213,0,0,0,114,215,0,0,0,114,123,0,0,0, -- 114,193,0,0,0,114,157,0,0,0,114,200,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,41,1,114,211,0,0,0, -- 114,5,0,0,0,114,210,0,0,0,10,3,0,0,115,14, -- 0,0,0,12,3,6,2,12,6,12,4,12,3,24,12,18, -- 5,114,210,0,0,0,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,4,0,0,0,64,0,0,0,115,64,0,0,0, -- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, -- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, -- 100,8,0,100,9,0,132,0,1,90,6,0,100,10,0,83, -- 41,11,218,16,83,111,117,114,99,101,70,105,108,101,76,111, -- 97,100,101,114,122,62,67,111,110,99,114,101,116,101,32,105, -- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, -- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, -- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, -- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,4,0,0,0,67,0,0,0,115,34,0,0,0,116,0, -- 0,124,1,0,131,1,0,125,2,0,100,1,0,124,2,0, -- 106,1,0,100,2,0,124,2,0,106,2,0,105,2,0,83, -- 41,3,122,33,82,101,116,117,114,110,32,116,104,101,32,109, -- 101,116,97,100,97,116,97,32,102,111,114,32,116,104,101,32, -- 112,97,116,104,46,114,133,0,0,0,114,134,0,0,0,41, -- 3,114,39,0,0,0,218,8,115,116,95,109,116,105,109,101, -- 90,7,115,116,95,115,105,122,101,41,3,114,108,0,0,0, -- 114,35,0,0,0,114,208,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,197,0,0,0,55,3, -- 0,0,115,4,0,0,0,0,2,12,1,122,27,83,111,117, -- 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, -- 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, -- 0,5,0,0,0,5,0,0,0,67,0,0,0,115,34,0, -- 0,0,116,0,0,124,1,0,131,1,0,125,4,0,124,0, -- 0,106,1,0,124,2,0,124,3,0,100,1,0,124,4,0, -- 131,2,1,83,41,2,78,218,5,95,109,111,100,101,41,2, -- 114,97,0,0,0,114,198,0,0,0,41,5,114,108,0,0, -- 0,114,90,0,0,0,114,89,0,0,0,114,53,0,0,0, -- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,199,0,0,0,60,3,0,0,115,4,0, -- 0,0,0,2,12,1,122,32,83,111,117,114,99,101,70,105, -- 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, -- 98,121,116,101,99,111,100,101,114,220,0,0,0,105,182,1, -- 0,0,99,3,0,0,0,1,0,0,0,9,0,0,0,17, -- 0,0,0,67,0,0,0,115,53,1,0,0,116,0,0,124, -- 1,0,131,1,0,92,2,0,125,4,0,125,5,0,103,0, -- 0,125,6,0,120,54,0,124,4,0,114,80,0,116,1,0, -- 124,4,0,131,1,0,12,114,80,0,116,0,0,124,4,0, -- 131,1,0,92,2,0,125,4,0,125,7,0,124,6,0,106, -- 2,0,124,7,0,131,1,0,1,113,27,0,87,120,132,0, -- 116,3,0,124,6,0,131,1,0,68,93,118,0,125,7,0, -- 116,4,0,124,4,0,124,7,0,131,2,0,125,4,0,121, -- 17,0,116,5,0,106,6,0,124,4,0,131,1,0,1,87, -- 113,94,0,4,116,7,0,107,10,0,114,155,0,1,1,1, -- 119,94,0,89,113,94,0,4,116,8,0,107,10,0,114,211, -- 0,1,125,8,0,1,122,25,0,116,9,0,100,1,0,124, -- 4,0,124,8,0,131,3,0,1,100,2,0,83,87,89,100, -- 2,0,100,2,0,125,8,0,126,8,0,88,113,94,0,88, -- 113,94,0,87,121,33,0,116,10,0,124,1,0,124,2,0, -- 124,3,0,131,3,0,1,116,9,0,100,3,0,124,1,0, -- 131,2,0,1,87,110,53,0,4,116,8,0,107,10,0,114, -- 48,1,1,125,8,0,1,122,21,0,116,9,0,100,1,0, -- 124,1,0,124,8,0,131,3,0,1,87,89,100,2,0,100, -- 2,0,125,8,0,126,8,0,88,110,1,0,88,100,2,0, -- 83,41,4,122,27,87,114,105,116,101,32,98,121,116,101,115, -- 32,100,97,116,97,32,116,111,32,97,32,102,105,108,101,46, -- 122,27,99,111,117,108,100,32,110,111,116,32,99,114,101,97, -- 116,101,32,123,33,114,125,58,32,123,33,114,125,78,122,12, -- 99,114,101,97,116,101,100,32,123,33,114,125,41,11,114,38, -- 0,0,0,114,46,0,0,0,114,163,0,0,0,114,33,0, -- 0,0,114,28,0,0,0,114,3,0,0,0,90,5,109,107, -- 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, -- 114,114,111,114,114,40,0,0,0,114,105,0,0,0,114,55, -- 0,0,0,41,9,114,108,0,0,0,114,35,0,0,0,114, -- 53,0,0,0,114,220,0,0,0,218,6,112,97,114,101,110, -- 116,114,94,0,0,0,114,27,0,0,0,114,23,0,0,0, -- 114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,198,0,0,0,65,3,0,0,115,38,0, -- 0,0,0,2,18,1,6,2,22,1,18,1,17,2,19,1, -- 15,1,3,1,17,1,13,2,7,1,18,3,16,1,27,1, -- 3,1,16,1,17,1,18,2,122,25,83,111,117,114,99,101, -- 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, -- 97,116,97,78,41,7,114,112,0,0,0,114,111,0,0,0, -- 114,113,0,0,0,114,114,0,0,0,114,197,0,0,0,114, -- 199,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,218,0, -- 0,0,51,3,0,0,115,8,0,0,0,12,2,6,2,12, -- 5,12,5,114,218,0,0,0,99,0,0,0,0,0,0,0, -- 0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,0, -- 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, -- 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, -- 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,83, -- 41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105, -- 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, -- 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, -- 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, -- 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, -- 5,0,0,0,6,0,0,0,67,0,0,0,115,76,0,0, -- 0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,0, -- 124,0,0,106,1,0,124,2,0,131,1,0,125,3,0,116, -- 2,0,124,3,0,100,1,0,124,1,0,100,2,0,124,2, -- 0,131,1,2,125,4,0,116,3,0,124,4,0,100,1,0, -- 124,1,0,100,3,0,124,2,0,131,1,2,83,41,4,78, -- 114,106,0,0,0,114,35,0,0,0,114,89,0,0,0,41, -- 4,114,157,0,0,0,114,200,0,0,0,114,141,0,0,0, -- 114,147,0,0,0,41,5,114,108,0,0,0,114,126,0,0, -- 0,114,35,0,0,0,114,53,0,0,0,114,209,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 187,0,0,0,98,3,0,0,115,8,0,0,0,0,1,15, -- 1,15,1,24,1,122,29,83,111,117,114,99,101,108,101,115, -- 115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, -- 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -- 0,83,41,2,122,39,82,101,116,117,114,110,32,78,111,110, -- 101,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111, -- 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,4, -- 0,0,0,41,2,114,108,0,0,0,114,126,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,202, -- 0,0,0,104,3,0,0,115,2,0,0,0,0,2,122,31, -- 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, -- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,78, -- 41,6,114,112,0,0,0,114,111,0,0,0,114,113,0,0, -- 0,114,114,0,0,0,114,187,0,0,0,114,202,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,223,0,0,0,94,3,0,0,115,6,0, -- 0,0,12,2,6,2,12,6,114,223,0,0,0,99,0,0, -- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, -- 0,0,115,136,0,0,0,101,0,0,90,1,0,100,0,0, -+ 32,32,32,78,41,1,218,7,73,79,69,114,114,111,114,41, -+ 2,114,109,0,0,0,114,36,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,10,112,97,116,104, -+ 95,109,116,105,109,101,158,2,0,0,115,2,0,0,0,0, -+ 6,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, -+ 112,97,116,104,95,109,116,105,109,101,99,2,0,0,0,0, -+ 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, -+ 19,0,0,0,100,1,0,124,0,0,106,0,0,124,1,0, -+ 131,1,0,105,1,0,83,41,2,97,170,1,0,0,79,112, -+ 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, -+ 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, -+ 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, -+ 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, -+ 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, -+ 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, -+ 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, -+ 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, -+ 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, -+ 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, -+ 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, -+ 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, -+ 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, -+ 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, -+ 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, -+ 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, -+ 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, -+ 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, ++ 90,5,0,101,6,0,90,7,0,100,6,0,83,41,7,218, ++ 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, ++ 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, ++ 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, ++ 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, ++ 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, ++ 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, ++ 101,114,46,99,2,0,0,0,0,0,0,0,5,0,0,0, ++ 3,0,0,0,67,0,0,0,115,88,0,0,0,116,0,0, ++ 124,0,0,106,1,0,124,1,0,131,1,0,131,1,0,100, ++ 1,0,25,125,2,0,124,2,0,106,2,0,100,2,0,100, ++ 1,0,131,2,0,100,3,0,25,125,3,0,124,1,0,106, ++ 3,0,100,2,0,131,1,0,100,4,0,25,125,4,0,124, ++ 3,0,100,5,0,107,2,0,111,87,0,124,4,0,100,5, ++ 0,107,3,0,83,41,6,122,141,67,111,110,99,114,101,116, ++ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, ++ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, ++ 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, ++ 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, ++ 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, ++ 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, ++ 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, ++ 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, ++ 95,46,112,121,39,46,114,30,0,0,0,114,117,0,0,0, ++ 114,85,0,0,0,114,116,0,0,0,114,73,0,0,0,41, ++ 4,114,39,0,0,0,114,239,0,0,0,114,35,0,0,0, ++ 114,33,0,0,0,41,5,114,72,0,0,0,114,159,0,0, ++ 0,114,132,0,0,0,90,13,102,105,108,101,110,97,109,101, ++ 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 220,0,0,0,177,5,0,0,115,8,0,0,0,0,3,25, ++ 1,22,1,19,1,122,24,95,76,111,97,100,101,114,66,97, ++ 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, ++ 2,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, ++ 67,0,0,0,115,80,0,0,0,124,0,0,106,0,0,124, ++ 1,0,106,1,0,131,1,0,125,2,0,124,2,0,100,1, ++ 0,107,8,0,114,57,0,116,2,0,100,2,0,106,3,0, ++ 124,1,0,106,1,0,131,1,0,131,1,0,130,1,0,110, ++ 0,0,116,4,0,116,5,0,124,2,0,124,1,0,106,6, ++ 0,131,3,0,1,100,1,0,83,41,3,122,19,69,120,101, ++ 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, ++ 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, ++ 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, ++ 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, ++ 110,115,32,78,111,110,101,41,7,114,16,1,0,0,114,58, ++ 0,0,0,114,154,0,0,0,114,48,0,0,0,114,115,0, ++ 0,0,114,176,0,0,0,114,64,0,0,0,41,3,114,72, ++ 0,0,0,114,180,0,0,0,114,195,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,2,1,0, ++ 0,185,5,0,0,115,10,0,0,0,0,2,18,1,12,1, ++ 3,1,24,1,122,25,95,76,111,97,100,101,114,66,97,115, ++ 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,78, ++ 41,8,114,58,0,0,0,114,57,0,0,0,114,59,0,0, ++ 0,114,60,0,0,0,114,220,0,0,0,114,2,1,0,0, ++ 114,181,0,0,0,114,5,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,33, ++ 1,0,0,172,5,0,0,115,8,0,0,0,12,3,6,2, ++ 12,8,12,8,114,33,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4, ++ 0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0, ++ 90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100, ++ 9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18, ++ 0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0, ++ 100,16,0,132,0,0,90,9,0,100,17,0,83,41,19,218, ++ 12,83,111,117,114,99,101,76,111,97,100,101,114,99,2,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,115,10,0,0,0,116,0,0,130,1,0,100,1,0, ++ 83,41,2,122,178,79,112,116,105,111,110,97,108,32,109,101, ++ 116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110, ++ 115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105, ++ 111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41, ++ 32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32, ++ 32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,44, ++ 32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97, ++ 32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82, ++ 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, ++ 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, ++ 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, ++ 32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114, ++ 114,111,114,41,2,114,72,0,0,0,114,36,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, ++ 112,97,116,104,95,109,116,105,109,101,198,5,0,0,115,2, ++ 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, ++ 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, ++ 0,0,0,115,20,0,0,0,105,1,0,124,0,0,106,0, ++ 0,124,1,0,131,1,0,100,1,0,54,83,41,2,97,170, ++ 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, ++ 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, ++ 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, ++ 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,112, ++ 97,116,104,10,32,32,32,32,32,32,32,32,116,111,32,98, ++ 121,32,116,104,101,32,112,97,116,104,32,40,115,116,114,41, ++ 46,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, ++ 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, ++ 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, ++ 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, ++ 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, ++ 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, ++ 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, ++ 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, ++ 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, ++ 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, ++ 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, ++ 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, ++ 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, ++ 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, ++ 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, ++ 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, ++ 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, ++ 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, ++ 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, ++ 108,101,100,46,10,32,32,32,32,32,32,32,32,114,184,0, ++ 0,0,41,1,114,36,1,0,0,41,2,114,72,0,0,0, ++ 114,36,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, ++ 206,5,0,0,115,2,0,0,0,0,11,122,23,83,111,117, ++ 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, ++ 116,97,116,115,99,4,0,0,0,0,0,0,0,4,0,0, ++ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, ++ 0,106,0,0,124,2,0,124,3,0,131,2,0,83,41,1, ++ 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, ++ 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, ++ 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, ++ 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, ++ 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, ++ 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, ++ 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, ++ 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, ++ 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, ++ 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, ++ 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, ++ 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, ++ 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, ++ 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, ++ 32,32,32,32,32,32,41,1,218,8,115,101,116,95,100,97, ++ 116,97,41,4,114,72,0,0,0,114,142,0,0,0,90,10, ++ 99,97,99,104,101,95,112,97,116,104,114,54,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,15, ++ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,219, ++ 5,0,0,115,2,0,0,0,0,8,122,28,83,111,117,114, ++ 99,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, ++ 98,121,116,101,99,111,100,101,99,3,0,0,0,0,0,0, ++ 0,3,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,150,79,112,116,105,111,110, ++ 97,108,32,109,101,116,104,111,100,32,119,104,105,99,104,32, ++ 119,114,105,116,101,115,32,100,97,116,97,32,40,98,121,116, ++ 101,115,41,32,116,111,32,97,32,102,105,108,101,32,112,97, ++ 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, + 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, + 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, -+ 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, -+ 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, ++ 108,111,119,115,32,102,111,114,32,116,104,101,32,119,114,105, ++ 116,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, -+ 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, -+ 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, -+ 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, -+ 32,32,32,32,32,32,32,32,114,134,0,0,0,41,1,114, -+ 197,0,0,0,41,2,114,109,0,0,0,114,36,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 10,112,97,116,104,95,115,116,97,116,115,166,2,0,0,115, -+ 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, -+ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, -+ 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -+ 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, -+ 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, -+ 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, -+ 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, -+ 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, -+ 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, -+ 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, -+ 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, -+ 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, -+ 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, -+ 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, -+ 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, -+ 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, -+ 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, -+ 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, -+ 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, -+ 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, -+ 109,0,0,0,114,91,0,0,0,90,10,99,97,99,104,101, -+ 95,112,97,116,104,114,54,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,15,95,99,97,99,104, -+ 101,95,98,121,116,101,99,111,100,101,179,2,0,0,115,2, -+ 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, -+ 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, -+ 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, -+ 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -+ 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, -+ 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, -+ 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, -+ 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, -+ 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, -+ 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, -+ 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, -+ 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, -+ 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, -+ 115,46,10,32,32,32,32,32,32,32,32,78,114,5,0,0, -+ 0,41,3,114,109,0,0,0,114,36,0,0,0,114,54,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,199,0,0,0,189,2,0,0,115,0,0,0,0,122, -+ 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, -+ 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, -+ 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, -+ 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, -+ 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, -+ 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, -+ 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, -+ 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, -+ 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, -+ 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, -+ 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, -+ 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, -+ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, -+ 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, -+ 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, -+ 103,101,116,95,100,97,116,97,40,41,114,107,0,0,0,78, -+ 41,5,114,158,0,0,0,218,8,103,101,116,95,100,97,116, -+ 97,114,41,0,0,0,114,108,0,0,0,114,156,0,0,0, -+ 41,5,114,109,0,0,0,114,127,0,0,0,114,36,0,0, -+ 0,114,154,0,0,0,218,3,101,120,99,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, -+ 115,111,117,114,99,101,196,2,0,0,115,14,0,0,0,0, -+ 2,15,1,3,1,19,1,18,1,9,1,31,1,122,23,83, -+ 111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,95, -+ 115,111,117,114,99,101,218,9,95,111,112,116,105,109,105,122, -+ 101,114,30,0,0,0,99,3,0,0,0,1,0,0,0,4, -+ 0,0,0,9,0,0,0,67,0,0,0,115,34,0,0,0, -+ 116,0,0,106,1,0,116,2,0,124,1,0,124,2,0,100, -+ 1,0,100,2,0,100,3,0,100,4,0,124,3,0,131,4, -+ 2,83,41,5,122,130,82,101,116,117,114,110,32,116,104,101, -+ 32,99,111,100,101,32,111,98,106,101,99,116,32,99,111,109, -+ 112,105,108,101,100,32,102,114,111,109,32,115,111,117,114,99, -+ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, -+ 39,100,97,116,97,39,32,97,114,103,117,109,101,110,116,32, -+ 99,97,110,32,98,101,32,97,110,121,32,111,98,106,101,99, -+ 116,32,116,121,112,101,32,116,104,97,116,32,99,111,109,112, -+ 105,108,101,40,41,32,115,117,112,112,111,114,116,115,46,10, -+ 32,32,32,32,32,32,32,32,114,190,0,0,0,218,12,100, -+ 111,110,116,95,105,110,104,101,114,105,116,84,114,69,0,0, -+ 0,41,3,114,122,0,0,0,114,189,0,0,0,218,7,99, -+ 111,109,112,105,108,101,41,4,114,109,0,0,0,114,54,0, -+ 0,0,114,36,0,0,0,114,204,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,14,115,111,117, -+ 114,99,101,95,116,111,95,99,111,100,101,206,2,0,0,115, -+ 4,0,0,0,0,5,21,1,122,27,83,111,117,114,99,101, -+ 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, -+ 95,99,111,100,101,99,2,0,0,0,0,0,0,0,10,0, -+ 0,0,43,0,0,0,67,0,0,0,115,174,1,0,0,124, -+ 0,0,106,0,0,124,1,0,131,1,0,125,2,0,100,1, -+ 0,125,3,0,121,16,0,116,1,0,124,2,0,131,1,0, -+ 125,4,0,87,110,24,0,4,116,2,0,107,10,0,114,63, -+ 0,1,1,1,100,1,0,125,4,0,89,110,202,0,88,121, -+ 19,0,124,0,0,106,3,0,124,2,0,131,1,0,125,5, -+ 0,87,110,18,0,4,116,4,0,107,10,0,114,103,0,1, -+ 1,1,89,110,162,0,88,116,5,0,124,5,0,100,2,0, -+ 25,131,1,0,125,3,0,121,19,0,124,0,0,106,6,0, -+ 124,4,0,131,1,0,125,6,0,87,110,18,0,4,116,7, -+ 0,107,10,0,114,159,0,1,1,1,89,110,106,0,88,121, -+ 34,0,116,8,0,124,6,0,100,3,0,124,5,0,100,4, -+ 0,124,1,0,100,5,0,124,4,0,131,1,3,125,7,0, -+ 87,110,24,0,4,116,9,0,116,10,0,102,2,0,107,10, -+ 0,114,220,0,1,1,1,89,110,45,0,88,116,11,0,100, -+ 6,0,124,4,0,124,2,0,131,3,0,1,116,12,0,124, -+ 7,0,100,4,0,124,1,0,100,7,0,124,4,0,100,8, -+ 0,124,2,0,131,1,3,83,124,0,0,106,6,0,124,2, -+ 0,131,1,0,125,8,0,124,0,0,106,13,0,124,8,0, -+ 124,2,0,131,2,0,125,9,0,116,11,0,100,9,0,124, -+ 2,0,131,2,0,1,116,14,0,106,15,0,12,114,170,1, -+ 124,4,0,100,1,0,107,9,0,114,170,1,124,3,0,100, -+ 1,0,107,9,0,114,170,1,116,16,0,124,9,0,124,3, -+ 0,116,17,0,124,8,0,131,1,0,131,3,0,125,6,0, -+ 121,36,0,124,0,0,106,18,0,124,2,0,124,4,0,124, -+ 6,0,131,3,0,1,116,11,0,100,10,0,124,4,0,131, -+ 2,0,1,87,110,18,0,4,116,2,0,107,10,0,114,169, -+ 1,1,1,1,89,110,1,0,88,124,9,0,83,41,11,122, -+ 190,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, -+ 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, -+ 101,99,116,76,111,97,100,101,114,46,103,101,116,95,99,111, -+ 100,101,46,10,10,32,32,32,32,32,32,32,32,82,101,97, -+ 100,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, -+ 32,114,101,113,117,105,114,101,115,32,112,97,116,104,95,115, -+ 116,97,116,115,32,116,111,32,98,101,32,105,109,112,108,101, -+ 109,101,110,116,101,100,46,32,84,111,32,119,114,105,116,101, -+ 10,32,32,32,32,32,32,32,32,98,121,116,101,99,111,100, -+ 101,44,32,115,101,116,95,100,97,116,97,32,109,117,115,116, -+ 32,97,108,115,111,32,98,101,32,105,109,112,108,101,109,101, -+ 110,116,101,100,46,10,10,32,32,32,32,32,32,32,32,78, -+ 114,134,0,0,0,114,139,0,0,0,114,107,0,0,0,114, -+ 36,0,0,0,122,13,123,125,32,109,97,116,99,104,101,115, -+ 32,123,125,114,90,0,0,0,114,91,0,0,0,122,19,99, -+ 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, -+ 123,125,122,10,119,114,111,116,101,32,123,33,114,125,41,19, -+ 114,158,0,0,0,114,80,0,0,0,114,67,0,0,0,114, -+ 198,0,0,0,114,196,0,0,0,114,15,0,0,0,114,201, -+ 0,0,0,114,41,0,0,0,114,142,0,0,0,114,108,0, -+ 0,0,114,137,0,0,0,114,106,0,0,0,114,148,0,0, -+ 0,114,207,0,0,0,114,8,0,0,0,218,19,100,111,110, -+ 116,95,119,114,105,116,101,95,98,121,116,101,99,111,100,101, -+ 114,151,0,0,0,114,32,0,0,0,114,200,0,0,0,41, -+ 10,114,109,0,0,0,114,127,0,0,0,114,91,0,0,0, -+ 114,140,0,0,0,114,90,0,0,0,218,2,115,116,114,54, -+ 0,0,0,218,10,98,121,116,101,115,95,100,97,116,97,114, -+ 154,0,0,0,90,11,99,111,100,101,95,111,98,106,101,99, -+ 116,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,188,0,0,0,214,2,0,0,115,78,0,0,0,0,7, -+ 15,1,6,1,3,1,16,1,13,1,11,2,3,1,19,1, -+ 13,1,5,2,16,1,3,1,19,1,13,1,5,2,3,1, -+ 9,1,12,1,13,1,19,1,5,2,9,1,7,1,15,1, -+ 6,1,7,1,15,1,18,1,13,1,22,1,12,1,9,1, -+ 15,1,3,1,19,1,17,1,13,1,5,1,122,21,83,111, -+ 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,99, -+ 111,100,101,78,114,88,0,0,0,41,10,114,113,0,0,0, -+ 114,112,0,0,0,114,114,0,0,0,114,197,0,0,0,114, -+ 198,0,0,0,114,200,0,0,0,114,199,0,0,0,114,203, -+ 0,0,0,114,207,0,0,0,114,188,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,195,0,0,0,156,2,0,0,115,14,0,0,0,12, -+ 2,12,8,12,13,12,10,12,7,12,10,18,8,114,195,0, -+ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, -+ 0,0,0,0,0,0,0,115,112,0,0,0,101,0,0,90, -+ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, -+ 0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0, -+ 132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90, -+ 6,0,101,7,0,135,0,0,102,1,0,100,8,0,100,9, -+ 0,134,0,0,131,1,0,90,8,0,101,7,0,100,10,0, -+ 100,11,0,132,0,0,131,1,0,90,9,0,100,12,0,100, -+ 13,0,132,0,0,90,10,0,135,0,0,83,41,14,218,10, -+ 70,105,108,101,76,111,97,100,101,114,122,103,66,97,115,101, -+ 32,102,105,108,101,32,108,111,97,100,101,114,32,99,108,97, -+ 115,115,32,119,104,105,99,104,32,105,109,112,108,101,109,101, -+ 110,116,115,32,116,104,101,32,108,111,97,100,101,114,32,112, -+ 114,111,116,111,99,111,108,32,109,101,116,104,111,100,115,32, -+ 116,104,97,116,10,32,32,32,32,114,101,113,117,105,114,101, -+ 32,102,105,108,101,32,115,121,115,116,101,109,32,117,115,97, -+ 103,101,46,99,3,0,0,0,0,0,0,0,3,0,0,0, -+ 2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,0, -+ 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,100, -+ 1,0,83,41,2,122,75,67,97,99,104,101,32,116,104,101, -+ 32,109,111,100,117,108,101,32,110,97,109,101,32,97,110,100, -+ 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, -+ 32,102,105,108,101,32,102,111,117,110,100,32,98,121,32,116, -+ 104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,101, -+ 114,46,78,41,2,114,107,0,0,0,114,36,0,0,0,41, -+ 3,114,109,0,0,0,114,127,0,0,0,114,36,0,0,0, ++ 78,114,5,0,0,0,41,3,114,72,0,0,0,114,36,0, ++ 0,0,114,54,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,38,1,0,0,229,5,0,0,115, ++ 0,0,0,0,122,21,83,111,117,114,99,101,76,111,97,100, ++ 101,114,46,115,101,116,95,100,97,116,97,99,2,0,0,0, ++ 0,0,0,0,5,0,0,0,16,0,0,0,67,0,0,0, ++ 115,105,0,0,0,124,0,0,106,0,0,124,1,0,131,1, ++ 0,125,2,0,121,19,0,124,0,0,106,1,0,124,2,0, ++ 131,1,0,125,3,0,87,110,58,0,4,116,2,0,107,10, ++ 0,114,94,0,1,125,4,0,1,122,26,0,116,3,0,100, ++ 1,0,100,2,0,124,1,0,131,1,1,124,4,0,130,2, ++ 0,87,89,100,3,0,100,3,0,125,4,0,126,4,0,88, ++ 110,1,0,88,116,4,0,124,3,0,131,1,0,83,41,4, ++ 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, ++ 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, ++ 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, ++ 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, ++ 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, ++ 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, ++ 68,0,0,0,78,41,5,114,239,0,0,0,218,8,103,101, ++ 116,95,100,97,116,97,114,41,0,0,0,114,154,0,0,0, ++ 114,204,0,0,0,41,5,114,72,0,0,0,114,159,0,0, ++ 0,114,36,0,0,0,114,202,0,0,0,218,3,101,120,99, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 186,0,0,0,15,3,0,0,115,4,0,0,0,0,3,9, -+ 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, -+ 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,2, -+ 0,0,0,2,0,0,0,67,0,0,0,115,34,0,0,0, -+ 124,0,0,106,0,0,124,1,0,106,0,0,107,2,0,111, -+ 33,0,124,0,0,106,1,0,124,1,0,106,1,0,107,2, -+ 0,83,41,1,78,41,2,218,9,95,95,99,108,97,115,115, -+ 95,95,114,119,0,0,0,41,2,114,109,0,0,0,218,5, -+ 111,116,104,101,114,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,6,95,95,101,113,95,95,21,3,0,0, -+ 115,4,0,0,0,0,1,18,1,122,17,70,105,108,101,76, -+ 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, -+ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, -+ 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, -+ 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, -+ 41,1,78,41,3,218,4,104,97,115,104,114,107,0,0,0, -+ 114,36,0,0,0,41,1,114,109,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,8,95,95,104, -+ 97,115,104,95,95,25,3,0,0,115,2,0,0,0,0,1, -+ 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,104, -+ 97,115,104,95,95,99,2,0,0,0,0,0,0,0,2,0, -+ 0,0,3,0,0,0,3,0,0,0,115,22,0,0,0,116, -+ 0,0,116,1,0,124,0,0,131,2,0,106,2,0,124,1, -+ 0,131,1,0,83,41,1,122,100,76,111,97,100,32,97,32, -+ 109,111,100,117,108,101,32,102,114,111,109,32,97,32,102,105, -+ 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, -+ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, -+ 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, -+ 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, -+ 97,100,46,10,10,32,32,32,32,32,32,32,32,41,3,218, -+ 5,115,117,112,101,114,114,211,0,0,0,114,194,0,0,0, -+ 41,2,114,109,0,0,0,114,127,0,0,0,41,1,114,212, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,194,0, -+ 0,0,28,3,0,0,115,2,0,0,0,0,10,122,22,70, -+ 105,108,101,76,111,97,100,101,114,46,108,111,97,100,95,109, -+ 111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0, -+ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, -+ 0,0,106,0,0,83,41,1,122,58,82,101,116,117,114,110, -+ 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, -+ 32,115,111,117,114,99,101,32,102,105,108,101,32,97,115,32, -+ 102,111,117,110,100,32,98,121,32,116,104,101,32,102,105,110, -+ 100,101,114,46,41,1,114,36,0,0,0,41,2,114,109,0, -+ 0,0,114,127,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,158,0,0,0,40,3,0,0,115, -+ 2,0,0,0,0,3,122,23,70,105,108,101,76,111,97,100, -+ 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,99, -+ 2,0,0,0,0,0,0,0,3,0,0,0,9,0,0,0, -+ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, -+ 1,0,100,1,0,131,2,0,143,17,0,125,2,0,124,2, -+ 0,106,2,0,131,0,0,83,87,100,2,0,81,82,88,100, -+ 2,0,83,41,3,122,39,82,101,116,117,114,110,32,116,104, -+ 101,32,100,97,116,97,32,102,114,111,109,32,112,97,116,104, -+ 32,97,115,32,114,97,119,32,98,121,116,101,115,46,218,1, -+ 114,78,41,3,114,50,0,0,0,114,51,0,0,0,90,4, -+ 114,101,97,100,41,3,114,109,0,0,0,114,36,0,0,0, -+ 114,55,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,201,0,0,0,45,3,0,0,115,4,0, -+ 0,0,0,2,21,1,122,19,70,105,108,101,76,111,97,100, -+ 101,114,46,103,101,116,95,100,97,116,97,41,11,114,113,0, -+ 0,0,114,112,0,0,0,114,114,0,0,0,114,115,0,0, -+ 0,114,186,0,0,0,114,214,0,0,0,114,216,0,0,0, -+ 114,124,0,0,0,114,194,0,0,0,114,158,0,0,0,114, -+ 201,0,0,0,114,5,0,0,0,114,5,0,0,0,41,1, -+ 114,212,0,0,0,114,6,0,0,0,114,211,0,0,0,10, -+ 3,0,0,115,14,0,0,0,12,3,6,2,12,6,12,4, -+ 12,3,24,12,18,5,114,211,0,0,0,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, -+ 115,64,0,0,0,101,0,0,90,1,0,100,0,0,90,2, ++ 17,1,0,0,236,5,0,0,115,14,0,0,0,0,2,15, ++ 1,3,1,19,1,18,1,9,1,31,1,122,23,83,111,117, ++ 114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, ++ 117,114,99,101,218,9,95,111,112,116,105,109,105,122,101,114, ++ 30,0,0,0,99,3,0,0,0,1,0,0,0,4,0,0, ++ 0,9,0,0,0,67,0,0,0,115,31,0,0,0,116,0, ++ 0,116,1,0,124,1,0,124,2,0,100,1,0,100,2,0, ++ 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, ++ 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, ++ 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, ++ 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, ++ 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, ++ 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, ++ 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, ++ 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, ++ 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, ++ 32,32,32,114,176,0,0,0,218,12,100,111,110,116,95,105, ++ 110,104,101,114,105,116,84,114,119,0,0,0,41,2,114,115, ++ 0,0,0,218,7,99,111,109,112,105,108,101,41,4,114,72, ++ 0,0,0,114,54,0,0,0,114,36,0,0,0,114,42,1, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,218,14,115,111,117,114,99,101,95,116,111,95,99,111,100, ++ 101,246,5,0,0,115,4,0,0,0,0,5,18,1,122,27, ++ 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, ++ 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, ++ 0,0,0,0,10,0,0,0,43,0,0,0,67,0,0,0, ++ 115,177,1,0,0,124,0,0,106,0,0,124,1,0,131,1, ++ 0,125,2,0,100,1,0,125,3,0,121,16,0,116,1,0, ++ 124,2,0,131,1,0,125,4,0,87,110,24,0,4,116,2, ++ 0,107,10,0,114,63,0,1,1,1,100,1,0,125,4,0, ++ 89,110,202,0,88,121,19,0,124,0,0,106,3,0,124,2, ++ 0,131,1,0,125,5,0,87,110,18,0,4,116,4,0,107, ++ 10,0,114,103,0,1,1,1,89,110,162,0,88,116,5,0, ++ 124,5,0,100,2,0,25,131,1,0,125,3,0,121,19,0, ++ 124,0,0,106,6,0,124,4,0,131,1,0,125,6,0,87, ++ 110,18,0,4,116,7,0,107,10,0,114,159,0,1,1,1, ++ 89,110,106,0,88,121,34,0,116,8,0,124,6,0,100,3, ++ 0,124,5,0,100,4,0,124,1,0,100,5,0,124,4,0, ++ 131,1,3,125,7,0,87,110,24,0,4,116,9,0,116,10, ++ 0,102,2,0,107,10,0,114,220,0,1,1,1,89,110,45, ++ 0,88,116,11,0,100,6,0,124,4,0,124,2,0,131,3, ++ 0,1,116,12,0,124,7,0,100,4,0,124,1,0,100,7, ++ 0,124,4,0,100,8,0,124,2,0,131,1,3,83,124,0, ++ 0,106,6,0,124,2,0,131,1,0,125,8,0,124,0,0, ++ 106,13,0,124,8,0,124,2,0,131,2,0,125,9,0,116, ++ 11,0,100,9,0,124,2,0,131,2,0,1,116,14,0,106, ++ 15,0,12,114,173,1,124,4,0,100,1,0,107,9,0,114, ++ 173,1,124,3,0,100,1,0,107,9,0,114,173,1,116,16, ++ 0,124,9,0,124,3,0,116,17,0,124,8,0,131,1,0, ++ 131,3,0,125,6,0,121,36,0,124,0,0,106,18,0,124, ++ 2,0,124,4,0,124,6,0,131,3,0,1,116,11,0,100, ++ 10,0,124,4,0,131,2,0,1,87,113,173,1,4,116,2, ++ 0,107,10,0,114,169,1,1,1,1,89,113,173,1,88,110, ++ 0,0,124,9,0,83,41,11,122,190,67,111,110,99,114,101, ++ 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, ++ 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, ++ 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, ++ 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, ++ 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, ++ 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, ++ 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, ++ 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, ++ 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, ++ 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, ++ 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, ++ 32,32,32,32,32,32,32,32,78,114,184,0,0,0,114,188, ++ 0,0,0,114,68,0,0,0,114,36,0,0,0,122,13,123, ++ 125,32,109,97,116,99,104,101,115,32,123,125,114,141,0,0, ++ 0,114,142,0,0,0,122,19,99,111,100,101,32,111,98,106, ++ 101,99,116,32,102,114,111,109,32,123,125,122,10,119,114,111, ++ 116,101,32,123,33,114,125,41,19,114,239,0,0,0,114,133, ++ 0,0,0,114,125,0,0,0,114,37,1,0,0,114,35,1, ++ 0,0,114,15,0,0,0,114,40,1,0,0,114,41,0,0, ++ 0,114,191,0,0,0,114,154,0,0,0,114,187,0,0,0, ++ 114,153,0,0,0,114,196,0,0,0,114,45,1,0,0,114, ++ 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, ++ 95,98,121,116,101,99,111,100,101,114,199,0,0,0,114,32, ++ 0,0,0,114,39,1,0,0,41,10,114,72,0,0,0,114, ++ 159,0,0,0,114,142,0,0,0,114,189,0,0,0,114,141, ++ 0,0,0,218,2,115,116,114,54,0,0,0,218,10,98,121, ++ 116,101,115,95,100,97,116,97,114,202,0,0,0,90,11,99, ++ 111,100,101,95,111,98,106,101,99,116,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,16,1,0,0,254,5, ++ 0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,16, ++ 1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,3, ++ 1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,19, ++ 1,5,2,9,1,7,1,15,1,6,1,7,1,15,1,18, ++ 1,13,1,22,1,12,1,9,1,15,1,3,1,19,1,17, ++ 1,13,1,8,1,122,21,83,111,117,114,99,101,76,111,97, ++ 100,101,114,46,103,101,116,95,99,111,100,101,78,114,139,0, ++ 0,0,41,10,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,36,1,0,0,114,37,1,0,0,114,39,1, ++ 0,0,114,38,1,0,0,114,17,1,0,0,114,45,1,0, ++ 0,114,16,1,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,34,1,0,0,196, ++ 5,0,0,115,14,0,0,0,12,2,12,8,12,13,12,10, ++ 12,7,12,10,18,8,114,34,1,0,0,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, ++ 115,112,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, + 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -+ 6,0,100,7,0,100,8,0,100,9,0,132,0,1,90,6, -+ 0,100,10,0,83,41,11,218,16,83,111,117,114,99,101,70, -+ 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, ++ 6,0,100,7,0,132,0,0,90,6,0,101,7,0,135,0, ++ 0,102,1,0,100,8,0,100,9,0,134,0,0,131,1,0, ++ 90,8,0,101,7,0,100,10,0,100,11,0,132,0,0,131, ++ 1,0,90,9,0,100,12,0,100,13,0,132,0,0,90,10, ++ 0,135,0,0,83,41,14,218,10,70,105,108,101,76,111,97, ++ 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, ++ 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, ++ 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, ++ 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, ++ 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, ++ 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, ++ 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, ++ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, ++ 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,124, ++ 2,0,124,0,0,95,1,0,100,1,0,83,41,2,122,75, ++ 67,97,99,104,101,32,116,104,101,32,109,111,100,117,108,101, ++ 32,110,97,109,101,32,97,110,100,32,116,104,101,32,112,97, ++ 116,104,32,116,111,32,116,104,101,32,102,105,108,101,32,102, ++ 111,117,110,100,32,98,121,32,116,104,101,10,32,32,32,32, ++ 32,32,32,32,102,105,110,100,101,114,46,78,41,2,114,68, ++ 0,0,0,114,36,0,0,0,41,3,114,72,0,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,73,0,0,0,55,6,0, ++ 0,115,4,0,0,0,0,3,9,1,122,19,70,105,108,101, ++ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, ++ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,34,0,0,0,124,0,0,106,0,0,124, ++ 1,0,106,0,0,107,2,0,111,33,0,124,0,0,106,1, ++ 0,124,1,0,106,1,0,107,2,0,83,41,1,78,41,2, ++ 114,225,0,0,0,114,64,0,0,0,41,2,114,72,0,0, ++ 0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,230,0,0,0,61,6,0,0,115,4, ++ 0,0,0,0,1,18,1,122,17,70,105,108,101,76,111,97, ++ 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 26,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, ++ 116,0,0,124,0,0,106,2,0,131,1,0,65,83,41,1, ++ 78,41,3,218,4,104,97,115,104,114,68,0,0,0,114,36, ++ 0,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,8,95,95,104,97,115, ++ 104,95,95,65,6,0,0,115,2,0,0,0,0,1,122,19, ++ 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, ++ 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 3,0,0,0,3,0,0,0,115,22,0,0,0,116,0,0, ++ 116,1,0,124,0,0,131,2,0,106,2,0,124,1,0,131, ++ 1,0,83,41,1,122,100,76,111,97,100,32,97,32,109,111, ++ 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, ++ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, ++ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, ++ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, ++ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, ++ 46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,115, ++ 117,112,101,114,114,49,1,0,0,114,5,1,0,0,41,2, ++ 114,72,0,0,0,114,159,0,0,0,41,1,114,225,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,5,1,0,0, ++ 68,6,0,0,115,2,0,0,0,0,10,122,22,70,105,108, ++ 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, ++ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, ++ 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, ++ 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, ++ 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, ++ 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, ++ 114,46,41,1,114,36,0,0,0,41,2,114,72,0,0,0, ++ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,114,239,0,0,0,80,6,0,0,115,2,0, ++ 0,0,0,3,122,23,70,105,108,101,76,111,97,100,101,114, ++ 46,103,101,116,95,102,105,108,101,110,97,109,101,99,2,0, ++ 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, ++ 0,0,115,41,0,0,0,116,0,0,106,1,0,124,1,0, ++ 100,1,0,131,2,0,143,17,0,125,2,0,124,2,0,106, ++ 2,0,131,0,0,83,87,100,2,0,81,88,100,2,0,83, ++ 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, ++ 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, ++ 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, ++ 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, ++ 100,41,3,114,72,0,0,0,114,36,0,0,0,114,55,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,40,1,0,0,85,6,0,0,115,4,0,0,0,0, ++ 2,21,1,122,19,70,105,108,101,76,111,97,100,101,114,46, ++ 103,101,116,95,100,97,116,97,41,11,114,58,0,0,0,114, ++ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,73, ++ 0,0,0,114,230,0,0,0,114,51,1,0,0,114,157,0, ++ 0,0,114,5,1,0,0,114,239,0,0,0,114,40,1,0, ++ 0,114,5,0,0,0,114,5,0,0,0,41,1,114,225,0, ++ 0,0,114,6,0,0,0,114,49,1,0,0,50,6,0,0, ++ 115,14,0,0,0,12,3,6,2,12,6,12,4,12,3,24, ++ 12,18,5,114,49,1,0,0,99,0,0,0,0,0,0,0, ++ 0,0,0,0,0,4,0,0,0,64,0,0,0,115,64,0, ++ 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, ++ 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, ++ 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100, ++ 7,0,100,8,0,100,9,0,132,0,1,90,6,0,100,10, ++ 0,83,41,11,114,9,1,0,0,122,62,67,111,110,99,114, + 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, + 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, + 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,34, -+ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,100, -+ 1,0,124,2,0,106,1,0,100,2,0,124,2,0,106,2, -+ 0,105,2,0,83,41,3,122,33,82,101,116,117,114,110,32, -+ 116,104,101,32,109,101,116,97,100,97,116,97,32,102,111,114, -+ 32,116,104,101,32,112,97,116,104,46,114,134,0,0,0,114, -+ 135,0,0,0,41,3,114,40,0,0,0,218,8,115,116,95, -+ 109,116,105,109,101,90,7,115,116,95,115,105,122,101,41,3, -+ 114,109,0,0,0,114,36,0,0,0,114,209,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,198, -+ 0,0,0,55,3,0,0,115,4,0,0,0,0,2,12,1, -+ 122,27,83,111,117,114,99,101,70,105,108,101,76,111,97,100, -+ 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0, -+ 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, -+ 0,0,115,34,0,0,0,116,0,0,124,1,0,131,1,0, -+ 125,4,0,124,0,0,106,1,0,124,2,0,124,3,0,100, -+ 1,0,124,4,0,131,2,1,83,41,2,78,218,5,95,109, -+ 111,100,101,41,2,114,98,0,0,0,114,199,0,0,0,41, -+ 5,114,109,0,0,0,114,91,0,0,0,114,90,0,0,0, -+ 114,54,0,0,0,114,43,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,200,0,0,0,60,3, -+ 0,0,115,4,0,0,0,0,2,12,1,122,32,83,111,117, -+ 114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,99, -+ 97,99,104,101,95,98,121,116,101,99,111,100,101,114,221,0, -+ 0,0,105,182,1,0,0,99,3,0,0,0,1,0,0,0, -+ 9,0,0,0,17,0,0,0,67,0,0,0,115,53,1,0, -+ 0,116,0,0,124,1,0,131,1,0,92,2,0,125,4,0, -+ 125,5,0,103,0,0,125,6,0,120,54,0,124,4,0,114, -+ 80,0,116,1,0,124,4,0,131,1,0,12,114,80,0,116, -+ 0,0,124,4,0,131,1,0,92,2,0,125,4,0,125,7, -+ 0,124,6,0,106,2,0,124,7,0,131,1,0,1,113,27, -+ 0,87,120,132,0,116,3,0,124,6,0,131,1,0,68,93, -+ 118,0,125,7,0,116,4,0,124,4,0,124,7,0,131,2, -+ 0,125,4,0,121,17,0,116,5,0,106,6,0,124,4,0, -+ 131,1,0,1,87,113,94,0,4,116,7,0,107,10,0,114, -+ 155,0,1,1,1,119,94,0,89,113,94,0,4,116,8,0, -+ 107,10,0,114,211,0,1,125,8,0,1,122,25,0,116,9, -+ 0,100,1,0,124,4,0,124,8,0,131,3,0,1,100,2, -+ 0,83,87,89,100,2,0,100,2,0,125,8,0,126,8,0, -+ 88,113,94,0,88,113,94,0,87,121,33,0,116,10,0,124, -+ 1,0,124,2,0,124,3,0,131,3,0,1,116,9,0,100, -+ 3,0,124,1,0,131,2,0,1,87,110,53,0,4,116,8, -+ 0,107,10,0,114,48,1,1,125,8,0,1,122,21,0,116, -+ 9,0,100,1,0,124,1,0,124,8,0,131,3,0,1,87, -+ 89,100,2,0,100,2,0,125,8,0,126,8,0,88,110,1, -+ 0,88,100,2,0,83,41,4,122,27,87,114,105,116,101,32, -+ 98,121,116,101,115,32,100,97,116,97,32,116,111,32,97,32, -+ 102,105,108,101,46,122,27,99,111,117,108,100,32,110,111,116, -+ 32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,33, -+ 114,125,78,122,12,99,114,101,97,116,101,100,32,123,33,114, -+ 125,41,11,114,39,0,0,0,114,47,0,0,0,114,164,0, -+ 0,0,114,34,0,0,0,114,29,0,0,0,114,4,0,0, -+ 0,90,5,109,107,100,105,114,218,15,70,105,108,101,69,120, -+ 105,115,116,115,69,114,114,111,114,114,41,0,0,0,114,106, -+ 0,0,0,114,56,0,0,0,41,9,114,109,0,0,0,114, -+ 36,0,0,0,114,54,0,0,0,114,221,0,0,0,218,6, -+ 112,97,114,101,110,116,114,95,0,0,0,114,28,0,0,0, -+ 114,24,0,0,0,114,202,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,199,0,0,0,65,3, -+ 0,0,115,38,0,0,0,0,2,18,1,6,2,22,1,18, -+ 1,17,2,19,1,15,1,3,1,17,1,13,2,7,1,18, -+ 3,16,1,27,1,3,1,16,1,17,1,18,2,122,25,83, ++ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,36, ++ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,105, ++ 2,0,124,2,0,106,1,0,100,1,0,54,124,2,0,106, ++ 2,0,100,2,0,54,83,41,3,122,33,82,101,116,117,114, ++ 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, ++ 111,114,32,116,104,101,32,112,97,116,104,46,114,184,0,0, ++ 0,114,185,0,0,0,41,3,114,40,0,0,0,218,8,115, ++ 116,95,109,116,105,109,101,90,7,115,116,95,115,105,122,101, ++ 41,3,114,72,0,0,0,114,36,0,0,0,114,47,1,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,37,1,0,0,95,6,0,0,115,4,0,0,0,0,2, ++ 12,1,122,27,83,111,117,114,99,101,70,105,108,101,76,111, ++ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, ++ 4,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, ++ 67,0,0,0,115,34,0,0,0,116,0,0,124,1,0,131, ++ 1,0,125,4,0,124,0,0,106,1,0,124,2,0,124,3, ++ 0,100,1,0,124,4,0,131,2,1,83,41,2,78,218,5, ++ 95,109,111,100,101,41,2,114,145,0,0,0,114,38,1,0, ++ 0,41,5,114,72,0,0,0,114,142,0,0,0,114,141,0, ++ 0,0,114,54,0,0,0,114,43,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,39,1,0,0, ++ 100,6,0,0,115,4,0,0,0,0,2,12,1,122,32,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, -+ 115,101,116,95,100,97,116,97,78,41,7,114,113,0,0,0, -+ 114,112,0,0,0,114,114,0,0,0,114,115,0,0,0,114, -+ 198,0,0,0,114,200,0,0,0,114,199,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,219,0,0,0,51,3,0,0,115,8,0,0,0, -+ 12,2,6,2,12,5,12,5,114,219,0,0,0,99,0,0, -+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, -+ 0,0,115,46,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, - 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, -- 0,100,6,0,100,7,0,132,0,0,90,6,0,100,8,0, -- 100,9,0,132,0,0,90,7,0,100,10,0,100,11,0,132, -- 0,0,90,8,0,100,12,0,100,13,0,132,0,0,90,9, -- 0,100,14,0,100,15,0,132,0,0,90,10,0,100,16,0, -- 100,17,0,132,0,0,90,11,0,101,12,0,100,18,0,100, -- 19,0,132,0,0,131,1,0,90,13,0,100,20,0,83,41, -- 21,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, -- 76,111,97,100,101,114,122,93,76,111,97,100,101,114,32,102, -- 111,114,32,101,120,116,101,110,115,105,111,110,32,109,111,100, -- 117,108,101,115,46,10,10,32,32,32,32,84,104,101,32,99, -- 111,110,115,116,114,117,99,116,111,114,32,105,115,32,100,101, -- 115,105,103,110,101,100,32,116,111,32,119,111,114,107,32,119, -- 105,116,104,32,70,105,108,101,70,105,110,100,101,114,46,10, -- 10,32,32,32,32,99,3,0,0,0,0,0,0,0,3,0, -- 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124, -- 1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1, -- 0,100,0,0,83,41,1,78,41,2,114,106,0,0,0,114, -- 35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0, -- 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,185,0,0,0,121,3,0,0,115,4,0, -- 0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,111, -- 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, -- 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,2,0,0,0,67,0,0,0,115,34,0,0,0,124,0, -- 0,106,0,0,124,1,0,106,0,0,107,2,0,111,33,0, -- 124,0,0,106,1,0,124,1,0,106,1,0,107,2,0,83, -- 41,1,78,41,2,114,211,0,0,0,114,118,0,0,0,41, -- 2,114,108,0,0,0,114,212,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,213,0,0,0,125, -- 3,0,0,115,4,0,0,0,0,1,18,1,122,26,69,120, -- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, -- 114,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, -- 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, -- 0,0,116,0,0,124,0,0,106,1,0,131,1,0,116,0, -- 0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,41, -- 3,114,214,0,0,0,114,106,0,0,0,114,35,0,0,0, -- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,215,0,0,0,129,3,0,0,115, -- 2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111, -- 110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, -- 115,104,95,95,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,4,0,0,0,67,0,0,0,115,47,0,0,0,116,0, -- 0,106,1,0,116,2,0,106,3,0,124,1,0,131,2,0, -- 125,2,0,116,4,0,100,1,0,124,1,0,106,5,0,124, -- 0,0,106,6,0,131,3,0,1,124,2,0,83,41,2,122, -- 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, -- 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, -- 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, -- 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, -- 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,41, -- 7,114,121,0,0,0,114,188,0,0,0,114,145,0,0,0, -- 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, -- 114,105,0,0,0,114,106,0,0,0,114,35,0,0,0,41, -- 3,114,108,0,0,0,114,164,0,0,0,114,190,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 186,0,0,0,132,3,0,0,115,10,0,0,0,0,2,6, -- 1,15,1,6,1,16,1,122,33,69,120,116,101,110,115,105, -- 111,110,70,105,108,101,76,111,97,100,101,114,46,99,114,101, -- 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, -- 45,0,0,0,116,0,0,106,1,0,116,2,0,106,3,0, -- 124,1,0,131,2,0,1,116,4,0,100,1,0,124,0,0, -- 106,5,0,124,0,0,106,6,0,131,3,0,1,100,2,0, -- 83,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, -- 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, -- 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, -- 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, -- 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, -- 114,121,0,0,0,114,188,0,0,0,114,145,0,0,0,90, -- 12,101,120,101,99,95,100,121,110,97,109,105,99,114,105,0, -- 0,0,114,106,0,0,0,114,35,0,0,0,41,2,114,108, -- 0,0,0,114,190,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,191,0,0,0,140,3,0,0, -- 115,6,0,0,0,0,2,19,1,6,1,122,31,69,120,116, -+ 0,100,6,0,83,41,7,218,20,83,111,117,114,99,101,108, -+ 101,115,115,70,105,108,101,76,111,97,100,101,114,122,45,76, -+ 111,97,100,101,114,32,119,104,105,99,104,32,104,97,110,100, -+ 108,101,115,32,115,111,117,114,99,101,108,101,115,115,32,102, -+ 105,108,101,32,105,109,112,111,114,116,115,46,99,2,0,0, -+ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, -+ 0,115,76,0,0,0,124,0,0,106,0,0,124,1,0,131, -+ 1,0,125,2,0,124,0,0,106,1,0,124,2,0,131,1, -+ 0,125,3,0,116,2,0,124,3,0,100,1,0,124,1,0, -+ 100,2,0,124,2,0,131,1,2,125,4,0,116,3,0,124, -+ 4,0,100,1,0,124,1,0,100,3,0,124,2,0,131,1, -+ 2,83,41,4,78,114,107,0,0,0,114,36,0,0,0,114, -+ 90,0,0,0,41,4,114,158,0,0,0,114,201,0,0,0, -+ 114,142,0,0,0,114,148,0,0,0,41,5,114,109,0,0, -+ 0,114,127,0,0,0,114,36,0,0,0,114,54,0,0,0, -+ 114,210,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,188,0,0,0,98,3,0,0,115,8,0, -+ 0,0,0,1,15,1,15,1,24,1,122,29,83,111,117,114, -+ 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, -+ 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, -+ 0,0,0,100,1,0,83,41,2,122,39,82,101,116,117,114, -+ 110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32, -+ 105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100, -+ 101,46,78,114,5,0,0,0,41,2,114,109,0,0,0,114, -+ 127,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,203,0,0,0,104,3,0,0,115,2,0,0, -+ 0,0,2,122,31,83,111,117,114,99,101,108,101,115,115,70, -+ 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, -+ 117,114,99,101,78,41,6,114,113,0,0,0,114,112,0,0, -+ 0,114,114,0,0,0,114,115,0,0,0,114,188,0,0,0, -+ 114,203,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,224,0,0,0,94,3, -+ 0,0,115,6,0,0,0,12,2,6,2,12,6,114,224,0, -+ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, -+ 0,0,0,64,0,0,0,115,136,0,0,0,101,0,0,90, -+ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, -+ 0,100,3,0,132,0,0,90,4,0,100,4,0,100,5,0, -+ 132,0,0,90,5,0,100,6,0,100,7,0,132,0,0,90, -+ 6,0,100,8,0,100,9,0,132,0,0,90,7,0,100,10, -+ 0,100,11,0,132,0,0,90,8,0,100,12,0,100,13,0, -+ 132,0,0,90,9,0,100,14,0,100,15,0,132,0,0,90, -+ 10,0,100,16,0,100,17,0,132,0,0,90,11,0,101,12, -+ 0,100,18,0,100,19,0,132,0,0,131,1,0,90,13,0, -+ 100,20,0,83,41,21,218,19,69,120,116,101,110,115,105,111, -+ 110,70,105,108,101,76,111,97,100,101,114,122,93,76,111,97, -+ 100,101,114,32,102,111,114,32,101,120,116,101,110,115,105,111, -+ 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, -+ 84,104,101,32,99,111,110,115,116,114,117,99,116,111,114,32, -+ 105,115,32,100,101,115,105,103,110,101,100,32,116,111,32,119, -+ 111,114,107,32,119,105,116,104,32,70,105,108,101,70,105,110, -+ 100,101,114,46,10,10,32,32,32,32,99,3,0,0,0,0, -+ 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, -+ 22,0,0,0,124,1,0,124,0,0,95,0,0,124,2,0, -+ 124,0,0,95,1,0,100,0,0,83,41,1,78,41,2,114, -+ 107,0,0,0,114,36,0,0,0,41,3,114,109,0,0,0, -+ 114,107,0,0,0,114,36,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,186,0,0,0,121,3, -+ 0,0,115,4,0,0,0,0,1,9,1,122,28,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, -- 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,4,0,0,0,3,0,0, -- 0,115,48,0,0,0,116,0,0,124,0,0,106,1,0,131, -- 1,0,100,1,0,25,137,0,0,116,2,0,135,0,0,102, -- 1,0,100,2,0,100,3,0,134,0,0,116,3,0,68,131, -- 1,0,131,1,0,83,41,4,122,49,82,101,116,117,114,110, -- 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, -- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, -- 32,97,32,112,97,99,107,97,103,101,46,114,29,0,0,0, -- 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, -- 0,51,0,0,0,115,31,0,0,0,124,0,0,93,21,0, -- 125,1,0,136,0,0,100,0,0,124,1,0,23,107,2,0, -- 86,1,113,3,0,100,1,0,83,41,2,114,185,0,0,0, -- 78,114,4,0,0,0,41,2,114,22,0,0,0,218,6,115, -- 117,102,102,105,120,41,1,218,9,102,105,108,101,95,110,97, -- 109,101,114,4,0,0,0,114,5,0,0,0,250,9,60,103, -- 101,110,101,120,112,114,62,149,3,0,0,115,2,0,0,0, -- 6,1,122,49,69,120,116,101,110,115,105,111,110,70,105,108, -- 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, -- 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, -- 101,120,112,114,62,41,4,114,38,0,0,0,114,35,0,0, -- 0,218,3,97,110,121,218,18,69,88,84,69,78,83,73,79, -- 78,95,83,85,70,70,73,88,69,83,41,2,114,108,0,0, -- 0,114,126,0,0,0,114,4,0,0,0,41,1,114,226,0, -- 0,0,114,5,0,0,0,114,159,0,0,0,146,3,0,0, -- 115,6,0,0,0,0,2,19,1,18,1,122,30,69,120,116, -+ 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,34, -+ 0,0,0,124,0,0,106,0,0,124,1,0,106,0,0,107, -+ 2,0,111,33,0,124,0,0,106,1,0,124,1,0,106,1, -+ 0,107,2,0,83,41,1,78,41,2,114,212,0,0,0,114, -+ 119,0,0,0,41,2,114,109,0,0,0,114,213,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 214,0,0,0,125,3,0,0,115,4,0,0,0,0,1,18, -+ 1,122,26,69,120,116,101,110,115,105,111,110,70,105,108,101, -+ 76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,0, -+ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, -+ 0,0,115,26,0,0,0,116,0,0,124,0,0,106,1,0, -+ 131,1,0,116,0,0,124,0,0,106,2,0,131,1,0,65, -+ 83,41,1,78,41,3,114,215,0,0,0,114,107,0,0,0, -+ 114,36,0,0,0,41,1,114,109,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,216,0,0,0, -+ 129,3,0,0,115,2,0,0,0,0,1,122,28,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, -- 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, -- 115,4,0,0,0,100,1,0,83,41,2,122,63,82,101,116, -- 117,114,110,32,78,111,110,101,32,97,115,32,97,110,32,101, -- 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, -- 99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32, -- 99,111,100,101,32,111,98,106,101,99,116,46,78,114,4,0, -- 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,187,0, -- 0,0,152,3,0,0,115,2,0,0,0,0,2,122,28,69, -- 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, -- 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, -- 115,4,0,0,0,100,1,0,83,41,2,122,53,82,101,116, -- 117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101, -- 110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97, -- 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, -- 101,46,78,114,4,0,0,0,41,2,114,108,0,0,0,114, -- 126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,202,0,0,0,156,3,0,0,115,2,0,0, -- 0,0,2,122,30,69,120,116,101,110,115,105,111,110,70,105, -- 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, -- 114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, -- 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, -- 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, -- 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, -- 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, -- 114,46,41,1,114,35,0,0,0,41,2,114,108,0,0,0, -- 114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,157,0,0,0,160,3,0,0,115,2,0, -- 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, -- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, -- 108,101,110,97,109,101,78,41,14,114,112,0,0,0,114,111, -- 0,0,0,114,113,0,0,0,114,114,0,0,0,114,185,0, -- 0,0,114,213,0,0,0,114,215,0,0,0,114,186,0,0, -- 0,114,191,0,0,0,114,159,0,0,0,114,187,0,0,0, -- 114,202,0,0,0,114,123,0,0,0,114,157,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,224,0,0,0,113,3,0,0,115,20,0,0, -- 0,12,6,6,2,12,4,12,4,12,3,12,8,12,6,12, -- 6,12,4,12,4,114,224,0,0,0,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, -- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, -- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, -- 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, -- 132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90, -- 8,0,100,12,0,100,13,0,132,0,0,90,9,0,100,14, -- 0,100,15,0,132,0,0,90,10,0,100,16,0,100,17,0, -- 132,0,0,90,11,0,100,18,0,100,19,0,132,0,0,90, -- 12,0,100,20,0,83,41,21,218,14,95,78,97,109,101,115, -- 112,97,99,101,80,97,116,104,97,38,1,0,0,82,101,112, -- 114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,112, -- 97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,97, -- 116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,101, -- 32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,32, -- 32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,114, -- 101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,32, -- 102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,111, -- 111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,110, -- 116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,95, -- 46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,97, -- 110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,101, -- 39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,114, -- 101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,117, -- 115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,114, -- 46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,108, -- 32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,97, -- 114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,97, -- 116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,97, -- 116,104,46,99,4,0,0,0,0,0,0,0,4,0,0,0, -- 2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,0, -- 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,116, -- 2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,0, -- 0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,0, -- 83,41,1,78,41,6,218,5,95,110,97,109,101,218,5,95, -- 112,97,116,104,114,93,0,0,0,218,16,95,103,101,116,95, -- 112,97,114,101,110,116,95,112,97,116,104,218,17,95,108,97, -- 115,116,95,112,97,114,101,110,116,95,112,97,116,104,218,12, -- 95,112,97,116,104,95,102,105,110,100,101,114,41,4,114,108, -- 0,0,0,114,106,0,0,0,114,35,0,0,0,218,11,112, -- 97,116,104,95,102,105,110,100,101,114,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,185,0,0,0,173,3, -- 0,0,115,8,0,0,0,0,1,9,1,9,1,21,1,122, -- 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, -- 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, -- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,53,0, -- 0,0,124,0,0,106,0,0,106,1,0,100,1,0,131,1, -- 0,92,3,0,125,1,0,125,2,0,125,3,0,124,2,0, -- 100,2,0,107,2,0,114,43,0,100,6,0,83,124,1,0, -- 100,5,0,102,2,0,83,41,7,122,62,82,101,116,117,114, -- 110,115,32,97,32,116,117,112,108,101,32,111,102,32,40,112, -- 97,114,101,110,116,45,109,111,100,117,108,101,45,110,97,109, -- 101,44,32,112,97,114,101,110,116,45,112,97,116,104,45,97, -- 116,116,114,45,110,97,109,101,41,114,58,0,0,0,114,30, -- 0,0,0,114,7,0,0,0,114,35,0,0,0,90,8,95, -- 95,112,97,116,104,95,95,41,2,122,3,115,121,115,122,4, -- 112,97,116,104,41,2,114,231,0,0,0,114,32,0,0,0, -- 41,4,114,108,0,0,0,114,222,0,0,0,218,3,100,111, -- 116,90,2,109,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,23,95,102,105,110,100,95,112,97,114,101, -- 110,116,95,112,97,116,104,95,110,97,109,101,115,179,3,0, -- 0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,38, -- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, -- 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, -- 95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,3, -- 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, -- 124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,125, -- 2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,124, -- 2,0,131,2,0,83,41,1,78,41,4,114,238,0,0,0, -- 114,117,0,0,0,114,7,0,0,0,218,7,109,111,100,117, -- 108,101,115,41,3,114,108,0,0,0,90,18,112,97,114,101, -- 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, -- 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,233,0, -- 0,0,189,3,0,0,115,4,0,0,0,0,1,18,1,122, -- 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, -+ 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,47, -+ 0,0,0,116,0,0,106,1,0,116,2,0,106,3,0,124, -+ 1,0,131,2,0,125,2,0,116,4,0,100,1,0,124,1, -+ 0,106,5,0,124,0,0,106,6,0,131,3,0,1,124,2, -+ 0,83,41,2,122,38,67,114,101,97,116,101,32,97,110,32, -+ 117,110,105,116,105,97,108,105,122,101,100,32,101,120,116,101, -+ 110,115,105,111,110,32,109,111,100,117,108,101,122,38,101,120, -+ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,123, -+ 33,114,125,32,108,111,97,100,101,100,32,102,114,111,109,32, -+ 123,33,114,125,41,7,114,122,0,0,0,114,189,0,0,0, -+ 114,146,0,0,0,90,14,99,114,101,97,116,101,95,100,121, -+ 110,97,109,105,99,114,106,0,0,0,114,107,0,0,0,114, -+ 36,0,0,0,41,3,114,109,0,0,0,114,165,0,0,0, -+ 114,191,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,187,0,0,0,132,3,0,0,115,10,0, -+ 0,0,0,2,6,1,15,1,6,1,16,1,122,33,69,120, -+ 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, -+ 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, ++ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,114, ++ 55,1,0,0,105,182,1,0,0,99,3,0,0,0,1,0, ++ 0,0,9,0,0,0,17,0,0,0,67,0,0,0,115,53, ++ 1,0,0,116,0,0,124,1,0,131,1,0,92,2,0,125, ++ 4,0,125,5,0,103,0,0,125,6,0,120,54,0,124,4, ++ 0,114,80,0,116,1,0,124,4,0,131,1,0,12,114,80, ++ 0,116,0,0,124,4,0,131,1,0,92,2,0,125,4,0, ++ 125,7,0,124,6,0,106,2,0,124,7,0,131,1,0,1, ++ 113,27,0,87,120,132,0,116,3,0,124,6,0,131,1,0, ++ 68,93,118,0,125,7,0,116,4,0,124,4,0,124,7,0, ++ 131,2,0,125,4,0,121,17,0,116,5,0,106,6,0,124, ++ 4,0,131,1,0,1,87,113,94,0,4,116,7,0,107,10, ++ 0,114,155,0,1,1,1,119,94,0,89,113,94,0,4,116, ++ 8,0,107,10,0,114,211,0,1,125,8,0,1,122,25,0, ++ 116,9,0,100,1,0,124,4,0,124,8,0,131,3,0,1, ++ 100,2,0,83,87,89,100,2,0,100,2,0,125,8,0,126, ++ 8,0,88,113,94,0,88,113,94,0,87,121,33,0,116,10, ++ 0,124,1,0,124,2,0,124,3,0,131,3,0,1,116,9, ++ 0,100,3,0,124,1,0,131,2,0,1,87,110,53,0,4, ++ 116,8,0,107,10,0,114,48,1,1,125,8,0,1,122,21, ++ 0,116,9,0,100,1,0,124,1,0,124,8,0,131,3,0, ++ 1,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, ++ 110,1,0,88,100,2,0,83,41,4,122,27,87,114,105,116, ++ 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, ++ 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, ++ 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, ++ 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, ++ 33,114,125,41,11,114,39,0,0,0,114,47,0,0,0,114, ++ 224,0,0,0,114,34,0,0,0,114,29,0,0,0,114,4, ++ 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, ++ 69,120,105,115,116,115,69,114,114,111,114,114,41,0,0,0, ++ 114,153,0,0,0,114,56,0,0,0,41,9,114,72,0,0, ++ 0,114,36,0,0,0,114,54,0,0,0,114,55,1,0,0, ++ 114,234,0,0,0,114,132,0,0,0,114,28,0,0,0,114, ++ 24,0,0,0,114,41,1,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,38,1,0,0,105,6,0, ++ 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, ++ 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, ++ 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, ++ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, ++ 101,116,95,100,97,116,97,78,41,7,114,58,0,0,0,114, ++ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,37, ++ 1,0,0,114,39,1,0,0,114,38,1,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,9,1,0,0,91,6,0,0,115,8,0,0,0,12, ++ 2,6,2,12,5,12,5,114,9,1,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, ++ 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, ++ 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, ++ 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, ++ 100,6,0,83,41,7,114,8,1,0,0,122,45,76,111,97, ++ 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, ++ 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, ++ 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, ++ 0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,115, ++ 76,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, ++ 125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,125, ++ 3,0,116,2,0,124,3,0,100,1,0,124,1,0,100,2, ++ 0,124,2,0,131,1,2,125,4,0,116,3,0,124,4,0, ++ 100,1,0,124,1,0,100,3,0,124,2,0,131,1,2,83, ++ 41,4,78,114,68,0,0,0,114,36,0,0,0,114,141,0, ++ 0,0,41,4,114,239,0,0,0,114,40,1,0,0,114,191, ++ 0,0,0,114,196,0,0,0,41,5,114,72,0,0,0,114, ++ 159,0,0,0,114,36,0,0,0,114,54,0,0,0,114,48, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,16,1,0,0,138,6,0,0,115,8,0,0,0, ++ 0,1,15,1,15,1,24,1,122,29,83,111,117,114,99,101, ++ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,103, ++ 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, ++ 0,100,1,0,83,41,2,122,39,82,101,116,117,114,110,32, ++ 78,111,110,101,32,97,115,32,116,104,101,114,101,32,105,115, ++ 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, ++ 78,114,5,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,17,1,0,0,144,6,0,0,115,2,0,0,0,0, ++ 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, ++ 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, ++ 99,101,78,41,6,114,58,0,0,0,114,57,0,0,0,114, ++ 59,0,0,0,114,60,0,0,0,114,16,1,0,0,114,17, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,8,1,0,0,134,6,0,0, ++ 115,6,0,0,0,12,2,6,2,12,6,114,8,1,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, ++ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, ++ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, ++ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, ++ 101,7,0,100,8,0,100,9,0,132,0,0,131,1,0,90, ++ 8,0,100,10,0,100,11,0,132,0,0,90,9,0,100,12, ++ 0,100,13,0,132,0,0,90,10,0,100,14,0,100,15,0, ++ 132,0,0,90,11,0,101,7,0,100,16,0,100,17,0,132, ++ 0,0,131,1,0,90,12,0,100,18,0,83,41,19,218,19, ++ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, ++ 100,101,114,122,93,76,111,97,100,101,114,32,102,111,114,32, ++ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, ++ 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, ++ 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, ++ 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, ++ 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, ++ 32,32,99,3,0,0,0,0,0,0,0,3,0,0,0,2, ++ 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, ++ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,0, ++ 0,83,41,1,78,41,2,114,68,0,0,0,114,36,0,0, ++ 0,41,3,114,72,0,0,0,114,68,0,0,0,114,36,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,73,0,0,0,161,6,0,0,115,4,0,0,0,0, ++ 1,9,1,122,28,69,120,116,101,110,115,105,111,110,70,105, ++ 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, ++ 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, ++ 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, ++ 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, ++ 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, ++ 41,2,114,225,0,0,0,114,64,0,0,0,41,2,114,72, ++ 0,0,0,114,228,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,230,0,0,0,165,6,0,0, ++ 115,4,0,0,0,0,1,18,1,122,26,69,120,116,101,110, ++ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, ++ 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, ++ 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, ++ 0,106,2,0,131,1,0,65,83,41,1,78,41,3,114,50, ++ 1,0,0,114,68,0,0,0,114,36,0,0,0,41,1,114, ++ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,51,1,0,0,169,6,0,0,115,2,0,0, ++ 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, ++ 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, ++ 95,99,2,0,0,0,0,0,0,0,4,0,0,0,11,0, ++ 0,0,67,0,0,0,115,183,0,0,0,116,0,0,124,1, ++ 0,131,1,0,143,29,0,1,116,1,0,116,2,0,106,3, ++ 0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,0, ++ 87,100,1,0,81,88,116,5,0,100,2,0,124,0,0,106, ++ 4,0,131,2,0,1,124,0,0,106,6,0,124,1,0,131, ++ 1,0,125,3,0,124,3,0,114,124,0,116,7,0,124,2, ++ 0,100,3,0,131,2,0,12,114,124,0,116,8,0,124,0, ++ 0,106,4,0,131,1,0,100,4,0,25,103,1,0,124,2, ++ 0,95,9,0,110,0,0,124,0,0,124,2,0,95,10,0, ++ 124,2,0,106,11,0,124,2,0,95,12,0,124,3,0,115, ++ 179,0,124,2,0,106,12,0,106,13,0,100,5,0,131,1, ++ 0,100,4,0,25,124,2,0,95,12,0,110,0,0,124,2, ++ 0,83,41,6,122,25,76,111,97,100,32,97,110,32,101,120, ++ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,46,78, ++ 122,33,101,120,116,101,110,115,105,111,110,32,109,111,100,117, ++ 108,101,32,108,111,97,100,101,100,32,102,114,111,109,32,123, ++ 33,114,125,114,247,0,0,0,114,85,0,0,0,114,117,0, ++ 0,0,41,14,114,70,0,0,0,114,115,0,0,0,114,107, ++ 0,0,0,90,12,108,111,97,100,95,100,121,110,97,109,105, ++ 99,114,36,0,0,0,114,153,0,0,0,114,220,0,0,0, ++ 114,61,0,0,0,114,39,0,0,0,114,247,0,0,0,114, ++ 205,0,0,0,114,58,0,0,0,114,251,0,0,0,114,33, ++ 0,0,0,41,4,114,72,0,0,0,114,159,0,0,0,114, ++ 180,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,5,1,0,0,172,6,0, ++ 0,115,24,0,0,0,0,5,13,1,9,1,21,1,16,1, ++ 15,1,22,1,28,1,9,1,12,1,6,1,28,1,122,31, ++ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, ++ 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, -+ 67,0,0,0,115,45,0,0,0,116,0,0,106,1,0,116, -+ 2,0,106,3,0,124,1,0,131,2,0,1,116,4,0,100, -+ 1,0,124,0,0,106,5,0,124,0,0,106,6,0,131,3, -+ 0,1,100,2,0,83,41,3,122,30,73,110,105,116,105,97, -+ 108,105,122,101,32,97,110,32,101,120,116,101,110,115,105,111, -+ 110,32,109,111,100,117,108,101,122,40,101,120,116,101,110,115, -+ 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, -+ 101,120,101,99,117,116,101,100,32,102,114,111,109,32,123,33, -+ 114,125,78,41,7,114,122,0,0,0,114,189,0,0,0,114, -+ 146,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, -+ 105,99,114,106,0,0,0,114,107,0,0,0,114,36,0,0, -+ 0,41,2,114,109,0,0,0,114,191,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,192,0,0, -+ 0,140,3,0,0,115,6,0,0,0,0,2,19,1,6,1, -+ 122,31,69,120,116,101,110,115,105,111,110,70,105,108,101,76, -+ 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, -+ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, -+ 0,0,3,0,0,0,115,48,0,0,0,116,0,0,124,0, -+ 0,106,1,0,131,1,0,100,1,0,25,137,0,0,116,2, -+ 0,135,0,0,102,1,0,100,2,0,100,3,0,134,0,0, -+ 116,3,0,68,131,1,0,131,1,0,83,41,4,122,49,82, -+ 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, -+ 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, -+ 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, -+ 114,30,0,0,0,99,1,0,0,0,0,0,0,0,2,0, -+ 0,0,4,0,0,0,51,0,0,0,115,31,0,0,0,124, -+ 0,0,93,21,0,125,1,0,136,0,0,100,0,0,124,1, -+ 0,23,107,2,0,86,1,113,3,0,100,1,0,83,41,2, -+ 114,186,0,0,0,78,114,5,0,0,0,41,2,114,23,0, -+ 0,0,218,6,115,117,102,102,105,120,41,1,218,9,102,105, -+ 108,101,95,110,97,109,101,114,5,0,0,0,114,6,0,0, -+ 0,250,9,60,103,101,110,101,120,112,114,62,149,3,0,0, -+ 115,2,0,0,0,6,1,122,49,69,120,116,101,110,115,105, -+ 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, -+ 112,97,99,107,97,103,101,46,60,108,111,99,97,108,115,62, -+ 46,60,103,101,110,101,120,112,114,62,41,4,114,39,0,0, -+ 0,114,36,0,0,0,218,3,97,110,121,218,18,69,88,84, -+ 69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,41, -+ 2,114,109,0,0,0,114,127,0,0,0,114,5,0,0,0, -+ 41,1,114,227,0,0,0,114,6,0,0,0,114,160,0,0, -+ 0,146,3,0,0,115,6,0,0,0,0,2,19,1,18,1, ++ 3,0,0,0,115,48,0,0,0,116,0,0,124,0,0,106, ++ 1,0,131,1,0,100,1,0,25,137,0,0,116,2,0,135, ++ 0,0,102,1,0,100,2,0,100,3,0,134,0,0,116,3, ++ 0,68,131,1,0,131,1,0,83,41,4,122,49,82,101,116, ++ 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, ++ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, ++ 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,30, ++ 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, ++ 4,0,0,0,51,0,0,0,115,31,0,0,0,124,0,0, ++ 93,21,0,125,1,0,136,0,0,100,0,0,124,1,0,23, ++ 107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,73, ++ 0,0,0,78,114,5,0,0,0,41,2,114,23,0,0,0, ++ 218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101, ++ 95,110,97,109,101,114,5,0,0,0,114,6,0,0,0,114, ++ 78,0,0,0,193,6,0,0,115,2,0,0,0,6,1,122, ++ 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, ++ 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, ++ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, ++ 114,62,41,4,114,39,0,0,0,114,36,0,0,0,114,79, ++ 0,0,0,218,18,69,88,84,69,78,83,73,79,78,95,83, ++ 85,70,70,73,88,69,83,41,2,114,72,0,0,0,114,159, ++ 0,0,0,114,5,0,0,0,41,1,114,59,1,0,0,114, ++ 6,0,0,0,114,220,0,0,0,190,6,0,0,115,6,0, ++ 0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115, ++ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, ++ 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, ++ 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, ++ 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, ++ 101,32,111,98,106,101,99,116,46,78,114,5,0,0,0,41, ++ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,16,1,0,0,196, ++ 6,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, ++ 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, ++ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, ++ 0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110, ++ 32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105, ++ 111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32, ++ 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, ++ 114,5,0,0,0,41,2,114,72,0,0,0,114,159,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,17,1,0,0,200,6,0,0,115,2,0,0,0,0,2, + 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, -+ 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, ++ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -+ 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, -+ 122,63,82,101,116,117,114,110,32,78,111,110,101,32,97,115, -+ 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, -+ 100,117,108,101,32,99,97,110,110,111,116,32,99,114,101,97, -+ 116,101,32,97,32,99,111,100,101,32,111,98,106,101,99,116, -+ 46,78,114,5,0,0,0,41,2,114,109,0,0,0,114,127, ++ 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, ++ 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, ++ 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, ++ 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, ++ 1,114,36,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,239,0,0,0,204,6,0,0,115,2,0,0,0,0, ++ 3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, ++ 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, ++ 97,109,101,78,41,13,114,58,0,0,0,114,57,0,0,0, ++ 114,59,0,0,0,114,60,0,0,0,114,73,0,0,0,114, ++ 230,0,0,0,114,51,1,0,0,114,157,0,0,0,114,5, ++ 1,0,0,114,220,0,0,0,114,16,1,0,0,114,17,1, ++ 0,0,114,239,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,57,1,0,0, ++ 153,6,0,0,115,18,0,0,0,12,6,6,2,12,4,12, ++ 4,12,3,18,18,12,6,12,4,12,4,114,57,1,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, ++ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, ++ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, ++ 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100, ++ 11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0, ++ 0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0, ++ 100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100, ++ 19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14, ++ 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, ++ 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, ++ 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, ++ 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, ++ 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, ++ 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, ++ 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, ++ 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, ++ 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, ++ 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, ++ 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, ++ 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, ++ 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, ++ 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, ++ 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, ++ 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, ++ 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, ++ 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, ++ 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, ++ 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, ++ 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52, ++ 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, ++ 0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0, ++ 0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0, ++ 95,5,0,100,0,0,83,41,1,78,41,6,114,71,0,0, ++ 0,114,254,0,0,0,114,232,0,0,0,218,16,95,103,101, ++ 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, ++ 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, ++ 218,12,95,112,97,116,104,95,102,105,110,100,101,114,41,4, ++ 114,72,0,0,0,114,68,0,0,0,114,36,0,0,0,218, ++ 11,112,97,116,104,95,102,105,110,100,101,114,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,114,73,0,0,0, ++ 217,6,0,0,115,8,0,0,0,0,1,9,1,9,1,21, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, ++ 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, ++ 53,0,0,0,124,0,0,106,0,0,106,1,0,100,1,0, ++ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, ++ 2,0,100,2,0,107,2,0,114,43,0,100,6,0,83,124, ++ 1,0,100,5,0,102,2,0,83,41,7,122,62,82,101,116, ++ 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, ++ 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, ++ 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, ++ 45,97,116,116,114,45,110,97,109,101,41,114,117,0,0,0, ++ 114,31,0,0,0,114,8,0,0,0,114,36,0,0,0,114, ++ 247,0,0,0,41,2,122,3,115,121,115,122,4,112,97,116, ++ 104,41,2,114,71,0,0,0,114,33,0,0,0,41,4,114, ++ 72,0,0,0,114,234,0,0,0,218,3,100,111,116,114,95, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,188,0,0,0,152,3,0,0,115,2,0,0,0, -+ 0,2,122,28,69,120,116,101,110,115,105,111,110,70,105,108, -+ 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -+ 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, -+ 122,53,82,101,116,117,114,110,32,78,111,110,101,32,97,115, -+ 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, -+ 101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,99, -+ 101,32,99,111,100,101,46,78,114,5,0,0,0,41,2,114, -+ 109,0,0,0,114,127,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,203,0,0,0,156,3,0, -+ 0,115,2,0,0,0,0,2,122,30,69,120,116,101,110,115, -+ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, -+ 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,7,0, -+ 0,0,124,0,0,106,0,0,83,41,1,122,58,82,101,116, -+ 117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32, -+ 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,32, -+ 97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,32, -+ 102,105,110,100,101,114,46,41,1,114,36,0,0,0,41,2, -+ 114,109,0,0,0,114,127,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,158,0,0,0,160,3, -+ 0,0,115,2,0,0,0,0,3,122,32,69,120,116,101,110, -+ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,103, -+ 101,116,95,102,105,108,101,110,97,109,101,78,41,14,114,113, -+ 0,0,0,114,112,0,0,0,114,114,0,0,0,114,115,0, -+ 0,0,114,186,0,0,0,114,214,0,0,0,114,216,0,0, -+ 0,114,187,0,0,0,114,192,0,0,0,114,160,0,0,0, -+ 114,188,0,0,0,114,203,0,0,0,114,124,0,0,0,114, -+ 158,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,225,0,0,0,113,3,0, -+ 0,115,20,0,0,0,12,6,6,2,12,4,12,4,12,3, -+ 12,8,12,6,12,6,12,4,12,4,114,225,0,0,0,99, -+ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,130,0,0,0,101,0,0,90,1,0,100, -+ 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, -+ 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, -+ 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, -+ 8,0,100,9,0,132,0,0,90,7,0,100,10,0,100,11, -+ 0,132,0,0,90,8,0,100,12,0,100,13,0,132,0,0, -+ 90,9,0,100,14,0,100,15,0,132,0,0,90,10,0,100, -+ 16,0,100,17,0,132,0,0,90,11,0,100,18,0,100,19, -+ 0,132,0,0,90,12,0,100,20,0,83,41,21,218,14,95, -+ 78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,1, -+ 0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,110, -+ 97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,101, -+ 39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,101, -+ 115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, -+ 101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,116, -+ 115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,44, -+ 32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,32, -+ 105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,32, -+ 112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,112, -+ 97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,105, -+ 115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,109, -+ 111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,104, -+ 32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,10, -+ 32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,102, -+ 105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,45, -+ 108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,116, -+ 104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,101, -+ 39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,115, -+ 121,115,46,112,97,116,104,46,99,4,0,0,0,0,0,0, -+ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,52,0, -+ 0,0,124,1,0,124,0,0,95,0,0,124,2,0,124,0, -+ 0,95,1,0,116,2,0,124,0,0,106,3,0,131,0,0, -+ 131,1,0,124,0,0,95,4,0,124,3,0,124,0,0,95, -+ 5,0,100,0,0,83,41,1,78,41,6,218,5,95,110,97, -+ 109,101,218,5,95,112,97,116,104,114,94,0,0,0,218,16, - 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, -- 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, -- 0,67,0,0,0,115,118,0,0,0,116,0,0,124,0,0, -- 106,1,0,131,0,0,131,1,0,125,1,0,124,1,0,124, -- 0,0,106,2,0,107,3,0,114,111,0,124,0,0,106,3, -- 0,124,0,0,106,4,0,124,1,0,131,2,0,125,2,0, -- 124,2,0,100,0,0,107,9,0,114,102,0,124,2,0,106, -- 5,0,100,0,0,107,8,0,114,102,0,124,2,0,106,6, -- 0,114,102,0,124,2,0,106,6,0,124,0,0,95,7,0, -- 124,1,0,124,0,0,95,2,0,124,0,0,106,7,0,83, -- 41,1,78,41,8,114,93,0,0,0,114,233,0,0,0,114, -- 234,0,0,0,114,235,0,0,0,114,231,0,0,0,114,127, -- 0,0,0,114,156,0,0,0,114,232,0,0,0,41,3,114, -- 108,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, -- 104,114,164,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,12,95,114,101,99,97,108,99,117,108, -- 97,116,101,193,3,0,0,115,16,0,0,0,0,2,18,1, -- 15,1,21,3,27,1,9,1,12,1,9,1,122,27,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101, -- 99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,0, -- 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, -- 0,0,0,116,0,0,124,0,0,106,1,0,131,0,0,131, -- 1,0,83,41,1,78,41,2,218,4,105,116,101,114,114,240, -- 0,0,0,41,1,114,108,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,8,95,95,105,116,101, -- 114,95,95,206,3,0,0,115,2,0,0,0,0,1,122,23, -- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, -- 95,105,116,101,114,95,95,99,1,0,0,0,0,0,0,0, -+ 218,17,95,108,97,115,116,95,112,97,114,101,110,116,95,112, -+ 97,116,104,218,12,95,112,97,116,104,95,102,105,110,100,101, -+ 114,41,4,114,109,0,0,0,114,107,0,0,0,114,36,0, -+ 0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,186, -+ 0,0,0,173,3,0,0,115,8,0,0,0,0,1,9,1, -+ 9,1,21,1,122,23,95,78,97,109,101,115,112,97,99,101, -+ 80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0, -+ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, -+ 0,0,115,53,0,0,0,124,0,0,106,0,0,106,1,0, -+ 100,1,0,131,1,0,92,3,0,125,1,0,125,2,0,125, -+ 3,0,124,2,0,100,2,0,107,2,0,114,43,0,100,6, -+ 0,83,124,1,0,100,5,0,102,2,0,83,41,7,122,62, -+ 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, -+ 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, -+ 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, -+ 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,59, -+ 0,0,0,114,31,0,0,0,114,8,0,0,0,114,36,0, -+ 0,0,90,8,95,95,112,97,116,104,95,95,41,2,122,3, -+ 115,121,115,122,4,112,97,116,104,41,2,114,232,0,0,0, -+ 114,33,0,0,0,41,4,114,109,0,0,0,114,223,0,0, -+ 0,218,3,100,111,116,90,2,109,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,23,95,102,105,110,100, -+ 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, -+ 101,115,179,3,0,0,115,8,0,0,0,0,2,27,1,12, -+ 2,4,3,122,38,95,78,97,109,101,115,112,97,99,101,80, -+ 97,116,104,46,95,102,105,110,100,95,112,97,114,101,110,116, -+ 95,112,97,116,104,95,110,97,109,101,115,99,1,0,0,0, -+ 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, -+ 115,38,0,0,0,124,0,0,106,0,0,131,0,0,92,2, -+ 0,125,1,0,125,2,0,116,1,0,116,2,0,106,3,0, -+ 124,1,0,25,124,2,0,131,2,0,83,41,1,78,41,4, -+ 114,239,0,0,0,114,118,0,0,0,114,8,0,0,0,218, -+ 7,109,111,100,117,108,101,115,41,3,114,109,0,0,0,90, -+ 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, -+ 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, -+ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,234,0,0,0,189,3,0,0,115,4,0,0,0, -+ 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, -+ 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, -+ 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, -+ 0,0,3,0,0,0,67,0,0,0,115,118,0,0,0,116, -+ 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, -+ 0,124,1,0,124,0,0,106,2,0,107,3,0,114,111,0, -+ 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, -+ 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,102, -+ 0,124,2,0,106,5,0,100,0,0,107,8,0,114,102,0, -+ 124,2,0,106,6,0,114,102,0,124,2,0,106,6,0,124, -+ 0,0,95,7,0,124,1,0,124,0,0,95,2,0,124,0, -+ 0,106,7,0,83,41,1,78,41,8,114,94,0,0,0,114, -+ 234,0,0,0,114,235,0,0,0,114,236,0,0,0,114,232, -+ 0,0,0,114,128,0,0,0,114,157,0,0,0,114,233,0, -+ 0,0,41,3,114,109,0,0,0,90,11,112,97,114,101,110, -+ 116,95,112,97,116,104,114,165,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,12,95,114,101,99, -+ 97,108,99,117,108,97,116,101,193,3,0,0,115,16,0,0, -+ 0,0,2,18,1,15,1,21,3,27,1,9,1,12,1,9, -+ 1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,114,101,99,97,108,99,117,108,97,116,101,99,1, -+ 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, -+ 0,0,0,115,16,0,0,0,116,0,0,124,0,0,106,1, -+ 0,131,0,0,131,1,0,83,41,1,78,41,2,218,4,105, -+ 116,101,114,114,241,0,0,0,41,1,114,109,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,8, -+ 95,95,105,116,101,114,95,95,206,3,0,0,115,2,0,0, -+ 0,0,1,122,23,95,78,97,109,101,115,112,97,99,101,80, -+ 97,116,104,46,95,95,105,116,101,114,95,95,99,1,0,0, ++ 0,0,218,23,95,102,105,110,100,95,112,97,114,101,110,116, ++ 95,112,97,116,104,95,110,97,109,101,115,223,6,0,0,115, ++ 8,0,0,0,0,2,27,1,12,2,4,3,122,38,95,78, ++ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, ++ 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, ++ 97,109,101,115,99,1,0,0,0,0,0,0,0,3,0,0, ++ 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, ++ 0,106,0,0,131,0,0,92,2,0,125,1,0,125,2,0, ++ 116,1,0,116,2,0,106,3,0,124,1,0,25,124,2,0, ++ 131,2,0,83,41,1,78,41,4,114,67,1,0,0,114,63, ++ 0,0,0,114,8,0,0,0,114,74,0,0,0,41,3,114, ++ 72,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, ++ 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, ++ 116,116,114,95,110,97,109,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,62,1,0,0,233,6,0,0, ++ 115,4,0,0,0,0,1,18,1,122,31,95,78,97,109,101, ++ 115,112,97,99,101,80,97,116,104,46,95,103,101,116,95,112, ++ 97,114,101,110,116,95,112,97,116,104,99,1,0,0,0,0, ++ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, ++ 127,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, ++ 131,1,0,125,1,0,124,1,0,124,0,0,106,2,0,107, ++ 3,0,114,120,0,124,0,0,106,3,0,124,0,0,106,4, ++ 0,124,1,0,131,2,0,125,2,0,124,2,0,100,0,0, ++ 107,9,0,114,108,0,124,2,0,106,5,0,100,0,0,107, ++ 8,0,114,108,0,124,2,0,106,6,0,114,108,0,124,2, ++ 0,106,6,0,124,0,0,95,7,0,113,108,0,110,0,0, ++ 124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106, ++ 7,0,83,41,1,78,41,8,114,232,0,0,0,114,62,1, ++ 0,0,114,63,1,0,0,114,64,1,0,0,114,71,0,0, ++ 0,114,170,0,0,0,114,221,0,0,0,114,254,0,0,0, ++ 41,3,114,72,0,0,0,90,11,112,97,114,101,110,116,95, ++ 112,97,116,104,114,178,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, ++ 99,117,108,97,116,101,237,6,0,0,115,16,0,0,0,0, ++ 2,18,1,15,1,21,3,27,1,9,1,18,1,12,1,122, ++ 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, + 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, -+ 0,0,131,1,0,83,41,1,78,41,2,114,32,0,0,0, -+ 114,241,0,0,0,41,1,114,109,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,7,95,95,108, -+ 101,110,95,95,209,3,0,0,115,2,0,0,0,0,1,122, -+ 22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, -+ 95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -- 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, -- 83,41,1,78,41,2,114,31,0,0,0,114,240,0,0,0, -- 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,7,95,95,108,101,110,95,95,209, -- 3,0,0,115,2,0,0,0,0,1,122,22,95,78,97,109, -- 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, -- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, -- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, -- 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, -- 123,33,114,125,41,41,2,114,47,0,0,0,114,232,0,0, -- 0,41,1,114,108,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,8,95,95,114,101,112,114,95, -- 95,212,3,0,0,115,2,0,0,0,0,1,122,23,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, -- 101,112,114,95,95,99,2,0,0,0,0,0,0,0,2,0, -- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, -- 1,0,124,0,0,106,0,0,131,0,0,107,6,0,83,41, -- 1,78,41,1,114,240,0,0,0,41,2,114,108,0,0,0, -- 218,4,105,116,101,109,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,12,95,95,99,111,110,116,97,105,110, -- 115,95,95,215,3,0,0,115,2,0,0,0,0,1,122,27, -- 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, -- 95,99,111,110,116,97,105,110,115,95,95,99,2,0,0,0, ++ 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, ++ 114,114,68,1,0,0,41,1,114,72,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, ++ 105,116,101,114,95,95,250,6,0,0,115,2,0,0,0,0, ++ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, ++ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, ++ 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, ++ 131,1,0,83,41,1,78,41,2,114,32,0,0,0,114,68, ++ 1,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, ++ 95,95,253,6,0,0,115,2,0,0,0,0,1,122,22,95, ++ 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, ++ 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, ++ 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, ++ 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, ++ 116,104,40,123,33,114,125,41,41,2,114,48,0,0,0,114, ++ 254,0,0,0,41,1,114,72,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,102,0,0,0,0, ++ 7,0,0,115,2,0,0,0,0,1,122,23,95,78,97,109, ++ 101,115,112,97,99,101,80,97,116,104,46,95,95,114,101,112, ++ 114,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, ++ 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,0, ++ 124,0,0,106,0,0,131,0,0,107,6,0,83,41,1,78, ++ 41,1,114,68,1,0,0,41,2,114,72,0,0,0,218,4, ++ 105,116,101,109,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, ++ 95,3,7,0,0,115,2,0,0,0,0,1,122,27,95,78, ++ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, ++ 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, ++ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,20, ++ 0,0,0,124,0,0,106,0,0,106,1,0,124,1,0,131, ++ 1,0,1,100,0,0,83,41,1,78,41,2,114,254,0,0, ++ 0,114,224,0,0,0,41,2,114,72,0,0,0,114,72,1, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,224,0,0,0,6,7,0,0,115,2,0,0,0,0, ++ 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,97,112,112,101,110,100,78,41,13,114,58,0,0,0, ++ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, ++ 73,0,0,0,114,67,1,0,0,114,62,1,0,0,114,68, ++ 1,0,0,114,70,1,0,0,114,71,1,0,0,114,102,0, ++ 0,0,114,73,1,0,0,114,224,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,61,1,0,0,210,6,0,0,115,20,0,0,0,12,5, ++ 6,2,12,6,12,10,12,4,12,13,12,3,12,3,12,3, ++ 12,3,114,61,1,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,3,0,0,0,64,0,0,0,115,106,0,0, + 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, +- 90,3,0,101,4,0,100,2,0,100,3,0,132,0,0,131, +- 1,0,90,5,0,101,6,0,100,4,0,100,4,0,100,5, +- 0,100,6,0,132,2,0,131,1,0,90,7,0,101,6,0, +- 100,4,0,100,7,0,100,8,0,132,1,0,131,1,0,90, +- 8,0,101,4,0,100,9,0,100,10,0,132,0,0,131,1, +- 0,90,9,0,101,6,0,100,11,0,100,12,0,132,0,0, +- 131,1,0,90,10,0,101,6,0,101,11,0,100,13,0,100, +- 14,0,132,0,0,131,1,0,131,1,0,90,12,0,101,6, +- 0,101,11,0,100,15,0,100,16,0,132,0,0,131,1,0, +- 131,1,0,90,13,0,101,6,0,101,11,0,100,17,0,100, +- 18,0,132,0,0,131,1,0,131,1,0,90,14,0,100,4, +- 0,83,41,19,218,14,70,114,111,122,101,110,73,109,112,111, +- 114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,32, +- 105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,101, +- 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, +- 65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,32, +- 101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,32, +- 115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,116, +- 111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,100, +- 32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,105, +- 97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,10, +- 32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,0, ++ 100,2,0,132,0,0,90,3,0,101,4,0,100,3,0,100, ++ 4,0,132,0,0,131,1,0,90,5,0,100,5,0,100,6, ++ 0,132,0,0,90,6,0,100,7,0,100,8,0,132,0,0, ++ 90,7,0,100,9,0,100,10,0,132,0,0,90,8,0,100, ++ 11,0,100,12,0,132,0,0,90,9,0,100,13,0,100,14, ++ 0,132,0,0,90,10,0,100,15,0,83,41,16,114,252,0, ++ 0,0,99,4,0,0,0,0,0,0,0,4,0,0,0,4, ++ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, ++ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, ++ 0,100,0,0,83,41,1,78,41,2,114,61,1,0,0,114, ++ 254,0,0,0,41,4,114,72,0,0,0,114,68,0,0,0, ++ 114,36,0,0,0,114,65,1,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,73,0,0,0,12,7, ++ 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, ++ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, ++ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, +- 0,106,0,0,124,0,0,106,1,0,131,1,0,83,41,2, ++ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, + 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, + 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, +@@ -2205,2171 +3230,1147 @@ + 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, + 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, + 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, +- 32,32,32,32,32,122,22,60,109,111,100,117,108,101,32,123, +- 33,114,125,32,40,102,114,111,122,101,110,41,62,41,2,114, +- 47,0,0,0,114,57,0,0,0,41,1,218,1,109,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,205,0, +- 0,0,47,5,0,0,115,2,0,0,0,0,7,122,26,70, +- 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111, +- 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0, +- 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, +- 42,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, +- 114,34,0,116,2,0,124,1,0,124,0,0,100,1,0,100, +- 2,0,131,2,1,83,100,0,0,83,100,0,0,83,41,3, +- 78,114,217,0,0,0,90,6,102,114,111,122,101,110,41,3, +- 114,106,0,0,0,114,162,0,0,0,114,173,0,0,0,41, +- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,12,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,13,1,0,0,56,5,0,0,115,6,0, +- 0,0,0,2,15,1,19,2,122,24,70,114,111,122,101,110, +- 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, +- 101,99,99,3,0,0,0,0,0,0,0,3,0,0,0,2, +- 0,0,0,67,0,0,0,115,23,0,0,0,116,0,0,106, +- 1,0,124,1,0,131,1,0,114,19,0,124,0,0,83,100, +- 1,0,83,41,2,122,93,70,105,110,100,32,97,32,102,114, +- 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, +- 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, +- 32,32,32,32,78,41,2,114,106,0,0,0,114,162,0,0, +- 0,41,3,114,11,1,0,0,114,158,0,0,0,114,35,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,14,1,0,0,63,5,0,0,115,2,0,0,0,0, +- 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, +- 114,46,102,105,110,100,95,109,111,100,117,108,101,99,1,0, +- 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, +- 0,0,115,95,0,0,0,124,0,0,106,0,0,106,1,0, +- 125,1,0,116,2,0,106,3,0,124,1,0,131,1,0,115, +- 57,0,116,4,0,100,1,0,106,5,0,124,1,0,131,1, +- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, +- 116,6,0,116,2,0,106,7,0,124,1,0,131,2,0,125, +- 2,0,116,8,0,124,2,0,124,0,0,106,9,0,131,2, +- 0,1,100,0,0,83,41,3,78,122,27,123,33,114,125,32, +- 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, +- 109,111,100,117,108,101,114,67,0,0,0,41,10,114,208,0, +- 0,0,114,67,0,0,0,114,106,0,0,0,114,162,0,0, +- 0,114,153,0,0,0,114,47,0,0,0,114,114,0,0,0, +- 218,17,103,101,116,95,102,114,111,122,101,110,95,111,98,106, +- 101,99,116,114,175,0,0,0,114,63,0,0,0,41,3,114, +- 179,0,0,0,114,67,0,0,0,114,194,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, +- 0,0,72,5,0,0,115,12,0,0,0,0,2,12,1,15, +- 1,18,1,12,1,18,1,122,26,70,114,111,122,101,110,73, +- 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, +- 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,0, +- 124,0,0,124,1,0,131,2,0,83,41,1,122,95,76,111, +- 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, ++ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, ++ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, ++ 41,2,114,48,0,0,0,114,58,0,0,0,41,2,114,12, ++ 1,0,0,114,180,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,206,0,0,0,15,7,0,0, ++ 115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, ++ 95,114,101,112,114,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, ++ 1,0,83,41,2,78,84,114,5,0,0,0,41,2,114,72, ++ 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,114,220,0,0,0,24,7,0,0, ++ 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, ++ 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, ++ 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, ++ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, ++ 0,83,41,2,78,114,31,0,0,0,114,5,0,0,0,41, ++ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,114,17,1,0,0,27, ++ 7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, ++ 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, ++ 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, ++ 2,0,0,0,6,0,0,0,67,0,0,0,115,22,0,0, ++ 0,116,0,0,100,1,0,100,2,0,100,3,0,100,4,0, ++ 100,5,0,131,3,1,83,41,6,78,114,31,0,0,0,122, ++ 8,60,115,116,114,105,110,103,62,114,176,0,0,0,114,43, ++ 1,0,0,84,41,1,114,44,1,0,0,41,2,114,72,0, ++ 0,0,114,159,0,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,114,16,1,0,0,30,7,0,0,115, ++ 2,0,0,0,0,1,122,25,95,78,97,109,101,115,112,97, ++ 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, ++ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, ++ 0,0,67,0,0,0,115,4,0,0,0,100,0,0,83,41, ++ 1,78,114,5,0,0,0,41,2,114,72,0,0,0,114,180, ++ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,114,2,1,0,0,33,7,0,0,115,2,0,0,0, ++ 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, ++ 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, ++ 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,67,0,0,0,115,29,0,0,0,116,0,0,100,1,0, ++ 124,0,0,106,1,0,131,2,0,1,116,2,0,124,0,0, ++ 124,1,0,131,2,0,83,41,2,122,98,76,111,97,100,32, ++ 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, +- 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, +- 180,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 4,1,0,0,81,5,0,0,115,2,0,0,0,0,7,122, +- 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, +- 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -- 115,20,0,0,0,124,0,0,106,0,0,106,1,0,124,1, -- 0,131,1,0,1,100,0,0,83,41,1,78,41,2,114,232, -- 0,0,0,114,163,0,0,0,41,2,114,108,0,0,0,114, -- 245,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,163,0,0,0,218,3,0,0,115,2,0,0, -- 0,0,1,122,21,95,78,97,109,101,115,112,97,99,101,80, -- 97,116,104,46,97,112,112,101,110,100,78,41,13,114,112,0, -- 0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0, -- 0,114,185,0,0,0,114,238,0,0,0,114,233,0,0,0, -- 114,240,0,0,0,114,242,0,0,0,114,243,0,0,0,114, -- 244,0,0,0,114,246,0,0,0,114,163,0,0,0,114,4, +- 115,13,0,0,0,116,0,0,106,1,0,124,1,0,131,1, +- 0,83,41,1,122,45,82,101,116,117,114,110,32,116,104,101, +- 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, +- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, +- 108,101,46,41,2,114,106,0,0,0,114,21,1,0,0,41, +- 2,114,11,1,0,0,114,158,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,15,1,0,0,90, +- 5,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122, +- 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, +- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108, +- 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, +- 0,41,2,114,11,1,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, +- 0,96,5,0,0,115,2,0,0,0,0,4,122,25,70,114, +- 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, +- 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, +- 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, +- 0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1, +- 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, +- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, +- 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, +- 41,2,114,106,0,0,0,90,17,105,115,95,102,114,111,122, +- 101,110,95,112,97,99,107,97,103,101,41,2,114,11,1,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,219,0,0,0,102,5,0,0,115,2, +- 0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112, +- 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, +- 41,15,114,57,0,0,0,114,56,0,0,0,114,58,0,0, +- 0,114,59,0,0,0,114,17,1,0,0,114,205,0,0,0, +- 114,18,1,0,0,114,13,1,0,0,114,14,1,0,0,114, +- 1,1,0,0,114,4,1,0,0,114,164,0,0,0,114,15, +- 1,0,0,114,16,1,0,0,114,219,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,19,1,0,0,38,5,0,0,115,28,0,0,0,12, +- 7,6,2,18,9,3,1,21,6,3,1,18,8,18,9,18, +- 9,3,1,21,5,3,1,21,5,3,1,114,19,1,0,0, ++ 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, ++ 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, ++ 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, ++ 32,123,33,114,125,41,3,114,153,0,0,0,114,254,0,0, ++ 0,114,181,0,0,0,41,2,114,72,0,0,0,114,159,0, ++ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, ++ 0,114,5,1,0,0,36,7,0,0,115,4,0,0,0,0, ++ 7,16,1,122,28,95,78,97,109,101,115,112,97,99,101,76, ++ 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, ++ 101,78,41,11,114,58,0,0,0,114,57,0,0,0,114,59, ++ 0,0,0,114,73,0,0,0,114,19,1,0,0,114,206,0, ++ 0,0,114,220,0,0,0,114,17,1,0,0,114,16,1,0, ++ 0,114,2,1,0,0,114,5,1,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 252,0,0,0,11,7,0,0,115,14,0,0,0,12,1,12, ++ 3,18,9,12,3,12,3,12,3,12,3,114,252,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, +- 0,64,0,0,0,115,121,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,90, +- 4,0,100,3,0,90,5,0,100,4,0,90,6,0,101,7, +- 0,100,5,0,100,6,0,132,0,0,131,1,0,90,8,0, +- 101,7,0,100,7,0,100,8,0,132,0,0,131,1,0,90, +- 9,0,101,7,0,100,9,0,100,9,0,100,10,0,100,11, +- 0,132,2,0,131,1,0,90,10,0,101,7,0,100,9,0, +- 100,12,0,100,13,0,132,1,0,131,1,0,90,11,0,100, +- 9,0,83,41,14,218,21,87,105,110,100,111,119,115,82,101, +- 103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101, +- 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, +- 111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97, +- 114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111, +- 119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111, +- 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, +- 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, +- 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, +- 102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119, +- 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, +- 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, +- 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, +- 108,110,97,109,101,125,92,68,101,98,117,103,70,99,2,0, +- 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, +- 0,0,115,67,0,0,0,121,23,0,116,0,0,106,1,0, +- 116,0,0,106,2,0,124,1,0,131,2,0,83,87,110,37, +- 0,4,116,3,0,107,10,0,114,62,0,1,1,1,116,0, +- 0,106,1,0,116,0,0,106,4,0,124,1,0,131,2,0, +- 83,89,110,1,0,88,100,0,0,83,41,1,78,41,5,218, +- 7,95,119,105,110,114,101,103,90,7,79,112,101,110,75,101, +- 121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95, +- 85,83,69,82,114,40,0,0,0,90,18,72,75,69,89,95, +- 76,79,67,65,76,95,77,65,67,72,73,78,69,41,2,114, +- 11,1,0,0,218,3,107,101,121,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,14,95,111,112,101,110,95, +- 114,101,103,105,115,116,114,121,121,5,0,0,115,8,0,0, +- 0,0,2,3,1,23,1,13,1,122,36,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, +- 2,0,0,0,0,0,0,0,6,0,0,0,16,0,0,0, +- 67,0,0,0,115,142,0,0,0,124,0,0,106,0,0,114, +- 21,0,124,0,0,106,1,0,125,2,0,110,9,0,124,0, +- 0,106,2,0,125,2,0,124,2,0,106,3,0,100,1,0, +- 124,1,0,100,2,0,116,4,0,106,5,0,100,0,0,100, +- 3,0,133,2,0,25,131,0,2,125,3,0,121,46,0,124, +- 0,0,106,6,0,124,3,0,131,1,0,143,25,0,125,4, +- 0,116,7,0,106,8,0,124,4,0,100,4,0,131,2,0, +- 125,5,0,87,100,0,0,81,88,87,110,22,0,4,116,9, +- 0,107,10,0,114,137,0,1,1,1,100,0,0,83,89,110, +- 1,0,88,124,5,0,83,41,5,78,114,158,0,0,0,90, +- 11,115,121,115,95,118,101,114,115,105,111,110,114,136,0,0, +- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, +- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, +- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, +- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, +- 0,218,7,118,101,114,115,105,111,110,114,25,1,0,0,114, +- 23,1,0,0,90,10,81,117,101,114,121,86,97,108,117,101, +- 114,40,0,0,0,41,6,114,11,1,0,0,114,158,0,0, +- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, +- 24,1,0,0,90,4,104,107,101,121,218,8,102,105,108,101, +- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, +- 105,115,116,114,121,128,5,0,0,115,22,0,0,0,0,2, +- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,28,1, +- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, +- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, +- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, +- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, +- 0,0,115,155,0,0,0,124,0,0,106,0,0,124,1,0, +- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, +- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, +- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, +- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,78,0, +- 116,3,0,131,0,0,68,93,67,0,92,2,0,125,5,0, +- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, +- 1,0,131,1,0,114,80,0,116,6,0,124,1,0,124,5, +- 0,124,1,0,124,4,0,131,2,0,100,1,0,124,4,0, +- 131,2,1,125,7,0,124,7,0,83,113,80,0,87,100,0, +- 0,83,41,2,78,114,217,0,0,0,41,7,114,31,1,0, +- 0,114,39,0,0,0,114,40,0,0,0,114,240,0,0,0, +- 114,230,0,0,0,114,231,0,0,0,114,173,0,0,0,41, +- 8,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, +- 114,12,1,0,0,114,30,1,0,0,114,169,0,0,0,114, +- 127,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,13,1,0,0,143,5,0, +- 0,115,24,0,0,0,0,2,15,1,12,1,4,1,3,1, +- 14,1,13,1,9,1,22,1,21,1,21,1,9,1,122,31, +- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, +- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, +- 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, +- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, +- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, +- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, +- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, +- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, +- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, +- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,78,41,2,114,13,1,0,0,114,169, +- 0,0,0,41,4,114,11,1,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,14,1,0,0,158,5,0, +- 0,115,8,0,0,0,0,7,18,1,12,1,7,2,122,33, +- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, +- 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, +- 101,41,12,114,57,0,0,0,114,56,0,0,0,114,58,0, +- 0,0,114,59,0,0,0,114,28,1,0,0,114,27,1,0, +- 0,114,26,1,0,0,114,18,1,0,0,114,25,1,0,0, +- 114,31,1,0,0,114,13,1,0,0,114,14,1,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,22,1,0,0,109,5,0,0,115,20,0,0, +- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, +- 1,21,14,3,1,114,22,1,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, +- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, +- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, +- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6, +- 0,90,7,0,100,6,0,83,41,7,218,13,95,76,111,97, +- 100,101,114,66,97,115,105,99,115,122,83,66,97,115,101,32, +- 99,108,97,115,115,32,111,102,32,99,111,109,109,111,110,32, +- 99,111,100,101,32,110,101,101,100,101,100,32,98,121,32,98, +- 111,116,104,32,83,111,117,114,99,101,76,111,97,100,101,114, +- 32,97,110,100,10,32,32,32,32,83,111,117,114,99,101,108, +- 101,115,115,70,105,108,101,76,111,97,100,101,114,46,99,2, +- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, +- 0,0,0,115,88,0,0,0,116,0,0,124,0,0,106,1, +- 0,124,1,0,131,1,0,131,1,0,100,1,0,25,125,2, +- 0,124,2,0,106,2,0,100,2,0,100,1,0,131,2,0, +- 100,3,0,25,125,3,0,124,1,0,106,3,0,100,2,0, +- 131,1,0,100,4,0,25,125,4,0,124,3,0,100,5,0, +- 107,2,0,111,87,0,124,4,0,100,5,0,107,3,0,83, +- 41,6,122,141,67,111,110,99,114,101,116,101,32,105,109,112, +- 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, +- 110,115,112,101,99,116,76,111,97,100,101,114,46,105,115,95, +- 112,97,99,107,97,103,101,32,98,121,32,99,104,101,99,107, +- 105,110,103,32,105,102,10,32,32,32,32,32,32,32,32,116, +- 104,101,32,112,97,116,104,32,114,101,116,117,114,110,101,100, +- 32,98,121,32,103,101,116,95,102,105,108,101,110,97,109,101, +- 32,104,97,115,32,97,32,102,105,108,101,110,97,109,101,32, +- 111,102,32,39,95,95,105,110,105,116,95,95,46,112,121,39, +- 46,114,29,0,0,0,114,116,0,0,0,114,84,0,0,0, +- 114,115,0,0,0,114,72,0,0,0,41,4,114,38,0,0, +- 0,114,238,0,0,0,114,34,0,0,0,114,32,0,0,0, +- 41,5,114,71,0,0,0,114,158,0,0,0,114,131,0,0, +- 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, +- 90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,177, +- 5,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1, +- 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, +- 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, +- 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, +- 80,0,0,0,124,0,0,106,0,0,124,1,0,106,1,0, +- 131,1,0,125,2,0,124,2,0,100,1,0,107,8,0,114, +- 57,0,116,2,0,100,2,0,106,3,0,124,1,0,106,1, +- 0,131,1,0,131,1,0,130,1,0,110,0,0,116,4,0, +- 116,5,0,124,2,0,124,1,0,106,6,0,131,3,0,1, +- 100,1,0,83,41,3,122,19,69,120,101,99,117,116,101,32, +- 116,104,101,32,109,111,100,117,108,101,46,78,122,52,99,97, +- 110,110,111,116,32,108,111,97,100,32,109,111,100,117,108,101, +- 32,123,33,114,125,32,119,104,101,110,32,103,101,116,95,99, +- 111,100,101,40,41,32,114,101,116,117,114,110,115,32,78,111, +- 110,101,41,7,114,15,1,0,0,114,57,0,0,0,114,153, +- 0,0,0,114,47,0,0,0,114,114,0,0,0,114,175,0, +- 0,0,114,63,0,0,0,41,3,114,71,0,0,0,114,179, +- 0,0,0,114,194,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,1,1,0,0,185,5,0,0, +- 115,10,0,0,0,0,2,18,1,12,1,3,1,24,1,122, +- 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,101, +- 120,101,99,95,109,111,100,117,108,101,78,41,8,114,57,0, +- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, +- 0,114,219,0,0,0,114,1,1,0,0,114,180,0,0,0, +- 114,4,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,32,1,0,0,172,5, +- 0,0,115,8,0,0,0,12,3,6,2,12,8,12,8,114, +- 32,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, +- 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, +- 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, +- 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, +- 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, +- 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, +- 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, +- 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, +- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, +- 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, +- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, +- 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, +- 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, +- 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, +- 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, +- 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, +- 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, +- 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, +- 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, +- 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, +- 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, +- 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, +- 114,71,0,0,0,114,35,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,10,112,97,116,104,95, +- 109,116,105,109,101,198,5,0,0,115,2,0,0,0,0,6, +- 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, +- 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,20, +- 0,0,0,105,1,0,124,0,0,106,0,0,124,1,0,131, +- 1,0,100,1,0,54,83,41,2,97,170,1,0,0,79,112, +- 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, +- 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, +- 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, +- 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, +- 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, +- 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, +- 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, +- 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, +- 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, +- 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, +- 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, +- 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, +- 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, +- 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, +- 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, +- 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, +- 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, +- 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, +- 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, +- 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, +- 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, +- 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, +- 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, +- 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, +- 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, +- 32,32,32,32,32,32,32,32,114,183,0,0,0,41,1,114, +- 35,1,0,0,41,2,114,71,0,0,0,114,35,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 10,112,97,116,104,95,115,116,97,116,115,206,5,0,0,115, +- 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, +- 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, +- 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, +- 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, +- 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, +- 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, +- 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, +- 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, +- 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, +- 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, +- 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, +- 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, +- 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, +- 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, +- 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, +- 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, +- 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, +- 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, +- 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, +- 71,0,0,0,114,141,0,0,0,90,10,99,97,99,104,101, +- 95,112,97,116,104,114,53,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,15,95,99,97,99,104, +- 101,95,98,121,116,101,99,111,100,101,219,5,0,0,115,2, +- 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, +- 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, +- 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, +- 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, +- 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, +- 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, +- 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, +- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, +- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, +- 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, +- 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, +- 115,46,10,32,32,32,32,32,32,32,32,78,114,4,0,0, +- 0,41,3,114,71,0,0,0,114,35,0,0,0,114,53,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,37,1,0,0,229,5,0,0,115,0,0,0,0,122, +- 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, +- 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, +- 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, +- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, +- 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, +- 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, +- 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, +- 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, +- 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, +- 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, +- 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, +- 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, +- 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, +- 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, +- 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, +- 103,101,116,95,100,97,116,97,40,41,114,67,0,0,0,78, +- 41,5,114,238,0,0,0,218,8,103,101,116,95,100,97,116, +- 97,114,40,0,0,0,114,153,0,0,0,114,203,0,0,0, +- 41,5,114,71,0,0,0,114,158,0,0,0,114,35,0,0, +- 0,114,201,0,0,0,218,3,101,120,99,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,236, +- 5,0,0,115,14,0,0,0,0,2,15,1,3,1,19,1, +- 18,1,9,1,31,1,122,23,83,111,117,114,99,101,76,111, +- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,218, +- 9,95,111,112,116,105,109,105,122,101,114,29,0,0,0,99, +- 3,0,0,0,1,0,0,0,4,0,0,0,9,0,0,0, +- 67,0,0,0,115,31,0,0,0,116,0,0,116,1,0,124, +- 1,0,124,2,0,100,1,0,100,2,0,100,3,0,100,4, +- 0,124,3,0,131,4,2,83,41,5,122,130,82,101,116,117, +- 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, +- 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, +- 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, +- 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, +- 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, +- 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, +- 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, +- 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,175, +- 0,0,0,218,12,100,111,110,116,95,105,110,104,101,114,105, +- 116,84,114,118,0,0,0,41,2,114,114,0,0,0,218,7, +- 99,111,109,112,105,108,101,41,4,114,71,0,0,0,114,53, +- 0,0,0,114,35,0,0,0,114,41,1,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,218,14,115,111, +- 117,114,99,101,95,116,111,95,99,111,100,101,246,5,0,0, +- 115,4,0,0,0,0,5,18,1,122,27,83,111,117,114,99, +- 101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,116, +- 111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,10, +- 0,0,0,45,0,0,0,67,0,0,0,115,177,1,0,0, +- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,100, +- 1,0,125,3,0,121,16,0,116,1,0,124,2,0,131,1, +- 0,125,4,0,87,110,24,0,4,116,2,0,107,10,0,114, +- 63,0,1,1,1,100,1,0,125,4,0,89,110,202,0,88, +- 121,19,0,124,0,0,106,3,0,124,2,0,131,1,0,125, +- 5,0,87,110,18,0,4,116,4,0,107,10,0,114,103,0, +- 1,1,1,89,110,162,0,88,116,5,0,124,5,0,100,2, +- 0,25,131,1,0,125,3,0,121,19,0,124,0,0,106,6, +- 0,124,4,0,131,1,0,125,6,0,87,110,18,0,4,116, +- 7,0,107,10,0,114,159,0,1,1,1,89,110,106,0,88, +- 121,34,0,116,8,0,124,6,0,100,3,0,124,5,0,100, +- 4,0,124,1,0,100,5,0,124,4,0,131,1,3,125,7, +- 0,87,110,24,0,4,116,9,0,116,10,0,102,2,0,107, +- 10,0,114,220,0,1,1,1,89,110,45,0,88,116,11,0, +- 100,6,0,124,4,0,124,2,0,131,3,0,1,116,12,0, +- 124,7,0,100,4,0,124,1,0,100,7,0,124,4,0,100, +- 8,0,124,2,0,131,1,3,83,124,0,0,106,6,0,124, +- 2,0,131,1,0,125,8,0,124,0,0,106,13,0,124,8, +- 0,124,2,0,131,2,0,125,9,0,116,11,0,100,9,0, +- 124,2,0,131,2,0,1,116,14,0,106,15,0,12,114,173, +- 1,124,4,0,100,1,0,107,9,0,114,173,1,124,3,0, +- 100,1,0,107,9,0,114,173,1,116,16,0,124,9,0,124, +- 3,0,116,17,0,124,8,0,131,1,0,131,3,0,125,6, +- 0,121,36,0,124,0,0,106,18,0,124,2,0,124,4,0, +- 124,6,0,131,3,0,1,116,11,0,100,10,0,124,4,0, +- 131,2,0,1,87,113,173,1,4,116,2,0,107,10,0,114, +- 169,1,1,1,1,89,113,173,1,88,110,0,0,124,9,0, +- 83,41,11,122,190,67,111,110,99,114,101,116,101,32,105,109, +- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, +- 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, +- 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, +- 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, +- 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, +- 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, +- 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, +- 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, +- 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, +- 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, +- 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, +- 32,32,32,78,114,183,0,0,0,114,187,0,0,0,114,67, +- 0,0,0,114,35,0,0,0,122,13,123,125,32,109,97,116, +- 99,104,101,115,32,123,125,114,140,0,0,0,114,141,0,0, +- 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102, +- 114,111,109,32,123,125,122,10,119,114,111,116,101,32,123,33, +- 114,125,41,19,114,238,0,0,0,114,132,0,0,0,114,124, +- 0,0,0,114,36,1,0,0,114,34,1,0,0,114,14,0, +- 0,0,114,39,1,0,0,114,40,0,0,0,114,190,0,0, +- 0,114,153,0,0,0,114,186,0,0,0,114,152,0,0,0, +- 114,195,0,0,0,114,44,1,0,0,114,7,0,0,0,218, +- 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, +- 99,111,100,101,114,198,0,0,0,114,31,0,0,0,114,38, +- 1,0,0,41,10,114,71,0,0,0,114,158,0,0,0,114, +- 141,0,0,0,114,188,0,0,0,114,140,0,0,0,218,2, +- 115,116,114,53,0,0,0,218,10,98,121,116,101,115,95,100, +- 97,116,97,114,201,0,0,0,90,11,99,111,100,101,95,111, +- 98,106,101,99,116,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,15,1,0,0,254,5,0,0,115,78,0, +- 0,0,0,7,15,1,6,1,3,1,16,1,13,1,11,2, +- 3,1,19,1,13,1,5,2,16,1,3,1,19,1,13,1, +- 5,2,3,1,9,1,12,1,13,1,19,1,5,2,9,1, +- 7,1,15,1,6,1,7,1,15,1,18,1,13,1,22,1, +- 12,1,9,1,15,1,3,1,19,1,17,1,13,1,8,1, +- 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, +- 101,116,95,99,111,100,101,78,114,138,0,0,0,41,10,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,35, +- 1,0,0,114,36,1,0,0,114,38,1,0,0,114,37,1, +- 0,0,114,16,1,0,0,114,44,1,0,0,114,15,1,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,33,1,0,0,196,5,0,0,115,14, +- 0,0,0,12,2,12,8,12,13,12,10,12,7,12,10,18, +- 8,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,4,0,0,0,0,0,0,0,115,112,0,0,0, +- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, +- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, +- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, +- 132,0,0,90,6,0,101,7,0,135,0,0,102,1,0,100, +- 8,0,100,9,0,134,0,0,131,1,0,90,8,0,101,7, +- 0,100,10,0,100,11,0,132,0,0,131,1,0,90,9,0, +- 100,12,0,100,13,0,132,0,0,90,10,0,135,0,0,83, +- 41,14,218,10,70,105,108,101,76,111,97,100,101,114,122,103, +- 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, +- 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, +- 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, +- 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, +- 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, +- 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, +- 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, +- 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, +- 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, +- 95,1,0,100,1,0,83,41,2,122,75,67,97,99,104,101, +- 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, +- 32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111, +- 32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32, +- 98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102, +- 105,110,100,101,114,46,78,41,2,114,67,0,0,0,114,35, +- 0,0,0,41,3,114,71,0,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,72,0,0,0,55,6,0,0,115,4,0,0, +- 0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101, +- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, +- 34,0,0,0,124,0,0,106,0,0,124,1,0,106,0,0, +- 107,2,0,111,33,0,124,0,0,106,1,0,124,1,0,106, +- 1,0,107,2,0,83,41,1,78,41,2,114,224,0,0,0, +- 114,63,0,0,0,41,2,114,71,0,0,0,114,227,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 114,229,0,0,0,61,6,0,0,115,4,0,0,0,0,1, +- 18,1,122,17,70,105,108,101,76,111,97,100,101,114,46,95, +- 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, +- 0,106,2,0,131,1,0,65,83,41,1,78,41,3,218,4, +- 104,97,115,104,114,67,0,0,0,114,35,0,0,0,41,1, +- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,8,95,95,104,97,115,104,95,95,65,6, +- 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, +- 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, +- 0,0,0,115,22,0,0,0,116,0,0,116,1,0,124,0, +- 0,131,2,0,106,2,0,124,1,0,131,1,0,83,41,1, +- 122,100,76,111,97,100,32,97,32,109,111,100,117,108,101,32, +- 102,114,111,109,32,97,32,102,105,108,101,46,10,10,32,32, +- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, +- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, +- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, +- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, +- 32,32,32,32,32,32,41,3,218,5,115,117,112,101,114,114, +- 48,1,0,0,114,4,1,0,0,41,2,114,71,0,0,0, +- 114,158,0,0,0,41,1,114,224,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,4,1,0,0,68,6,0,0,115, +- 2,0,0,0,0,10,122,22,70,105,108,101,76,111,97,100, +- 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, +- 0,0,0,115,7,0,0,0,124,0,0,106,0,0,83,41, +- 1,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, +- 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, +- 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, +- 121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,114, +- 35,0,0,0,41,2,114,71,0,0,0,114,158,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, +- 238,0,0,0,80,6,0,0,115,2,0,0,0,0,3,122, +- 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, +- 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, +- 0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,0, +- 0,0,116,0,0,106,1,0,124,1,0,100,1,0,131,2, +- 0,143,17,0,125,2,0,124,2,0,106,2,0,131,0,0, +- 83,87,100,2,0,81,88,100,2,0,83,41,3,122,39,82, +- 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,102, +- 114,111,109,32,112,97,116,104,32,97,115,32,114,97,119,32, +- 98,121,116,101,115,46,218,1,114,78,41,3,114,49,0,0, +- 0,114,50,0,0,0,90,4,114,101,97,100,41,3,114,71, +- 0,0,0,114,35,0,0,0,114,54,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,39,1,0, +- 0,85,6,0,0,115,4,0,0,0,0,2,21,1,122,19, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, +- 97,116,97,41,11,114,57,0,0,0,114,56,0,0,0,114, +- 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,229, +- 0,0,0,114,50,1,0,0,114,156,0,0,0,114,4,1, +- 0,0,114,238,0,0,0,114,39,1,0,0,114,4,0,0, +- 0,114,4,0,0,0,41,1,114,224,0,0,0,114,5,0, +- 0,0,114,48,1,0,0,50,6,0,0,115,14,0,0,0, +- 12,3,6,2,12,6,12,4,12,3,24,12,18,5,114,48, +- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, +- 4,0,0,0,64,0,0,0,115,64,0,0,0,101,0,0, +- 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, +- 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, +- 0,132,0,0,90,5,0,100,6,0,100,7,0,100,8,0, +- 100,9,0,132,0,1,90,6,0,100,10,0,83,41,11,114, +- 8,1,0,0,122,62,67,111,110,99,114,101,116,101,32,105, +- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, +- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, +- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, +- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,3,0,0,0,67,0,0,0,115,36,0,0,0,116,0, +- 0,124,1,0,131,1,0,125,2,0,105,2,0,124,2,0, +- 106,1,0,100,1,0,54,124,2,0,106,2,0,100,2,0, +- 54,83,41,3,122,33,82,101,116,117,114,110,32,116,104,101, +- 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, +- 101,32,112,97,116,104,46,114,183,0,0,0,114,184,0,0, +- 0,41,3,114,39,0,0,0,218,8,115,116,95,109,116,105, +- 109,101,90,7,115,116,95,115,105,122,101,41,3,114,71,0, +- 0,0,114,35,0,0,0,114,46,1,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,36,1,0,0, +- 95,6,0,0,115,4,0,0,0,0,2,12,1,122,27,83, +- 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, +- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, +- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, +- 34,0,0,0,116,0,0,124,1,0,131,1,0,125,4,0, +- 124,0,0,106,1,0,124,2,0,124,3,0,100,1,0,124, +- 4,0,131,2,1,83,41,2,78,218,5,95,109,111,100,101, +- 41,2,114,144,0,0,0,114,37,1,0,0,41,5,114,71, +- 0,0,0,114,141,0,0,0,114,140,0,0,0,114,53,0, +- 0,0,114,42,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,38,1,0,0,100,6,0,0,115, +- 4,0,0,0,0,2,12,1,122,32,83,111,117,114,99,101, +- 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, +- 101,95,98,121,116,101,99,111,100,101,114,54,1,0,0,105, +- 182,1,0,0,99,3,0,0,0,1,0,0,0,9,0,0, +- 0,18,0,0,0,67,0,0,0,115,53,1,0,0,116,0, +- 0,124,1,0,131,1,0,92,2,0,125,4,0,125,5,0, +- 103,0,0,125,6,0,120,54,0,124,4,0,114,80,0,116, +- 1,0,124,4,0,131,1,0,12,114,80,0,116,0,0,124, +- 4,0,131,1,0,92,2,0,125,4,0,125,7,0,124,6, +- 0,106,2,0,124,7,0,131,1,0,1,113,27,0,87,120, +- 132,0,116,3,0,124,6,0,131,1,0,68,93,118,0,125, +- 7,0,116,4,0,124,4,0,124,7,0,131,2,0,125,4, +- 0,121,17,0,116,5,0,106,6,0,124,4,0,131,1,0, +- 1,87,113,94,0,4,116,7,0,107,10,0,114,155,0,1, +- 1,1,119,94,0,89,113,94,0,4,116,8,0,107,10,0, +- 114,211,0,1,125,8,0,1,122,25,0,116,9,0,100,1, +- 0,124,4,0,124,8,0,131,3,0,1,100,2,0,83,87, +- 89,100,2,0,100,2,0,125,8,0,126,8,0,88,113,94, +- 0,88,113,94,0,87,121,33,0,116,10,0,124,1,0,124, +- 2,0,124,3,0,131,3,0,1,116,9,0,100,3,0,124, +- 1,0,131,2,0,1,87,110,53,0,4,116,8,0,107,10, +- 0,114,48,1,1,125,8,0,1,122,21,0,116,9,0,100, +- 1,0,124,1,0,124,8,0,131,3,0,1,87,89,100,2, +- 0,100,2,0,125,8,0,126,8,0,88,110,1,0,88,100, +- 2,0,83,41,4,122,27,87,114,105,116,101,32,98,121,116, +- 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, +- 101,46,122,27,99,111,117,108,100,32,110,111,116,32,99,114, +- 101,97,116,101,32,123,33,114,125,58,32,123,33,114,125,78, +- 122,12,99,114,101,97,116,101,100,32,123,33,114,125,41,11, +- 114,38,0,0,0,114,46,0,0,0,114,223,0,0,0,114, +- 33,0,0,0,114,28,0,0,0,114,3,0,0,0,90,5, +- 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, +- 115,69,114,114,111,114,114,40,0,0,0,114,152,0,0,0, +- 114,55,0,0,0,41,9,114,71,0,0,0,114,35,0,0, +- 0,114,53,0,0,0,114,54,1,0,0,114,233,0,0,0, +- 114,131,0,0,0,114,27,0,0,0,114,23,0,0,0,114, +- 40,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,37,1,0,0,105,6,0,0,115,38,0,0, +- 0,0,2,18,1,6,2,22,1,18,1,17,2,19,1,15, +- 1,3,1,17,1,13,2,7,1,18,3,16,1,27,1,3, +- 1,16,1,17,1,18,2,122,25,83,111,117,114,99,101,70, +- 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, +- 116,97,78,41,7,114,57,0,0,0,114,56,0,0,0,114, +- 58,0,0,0,114,59,0,0,0,114,36,1,0,0,114,38, +- 1,0,0,114,37,1,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,8,1,0, +- 0,91,6,0,0,115,8,0,0,0,12,2,6,2,12,5, +- 12,5,114,8,1,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,2,0,0,0,64,0,0,0,115,46,0,0, +- 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, +- 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, +- 4,0,100,5,0,132,0,0,90,5,0,100,6,0,83,41, +- 7,114,7,1,0,0,122,45,76,111,97,100,101,114,32,119, +- 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, +- 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, +- 111,114,116,115,46,99,2,0,0,0,0,0,0,0,5,0, +- 0,0,6,0,0,0,67,0,0,0,115,76,0,0,0,124, +- 0,0,106,0,0,124,1,0,131,1,0,125,2,0,124,0, +- 0,106,1,0,124,2,0,131,1,0,125,3,0,116,2,0, +- 124,3,0,100,1,0,124,1,0,100,2,0,124,2,0,131, +- 1,2,125,4,0,116,3,0,124,4,0,100,1,0,124,1, +- 0,100,3,0,124,2,0,131,1,2,83,41,4,78,114,67, +- 0,0,0,114,35,0,0,0,114,140,0,0,0,41,4,114, +- 238,0,0,0,114,39,1,0,0,114,190,0,0,0,114,195, +- 0,0,0,41,5,114,71,0,0,0,114,158,0,0,0,114, +- 35,0,0,0,114,53,0,0,0,114,47,1,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,15,1, +- 0,0,138,6,0,0,115,8,0,0,0,0,1,15,1,15, +- 1,24,1,122,29,83,111,117,114,99,101,108,101,115,115,70, +- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, +- 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, +- 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, +- 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, +- 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, +- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, +- 0,144,6,0,0,115,2,0,0,0,0,2,122,31,83,111, +- 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, +- 101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6, +- 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, +- 59,0,0,0,114,15,1,0,0,114,16,1,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,230,0,0,0,166,3,0,0,115,20,0,0,0, -- 12,5,6,2,12,6,12,10,12,4,12,13,12,3,12,3, -- 12,3,12,3,114,230,0,0,0,99,0,0,0,0,0,0, -- 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,118, -- 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -- 1,0,100,2,0,132,0,0,90,3,0,101,4,0,100,3, -- 0,100,4,0,132,0,0,131,1,0,90,5,0,100,5,0, -- 100,6,0,132,0,0,90,6,0,100,7,0,100,8,0,132, -- 0,0,90,7,0,100,9,0,100,10,0,132,0,0,90,8, -- 0,100,11,0,100,12,0,132,0,0,90,9,0,100,13,0, -- 100,14,0,132,0,0,90,10,0,100,15,0,100,16,0,132, -- 0,0,90,11,0,100,17,0,83,41,18,218,16,95,78,97, -- 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, +- 0,0,114,7,1,0,0,134,6,0,0,115,6,0,0,0, +- 12,2,6,2,12,6,114,7,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, +- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, +- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, +- 6,0,100,7,0,132,0,0,90,6,0,101,7,0,100,8, +- 0,100,9,0,132,0,0,131,1,0,90,8,0,100,10,0, +- 100,11,0,132,0,0,90,9,0,100,12,0,100,13,0,132, +- 0,0,90,10,0,100,14,0,100,15,0,132,0,0,90,11, +- 0,101,7,0,100,16,0,100,17,0,132,0,0,131,1,0, +- 90,12,0,100,18,0,83,41,19,218,19,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,122,93, +- 76,111,97,100,101,114,32,102,111,114,32,101,120,116,101,110, +- 115,105,111,110,32,109,111,100,117,108,101,115,46,10,10,32, +- 32,32,32,84,104,101,32,99,111,110,115,116,114,117,99,116, +- 111,114,32,105,115,32,100,101,115,105,103,110,101,100,32,116, +- 111,32,119,111,114,107,32,119,105,116,104,32,70,105,108,101, +- 70,105,110,100,101,114,46,10,10,32,32,32,32,99,3,0, +- 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, +- 0,0,115,22,0,0,0,124,1,0,124,0,0,95,0,0, +- 124,2,0,124,0,0,95,1,0,100,0,0,83,41,1,78, +- 41,2,114,67,0,0,0,114,35,0,0,0,41,3,114,71, +- 0,0,0,114,67,0,0,0,114,35,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,0, +- 0,161,6,0,0,115,4,0,0,0,0,1,9,1,122,28, +- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, +- 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, +- 0,115,34,0,0,0,124,0,0,106,0,0,124,1,0,106, +- 0,0,107,2,0,111,33,0,124,0,0,106,1,0,124,1, +- 0,106,1,0,107,2,0,83,41,1,78,41,2,114,224,0, +- 0,0,114,63,0,0,0,41,2,114,71,0,0,0,114,227, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,229,0,0,0,165,6,0,0,115,4,0,0,0, +- 0,1,18,1,122,26,69,120,116,101,110,115,105,111,110,70, +- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, +- 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, +- 106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131, +- 1,0,65,83,41,1,78,41,3,114,49,1,0,0,114,67, +- 0,0,0,114,35,0,0,0,41,1,114,71,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,50, +- 1,0,0,169,6,0,0,115,2,0,0,0,0,1,122,28, +- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, +- 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, +- 0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0, +- 0,115,183,0,0,0,116,0,0,124,1,0,131,1,0,143, +- 29,0,1,116,1,0,116,2,0,106,3,0,124,1,0,124, +- 0,0,106,4,0,131,3,0,125,2,0,87,100,1,0,81, +- 88,116,5,0,100,2,0,124,0,0,106,4,0,131,2,0, +- 1,124,0,0,106,6,0,124,1,0,131,1,0,125,3,0, +- 124,3,0,114,124,0,116,7,0,124,2,0,100,3,0,131, +- 2,0,12,114,124,0,116,8,0,124,0,0,106,4,0,131, +- 1,0,100,4,0,25,103,1,0,124,2,0,95,9,0,110, +- 0,0,124,0,0,124,2,0,95,10,0,124,2,0,106,11, +- 0,124,2,0,95,12,0,124,3,0,115,179,0,124,2,0, +- 106,12,0,106,13,0,100,5,0,131,1,0,100,4,0,25, +- 124,2,0,95,12,0,110,0,0,124,2,0,83,41,6,122, +- 25,76,111,97,100,32,97,110,32,101,120,116,101,110,115,105, +- 111,110,32,109,111,100,117,108,101,46,78,122,33,101,120,116, +- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,108,111, +- 97,100,101,100,32,102,114,111,109,32,123,33,114,125,114,246, +- 0,0,0,114,84,0,0,0,114,116,0,0,0,41,14,114, +- 69,0,0,0,114,114,0,0,0,114,106,0,0,0,90,12, +- 108,111,97,100,95,100,121,110,97,109,105,99,114,35,0,0, +- 0,114,152,0,0,0,114,219,0,0,0,114,60,0,0,0, +- 114,38,0,0,0,114,246,0,0,0,114,204,0,0,0,114, +- 57,0,0,0,114,250,0,0,0,114,32,0,0,0,41,4, +- 114,71,0,0,0,114,158,0,0,0,114,179,0,0,0,114, +- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,4,1,0,0,172,6,0,0,115,24,0,0, +- 0,0,5,13,1,9,1,21,1,16,1,15,1,22,1,28, +- 1,9,1,12,1,6,1,28,1,122,31,69,120,116,101,110, +- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,108, +- 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, +- 0,0,0,2,0,0,0,4,0,0,0,3,0,0,0,115, +- 48,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, +- 100,1,0,25,137,0,0,116,2,0,135,0,0,102,1,0, +- 100,2,0,100,3,0,134,0,0,116,3,0,68,131,1,0, +- 131,1,0,83,41,4,122,49,82,101,116,117,114,110,32,84, +- 114,117,101,32,105,102,32,116,104,101,32,101,120,116,101,110, +- 115,105,111,110,32,109,111,100,117,108,101,32,105,115,32,97, +- 32,112,97,99,107,97,103,101,46,114,29,0,0,0,99,1, +- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, +- 0,0,0,115,31,0,0,0,124,0,0,93,21,0,125,1, +- 0,136,0,0,100,0,0,124,1,0,23,107,2,0,86,1, +- 113,3,0,100,1,0,83,41,2,114,72,0,0,0,78,114, +- 4,0,0,0,41,2,114,22,0,0,0,218,6,115,117,102, +- 102,105,120,41,1,218,9,102,105,108,101,95,110,97,109,101, +- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,193, +- 6,0,0,115,2,0,0,0,6,1,122,49,69,120,116,101, +- 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, +- 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, +- 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, +- 38,0,0,0,114,35,0,0,0,114,78,0,0,0,218,18, +- 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, +- 69,83,41,2,114,71,0,0,0,114,158,0,0,0,114,4, +- 0,0,0,41,1,114,58,1,0,0,114,5,0,0,0,114, +- 219,0,0,0,190,6,0,0,115,6,0,0,0,0,2,19, +- 1,18,1,122,30,69,120,116,101,110,115,105,111,110,70,105, +- 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, +- 97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, +- 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, +- 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, +- 101,99,116,46,78,114,4,0,0,0,41,2,114,71,0,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,15,1,0,0,196,6,0,0,115,2, +- 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, +- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, +- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, +- 83,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, +- 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, +- 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, +- 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, +- 41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,0, +- 200,6,0,0,115,2,0,0,0,0,2,122,30,69,120,116, +- 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, +- 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 115,7,0,0,0,124,0,0,106,0,0,83,41,1,122,58, +- 82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,105, +- 108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,116, +- 104,101,32,102,105,110,100,101,114,46,41,1,114,35,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,238,0,0, +- 0,204,6,0,0,115,2,0,0,0,0,3,122,32,69,120, +- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, +- 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, +- 13,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, +- 114,59,0,0,0,114,72,0,0,0,114,229,0,0,0,114, +- 50,1,0,0,114,156,0,0,0,114,4,1,0,0,114,219, +- 0,0,0,114,15,1,0,0,114,16,1,0,0,114,238,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,56,1,0,0,153,6,0,0,115, +- 18,0,0,0,12,6,6,2,12,4,12,4,12,3,18,18, +- 12,6,12,4,12,4,114,56,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, +- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, +- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, +- 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, +- 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, +- 90,8,0,100,12,0,100,13,0,132,0,0,90,9,0,100, +- 14,0,100,15,0,132,0,0,90,10,0,100,16,0,100,17, +- 0,132,0,0,90,11,0,100,18,0,100,19,0,132,0,0, +- 90,12,0,100,20,0,83,41,21,218,14,95,78,97,109,101, +- 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, +- 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, +- 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, +- 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, +- 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, +- 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, +- 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, +- 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, +- 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, +- 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, +- 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, +- 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, +- 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, +- 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, +- 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, +- 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, +- 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, +- 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, +- 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, +- 97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0, +- 0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,1, +- 0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0, +- 116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,124, +- 0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,0, +- 0,83,41,1,78,41,6,114,70,0,0,0,114,253,0,0, +- 0,114,231,0,0,0,218,16,95,103,101,116,95,112,97,114, +- 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, +- 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, +- 116,104,95,102,105,110,100,101,114,41,4,114,71,0,0,0, +- 114,67,0,0,0,114,35,0,0,0,218,11,112,97,116,104, +- 95,102,105,110,100,101,114,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,114,72,0,0,0,217,6,0,0,115, +- 8,0,0,0,0,1,9,1,9,1,21,1,122,23,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, +- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,4,0, +- 0,0,3,0,0,0,67,0,0,0,115,53,0,0,0,124, +- 0,0,106,0,0,106,1,0,100,1,0,131,1,0,92,3, +- 0,125,1,0,125,2,0,125,3,0,124,2,0,100,2,0, +- 107,2,0,114,43,0,100,6,0,83,124,1,0,100,5,0, +- 102,2,0,83,41,7,122,62,82,101,116,117,114,110,115,32, +- 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, +- 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, +- 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, +- 45,110,97,109,101,41,114,116,0,0,0,114,30,0,0,0, +- 114,7,0,0,0,114,35,0,0,0,114,246,0,0,0,41, +- 2,122,3,115,121,115,122,4,112,97,116,104,41,2,114,70, +- 0,0,0,114,32,0,0,0,41,4,114,71,0,0,0,114, +- 233,0,0,0,218,3,100,111,116,114,94,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,23,95, +- 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, +- 95,110,97,109,101,115,223,6,0,0,115,8,0,0,0,0, +- 2,27,1,12,2,4,3,122,38,95,78,97,109,101,115,112, +- 97,99,101,80,97,116,104,46,95,102,105,110,100,95,112,97, +- 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,99, +- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, +- 67,0,0,0,115,38,0,0,0,124,0,0,106,0,0,131, +- 0,0,92,2,0,125,1,0,125,2,0,116,1,0,116,2, +- 0,106,3,0,124,1,0,25,124,2,0,131,2,0,83,41, +- 1,78,41,4,114,66,1,0,0,114,62,0,0,0,114,7, +- 0,0,0,114,73,0,0,0,41,3,114,71,0,0,0,90, +- 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, +- 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, +- 97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,61,1,0,0,233,6,0,0,115,4,0,0,0, +- 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, +- 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, +- 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, +- 0,0,3,0,0,0,67,0,0,0,115,127,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, +- 0,124,1,0,124,0,0,106,2,0,107,3,0,114,120,0, +- 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, +- 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,108, +- 0,124,2,0,106,5,0,100,0,0,107,8,0,114,108,0, +- 124,2,0,106,6,0,114,108,0,124,2,0,106,6,0,124, +- 0,0,95,7,0,113,108,0,110,0,0,124,1,0,124,0, +- 0,95,2,0,110,0,0,124,0,0,106,7,0,83,41,1, +- 78,41,8,114,231,0,0,0,114,61,1,0,0,114,62,1, +- 0,0,114,63,1,0,0,114,70,0,0,0,114,169,0,0, +- 0,114,220,0,0,0,114,253,0,0,0,41,3,114,71,0, +- 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, +- 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, +- 101,237,6,0,0,115,16,0,0,0,0,2,18,1,15,1, +- 21,3,27,1,9,1,18,1,12,1,122,27,95,78,97,109, +- 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, +- 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, +- 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, +- 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, +- 83,41,1,78,41,2,218,4,105,116,101,114,114,67,1,0, +- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,218,8,95,95,105,116,101,114,95, +- 95,250,6,0,0,115,2,0,0,0,0,1,122,23,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, +- 116,101,114,95,95,99,1,0,0,0,0,0,0,0,1,0, +- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,116, +- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,41, +- 1,78,41,2,114,31,0,0,0,114,67,1,0,0,41,1, +- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,7,95,95,108,101,110,95,95,253,6,0, +- 0,115,2,0,0,0,0,1,122,22,95,78,97,109,101,115, +- 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, +- 0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0, +- 124,0,0,106,1,0,131,1,0,83,41,2,78,122,20,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, +- 114,125,41,41,2,114,47,0,0,0,114,253,0,0,0,41, +- 1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,101,0,0,0,0,7,0,0,115,2, +- 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, +- 101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,2, +- 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, +- 0,0,0,115,16,0,0,0,124,1,0,124,0,0,106,0, +- 0,131,0,0,107,6,0,83,41,1,78,41,1,114,67,1, +- 0,0,41,2,114,71,0,0,0,218,4,105,116,101,109,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12, +- 95,95,99,111,110,116,97,105,110,115,95,95,3,7,0,0, +- 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, +- 97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105, +- 110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0, +- 0,2,0,0,0,67,0,0,0,115,20,0,0,0,124,0, +- 0,106,0,0,106,1,0,124,1,0,131,1,0,1,100,0, +- 0,83,41,1,78,41,2,114,253,0,0,0,114,223,0,0, +- 0,41,2,114,71,0,0,0,114,71,1,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,223,0,0, +- 0,6,7,0,0,115,2,0,0,0,0,1,122,21,95,78, +- 97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112, +- 101,110,100,78,41,13,114,57,0,0,0,114,56,0,0,0, +- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, +- 66,1,0,0,114,61,1,0,0,114,67,1,0,0,114,69, +- 1,0,0,114,70,1,0,0,114,101,0,0,0,114,72,1, +- 0,0,114,223,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0, +- 210,6,0,0,115,20,0,0,0,12,5,6,2,12,6,12, +- 10,12,4,12,13,12,3,12,3,12,3,12,3,114,60,1, +- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,64,0,0,0,115,106,0,0,0,101,0,0,90, +- 1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0, +- 0,90,3,0,101,4,0,100,3,0,100,4,0,132,0,0, +- 131,1,0,90,5,0,100,5,0,100,6,0,132,0,0,90, +- 6,0,100,7,0,100,8,0,132,0,0,90,7,0,100,9, +- 0,100,10,0,132,0,0,90,8,0,100,11,0,100,12,0, +- 132,0,0,90,9,0,100,13,0,100,14,0,132,0,0,90, +- 10,0,100,15,0,83,41,16,114,251,0,0,0,99,4,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, - 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, - 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, -- 41,1,78,41,2,114,230,0,0,0,114,232,0,0,0,41, -- 4,114,108,0,0,0,114,106,0,0,0,114,35,0,0,0, -- 114,236,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,185,0,0,0,224,3,0,0,115,2,0, +- 41,1,78,41,2,114,60,1,0,0,114,253,0,0,0,41, +- 4,114,71,0,0,0,114,67,0,0,0,114,35,0,0,0, +- 114,64,1,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,72,0,0,0,12,7,0,0,115,2,0, - 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, @@ -32720,1636 +37634,2259 @@ diff -Nru orig/Python/importlib_external.h modified/Python/importlib_external.h - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, -- 0,0,114,112,0,0,0,41,2,114,170,0,0,0,114,190, +- 0,0,114,57,0,0,0,41,2,114,11,1,0,0,114,179, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,227, -- 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, -- 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, -- 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, -- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -- 0,0,100,1,0,83,41,2,78,84,114,4,0,0,0,41, -- 2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,159,0,0,0,236, -- 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, -- 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, -- 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, -- 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, -- 0,100,1,0,83,41,2,78,114,30,0,0,0,114,4,0, -- 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,202,0, -- 0,0,239,3,0,0,115,2,0,0,0,0,1,122,27,95, -- 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, -- 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, -- 22,0,0,0,116,0,0,100,1,0,100,2,0,100,3,0, -- 100,4,0,100,5,0,131,3,1,83,41,6,78,114,30,0, -- 0,0,122,8,60,115,116,114,105,110,103,62,114,189,0,0, -- 0,114,204,0,0,0,84,41,1,114,205,0,0,0,41,2, -- 114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,187,0,0,0,242,3, -+ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, -+ 83,41,2,78,122,20,95,78,97,109,101,115,112,97,99,101, -+ 80,97,116,104,40,123,33,114,125,41,41,2,114,48,0,0, -+ 0,114,233,0,0,0,41,1,114,109,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, -+ 114,101,112,114,95,95,212,3,0,0,115,2,0,0,0,0, -+ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, -+ 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, -+ 16,0,0,0,124,1,0,124,0,0,106,0,0,131,0,0, -+ 107,6,0,83,41,1,78,41,1,114,241,0,0,0,41,2, -+ 114,109,0,0,0,218,4,105,116,101,109,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,12,95,95,99,111, -+ 110,116,97,105,110,115,95,95,215,3,0,0,115,2,0,0, -+ 0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,80, -+ 97,116,104,46,95,95,99,111,110,116,97,105,110,115,95,95, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, -+ 0,67,0,0,0,115,20,0,0,0,124,0,0,106,0,0, -+ 106,1,0,124,1,0,131,1,0,1,100,0,0,83,41,1, -+ 78,41,2,114,233,0,0,0,114,164,0,0,0,41,2,114, -+ 109,0,0,0,114,246,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,164,0,0,0,218,3,0, -+ 0,115,2,0,0,0,0,1,122,21,95,78,97,109,101,115, -+ 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, -+ 41,13,114,113,0,0,0,114,112,0,0,0,114,114,0,0, -+ 0,114,115,0,0,0,114,186,0,0,0,114,239,0,0,0, -+ 114,234,0,0,0,114,241,0,0,0,114,243,0,0,0,114, -+ 244,0,0,0,114,245,0,0,0,114,247,0,0,0,114,164, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,231,0,0,0,166,3,0,0, -+ 115,20,0,0,0,12,5,6,2,12,6,12,10,12,4,12, -+ 13,12,3,12,3,12,3,12,3,114,231,0,0,0,99,0, -+ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, -+ 0,0,0,115,118,0,0,0,101,0,0,90,1,0,100,0, -+ 0,90,2,0,100,1,0,100,2,0,132,0,0,90,3,0, -+ 101,4,0,100,3,0,100,4,0,132,0,0,131,1,0,90, -+ 5,0,100,5,0,100,6,0,132,0,0,90,6,0,100,7, -+ 0,100,8,0,132,0,0,90,7,0,100,9,0,100,10,0, -+ 132,0,0,90,8,0,100,11,0,100,12,0,132,0,0,90, -+ 9,0,100,13,0,100,14,0,132,0,0,90,10,0,100,15, -+ 0,100,16,0,132,0,0,90,11,0,100,17,0,83,41,18, -+ 218,16,95,78,97,109,101,115,112,97,99,101,76,111,97,100, -+ 101,114,99,4,0,0,0,0,0,0,0,4,0,0,0,4, -+ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, -+ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, -+ 0,100,0,0,83,41,1,78,41,2,114,231,0,0,0,114, -+ 233,0,0,0,41,4,114,109,0,0,0,114,107,0,0,0, -+ 114,36,0,0,0,114,237,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,186,0,0,0,224,3, - 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, -- 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, -- 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -- 0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,108, -- 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, -- 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, -- 78,114,4,0,0,0,41,2,114,108,0,0,0,114,164,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,186,0,0,0,245,3,0,0,115,0,0,0,0,122, -- 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, -- 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99, +- 0,0,114,205,0,0,0,15,7,0,0,115,2,0,0,0, +- 0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111, +- 97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114, +- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, +- 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, +- 78,84,114,4,0,0,0,41,2,114,71,0,0,0,114,158, +- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,114,219,0,0,0,24,7,0,0,115,2,0,0,0, +- 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, +- 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, - 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, -- 67,0,0,0,115,4,0,0,0,100,0,0,83,41,1,78, -- 114,4,0,0,0,41,2,114,108,0,0,0,114,190,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,191,0,0,0,248,3,0,0,115,2,0,0,0,0,1, -- 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, -- 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, -- 0,0,0,115,32,0,0,0,116,0,0,100,1,0,124,0, -- 0,106,1,0,131,2,0,1,116,2,0,106,3,0,124,0, -- 0,124,1,0,131,2,0,83,41,2,122,98,76,111,97,100, -- 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, -- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, -- 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, -- 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, -- 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, -- 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, -- 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, -- 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, -- 104,32,123,33,114,125,41,4,114,105,0,0,0,114,232,0, -- 0,0,114,121,0,0,0,114,192,0,0,0,41,2,114,108, -- 0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,193,0,0,0,251,3,0,0, -- 115,4,0,0,0,0,7,16,1,122,28,95,78,97,109,101, -- 115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100, -- 95,109,111,100,117,108,101,78,41,12,114,112,0,0,0,114, -- 111,0,0,0,114,113,0,0,0,114,185,0,0,0,114,183, -- 0,0,0,114,248,0,0,0,114,159,0,0,0,114,202,0, -- 0,0,114,187,0,0,0,114,186,0,0,0,114,191,0,0, -- 0,114,193,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,223, -- 3,0,0,115,16,0,0,0,12,1,12,3,18,9,12,3, -- 12,3,12,3,12,3,12,3,114,247,0,0,0,99,0,0, -- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0, -- 0,0,115,160,0,0,0,101,0,0,90,1,0,100,0,0, -- 90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,100, -- 3,0,132,0,0,131,1,0,90,5,0,101,4,0,100,4, -- 0,100,5,0,132,0,0,131,1,0,90,6,0,101,4,0, -- 100,6,0,100,7,0,132,0,0,131,1,0,90,7,0,101, -- 4,0,100,8,0,100,9,0,132,0,0,131,1,0,90,8, -- 0,101,4,0,100,10,0,100,11,0,100,12,0,132,1,0, -- 131,1,0,90,9,0,101,4,0,100,10,0,100,10,0,100, -- 13,0,100,14,0,132,2,0,131,1,0,90,10,0,101,4, -- 0,100,10,0,100,15,0,100,16,0,132,1,0,131,1,0, -- 90,11,0,100,10,0,83,41,17,218,10,80,97,116,104,70, -- 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, -- 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, -- 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, -- 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, -- 117,116,101,115,46,99,1,0,0,0,0,0,0,0,2,0, -- 0,0,4,0,0,0,67,0,0,0,115,55,0,0,0,120, -- 48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,93, -- 31,0,125,1,0,116,3,0,124,1,0,100,1,0,131,2, -- 0,114,16,0,124,1,0,106,4,0,131,0,0,1,113,16, -- 0,87,100,2,0,83,41,3,122,125,67,97,108,108,32,116, -- 104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97, -- 99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110, -- 32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32, -- 102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32, -- 115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97, -- 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, -- 101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109, -- 101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100, -- 97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,0, -- 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, -- 114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114, -- 115,0,0,0,114,250,0,0,0,41,2,114,170,0,0,0, -- 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,250,0,0,0,12,4,0,0, -- 115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116, -- 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, -- 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, -- 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,107, -- 0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,114, -- 41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,106, -- 3,0,100,2,0,116,4,0,131,2,0,1,120,59,0,116, -- 0,0,106,1,0,68,93,44,0,125,2,0,121,14,0,124, -- 2,0,124,1,0,131,1,0,83,87,113,51,0,4,116,5, -- 0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,51, -- 0,88,113,51,0,87,100,1,0,83,100,1,0,83,41,3, -- 122,113,83,101,97,114,99,104,32,115,101,113,117,101,110,99, -- 101,32,111,102,32,104,111,111,107,115,32,102,111,114,32,97, -- 32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,116, -- 104,39,46,10,10,32,32,32,32,32,32,32,32,73,102,32, -- 39,104,111,111,107,115,39,32,105,115,32,102,97,108,115,101, -- 32,116,104,101,110,32,117,115,101,32,115,121,115,46,112,97, -- 116,104,95,104,111,111,107,115,46,10,10,32,32,32,32,32, -- 32,32,32,78,122,23,115,121,115,46,112,97,116,104,95,104, -- 111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,114, -- 7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, -- 114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,114, -- 107,0,0,0,41,3,114,170,0,0,0,114,35,0,0,0, -- 90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,111, -- 107,115,20,4,0,0,115,16,0,0,0,0,7,25,1,16, -- 1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,116, -- 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, -- 111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,0, -- 19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,0, -- 100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,106, -- 1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,0, -- 107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,1, -- 0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,125, -- 2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,0, -- 1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,125, -- 2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,89, -- 110,1,0,88,124,2,0,83,41,3,122,210,71,101,116,32, -- 116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,116, -- 104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,114, -- 111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,111, -- 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, -- 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, -- 32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,110, -- 32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,100, -- 32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101, -- 32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,32, -- 97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,102, -- 32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,118, -- 97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,78, -- 111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,30, -- 0,0,0,78,41,7,114,3,0,0,0,114,45,0,0,0, -- 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, -- 114,111,114,114,7,0,0,0,114,251,0,0,0,114,137,0, -- 0,0,114,255,0,0,0,41,3,114,170,0,0,0,114,35, -- 0,0,0,114,253,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,20,95,112,97,116,104,95,105, -- 109,112,111,114,116,101,114,95,99,97,99,104,101,37,4,0, -- 0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,3, -- 9,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, +- 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,78, +- 114,30,0,0,0,114,4,0,0,0,41,2,114,71,0,0, +- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,114,16,1,0,0,27,7,0,0,115,2, +- 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, +- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, +- 99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,6, +- 0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,100, +- 1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,3, +- 1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,114, +- 105,110,103,62,114,175,0,0,0,114,42,1,0,0,84,41, +- 1,114,43,1,0,0,41,2,114,71,0,0,0,114,158,0, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,114,15,1,0,0,30,7,0,0,115,2,0,0,0,0, +- 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, +- 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, +- 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, +- 0,115,4,0,0,0,100,0,0,83,41,1,78,114,4,0, +- 0,0,41,2,114,71,0,0,0,114,179,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, +- 0,0,33,7,0,0,115,2,0,0,0,0,1,122,28,95, +- 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, +- 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, +- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, +- 115,29,0,0,0,116,0,0,100,1,0,124,0,0,106,1, +- 0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2, +- 0,83,41,2,122,98,76,111,97,100,32,97,32,110,97,109, +- 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, +- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, +- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, +- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, +- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, +- 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, +- 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, +- 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, +- 41,3,114,152,0,0,0,114,253,0,0,0,114,180,0,0, +- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, +- 0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0, +- 0,36,7,0,0,115,4,0,0,0,0,7,16,1,122,28, +- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, +- 46,108,111,97,100,95,109,111,100,117,108,101,78,41,11,114, +- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, +- 0,0,0,114,18,1,0,0,114,205,0,0,0,114,219,0, +- 0,0,114,16,1,0,0,114,15,1,0,0,114,1,1,0, +- 0,114,4,1,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,11, +- 7,0,0,115,14,0,0,0,12,1,12,3,18,9,12,3, +- 12,3,12,3,12,3,114,251,0,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0, +- 115,160,0,0,0,101,0,0,90,1,0,100,0,0,90,2, +- 0,100,1,0,90,3,0,101,4,0,100,2,0,100,3,0, +- 132,0,0,131,1,0,90,5,0,101,4,0,100,4,0,100, +- 5,0,132,0,0,131,1,0,90,6,0,101,4,0,100,6, +- 0,100,7,0,132,0,0,131,1,0,90,7,0,101,4,0, +- 100,8,0,100,9,0,132,0,0,131,1,0,90,8,0,101, +- 4,0,100,10,0,100,11,0,100,12,0,132,1,0,131,1, +- 0,90,9,0,101,4,0,100,10,0,100,10,0,100,13,0, +- 100,14,0,132,2,0,131,1,0,90,10,0,101,4,0,100, +- 10,0,100,15,0,100,16,0,132,1,0,131,1,0,90,11, +- 0,100,10,0,83,41,17,218,10,80,97,116,104,70,105,110, +- 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, +- 105,110,100,101,114,32,102,111,114,32,115,121,115,46,112,97, +- 116,104,32,97,110,100,32,112,97,99,107,97,103,101,32,95, +- 95,112,97,116,104,95,95,32,97,116,116,114,105,98,117,116, +- 101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0, +- 4,0,0,0,67,0,0,0,115,58,0,0,0,120,51,0, +- 116,0,0,106,1,0,106,2,0,131,0,0,68,93,34,0, +- 125,1,0,116,3,0,124,1,0,100,1,0,131,2,0,114, +- 16,0,124,1,0,106,4,0,131,0,0,1,113,16,0,113, +- 16,0,87,100,2,0,83,41,3,122,125,67,97,108,108,32, +- 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, +- 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, +- 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, +- 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, +- 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, ++ 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, ++ 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, ++ 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, ++ 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, ++ 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, ++ 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, ++ 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, ++ 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, ++ 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, ++ 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, ++ 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, ++ 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, ++ 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, ++ 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, ++ 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, ++ 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, ++ 0,2,0,0,0,4,0,0,0,67,0,0,0,115,58,0, ++ 0,0,120,51,0,116,0,0,106,1,0,106,2,0,131,0, ++ 0,68,93,34,0,125,1,0,116,3,0,124,1,0,100,1, ++ 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, ++ 1,113,16,0,113,16,0,87,100,2,0,83,41,3,122,125, ++ 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, ++ 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, ++ 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, ++ 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, ++ 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, ++ 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, ++ 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, ++ 105,109,112,108,101,109,101,110,116,101,100,41,46,218,17,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 78,41,5,114,8,0,0,0,218,19,112,97,116,104,95,105, ++ 109,112,111,114,116,101,114,95,99,97,99,104,101,218,6,118, ++ 97,108,117,101,115,114,61,0,0,0,114,75,1,0,0,41, ++ 2,114,12,1,0,0,218,6,102,105,110,100,101,114,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,75,1, ++ 0,0,53,7,0,0,115,6,0,0,0,0,4,22,1,15, ++ 1,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, ++ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, ++ 2,0,0,0,0,0,0,0,3,0,0,0,12,0,0,0, ++ 67,0,0,0,115,94,0,0,0,116,0,0,106,1,0,115, ++ 28,0,116,2,0,106,3,0,100,1,0,116,4,0,131,2, ++ 0,1,110,0,0,120,59,0,116,0,0,106,1,0,68,93, ++ 44,0,125,2,0,121,14,0,124,2,0,124,1,0,131,1, ++ 0,83,87,113,38,0,4,116,5,0,107,10,0,114,81,0, ++ 1,1,1,119,38,0,89,113,38,0,88,113,38,0,87,100, ++ 2,0,83,100,2,0,83,41,3,122,113,83,101,97,114,99, ++ 104,32,115,101,113,117,101,110,99,101,32,111,102,32,104,111, ++ 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, ++ 32,102,111,114,32,39,112,97,116,104,39,46,10,10,32,32, ++ 32,32,32,32,32,32,73,102,32,39,104,111,111,107,115,39, ++ 32,105,115,32,102,97,108,115,101,32,116,104,101,110,32,117, ++ 115,101,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,46,10,10,32,32,32,32,32,32,32,32,122,23,115,121, ++ 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, ++ 101,109,112,116,121,78,41,6,114,8,0,0,0,218,10,112, ++ 97,116,104,95,104,111,111,107,115,114,167,0,0,0,114,168, ++ 0,0,0,114,169,0,0,0,114,154,0,0,0,41,3,114, ++ 12,1,0,0,114,36,0,0,0,90,4,104,111,111,107,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,11, ++ 95,112,97,116,104,95,104,111,111,107,115,61,7,0,0,115, ++ 16,0,0,0,0,7,9,1,19,1,16,1,3,1,14,1, ++ 13,1,12,2,122,22,80,97,116,104,70,105,110,100,101,114, ++ 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, ++ 0,0,0,0,0,3,0,0,0,11,0,0,0,67,0,0, ++ 0,115,97,0,0,0,124,1,0,100,1,0,107,2,0,114, ++ 27,0,116,0,0,106,1,0,131,0,0,125,1,0,110,0, ++ 0,121,17,0,116,2,0,106,3,0,124,1,0,25,125,2, ++ 0,87,110,46,0,4,116,4,0,107,10,0,114,92,0,1, ++ 1,1,124,0,0,106,5,0,124,1,0,131,1,0,125,2, ++ 0,124,2,0,116,2,0,106,3,0,124,1,0,60,89,110, ++ 1,0,88,124,2,0,83,41,2,122,210,71,101,116,32,116, ++ 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, ++ 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, ++ 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, ++ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, ++ 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, ++ 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, ++ 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, ++ 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, ++ 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, ++ 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, ++ 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, ++ 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, ++ 110,101,46,10,10,32,32,32,32,32,32,32,32,114,31,0, ++ 0,0,41,6,114,4,0,0,0,114,46,0,0,0,114,8, ++ 0,0,0,114,76,1,0,0,114,80,0,0,0,114,80,1, ++ 0,0,41,3,114,12,1,0,0,114,36,0,0,0,114,78, ++ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, ++ 101,114,95,99,97,99,104,101,78,7,0,0,115,16,0,0, ++ 0,0,8,12,1,15,1,3,1,17,1,13,1,15,1,18, ++ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, +- 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, +- 109,101,110,116,101,100,41,46,218,17,105,110,118,97,108,105, +- 100,97,116,101,95,99,97,99,104,101,115,78,41,5,114,7, +- 0,0,0,218,19,112,97,116,104,95,105,109,112,111,114,116, +- 101,114,95,99,97,99,104,101,218,6,118,97,108,117,101,115, +- 114,60,0,0,0,114,74,1,0,0,41,2,114,11,1,0, +- 0,218,6,102,105,110,100,101,114,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,74,1,0,0,53,7,0, +- 0,115,6,0,0,0,0,4,22,1,15,1,122,28,80,97, +- 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, +- 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, +- 0,0,0,3,0,0,0,12,0,0,0,67,0,0,0,115, +- 94,0,0,0,116,0,0,106,1,0,115,28,0,116,2,0, +- 106,3,0,100,1,0,116,4,0,131,2,0,1,110,0,0, +- 120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,0, +- 121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,38, +- 0,4,116,5,0,107,10,0,114,81,0,1,1,1,119,38, +- 0,89,113,38,0,88,113,38,0,87,100,2,0,83,100,2, +- 0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,113, +- 117,101,110,99,101,32,111,102,32,104,111,111,107,115,32,102, +- 111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,32, +- 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, +- 32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,102, +- 97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,121, +- 115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,32, +- 32,32,32,32,32,32,32,122,23,115,121,115,46,112,97,116, +- 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, +- 78,41,6,114,7,0,0,0,218,10,112,97,116,104,95,104, +- 111,111,107,115,114,166,0,0,0,114,167,0,0,0,114,168, +- 0,0,0,114,153,0,0,0,41,3,114,11,1,0,0,114, +- 35,0,0,0,90,4,104,111,111,107,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,11,95,112,97,116,104, +- 95,104,111,111,107,115,61,7,0,0,115,16,0,0,0,0, +- 7,9,1,19,1,16,1,3,1,14,1,13,1,12,2,122, +- 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, +- 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, +- 3,0,0,0,11,0,0,0,67,0,0,0,115,97,0,0, +- 0,124,1,0,100,1,0,107,2,0,114,27,0,116,0,0, +- 106,1,0,131,0,0,125,1,0,110,0,0,121,17,0,116, +- 2,0,106,3,0,124,1,0,25,125,2,0,87,110,46,0, +- 4,116,4,0,107,10,0,114,92,0,1,1,1,124,0,0, +- 106,5,0,124,1,0,131,1,0,125,2,0,124,2,0,116, +- 2,0,106,3,0,124,1,0,60,89,110,1,0,88,124,2, +- 0,83,41,2,122,210,71,101,116,32,116,104,101,32,102,105, +- 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, +- 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, +- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, +- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, +- 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, +- 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, +- 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, +- 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, +- 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, +- 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, +- 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, +- 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, +- 32,32,32,32,32,32,32,32,114,30,0,0,0,41,6,114, +- 3,0,0,0,114,45,0,0,0,114,7,0,0,0,114,75, +- 1,0,0,114,79,0,0,0,114,79,1,0,0,41,3,114, +- 11,1,0,0,114,35,0,0,0,114,77,1,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,20,95, +- 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, +- 99,104,101,78,7,0,0,115,16,0,0,0,0,8,12,1, +- 15,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, - 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, -- 0,0,115,119,0,0,0,116,0,0,124,2,0,100,1,0, +- 0,0,115,113,0,0,0,116,0,0,124,2,0,100,1,0, - 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, - 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, - 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, -- 125,4,0,124,3,0,100,0,0,107,9,0,114,88,0,116, -- 3,0,106,4,0,124,1,0,124,3,0,131,2,0,83,116, -- 3,0,106,5,0,124,1,0,100,0,0,131,2,0,125,5, -- 0,124,4,0,124,5,0,95,6,0,124,5,0,83,41,2, -- 78,114,124,0,0,0,41,7,114,115,0,0,0,114,124,0, -- 0,0,114,182,0,0,0,114,121,0,0,0,114,179,0,0, -- 0,114,160,0,0,0,114,156,0,0,0,41,6,114,170,0, -- 0,0,114,126,0,0,0,114,253,0,0,0,114,127,0,0, -- 0,114,128,0,0,0,114,164,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,16,95,108,101,103, -- 97,99,121,95,103,101,116,95,115,112,101,99,59,4,0,0, -- 115,18,0,0,0,0,4,15,1,24,2,15,1,6,1,12, -- 1,16,1,18,1,9,1,122,27,80,97,116,104,70,105,110, -- 100,101,114,46,95,108,101,103,97,99,121,95,103,101,116,95, -- 115,112,101,99,78,99,4,0,0,0,0,0,0,0,9,0, -- 0,0,5,0,0,0,67,0,0,0,115,243,0,0,0,103, -- 0,0,125,4,0,120,230,0,124,2,0,68,93,191,0,125, -- 5,0,116,0,0,124,5,0,116,1,0,116,2,0,102,2, -- 0,131,2,0,115,43,0,113,13,0,124,0,0,106,3,0, -- 124,5,0,131,1,0,125,6,0,124,6,0,100,1,0,107, -- 9,0,114,13,0,116,4,0,124,6,0,100,2,0,131,2, -- 0,114,106,0,124,6,0,106,5,0,124,1,0,124,3,0, -- 131,2,0,125,7,0,110,18,0,124,0,0,106,6,0,124, -- 1,0,124,6,0,131,2,0,125,7,0,124,7,0,100,1, -- 0,107,8,0,114,139,0,113,13,0,124,7,0,106,7,0, -- 100,1,0,107,9,0,114,158,0,124,7,0,83,124,7,0, -- 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, -- 191,0,116,9,0,100,3,0,131,1,0,130,1,0,124,4, -- 0,106,10,0,124,8,0,131,1,0,1,113,13,0,87,116, -- 11,0,106,12,0,124,1,0,100,1,0,131,2,0,125,7, -- 0,124,4,0,124,7,0,95,8,0,124,7,0,83,100,1, -- 0,83,41,4,122,63,70,105,110,100,32,116,104,101,32,108, -- 111,97,100,101,114,32,111,114,32,110,97,109,101,115,112,97, -- 99,101,95,112,97,116,104,32,102,111,114,32,116,104,105,115, -- 32,109,111,100,117,108,101,47,112,97,99,107,97,103,101,32, -- 110,97,109,101,46,78,114,181,0,0,0,122,19,115,112,101, -- 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, -- 41,13,114,143,0,0,0,114,69,0,0,0,218,5,98,121, -- 116,101,115,114,1,1,0,0,114,115,0,0,0,114,181,0, -- 0,0,114,2,1,0,0,114,127,0,0,0,114,156,0,0, -- 0,114,107,0,0,0,114,149,0,0,0,114,121,0,0,0, -- 114,160,0,0,0,41,9,114,170,0,0,0,114,126,0,0, -- 0,114,35,0,0,0,114,180,0,0,0,218,14,110,97,109, -- 101,115,112,97,99,101,95,112,97,116,104,90,5,101,110,116, -- 114,121,114,253,0,0,0,114,164,0,0,0,114,128,0,0, +- 125,4,0,124,3,0,100,0,0,107,9,0,114,85,0,116, +- 3,0,124,1,0,124,3,0,131,2,0,83,116,4,0,124, +- 1,0,100,0,0,131,2,0,125,5,0,124,4,0,124,5, +- 0,95,5,0,124,5,0,83,41,2,78,114,165,0,0,0, +- 41,6,114,60,0,0,0,114,165,0,0,0,114,14,1,0, +- 0,114,173,0,0,0,114,216,0,0,0,114,220,0,0,0, +- 41,6,114,11,1,0,0,114,158,0,0,0,114,77,1,0, +- 0,114,169,0,0,0,114,170,0,0,0,114,177,0,0,0, +- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, +- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, +- 99,95,7,0,0,115,18,0,0,0,0,4,15,1,24,2, +- 15,1,6,1,12,1,13,1,15,1,9,1,122,27,80,97, +- 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, +- 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, +- 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, +- 252,0,0,0,103,0,0,125,4,0,120,239,0,124,2,0, +- 68,93,203,0,125,5,0,116,0,0,124,5,0,116,1,0, +- 116,2,0,102,2,0,131,2,0,115,46,0,113,13,0,110, +- 0,0,124,0,0,106,3,0,124,5,0,131,1,0,125,6, +- 0,124,6,0,100,1,0,107,9,0,114,13,0,116,4,0, +- 124,6,0,100,2,0,131,2,0,114,109,0,124,6,0,106, +- 5,0,124,1,0,124,3,0,131,2,0,125,7,0,110,18, +- 0,124,0,0,106,6,0,124,1,0,124,6,0,131,2,0, +- 125,7,0,124,7,0,100,1,0,107,8,0,114,145,0,113, +- 13,0,110,0,0,124,7,0,106,7,0,100,1,0,107,9, +- 0,114,164,0,124,7,0,83,124,7,0,106,8,0,125,8, +- 0,124,8,0,100,1,0,107,8,0,114,200,0,116,9,0, +- 100,3,0,131,1,0,130,1,0,110,0,0,124,4,0,106, +- 10,0,124,8,0,131,1,0,1,113,13,0,113,13,0,87, +- 116,11,0,124,1,0,100,1,0,131,2,0,125,7,0,124, +- 4,0,124,7,0,95,8,0,124,7,0,83,100,1,0,83, +- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, +- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, +- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, +- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, +- 109,101,46,78,114,13,1,0,0,122,19,115,112,101,99,32, +- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,12, +- 114,192,0,0,0,218,3,115,116,114,218,5,98,121,116,101, +- 115,114,80,1,0,0,114,60,0,0,0,114,13,1,0,0, +- 114,81,1,0,0,114,169,0,0,0,114,220,0,0,0,114, +- 153,0,0,0,114,197,0,0,0,114,216,0,0,0,41,9, +- 114,11,1,0,0,114,158,0,0,0,114,35,0,0,0,114, +- 12,1,0,0,218,14,110,97,109,101,115,112,97,99,101,95, +- 112,97,116,104,90,5,101,110,116,114,121,114,77,1,0,0, +- 114,177,0,0,0,114,170,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,218,9,95,103,101,116,95, +- 115,112,101,99,110,7,0,0,115,40,0,0,0,0,5,6, +- 1,13,1,21,1,6,1,15,1,12,1,15,1,21,2,18, +- 1,12,1,6,1,15,1,4,1,9,1,12,1,15,5,20, +- 2,15,1,9,1,122,20,80,97,116,104,70,105,110,100,101, +- 114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0, +- 0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,0, +- 115,143,0,0,0,124,2,0,100,1,0,107,8,0,114,24, +- 0,116,0,0,106,1,0,125,2,0,110,0,0,124,0,0, +- 106,2,0,124,1,0,124,2,0,124,3,0,131,3,0,125, +- 4,0,124,4,0,100,1,0,107,8,0,114,61,0,100,1, +- 0,83,124,4,0,106,3,0,100,1,0,107,8,0,114,135, +- 0,124,4,0,106,4,0,125,5,0,124,5,0,114,128,0, +- 100,2,0,124,4,0,95,5,0,116,6,0,124,1,0,124, +- 5,0,124,0,0,106,2,0,131,3,0,124,4,0,95,4, +- 0,124,4,0,83,100,1,0,83,110,4,0,124,4,0,83, +- 100,1,0,83,41,3,122,98,102,105,110,100,32,116,104,101, +- 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, +- 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, +- 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, +- 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, +- 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, +- 116,101,114,95,99,97,99,104,101,46,78,90,9,110,97,109, +- 101,115,112,97,99,101,41,7,114,7,0,0,0,114,35,0, +- 0,0,114,85,1,0,0,114,169,0,0,0,114,220,0,0, +- 0,114,217,0,0,0,114,60,1,0,0,41,6,114,11,1, +- 0,0,114,158,0,0,0,114,35,0,0,0,114,12,1,0, +- 0,114,177,0,0,0,114,84,1,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,13,1,0,0,142, +- 7,0,0,115,26,0,0,0,0,4,12,1,12,1,21,1, +- 12,1,4,1,15,1,9,1,6,3,9,1,24,1,4,2, +- 7,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, +- 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, +- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,41,0, +- 0,0,124,0,0,106,0,0,124,1,0,124,2,0,131,2, +- 0,125,3,0,124,3,0,100,1,0,107,8,0,114,34,0, +- 100,1,0,83,124,3,0,106,1,0,83,41,2,122,170,102, +- 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, +- 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, +- 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, +- 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, +- 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, +- 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, +- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, +- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, +- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, +- 10,32,32,32,32,32,32,32,32,78,41,2,114,13,1,0, +- 0,114,169,0,0,0,41,4,114,11,1,0,0,114,158,0, +- 0,0,114,35,0,0,0,114,177,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,14,1,0,0, +- 164,7,0,0,115,8,0,0,0,0,8,18,1,12,1,4, +- 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, +- 110,100,95,109,111,100,117,108,101,41,12,114,57,0,0,0, +- 114,56,0,0,0,114,58,0,0,0,114,59,0,0,0,114, +- 18,1,0,0,114,74,1,0,0,114,79,1,0,0,114,80, +- 1,0,0,114,81,1,0,0,114,85,1,0,0,114,13,1, +- 0,0,114,14,1,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,73,1,0,0, +- 49,7,0,0,115,22,0,0,0,12,2,6,2,18,8,18, +- 17,18,17,18,15,3,1,18,31,3,1,21,21,3,1,114, +- 73,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, +- 0,3,0,0,0,64,0,0,0,115,133,0,0,0,101,0, +- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, +- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, +- 5,0,132,0,0,90,5,0,101,6,0,90,7,0,100,6, +- 0,100,7,0,132,0,0,90,8,0,100,8,0,100,9,0, +- 132,0,0,90,9,0,100,10,0,100,11,0,100,12,0,132, +- 1,0,90,10,0,100,13,0,100,14,0,132,0,0,90,11, +- 0,101,12,0,100,15,0,100,16,0,132,0,0,131,1,0, +- 90,13,0,100,17,0,100,18,0,132,0,0,90,14,0,100, +- 10,0,83,41,19,218,10,70,105,108,101,70,105,110,100,101, +- 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105, +- 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114, +- 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101, +- 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101, +- 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102, +- 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32, +- 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101, +- 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, +- 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97, +- 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32, +- 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99, +- 2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, +- 7,0,0,0,115,122,0,0,0,103,0,0,125,3,0,120, +- 52,0,124,2,0,68,93,44,0,92,2,0,137,0,0,125, +- 4,0,124,3,0,106,0,0,135,0,0,102,1,0,100,1, +- 0,100,2,0,134,0,0,124,4,0,68,131,1,0,131,1, +- 0,1,113,13,0,87,124,3,0,124,0,0,95,1,0,124, +- 1,0,112,79,0,100,3,0,124,0,0,95,2,0,100,6, +- 0,124,0,0,95,3,0,116,4,0,131,0,0,124,0,0, +- 95,5,0,116,4,0,131,0,0,124,0,0,95,6,0,100, +- 5,0,83,41,7,122,154,73,110,105,116,105,97,108,105,122, +- 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, +- 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, +- 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, +- 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, +- 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, +- 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, +- 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, +- 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, +- 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, +- 46,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, +- 0,0,51,0,0,0,115,27,0,0,0,124,0,0,93,17, +- 0,125,1,0,124,1,0,136,0,0,102,2,0,86,1,113, +- 3,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2, +- 114,22,0,0,0,114,57,1,0,0,41,1,114,169,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,77,0,0,0, +- 193,7,0,0,115,2,0,0,0,6,0,122,38,70,105,108, ++ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, ++ 0,0,0,67,0,0,0,115,113,0,0,0,116,0,0,124, ++ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, ++ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, ++ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, ++ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, ++ 0,114,85,0,116,3,0,124,1,0,124,3,0,131,2,0, ++ 83,116,4,0,124,1,0,100,0,0,131,2,0,125,5,0, ++ 124,4,0,124,5,0,95,5,0,124,5,0,83,41,2,78, ++ 114,166,0,0,0,41,6,114,61,0,0,0,114,166,0,0, ++ 0,114,15,1,0,0,114,174,0,0,0,114,217,0,0,0, ++ 114,221,0,0,0,41,6,114,12,1,0,0,114,159,0,0, ++ 0,114,78,1,0,0,114,170,0,0,0,114,171,0,0,0, ++ 114,178,0,0,0,114,5,0,0,0,114,5,0,0,0,114, ++ 6,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101, ++ 116,95,115,112,101,99,95,7,0,0,115,18,0,0,0,0, ++ 4,15,1,24,2,15,1,6,1,12,1,13,1,15,1,9, ++ 1,122,27,80,97,116,104,70,105,110,100,101,114,46,95,108, ++ 101,103,97,99,121,95,103,101,116,95,115,112,101,99,78,99, ++ 4,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, ++ 67,0,0,0,115,252,0,0,0,103,0,0,125,4,0,120, ++ 239,0,124,2,0,68,93,203,0,125,5,0,116,0,0,124, ++ 5,0,116,1,0,116,2,0,102,2,0,131,2,0,115,46, ++ 0,113,13,0,110,0,0,124,0,0,106,3,0,124,5,0, ++ 131,1,0,125,6,0,124,6,0,100,1,0,107,9,0,114, ++ 13,0,116,4,0,124,6,0,100,2,0,131,2,0,114,109, ++ 0,124,6,0,106,5,0,124,1,0,124,3,0,131,2,0, ++ 125,7,0,110,18,0,124,0,0,106,6,0,124,1,0,124, ++ 6,0,131,2,0,125,7,0,124,7,0,100,1,0,107,8, ++ 0,114,145,0,113,13,0,110,0,0,124,7,0,106,7,0, ++ 100,1,0,107,9,0,114,164,0,124,7,0,83,124,7,0, ++ 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, ++ 200,0,116,9,0,100,3,0,131,1,0,130,1,0,110,0, ++ 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, ++ 0,113,13,0,87,116,11,0,124,1,0,100,1,0,131,2, ++ 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, ++ 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, ++ 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, ++ 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, ++ 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, ++ 103,101,32,110,97,109,101,46,78,114,14,1,0,0,122,19, ++ 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, ++ 100,101,114,41,12,114,193,0,0,0,218,3,115,116,114,218, ++ 5,98,121,116,101,115,114,81,1,0,0,114,61,0,0,0, ++ 114,14,1,0,0,114,82,1,0,0,114,170,0,0,0,114, ++ 221,0,0,0,114,154,0,0,0,114,198,0,0,0,114,217, ++ 0,0,0,41,9,114,12,1,0,0,114,159,0,0,0,114, ++ 36,0,0,0,114,13,1,0,0,218,14,110,97,109,101,115, ++ 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, ++ 114,78,1,0,0,114,178,0,0,0,114,171,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,9, ++ 95,103,101,116,95,115,112,101,99,110,7,0,0,115,40,0, ++ 0,0,0,5,6,1,13,1,21,1,6,1,15,1,12,1, ++ 15,1,21,2,18,1,12,1,6,1,15,1,4,1,9,1, ++ 12,1,15,5,20,2,15,1,9,1,122,20,80,97,116,104, ++ 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, ++ 99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0, ++ 0,67,0,0,0,115,143,0,0,0,124,2,0,100,1,0, ++ 107,8,0,114,24,0,116,0,0,106,1,0,125,2,0,110, ++ 0,0,124,0,0,106,2,0,124,1,0,124,2,0,124,3, ++ 0,131,3,0,125,4,0,124,4,0,100,1,0,107,8,0, ++ 114,61,0,100,1,0,83,124,4,0,106,3,0,100,1,0, ++ 107,8,0,114,135,0,124,4,0,106,4,0,125,5,0,124, ++ 5,0,114,128,0,100,2,0,124,4,0,95,5,0,116,6, ++ 0,124,1,0,124,5,0,124,0,0,106,2,0,131,3,0, ++ 124,4,0,95,4,0,124,4,0,83,100,1,0,83,110,4, ++ 0,124,4,0,83,100,1,0,83,41,3,122,98,102,105,110, ++ 100,32,116,104,101,32,109,111,100,117,108,101,32,111,110,32, ++ 115,121,115,46,112,97,116,104,32,111,114,32,39,112,97,116, ++ 104,39,32,98,97,115,101,100,32,111,110,32,115,121,115,46, ++ 112,97,116,104,95,104,111,111,107,115,32,97,110,100,10,32, ++ 32,32,32,32,32,32,32,115,121,115,46,112,97,116,104,95, ++ 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,78, ++ 90,9,110,97,109,101,115,112,97,99,101,41,7,114,8,0, ++ 0,0,114,36,0,0,0,114,86,1,0,0,114,170,0,0, ++ 0,114,221,0,0,0,114,218,0,0,0,114,61,1,0,0, ++ 41,6,114,12,1,0,0,114,159,0,0,0,114,36,0,0, ++ 0,114,13,1,0,0,114,178,0,0,0,114,85,1,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 14,1,0,0,142,7,0,0,115,26,0,0,0,0,4,12, ++ 1,12,1,21,1,12,1,4,1,15,1,9,1,6,3,9, ++ 1,24,1,4,2,7,2,122,20,80,97,116,104,70,105,110, ++ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, ++ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, ++ 0,0,115,41,0,0,0,124,0,0,106,0,0,124,1,0, ++ 124,2,0,131,2,0,125,3,0,124,3,0,100,1,0,107, ++ 8,0,114,34,0,100,1,0,83,124,3,0,106,1,0,83, ++ 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, ++ 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, ++ 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, ++ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, ++ 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, ++ 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, ++ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, ++ 2,114,14,1,0,0,114,170,0,0,0,41,4,114,12,1, ++ 0,0,114,159,0,0,0,114,36,0,0,0,114,178,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,15,1,0,0,164,7,0,0,115,8,0,0,0,0,8, ++ 18,1,12,1,4,1,122,22,80,97,116,104,70,105,110,100, ++ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, ++ 114,58,0,0,0,114,57,0,0,0,114,59,0,0,0,114, ++ 60,0,0,0,114,19,1,0,0,114,75,1,0,0,114,80, ++ 1,0,0,114,81,1,0,0,114,82,1,0,0,114,86,1, ++ 0,0,114,14,1,0,0,114,15,1,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,74,1,0,0,49,7,0,0,115,22,0,0,0,12,2, ++ 6,2,18,8,18,17,18,17,18,15,3,1,18,31,3,1, ++ 21,21,3,1,114,74,1,0,0,99,0,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,133, ++ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, ++ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, ++ 0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,0, ++ 90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,100, ++ 8,0,100,9,0,132,0,0,90,9,0,100,10,0,100,11, ++ 0,100,12,0,132,1,0,90,10,0,100,13,0,100,14,0, ++ 132,0,0,90,11,0,101,12,0,100,15,0,100,16,0,132, ++ 0,0,131,1,0,90,13,0,100,17,0,100,18,0,132,0, ++ 0,90,14,0,100,10,0,83,41,19,218,10,70,105,108,101, ++ 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, ++ 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, ++ 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, ++ 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, ++ 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, ++ 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, ++ 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, ++ 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, ++ 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, ++ 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, ++ 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, ++ 32,32,32,32,99,2,0,0,0,0,0,0,0,5,0,0, ++ 0,5,0,0,0,7,0,0,0,115,122,0,0,0,103,0, ++ 0,125,3,0,120,52,0,124,2,0,68,93,44,0,92,2, ++ 0,137,0,0,125,4,0,124,3,0,106,0,0,135,0,0, ++ 102,1,0,100,1,0,100,2,0,134,0,0,124,4,0,68, ++ 131,1,0,131,1,0,1,113,13,0,87,124,3,0,124,0, ++ 0,95,1,0,124,1,0,112,79,0,100,3,0,124,0,0, ++ 95,2,0,100,6,0,124,0,0,95,3,0,116,4,0,131, ++ 0,0,124,0,0,95,5,0,116,4,0,131,0,0,124,0, ++ 0,95,6,0,100,5,0,83,41,7,122,154,73,110,105,116, ++ 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, ++ 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, ++ 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, ++ 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, ++ 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, ++ 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, ++ 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, ++ 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, ++ 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, ++ 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,2, ++ 0,0,0,3,0,0,0,51,0,0,0,115,27,0,0,0, ++ 124,0,0,93,17,0,125,1,0,124,1,0,136,0,0,102, ++ 2,0,86,1,113,3,0,100,0,0,83,41,1,78,114,5, ++ 0,0,0,41,2,114,23,0,0,0,114,58,1,0,0,41, ++ 1,114,170,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,78,0,0,0,193,7,0,0,115,2,0,0,0,6,0, ++ 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, ++ 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, ++ 103,101,110,101,120,112,114,62,114,117,0,0,0,114,30,0, ++ 0,0,78,114,139,0,0,0,41,7,114,198,0,0,0,218, ++ 8,95,108,111,97,100,101,114,115,114,36,0,0,0,218,11, ++ 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, ++ 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, ++ 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, ++ 104,101,41,5,114,72,0,0,0,114,36,0,0,0,218,14, ++ 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, ++ 108,111,97,100,101,114,115,114,128,0,0,0,114,5,0,0, ++ 0,41,1,114,170,0,0,0,114,6,0,0,0,114,73,0, ++ 0,0,187,7,0,0,115,16,0,0,0,0,4,6,1,19, ++ 1,36,1,9,2,15,1,9,1,12,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, +- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, +- 112,114,62,114,116,0,0,0,114,29,0,0,0,78,114,138, +- 0,0,0,41,7,114,197,0,0,0,218,8,95,108,111,97, +- 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, +- 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, +- 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, +- 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, +- 71,0,0,0,114,35,0,0,0,218,14,108,111,97,100,101, +- 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, +- 114,115,114,127,0,0,0,114,4,0,0,0,41,1,114,169, +- 0,0,0,114,5,0,0,0,114,72,0,0,0,187,7,0, +- 0,115,16,0,0,0,0,4,6,1,19,1,36,1,9,2, +- 15,1,9,1,12,1,122,19,70,105,108,101,70,105,110,100, +- 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, +- 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, +- 115,13,0,0,0,100,3,0,124,0,0,95,0,0,100,2, +- 0,83,41,4,122,31,73,110,118,97,108,105,100,97,116,101, +- 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, +- 116,105,109,101,46,114,29,0,0,0,78,114,138,0,0,0, +- 41,1,114,88,1,0,0,41,1,114,71,0,0,0,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,74,1, +- 0,0,201,7,0,0,115,2,0,0,0,0,2,122,28,70, +- 105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,105, +- 100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,0, +- 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, +- 115,59,0,0,0,124,0,0,106,0,0,124,1,0,131,1, +- 0,125,2,0,124,2,0,100,1,0,107,8,0,114,37,0, +- 100,1,0,103,0,0,102,2,0,83,124,2,0,106,1,0, +- 124,2,0,106,2,0,112,55,0,103,0,0,102,2,0,83, +- 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32, +- 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101, +- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, +- 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112, +- 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107, +- 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101, +- 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108, +- 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41, +- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, +- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, +- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, +- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, +- 10,32,32,32,32,32,32,32,32,78,41,3,114,13,1,0, +- 0,114,169,0,0,0,114,220,0,0,0,41,3,114,71,0, +- 0,0,114,158,0,0,0,114,177,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,165,0,0,0, +- 207,7,0,0,115,8,0,0,0,0,7,15,1,12,1,10, +- 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, +- 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, +- 0,0,7,0,0,0,7,0,0,0,67,0,0,0,115,40, +- 0,0,0,124,1,0,124,2,0,124,3,0,131,2,0,125, +- 6,0,116,0,0,124,2,0,124,3,0,100,1,0,124,6, +- 0,100,2,0,124,4,0,131,2,2,83,41,3,78,114,169, +- 0,0,0,114,220,0,0,0,41,1,114,239,0,0,0,41, +- 7,114,71,0,0,0,114,243,0,0,0,114,158,0,0,0, +- 114,35,0,0,0,114,228,0,0,0,114,12,1,0,0,114, +- 169,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,85,1,0,0,219,7,0,0,115,6,0,0, +- 0,0,1,15,1,18,1,122,20,70,105,108,101,70,105,110, +- 100,101,114,46,95,103,101,116,95,115,112,101,99,78,99,3, +- 0,0,0,0,0,0,0,14,0,0,0,15,0,0,0,67, +- 0,0,0,115,240,1,0,0,100,1,0,125,3,0,124,1, +- 0,106,0,0,100,2,0,131,1,0,100,3,0,25,125,4, +- 0,121,34,0,116,1,0,124,0,0,106,2,0,112,49,0, +- 116,3,0,106,4,0,131,0,0,131,1,0,106,5,0,125, +- 5,0,87,110,24,0,4,116,6,0,107,10,0,114,85,0, +- 1,1,1,100,10,0,125,5,0,89,110,1,0,88,124,5, +- 0,124,0,0,106,7,0,107,3,0,114,123,0,124,0,0, +- 106,8,0,131,0,0,1,124,5,0,124,0,0,95,7,0, +- 110,0,0,116,9,0,131,0,0,114,156,0,124,0,0,106, +- 10,0,125,6,0,124,4,0,106,11,0,131,0,0,125,7, +- 0,110,15,0,124,0,0,106,12,0,125,6,0,124,4,0, +- 125,7,0,124,7,0,124,6,0,107,6,0,114,51,1,116, +- 13,0,124,0,0,106,2,0,124,4,0,131,2,0,125,8, +- 0,120,103,0,124,0,0,106,14,0,68,93,77,0,92,2, +- 0,125,9,0,125,10,0,100,5,0,124,9,0,23,125,11, +- 0,116,13,0,124,8,0,124,11,0,131,2,0,125,12,0, +- 116,15,0,124,12,0,131,1,0,114,211,0,124,0,0,106, +- 16,0,124,10,0,124,1,0,124,12,0,124,8,0,103,1, +- 0,124,2,0,131,5,0,83,113,211,0,87,116,17,0,124, +- 8,0,131,1,0,125,3,0,110,0,0,120,126,0,124,0, +- 0,106,14,0,68,93,115,0,92,2,0,125,9,0,125,10, +- 0,116,13,0,124,0,0,106,2,0,124,4,0,124,9,0, +- 23,131,2,0,125,12,0,116,18,0,100,6,0,106,19,0, +- 124,12,0,131,1,0,100,7,0,100,3,0,131,1,1,1, +- 124,7,0,124,9,0,23,124,6,0,107,6,0,114,61,1, +- 116,15,0,124,12,0,131,1,0,114,176,1,124,0,0,106, +- 16,0,124,10,0,124,1,0,124,12,0,100,8,0,124,2, +- 0,131,5,0,83,113,61,1,113,61,1,87,124,3,0,114, +- 236,1,116,18,0,100,9,0,106,19,0,124,8,0,131,1, +- 0,131,1,0,1,116,20,0,124,1,0,100,8,0,131,2, +- 0,125,13,0,124,8,0,103,1,0,124,13,0,95,21,0, +- 124,13,0,83,100,8,0,83,41,11,122,125,84,114,121,32, +- 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, +- 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, +- 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, +- 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, +- 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, +- 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, +- 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, +- 111,114,116,105,111,110,115,41,46,70,114,116,0,0,0,114, +- 115,0,0,0,114,29,0,0,0,114,72,0,0,0,122,9, +- 116,114,121,105,110,103,32,123,125,114,145,0,0,0,78,122, +- 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, +- 97,99,101,32,102,111,114,32,123,125,114,138,0,0,0,41, +- 22,114,32,0,0,0,114,39,0,0,0,114,35,0,0,0, +- 114,3,0,0,0,114,45,0,0,0,114,53,1,0,0,114, +- 40,0,0,0,114,88,1,0,0,218,11,95,102,105,108,108, +- 95,99,97,99,104,101,114,6,0,0,0,114,91,1,0,0, +- 114,139,0,0,0,114,90,1,0,0,114,28,0,0,0,114, +- 87,1,0,0,114,44,0,0,0,114,85,1,0,0,114,46, +- 0,0,0,114,152,0,0,0,114,47,0,0,0,114,216,0, +- 0,0,114,220,0,0,0,41,14,114,71,0,0,0,114,158, +- 0,0,0,114,12,1,0,0,90,12,105,115,95,110,97,109, +- 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, +- 117,108,101,114,183,0,0,0,90,5,99,97,99,104,101,90, +- 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, +- 97,115,101,95,112,97,116,104,114,57,1,0,0,114,243,0, +- 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, +- 101,90,9,102,117,108,108,95,112,97,116,104,114,177,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,9,95,103,101,116,95,115,112,101,99,74,4,0,0,115, -- 40,0,0,0,0,5,6,1,13,1,21,1,3,1,15,1, -- 12,1,15,1,21,2,18,1,12,1,3,1,15,1,4,1, -- 9,1,12,1,12,5,17,2,18,1,9,1,122,20,80,97, -- 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, -- 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, -- 0,0,0,67,0,0,0,115,140,0,0,0,124,2,0,100, -- 1,0,107,8,0,114,21,0,116,0,0,106,1,0,125,2, -- 0,124,0,0,106,2,0,124,1,0,124,2,0,124,3,0, -- 131,3,0,125,4,0,124,4,0,100,1,0,107,8,0,114, -- 58,0,100,1,0,83,124,4,0,106,3,0,100,1,0,107, -- 8,0,114,132,0,124,4,0,106,4,0,125,5,0,124,5, -- 0,114,125,0,100,2,0,124,4,0,95,5,0,116,6,0, -- 124,1,0,124,5,0,124,0,0,106,2,0,131,3,0,124, -- 4,0,95,4,0,124,4,0,83,100,1,0,83,110,4,0, -- 124,4,0,83,100,1,0,83,41,3,122,98,102,105,110,100, -- 32,116,104,101,32,109,111,100,117,108,101,32,111,110,32,115, -- 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, -- 39,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, -- 97,116,104,95,104,111,111,107,115,32,97,110,100,10,32,32, -- 32,32,32,32,32,32,115,121,115,46,112,97,116,104,95,105, -- 109,112,111,114,116,101,114,95,99,97,99,104,101,46,78,90, -- 9,110,97,109,101,115,112,97,99,101,41,7,114,7,0,0, -- 0,114,35,0,0,0,114,5,1,0,0,114,127,0,0,0, -- 114,156,0,0,0,114,158,0,0,0,114,230,0,0,0,41, -- 6,114,170,0,0,0,114,126,0,0,0,114,35,0,0,0, -- 114,180,0,0,0,114,164,0,0,0,114,4,1,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181, -- 0,0,0,106,4,0,0,115,26,0,0,0,0,4,12,1, -- 9,1,21,1,12,1,4,1,15,1,9,1,6,3,9,1, -- 24,1,4,2,7,2,122,20,80,97,116,104,70,105,110,100, -- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, -- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, -- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, -- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,8, -- 0,114,34,0,100,1,0,83,124,3,0,106,1,0,83,41, -- 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, -- 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, -- 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, -- 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, -- 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, -- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, -- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, -- 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, -- 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, -- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, -- 114,181,0,0,0,114,127,0,0,0,41,4,114,170,0,0, -- 0,114,126,0,0,0,114,35,0,0,0,114,164,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 182,0,0,0,128,4,0,0,115,8,0,0,0,0,8,18, -- 1,12,1,4,1,122,22,80,97,116,104,70,105,110,100,101, -- 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, -- 112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114, -- 0,0,0,114,183,0,0,0,114,250,0,0,0,114,255,0, -- 0,0,114,1,1,0,0,114,2,1,0,0,114,5,1,0, -- 0,114,181,0,0,0,114,182,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 249,0,0,0,8,4,0,0,115,22,0,0,0,12,2,6, -- 2,18,8,18,17,18,22,18,15,3,1,18,31,3,1,21, -- 21,3,1,114,249,0,0,0,99,0,0,0,0,0,0,0, -- 0,0,0,0,0,3,0,0,0,64,0,0,0,115,133,0, -- 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, -- 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, -- 100,4,0,100,5,0,132,0,0,90,5,0,101,6,0,90, -- 7,0,100,6,0,100,7,0,132,0,0,90,8,0,100,8, -- 0,100,9,0,132,0,0,90,9,0,100,10,0,100,11,0, -- 100,12,0,132,1,0,90,10,0,100,13,0,100,14,0,132, -- 0,0,90,11,0,101,12,0,100,15,0,100,16,0,132,0, -- 0,131,1,0,90,13,0,100,17,0,100,18,0,132,0,0, -- 90,14,0,100,10,0,83,41,19,218,10,70,105,108,101,70, -- 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, -- 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, -- 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, -- 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, -- 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, -- 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, -- 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, -- 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, -- 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, -- 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, -- 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, -- 32,32,32,99,2,0,0,0,0,0,0,0,5,0,0,0, -- 5,0,0,0,7,0,0,0,115,122,0,0,0,103,0,0, -- 125,3,0,120,52,0,124,2,0,68,93,44,0,92,2,0, -- 137,0,0,125,4,0,124,3,0,106,0,0,135,0,0,102, -- 1,0,100,1,0,100,2,0,134,0,0,124,4,0,68,131, -- 1,0,131,1,0,1,113,13,0,87,124,3,0,124,0,0, -- 95,1,0,124,1,0,112,79,0,100,3,0,124,0,0,95, -- 2,0,100,6,0,124,0,0,95,3,0,116,4,0,131,0, -- 0,124,0,0,95,5,0,116,4,0,131,0,0,124,0,0, -- 95,6,0,100,5,0,83,41,7,122,154,73,110,105,116,105, -- 97,108,105,122,101,32,119,105,116,104,32,116,104,101,32,112, -- 97,116,104,32,116,111,32,115,101,97,114,99,104,32,111,110, -- 32,97,110,100,32,97,32,118,97,114,105,97,98,108,101,32, -- 110,117,109,98,101,114,32,111,102,10,32,32,32,32,32,32, -- 32,32,50,45,116,117,112,108,101,115,32,99,111,110,116,97, -- 105,110,105,110,103,32,116,104,101,32,108,111,97,100,101,114, -- 32,97,110,100,32,116,104,101,32,102,105,108,101,32,115,117, -- 102,102,105,120,101,115,32,116,104,101,32,108,111,97,100,101, -- 114,10,32,32,32,32,32,32,32,32,114,101,99,111,103,110, -- 105,122,101,115,46,99,1,0,0,0,0,0,0,0,2,0, -- 0,0,3,0,0,0,51,0,0,0,115,27,0,0,0,124, -- 0,0,93,17,0,125,1,0,124,1,0,136,0,0,102,2, -- 0,86,1,113,3,0,100,0,0,83,41,1,78,114,4,0, -- 0,0,41,2,114,22,0,0,0,114,225,0,0,0,41,1, -- 114,127,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 227,0,0,0,157,4,0,0,115,2,0,0,0,6,0,122, -- 38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, -- 105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,103, -- 101,110,101,120,112,114,62,114,58,0,0,0,114,29,0,0, -- 0,78,114,87,0,0,0,41,7,114,149,0,0,0,218,8, -- 95,108,111,97,100,101,114,115,114,35,0,0,0,218,11,95, -- 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, -- 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, -- 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, -- 101,41,5,114,108,0,0,0,114,35,0,0,0,218,14,108, -- 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, -- 111,97,100,101,114,115,114,166,0,0,0,114,4,0,0,0, -- 41,1,114,127,0,0,0,114,5,0,0,0,114,185,0,0, -- 0,151,4,0,0,115,16,0,0,0,0,4,6,1,19,1, -- 36,1,9,2,15,1,9,1,12,1,122,19,70,105,108,101, -- 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, -- 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, -- 67,0,0,0,115,13,0,0,0,100,3,0,124,0,0,95, -- 0,0,100,2,0,83,41,4,122,31,73,110,118,97,108,105, -- 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111, -- 114,121,32,109,116,105,109,101,46,114,29,0,0,0,78,114, -- 87,0,0,0,41,1,114,8,1,0,0,41,1,114,108,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,250,0,0,0,165,4,0,0,115,2,0,0,0,0, -- 2,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, -- 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, -- 2,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, -- 67,0,0,0,115,59,0,0,0,124,0,0,106,0,0,124, -- 1,0,131,1,0,125,2,0,124,2,0,100,1,0,107,8, -- 0,114,37,0,100,1,0,103,0,0,102,2,0,83,124,2, -- 0,106,1,0,124,2,0,106,2,0,112,55,0,103,0,0, -- 102,2,0,83,41,2,122,197,84,114,121,32,116,111,32,102, -- 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, -- 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, -- 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, -- 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, -- 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, -- 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, -- 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, -- 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, -- 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, -- 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, -- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, -- 114,181,0,0,0,114,127,0,0,0,114,156,0,0,0,41, -- 3,114,108,0,0,0,114,126,0,0,0,114,164,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 124,0,0,0,171,4,0,0,115,8,0,0,0,0,7,15, -- 1,12,1,10,1,122,22,70,105,108,101,70,105,110,100,101, -- 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, -- 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, -- 0,0,115,40,0,0,0,124,1,0,124,2,0,124,3,0, -- 131,2,0,125,6,0,116,0,0,124,2,0,124,3,0,100, -- 1,0,124,6,0,100,2,0,124,4,0,131,2,2,83,41, -- 3,78,114,127,0,0,0,114,156,0,0,0,41,1,114,167, -- 0,0,0,41,7,114,108,0,0,0,114,165,0,0,0,114, -- 126,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, -- 180,0,0,0,114,127,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,5,1,0,0,183,4,0, -- 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, -- 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, -- 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, -- 15,0,0,0,67,0,0,0,115,234,1,0,0,100,1,0, -- 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, -- 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, -- 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, -- 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, -- 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, -- 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, -- 120,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, -- 0,0,95,7,0,116,9,0,131,0,0,114,153,0,124,0, -- 0,106,10,0,125,6,0,124,4,0,106,11,0,131,0,0, -- 125,7,0,110,15,0,124,0,0,106,12,0,125,6,0,124, -- 4,0,125,7,0,124,7,0,124,6,0,107,6,0,114,45, -- 1,116,13,0,124,0,0,106,2,0,124,4,0,131,2,0, -- 125,8,0,120,100,0,124,0,0,106,14,0,68,93,77,0, -- 92,2,0,125,9,0,125,10,0,100,5,0,124,9,0,23, -- 125,11,0,116,13,0,124,8,0,124,11,0,131,2,0,125, -- 12,0,116,15,0,124,12,0,131,1,0,114,208,0,124,0, -- 0,106,16,0,124,10,0,124,1,0,124,12,0,124,8,0, -- 103,1,0,124,2,0,131,5,0,83,113,208,0,87,116,17, -- 0,124,8,0,131,1,0,125,3,0,120,123,0,124,0,0, -- 106,14,0,68,93,112,0,92,2,0,125,9,0,125,10,0, -- 116,13,0,124,0,0,106,2,0,124,4,0,124,9,0,23, -- 131,2,0,125,12,0,116,18,0,100,6,0,106,19,0,124, -- 12,0,131,1,0,100,7,0,100,3,0,131,1,1,1,124, -- 7,0,124,9,0,23,124,6,0,107,6,0,114,55,1,116, -- 15,0,124,12,0,131,1,0,114,55,1,124,0,0,106,16, -- 0,124,10,0,124,1,0,124,12,0,100,8,0,124,2,0, -- 131,5,0,83,113,55,1,87,124,3,0,114,230,1,116,18, -- 0,100,9,0,106,19,0,124,8,0,131,1,0,131,1,0, -- 1,116,20,0,106,21,0,124,1,0,100,8,0,131,2,0, -- 125,13,0,124,8,0,103,1,0,124,13,0,95,22,0,124, -- 13,0,83,100,8,0,83,41,11,122,125,84,114,121,32,116, -- 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, -- 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, -- 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, -- 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, -- 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, -- 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, -- 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, -- 114,116,105,111,110,115,41,46,70,114,58,0,0,0,114,56, -- 0,0,0,114,29,0,0,0,114,185,0,0,0,122,9,116, -- 114,121,105,110,103,32,123,125,114,98,0,0,0,78,122,25, -- 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, -- 99,101,32,102,111,114,32,123,125,114,87,0,0,0,41,23, -- 114,32,0,0,0,114,39,0,0,0,114,35,0,0,0,114, -- 3,0,0,0,114,45,0,0,0,114,219,0,0,0,114,40, -- 0,0,0,114,8,1,0,0,218,11,95,102,105,108,108,95, -- 99,97,99,104,101,114,6,0,0,0,114,11,1,0,0,114, -- 88,0,0,0,114,10,1,0,0,114,28,0,0,0,114,7, -- 1,0,0,114,44,0,0,0,114,5,1,0,0,114,46,0, -- 0,0,114,105,0,0,0,114,47,0,0,0,114,121,0,0, -- 0,114,160,0,0,0,114,156,0,0,0,41,14,114,108,0, -- 0,0,114,126,0,0,0,114,180,0,0,0,90,12,105,115, -- 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, -- 95,109,111,100,117,108,101,114,133,0,0,0,90,5,99,97, -- 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, -- 101,90,9,98,97,115,101,95,112,97,116,104,114,225,0,0, -- 0,114,165,0,0,0,90,13,105,110,105,116,95,102,105,108, -- 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, -- 114,164,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,181,0,0,0,188,4,0,0,115,68,0, -- 0,0,0,3,6,1,19,1,3,1,34,1,13,1,11,1, -- 15,1,10,1,9,2,9,1,9,1,15,2,9,1,6,2, -- 12,1,18,1,22,1,10,1,15,1,12,1,32,4,12,2, -- 22,1,22,1,25,1,16,1,12,1,29,1,6,1,19,1, -- 18,1,12,1,4,1,122,20,70,105,108,101,70,105,110,100, -- 101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,0, -- 0,0,0,0,0,9,0,0,0,13,0,0,0,67,0,0, -- 0,115,11,1,0,0,124,0,0,106,0,0,125,1,0,121, -- 31,0,116,1,0,106,2,0,124,1,0,112,33,0,116,1, -- 0,106,3,0,131,0,0,131,1,0,125,2,0,87,110,33, -- 0,4,116,4,0,116,5,0,116,6,0,102,3,0,107,10, -- 0,114,75,0,1,1,1,103,0,0,125,2,0,89,110,1, -- 0,88,116,7,0,106,8,0,106,9,0,100,1,0,131,1, -- 0,115,112,0,116,10,0,124,2,0,131,1,0,124,0,0, -- 95,11,0,110,111,0,116,10,0,131,0,0,125,3,0,120, -- 90,0,124,2,0,68,93,82,0,125,4,0,124,4,0,106, -- 12,0,100,2,0,131,1,0,92,3,0,125,5,0,125,6, -- 0,125,7,0,124,6,0,114,191,0,100,3,0,106,13,0, -- 124,5,0,124,7,0,106,14,0,131,0,0,131,2,0,125, -- 8,0,110,6,0,124,5,0,125,8,0,124,3,0,106,15, -- 0,124,8,0,131,1,0,1,113,128,0,87,124,3,0,124, -- 0,0,95,11,0,116,7,0,106,8,0,106,9,0,116,16, -- 0,131,1,0,114,7,1,100,4,0,100,5,0,132,0,0, -- 124,2,0,68,131,1,0,124,0,0,95,17,0,100,6,0, -- 83,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, -- 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, -- 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, -- 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, -- 105,114,101,99,116,111,114,121,46,114,0,0,0,0,114,58, -- 0,0,0,122,5,123,125,46,123,125,99,1,0,0,0,0, -- 0,0,0,2,0,0,0,3,0,0,0,83,0,0,0,115, -- 28,0,0,0,104,0,0,124,0,0,93,18,0,125,1,0, -- 124,1,0,106,0,0,131,0,0,146,2,0,113,6,0,83, -- 114,4,0,0,0,41,1,114,88,0,0,0,41,2,114,22, -- 0,0,0,90,2,102,110,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,250,9,60,115,101,116,99,111,109,112, -- 62,6,5,0,0,115,2,0,0,0,9,0,122,41,70,105, -- 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, -- 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, -- 101,116,99,111,109,112,62,78,41,18,114,35,0,0,0,114, -- 3,0,0,0,90,7,108,105,115,116,100,105,114,114,45,0, -- 0,0,114,0,1,0,0,218,15,80,101,114,109,105,115,115, -- 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, -- 114,101,99,116,111,114,121,69,114,114,111,114,114,7,0,0, -- 0,114,8,0,0,0,114,9,0,0,0,114,9,1,0,0, -- 114,10,1,0,0,114,83,0,0,0,114,47,0,0,0,114, -- 88,0,0,0,218,3,97,100,100,114,10,0,0,0,114,11, -- 1,0,0,41,9,114,108,0,0,0,114,35,0,0,0,90, -- 8,99,111,110,116,101,110,116,115,90,21,108,111,119,101,114, -- 95,115,117,102,102,105,120,95,99,111,110,116,101,110,116,115, -- 114,245,0,0,0,114,106,0,0,0,114,237,0,0,0,114, -- 225,0,0,0,90,8,110,101,119,95,110,97,109,101,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,13,1, -- 0,0,233,4,0,0,115,34,0,0,0,0,2,9,1,3, -- 1,31,1,22,3,11,3,18,1,18,7,9,1,13,1,24, -- 1,6,1,27,2,6,1,17,1,9,1,18,1,122,22,70, -- 105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,95, -- 99,97,99,104,101,99,1,0,0,0,0,0,0,0,3,0, -- 0,0,3,0,0,0,7,0,0,0,115,25,0,0,0,135, -- 0,0,135,1,0,102,2,0,100,1,0,100,2,0,134,0, -- 0,125,2,0,124,2,0,83,41,3,97,20,1,0,0,65, -- 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, -- 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, -- 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, -- 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, -- 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, -- 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, -- 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, -- 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, -- 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, -- 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, -- 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, -- 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, -- 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, -- 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, -- 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, -- 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, -- 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, -- 32,32,32,99,1,0,0,0,0,0,0,0,1,0,0,0, -- 4,0,0,0,19,0,0,0,115,43,0,0,0,116,0,0, -- 124,0,0,131,1,0,115,30,0,116,1,0,100,1,0,100, -- 2,0,124,0,0,131,1,1,130,1,0,136,0,0,124,0, +- 114,13,1,0,0,224,7,0,0,115,68,0,0,0,0,3, +- 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, +- 12,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, +- 22,1,10,1,15,1,12,1,32,4,15,2,22,1,22,1, +- 25,1,16,1,12,1,32,1,6,1,19,1,15,1,12,1, +- 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, +- 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, +- 0,9,0,0,0,13,0,0,0,67,0,0,0,115,14,1, +- 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, +- 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, +- 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, +- 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, +- 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, +- 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, +- 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, +- 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, +- 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, +- 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, +- 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, +- 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, +- 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, +- 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, +- 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, +- 114,10,1,100,4,0,100,5,0,132,0,0,124,2,0,68, +- 131,1,0,124,0,0,95,17,0,110,0,0,100,6,0,83, +- 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, +- 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, +- 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, +- 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, +- 114,101,99,116,111,114,121,46,114,0,0,0,0,114,116,0, +- 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,28, +- 0,0,0,104,0,0,124,0,0,93,18,0,125,1,0,124, +- 1,0,106,0,0,131,0,0,146,2,0,113,6,0,83,114, +- 4,0,0,0,41,1,114,139,0,0,0,41,2,114,22,0, +- 0,0,90,2,102,110,114,4,0,0,0,114,4,0,0,0, +- 114,5,0,0,0,250,9,60,115,101,116,99,111,109,112,62, +- 42,8,0,0,115,2,0,0,0,9,0,122,41,70,105,108, +- 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, +- 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, +- 116,99,111,109,112,62,78,41,18,114,35,0,0,0,114,3, +- 0,0,0,90,7,108,105,115,116,100,105,114,114,45,0,0, +- 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, +- 114,114,111,114,218,15,80,101,114,109,105,115,115,105,111,110, +- 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, +- 116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,8, +- 0,0,0,114,9,0,0,0,114,89,1,0,0,114,90,1, +- 0,0,114,121,0,0,0,114,47,0,0,0,114,139,0,0, +- 0,218,3,97,100,100,114,10,0,0,0,114,91,1,0,0, +- 41,9,114,71,0,0,0,114,35,0,0,0,90,8,99,111, +- 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, +- 102,102,105,120,95,99,111,110,116,101,110,116,115,114,71,1, +- 0,0,114,67,0,0,0,114,65,1,0,0,114,57,1,0, +- 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,93,1,0,0,13, +- 8,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, +- 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, +- 27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,101, +- 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, +- 104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,3, +- 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, +- 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, +- 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, +- 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, +- 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, +- 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, +- 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, +- 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, +- 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, +- 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, +- 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, +- 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, +- 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, +- 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, +- 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, +- 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, +- 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, +- 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, +- 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, +- 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, +- 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, +- 0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0, +- 131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124, +- 0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0, - 0,136,1,0,140,1,0,83,41,3,122,45,80,97,116,104, - 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, - 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, - 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, - 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, - 115,117,112,112,111,114,116,101,100,114,35,0,0,0,41,2, -- 114,46,0,0,0,114,107,0,0,0,41,1,114,35,0,0, -- 0,41,2,114,170,0,0,0,114,12,1,0,0,114,4,0, +- 114,46,0,0,0,114,153,0,0,0,41,1,114,35,0,0, +- 0,41,2,114,11,1,0,0,114,92,1,0,0,114,4,0, - 0,0,114,5,0,0,0,218,24,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, -- 114,18,5,0,0,115,6,0,0,0,0,2,12,1,18,1, +- 114,54,8,0,0,115,6,0,0,0,0,2,12,1,21,1, - 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, - 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,114,4,0,0,0,41,3,114, -- 170,0,0,0,114,12,1,0,0,114,18,1,0,0,114,4, -- 0,0,0,41,2,114,170,0,0,0,114,12,1,0,0,114, -- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,8, -- 5,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, +- 11,1,0,0,114,92,1,0,0,114,99,1,0,0,114,4, +- 0,0,0,41,2,114,11,1,0,0,114,92,1,0,0,114, +- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,44, +- 8,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, - 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, - 41,41,2,114,47,0,0,0,114,35,0,0,0,41,1,114, -- 108,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,244,0,0,0,26,5,0,0,115,2,0,0, +- 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,114,101,0,0,0,62,8,0,0,115,2,0,0, - 0,0,1,122,19,70,105,108,101,70,105,110,100,101,114,46, -- 95,95,114,101,112,114,95,95,41,15,114,112,0,0,0,114, -- 111,0,0,0,114,113,0,0,0,114,114,0,0,0,114,185, -- 0,0,0,114,250,0,0,0,114,130,0,0,0,114,182,0, -- 0,0,114,124,0,0,0,114,5,1,0,0,114,181,0,0, -- 0,114,13,1,0,0,114,183,0,0,0,114,19,1,0,0, -- 114,244,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,6,1,0,0,142,4, +- 95,95,114,101,112,114,95,95,41,15,114,57,0,0,0,114, +- 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,72, +- 0,0,0,114,74,1,0,0,114,172,0,0,0,114,14,1, +- 0,0,114,165,0,0,0,114,85,1,0,0,114,13,1,0, +- 0,114,93,1,0,0,114,18,1,0,0,114,100,1,0,0, +- 114,101,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,5,0,0,0,114,86,1,0,0,178,7, - 0,0,115,20,0,0,0,12,7,6,2,12,14,12,4,6, -- 2,12,12,12,5,15,45,12,31,18,18,114,6,1,0,0, -- 99,4,0,0,0,0,0,0,0,6,0,0,0,11,0,0, -- 0,67,0,0,0,115,195,0,0,0,124,0,0,106,0,0, -- 100,1,0,131,1,0,125,4,0,124,0,0,106,0,0,100, -- 2,0,131,1,0,125,5,0,124,4,0,115,99,0,124,5, -- 0,114,54,0,124,5,0,106,1,0,125,4,0,110,45,0, -- 124,2,0,124,3,0,107,2,0,114,84,0,116,2,0,124, -- 1,0,124,2,0,131,2,0,125,4,0,110,15,0,116,3, -- 0,124,1,0,124,2,0,131,2,0,125,4,0,124,5,0, -- 115,126,0,116,4,0,124,1,0,124,2,0,100,3,0,124, -- 4,0,131,2,1,125,5,0,121,44,0,124,5,0,124,0, -- 0,100,2,0,60,124,4,0,124,0,0,100,1,0,60,124, -- 2,0,124,0,0,100,4,0,60,124,3,0,124,0,0,100, -- 5,0,60,87,110,18,0,4,116,5,0,107,10,0,114,190, -- 0,1,1,1,89,110,1,0,88,100,0,0,83,41,6,78, -- 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, -- 115,112,101,99,95,95,114,127,0,0,0,90,8,95,95,102, -- 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, -- 95,41,6,218,3,103,101,116,114,127,0,0,0,114,223,0, -- 0,0,114,218,0,0,0,114,167,0,0,0,218,9,69,120, -- 99,101,112,116,105,111,110,41,6,90,2,110,115,114,106,0, -- 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, -- 97,116,104,110,97,109,101,114,127,0,0,0,114,164,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, -- 32,5,0,0,115,34,0,0,0,0,2,15,1,15,1,6, -- 1,6,1,12,1,12,1,18,2,15,1,6,1,21,1,3, -- 1,10,1,10,1,10,1,14,1,13,2,114,24,1,0,0, -- 99,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, -- 0,67,0,0,0,115,55,0,0,0,116,0,0,116,1,0, -- 106,2,0,131,0,0,102,2,0,125,0,0,116,3,0,116, -- 4,0,102,2,0,125,1,0,116,5,0,116,6,0,102,2, -- 0,125,2,0,124,0,0,124,1,0,124,2,0,103,3,0, -- 83,41,1,122,95,82,101,116,117,114,110,115,32,97,32,108, -- 105,115,116,32,111,102,32,102,105,108,101,45,98,97,115,101, -- 100,32,109,111,100,117,108,101,32,108,111,97,100,101,114,115, -- 46,10,10,32,32,32,32,69,97,99,104,32,105,116,101,109, -- 32,105,115,32,97,32,116,117,112,108,101,32,40,108,111,97, -- 100,101,114,44,32,115,117,102,102,105,120,101,115,41,46,10, -- 32,32,32,32,41,7,114,224,0,0,0,114,145,0,0,0, -- 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, -- 105,120,101,115,114,218,0,0,0,114,84,0,0,0,114,223, -- 0,0,0,114,74,0,0,0,41,3,90,10,101,120,116,101, -- 110,115,105,111,110,115,90,6,115,111,117,114,99,101,90,8, -- 98,121,116,101,99,111,100,101,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,161,0,0,0,55,5,0,0, -- 115,8,0,0,0,0,5,18,1,12,1,12,1,114,161,0, -- 0,0,99,1,0,0,0,0,0,0,0,12,0,0,0,12, -- 0,0,0,67,0,0,0,115,70,2,0,0,124,0,0,97, -- 0,0,116,0,0,106,1,0,97,1,0,116,0,0,106,2, -- 0,97,2,0,116,1,0,106,3,0,116,4,0,25,125,1, -- 0,120,76,0,100,26,0,68,93,68,0,125,2,0,124,2, -- 0,116,1,0,106,3,0,107,7,0,114,83,0,116,0,0, -- 106,5,0,124,2,0,131,1,0,125,3,0,110,13,0,116, -- 1,0,106,3,0,124,2,0,25,125,3,0,116,6,0,124, -- 1,0,124,2,0,124,3,0,131,3,0,1,113,44,0,87, -- 100,5,0,100,6,0,103,1,0,102,2,0,100,7,0,100, -- 8,0,100,6,0,103,2,0,102,2,0,102,2,0,125,4, -- 0,120,149,0,124,4,0,68,93,129,0,92,2,0,125,5, -- 0,125,6,0,116,7,0,100,9,0,100,10,0,132,0,0, -- 124,6,0,68,131,1,0,131,1,0,115,199,0,116,8,0, -- 130,1,0,124,6,0,100,11,0,25,125,7,0,124,5,0, -- 116,1,0,106,3,0,107,6,0,114,241,0,116,1,0,106, -- 3,0,124,5,0,25,125,8,0,80,113,156,0,121,20,0, -- 116,0,0,106,5,0,124,5,0,131,1,0,125,8,0,80, -- 87,113,156,0,4,116,9,0,107,10,0,114,28,1,1,1, -- 1,119,156,0,89,113,156,0,88,113,156,0,87,116,9,0, -- 100,12,0,131,1,0,130,1,0,116,6,0,124,1,0,100, -- 13,0,124,8,0,131,3,0,1,116,6,0,124,1,0,100, -- 14,0,124,7,0,131,3,0,1,116,6,0,124,1,0,100, -- 15,0,100,16,0,106,10,0,124,6,0,131,1,0,131,3, -- 0,1,121,19,0,116,0,0,106,5,0,100,17,0,131,1, -- 0,125,9,0,87,110,24,0,4,116,9,0,107,10,0,114, -- 147,1,1,1,1,100,18,0,125,9,0,89,110,1,0,88, -- 116,6,0,124,1,0,100,17,0,124,9,0,131,3,0,1, -- 116,0,0,106,5,0,100,19,0,131,1,0,125,10,0,116, -- 6,0,124,1,0,100,19,0,124,10,0,131,3,0,1,124, -- 5,0,100,7,0,107,2,0,114,238,1,116,0,0,106,5, -- 0,100,20,0,131,1,0,125,11,0,116,6,0,124,1,0, -- 100,21,0,124,11,0,131,3,0,1,116,6,0,124,1,0, -- 100,22,0,116,11,0,131,0,0,131,3,0,1,116,12,0, -- 106,13,0,116,2,0,106,14,0,131,0,0,131,1,0,1, -- 124,5,0,100,7,0,107,2,0,114,66,2,116,15,0,106, -- 16,0,100,23,0,131,1,0,1,100,24,0,116,12,0,107, -- 6,0,114,66,2,100,25,0,116,17,0,95,18,0,100,18, -- 0,83,41,27,122,205,83,101,116,117,112,32,116,104,101,32, -+ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, -+ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, -+ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, -+ 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, -+ 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, -+ 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, -+ 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -+ 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, -+ 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, -+ 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, -+ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, -+ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, -+ 41,2,114,48,0,0,0,114,113,0,0,0,41,2,114,171, -+ 0,0,0,114,191,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,11,109,111,100,117,108,101,95, -+ 114,101,112,114,227,3,0,0,115,2,0,0,0,0,7,122, -+ 28,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, -+ 114,46,109,111,100,117,108,101,95,114,101,112,114,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, -+ 0,0,115,4,0,0,0,100,1,0,83,41,2,78,84,114, -+ 5,0,0,0,41,2,114,109,0,0,0,114,127,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 160,0,0,0,236,3,0,0,115,2,0,0,0,0,1,122, -+ 27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, -+ 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, -+ 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, -+ 0,115,4,0,0,0,100,1,0,83,41,2,78,114,31,0, -+ 0,0,114,5,0,0,0,41,2,114,109,0,0,0,114,127, +- 2,12,12,12,5,15,45,12,31,18,18,114,86,1,0,0, +- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,64,0,0,0,115,46,0,0,0,101,0,0,90,1,0, +- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, +- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, +- 0,90,5,0,100,6,0,83,41,7,218,18,95,73,109,112, +- 111,114,116,76,111,99,107,67,111,110,116,101,120,116,122,36, +- 67,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32, +- 102,111,114,32,116,104,101,32,105,109,112,111,114,116,32,108, +- 111,99,107,46,99,1,0,0,0,0,0,0,0,1,0,0, +- 0,1,0,0,0,67,0,0,0,115,14,0,0,0,116,0, +- 0,106,1,0,131,0,0,1,100,1,0,83,41,2,122,24, +- 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, +- 114,116,32,108,111,99,107,46,78,41,2,114,106,0,0,0, +- 114,3,1,0,0,41,1,114,71,0,0,0,114,4,0,0, +- 0,114,4,0,0,0,114,5,0,0,0,114,75,0,0,0, +- 72,8,0,0,115,2,0,0,0,0,2,122,28,95,73,109, +- 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, +- 95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,0, +- 0,0,4,0,0,0,1,0,0,0,67,0,0,0,115,14, ++ 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, ++ 0,67,0,0,0,115,13,0,0,0,100,3,0,124,0,0, ++ 95,0,0,100,2,0,83,41,4,122,31,73,110,118,97,108, ++ 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, ++ 111,114,121,32,109,116,105,109,101,46,114,30,0,0,0,78, ++ 114,139,0,0,0,41,1,114,89,1,0,0,41,1,114,72, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,203,0,0,0,239,3,0,0,115,2,0,0,0, -+ 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, -+ 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0, -+ 67,0,0,0,115,22,0,0,0,116,0,0,100,1,0,100, -+ 2,0,100,3,0,100,4,0,100,5,0,131,3,1,83,41, -+ 6,78,114,31,0,0,0,122,8,60,115,116,114,105,110,103, -+ 62,114,190,0,0,0,114,205,0,0,0,84,41,1,114,206, -+ 0,0,0,41,2,114,109,0,0,0,114,127,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,188, -+ 0,0,0,242,3,0,0,115,2,0,0,0,0,1,122,25, -+ 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, -+ 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, -+ 0,0,0,100,1,0,83,41,2,122,42,85,115,101,32,100, -+ 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, -+ 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, -+ 116,105,111,110,46,78,114,5,0,0,0,41,2,114,109,0, -+ 0,0,114,165,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,187,0,0,0,245,3,0,0,115, -+ 0,0,0,0,122,30,95,78,97,109,101,115,112,97,99,101, -+ 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, -+ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0, -+ 0,83,41,1,78,114,5,0,0,0,41,2,114,109,0,0, -+ 0,114,191,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,192,0,0,0,248,3,0,0,115,2, -+ 0,0,0,0,1,122,28,95,78,97,109,101,115,112,97,99, -+ 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, -+ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 3,0,0,0,67,0,0,0,115,32,0,0,0,116,0,0, -+ 100,1,0,124,0,0,106,1,0,131,2,0,1,116,2,0, -+ 106,3,0,124,0,0,124,1,0,131,2,0,83,41,2,122, -+ 98,76,111,97,100,32,97,32,110,97,109,101,115,112,97,99, -+ 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, -+ 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, -+ 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, -+ 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, -+ 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, -+ 32,32,32,122,38,110,97,109,101,115,112,97,99,101,32,109, -+ 111,100,117,108,101,32,108,111,97,100,101,100,32,119,105,116, -+ 104,32,112,97,116,104,32,123,33,114,125,41,4,114,106,0, -+ 0,0,114,233,0,0,0,114,122,0,0,0,114,193,0,0, -+ 0,41,2,114,109,0,0,0,114,127,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,194,0,0, -+ 0,251,3,0,0,115,4,0,0,0,0,7,16,1,122,28, -+ 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, -+ 46,108,111,97,100,95,109,111,100,117,108,101,78,41,12,114, -+ 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,186, -+ 0,0,0,114,184,0,0,0,114,249,0,0,0,114,160,0, -+ 0,0,114,203,0,0,0,114,188,0,0,0,114,187,0,0, -+ 0,114,192,0,0,0,114,194,0,0,0,114,5,0,0,0, ++ 0,0,114,75,1,0,0,201,7,0,0,115,2,0,0,0, ++ 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, ++ 0,67,0,0,0,115,59,0,0,0,124,0,0,106,0,0, ++ 124,1,0,131,1,0,125,2,0,124,2,0,100,1,0,107, ++ 8,0,114,37,0,100,1,0,103,0,0,102,2,0,83,124, ++ 2,0,106,1,0,124,2,0,106,2,0,112,55,0,103,0, ++ 0,102,2,0,83,41,2,122,197,84,114,121,32,116,111,32, ++ 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, ++ 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, ++ 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, ++ 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, ++ 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, ++ 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, ++ 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, ++ 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, ++ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, ++ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, ++ 3,114,14,1,0,0,114,170,0,0,0,114,221,0,0,0, ++ 41,3,114,72,0,0,0,114,159,0,0,0,114,178,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,166,0,0,0,207,7,0,0,115,8,0,0,0,0,7, ++ 15,1,12,1,10,1,122,22,70,105,108,101,70,105,110,100, ++ 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,6, ++ 0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,67, ++ 0,0,0,115,40,0,0,0,124,1,0,124,2,0,124,3, ++ 0,131,2,0,125,6,0,116,0,0,124,2,0,124,3,0, ++ 100,1,0,124,6,0,100,2,0,124,4,0,131,2,2,83, ++ 41,3,78,114,170,0,0,0,114,221,0,0,0,41,1,114, ++ 240,0,0,0,41,7,114,72,0,0,0,114,244,0,0,0, ++ 114,159,0,0,0,114,36,0,0,0,114,229,0,0,0,114, ++ 13,1,0,0,114,170,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,86,1,0,0,219,7,0, ++ 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, ++ 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, ++ 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, ++ 15,0,0,0,67,0,0,0,115,240,1,0,0,100,1,0, ++ 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, ++ 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, ++ 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, ++ 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, ++ 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, ++ 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, ++ 123,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, ++ 0,0,95,7,0,110,0,0,116,9,0,131,0,0,114,156, ++ 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, ++ 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, ++ 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, ++ 0,114,51,1,116,13,0,124,0,0,106,2,0,124,4,0, ++ 131,2,0,125,8,0,120,103,0,124,0,0,106,14,0,68, ++ 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, ++ 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, ++ 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,211, ++ 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, ++ 124,8,0,103,1,0,124,2,0,131,5,0,83,113,211,0, ++ 87,116,17,0,124,8,0,131,1,0,125,3,0,110,0,0, ++ 120,126,0,124,0,0,106,14,0,68,93,115,0,92,2,0, ++ 125,9,0,125,10,0,116,13,0,124,0,0,106,2,0,124, ++ 4,0,124,9,0,23,131,2,0,125,12,0,116,18,0,100, ++ 6,0,106,19,0,124,12,0,131,1,0,100,7,0,100,3, ++ 0,131,1,1,1,124,7,0,124,9,0,23,124,6,0,107, ++ 6,0,114,61,1,116,15,0,124,12,0,131,1,0,114,176, ++ 1,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, ++ 100,8,0,124,2,0,131,5,0,83,113,61,1,113,61,1, ++ 87,124,3,0,114,236,1,116,18,0,100,9,0,106,19,0, ++ 124,8,0,131,1,0,131,1,0,1,116,20,0,124,1,0, ++ 100,8,0,131,2,0,125,13,0,124,8,0,103,1,0,124, ++ 13,0,95,21,0,124,13,0,83,100,8,0,83,41,11,122, ++ 125,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, ++ 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, ++ 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, ++ 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, ++ 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, ++ 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, ++ 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, ++ 45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,114, ++ 117,0,0,0,114,116,0,0,0,114,30,0,0,0,114,73, ++ 0,0,0,122,9,116,114,121,105,110,103,32,123,125,114,146, ++ 0,0,0,78,122,25,112,111,115,115,105,98,108,101,32,110, ++ 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,114, ++ 139,0,0,0,41,22,114,33,0,0,0,114,40,0,0,0, ++ 114,36,0,0,0,114,4,0,0,0,114,46,0,0,0,114, ++ 54,1,0,0,114,41,0,0,0,114,89,1,0,0,218,11, ++ 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, ++ 114,92,1,0,0,114,140,0,0,0,114,91,1,0,0,114, ++ 29,0,0,0,114,88,1,0,0,114,45,0,0,0,114,86, ++ 1,0,0,114,47,0,0,0,114,153,0,0,0,114,48,0, ++ 0,0,114,217,0,0,0,114,221,0,0,0,41,14,114,72, ++ 0,0,0,114,159,0,0,0,114,13,1,0,0,90,12,105, ++ 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, ++ 108,95,109,111,100,117,108,101,114,184,0,0,0,90,5,99, ++ 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, ++ 108,101,90,9,98,97,115,101,95,112,97,116,104,114,58,1, ++ 0,0,114,244,0,0,0,90,13,105,110,105,116,95,102,105, ++ 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, ++ 104,114,178,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,114,14,1,0,0,224,7,0,0,115,68, ++ 0,0,0,0,3,6,1,19,1,3,1,34,1,13,1,11, ++ 1,15,1,10,1,12,2,9,1,9,1,15,2,9,1,6, ++ 2,12,1,18,1,22,1,10,1,15,1,12,1,32,4,15, ++ 2,22,1,22,1,25,1,16,1,12,1,32,1,6,1,19, ++ 1,15,1,12,1,4,1,122,20,70,105,108,101,70,105,110, ++ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, ++ 0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,0, ++ 0,0,115,14,1,0,0,124,0,0,106,0,0,125,1,0, ++ 121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,116, ++ 1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,110, ++ 33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,107, ++ 10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,110, ++ 1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,131, ++ 1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,0, ++ 0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,0, ++ 120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,0, ++ 106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,125, ++ 6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,13, ++ 0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,0, ++ 125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,106, ++ 15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,0, ++ 124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,116, ++ 16,0,131,1,0,114,10,1,100,4,0,100,5,0,132,0, ++ 0,124,2,0,68,131,1,0,124,0,0,95,17,0,110,0, ++ 0,100,6,0,83,41,7,122,68,70,105,108,108,32,116,104, ++ 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, ++ 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, ++ 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, ++ 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, ++ 0,0,114,117,0,0,0,122,5,123,125,46,123,125,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83, ++ 0,0,0,115,28,0,0,0,104,0,0,124,0,0,93,18, ++ 0,125,1,0,124,1,0,106,0,0,131,0,0,146,2,0, ++ 113,6,0,83,114,5,0,0,0,41,1,114,140,0,0,0, ++ 41,2,114,23,0,0,0,90,2,102,110,114,5,0,0,0, ++ 114,5,0,0,0,114,6,0,0,0,250,9,60,115,101,116, ++ 99,111,109,112,62,42,8,0,0,115,2,0,0,0,9,0, ++ 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, ++ 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, ++ 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,36, ++ 0,0,0,114,4,0,0,0,90,7,108,105,115,116,100,105, ++ 114,114,46,0,0,0,218,17,70,105,108,101,78,111,116,70, ++ 111,117,110,100,69,114,114,111,114,218,15,80,101,114,109,105, ++ 115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65, ++ 68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,8, ++ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,90,1, ++ 0,0,114,91,1,0,0,114,122,0,0,0,114,48,0,0, ++ 0,114,140,0,0,0,218,3,97,100,100,114,11,0,0,0, ++ 114,92,1,0,0,41,9,114,72,0,0,0,114,36,0,0, ++ 0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119, ++ 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, ++ 116,115,114,72,1,0,0,114,68,0,0,0,114,66,1,0, ++ 0,114,58,1,0,0,90,8,110,101,119,95,110,97,109,101, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 248,0,0,0,223,3,0,0,115,16,0,0,0,12,1,12, -+ 3,18,9,12,3,12,3,12,3,12,3,12,3,114,248,0, -+ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5, -+ 0,0,0,64,0,0,0,115,160,0,0,0,101,0,0,90, -+ 1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4, -+ 0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,0, -+ 101,4,0,100,4,0,100,5,0,132,0,0,131,1,0,90, -+ 6,0,101,4,0,100,6,0,100,7,0,132,0,0,131,1, -+ 0,90,7,0,101,4,0,100,8,0,100,9,0,132,0,0, -+ 131,1,0,90,8,0,101,4,0,100,10,0,100,11,0,100, -+ 12,0,132,1,0,131,1,0,90,9,0,101,4,0,100,10, -+ 0,100,10,0,100,13,0,100,14,0,132,2,0,131,1,0, -+ 90,10,0,101,4,0,100,10,0,100,15,0,100,16,0,132, -+ 1,0,131,1,0,90,11,0,100,10,0,83,41,17,218,10, -+ 80,97,116,104,70,105,110,100,101,114,122,62,77,101,116,97, -+ 32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114, -+ 32,115,121,115,46,112,97,116,104,32,97,110,100,32,112,97, -+ 99,107,97,103,101,32,95,95,112,97,116,104,95,95,32,97, -+ 116,116,114,105,98,117,116,101,115,46,99,1,0,0,0,0, -+ 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, -+ 55,0,0,0,120,48,0,116,0,0,106,1,0,106,2,0, -+ 131,0,0,68,93,31,0,125,1,0,116,3,0,124,1,0, -+ 100,1,0,131,2,0,114,16,0,124,1,0,106,4,0,131, -+ 0,0,1,113,16,0,87,100,2,0,83,41,3,122,125,67, -+ 97,108,108,32,116,104,101,32,105,110,118,97,108,105,100,97, -+ 116,101,95,99,97,99,104,101,115,40,41,32,109,101,116,104, -+ 111,100,32,111,110,32,97,108,108,32,112,97,116,104,32,101, -+ 110,116,114,121,32,102,105,110,100,101,114,115,10,32,32,32, -+ 32,32,32,32,32,115,116,111,114,101,100,32,105,110,32,115, -+ 121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114, -+ 95,99,97,99,104,101,115,32,40,119,104,101,114,101,32,105, -+ 109,112,108,101,109,101,110,116,101,100,41,46,218,17,105,110, -+ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,78, -+ 41,5,114,8,0,0,0,218,19,112,97,116,104,95,105,109, -+ 112,111,114,116,101,114,95,99,97,99,104,101,218,6,118,97, -+ 108,117,101,115,114,116,0,0,0,114,251,0,0,0,41,2, -+ 114,171,0,0,0,218,6,102,105,110,100,101,114,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,251,0,0, -+ 0,12,4,0,0,115,6,0,0,0,0,4,22,1,15,1, -+ 122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118, -+ 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, -+ 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67, -+ 0,0,0,115,107,0,0,0,116,0,0,106,1,0,100,1, -+ 0,107,9,0,114,41,0,116,0,0,106,1,0,12,114,41, -+ 0,116,2,0,106,3,0,100,2,0,116,4,0,131,2,0, -+ 1,120,59,0,116,0,0,106,1,0,68,93,44,0,125,2, -+ 0,121,14,0,124,2,0,124,1,0,131,1,0,83,87,113, -+ 51,0,4,116,5,0,107,10,0,114,94,0,1,1,1,119, -+ 51,0,89,113,51,0,88,113,51,0,87,100,1,0,83,100, -+ 1,0,83,41,3,122,113,83,101,97,114,99,104,32,115,101, -+ 113,117,101,110,99,101,32,111,102,32,104,111,111,107,115,32, -+ 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, -+ 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, -+ 32,32,73,102,32,39,104,111,111,107,115,39,32,105,115,32, -+ 102,97,108,115,101,32,116,104,101,110,32,117,115,101,32,115, -+ 121,115,46,112,97,116,104,95,104,111,111,107,115,46,10,10, -+ 32,32,32,32,32,32,32,32,78,122,23,115,121,115,46,112, -+ 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, -+ 116,121,41,6,114,8,0,0,0,218,10,112,97,116,104,95, -+ 104,111,111,107,115,114,61,0,0,0,114,62,0,0,0,114, -+ 126,0,0,0,114,108,0,0,0,41,3,114,171,0,0,0, -+ 114,36,0,0,0,90,4,104,111,111,107,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,11,95,112,97,116, -+ 104,95,104,111,111,107,115,20,4,0,0,115,16,0,0,0, -+ 0,7,25,1,16,1,16,1,3,1,14,1,13,1,12,2, -+ 122,22,80,97,116,104,70,105,110,100,101,114,46,95,112,97, -+ 116,104,95,104,111,111,107,115,99,2,0,0,0,0,0,0, -+ 0,3,0,0,0,19,0,0,0,67,0,0,0,115,123,0, -+ 0,0,124,1,0,100,1,0,107,2,0,114,53,0,121,16, -+ 0,116,0,0,106,1,0,131,0,0,125,1,0,87,110,22, -+ 0,4,116,2,0,107,10,0,114,52,0,1,1,1,100,2, -+ 0,83,89,110,1,0,88,121,17,0,116,3,0,106,4,0, -+ 124,1,0,25,125,2,0,87,110,46,0,4,116,5,0,107, -+ 10,0,114,118,0,1,1,1,124,0,0,106,6,0,124,1, -+ 0,131,1,0,125,2,0,124,2,0,116,3,0,106,4,0, -+ 124,1,0,60,89,110,1,0,88,124,2,0,83,41,3,122, -+ 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, -+ 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, -+ 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, -+ 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, -+ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, -+ 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, -+ 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, -+ 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, -+ 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, -+ 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, -+ 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, -+ 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, -+ 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, -+ 32,32,32,114,31,0,0,0,78,41,7,114,4,0,0,0, -+ 114,46,0,0,0,218,17,70,105,108,101,78,111,116,70,111, -+ 117,110,100,69,114,114,111,114,114,8,0,0,0,114,252,0, -+ 0,0,114,138,0,0,0,114,0,1,0,0,41,3,114,171, -+ 0,0,0,114,36,0,0,0,114,254,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,20,95,112, -+ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, -+ 104,101,37,4,0,0,115,22,0,0,0,0,8,12,1,3, -+ 1,16,1,13,3,9,1,3,1,17,1,13,1,15,1,18, -+ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, -+ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, -+ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, -+ 0,0,0,67,0,0,0,115,119,0,0,0,116,0,0,124, -+ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, -+ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, -+ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, -+ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, -+ 0,114,88,0,116,3,0,106,4,0,124,1,0,124,3,0, -+ 131,2,0,83,116,3,0,106,5,0,124,1,0,100,0,0, -+ 131,2,0,125,5,0,124,4,0,124,5,0,95,6,0,124, -+ 5,0,83,41,2,78,114,125,0,0,0,41,7,114,116,0, -+ 0,0,114,125,0,0,0,114,183,0,0,0,114,122,0,0, -+ 0,114,180,0,0,0,114,161,0,0,0,114,157,0,0,0, -+ 41,6,114,171,0,0,0,114,127,0,0,0,114,254,0,0, -+ 0,114,128,0,0,0,114,129,0,0,0,114,165,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, -+ 99,59,4,0,0,115,18,0,0,0,0,4,15,1,24,2, -+ 15,1,6,1,12,1,16,1,18,1,9,1,122,27,80,97, -+ 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, -+ 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, -+ 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, -+ 243,0,0,0,103,0,0,125,4,0,120,230,0,124,2,0, -+ 68,93,191,0,125,5,0,116,0,0,124,5,0,116,1,0, -+ 116,2,0,102,2,0,131,2,0,115,43,0,113,13,0,124, -+ 0,0,106,3,0,124,5,0,131,1,0,125,6,0,124,6, -+ 0,100,1,0,107,9,0,114,13,0,116,4,0,124,6,0, -+ 100,2,0,131,2,0,114,106,0,124,6,0,106,5,0,124, -+ 1,0,124,3,0,131,2,0,125,7,0,110,18,0,124,0, -+ 0,106,6,0,124,1,0,124,6,0,131,2,0,125,7,0, -+ 124,7,0,100,1,0,107,8,0,114,139,0,113,13,0,124, -+ 7,0,106,7,0,100,1,0,107,9,0,114,158,0,124,7, -+ 0,83,124,7,0,106,8,0,125,8,0,124,8,0,100,1, -+ 0,107,8,0,114,191,0,116,9,0,100,3,0,131,1,0, -+ 130,1,0,124,4,0,106,10,0,124,8,0,131,1,0,1, -+ 113,13,0,87,116,11,0,106,12,0,124,1,0,100,1,0, -+ 131,2,0,125,7,0,124,4,0,124,7,0,95,8,0,124, -+ 7,0,83,100,1,0,83,41,4,122,63,70,105,110,100,32, -+ 116,104,101,32,108,111,97,100,101,114,32,111,114,32,110,97, -+ 109,101,115,112,97,99,101,95,112,97,116,104,32,102,111,114, -+ 32,116,104,105,115,32,109,111,100,117,108,101,47,112,97,99, -+ 107,97,103,101,32,110,97,109,101,46,78,114,182,0,0,0, -+ 122,19,115,112,101,99,32,109,105,115,115,105,110,103,32,108, -+ 111,97,100,101,114,41,13,114,144,0,0,0,114,70,0,0, -+ 0,218,5,98,121,116,101,115,114,2,1,0,0,114,116,0, -+ 0,0,114,182,0,0,0,114,3,1,0,0,114,128,0,0, -+ 0,114,157,0,0,0,114,108,0,0,0,114,150,0,0,0, -+ 114,122,0,0,0,114,161,0,0,0,41,9,114,171,0,0, -+ 0,114,127,0,0,0,114,36,0,0,0,114,181,0,0,0, -+ 218,14,110,97,109,101,115,112,97,99,101,95,112,97,116,104, -+ 90,5,101,110,116,114,121,114,254,0,0,0,114,165,0,0, -+ 0,114,129,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,9,95,103,101,116,95,115,112,101,99, -+ 74,4,0,0,115,40,0,0,0,0,5,6,1,13,1,21, -+ 1,3,1,15,1,12,1,15,1,21,2,18,1,12,1,3, -+ 1,15,1,4,1,9,1,12,1,12,5,17,2,18,1,9, -+ 1,122,20,80,97,116,104,70,105,110,100,101,114,46,95,103, -+ 101,116,95,115,112,101,99,99,4,0,0,0,0,0,0,0, -+ 6,0,0,0,4,0,0,0,67,0,0,0,115,140,0,0, -+ 0,124,2,0,100,1,0,107,8,0,114,21,0,116,0,0, -+ 106,1,0,125,2,0,124,0,0,106,2,0,124,1,0,124, -+ 2,0,124,3,0,131,3,0,125,4,0,124,4,0,100,1, -+ 0,107,8,0,114,58,0,100,1,0,83,124,4,0,106,3, -+ 0,100,1,0,107,8,0,114,132,0,124,4,0,106,4,0, -+ 125,5,0,124,5,0,114,125,0,100,2,0,124,4,0,95, -+ 5,0,116,6,0,124,1,0,124,5,0,124,0,0,106,2, -+ 0,131,3,0,124,4,0,95,4,0,124,4,0,83,100,1, -+ 0,83,110,4,0,124,4,0,83,100,1,0,83,41,3,122, -+ 98,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, -+ 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, -+ 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, -+ 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, -+ 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, -+ 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, -+ 104,101,46,78,90,9,110,97,109,101,115,112,97,99,101,41, -+ 7,114,8,0,0,0,114,36,0,0,0,114,6,1,0,0, -+ 114,128,0,0,0,114,157,0,0,0,114,159,0,0,0,114, -+ 231,0,0,0,41,6,114,171,0,0,0,114,127,0,0,0, -+ 114,36,0,0,0,114,181,0,0,0,114,165,0,0,0,114, -+ 5,1,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,182,0,0,0,106,4,0,0,115,26,0,0, -+ 0,0,4,12,1,9,1,21,1,12,1,4,1,15,1,9, -+ 1,6,3,9,1,24,1,4,2,7,2,122,20,80,97,116, -+ 104,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, -+ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, -+ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, -+ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, -+ 100,1,0,107,8,0,114,34,0,100,1,0,83,124,3,0, -+ 106,1,0,83,41,2,122,170,102,105,110,100,32,116,104,101, -+ 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, -+ 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, -+ 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, -+ 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, -+ 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, -+ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, -+ 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, -+ 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -+ 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -+ 32,32,78,41,2,114,182,0,0,0,114,128,0,0,0,41, -+ 4,114,171,0,0,0,114,127,0,0,0,114,36,0,0,0, -+ 114,165,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,183,0,0,0,128,4,0,0,115,8,0, -+ 0,0,0,8,18,1,12,1,4,1,122,22,80,97,116,104, -+ 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, -+ 108,101,41,12,114,113,0,0,0,114,112,0,0,0,114,114, -+ 0,0,0,114,115,0,0,0,114,184,0,0,0,114,251,0, -+ 0,0,114,0,1,0,0,114,2,1,0,0,114,3,1,0, -+ 0,114,6,1,0,0,114,182,0,0,0,114,183,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,250,0,0,0,8,4,0,0,115,22,0, -+ 0,0,12,2,6,2,18,8,18,17,18,22,18,15,3,1, -+ 18,31,3,1,21,21,3,1,114,250,0,0,0,99,0,0, -+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, -+ 0,0,115,133,0,0,0,101,0,0,90,1,0,100,0,0, -+ 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, -+ 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, -+ 0,101,6,0,90,7,0,100,6,0,100,7,0,132,0,0, -+ 90,8,0,100,8,0,100,9,0,132,0,0,90,9,0,100, -+ 10,0,100,11,0,100,12,0,132,1,0,90,10,0,100,13, -+ 0,100,14,0,132,0,0,90,11,0,101,12,0,100,15,0, -+ 100,16,0,132,0,0,131,1,0,90,13,0,100,17,0,100, -+ 18,0,132,0,0,90,14,0,100,10,0,83,41,19,218,10, -+ 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, -+ 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, -+ 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, -+ 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, -+ 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, -+ 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, -+ 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, -+ 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, -+ 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, -+ 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, -+ 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, -+ 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, -+ 0,5,0,0,0,5,0,0,0,7,0,0,0,115,122,0, -+ 0,0,103,0,0,125,3,0,120,52,0,124,2,0,68,93, -+ 44,0,92,2,0,137,0,0,125,4,0,124,3,0,106,0, -+ 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, -+ 124,4,0,68,131,1,0,131,1,0,1,113,13,0,87,124, -+ 3,0,124,0,0,95,1,0,124,1,0,112,79,0,100,3, -+ 0,124,0,0,95,2,0,100,6,0,124,0,0,95,3,0, -+ 116,4,0,131,0,0,124,0,0,95,5,0,116,4,0,131, -+ 0,0,124,0,0,95,6,0,100,5,0,83,41,7,122,154, -+ 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, -+ 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, -+ 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, -+ 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, -+ 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, -+ 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, -+ 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, -+ 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, -+ 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, -+ 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, -+ 0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,115, -+ 27,0,0,0,124,0,0,93,17,0,125,1,0,124,1,0, -+ 136,0,0,102,2,0,86,1,113,3,0,100,0,0,83,41, -+ 1,78,114,5,0,0,0,41,2,114,23,0,0,0,114,226, -+ 0,0,0,41,1,114,128,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,228,0,0,0,157,4,0,0,115,2,0, -+ 0,0,6,0,122,38,70,105,108,101,70,105,110,100,101,114, -+ 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, -+ 115,62,46,60,103,101,110,101,120,112,114,62,114,59,0,0, -+ 0,114,30,0,0,0,78,114,88,0,0,0,41,7,114,150, -+ 0,0,0,218,8,95,108,111,97,100,101,114,115,114,36,0, -+ 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, -+ 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, -+ 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, -+ 95,99,97,99,104,101,41,5,114,109,0,0,0,114,36,0, -+ 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, -+ 108,115,90,7,108,111,97,100,101,114,115,114,167,0,0,0, -+ 114,5,0,0,0,41,1,114,128,0,0,0,114,6,0,0, -+ 0,114,186,0,0,0,151,4,0,0,115,16,0,0,0,0, -+ 4,6,1,19,1,36,1,9,2,15,1,9,1,12,1,122, -+ 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, -+ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, -+ 0,2,0,0,0,67,0,0,0,115,13,0,0,0,100,3, -+ 0,124,0,0,95,0,0,100,2,0,83,41,4,122,31,73, -+ 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, -+ 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,30, -+ 0,0,0,78,114,88,0,0,0,41,1,114,9,1,0,0, -+ 41,1,114,109,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,251,0,0,0,165,4,0,0,115, -+ 2,0,0,0,0,2,122,28,70,105,108,101,70,105,110,100, -+ 101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97, -+ 99,104,101,115,99,2,0,0,0,0,0,0,0,3,0,0, -+ 0,2,0,0,0,67,0,0,0,115,59,0,0,0,124,0, -+ 0,106,0,0,124,1,0,131,1,0,125,2,0,124,2,0, -+ 100,1,0,107,8,0,114,37,0,100,1,0,103,0,0,102, -+ 2,0,83,124,2,0,106,1,0,124,2,0,106,2,0,112, -+ 55,0,103,0,0,102,2,0,83,41,2,122,197,84,114,121, -+ 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, -+ 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, -+ 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, -+ 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, -+ 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, -+ 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, -+ 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, -+ 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, -+ 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, -+ 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -+ 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -+ 32,32,78,41,3,114,182,0,0,0,114,128,0,0,0,114, -+ 157,0,0,0,41,3,114,109,0,0,0,114,127,0,0,0, -+ 114,165,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,125,0,0,0,171,4,0,0,115,8,0, -+ 0,0,0,7,15,1,12,1,10,1,122,22,70,105,108,101, -+ 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, -+ 101,114,99,6,0,0,0,0,0,0,0,7,0,0,0,7, -+ 0,0,0,67,0,0,0,115,40,0,0,0,124,1,0,124, -+ 2,0,124,3,0,131,2,0,125,6,0,116,0,0,124,2, -+ 0,124,3,0,100,1,0,124,6,0,100,2,0,124,4,0, -+ 131,2,2,83,41,3,78,114,128,0,0,0,114,157,0,0, -+ 0,41,1,114,168,0,0,0,41,7,114,109,0,0,0,114, -+ 166,0,0,0,114,127,0,0,0,114,36,0,0,0,90,4, -+ 115,109,115,108,114,181,0,0,0,114,128,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,6,1, -+ 0,0,183,4,0,0,115,6,0,0,0,0,1,15,1,18, -+ 1,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, -+ 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, -+ 0,14,0,0,0,15,0,0,0,67,0,0,0,115,234,1, -+ 0,0,100,1,0,125,3,0,124,1,0,106,0,0,100,2, -+ 0,131,1,0,100,3,0,25,125,4,0,121,34,0,116,1, -+ 0,124,0,0,106,2,0,112,49,0,116,3,0,106,4,0, -+ 131,0,0,131,1,0,106,5,0,125,5,0,87,110,24,0, -+ 4,116,6,0,107,10,0,114,85,0,1,1,1,100,10,0, -+ 125,5,0,89,110,1,0,88,124,5,0,124,0,0,106,7, -+ 0,107,3,0,114,120,0,124,0,0,106,8,0,131,0,0, -+ 1,124,5,0,124,0,0,95,7,0,116,9,0,131,0,0, -+ 114,153,0,124,0,0,106,10,0,125,6,0,124,4,0,106, -+ 11,0,131,0,0,125,7,0,110,15,0,124,0,0,106,12, -+ 0,125,6,0,124,4,0,125,7,0,124,7,0,124,6,0, -+ 107,6,0,114,45,1,116,13,0,124,0,0,106,2,0,124, -+ 4,0,131,2,0,125,8,0,120,100,0,124,0,0,106,14, -+ 0,68,93,77,0,92,2,0,125,9,0,125,10,0,100,5, -+ 0,124,9,0,23,125,11,0,116,13,0,124,8,0,124,11, -+ 0,131,2,0,125,12,0,116,15,0,124,12,0,131,1,0, -+ 114,208,0,124,0,0,106,16,0,124,10,0,124,1,0,124, -+ 12,0,124,8,0,103,1,0,124,2,0,131,5,0,83,113, -+ 208,0,87,116,17,0,124,8,0,131,1,0,125,3,0,120, -+ 123,0,124,0,0,106,14,0,68,93,112,0,92,2,0,125, -+ 9,0,125,10,0,116,13,0,124,0,0,106,2,0,124,4, -+ 0,124,9,0,23,131,2,0,125,12,0,116,18,0,100,6, -+ 0,106,19,0,124,12,0,131,1,0,100,7,0,100,3,0, -+ 131,1,1,1,124,7,0,124,9,0,23,124,6,0,107,6, -+ 0,114,55,1,116,15,0,124,12,0,131,1,0,114,55,1, -+ 124,0,0,106,16,0,124,10,0,124,1,0,124,12,0,100, -+ 8,0,124,2,0,131,5,0,83,113,55,1,87,124,3,0, -+ 114,230,1,116,18,0,100,9,0,106,19,0,124,8,0,131, -+ 1,0,131,1,0,1,116,20,0,106,21,0,124,1,0,100, -+ 8,0,131,2,0,125,13,0,124,8,0,103,1,0,124,13, -+ 0,95,22,0,124,13,0,83,100,8,0,83,41,11,122,125, -+ 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, -+ 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, -+ 99,105,102,105,101,100,32,109,111,100,117,108,101,44,32,111, -+ 114,32,116,104,101,32,110,97,109,101,115,112,97,99,101,10, -+ 32,32,32,32,32,32,32,32,112,97,99,107,97,103,101,32, -+ 112,111,114,116,105,111,110,115,46,32,82,101,116,117,114,110, -+ 115,32,40,108,111,97,100,101,114,44,32,108,105,115,116,45, -+ 111,102,45,112,111,114,116,105,111,110,115,41,46,70,114,59, -+ 0,0,0,114,57,0,0,0,114,30,0,0,0,114,186,0, -+ 0,0,122,9,116,114,121,105,110,103,32,123,125,114,99,0, -+ 0,0,78,122,25,112,111,115,115,105,98,108,101,32,110,97, -+ 109,101,115,112,97,99,101,32,102,111,114,32,123,125,114,88, -+ 0,0,0,41,23,114,33,0,0,0,114,40,0,0,0,114, -+ 36,0,0,0,114,4,0,0,0,114,46,0,0,0,114,220, -+ 0,0,0,114,41,0,0,0,114,9,1,0,0,218,11,95, -+ 102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,114, -+ 12,1,0,0,114,89,0,0,0,114,11,1,0,0,114,29, -+ 0,0,0,114,8,1,0,0,114,45,0,0,0,114,6,1, -+ 0,0,114,47,0,0,0,114,106,0,0,0,114,48,0,0, -+ 0,114,122,0,0,0,114,161,0,0,0,114,157,0,0,0, -+ 41,14,114,109,0,0,0,114,127,0,0,0,114,181,0,0, -+ 0,90,12,105,115,95,110,97,109,101,115,112,97,99,101,90, -+ 11,116,97,105,108,95,109,111,100,117,108,101,114,134,0,0, -+ 0,90,5,99,97,99,104,101,90,12,99,97,99,104,101,95, -+ 109,111,100,117,108,101,90,9,98,97,115,101,95,112,97,116, -+ 104,114,226,0,0,0,114,166,0,0,0,90,13,105,110,105, -+ 116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,108, -+ 95,112,97,116,104,114,165,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,182,0,0,0,188,4, -+ 0,0,115,68,0,0,0,0,3,6,1,19,1,3,1,34, -+ 1,13,1,11,1,15,1,10,1,9,2,9,1,9,1,15, -+ 2,9,1,6,2,12,1,18,1,22,1,10,1,15,1,12, -+ 1,32,4,12,2,22,1,22,1,25,1,16,1,12,1,29, -+ 1,6,1,19,1,18,1,12,1,4,1,122,20,70,105,108, -+ 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, -+ 99,99,1,0,0,0,0,0,0,0,9,0,0,0,13,0, -+ 0,0,67,0,0,0,115,11,1,0,0,124,0,0,106,0, -+ 0,125,1,0,121,31,0,116,1,0,106,2,0,124,1,0, -+ 112,33,0,116,1,0,106,3,0,131,0,0,131,1,0,125, -+ 2,0,87,110,33,0,4,116,4,0,116,5,0,116,6,0, -+ 102,3,0,107,10,0,114,75,0,1,1,1,103,0,0,125, -+ 2,0,89,110,1,0,88,116,7,0,106,8,0,106,9,0, -+ 100,1,0,131,1,0,115,112,0,116,10,0,124,2,0,131, -+ 1,0,124,0,0,95,11,0,110,111,0,116,10,0,131,0, -+ 0,125,3,0,120,90,0,124,2,0,68,93,82,0,125,4, -+ 0,124,4,0,106,12,0,100,2,0,131,1,0,92,3,0, -+ 125,5,0,125,6,0,125,7,0,124,6,0,114,191,0,100, -+ 3,0,106,13,0,124,5,0,124,7,0,106,14,0,131,0, -+ 0,131,2,0,125,8,0,110,6,0,124,5,0,125,8,0, -+ 124,3,0,106,15,0,124,8,0,131,1,0,1,113,128,0, -+ 87,124,3,0,124,0,0,95,11,0,116,7,0,106,8,0, -+ 106,9,0,116,16,0,131,1,0,114,7,1,100,4,0,100, -+ 5,0,132,0,0,124,2,0,68,131,1,0,124,0,0,95, -+ 17,0,100,6,0,83,41,7,122,68,70,105,108,108,32,116, -+ 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, -+ 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, -+ 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, -+ 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,0, -+ 0,0,0,114,59,0,0,0,122,5,123,125,46,123,125,99, -+ 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, -+ 83,0,0,0,115,28,0,0,0,104,0,0,124,0,0,93, -+ 18,0,125,1,0,124,1,0,106,0,0,131,0,0,146,2, -+ 0,113,6,0,83,114,5,0,0,0,41,1,114,89,0,0, -+ 0,41,2,114,23,0,0,0,90,2,102,110,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,250,9,60,115,101, -+ 116,99,111,109,112,62,6,5,0,0,115,2,0,0,0,9, -+ 0,122,41,70,105,108,101,70,105,110,100,101,114,46,95,102, -+ 105,108,108,95,99,97,99,104,101,46,60,108,111,99,97,108, -+ 115,62,46,60,115,101,116,99,111,109,112,62,78,41,18,114, -+ 36,0,0,0,114,4,0,0,0,90,7,108,105,115,116,100, -+ 105,114,114,46,0,0,0,114,1,1,0,0,218,15,80,101, -+ 114,109,105,115,115,105,111,110,69,114,114,111,114,218,18,78, -+ 111,116,65,68,105,114,101,99,116,111,114,121,69,114,114,111, -+ 114,114,8,0,0,0,114,9,0,0,0,114,10,0,0,0, -+ 114,10,1,0,0,114,11,1,0,0,114,84,0,0,0,114, -+ 48,0,0,0,114,89,0,0,0,218,3,97,100,100,114,11, -+ 0,0,0,114,12,1,0,0,41,9,114,109,0,0,0,114, -+ 36,0,0,0,90,8,99,111,110,116,101,110,116,115,90,21, -+ 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, -+ 116,101,110,116,115,114,246,0,0,0,114,107,0,0,0,114, -+ 238,0,0,0,114,226,0,0,0,90,8,110,101,119,95,110, -+ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,14,1,0,0,233,4,0,0,115,34,0,0,0, -+ 0,2,9,1,3,1,31,1,22,3,11,3,18,1,18,7, -+ 9,1,13,1,24,1,6,1,27,2,6,1,17,1,9,1, -+ 18,1,122,22,70,105,108,101,70,105,110,100,101,114,46,95, -+ 102,105,108,108,95,99,97,99,104,101,99,1,0,0,0,0, -+ 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, -+ 25,0,0,0,135,0,0,135,1,0,102,2,0,100,1,0, -+ 100,2,0,134,0,0,125,2,0,124,2,0,83,41,3,97, -+ 20,1,0,0,65,32,99,108,97,115,115,32,109,101,116,104, -+ 111,100,32,119,104,105,99,104,32,114,101,116,117,114,110,115, -+ 32,97,32,99,108,111,115,117,114,101,32,116,111,32,117,115, -+ 101,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, -+ 111,107,10,32,32,32,32,32,32,32,32,119,104,105,99,104, -+ 32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32, -+ 105,110,115,116,97,110,99,101,32,117,115,105,110,103,32,116, -+ 104,101,32,115,112,101,99,105,102,105,101,100,32,108,111,97, -+ 100,101,114,115,32,97,110,100,32,116,104,101,32,112,97,116, -+ 104,10,32,32,32,32,32,32,32,32,99,97,108,108,101,100, -+ 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,46, -+ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, -+ 32,112,97,116,104,32,99,97,108,108,101,100,32,111,110,32, -+ 116,104,101,32,99,108,111,115,117,114,101,32,105,115,32,110, -+ 111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32, -+ 73,109,112,111,114,116,69,114,114,111,114,32,105,115,10,32, -+ 32,32,32,32,32,32,32,114,97,105,115,101,100,46,10,10, -+ 32,32,32,32,32,32,32,32,99,1,0,0,0,0,0,0, -+ 0,1,0,0,0,4,0,0,0,19,0,0,0,115,43,0, -+ 0,0,116,0,0,124,0,0,131,1,0,115,30,0,116,1, -+ 0,100,1,0,100,2,0,124,0,0,131,1,1,130,1,0, ++ 94,1,0,0,13,8,0,0,115,34,0,0,0,0,2,9, ++ 1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13, ++ 1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122, ++ 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, ++ 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, ++ 3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0, ++ 0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0, ++ 134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0, ++ 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, ++ 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, ++ 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, ++ 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, ++ 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, ++ 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, ++ 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, ++ 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, ++ 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, ++ 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, ++ 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, ++ 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, ++ 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, ++ 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, ++ 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, ++ 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, ++ 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, ++ 32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0, ++ 0,0,4,0,0,0,19,0,0,0,115,46,0,0,0,116, ++ 0,0,124,0,0,131,1,0,115,33,0,116,1,0,100,1, ++ 0,100,2,0,124,0,0,131,1,1,130,1,0,110,0,0, + 136,0,0,124,0,0,136,1,0,140,1,0,83,41,3,122, + 45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105, + 109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101, + 114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30, + 111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115, + 32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,36, -+ 0,0,0,41,2,114,47,0,0,0,114,108,0,0,0,41, -+ 1,114,36,0,0,0,41,2,114,171,0,0,0,114,13,1, ++ 0,0,0,41,2,114,47,0,0,0,114,154,0,0,0,41, ++ 1,114,36,0,0,0,41,2,114,12,1,0,0,114,93,1, + 0,0,114,5,0,0,0,114,6,0,0,0,218,24,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, -+ 70,105,110,100,101,114,18,5,0,0,115,6,0,0,0,0, -+ 2,12,1,18,1,122,54,70,105,108,101,70,105,110,100,101, ++ 70,105,110,100,101,114,54,8,0,0,115,6,0,0,0,0, ++ 2,12,1,21,1,122,54,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, + 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,114,5,0, -+ 0,0,41,3,114,171,0,0,0,114,13,1,0,0,114,19, -+ 1,0,0,114,5,0,0,0,41,2,114,171,0,0,0,114, -+ 13,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, -+ 104,111,111,107,8,5,0,0,115,4,0,0,0,0,10,21, ++ 0,0,41,3,114,12,1,0,0,114,93,1,0,0,114,100, ++ 1,0,0,114,5,0,0,0,41,2,114,12,1,0,0,114, ++ 93,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, ++ 104,111,111,107,44,8,0,0,115,4,0,0,0,0,10,21, + 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, + 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, + 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, + 83,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, + 40,123,33,114,125,41,41,2,114,48,0,0,0,114,36,0, -+ 0,0,41,1,114,109,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,245,0,0,0,26,5,0, ++ 0,0,41,1,114,72,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,114,102,0,0,0,62,8,0, + 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,114,101,112,114,95,95,41,15,114, -+ 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,115, -+ 0,0,0,114,186,0,0,0,114,251,0,0,0,114,131,0, -+ 0,0,114,183,0,0,0,114,125,0,0,0,114,6,1,0, -+ 0,114,182,0,0,0,114,14,1,0,0,114,184,0,0,0, -+ 114,20,1,0,0,114,245,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,7, -+ 1,0,0,142,4,0,0,115,20,0,0,0,12,7,6,2, ++ 58,0,0,0,114,57,0,0,0,114,59,0,0,0,114,60, ++ 0,0,0,114,73,0,0,0,114,75,1,0,0,114,173,0, ++ 0,0,114,15,1,0,0,114,166,0,0,0,114,86,1,0, ++ 0,114,14,1,0,0,114,94,1,0,0,114,19,1,0,0, ++ 114,101,1,0,0,114,102,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,87, ++ 1,0,0,178,7,0,0,115,20,0,0,0,12,7,6,2, + 12,14,12,4,6,2,12,12,12,5,15,45,12,31,18,18, -+ 114,7,1,0,0,99,4,0,0,0,0,0,0,0,6,0, -+ 0,0,11,0,0,0,67,0,0,0,115,195,0,0,0,124, -+ 0,0,106,0,0,100,1,0,131,1,0,125,4,0,124,0, -+ 0,106,0,0,100,2,0,131,1,0,125,5,0,124,4,0, -+ 115,99,0,124,5,0,114,54,0,124,5,0,106,1,0,125, -+ 4,0,110,45,0,124,2,0,124,3,0,107,2,0,114,84, -+ 0,116,2,0,124,1,0,124,2,0,131,2,0,125,4,0, -+ 110,15,0,116,3,0,124,1,0,124,2,0,131,2,0,125, -+ 4,0,124,5,0,115,126,0,116,4,0,124,1,0,124,2, -+ 0,100,3,0,124,4,0,131,2,1,125,5,0,121,44,0, -+ 124,5,0,124,0,0,100,2,0,60,124,4,0,124,0,0, -+ 100,1,0,60,124,2,0,124,0,0,100,4,0,60,124,3, -+ 0,124,0,0,100,5,0,60,87,110,18,0,4,116,5,0, -+ 107,10,0,114,190,0,1,1,1,89,110,1,0,88,100,0, -+ 0,83,41,6,78,218,10,95,95,108,111,97,100,101,114,95, -+ 95,218,8,95,95,115,112,101,99,95,95,114,128,0,0,0, -+ 90,8,95,95,102,105,108,101,95,95,90,10,95,95,99,97, -+ 99,104,101,100,95,95,41,6,218,3,103,101,116,114,128,0, -+ 0,0,114,224,0,0,0,114,219,0,0,0,114,168,0,0, -+ 0,218,9,69,120,99,101,112,116,105,111,110,41,6,90,2, -+ 110,115,114,107,0,0,0,90,8,112,97,116,104,110,97,109, -+ 101,90,9,99,112,97,116,104,110,97,109,101,114,128,0,0, -+ 0,114,165,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,14,95,102,105,120,95,117,112,95,109, -+ 111,100,117,108,101,32,5,0,0,115,34,0,0,0,0,2, -+ 15,1,15,1,6,1,6,1,12,1,12,1,18,2,15,1, -+ 6,1,21,1,3,1,10,1,10,1,10,1,14,1,13,2, -+ 114,25,1,0,0,99,0,0,0,0,0,0,0,0,3,0, -+ 0,0,3,0,0,0,67,0,0,0,115,55,0,0,0,116, -+ 0,0,116,1,0,106,2,0,131,0,0,102,2,0,125,0, -+ 0,116,3,0,116,4,0,102,2,0,125,1,0,116,5,0, -+ 116,6,0,102,2,0,125,2,0,124,0,0,124,1,0,124, -+ 2,0,103,3,0,83,41,1,122,95,82,101,116,117,114,110, -+ 115,32,97,32,108,105,115,116,32,111,102,32,102,105,108,101, -+ 45,98,97,115,101,100,32,109,111,100,117,108,101,32,108,111, -+ 97,100,101,114,115,46,10,10,32,32,32,32,69,97,99,104, -+ 32,105,116,101,109,32,105,115,32,97,32,116,117,112,108,101, -+ 32,40,108,111,97,100,101,114,44,32,115,117,102,102,105,120, -+ 101,115,41,46,10,32,32,32,32,41,7,114,225,0,0,0, -+ 114,146,0,0,0,218,18,101,120,116,101,110,115,105,111,110, -+ 95,115,117,102,102,105,120,101,115,114,219,0,0,0,114,85, -+ 0,0,0,114,224,0,0,0,114,75,0,0,0,41,3,90, -+ 10,101,120,116,101,110,115,105,111,110,115,90,6,115,111,117, -+ 114,99,101,90,8,98,121,116,101,99,111,100,101,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,162,0,0, -+ 0,55,5,0,0,115,8,0,0,0,0,5,18,1,12,1, -+ 12,1,114,162,0,0,0,99,1,0,0,0,0,0,0,0, -+ 12,0,0,0,12,0,0,0,67,0,0,0,115,70,2,0, -+ 0,124,0,0,97,0,0,116,0,0,106,1,0,97,1,0, -+ 116,0,0,106,2,0,97,2,0,116,1,0,106,3,0,116, -+ 4,0,25,125,1,0,120,76,0,100,26,0,68,93,68,0, -+ 125,2,0,124,2,0,116,1,0,106,3,0,107,7,0,114, -+ 83,0,116,0,0,106,5,0,124,2,0,131,1,0,125,3, -+ 0,110,13,0,116,1,0,106,3,0,124,2,0,25,125,3, -+ 0,116,6,0,124,1,0,124,2,0,124,3,0,131,3,0, -+ 1,113,44,0,87,100,5,0,100,6,0,103,1,0,102,2, -+ 0,100,7,0,100,8,0,100,6,0,103,2,0,102,2,0, -+ 102,2,0,125,4,0,120,149,0,124,4,0,68,93,129,0, -+ 92,2,0,125,5,0,125,6,0,116,7,0,100,9,0,100, -+ 10,0,132,0,0,124,6,0,68,131,1,0,131,1,0,115, -+ 199,0,116,8,0,130,1,0,124,6,0,100,11,0,25,125, -+ 7,0,124,5,0,116,1,0,106,3,0,107,6,0,114,241, -+ 0,116,1,0,106,3,0,124,5,0,25,125,8,0,80,113, -+ 156,0,121,20,0,116,0,0,106,5,0,124,5,0,131,1, -+ 0,125,8,0,80,87,113,156,0,4,116,9,0,107,10,0, -+ 114,28,1,1,1,1,119,156,0,89,113,156,0,88,113,156, -+ 0,87,116,9,0,100,12,0,131,1,0,130,1,0,116,6, -+ 0,124,1,0,100,13,0,124,8,0,131,3,0,1,116,6, -+ 0,124,1,0,100,14,0,124,7,0,131,3,0,1,116,6, -+ 0,124,1,0,100,15,0,100,16,0,106,10,0,124,6,0, -+ 131,1,0,131,3,0,1,121,19,0,116,0,0,106,5,0, -+ 100,17,0,131,1,0,125,9,0,87,110,24,0,4,116,9, -+ 0,107,10,0,114,147,1,1,1,1,100,18,0,125,9,0, -+ 89,110,1,0,88,116,6,0,124,1,0,100,17,0,124,9, -+ 0,131,3,0,1,116,0,0,106,5,0,100,19,0,131,1, -+ 0,125,10,0,116,6,0,124,1,0,100,19,0,124,10,0, -+ 131,3,0,1,124,5,0,100,7,0,107,2,0,114,238,1, -+ 116,0,0,106,5,0,100,20,0,131,1,0,125,11,0,116, -+ 6,0,124,1,0,100,21,0,124,11,0,131,3,0,1,116, -+ 6,0,124,1,0,100,22,0,116,11,0,131,0,0,131,3, -+ 0,1,116,12,0,106,13,0,116,2,0,106,14,0,131,0, -+ 0,131,1,0,1,124,5,0,100,7,0,107,2,0,114,66, -+ 2,116,15,0,106,16,0,100,23,0,131,1,0,1,100,24, -+ 0,116,12,0,107,6,0,114,66,2,100,25,0,116,17,0, -+ 95,18,0,100,18,0,83,41,27,122,205,83,101,116,117,112, -+ 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, -+ 105,109,112,111,114,116,101,114,115,32,102,111,114,32,105,109, -+ 112,111,114,116,108,105,98,32,98,121,32,105,109,112,111,114, -+ 116,105,110,103,32,110,101,101,100,101,100,10,32,32,32,32, -+ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, -+ 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, -+ 104,101,109,32,105,110,116,111,32,116,104,101,32,103,108,111, -+ 98,97,108,32,110,97,109,101,115,112,97,99,101,46,10,10, -+ 32,32,32,32,79,116,104,101,114,32,99,111,109,112,111,110, -+ 101,110,116,115,32,97,114,101,32,101,120,116,114,97,99,116, -+ 101,100,32,102,114,111,109,32,116,104,101,32,99,111,114,101, -+ 32,98,111,111,116,115,116,114,97,112,32,109,111,100,117,108, -+ 101,46,10,10,32,32,32,32,114,50,0,0,0,114,61,0, -+ 0,0,218,8,98,117,105,108,116,105,110,115,114,143,0,0, -+ 0,90,5,112,111,115,105,120,250,1,47,218,2,110,116,250, -+ 1,92,99,1,0,0,0,0,0,0,0,2,0,0,0,3, -+ 0,0,0,115,0,0,0,115,33,0,0,0,124,0,0,93, -+ 23,0,125,1,0,116,0,0,124,1,0,131,1,0,100,0, -+ 0,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, -+ 30,0,0,0,78,41,1,114,32,0,0,0,41,2,114,23, -+ 0,0,0,114,78,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,228,0,0,0,91,5,0,0, -+ 115,2,0,0,0,6,0,122,25,95,115,101,116,117,112,46, -+ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, -+ 114,62,114,60,0,0,0,122,30,105,109,112,111,114,116,108, -+ 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, -+ 120,32,111,114,32,110,116,114,4,0,0,0,114,26,0,0, -+ 0,114,22,0,0,0,114,31,0,0,0,90,7,95,116,104, -+ 114,101,97,100,78,90,8,95,119,101,97,107,114,101,102,90, -+ 6,119,105,110,114,101,103,114,170,0,0,0,114,7,0,0, -+ 0,122,4,46,112,121,119,122,6,95,100,46,112,121,100,84, -+ 41,4,122,3,95,105,111,122,9,95,119,97,114,110,105,110, -+ 103,115,122,8,98,117,105,108,116,105,110,115,122,7,109,97, -+ 114,115,104,97,108,41,19,114,122,0,0,0,114,8,0,0, -+ 0,114,146,0,0,0,114,240,0,0,0,114,113,0,0,0, -+ 90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95, -+ 110,97,109,101,114,117,0,0,0,218,3,97,108,108,218,14, -+ 65,115,115,101,114,116,105,111,110,69,114,114,111,114,114,108, -+ 0,0,0,114,27,0,0,0,114,12,0,0,0,114,230,0, -+ 0,0,114,150,0,0,0,114,26,1,0,0,114,85,0,0, -+ 0,114,164,0,0,0,114,169,0,0,0,114,174,0,0,0, -+ 41,12,218,17,95,98,111,111,116,115,116,114,97,112,95,109, -+ 111,100,117,108,101,90,11,115,101,108,102,95,109,111,100,117, -+ 108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, -+ 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, -+ 90,10,111,115,95,100,101,116,97,105,108,115,90,10,98,117, -+ 105,108,116,105,110,95,111,115,114,22,0,0,0,114,26,0, -+ 0,0,90,9,111,115,95,109,111,100,117,108,101,90,13,116, -+ 104,114,101,97,100,95,109,111,100,117,108,101,90,14,119,101, -+ 97,107,114,101,102,95,109,111,100,117,108,101,90,13,119,105, -+ 110,114,101,103,95,109,111,100,117,108,101,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,6,95,115,101,116, -+ 117,112,66,5,0,0,115,82,0,0,0,0,8,6,1,9, -+ 1,9,3,13,1,13,1,15,1,18,2,13,1,20,3,33, -+ 1,19,2,31,1,10,1,15,1,13,1,4,2,3,1,15, -+ 1,5,1,13,1,12,2,12,1,16,1,16,1,25,3,3, -+ 1,19,1,13,2,11,1,16,3,15,1,16,3,12,1,15, -+ 1,16,3,19,1,19,1,12,1,13,1,12,1,114,34,1, -+ 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,3, -+ 0,0,0,67,0,0,0,115,116,0,0,0,116,0,0,124, -+ 0,0,131,1,0,1,116,1,0,131,0,0,125,1,0,116, -+ 2,0,106,3,0,106,4,0,116,5,0,106,6,0,124,1, -+ 0,140,0,0,103,1,0,131,1,0,1,116,7,0,106,8, -+ 0,100,1,0,107,2,0,114,78,0,116,2,0,106,9,0, -+ 106,10,0,116,11,0,131,1,0,1,116,2,0,106,9,0, -+ 106,10,0,116,12,0,131,1,0,1,116,5,0,124,0,0, -+ 95,5,0,116,13,0,124,0,0,95,13,0,100,2,0,83, -+ 41,3,122,41,73,110,115,116,97,108,108,32,116,104,101,32, - 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, -- 116,101,114,115,32,102,111,114,32,105,109,112,111,114,116,108, -- 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32, -- 110,101,101,100,101,100,10,32,32,32,32,98,117,105,108,116, -- 45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32, -- 105,110,106,101,99,116,105,110,103,32,116,104,101,109,32,105, -- 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110, -- 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,79, -- 116,104,101,114,32,99,111,109,112,111,110,101,110,116,115,32, -- 97,114,101,32,101,120,116,114,97,99,116,101,100,32,102,114, -- 111,109,32,116,104,101,32,99,111,114,101,32,98,111,111,116, -- 115,116,114,97,112,32,109,111,100,117,108,101,46,10,10,32, -- 32,32,32,114,49,0,0,0,114,60,0,0,0,218,8,98, -- 117,105,108,116,105,110,115,114,142,0,0,0,90,5,112,111, -- 115,105,120,250,1,47,218,2,110,116,250,1,92,99,1,0, -- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0, -- 0,0,115,33,0,0,0,124,0,0,93,23,0,125,1,0, -- 116,0,0,124,1,0,131,1,0,100,0,0,107,2,0,86, -- 1,113,3,0,100,1,0,83,41,2,114,29,0,0,0,78, -- 41,1,114,31,0,0,0,41,2,114,22,0,0,0,114,77, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,227,0,0,0,91,5,0,0,115,2,0,0,0, -- 6,0,122,25,95,115,101,116,117,112,46,60,108,111,99,97, -- 108,115,62,46,60,103,101,110,101,120,112,114,62,114,59,0, -- 0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,101, -- 113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,32, -- 110,116,114,3,0,0,0,114,25,0,0,0,114,21,0,0, -- 0,114,30,0,0,0,90,7,95,116,104,114,101,97,100,78, -- 90,8,95,119,101,97,107,114,101,102,90,6,119,105,110,114, -- 101,103,114,169,0,0,0,114,6,0,0,0,122,4,46,112, -- 121,119,122,6,95,100,46,112,121,100,84,41,4,122,3,95, -- 105,111,122,9,95,119,97,114,110,105,110,103,115,122,8,98, -- 117,105,108,116,105,110,115,122,7,109,97,114,115,104,97,108, -- 41,19,114,121,0,0,0,114,7,0,0,0,114,145,0,0, -- 0,114,239,0,0,0,114,112,0,0,0,90,18,95,98,117, -- 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, -- 116,0,0,0,218,3,97,108,108,218,14,65,115,115,101,114, -- 116,105,111,110,69,114,114,111,114,114,107,0,0,0,114,26, -- 0,0,0,114,11,0,0,0,114,229,0,0,0,114,149,0, -- 0,0,114,25,1,0,0,114,84,0,0,0,114,163,0,0, -- 0,114,168,0,0,0,114,173,0,0,0,41,12,218,17,95, -- 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, -- 90,11,115,101,108,102,95,109,111,100,117,108,101,90,12,98, -- 117,105,108,116,105,110,95,110,97,109,101,90,14,98,117,105, -- 108,116,105,110,95,109,111,100,117,108,101,90,10,111,115,95, -- 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, -- 95,111,115,114,21,0,0,0,114,25,0,0,0,90,9,111, -- 115,95,109,111,100,117,108,101,90,13,116,104,114,101,97,100, -- 95,109,111,100,117,108,101,90,14,119,101,97,107,114,101,102, -- 95,109,111,100,117,108,101,90,13,119,105,110,114,101,103,95, -- 109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,6,95,115,101,116,117,112,66,5,0, -- 0,115,82,0,0,0,0,8,6,1,9,1,9,3,13,1, -- 13,1,15,1,18,2,13,1,20,3,33,1,19,2,31,1, -- 10,1,15,1,13,1,4,2,3,1,15,1,5,1,13,1, -- 12,2,12,1,16,1,16,1,25,3,3,1,19,1,13,2, -- 11,1,16,3,15,1,16,3,12,1,15,1,16,3,19,1, -- 19,1,12,1,13,1,12,1,114,33,1,0,0,99,1,0, -- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, -- 0,0,115,116,0,0,0,116,0,0,124,0,0,131,1,0, -- 1,116,1,0,131,0,0,125,1,0,116,2,0,106,3,0, -- 106,4,0,116,5,0,106,6,0,124,1,0,140,0,0,103, -- 1,0,131,1,0,1,116,7,0,106,8,0,100,1,0,107, -- 2,0,114,78,0,116,2,0,106,9,0,106,10,0,116,11, -- 0,131,1,0,1,116,2,0,106,9,0,106,10,0,116,12, -- 0,131,1,0,1,116,5,0,124,0,0,95,5,0,116,13, -- 0,124,0,0,95,13,0,100,2,0,83,41,3,122,41,73, -- 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, -- 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, -- 112,111,110,101,110,116,115,46,114,28,1,0,0,78,41,14, -- 114,33,1,0,0,114,161,0,0,0,114,7,0,0,0,114, -- 254,0,0,0,114,149,0,0,0,114,6,1,0,0,114,19, -- 1,0,0,114,3,0,0,0,114,112,0,0,0,218,9,109, -- 101,116,97,95,112,97,116,104,114,163,0,0,0,114,168,0, -- 0,0,114,249,0,0,0,114,218,0,0,0,41,2,114,32, -- 1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,108, -- 111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,134, -- 5,0,0,115,16,0,0,0,0,2,10,1,9,1,28,1, -- 15,1,16,1,16,4,9,1,114,35,1,0,0,41,3,122, -- 3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,57, -- 114,114,0,0,0,114,10,0,0,0,114,11,0,0,0,114, -- 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, -- 0,0,0,114,39,0,0,0,114,43,0,0,0,114,44,0, -- 0,0,114,46,0,0,0,114,55,0,0,0,218,4,116,121, -- 112,101,218,8,95,95,99,111,100,101,95,95,114,144,0,0, -- 0,114,15,0,0,0,114,135,0,0,0,114,14,0,0,0, -- 114,18,0,0,0,90,17,95,82,65,87,95,77,65,71,73, -- 67,95,78,85,77,66,69,82,114,73,0,0,0,114,72,0, -- 0,0,114,84,0,0,0,114,74,0,0,0,90,23,68,69, -- 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, -- 70,73,88,69,83,90,27,79,80,84,73,77,73,90,69,68, -- 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, -- 69,83,114,79,0,0,0,114,85,0,0,0,114,91,0,0, -- 0,114,95,0,0,0,114,97,0,0,0,114,105,0,0,0, -- 114,123,0,0,0,114,130,0,0,0,114,141,0,0,0,114, -- 147,0,0,0,114,150,0,0,0,114,155,0,0,0,218,6, -- 111,98,106,101,99,116,114,162,0,0,0,114,167,0,0,0, -- 114,168,0,0,0,114,184,0,0,0,114,194,0,0,0,114, -- 210,0,0,0,114,218,0,0,0,114,223,0,0,0,114,229, -- 0,0,0,114,224,0,0,0,114,230,0,0,0,114,247,0, -- 0,0,114,249,0,0,0,114,6,1,0,0,114,24,1,0, -- 0,114,161,0,0,0,114,33,1,0,0,114,35,1,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,0, -- 0,0,115,100,0,0,0,6,17,6,3,12,12,12,5,12, -- 5,12,6,12,12,12,10,12,9,12,5,12,7,15,22,15, -- 110,22,1,18,2,6,1,6,2,9,2,9,2,10,2,21, -- 44,12,33,12,19,12,12,12,12,18,8,12,28,12,17,21, -- 55,21,12,18,10,12,14,9,3,12,1,15,65,19,64,19, -- 28,22,110,19,41,25,43,25,16,6,3,25,53,19,57,19, -- 41,19,134,19,146,15,23,12,11,12,68, -+ 116,32,99,111,109,112,111,110,101,110,116,115,46,114,29,1, -+ 0,0,78,41,14,114,34,1,0,0,114,162,0,0,0,114, -+ 8,0,0,0,114,255,0,0,0,114,150,0,0,0,114,7, -+ 1,0,0,114,20,1,0,0,114,4,0,0,0,114,113,0, -+ 0,0,218,9,109,101,116,97,95,112,97,116,104,114,164,0, -+ 0,0,114,169,0,0,0,114,250,0,0,0,114,219,0,0, -+ 0,41,2,114,33,1,0,0,90,17,115,117,112,112,111,114, -+ 116,101,100,95,108,111,97,100,101,114,115,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,8,95,105,110,115, -+ 116,97,108,108,134,5,0,0,115,16,0,0,0,0,2,10, -+ 1,9,1,28,1,15,1,16,1,16,4,9,1,114,36,1, -+ 0,0,41,4,122,3,119,105,110,114,1,0,0,0,114,2, -+ 0,0,0,114,3,0,0,0,41,57,114,115,0,0,0,114, -+ 11,0,0,0,114,12,0,0,0,114,18,0,0,0,114,20, -+ 0,0,0,114,29,0,0,0,114,39,0,0,0,114,40,0, -+ 0,0,114,44,0,0,0,114,45,0,0,0,114,47,0,0, -+ 0,114,56,0,0,0,218,4,116,121,112,101,218,8,95,95, -+ 99,111,100,101,95,95,114,145,0,0,0,114,16,0,0,0, -+ 114,136,0,0,0,114,15,0,0,0,114,19,0,0,0,90, -+ 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, -+ 69,82,114,74,0,0,0,114,73,0,0,0,114,85,0,0, -+ 0,114,75,0,0,0,90,23,68,69,66,85,71,95,66,89, -+ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, -+ 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, -+ 79,68,69,95,83,85,70,70,73,88,69,83,114,80,0,0, -+ 0,114,86,0,0,0,114,92,0,0,0,114,96,0,0,0, -+ 114,98,0,0,0,114,106,0,0,0,114,124,0,0,0,114, -+ 131,0,0,0,114,142,0,0,0,114,148,0,0,0,114,151, -+ 0,0,0,114,156,0,0,0,218,6,111,98,106,101,99,116, -+ 114,163,0,0,0,114,168,0,0,0,114,169,0,0,0,114, -+ 185,0,0,0,114,195,0,0,0,114,211,0,0,0,114,219, -+ 0,0,0,114,224,0,0,0,114,230,0,0,0,114,225,0, -+ 0,0,114,231,0,0,0,114,248,0,0,0,114,250,0,0, -+ 0,114,7,1,0,0,114,25,1,0,0,114,162,0,0,0, -+ 114,34,1,0,0,114,36,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,8, -+ 60,109,111,100,117,108,101,62,8,0,0,0,115,100,0,0, -+ 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, -+ 10,12,9,12,5,12,7,15,22,15,110,22,1,18,2,6, -+ 1,6,2,9,2,9,2,10,2,21,44,12,33,12,19,12, -+ 12,12,12,18,8,12,28,12,17,21,55,21,12,18,10,12, -+ 14,9,3,12,1,15,65,19,64,19,28,22,110,19,41,25, -+ 43,25,16,6,3,25,53,19,57,19,41,19,134,19,146,15, -+ 23,12,11,12,68, ++ 114,87,1,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,64,0,0,0,115,46,0,0,0,101, ++ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, ++ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, ++ 100,5,0,132,0,0,90,5,0,100,6,0,83,41,7,218, ++ 18,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, ++ 101,120,116,122,36,67,111,110,116,101,120,116,32,109,97,110, ++ 97,103,101,114,32,102,111,114,32,116,104,101,32,105,109,112, ++ 111,114,116,32,108,111,99,107,46,99,1,0,0,0,0,0, ++ 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,14, + 0,0,0,116,0,0,106,1,0,131,0,0,1,100,1,0, +- 83,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, +- 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, +- 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, +- 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, +- 46,78,41,2,114,106,0,0,0,114,107,0,0,0,41,4, +- 114,71,0,0,0,90,8,101,120,99,95,116,121,112,101,90, +- 9,101,120,99,95,118,97,108,117,101,90,13,101,120,99,95, +- 116,114,97,99,101,98,97,99,107,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,114,81,0,0,0,76,8,0, +- 0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,114, +- 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, +- 120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,0, +- 0,0,114,58,0,0,0,114,59,0,0,0,114,75,0,0, +- 0,114,81,0,0,0,114,4,0,0,0,114,4,0,0,0, +- 114,4,0,0,0,114,5,0,0,0,114,101,1,0,0,68, +- 8,0,0,115,6,0,0,0,12,2,6,2,12,4,114,101, +- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, +- 4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,0, +- 106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,0, +- 125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,107, +- 0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,1, +- 0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,0, +- 0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,0, +- 131,2,0,83,124,4,0,83,41,6,122,50,82,101,115,111, +- 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, +- 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, +- 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,116, +- 0,0,0,114,29,0,0,0,122,50,97,116,116,101,109,112, +- 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, +- 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, +- 101,118,101,108,32,112,97,99,107,97,103,101,114,84,0,0, +- 0,122,5,123,125,46,123,125,41,4,114,34,0,0,0,114, +- 31,0,0,0,114,133,0,0,0,114,47,0,0,0,41,5, +- 114,67,0,0,0,218,7,112,97,99,107,97,103,101,218,5, +- 108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,115, +- 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,13,95,114,101,115,111,108,118,101,95,110,97,109,101,81, +- 8,0,0,115,10,0,0,0,0,2,22,1,18,1,15,1, +- 10,1,114,104,1,0,0,99,3,0,0,0,0,0,0,0, +- 4,0,0,0,3,0,0,0,67,0,0,0,115,47,0,0, +- 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, +- 125,3,0,124,3,0,100,0,0,107,8,0,114,34,0,100, +- 0,0,83,116,1,0,124,1,0,124,3,0,131,2,0,83, +- 41,1,78,41,2,114,14,1,0,0,114,173,0,0,0,41, +- 4,114,77,1,0,0,114,67,0,0,0,114,35,0,0,0, +- 114,169,0,0,0,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, +- 95,108,101,103,97,99,121,90,8,0,0,115,8,0,0,0, +- 0,3,18,1,12,1,4,1,114,105,1,0,0,99,3,0, +- 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, +- 0,0,115,34,1,0,0,116,0,0,106,1,0,115,28,0, +- 116,2,0,106,3,0,100,1,0,116,4,0,131,2,0,1, +- 110,0,0,124,0,0,116,0,0,106,5,0,107,6,0,125, +- 3,0,120,240,0,116,0,0,106,1,0,68,93,225,0,125, +- 4,0,116,6,0,131,0,0,143,93,0,1,121,13,0,124, +- 4,0,106,7,0,125,5,0,87,110,54,0,4,116,8,0, +- 107,10,0,114,138,0,1,1,1,116,9,0,124,4,0,124, +- 0,0,124,1,0,131,3,0,125,6,0,124,6,0,100,2, +- 0,107,8,0,114,134,0,119,53,0,110,0,0,89,110,19, +- 0,88,124,5,0,124,0,0,124,1,0,124,2,0,131,3, +- 0,125,6,0,87,100,2,0,81,88,124,6,0,100,2,0, +- 107,9,0,114,53,0,124,3,0,12,114,15,1,124,0,0, +- 116,0,0,106,5,0,107,6,0,114,15,1,116,0,0,106, +- 5,0,124,0,0,25,125,7,0,121,13,0,124,7,0,106, +- 10,0,125,8,0,87,110,22,0,4,116,8,0,107,10,0, +- 114,247,0,1,1,1,124,6,0,83,89,113,19,1,88,124, +- 8,0,100,2,0,107,8,0,114,8,1,124,6,0,83,124, +- 8,0,83,113,22,1,124,6,0,83,113,53,0,113,53,0, +- 87,100,2,0,83,100,2,0,83,41,3,122,23,70,105,110, +- 100,32,97,32,109,111,100,117,108,101,39,115,32,108,111,97, +- 100,101,114,46,122,22,115,121,115,46,109,101,116,97,95,112, +- 97,116,104,32,105,115,32,101,109,112,116,121,78,41,11,114, +- 7,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114, +- 166,0,0,0,114,167,0,0,0,114,168,0,0,0,114,73, +- 0,0,0,114,101,1,0,0,114,13,1,0,0,114,209,0, +- 0,0,114,105,1,0,0,114,208,0,0,0,41,9,114,67, +- 0,0,0,114,35,0,0,0,114,12,1,0,0,90,9,105, +- 115,95,114,101,108,111,97,100,114,77,1,0,0,114,13,1, +- 0,0,114,177,0,0,0,114,179,0,0,0,114,208,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,10,95,102,105,110,100,95,115,112,101,99,99,8,0,0, +- 115,48,0,0,0,0,2,9,1,19,4,15,1,16,1,10, +- 1,3,1,13,1,13,1,18,1,12,1,11,2,24,1,12, +- 2,22,1,13,1,3,1,13,1,13,4,9,2,12,1,4, +- 2,7,2,11,2,114,107,1,0,0,99,3,0,0,0,0, +- 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, +- 194,0,0,0,116,0,0,124,0,0,116,1,0,131,2,0, +- 115,45,0,116,2,0,100,1,0,106,3,0,116,4,0,124, +- 0,0,131,1,0,131,1,0,131,1,0,130,1,0,110,0, +- 0,124,2,0,100,2,0,107,0,0,114,72,0,116,5,0, +- 100,3,0,131,1,0,130,1,0,110,0,0,124,1,0,114, +- 156,0,116,0,0,124,1,0,116,1,0,131,2,0,115,108, +- 0,116,2,0,100,4,0,131,1,0,130,1,0,113,156,0, +- 124,1,0,116,6,0,106,7,0,107,7,0,114,156,0,100, +- 5,0,125,3,0,116,8,0,124,3,0,106,3,0,124,1, +- 0,131,1,0,131,1,0,130,1,0,113,156,0,110,0,0, +- 124,0,0,12,114,190,0,124,2,0,100,2,0,107,2,0, +- 114,190,0,116,5,0,100,6,0,131,1,0,130,1,0,110, +- 0,0,100,7,0,83,41,8,122,28,86,101,114,105,102,121, +- 32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,34, +- 115,97,110,101,34,46,122,31,109,111,100,117,108,101,32,110, +- 97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,44, +- 32,110,111,116,32,123,125,114,84,0,0,0,122,18,108,101, +- 118,101,108,32,109,117,115,116,32,98,101,32,62,61,32,48, +- 122,31,95,95,112,97,99,107,97,103,101,95,95,32,110,111, +- 116,32,115,101,116,32,116,111,32,97,32,115,116,114,105,110, +- 103,122,61,80,97,114,101,110,116,32,109,111,100,117,108,101, +- 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, +- 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, +- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, +- 122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,110, +- 97,109,101,78,41,9,114,192,0,0,0,114,82,1,0,0, +- 218,9,84,121,112,101,69,114,114,111,114,114,47,0,0,0, +- 114,66,0,0,0,114,133,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, +- 114,41,4,114,67,0,0,0,114,102,1,0,0,114,103,1, +- 0,0,114,171,0,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,13,95,115,97,110,105,116,121,95, +- 99,104,101,99,107,139,8,0,0,115,24,0,0,0,0,2, +- 15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1, +- 6,2,27,1,19,1,114,110,1,0,0,122,16,78,111,32, +- 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, +- 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, +- 12,0,0,0,67,0,0,0,115,52,1,0,0,100,0,0, +- 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, +- 2,0,25,125,3,0,124,3,0,114,178,0,124,3,0,116, +- 1,0,106,2,0,107,7,0,114,62,0,116,3,0,124,1, +- 0,124,3,0,131,2,0,1,110,0,0,124,0,0,116,1, +- 0,106,2,0,107,6,0,114,88,0,116,1,0,106,2,0, +- 124,0,0,25,83,116,1,0,106,2,0,124,3,0,25,125, +- 4,0,121,13,0,124,4,0,106,4,0,125,2,0,87,113, +- 178,0,4,116,5,0,107,10,0,114,174,0,1,1,1,116, +- 6,0,100,3,0,23,106,7,0,124,0,0,124,3,0,131, +- 2,0,125,5,0,116,8,0,124,5,0,100,4,0,124,0, +- 0,131,1,1,130,1,0,89,113,178,0,88,110,0,0,116, +- 9,0,124,0,0,124,2,0,131,2,0,125,6,0,124,6, +- 0,100,0,0,107,8,0,114,235,0,116,8,0,116,6,0, +- 106,7,0,124,0,0,131,1,0,100,4,0,124,0,0,131, +- 1,1,130,1,0,110,18,0,116,10,0,124,6,0,131,1, +- 0,106,11,0,131,0,0,125,7,0,124,3,0,114,48,1, +- 116,1,0,106,2,0,124,3,0,25,125,4,0,116,12,0, +- 124,4,0,124,0,0,106,0,0,100,1,0,131,1,0,100, +- 5,0,25,124,7,0,131,3,0,1,110,0,0,124,7,0, +- 83,41,6,78,114,116,0,0,0,114,84,0,0,0,122,23, +- 59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32, +- 112,97,99,107,97,103,101,114,67,0,0,0,114,115,0,0, +- 0,41,13,114,32,0,0,0,114,7,0,0,0,114,73,0, +- 0,0,114,114,0,0,0,114,246,0,0,0,114,209,0,0, +- 0,218,8,95,69,82,82,95,77,83,71,114,47,0,0,0, +- 114,153,0,0,0,114,107,1,0,0,114,174,0,0,0,114, +- 6,1,0,0,114,61,0,0,0,41,8,114,67,0,0,0, +- 218,7,105,109,112,111,114,116,95,114,35,0,0,0,114,233, +- 0,0,0,90,13,112,97,114,101,110,116,95,109,111,100,117, +- 108,101,114,171,0,0,0,114,177,0,0,0,114,179,0,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,100, +- 95,117,110,108,111,99,107,101,100,159,8,0,0,115,42,0, +- 0,0,0,1,6,1,19,1,6,1,15,1,16,2,15,1, +- 11,1,13,1,3,1,13,1,13,1,22,1,26,1,15,1, +- 12,1,30,2,18,1,6,2,13,1,32,1,114,113,1,0, +- 0,99,2,0,0,0,0,0,0,0,2,0,0,0,10,0, +- 0,0,67,0,0,0,115,36,0,0,0,116,0,0,124,0, +- 0,131,1,0,143,18,0,1,116,1,0,124,0,0,124,1, +- 0,131,2,0,83,87,100,1,0,81,88,100,1,0,83,41, +- 2,122,54,70,105,110,100,32,97,110,100,32,108,111,97,100, +- 32,116,104,101,32,109,111,100,117,108,101,44,32,97,110,100, +- 32,114,101,108,101,97,115,101,32,116,104,101,32,105,109,112, +- 111,114,116,32,108,111,99,107,46,78,41,2,114,103,0,0, +- 0,114,113,1,0,0,41,2,114,67,0,0,0,114,112,1, +- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, +- 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, +- 100,186,8,0,0,115,4,0,0,0,0,2,13,1,114,114, +- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, +- 4,0,0,0,67,0,0,0,115,172,0,0,0,116,0,0, +- 124,0,0,124,1,0,124,2,0,131,3,0,1,124,2,0, +- 100,1,0,107,4,0,114,49,0,116,1,0,124,0,0,124, +- 1,0,124,2,0,131,3,0,125,0,0,110,0,0,116,2, +- 0,106,3,0,131,0,0,1,124,0,0,116,4,0,106,5, +- 0,107,7,0,114,87,0,116,6,0,124,0,0,116,7,0, +- 131,2,0,83,116,4,0,106,5,0,124,0,0,25,125,3, +- 0,124,3,0,100,2,0,107,8,0,114,158,0,116,2,0, +- 106,8,0,131,0,0,1,100,3,0,106,9,0,124,0,0, +- 131,1,0,125,4,0,116,10,0,124,4,0,100,4,0,124, +- 0,0,131,1,1,130,1,0,110,0,0,116,11,0,124,0, +- 0,131,1,0,1,124,3,0,83,41,5,97,50,1,0,0, +- 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, +- 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, +- 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, +- 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, +- 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, +- 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, +- 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, +- 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, +- 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, +- 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, +- 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, +- 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, +- 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, +- 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, +- 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, +- 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, +- 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, +- 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, +- 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, +- 32,32,114,84,0,0,0,78,122,40,105,109,112,111,114,116, +- 32,111,102,32,123,125,32,104,97,108,116,101,100,59,32,78, +- 111,110,101,32,105,110,32,115,121,115,46,109,111,100,117,108, +- 101,115,114,67,0,0,0,41,12,114,110,1,0,0,114,104, +- 1,0,0,114,106,0,0,0,114,3,1,0,0,114,7,0, +- 0,0,114,73,0,0,0,114,114,1,0,0,218,11,95,103, +- 99,100,95,105,109,112,111,114,116,114,107,0,0,0,114,47, +- 0,0,0,114,153,0,0,0,114,112,0,0,0,41,5,114, +- 67,0,0,0,114,102,1,0,0,114,103,1,0,0,114,179, +- 0,0,0,114,151,0,0,0,114,4,0,0,0,114,4,0, +- 0,0,114,5,0,0,0,114,115,1,0,0,192,8,0,0, +- 115,26,0,0,0,0,9,16,1,12,1,21,1,10,1,15, +- 1,13,1,13,1,12,1,10,2,15,1,21,1,10,1,114, +- 115,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, +- 0,17,0,0,0,67,0,0,0,115,1,1,0,0,116,0, +- 0,124,0,0,100,1,0,131,2,0,114,253,0,100,2,0, +- 124,1,0,107,6,0,114,89,0,116,1,0,124,1,0,131, +- 1,0,125,1,0,124,1,0,106,2,0,100,2,0,131,1, +- 0,1,116,0,0,124,0,0,100,3,0,131,2,0,114,89, +- 0,124,1,0,106,3,0,124,0,0,106,4,0,131,1,0, +- 1,113,89,0,110,0,0,120,161,0,124,1,0,68,93,150, +- 0,125,3,0,116,0,0,124,0,0,124,3,0,131,2,0, +- 115,96,0,100,4,0,106,5,0,124,0,0,106,6,0,124, +- 3,0,131,2,0,125,4,0,121,17,0,116,7,0,124,2, +- 0,124,4,0,131,2,0,1,87,113,246,0,4,116,8,0, +- 107,10,0,114,242,0,1,125,5,0,1,122,53,0,116,9, +- 0,124,5,0,131,1,0,106,10,0,116,11,0,131,1,0, +- 114,221,0,124,5,0,106,12,0,124,4,0,107,2,0,114, +- 221,0,119,96,0,113,221,0,110,0,0,130,0,0,87,89, +- 100,5,0,100,5,0,125,5,0,126,5,0,88,113,246,0, +- 88,113,96,0,113,96,0,87,110,0,0,124,0,0,83,41, +- 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, +- 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, +- 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, +- 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, +- 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, +- 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, +- 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, +- 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, +- 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, +- 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, +- 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, +- 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, +- 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, +- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, +- 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, +- 32,114,246,0,0,0,250,1,42,218,7,95,95,97,108,108, +- 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, +- 0,114,245,0,0,0,218,6,114,101,109,111,118,101,114,197, +- 0,0,0,114,117,1,0,0,114,47,0,0,0,114,57,0, +- 0,0,114,114,0,0,0,114,153,0,0,0,114,82,1,0, +- 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, +- 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,179, +- 0,0,0,218,8,102,114,111,109,108,105,115,116,114,112,1, +- 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, +- 109,101,114,40,1,0,0,114,4,0,0,0,114,4,0,0, +- 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, +- 102,114,111,109,108,105,115,116,216,8,0,0,115,34,0,0, +- 0,0,10,15,1,12,1,12,1,13,1,15,1,22,1,13, +- 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,9, +- 1,32,1,114,121,1,0,0,99,1,0,0,0,0,0,0, +- 0,2,0,0,0,2,0,0,0,67,0,0,0,115,78,0, +- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, +- 0,124,1,0,100,2,0,107,8,0,114,74,0,124,0,0, +- 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, +- 114,74,0,124,1,0,106,1,0,100,5,0,131,1,0,100, +- 6,0,25,125,1,0,113,74,0,110,0,0,124,1,0,83, +- 41,7,122,167,67,97,108,99,117,108,97,116,101,32,119,104, +- 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, +- 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, +- 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, +- 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, +- 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, +- 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, +- 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, +- 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, +- 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, +- 110,111,119,110,46,10,10,32,32,32,32,114,250,0,0,0, +- 78,114,57,0,0,0,114,246,0,0,0,114,116,0,0,0, +- 114,84,0,0,0,41,2,114,93,0,0,0,114,32,0,0, +- 0,41,2,218,7,103,108,111,98,97,108,115,114,102,1,0, +- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, +- 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, +- 101,95,95,248,8,0,0,115,12,0,0,0,0,7,15,1, +- 12,1,10,1,12,1,25,1,114,123,1,0,0,99,0,0, +- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, +- 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, +- 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, +- 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, +- 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, +- 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, +- 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, +- 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, +- 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, +- 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, +- 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, +- 32,41,7,114,56,1,0,0,114,106,0,0,0,218,18,101, +- 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, +- 115,114,8,1,0,0,114,134,0,0,0,114,7,1,0,0, +- 114,232,0,0,0,41,3,90,10,101,120,116,101,110,115,105, +- 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, +- 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, +- 5,0,0,0,114,240,0,0,0,7,9,0,0,115,8,0, +- 0,0,0,5,18,1,12,1,12,1,114,240,0,0,0,99, +- 5,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, +- 67,0,0,0,115,227,0,0,0,124,4,0,100,1,0,107, +- 2,0,114,27,0,116,0,0,124,0,0,131,1,0,125,5, +- 0,110,54,0,124,1,0,100,2,0,107,9,0,114,45,0, +- 124,1,0,110,3,0,105,0,0,125,6,0,116,1,0,124, +- 6,0,131,1,0,125,7,0,116,0,0,124,0,0,124,7, +- 0,124,4,0,131,3,0,125,5,0,124,3,0,115,207,0, +- 124,4,0,100,1,0,107,2,0,114,122,0,116,0,0,124, +- 0,0,106,2,0,100,3,0,131,1,0,100,1,0,25,131, +- 1,0,83,124,0,0,115,132,0,124,5,0,83,116,3,0, +- 124,0,0,131,1,0,116,3,0,124,0,0,106,2,0,100, +- 3,0,131,1,0,100,1,0,25,131,1,0,24,125,8,0, +- 116,4,0,106,5,0,124,5,0,106,6,0,100,2,0,116, +- 3,0,124,5,0,106,6,0,131,1,0,124,8,0,24,133, +- 2,0,25,25,83,110,16,0,116,7,0,124,5,0,124,3, +- 0,116,0,0,131,3,0,83,100,2,0,83,41,4,97,214, +- 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, +- 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, +- 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, +- 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, +- 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, +- 116,32,105,115,32,111,99,99,117,114,105,110,103,32,102,114, +- 111,109,10,32,32,32,32,116,111,32,104,97,110,100,108,101, +- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, +- 115,46,32,84,104,101,32,39,108,111,99,97,108,115,39,32, +- 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111, +- 114,101,100,46,32,84,104,101,10,32,32,32,32,39,102,114, +- 111,109,108,105,115,116,39,32,97,114,103,117,109,101,110,116, +- 32,115,112,101,99,105,102,105,101,115,32,119,104,97,116,32, +- 115,104,111,117,108,100,32,101,120,105,115,116,32,97,115,32, +- 97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,104, +- 101,32,109,111,100,117,108,101,10,32,32,32,32,98,101,105, +- 110,103,32,105,109,112,111,114,116,101,100,32,40,101,46,103, +- 46,32,96,96,102,114,111,109,32,109,111,100,117,108,101,32, +- 105,109,112,111,114,116,32,60,102,114,111,109,108,105,115,116, +- 62,96,96,41,46,32,32,84,104,101,32,39,108,101,118,101, +- 108,39,10,32,32,32,32,97,114,103,117,109,101,110,116,32, +- 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,112, +- 97,99,107,97,103,101,32,108,111,99,97,116,105,111,110,32, +- 116,111,32,105,109,112,111,114,116,32,102,114,111,109,32,105, +- 110,32,97,32,114,101,108,97,116,105,118,101,10,32,32,32, +- 32,105,109,112,111,114,116,32,40,101,46,103,46,32,96,96, +- 102,114,111,109,32,46,46,112,107,103,32,105,109,112,111,114, +- 116,32,109,111,100,96,96,32,119,111,117,108,100,32,104,97, +- 118,101,32,97,32,39,108,101,118,101,108,39,32,111,102,32, +- 50,41,46,10,10,32,32,32,32,114,84,0,0,0,78,114, +- 116,0,0,0,41,8,114,115,1,0,0,114,123,1,0,0, +- 114,121,0,0,0,114,31,0,0,0,114,7,0,0,0,114, +- 73,0,0,0,114,57,0,0,0,114,121,1,0,0,41,9, +- 114,67,0,0,0,114,122,1,0,0,218,6,108,111,99,97, +- 108,115,114,120,1,0,0,114,103,1,0,0,114,179,0,0, +- 0,90,8,103,108,111,98,97,108,115,95,114,102,1,0,0, +- 90,7,99,117,116,95,111,102,102,114,4,0,0,0,114,4, +- 0,0,0,114,5,0,0,0,218,10,95,95,105,109,112,111, +- 114,116,95,95,18,9,0,0,115,26,0,0,0,0,11,12, +- 1,15,2,24,1,12,1,18,1,6,3,12,1,23,1,6, +- 1,4,4,35,3,40,2,114,126,1,0,0,99,1,0,0, +- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, +- 0,115,68,0,0,0,116,0,0,106,1,0,124,0,0,131, +- 1,0,125,1,0,124,1,0,100,0,0,107,8,0,114,46, +- 0,116,2,0,100,1,0,124,0,0,23,131,1,0,130,1, +- 0,110,0,0,116,3,0,124,1,0,131,1,0,125,2,0, +- 124,2,0,106,4,0,131,0,0,83,41,2,78,122,25,110, +- 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, +- 101,32,110,97,109,101,100,32,41,5,114,10,1,0,0,114, +- 13,1,0,0,114,153,0,0,0,114,174,0,0,0,114,6, +- 1,0,0,41,3,114,67,0,0,0,114,177,0,0,0,114, +- 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, +- 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, +- 111,109,95,110,97,109,101,53,9,0,0,115,10,0,0,0, +- 0,1,15,1,12,1,19,1,12,1,114,127,1,0,0,99, +- 2,0,0,0,0,0,0,0,19,0,0,0,12,0,0,0, +- 67,0,0,0,115,232,2,0,0,124,1,0,97,0,0,124, +- 0,0,97,1,0,116,1,0,106,2,0,106,3,0,114,33, +- 0,116,4,0,97,5,0,110,6,0,116,6,0,97,5,0, +- 116,7,0,116,1,0,131,1,0,125,2,0,120,138,0,116, +- 1,0,106,8,0,106,9,0,131,0,0,68,93,121,0,92, +- 2,0,125,3,0,125,4,0,116,10,0,124,4,0,124,2, +- 0,131,2,0,114,67,0,124,3,0,116,1,0,106,11,0, +- 107,6,0,114,118,0,116,12,0,125,5,0,110,27,0,116, +- 0,0,106,13,0,124,3,0,131,1,0,114,67,0,116,14, +- 0,125,5,0,110,3,0,113,67,0,116,15,0,124,4,0, +- 124,5,0,131,2,0,125,6,0,116,16,0,124,6,0,131, +- 1,0,125,7,0,124,7,0,106,17,0,124,4,0,131,1, +- 0,1,113,67,0,113,67,0,87,116,1,0,106,8,0,116, +- 18,0,25,125,8,0,120,73,0,100,26,0,68,93,65,0, +- 125,9,0,124,9,0,116,1,0,106,8,0,107,7,0,114, +- 248,0,116,19,0,124,9,0,131,1,0,125,10,0,110,13, +- 0,116,1,0,106,8,0,124,9,0,25,125,10,0,116,20, +- 0,124,8,0,124,9,0,124,10,0,131,3,0,1,113,212, +- 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, +- 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, +- 125,11,0,120,146,0,124,11,0,68,93,126,0,92,2,0, +- 125,12,0,125,13,0,116,21,0,100,9,0,100,10,0,132, +- 0,0,124,13,0,68,131,1,0,131,1,0,115,108,1,116, +- 22,0,130,1,0,124,13,0,100,11,0,25,125,14,0,124, +- 12,0,116,1,0,106,8,0,107,6,0,114,150,1,116,1, +- 0,106,8,0,124,12,0,25,125,15,0,80,113,65,1,121, +- 17,0,116,19,0,124,12,0,131,1,0,125,15,0,80,87, +- 113,65,1,4,116,23,0,107,10,0,114,190,1,1,1,1, +- 119,65,1,89,113,65,1,88,113,65,1,87,116,23,0,100, +- 12,0,131,1,0,130,1,0,116,20,0,124,8,0,100,13, +- 0,124,15,0,131,3,0,1,116,20,0,124,8,0,100,14, +- 0,124,14,0,131,3,0,1,116,20,0,124,8,0,100,15, +- 0,100,16,0,106,24,0,124,13,0,131,1,0,131,3,0, +- 1,121,16,0,116,19,0,100,17,0,131,1,0,125,16,0, +- 87,110,24,0,4,116,23,0,107,10,0,114,50,2,1,1, +- 1,100,18,0,125,16,0,89,110,1,0,88,116,20,0,124, +- 8,0,100,17,0,124,16,0,131,3,0,1,116,19,0,100, +- 19,0,131,1,0,125,17,0,116,20,0,124,8,0,100,19, +- 0,124,17,0,131,3,0,1,124,12,0,100,7,0,107,2, +- 0,114,138,2,116,19,0,100,20,0,131,1,0,125,18,0, +- 116,20,0,124,8,0,100,21,0,124,18,0,131,3,0,1, +- 110,0,0,116,20,0,124,8,0,100,22,0,116,25,0,131, +- 0,0,131,3,0,1,116,26,0,106,27,0,116,0,0,106, +- 28,0,131,0,0,131,1,0,1,124,12,0,100,7,0,107, +- 2,0,114,228,2,116,29,0,106,30,0,100,23,0,131,1, +- 0,1,100,24,0,116,26,0,107,6,0,114,228,2,100,25, +- 0,116,31,0,95,32,0,113,228,2,110,0,0,100,18,0, +- 83,41,27,122,250,83,101,116,117,112,32,105,109,112,111,114, +- 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, +- 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, +- 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, +- 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, +- 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, +- 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, +- 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, +- 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, +- 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, +- 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, +- 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, +- 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, +- 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, +- 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, +- 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114, +- 49,0,0,0,114,166,0,0,0,218,8,98,117,105,108,116, +- 105,110,115,114,191,0,0,0,90,5,112,111,115,105,120,250, +- 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, +- 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, +- 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, +- 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, +- 100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31, +- 0,0,0,41,2,114,22,0,0,0,114,130,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77, +- 0,0,0,105,9,0,0,115,2,0,0,0,6,0,122,25, +- 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, +- 60,103,101,110,101,120,112,114,62,114,84,0,0,0,122,30, +- 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, +- 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, +- 0,0,0,114,25,0,0,0,114,21,0,0,0,114,30,0, +- 0,0,114,85,0,0,0,78,114,111,0,0,0,90,6,119, +- 105,110,114,101,103,114,23,1,0,0,114,6,0,0,0,122, +- 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, +- 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, +- 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, +- 104,97,108,41,33,114,106,0,0,0,114,7,0,0,0,114, +- 117,0,0,0,114,118,0,0,0,114,120,0,0,0,114,232, +- 0,0,0,114,119,0,0,0,114,66,0,0,0,114,73,0, +- 0,0,218,5,105,116,101,109,115,114,192,0,0,0,114,157, +- 0,0,0,114,10,1,0,0,114,162,0,0,0,114,19,1, +- 0,0,114,247,0,0,0,114,174,0,0,0,114,254,0,0, +- 0,114,57,0,0,0,114,127,1,0,0,114,61,0,0,0, +- 218,3,97,108,108,114,100,0,0,0,114,153,0,0,0,114, +- 26,0,0,0,114,11,0,0,0,114,59,1,0,0,114,197, +- 0,0,0,114,124,1,0,0,114,134,0,0,0,114,223,0, +- 0,0,114,22,1,0,0,114,26,1,0,0,41,19,218,10, +- 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, +- 95,109,111,100,117,108,101,90,11,109,111,100,117,108,101,95, +- 116,121,112,101,114,67,0,0,0,114,179,0,0,0,114,169, +- 0,0,0,114,177,0,0,0,114,178,0,0,0,90,11,115, +- 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, +- 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, +- 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, +- 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, +- 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, +- 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, +- 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, +- 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, +- 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, +- 0,0,218,6,95,115,101,116,117,112,61,9,0,0,115,108, +- 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, +- 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, +- 1,12,1,20,3,13,1,13,1,15,1,15,2,13,1,20, +- 3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3, +- 1,12,1,5,1,13,1,12,2,12,1,16,1,16,1,25, +- 3,3,1,16,1,13,2,11,1,16,3,12,1,16,3,12, +- 1,12,1,19,3,19,1,19,1,12,1,13,1,12,1,114, +- 136,1,0,0,99,2,0,0,0,0,0,0,0,3,0,0, +- 0,3,0,0,0,67,0,0,0,115,136,0,0,0,116,0, +- 0,124,0,0,124,1,0,131,2,0,1,116,1,0,131,0, +- 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, +- 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, +- 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, +- 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, +- 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, +- 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, +- 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, +- 0,1,100,2,0,83,41,3,122,50,73,110,115,116,97,108, +- 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, +- 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, +- 110,32,111,102,32,105,109,112,111,114,116,46,114,130,1,0, +- 0,78,41,15,114,136,1,0,0,114,240,0,0,0,114,7, +- 0,0,0,114,78,1,0,0,114,197,0,0,0,114,86,1, +- 0,0,114,100,1,0,0,114,106,1,0,0,114,223,0,0, +- 0,114,10,1,0,0,114,19,1,0,0,114,3,0,0,0, +- 114,57,0,0,0,114,22,1,0,0,114,73,1,0,0,41, +- 3,114,134,1,0,0,114,135,1,0,0,90,17,115,117,112, +- 112,111,114,116,101,100,95,108,111,97,100,101,114,115,114,4, +- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95, +- 105,110,115,116,97,108,108,148,9,0,0,115,16,0,0,0, +- 0,2,13,1,9,1,28,1,16,1,16,1,15,1,19,1, +- 114,137,1,0,0,41,3,122,3,119,105,110,114,1,0,0, +- 0,114,2,0,0,0,41,92,114,59,0,0,0,114,10,0, +- 0,0,114,11,0,0,0,114,17,0,0,0,114,19,0,0, +- 0,114,28,0,0,0,114,38,0,0,0,114,39,0,0,0, +- 114,43,0,0,0,114,44,0,0,0,114,46,0,0,0,114, +- 55,0,0,0,114,65,0,0,0,114,68,0,0,0,114,66, +- 0,0,0,218,8,95,95,99,111,100,101,95,95,114,193,0, +- 0,0,114,69,0,0,0,114,109,0,0,0,114,92,0,0, +- 0,114,99,0,0,0,114,82,0,0,0,114,83,0,0,0, +- 114,102,0,0,0,114,103,0,0,0,114,105,0,0,0,114, +- 112,0,0,0,114,114,0,0,0,114,15,0,0,0,114,185, +- 0,0,0,114,14,0,0,0,114,18,0,0,0,90,17,95, +- 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, +- 114,125,0,0,0,114,134,0,0,0,114,119,0,0,0,114, +- 120,0,0,0,114,132,0,0,0,114,135,0,0,0,114,142, +- 0,0,0,114,144,0,0,0,114,152,0,0,0,114,156,0, +- 0,0,114,161,0,0,0,114,164,0,0,0,114,172,0,0, +- 0,114,180,0,0,0,114,190,0,0,0,114,195,0,0,0, +- 114,198,0,0,0,114,203,0,0,0,114,211,0,0,0,114, +- 212,0,0,0,114,216,0,0,0,114,173,0,0,0,218,6, +- 111,98,106,101,99,116,114,241,0,0,0,114,239,0,0,0, +- 114,247,0,0,0,114,174,0,0,0,114,9,1,0,0,114, +- 10,1,0,0,114,19,1,0,0,114,22,1,0,0,114,32, +- 1,0,0,114,33,1,0,0,114,48,1,0,0,114,8,1, +- 0,0,114,7,1,0,0,114,59,1,0,0,114,56,1,0, +- 0,114,60,1,0,0,114,251,0,0,0,114,73,1,0,0, +- 114,86,1,0,0,114,101,1,0,0,114,104,1,0,0,114, +- 105,1,0,0,114,107,1,0,0,114,110,1,0,0,114,119, +- 1,0,0,114,111,1,0,0,114,113,1,0,0,114,114,1, +- 0,0,114,115,1,0,0,114,121,1,0,0,114,123,1,0, +- 0,114,240,0,0,0,114,126,1,0,0,114,127,1,0,0, +- 114,136,1,0,0,114,137,1,0,0,114,4,0,0,0,114, +- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, +- 60,109,111,100,117,108,101,62,8,0,0,0,115,170,0,0, +- 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, +- 10,12,9,12,5,12,7,15,22,12,8,12,4,15,4,19, +- 20,6,2,6,3,22,4,19,68,19,21,19,19,12,19,12, +- 20,12,114,22,1,18,2,6,2,9,2,9,1,9,2,15, +- 27,12,23,12,19,12,12,18,8,12,18,12,11,12,11,12, +- 17,12,16,21,55,21,12,18,10,12,14,12,36,19,27,19, +- 106,24,22,9,3,12,1,15,63,18,45,19,230,15,25,19, +- 70,19,71,19,63,19,24,22,110,19,41,25,43,25,16,6, +- 3,19,57,19,57,19,38,19,129,19,146,19,13,12,9,12, +- 9,15,40,12,17,6,1,10,2,12,27,12,6,18,24,12, +- 32,12,15,12,11,24,35,12,8,12,87, ++ 83,41,2,122,24,65,99,113,117,105,114,101,32,116,104,101, ++ 32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,2, ++ 114,107,0,0,0,114,4,1,0,0,41,1,114,72,0,0, ++ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, ++ 114,76,0,0,0,72,8,0,0,115,2,0,0,0,0,2, ++ 122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,110, ++ 116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,4, ++ 0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,67, ++ 0,0,0,115,14,0,0,0,116,0,0,106,1,0,131,0, ++ 0,1,100,1,0,83,41,2,122,60,82,101,108,101,97,115, ++ 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, ++ 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, ++ 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, ++ 116,105,111,110,115,46,78,41,2,114,107,0,0,0,114,108, ++ 0,0,0,41,4,114,72,0,0,0,90,8,101,120,99,95, ++ 116,121,112,101,90,9,101,120,99,95,118,97,108,117,101,90, ++ 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,82,0, ++ 0,0,76,8,0,0,115,2,0,0,0,0,2,122,27,95, ++ 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, ++ 116,46,95,95,101,120,105,116,95,95,78,41,6,114,58,0, ++ 0,0,114,57,0,0,0,114,59,0,0,0,114,60,0,0, ++ 0,114,76,0,0,0,114,82,0,0,0,114,5,0,0,0, ++ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, ++ 102,1,0,0,68,8,0,0,115,6,0,0,0,12,2,6, ++ 2,12,4,114,102,1,0,0,99,3,0,0,0,0,0,0, ++ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,91,0, ++ 0,0,124,1,0,106,0,0,100,1,0,124,2,0,100,2, ++ 0,24,131,2,0,125,3,0,116,1,0,124,3,0,131,1, ++ 0,124,2,0,107,0,0,114,55,0,116,2,0,100,3,0, ++ 131,1,0,130,1,0,110,0,0,124,3,0,100,4,0,25, ++ 125,4,0,124,0,0,114,87,0,100,5,0,106,3,0,124, ++ 4,0,124,0,0,131,2,0,83,124,4,0,83,41,6,122, ++ 50,82,101,115,111,108,118,101,32,97,32,114,101,108,97,116, ++ 105,118,101,32,109,111,100,117,108,101,32,110,97,109,101,32, ++ 116,111,32,97,110,32,97,98,115,111,108,117,116,101,32,111, ++ 110,101,46,114,117,0,0,0,114,30,0,0,0,122,50,97, ++ 116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118, ++ 101,32,105,109,112,111,114,116,32,98,101,121,111,110,100,32, ++ 116,111,112,45,108,101,118,101,108,32,112,97,99,107,97,103, ++ 101,114,85,0,0,0,122,5,123,125,46,123,125,41,4,114, ++ 35,0,0,0,114,32,0,0,0,114,134,0,0,0,114,48, ++ 0,0,0,41,5,114,68,0,0,0,218,7,112,97,99,107, ++ 97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,115, ++ 90,4,98,97,115,101,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,13,95,114,101,115,111,108,118,101,95, ++ 110,97,109,101,81,8,0,0,115,10,0,0,0,0,2,22, ++ 1,18,1,15,1,10,1,114,105,1,0,0,99,3,0,0, ++ 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, ++ 0,115,47,0,0,0,124,0,0,106,0,0,124,1,0,124, ++ 2,0,131,2,0,125,3,0,124,3,0,100,0,0,107,8, ++ 0,114,34,0,100,0,0,83,116,1,0,124,1,0,124,3, ++ 0,131,2,0,83,41,1,78,41,2,114,15,1,0,0,114, ++ 174,0,0,0,41,4,114,78,1,0,0,114,68,0,0,0, ++ 114,36,0,0,0,114,170,0,0,0,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, ++ 95,115,112,101,99,95,108,101,103,97,99,121,90,8,0,0, ++ 115,8,0,0,0,0,3,18,1,12,1,4,1,114,106,1, ++ 0,0,99,3,0,0,0,0,0,0,0,9,0,0,0,26, ++ 0,0,0,67,0,0,0,115,34,1,0,0,116,0,0,106, ++ 1,0,115,28,0,116,2,0,106,3,0,100,1,0,116,4, ++ 0,131,2,0,1,110,0,0,124,0,0,116,0,0,106,5, ++ 0,107,6,0,125,3,0,120,240,0,116,0,0,106,1,0, ++ 68,93,225,0,125,4,0,116,6,0,131,0,0,143,93,0, ++ 1,121,13,0,124,4,0,106,7,0,125,5,0,87,110,54, ++ 0,4,116,8,0,107,10,0,114,138,0,1,1,1,116,9, ++ 0,124,4,0,124,0,0,124,1,0,131,3,0,125,6,0, ++ 124,6,0,100,2,0,107,8,0,114,134,0,119,53,0,110, ++ 0,0,89,110,19,0,88,124,5,0,124,0,0,124,1,0, ++ 124,2,0,131,3,0,125,6,0,87,100,2,0,81,88,124, ++ 6,0,100,2,0,107,9,0,114,53,0,124,3,0,12,114, ++ 15,1,124,0,0,116,0,0,106,5,0,107,6,0,114,15, ++ 1,116,0,0,106,5,0,124,0,0,25,125,7,0,121,13, ++ 0,124,7,0,106,10,0,125,8,0,87,110,22,0,4,116, ++ 8,0,107,10,0,114,247,0,1,1,1,124,6,0,83,89, ++ 113,19,1,88,124,8,0,100,2,0,107,8,0,114,8,1, ++ 124,6,0,83,124,8,0,83,113,22,1,124,6,0,83,113, ++ 53,0,113,53,0,87,100,2,0,83,100,2,0,83,41,3, ++ 122,23,70,105,110,100,32,97,32,109,111,100,117,108,101,39, ++ 115,32,108,111,97,100,101,114,46,122,22,115,121,115,46,109, ++ 101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116, ++ 121,78,41,11,114,8,0,0,0,218,9,109,101,116,97,95, ++ 112,97,116,104,114,167,0,0,0,114,168,0,0,0,114,169, ++ 0,0,0,114,74,0,0,0,114,102,1,0,0,114,14,1, ++ 0,0,114,210,0,0,0,114,106,1,0,0,114,209,0,0, ++ 0,41,9,114,68,0,0,0,114,36,0,0,0,114,13,1, ++ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,78,1, ++ 0,0,114,14,1,0,0,114,178,0,0,0,114,180,0,0, ++ 0,114,209,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,10,95,102,105,110,100,95,115,112,101, ++ 99,99,8,0,0,115,48,0,0,0,0,2,9,1,19,4, ++ 15,1,16,1,10,1,3,1,13,1,13,1,18,1,12,1, ++ 11,2,24,1,12,2,22,1,13,1,3,1,13,1,13,4, ++ 9,2,12,1,4,2,7,2,11,2,114,108,1,0,0,99, ++ 3,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, ++ 67,0,0,0,115,194,0,0,0,116,0,0,124,0,0,116, ++ 1,0,131,2,0,115,45,0,116,2,0,100,1,0,106,3, ++ 0,116,4,0,124,0,0,131,1,0,131,1,0,131,1,0, ++ 130,1,0,110,0,0,124,2,0,100,2,0,107,0,0,114, ++ 72,0,116,5,0,100,3,0,131,1,0,130,1,0,110,0, ++ 0,124,1,0,114,156,0,116,0,0,124,1,0,116,1,0, ++ 131,2,0,115,108,0,116,2,0,100,4,0,131,1,0,130, ++ 1,0,113,156,0,124,1,0,116,6,0,106,7,0,107,7, ++ 0,114,156,0,100,5,0,125,3,0,116,8,0,124,3,0, ++ 106,3,0,124,1,0,131,1,0,131,1,0,130,1,0,113, ++ 156,0,110,0,0,124,0,0,12,114,190,0,124,2,0,100, ++ 2,0,107,2,0,114,190,0,116,5,0,100,6,0,131,1, ++ 0,130,1,0,110,0,0,100,7,0,83,41,8,122,28,86, ++ 101,114,105,102,121,32,97,114,103,117,109,101,110,116,115,32, ++ 97,114,101,32,34,115,97,110,101,34,46,122,31,109,111,100, ++ 117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101, ++ 32,115,116,114,44,32,110,111,116,32,123,125,114,85,0,0, ++ 0,122,18,108,101,118,101,108,32,109,117,115,116,32,98,101, ++ 32,62,61,32,48,122,31,95,95,112,97,99,107,97,103,101, ++ 95,95,32,110,111,116,32,115,101,116,32,116,111,32,97,32, ++ 115,116,114,105,110,103,122,61,80,97,114,101,110,116,32,109, ++ 111,100,117,108,101,32,123,33,114,125,32,110,111,116,32,108, ++ 111,97,100,101,100,44,32,99,97,110,110,111,116,32,112,101, ++ 114,102,111,114,109,32,114,101,108,97,116,105,118,101,32,105, ++ 109,112,111,114,116,122,17,69,109,112,116,121,32,109,111,100, ++ 117,108,101,32,110,97,109,101,78,41,9,114,193,0,0,0, ++ 114,83,1,0,0,218,9,84,121,112,101,69,114,114,111,114, ++ 114,48,0,0,0,114,67,0,0,0,114,134,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,218,11,83,121,115,116,101, ++ 109,69,114,114,111,114,41,4,114,68,0,0,0,114,103,1, ++ 0,0,114,104,1,0,0,114,172,0,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,13,95,115,97, ++ 110,105,116,121,95,99,104,101,99,107,139,8,0,0,115,24, ++ 0,0,0,0,2,15,1,30,1,12,1,15,1,6,1,15, ++ 1,15,1,15,1,6,2,27,1,19,1,114,111,1,0,0, ++ 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, ++ 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, ++ 0,8,0,0,0,12,0,0,0,67,0,0,0,115,52,1, ++ 0,0,100,0,0,125,2,0,124,0,0,106,0,0,100,1, ++ 0,131,1,0,100,2,0,25,125,3,0,124,3,0,114,178, ++ 0,124,3,0,116,1,0,106,2,0,107,7,0,114,62,0, ++ 116,3,0,124,1,0,124,3,0,131,2,0,1,110,0,0, ++ 124,0,0,116,1,0,106,2,0,107,6,0,114,88,0,116, ++ 1,0,106,2,0,124,0,0,25,83,116,1,0,106,2,0, ++ 124,3,0,25,125,4,0,121,13,0,124,4,0,106,4,0, ++ 125,2,0,87,113,178,0,4,116,5,0,107,10,0,114,174, ++ 0,1,1,1,116,6,0,100,3,0,23,106,7,0,124,0, ++ 0,124,3,0,131,2,0,125,5,0,116,8,0,124,5,0, ++ 100,4,0,124,0,0,131,1,1,130,1,0,89,113,178,0, ++ 88,110,0,0,116,9,0,124,0,0,124,2,0,131,2,0, ++ 125,6,0,124,6,0,100,0,0,107,8,0,114,235,0,116, ++ 8,0,116,6,0,106,7,0,124,0,0,131,1,0,100,4, ++ 0,124,0,0,131,1,1,130,1,0,110,18,0,116,10,0, ++ 124,6,0,131,1,0,106,11,0,131,0,0,125,7,0,124, ++ 3,0,114,48,1,116,1,0,106,2,0,124,3,0,25,125, ++ 4,0,116,12,0,124,4,0,124,0,0,106,0,0,100,1, ++ 0,131,1,0,100,5,0,25,124,7,0,131,3,0,1,110, ++ 0,0,124,7,0,83,41,6,78,114,117,0,0,0,114,85, ++ 0,0,0,122,23,59,32,123,33,114,125,32,105,115,32,110, ++ 111,116,32,97,32,112,97,99,107,97,103,101,114,68,0,0, ++ 0,114,116,0,0,0,41,13,114,33,0,0,0,114,8,0, ++ 0,0,114,74,0,0,0,114,115,0,0,0,114,247,0,0, ++ 0,114,210,0,0,0,218,8,95,69,82,82,95,77,83,71, ++ 114,48,0,0,0,114,154,0,0,0,114,108,1,0,0,114, ++ 175,0,0,0,114,7,1,0,0,114,62,0,0,0,41,8, ++ 114,68,0,0,0,218,7,105,109,112,111,114,116,95,114,36, ++ 0,0,0,114,234,0,0,0,90,13,112,97,114,101,110,116, ++ 95,109,111,100,117,108,101,114,172,0,0,0,114,178,0,0, ++ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,23,95,102,105,110,100,95,97,110,100, ++ 95,108,111,97,100,95,117,110,108,111,99,107,101,100,159,8, ++ 0,0,115,42,0,0,0,0,1,6,1,19,1,6,1,15, ++ 1,16,2,15,1,11,1,13,1,3,1,13,1,13,1,22, ++ 1,26,1,15,1,12,1,30,2,18,1,6,2,13,1,32, ++ 1,114,114,1,0,0,99,2,0,0,0,0,0,0,0,2, ++ 0,0,0,10,0,0,0,67,0,0,0,115,36,0,0,0, ++ 116,0,0,124,0,0,131,1,0,143,18,0,1,116,1,0, ++ 124,0,0,124,1,0,131,2,0,83,87,100,1,0,81,88, ++ 100,1,0,83,41,2,122,54,70,105,110,100,32,97,110,100, ++ 32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101, ++ 44,32,97,110,100,32,114,101,108,101,97,115,101,32,116,104, ++ 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, ++ 2,114,104,0,0,0,114,114,1,0,0,41,2,114,68,0, ++ 0,0,114,113,1,0,0,114,5,0,0,0,114,5,0,0, ++ 0,114,6,0,0,0,218,14,95,102,105,110,100,95,97,110, ++ 100,95,108,111,97,100,186,8,0,0,115,4,0,0,0,0, ++ 2,13,1,114,115,1,0,0,99,3,0,0,0,0,0,0, ++ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,172,0, ++ 0,0,116,0,0,124,0,0,124,1,0,124,2,0,131,3, ++ 0,1,124,2,0,100,1,0,107,4,0,114,49,0,116,1, ++ 0,124,0,0,124,1,0,124,2,0,131,3,0,125,0,0, ++ 110,0,0,116,2,0,106,3,0,131,0,0,1,124,0,0, ++ 116,4,0,106,5,0,107,7,0,114,87,0,116,6,0,124, ++ 0,0,116,7,0,131,2,0,83,116,4,0,106,5,0,124, ++ 0,0,25,125,3,0,124,3,0,100,2,0,107,8,0,114, ++ 158,0,116,2,0,106,8,0,131,0,0,1,100,3,0,106, ++ 9,0,124,0,0,131,1,0,125,4,0,116,10,0,124,4, ++ 0,100,4,0,124,0,0,131,1,1,130,1,0,110,0,0, ++ 116,11,0,124,0,0,131,1,0,1,124,3,0,83,41,5, ++ 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, ++ 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, ++ 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, ++ 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, ++ 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, ++ 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, ++ 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, ++ 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, ++ 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, ++ 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, ++ 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, ++ 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, ++ 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, ++ 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, ++ 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, ++ 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, ++ 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, ++ 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, ++ 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, ++ 46,10,10,32,32,32,32,114,85,0,0,0,78,122,40,105, ++ 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, ++ 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, ++ 109,111,100,117,108,101,115,114,68,0,0,0,41,12,114,111, ++ 1,0,0,114,105,1,0,0,114,107,0,0,0,114,4,1, ++ 0,0,114,8,0,0,0,114,74,0,0,0,114,115,1,0, ++ 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,108, ++ 0,0,0,114,48,0,0,0,114,154,0,0,0,114,113,0, ++ 0,0,41,5,114,68,0,0,0,114,103,1,0,0,114,104, ++ 1,0,0,114,180,0,0,0,114,152,0,0,0,114,5,0, ++ 0,0,114,5,0,0,0,114,6,0,0,0,114,116,1,0, ++ 0,192,8,0,0,115,26,0,0,0,0,9,16,1,12,1, ++ 21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, ++ 21,1,10,1,114,116,1,0,0,99,3,0,0,0,0,0, ++ 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,1, ++ 1,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, ++ 253,0,100,2,0,124,1,0,107,6,0,114,89,0,116,1, ++ 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, ++ 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, ++ 131,2,0,114,89,0,124,1,0,106,3,0,124,0,0,106, ++ 4,0,131,1,0,1,113,89,0,110,0,0,120,161,0,124, ++ 1,0,68,93,150,0,125,3,0,116,0,0,124,0,0,124, ++ 3,0,131,2,0,115,96,0,100,4,0,106,5,0,124,0, ++ 0,106,6,0,124,3,0,131,2,0,125,4,0,121,17,0, ++ 116,7,0,124,2,0,124,4,0,131,2,0,1,87,113,246, ++ 0,4,116,8,0,107,10,0,114,242,0,1,125,5,0,1, ++ 122,53,0,116,9,0,124,5,0,131,1,0,106,10,0,116, ++ 11,0,131,1,0,114,221,0,124,5,0,106,12,0,124,4, ++ 0,107,2,0,114,221,0,119,96,0,113,221,0,110,0,0, ++ 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, ++ 0,88,113,246,0,88,113,96,0,113,96,0,87,110,0,0, ++ 124,0,0,83,41,6,122,238,70,105,103,117,114,101,32,111, ++ 117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116, ++ 95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110, ++ 46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114, ++ 116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32, ++ 97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104, ++ 32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32, ++ 111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32, ++ 32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114, ++ 101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117, ++ 112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110, ++ 32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105, ++ 109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105, ++ 109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97, ++ 116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46, ++ 10,10,32,32,32,32,114,247,0,0,0,250,1,42,218,7, ++ 95,95,97,108,108,95,95,122,5,123,125,46,123,125,78,41, ++ 13,114,61,0,0,0,114,246,0,0,0,218,6,114,101,109, ++ 111,118,101,114,198,0,0,0,114,118,1,0,0,114,48,0, ++ 0,0,114,58,0,0,0,114,115,0,0,0,114,154,0,0, ++ 0,114,83,1,0,0,114,10,0,0,0,218,15,95,69,82, ++ 82,95,77,83,71,95,80,82,69,70,73,88,114,68,0,0, ++ 0,41,6,114,180,0,0,0,218,8,102,114,111,109,108,105, ++ 115,116,114,113,1,0,0,114,17,0,0,0,90,9,102,114, ++ 111,109,95,110,97,109,101,114,41,1,0,0,114,5,0,0, ++ 0,114,5,0,0,0,114,6,0,0,0,218,16,95,104,97, ++ 110,100,108,101,95,102,114,111,109,108,105,115,116,216,8,0, ++ 0,115,34,0,0,0,0,10,15,1,12,1,12,1,13,1, ++ 15,1,22,1,13,1,15,1,21,1,3,1,17,1,18,4, ++ 21,1,15,1,9,1,32,1,114,122,1,0,0,99,1,0, ++ 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, ++ 0,0,115,78,0,0,0,124,0,0,106,0,0,100,1,0, ++ 131,1,0,125,1,0,124,1,0,100,2,0,107,8,0,114, ++ 74,0,124,0,0,100,3,0,25,125,1,0,100,4,0,124, ++ 0,0,107,7,0,114,74,0,124,1,0,106,1,0,100,5, ++ 0,131,1,0,100,6,0,25,125,1,0,113,74,0,110,0, ++ 0,124,1,0,83,41,7,122,167,67,97,108,99,117,108,97, ++ 116,101,32,119,104,97,116,32,95,95,112,97,99,107,97,103, ++ 101,95,95,32,115,104,111,117,108,100,32,98,101,46,10,10, ++ 32,32,32,32,95,95,112,97,99,107,97,103,101,95,95,32, ++ 105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101, ++ 100,32,116,111,32,98,101,32,100,101,102,105,110,101,100,32, ++ 111,114,32,99,111,117,108,100,32,98,101,32,115,101,116,32, ++ 116,111,32,78,111,110,101,10,32,32,32,32,116,111,32,114, ++ 101,112,114,101,115,101,110,116,32,116,104,97,116,32,105,116, ++ 115,32,112,114,111,112,101,114,32,118,97,108,117,101,32,105, ++ 115,32,117,110,107,110,111,119,110,46,10,10,32,32,32,32, ++ 114,251,0,0,0,78,114,58,0,0,0,114,247,0,0,0, ++ 114,117,0,0,0,114,85,0,0,0,41,2,114,94,0,0, ++ 0,114,33,0,0,0,41,2,218,7,103,108,111,98,97,108, ++ 115,114,103,1,0,0,114,5,0,0,0,114,5,0,0,0, ++ 114,6,0,0,0,218,17,95,99,97,108,99,95,95,95,112, ++ 97,99,107,97,103,101,95,95,248,8,0,0,115,12,0,0, ++ 0,0,7,15,1,12,1,10,1,12,1,25,1,114,124,1, ++ 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, ++ 0,0,0,67,0,0,0,115,55,0,0,0,116,0,0,116, ++ 1,0,106,2,0,131,0,0,102,2,0,125,0,0,116,3, ++ 0,116,4,0,102,2,0,125,1,0,116,5,0,116,6,0, ++ 102,2,0,125,2,0,124,0,0,124,1,0,124,2,0,103, ++ 3,0,83,41,1,122,95,82,101,116,117,114,110,115,32,97, ++ 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, ++ 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, ++ 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, ++ 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, ++ 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, ++ 46,10,32,32,32,32,41,7,114,57,1,0,0,114,107,0, ++ 0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,117, ++ 102,102,105,120,101,115,114,9,1,0,0,114,135,0,0,0, ++ 114,8,1,0,0,114,233,0,0,0,41,3,90,10,101,120, ++ 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, ++ 90,8,98,121,116,101,99,111,100,101,114,5,0,0,0,114, ++ 5,0,0,0,114,6,0,0,0,114,241,0,0,0,7,9, ++ 0,0,115,8,0,0,0,0,5,18,1,12,1,12,1,114, ++ 241,0,0,0,99,5,0,0,0,0,0,0,0,9,0,0, ++ 0,5,0,0,0,67,0,0,0,115,227,0,0,0,124,4, ++ 0,100,1,0,107,2,0,114,27,0,116,0,0,124,0,0, ++ 131,1,0,125,5,0,110,54,0,124,1,0,100,2,0,107, ++ 9,0,114,45,0,124,1,0,110,3,0,105,0,0,125,6, ++ 0,116,1,0,124,6,0,131,1,0,125,7,0,116,0,0, ++ 124,0,0,124,7,0,124,4,0,131,3,0,125,5,0,124, ++ 3,0,115,207,0,124,4,0,100,1,0,107,2,0,114,122, ++ 0,116,0,0,124,0,0,106,2,0,100,3,0,131,1,0, ++ 100,1,0,25,131,1,0,83,124,0,0,115,132,0,124,5, ++ 0,83,116,3,0,124,0,0,131,1,0,116,3,0,124,0, ++ 0,106,2,0,100,3,0,131,1,0,100,1,0,25,131,1, ++ 0,24,125,8,0,116,4,0,106,5,0,124,5,0,106,6, ++ 0,100,2,0,116,3,0,124,5,0,106,6,0,131,1,0, ++ 124,8,0,24,133,2,0,25,25,83,110,16,0,116,7,0, ++ 124,5,0,124,3,0,116,0,0,131,3,0,83,100,2,0, ++ 83,41,4,97,214,1,0,0,73,109,112,111,114,116,32,97, ++ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, ++ 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, ++ 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, ++ 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, ++ 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, ++ 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, ++ 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, ++ 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, ++ 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, ++ 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, ++ 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, ++ 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, ++ 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, ++ 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, ++ 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, ++ 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, ++ 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, ++ 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, ++ 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, ++ 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, ++ 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, ++ 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, ++ 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, ++ 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, ++ 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, ++ 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, ++ 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, ++ 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, ++ 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,85, ++ 0,0,0,78,114,117,0,0,0,41,8,114,116,1,0,0, ++ 114,124,1,0,0,114,122,0,0,0,114,32,0,0,0,114, ++ 8,0,0,0,114,74,0,0,0,114,58,0,0,0,114,122, ++ 1,0,0,41,9,114,68,0,0,0,114,123,1,0,0,218, ++ 6,108,111,99,97,108,115,114,121,1,0,0,114,104,1,0, ++ 0,114,180,0,0,0,90,8,103,108,111,98,97,108,115,95, ++ 114,103,1,0,0,90,7,99,117,116,95,111,102,102,114,5, ++ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, ++ 95,105,109,112,111,114,116,95,95,18,9,0,0,115,26,0, ++ 0,0,0,11,12,1,15,2,24,1,12,1,18,1,6,3, ++ 12,1,23,1,6,1,4,4,35,3,40,2,114,127,1,0, ++ 0,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, ++ 0,0,67,0,0,0,115,68,0,0,0,116,0,0,106,1, ++ 0,124,0,0,131,1,0,125,1,0,124,1,0,100,0,0, ++ 107,8,0,114,46,0,116,2,0,100,1,0,124,0,0,23, ++ 131,1,0,130,1,0,110,0,0,116,3,0,124,1,0,131, ++ 1,0,125,2,0,124,2,0,106,4,0,131,0,0,83,41, ++ 2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32, ++ 109,111,100,117,108,101,32,110,97,109,101,100,32,41,5,114, ++ 11,1,0,0,114,14,1,0,0,114,154,0,0,0,114,175, ++ 0,0,0,114,7,1,0,0,41,3,114,68,0,0,0,114, ++ 178,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, ++ 105,110,95,102,114,111,109,95,110,97,109,101,53,9,0,0, ++ 115,10,0,0,0,0,1,15,1,12,1,19,1,12,1,114, ++ 128,1,0,0,99,2,0,0,0,0,0,0,0,19,0,0, ++ 0,12,0,0,0,67,0,0,0,115,232,2,0,0,124,1, ++ 0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0, ++ 106,3,0,114,33,0,116,4,0,97,5,0,110,6,0,116, ++ 6,0,97,5,0,116,7,0,116,1,0,131,1,0,125,2, ++ 0,120,138,0,116,1,0,106,8,0,106,9,0,131,0,0, ++ 68,93,121,0,92,2,0,125,3,0,125,4,0,116,10,0, ++ 124,4,0,124,2,0,131,2,0,114,67,0,124,3,0,116, ++ 1,0,106,11,0,107,6,0,114,118,0,116,12,0,125,5, ++ 0,110,27,0,116,0,0,106,13,0,124,3,0,131,1,0, ++ 114,67,0,116,14,0,125,5,0,110,3,0,113,67,0,116, ++ 15,0,124,4,0,124,5,0,131,2,0,125,6,0,116,16, ++ 0,124,6,0,131,1,0,125,7,0,124,7,0,106,17,0, ++ 124,4,0,131,1,0,1,113,67,0,113,67,0,87,116,1, ++ 0,106,8,0,116,18,0,25,125,8,0,120,73,0,100,26, ++ 0,68,93,65,0,125,9,0,124,9,0,116,1,0,106,8, ++ 0,107,7,0,114,248,0,116,19,0,124,9,0,131,1,0, ++ 125,10,0,110,13,0,116,1,0,106,8,0,124,9,0,25, ++ 125,10,0,116,20,0,124,8,0,124,9,0,124,10,0,131, ++ 3,0,1,113,212,0,87,100,5,0,100,6,0,103,1,0, ++ 102,2,0,100,7,0,100,8,0,100,6,0,103,2,0,102, ++ 2,0,102,2,0,125,11,0,120,146,0,124,11,0,68,93, ++ 126,0,92,2,0,125,12,0,125,13,0,116,21,0,100,9, ++ 0,100,10,0,132,0,0,124,13,0,68,131,1,0,131,1, ++ 0,115,108,1,116,22,0,130,1,0,124,13,0,100,11,0, ++ 25,125,14,0,124,12,0,116,1,0,106,8,0,107,6,0, ++ 114,150,1,116,1,0,106,8,0,124,12,0,25,125,15,0, ++ 80,113,65,1,121,17,0,116,19,0,124,12,0,131,1,0, ++ 125,15,0,80,87,113,65,1,4,116,23,0,107,10,0,114, ++ 190,1,1,1,1,119,65,1,89,113,65,1,88,113,65,1, ++ 87,116,23,0,100,12,0,131,1,0,130,1,0,116,20,0, ++ 124,8,0,100,13,0,124,15,0,131,3,0,1,116,20,0, ++ 124,8,0,100,14,0,124,14,0,131,3,0,1,116,20,0, ++ 124,8,0,100,15,0,100,16,0,106,24,0,124,13,0,131, ++ 1,0,131,3,0,1,121,16,0,116,19,0,100,17,0,131, ++ 1,0,125,16,0,87,110,24,0,4,116,23,0,107,10,0, ++ 114,50,2,1,1,1,100,18,0,125,16,0,89,110,1,0, ++ 88,116,20,0,124,8,0,100,17,0,124,16,0,131,3,0, ++ 1,116,19,0,100,19,0,131,1,0,125,17,0,116,20,0, ++ 124,8,0,100,19,0,124,17,0,131,3,0,1,124,12,0, ++ 100,7,0,107,2,0,114,138,2,116,19,0,100,20,0,131, ++ 1,0,125,18,0,116,20,0,124,8,0,100,21,0,124,18, ++ 0,131,3,0,1,110,0,0,116,20,0,124,8,0,100,22, ++ 0,116,25,0,131,0,0,131,3,0,1,116,26,0,106,27, ++ 0,116,0,0,106,28,0,131,0,0,131,1,0,1,124,12, ++ 0,100,7,0,107,2,0,114,228,2,116,29,0,106,30,0, ++ 100,23,0,131,1,0,1,100,24,0,116,26,0,107,6,0, ++ 114,228,2,100,25,0,116,31,0,95,32,0,113,228,2,110, ++ 0,0,100,18,0,83,41,27,122,250,83,101,116,117,112,32, ++ 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, ++ 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, ++ 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, ++ 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, ++ 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, ++ 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, ++ 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, ++ 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, ++ 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, ++ 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, ++ 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, ++ 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, ++ 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, ++ 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, ++ 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, ++ 32,32,32,32,114,50,0,0,0,114,167,0,0,0,218,8, ++ 98,117,105,108,116,105,110,115,114,192,0,0,0,90,5,112, ++ 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, ++ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, ++ 0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1, ++ 0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0, ++ 86,1,113,3,0,100,1,0,83,41,2,114,30,0,0,0, ++ 78,41,1,114,32,0,0,0,41,2,114,23,0,0,0,114, ++ 131,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, ++ 0,0,0,114,78,0,0,0,105,9,0,0,115,2,0,0, ++ 0,6,0,122,25,95,115,101,116,117,112,46,60,108,111,99, ++ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,85, ++ 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, ++ 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, ++ 32,110,116,114,4,0,0,0,114,26,0,0,0,114,22,0, ++ 0,0,114,31,0,0,0,114,86,0,0,0,78,114,112,0, ++ 0,0,90,6,119,105,110,114,101,103,114,24,1,0,0,114, ++ 7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,112, ++ 121,100,84,41,4,122,3,95,105,111,122,9,95,119,97,114, ++ 110,105,110,103,115,122,8,98,117,105,108,116,105,110,115,122, ++ 7,109,97,114,115,104,97,108,41,33,114,107,0,0,0,114, ++ 8,0,0,0,114,118,0,0,0,114,119,0,0,0,114,121, ++ 0,0,0,114,233,0,0,0,114,120,0,0,0,114,67,0, ++ 0,0,114,74,0,0,0,218,5,105,116,101,109,115,114,193, ++ 0,0,0,114,158,0,0,0,114,11,1,0,0,114,163,0, ++ 0,0,114,20,1,0,0,114,248,0,0,0,114,175,0,0, ++ 0,114,255,0,0,0,114,58,0,0,0,114,128,1,0,0, ++ 114,62,0,0,0,218,3,97,108,108,114,101,0,0,0,114, ++ 154,0,0,0,114,27,0,0,0,114,12,0,0,0,114,60, ++ 1,0,0,114,198,0,0,0,114,125,1,0,0,114,135,0, ++ 0,0,114,224,0,0,0,114,23,1,0,0,114,27,1,0, ++ 0,41,19,218,10,115,121,115,95,109,111,100,117,108,101,218, ++ 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, ++ 100,117,108,101,95,116,121,112,101,114,68,0,0,0,114,180, ++ 0,0,0,114,170,0,0,0,114,178,0,0,0,114,179,0, ++ 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90, ++ 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98, ++ 117,105,108,116,105,110,95,109,111,100,117,108,101,90,10,111, ++ 115,95,100,101,116,97,105,108,115,90,10,98,117,105,108,116, ++ 105,110,95,111,115,114,22,0,0,0,114,26,0,0,0,90, ++ 9,111,115,95,109,111,100,117,108,101,90,13,116,104,114,101, ++ 97,100,95,109,111,100,117,108,101,90,14,119,101,97,107,114, ++ 101,102,95,109,111,100,117,108,101,90,13,119,105,110,114,101, ++ 103,95,109,111,100,117,108,101,114,5,0,0,0,114,5,0, ++ 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,61, ++ 9,0,0,115,108,0,0,0,0,9,6,1,6,2,12,1, ++ 9,2,6,3,12,1,28,1,15,1,15,1,9,1,15,1, ++ 9,2,3,1,15,1,12,1,20,3,13,1,13,1,15,1, ++ 15,2,13,1,20,3,33,1,19,2,31,1,10,1,15,1, ++ 13,1,4,2,3,1,12,1,5,1,13,1,12,2,12,1, ++ 16,1,16,1,25,3,3,1,16,1,13,2,11,1,16,3, ++ 12,1,16,3,12,1,12,1,19,3,19,1,19,1,12,1, ++ 13,1,12,1,114,137,1,0,0,99,2,0,0,0,0,0, ++ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,136, ++ 0,0,0,116,0,0,124,0,0,124,1,0,131,2,0,1, ++ 116,1,0,131,0,0,125,2,0,116,2,0,106,3,0,106, ++ 4,0,116,5,0,106,6,0,124,2,0,140,0,0,103,1, ++ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,9, ++ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,10, ++ 0,131,1,0,1,116,11,0,106,12,0,100,1,0,107,2, ++ 0,114,116,0,116,2,0,106,7,0,106,8,0,116,13,0, ++ 131,1,0,1,110,0,0,116,2,0,106,7,0,106,8,0, ++ 116,14,0,131,1,0,1,100,2,0,83,41,3,122,50,73, ++ 110,115,116,97,108,108,32,105,109,112,111,114,116,108,105,98, ++ 32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110, ++ 116,97,116,105,111,110,32,111,102,32,105,109,112,111,114,116, ++ 46,114,131,1,0,0,78,41,15,114,137,1,0,0,114,241, ++ 0,0,0,114,8,0,0,0,114,79,1,0,0,114,198,0, ++ 0,0,114,87,1,0,0,114,101,1,0,0,114,107,1,0, ++ 0,114,224,0,0,0,114,11,1,0,0,114,20,1,0,0, ++ 114,4,0,0,0,114,58,0,0,0,114,23,1,0,0,114, ++ 74,1,0,0,41,3,114,135,1,0,0,114,136,1,0,0, ++ 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, ++ 101,114,115,114,5,0,0,0,114,5,0,0,0,114,6,0, ++ 0,0,218,8,95,105,110,115,116,97,108,108,148,9,0,0, ++ 115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16, ++ 1,15,1,19,1,114,138,1,0,0,41,4,122,3,119,105, ++ 110,114,1,0,0,0,114,2,0,0,0,114,3,0,0,0, ++ 41,92,114,60,0,0,0,114,11,0,0,0,114,12,0,0, ++ 0,114,18,0,0,0,114,20,0,0,0,114,29,0,0,0, ++ 114,39,0,0,0,114,40,0,0,0,114,44,0,0,0,114, ++ 45,0,0,0,114,47,0,0,0,114,56,0,0,0,114,66, ++ 0,0,0,114,69,0,0,0,114,67,0,0,0,218,8,95, ++ 95,99,111,100,101,95,95,114,194,0,0,0,114,70,0,0, ++ 0,114,110,0,0,0,114,93,0,0,0,114,100,0,0,0, ++ 114,83,0,0,0,114,84,0,0,0,114,103,0,0,0,114, ++ 104,0,0,0,114,106,0,0,0,114,113,0,0,0,114,115, ++ 0,0,0,114,16,0,0,0,114,186,0,0,0,114,15,0, ++ 0,0,114,19,0,0,0,90,17,95,82,65,87,95,77,65, ++ 71,73,67,95,78,85,77,66,69,82,114,126,0,0,0,114, ++ 135,0,0,0,114,120,0,0,0,114,121,0,0,0,114,133, ++ 0,0,0,114,136,0,0,0,114,143,0,0,0,114,145,0, ++ 0,0,114,153,0,0,0,114,157,0,0,0,114,162,0,0, ++ 0,114,165,0,0,0,114,173,0,0,0,114,181,0,0,0, ++ 114,191,0,0,0,114,196,0,0,0,114,199,0,0,0,114, ++ 204,0,0,0,114,212,0,0,0,114,213,0,0,0,114,217, ++ 0,0,0,114,174,0,0,0,218,6,111,98,106,101,99,116, ++ 114,242,0,0,0,114,240,0,0,0,114,248,0,0,0,114, ++ 175,0,0,0,114,10,1,0,0,114,11,1,0,0,114,20, ++ 1,0,0,114,23,1,0,0,114,33,1,0,0,114,34,1, ++ 0,0,114,49,1,0,0,114,9,1,0,0,114,8,1,0, ++ 0,114,60,1,0,0,114,57,1,0,0,114,61,1,0,0, ++ 114,252,0,0,0,114,74,1,0,0,114,87,1,0,0,114, ++ 102,1,0,0,114,105,1,0,0,114,106,1,0,0,114,108, ++ 1,0,0,114,111,1,0,0,114,120,1,0,0,114,112,1, ++ 0,0,114,114,1,0,0,114,115,1,0,0,114,116,1,0, ++ 0,114,122,1,0,0,114,124,1,0,0,114,241,0,0,0, ++ 114,127,1,0,0,114,128,1,0,0,114,137,1,0,0,114, ++ 138,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, ++ 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, ++ 101,62,8,0,0,0,115,170,0,0,0,6,17,6,3,12, ++ 12,12,5,12,5,12,6,12,12,12,10,12,9,12,5,12, ++ 7,15,22,12,8,12,4,15,4,19,20,6,2,6,3,22, ++ 4,19,68,19,21,19,19,12,19,12,20,12,114,22,1,18, ++ 2,6,2,9,2,9,1,9,2,15,27,12,23,12,19,12, ++ 12,18,8,12,18,12,11,12,11,12,17,12,16,21,55,21, ++ 12,18,10,12,14,12,36,19,27,19,106,24,22,9,3,12, ++ 1,15,63,18,45,19,230,15,25,19,70,19,71,19,63,19, ++ 24,22,110,19,41,25,43,25,16,6,3,19,57,19,57,19, ++ 38,19,129,19,146,19,13,12,9,12,9,15,40,12,17,6, ++ 1,10,2,12,27,12,6,18,24,12,32,12,15,12,11,24, ++ 35,12,8,12,87, }; diff -Nru orig/Python/marshal.c modified/Python/marshal.c ---- orig/Python/marshal.c 2015-12-07 09:39:11.000000000 +0800 -+++ modified/Python/marshal.c 2016-02-15 20:17:07.000000000 +0800 -@@ -14,15 +14,23 @@ +--- orig/Python/marshal.c 2015-02-03 19:49:05.000000000 +0800 ++++ modified/Python/marshal.c 2015-05-04 12:43:06.000000000 +0800 +@@ -13,17 +13,26 @@ + #include "code.h" #include "marshal.h" - #include "../Modules/hashtable.h" +#ifdef __APPLE__ +# include "TargetConditionals.h" +#endif /* __APPLE__ */ + + #define ABS(x) ((x) < 0 ? -(x) : (x)) + /* High water mark to determine when the marshalled object is dangerously deep * and risks coring the interpreter. When the object stack gets this deep, * raise an exception instead of continuing. * On Windows debug builds, reduce this value. ++ * iOS also requires a reduced value. */ #if defined(MS_WINDOWS) && defined(_DEBUG) --#define MAX_MARSHAL_STACK_DEPTH 1000 -+# define MAX_MARSHAL_STACK_DEPTH 1000 +-#define MAX_MARSHAL_STACK_DEPTH 1500 ++# define MAX_MARSHAL_STACK_DEPTH 1500 #else -#define MAX_MARSHAL_STACK_DEPTH 2000 +# if TARGET_OS_IPHONE +# define MAX_MARSHAL_STACK_DEPTH 1500 +# else +# define MAX_MARSHAL_STACK_DEPTH 2000 -+# endif ++# endif /* TARGET_OS_IPHONE */ #endif #define TYPE_NULL '0' Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/iOS-test/main.py --- orig/Tools/iOS-test/app/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app/iOS-test/main.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-17 13:49:19.000000000 +0800 @@ -0,0 +1,12 @@ +from datetime import datetime +import platform @@ -34365,13 +39902,13 @@ diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/i + diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_packages/README --- orig/Tools/iOS-test/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app_packages/README 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/app_packages/README 2015-04-26 21:28:31.000000000 +0800 @@ -0,0 +1 @@ +This directory exists so that 3rd party packages can be installed here. \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json --- orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-07-04 17:34:59.000000000 +0800 @@ -0,0 +1,58 @@ +{ + "images" : [ @@ -34434,7 +39971,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Conten \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json --- orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-04-26 21:28:31.000000000 +0800 @@ -0,0 +1,51 @@ +{ + "images" : [ @@ -34490,12 +40027,12 @@ diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/C \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings --- orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2015-04-26 21:28:31.000000000 +0800 @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist --- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-12-20 19:26:56.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -34544,7 +40081,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-te + diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch --- orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2015-04-26 21:28:31.000000000 +0800 @@ -0,0 +1,16 @@ +// +// Prefix header @@ -34565,8 +40102,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-te \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m --- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2016-02-17 11:57:08.000000000 +0800 -@@ -0,0 +1,149 @@ ++++ modified/Tools/iOS-test/iOS-test/main.m 2015-12-21 09:53:22.000000000 +0800 +@@ -0,0 +1,145 @@ +// +// main.m +// A main module for starting Python projects under iOS. @@ -34596,7 +40133,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + + python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; + NSLog(@"PythonHome is: %@", python_home); -+ wpython_home = Py_DecodeLocale([python_home UTF8String], NULL); ++ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); + Py_SetPythonHome(wpython_home); + + // iOS provides a specific directory for temp files. @@ -34629,18 +40166,10 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", +// "-v", // Verbose test output + "-W", // Display test output on failure -+ ++ + "-x", // Arguments are tests to *exclude* -+// Simulator failures -+// "test_coroutines", // docstring not being populated -+// "test_module", // docstring not being populated -+ +// ARM64 failures -+// "test_coroutines", // docstring not being populated -+// "test_ctypes", // DL loading? -+// "test_module" // docstring not being populated -+// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc -+// "test_unicode", // encoding problem ++// "test_unicode", // # ctypes related; PyUnicode_FromFormat + +// ARMv7 failures +// "test_cmath", // math domain error @@ -34649,11 +40178,15 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m +// "test_math", // math domain error +// "test_numeric_tower", // +// "test_strtod", // -+// "test_importlib", // Thread locking problem ++ "test_importlib", // Thread locking problem ++ ++// Fails on BOTH ++// "test_ctypes", // DL loading? ++// "test_socket", // Fails due to bad domain? Fails on simulator, OS/X, too. +// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc + -+// COMMON FAILURES -+ "test_bytes" // HARD CRASH ctypes related; PyBytes_FromFormat ++// Hard crash on BOTH ++ "test_bytes" // ctypes related; PyBytes_FromFormat + + }; + @@ -34671,9 +40204,9 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m + int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; + + python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * n_test_args); -+ python_argv[0] = Py_DecodeLocale(main_script, NULL); ++ python_argv[0] = _Py_char2wchar(main_script, NULL); + for (i = 1; i < n_test_args; i++) { -+ python_argv[i] = Py_DecodeLocale(test_args[i-1], NULL); ++ python_argv[i] = _Py_char2wchar(test_args[i-1], NULL); + } + + PySys_SetArgv(n_test_args, python_argv); @@ -34719,7 +40252,7 @@ diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/m \ No newline at end of file diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj --- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2016-02-14 10:29:41.000000000 +0800 ++++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-12-20 22:48:35.000000000 +0800 @@ -0,0 +1,369 @@ +// !$*UTF8*$! +{ @@ -35091,8 +40624,8 @@ diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/ + rootObject = 60796EDA19190F4100A9926B /* Project object */; +} diff -Nru orig/config.sub modified/config.sub ---- orig/config.sub 2015-12-07 09:39:11.000000000 +0800 -+++ modified/config.sub 2016-02-14 10:29:41.000000000 +0800 +--- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 ++++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 @@ -1512,6 +1512,8 @@ ;; -nacl*) @@ -35103,9 +40636,9 @@ diff -Nru orig/config.sub modified/config.sub ;; *) diff -Nru orig/configure modified/configure ---- orig/configure 2015-12-07 09:39:11.000000000 +0800 -+++ modified/configure 2016-02-14 10:29:41.000000000 +0800 -@@ -3312,6 +3312,9 @@ +--- orig/configure 2015-02-03 19:49:02.000000000 +0800 ++++ modified/configure 2015-04-30 09:18:43.000000000 +0800 +@@ -3290,6 +3290,9 @@ *-*-cygwin*) ac_sys_system=Cygwin ;; @@ -35115,7 +40648,7 @@ diff -Nru orig/configure modified/configure *) # for now, limit cross builds to known configurations MACHDEP="unknown" -@@ -3354,6 +3357,15 @@ +@@ -3332,6 +3335,15 @@ _host_cpu=$host_cpu esac ;; @@ -35131,7 +40664,7 @@ diff -Nru orig/configure modified/configure *-*-cygwin*) _host_cpu= ;; -@@ -3433,6 +3445,9 @@ +@@ -3411,6 +3423,9 @@ define_xopen_source=no;; Darwin/1[0-9].*) define_xopen_source=no;; @@ -35141,7 +40674,7 @@ diff -Nru orig/configure modified/configure # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. -@@ -6145,11 +6160,17 @@ +@@ -5993,11 +6008,17 @@ fi if test "$cross_compiling" = yes; then @@ -35164,7 +40697,7 @@ diff -Nru orig/configure modified/configure fi -@@ -10901,6 +10922,8 @@ +@@ -10421,6 +10442,8 @@ hp*|HP*) DYNLOADFILE="dynload_hpux.o";; # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";; @@ -35173,7 +40706,7 @@ diff -Nru orig/configure modified/configure *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading -@@ -17462,7 +17485,17 @@ +@@ -16732,7 +16755,17 @@ echo "creating Modules/Setup.local" >&6 if test ! -f Modules/Setup.local then @@ -35193,8 +40726,8 @@ diff -Nru orig/configure modified/configure echo "creating Makefile" >&6 diff -Nru orig/configure.ac modified/configure.ac ---- orig/configure.ac 2015-12-07 09:39:11.000000000 +0800 -+++ modified/configure.ac 2016-02-14 10:29:41.000000000 +0800 +--- orig/configure.ac 2015-02-25 21:21:37.000000000 +0800 ++++ modified/configure.ac 2015-04-30 09:18:57.000000000 +0800 @@ -373,6 +373,9 @@ *-*-cygwin*) ac_sys_system=Cygwin @@ -35231,7 +40764,7 @@ diff -Nru orig/configure.ac modified/configure.ac # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. -@@ -1152,11 +1167,17 @@ +@@ -1023,11 +1038,17 @@ AC_CHECK_TOOLS([READELF], [readelf], [:]) if test "$cross_compiling" = yes; then @@ -35254,7 +40787,7 @@ diff -Nru orig/configure.ac modified/configure.ac fi AC_SUBST(READELF) -@@ -3153,6 +3174,8 @@ +@@ -2898,6 +2919,8 @@ hp*|HP*) DYNLOADFILE="dynload_hpux.o";; # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";; @@ -35263,7 +40796,7 @@ diff -Nru orig/configure.ac modified/configure.ac *) # use dynload_shlib.c and dlopen() if we have it; otherwise stub # out any dynamic loading -@@ -5209,7 +5232,17 @@ +@@ -4826,7 +4849,17 @@ echo "creating Modules/Setup.local" >&AS_MESSAGE_FD if test ! -f Modules/Setup.local then @@ -35284,8 +40817,8 @@ diff -Nru orig/configure.ac modified/configure.ac echo "creating Makefile" >&AS_MESSAGE_FD diff -Nru orig/iOS/Makefile modified/iOS/Makefile --- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2016-02-15 15:51:14.000000000 +0800 -@@ -0,0 +1,251 @@ ++++ modified/iOS/Makefile 2015-07-04 13:38:21.000000000 +0800 +@@ -0,0 +1,248 @@ +# This is a "Meta-makefile" for building an iOS-compatible Python.framework. +# It invokes the base makefile multiple times, once for each hardware platform +# that needs to be supported; then it combines the products into a single "fat" @@ -35335,7 +40868,6 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + +clean: + rm -rf build -+ rm -rf _freeze_importlib + rm -rf ../Python.framework + rm -rf ../Tools/iOS-test/Python.framework + @@ -35351,8 +40883,6 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + # Configure and make the local build, providing compiled resources. + if test -f ../Makefile; then cd .. && make distclean; fi + cd .. && ./configure --prefix=$(IOS_DIR)/build/host --without-ensurepip -+ cd .. && make Programs/_freeze_importlib -+ cp ../Programs/_freeze_importlib . + cd .. && make + cd .. && make install + # Now pack away all the built artefacts so that the top level distclean doesn't touch them @@ -35537,10 +41067,9 @@ diff -Nru orig/iOS/Makefile modified/iOS/Makefile + + # Link the current Python library to the top level + cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python -Binary files orig/iOS/Programs and modified/iOS/Programs differ diff -Nru orig/iOS/README modified/iOS/README --- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2016-02-15 09:51:43.000000000 +0800 ++++ modified/iOS/README 2015-12-20 18:59:33.000000000 +0800 @@ -0,0 +1,165 @@ +==================== +Python on iOS README @@ -35549,7 +41078,7 @@ diff -Nru orig/iOS/README modified/iOS/README +:Authors: + Russell Keith-Magee (2015) + -+:Version: 3.5.1 ++:Version: 3.4.2 + +This document provides a overview of eccentricities of building and using +Python on iOS. @@ -35707,22 +41236,23 @@ diff -Nru orig/iOS/README modified/iOS/README +.. _Rubicon ObjC: http://pybee.org/rubicon +.. _Pyobjus: http://pyobjus.readthedocs.org/ +.. _PyObjC: https://pythonhosted.org/pyobjc/ +Binary files orig/iOS/XCode-sample/.DS_Store and modified/iOS/XCode-sample/.DS_Store differ diff -Nru orig/iOS/XCode-sample/app/sample/main.py modified/iOS/XCode-sample/app/sample/main.py --- orig/iOS/XCode-sample/app/sample/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app/sample/main.py 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/app/sample/main.py 2015-03-14 22:02:09.000000000 +0800 @@ -0,0 +1,3 @@ + +if __name__ == '__main__': + print("Hello, World.") diff -Nru orig/iOS/XCode-sample/app_packages/README modified/iOS/XCode-sample/app_packages/README --- orig/iOS/XCode-sample/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app_packages/README 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/app_packages/README 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1 @@ +This directory exists so that 3rd party packages can be installed here. \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json --- orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1,53 @@ +{ + "images" : [ @@ -35780,7 +41310,7 @@ diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Conten \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json --- orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1,51 @@ +{ + "images" : [ @@ -35836,12 +41366,12 @@ diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/C \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings --- orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/main.m --- orig/iOS/XCode-sample/sample/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/main.m 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/main.m 2015-07-04 23:12:05.000000000 +0800 @@ -0,0 +1,112 @@ +// +// main.m @@ -35958,7 +41488,7 @@ diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/m \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-sample/sample/sample-Info.plist --- orig/iOS/XCode-sample/sample/sample-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Info.plist 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Info.plist 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1,45 @@ + + @@ -36008,7 +41538,7 @@ diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-samp \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-sample/sample/sample-Prefix.pch --- orig/iOS/XCode-sample/sample/sample-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2015-03-14 21:57:52.000000000 +0800 @@ -0,0 +1,16 @@ +// +// Prefix header @@ -36029,7 +41559,7 @@ diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-samp \ No newline at end of file diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj --- orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-07-04 23:17:10.000000000 +0800 @@ -0,0 +1,353 @@ +// !$*UTF8*$! +{ @@ -36384,10 +41914,9 @@ diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XC + }; + rootObject = 60796EDA19190F4100A9926B /* Project object */; +} -Binary files orig/iOS/iOS and modified/iOS/iOS differ diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h --- orig/iOS/include/pyconfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/include/pyconfig.h 2016-02-14 10:29:41.000000000 +0800 ++++ modified/iOS/include/pyconfig.h 2015-05-05 08:36:22.000000000 +0800 @@ -0,0 +1,15 @@ +#ifdef __arm__ +#include "pyconfig-armv7.h" @@ -36405,3 +41934,21 @@ diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h +#include "pyconfig-x86_64.h" +#endif \ No newline at end of file +diff -Nru orig/setup.py modified/setup.py +--- orig/setup.py 2015-02-03 19:49:05.000000000 +0800 ++++ modified/setup.py 2015-04-26 07:48:53.000000000 +0800 +@@ -252,7 +252,13 @@ + + build_ext.build_extensions(self) + +- longest = max([len(e.name) for e in self.extensions]) ++ # If there are any missing modules, use the longest name to ++ # set the column width for the list of missing modules. ++ if missing: ++ longest = max([len(m) for m in missing]) ++ else: ++ longest = 0 ++ + if self.failed: + longest = max(longest, max([len(name) for name in self.failed])) + From efb125bb314c2cf20c050e0eec51736696c5eb5f Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Fri, 1 Jul 2016 14:48:50 +0800 Subject: [PATCH 43/51] Merge macOS into build process. --- Makefile | 131 +++++++++++++++++++++++++++++++++++------------------ README.rst | 31 +++++++------ 2 files changed, 105 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 0d9d196c..c8605d7f 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,38 @@ # # Useful targets: # - all - build everything +# - macOS - build everything for macOS # - iOS - build everything for iOS # - tvOS - build everything for tvOS # - watchOS - build everything for watchOS +# - OpenSSL.framework-macOS - build OpenSSL.framework for macOS # - OpenSSL.framework-iOS - build OpenSSL.framework for iOS # - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS # - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - BZip2-iOS - build BZip2 library for iOS -# - BZip2-tvOS - build BZip2 library for tvOS -# - BZip2-watchOS - build BZip2 library for watchOS -# - XZ-iOS - build XZ library for iOS -# - XZ-tvOS - build XZ library for tvOS -# - XZ-watchOS - build XZ library for watchOS +# - BZip2.framework-macOS - build BZip2.framework for macOS +# - BZip2.framework-iOS - build BZip2.framework for iOS +# - BZip2.framework-tvOS - build BZip2.framework for tvOS +# - BZip2.framework-watchOS - build BZip2.framework for watchOS +# - XZ.framework-macOS - build XZ.framework for macOS +# - XZ.framework-iOS - build XZ.framework for iOS +# - XZ.framework-tvOS - build XZ.framework for tvOS +# - XZ.framework-watchOS - build XZ.framework for watchOS +# - Python.framework-macOS - build Python.framework for macOS # - Python.framework-iOS - build Python.framework for iOS # - Python.framework-tvOS - build Python.framework for tvOS # - Python.framework-watchOS - build Python.framework for watchOS -# - Python-host - build host python # Current director PROJECT_DIR=$(shell pwd) -BUILD_NUMBER=5 +BUILD_NUMBER=6 # Version of packages that will be compiled by this meta-package PYTHON_VERSION=3.4.2 PYTHON_VER=$(basename $(PYTHON_VERSION)) OPENSSL_VERSION_NUMBER=1.0.2 -OPENSSL_REVISION=f +OPENSSL_REVISION=h OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) BZIP2_VERSION=1.0.6 @@ -36,7 +40,10 @@ BZIP2_VERSION=1.0.6 XZ_VERSION=5.2.2 # Supported OS -OS=iOS tvOS watchOS +OS=macOS iOS tvOS watchOS + +# macOS targets +TARGETS-macOS=macosx.x86_64 # iOS targets TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 @@ -126,8 +133,10 @@ downloads/xz-$(XZ_VERSION).tgz: # Clean the Python project clean-Python: - rm -rf build/Python-$(PYTHON_VERSION)-host build/*/Python-$(PYTHON_VERSION)-* \ - build/*/libpython$(PYTHON_VER).a build/*/pyconfig-*.h \ + rm -rf \ + build/*/Python-$(PYTHON_VERSION)-* \ + build/*/libpython$(PYTHON_VER).a \ + build/*/pyconfig-*.h \ build/*/Python.framework # Download original Python source code archive. @@ -135,25 +144,9 @@ downloads/Python-$(PYTHON_VERSION).tgz: mkdir -p downloads if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi -PYTHON_DIR-host=build/Python-$(PYTHON_VERSION)-host -PYTHON_HOST=$(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER) - -Python-host: $(PYTHON_HOST) - -# Unpack host Python -$(PYTHON_DIR-host)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz - # Unpack host Python - mkdir -p $(PYTHON_DIR-host) - tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $(PYTHON_DIR-host) - # Configure host Python - cd $(PYTHON_DIR-host) && ./configure --prefix=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist --without-ensurepip +PYTHON_DIR-macOS=build/macOS/Python-$(PYTHON_VERSION)-macosx.x86_64 +PYTHON_HOST=$(PYTHON_DIR-macOS)/dist/lib/libpython$(PYTHON_VER).a -# Build host Python -$(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile - # Build host Python - make -C $(PYTHON_DIR-host) all install - -# # Build for specified target (from $(TARGETS)) # # Parameters: @@ -199,12 +192,19 @@ ifeq ($$(findstring iphone,$$(SDK-$1)),) # Patch Configure to build for tvOS or watchOS, not iOS LC_ALL=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' $$(OPENSSL_DIR-$1)/Configure endif + # Configure the build +ifeq ($2,macOS) + cd $$(OPENSSL_DIR-$1) && \ + CC="$$(CC-$1)" \ + ./Configure darwin64-x86_64-cc --openssldir=$(PROJECT_DIR)/$$(OPENSSL_DIR-$1) +else cd $$(OPENSSL_DIR-$1) && \ CC="$$(CC-$1)" \ CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ ./Configure iphoneos-cross no-asm --openssldir=$(PROJECT_DIR)/$$(OPENSSL_DIR-$1) +endif # Build OpenSSL $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/Makefile @@ -253,20 +253,29 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) # Apply target Python patches cd $$(PYTHON_DIR-$1) && patch -p1 < $(PROJECT_DIR)/patch/Python/Python.patch - cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded + # Configure target Python - cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) ./configure \ +ifeq ($2,macOS) + cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) ./configure \ + CC="$$(CC-$1)" LD="$$(CC-$1)" \ + --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ + --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ + $$(PYTHON_CONFIGURE-$2) +else + cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded + cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) ./configure \ CC="$$(CC-$1)" LD="$$(CC-$1)" \ --host=$$(MACHINE_DETAILED-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ $$(PYTHON_CONFIGURE-$2) +endif # Build Python -$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a build/$2/xz/lib/liblzma.a $$(PYTHON_DIR-$1)/Makefile +$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: build/$2/OpenSSL.framework build/$2/BZip2.framework build/$2/XZ.framework $$(PYTHON_DIR-$1)/Makefile # Build target Python - cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-host)/dist/bin:$(PATH) make all install + cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) make all install build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/pyconfig.h cp -f $$^ $$@ @@ -296,8 +305,8 @@ define build $$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) OPENSSL_FRAMEWORK-$1=build/$1/OpenSSL.framework -BZIP2_LIB-$1=build/$1/bzip2/lib/libbz2.a -XZ_LIB-$1=build/$1/xz/lib/liblzma.a +BZIP2_FRAMEWORK-$1=build/$1/BZip2.framework +XZ_FRAMEWORK-$1=build/$1/XZ.framework PYTHON_FRAMEWORK-$1=build/$1/Python.framework PYTHON_RESOURCES-$1=$$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources @@ -310,14 +319,14 @@ dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRA mkdir -p dist tar zcvf $$@ -C build/$1 $$(notdir $$^) +# Build OpenSSL.framework OpenSSL.framework-$1: $$(OPENSSL_FRAMEWORK-$1) -# Build OpenSSL.framework $$(OPENSSL_FRAMEWORK-$1): build/$1/libssl.a build/$1/libcrypto.a # Create framework directory structure mkdir -p $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION) - # Copy the headers (use the version from the simulator because reasons) + # Copy the headers cp -f -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/Headers # Create the fat library @@ -337,17 +346,51 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target) mkdir -p build/$1 xcrun lipo -create -output $$@ $$^ -BZip2-$1: $$(BZIP2_LIB-$1) +# Build BZip2.framework +BZip2.framework-$1: $$(BZIP2_FRAMEWORK-$1) + +$$(BZIP2_FRAMEWORK-$1): build/$1/bzip2/lib/libbz2.a + # Create framework directory structure + mkdir -p $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION) + + # Copy the headers + cp -f -r build/$1/bzip2/include $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION)/Headers + + # Create the fat library + xcrun libtool -no_warning_for_no_symbols -static \ + -o $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION)/bzip2 $$^ + + # Create symlinks + ln -fs $(BZIP2_VERSION) $$(BZIP2_FRAMEWORK-$1)/Versions/Current + ln -fs Versions/Current/Headers $$(BZIP2_FRAMEWORK-$1) + ln -fs Versions/Current/bzip2 $$(BZIP2_FRAMEWORK-$1) build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1),$$(BZIP2_DIR-$$(target))/libbz2.a) - mkdir -p build/$1/bzip2/lib - xcrun lipo -create -o $$(BZIP2_LIB-$1) $$^ + mkdir -p build/$1 + xcrun lipo -create -o $$@ $$^ -XZ-$1: $$(XZ_LIB-$1) +# Build XZ.framework +XZ.framework-$1: $$(XZ_FRAMEWORK-$1) + +$$(XZ_FRAMEWORK-$1): build/$1/xz/lib/liblzma.a + # Create framework directory structure + mkdir -p $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION) + + # Copy the headers + cp -f -r build/$1/xz/include $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION)/Headers + + # Create the fat library + xcrun libtool -no_warning_for_no_symbols -static \ + -o $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION)/xz $$^ + + # Create symlinks + ln -fs $(XZ_VERSION) $$(XZ_FRAMEWORK-$1)/Versions/Current + ln -fs Versions/Current/Headers $$(XZ_FRAMEWORK-$1) + ln -fs Versions/Current/xz $$(XZ_FRAMEWORK-$1) build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1),$$(XZ_DIR-$$(target))/src/liblzma/.libs/liblzma.a) - mkdir -p build/$1/xz/lib - xcrun lipo -create -o $$(XZ_LIB-$1) $$^ + mkdir -p build/$1 + xcrun lipo -create -o $$@ $$^ Python.framework-$1: $$(PYTHON_FRAMEWORK-$1) diff --git a/README.rst b/README.rst index a386cfd4..59f99eab 100644 --- a/README.rst +++ b/README.rst @@ -1,16 +1,19 @@ -Python iOS Support -================== +Python Apple Support +==================== This is a meta-package for building a version of Python that can be embedded -into an iOS, tvOS or watchOS project. +into a macOS, iOS, tvOS or watchOS project. It works by downloading, patching, and building a fat binary OpenSSL and -Python, and packaging them both in iOS Framework format. +Python, and packaging them both in Apple Framework format. -The binaries support the ``$(ARCHS_STANDARD)`` set - that is, armv7 and -arm64 for iOS devices, arm64 for appleTV devices, and armv7k for watchOS. -This should enable the code to run on: +The binaries support the ``$(ARCHS_STANDARD)`` set - that is, x86_64 for +macOS, armv7 and arm64 for iOS devices, arm64 for appleTV devices, and armv7k +for watchOS. This should enable the code to run on: +* MacBook (including Pro & Air) +* iMac +* Mac Pro * iPhone - iPhone 4s - iPhone 5 @@ -41,20 +44,21 @@ This should enable the code to run on: - 4th gen * Apple Watch -This repository branch builds a packaged version of **Python 3.5.1**. +This repository branch builds a packaged version of **Python 3.4.2**. Other Python versions are available by cloning other branches of the main repository. Quickstart ---------- -Pre-built versions of the frameworks can be downloaded `for iOS`_, -`for tvOS`_, and `for watchOS`_, and added to your project. +Pre-built versions of the frameworks can be downloaded `for macOS`_, `for +iOS`_, `for tvOS`_, and `for watchOS`_, and added to your project. Alternatively, to build the frameworks on your own, download/clone this repository, and then in the root directory, and run: * `make` (or `make all`) to build everything. +* `make macOS` to build everything for macOS. * `make iOS` to build everything for iOS. * `make tvOS` to build everything for tvOS. * `make watchOS` to build everything for watchOS. @@ -68,9 +72,10 @@ This should: The build products will be in the `build` directory; the compiled frameworks will be in the `dist` directory. -.. _for iOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz -.. _for tvOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz -.. _for watchOS: https://github.com/pybee/Python-iOS-support/releases/download/3.4.2-b5/Python-3.4.2-iOS-support.b5.tar.gz +.. _for macOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-macOS-support.b6.tar.gz +.. _for iOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-iOS-support.b6.tar.gz +.. _for tvOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-tvOS-support.b6.tar.gz +.. _for watchOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-watchOS-support.b6.tar.gz Acknowledgements ---------------- From be7a4f9736637cee0225ee5d84878abc774a667e Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Thu, 7 Jul 2016 15:39:45 +0800 Subject: [PATCH 44/51] Clean out the master repository. All the content is now held in branches. --- README.rst | 55 +- patch/Python/Python.patch | 41954 --------------------------------- patch/Python/Setup.embedded | 87 - patch/Python/lib-exclude.lst | 14 - 4 files changed, 20 insertions(+), 42090 deletions(-) delete mode 100644 patch/Python/Python.patch delete mode 100644 patch/Python/Setup.embedded delete mode 100644 patch/Python/lib-exclude.lst diff --git a/README.rst b/README.rst index 59f99eab..275f6b3a 100644 --- a/README.rst +++ b/README.rst @@ -4,8 +4,8 @@ Python Apple Support This is a meta-package for building a version of Python that can be embedded into a macOS, iOS, tvOS or watchOS project. -It works by downloading, patching, and building a fat binary OpenSSL and -Python, and packaging them both in Apple Framework format. +It works by downloading, patching, and building a fat binary of Python and +selected pre-requisites, and packaging them both in Apple Framework format. The binaries support the ``$(ARCHS_STANDARD)`` set - that is, x86_64 for macOS, armv7 and arm64 for iOS devices, arm64 for appleTV devices, and armv7k @@ -44,44 +44,29 @@ for watchOS. This should enable the code to run on: - 4th gen * Apple Watch -This repository branch builds a packaged version of **Python 3.4.2**. -Other Python versions are available by cloning other branches of the main -repository. -Quickstart ----------- +The master branch of this repository has no content; there is an +independent branch for each supported version of Python. The following +Python versions are supported: -Pre-built versions of the frameworks can be downloaded `for macOS`_, `for -iOS`_, `for tvOS`_, and `for watchOS`_, and added to your project. +* `Python 2.7.12 `__: -Alternatively, to build the frameworks on your own, download/clone this -repository, and then in the root directory, and run: + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ -* `make` (or `make all`) to build everything. -* `make macOS` to build everything for macOS. -* `make iOS` to build everything for iOS. -* `make tvOS` to build everything for tvOS. -* `make watchOS` to build everything for watchOS. +* `Python 3.4.5 `__: -This should: + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ -1. Download the original source packages -2. Patch them as required for compatibility with the selected OS -3. Build the packages as XCode-compatible frameworks. +* `Python 3.5.2 `__: -The build products will be in the `build` directory; the compiled frameworks -will be in the `dist` directory. + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ -.. _for macOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-macOS-support.b6.tar.gz -.. _for iOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-iOS-support.b6.tar.gz -.. _for tvOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-tvOS-support.b6.tar.gz -.. _for watchOS: https://github.com/pybee/Python-Apple-support/releases/download/3.4.2-b6/Python-3.4.2-watchOS-support.b6.tar.gz - -Acknowledgements ----------------- - -The approach to framework packaging is drawn from `Jeff Verkoeyen`_, and -`Ernesto García's`_ tutorials. - -.. _Jeff Verkoeyen: https://github.com/jverkoey/iOS-Framework -.. _Ernesto García's: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial diff --git a/patch/Python/Python.patch b/patch/Python/Python.patch deleted file mode 100644 index d1144180..00000000 --- a/patch/Python/Python.patch +++ /dev/null @@ -1,41954 +0,0 @@ -diff -Nru orig/Include/datetime.h modified/Include/datetime.h ---- orig/Include/datetime.h 2015-02-03 19:49:02.000000000 +0800 -+++ modified/Include/datetime.h 2015-04-27 13:51:52.000000000 +0800 -@@ -166,6 +166,11 @@ - - #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" - -+#define PyDateTime_IMPORT \ -+ PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) -+ -+/* Define global variable for the C API and a macro for setting it. */ -+static PyDateTime_CAPI *PyDateTimeAPI = NULL; - - #ifdef Py_BUILD_CORE - -@@ -187,12 +192,6 @@ - - #else - --/* Define global variable for the C API and a macro for setting it. */ --static PyDateTime_CAPI *PyDateTimeAPI = NULL; -- --#define PyDateTime_IMPORT \ -- PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) -- - /* Macros for type checking when not building the Python core. */ - #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) - #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) -diff -Nru orig/Lib/ctypes/test/test_as_parameter.py modified/Lib/ctypes/test/test_as_parameter.py ---- orig/Lib/ctypes/test/test_as_parameter.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_as_parameter.py 2015-06-28 21:35:59.000000000 +0800 -@@ -1,9 +1,11 @@ -+import os - import unittest - from ctypes import * - from ctypes.test import need_symbol - import _ctypes_test - --dll = CDLL(_ctypes_test.__file__) -+ -+dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - try: - CALLBACK_FUNCTYPE = WINFUNCTYPE -@@ -14,6 +16,7 @@ - class POINT(Structure): - _fields_ = [("x", c_int), ("y", c_int)] - -+ - class BasicWrapTestCase(unittest.TestCase): - def wrap(self, param): - return param -diff -Nru orig/Lib/ctypes/test/test_bitfields.py modified/Lib/ctypes/test/test_bitfields.py ---- orig/Lib/ctypes/test/test_bitfields.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_bitfields.py 2015-06-28 21:36:06.000000000 +0800 -@@ -1,11 +1,12 @@ - from ctypes import * - from ctypes.test import need_symbol --import unittest - import os -+import unittest - - import ctypes - import _ctypes_test - -+ - class BITS(Structure): - _fields_ = [("A", c_int, 1), - ("B", c_int, 2), -@@ -25,7 +26,7 @@ - ("R", c_short, 6), - ("S", c_short, 7)] - --func = CDLL(_ctypes_test.__file__).unpack_bitfields -+func = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])).unpack_bitfields - func.argtypes = POINTER(BITS), c_char - - ##for n in "ABCDEFGHIMNOPQRS": -diff -Nru orig/Lib/ctypes/test/test_buffers.py modified/Lib/ctypes/test/test_buffers.py ---- orig/Lib/ctypes/test/test_buffers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_buffers.py 2015-04-27 21:02:18.000000000 +0800 -@@ -2,6 +2,7 @@ - from ctypes.test import need_symbol - import unittest - -+ - class StringBufferTestCase(unittest.TestCase): - - def test_buffer(self): -diff -Nru orig/Lib/ctypes/test/test_callbacks.py modified/Lib/ctypes/test/test_callbacks.py ---- orig/Lib/ctypes/test/test_callbacks.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_callbacks.py 2015-06-28 21:36:18.000000000 +0800 -@@ -1,8 +1,10 @@ -+import os - import unittest - from ctypes import * - from ctypes.test import need_symbol - import _ctypes_test - -+ - class Callbacks(unittest.TestCase): - functype = CFUNCTYPE - -@@ -157,7 +159,7 @@ - - def test_integrate(self): - # Derived from some then non-working code, posted by David Foster -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - # The function prototype called by 'integrate': double func(double); - CALLBACK = CFUNCTYPE(c_double, c_double) -@@ -208,7 +210,7 @@ - def test_callback_register_int(self): - # Issue #8275: buggy handling of callback args under Win64 - # NOTE: should be run on release builds as well -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - CALLBACK = CFUNCTYPE(c_int, c_int, c_int, c_int, c_int, c_int) - # All this function does is call the callback with its args squared - func = dll._testfunc_cbk_reg_int -@@ -224,7 +226,7 @@ - def test_callback_register_double(self): - # Issue #8275: buggy handling of callback args under Win64 - # NOTE: should be run on release builds as well -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - CALLBACK = CFUNCTYPE(c_double, c_double, c_double, c_double, - c_double, c_double) - # All this function does is call the callback with its args squared -diff -Nru orig/Lib/ctypes/test/test_cfuncs.py modified/Lib/ctypes/test/test_cfuncs.py ---- orig/Lib/ctypes/test/test_cfuncs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_cfuncs.py 2015-06-28 21:36:25.000000000 +0800 -@@ -1,17 +1,20 @@ - # A lot of failures in these tests on Mac OS X. - # Byte order related? - -+import os - import unittest - from ctypes import * - from ctypes.test import need_symbol - - import _ctypes_test - -+ - class CFunctions(unittest.TestCase): -- _dll = CDLL(_ctypes_test.__file__) -+ _dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - def S(self): - return c_longlong.in_dll(self._dll, "last_tf_arg_s").value -+ - def U(self): - return c_ulonglong.in_dll(self._dll, "last_tf_arg_u").value - -@@ -206,7 +209,7 @@ - - @need_symbol('WinDLL') - class stdcallCFunctions(CFunctions): -- _dll = stdcall_dll(_ctypes_test.__file__) -+ _dll = stdcall_dll(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - if __name__ == '__main__': - unittest.main() -diff -Nru orig/Lib/ctypes/test/test_checkretval.py modified/Lib/ctypes/test/test_checkretval.py ---- orig/Lib/ctypes/test/test_checkretval.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_checkretval.py 2015-06-28 21:36:10.000000000 +0800 -@@ -1,8 +1,10 @@ -+import os - import unittest - - from ctypes import * - from ctypes.test import need_symbol - -+ - class CHECKED(c_int): - def _check_retval_(value): - # Receives a CHECKED instance. -@@ -14,7 +16,7 @@ - def test_checkretval(self): - - import _ctypes_test -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - self.assertEqual(42, dll._testfunc_p_p(42)) - - dll._testfunc_p_p.restype = CHECKED -diff -Nru orig/Lib/ctypes/test/test_funcptr.py modified/Lib/ctypes/test/test_funcptr.py ---- orig/Lib/ctypes/test/test_funcptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_funcptr.py 2015-06-28 21:36:31.000000000 +0800 -@@ -1,4 +1,5 @@ --import os, unittest -+import os -+import unittest - from ctypes import * - - try: -@@ -8,7 +9,10 @@ - WINFUNCTYPE = CFUNCTYPE - - import _ctypes_test --lib = CDLL(_ctypes_test.__file__) -+ -+ -+lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) -+ - - class CFuncPtrTestCase(unittest.TestCase): - def test_basic(self): -diff -Nru orig/Lib/ctypes/test/test_functions.py modified/Lib/ctypes/test/test_functions.py ---- orig/Lib/ctypes/test/test_functions.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_functions.py 2015-06-28 21:36:38.000000000 +0800 -@@ -7,7 +7,9 @@ - - from ctypes import * - from ctypes.test import need_symbol --import sys, unittest -+import os -+import sys -+import unittest - - try: - WINFUNCTYPE -@@ -16,15 +18,22 @@ - WINFUNCTYPE = CFUNCTYPE - - import _ctypes_test --dll = CDLL(_ctypes_test.__file__) -+ -+ -+dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - if sys.platform == "win32": - windll = WinDLL(_ctypes_test.__file__) - -+ - class POINT(Structure): - _fields_ = [("x", c_int), ("y", c_int)] -+ -+ - class RECT(Structure): - _fields_ = [("left", c_int), ("top", c_int), - ("right", c_int), ("bottom", c_int)] -+ -+ - class FunctionTestCase(unittest.TestCase): - - def test_mro(self): -diff -Nru orig/Lib/ctypes/test/test_libc.py modified/Lib/ctypes/test/test_libc.py ---- orig/Lib/ctypes/test/test_libc.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_libc.py 2015-06-28 21:36:41.000000000 +0800 -@@ -1,14 +1,18 @@ -+import os - import unittest - - from ctypes import * - import _ctypes_test - --lib = CDLL(_ctypes_test.__file__) -+ -+lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) -+ - - def three_way_cmp(x, y): - """Return -1 if x < y, 0 if x == y and 1 if x > y""" - return (x > y) - (x < y) - -+ - class LibTest(unittest.TestCase): - def test_sqrt(self): - lib.my_sqrt.argtypes = c_double, -diff -Nru orig/Lib/ctypes/test/test_parameters.py modified/Lib/ctypes/test/test_parameters.py ---- orig/Lib/ctypes/test/test_parameters.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_parameters.py 2015-06-28 21:36:45.000000000 +0800 -@@ -1,6 +1,9 @@ --import unittest, sys -+import os -+import unittest -+ - from ctypes.test import need_symbol - -+ - class SimpleTypesTestCase(unittest.TestCase): - - def setUp(self): -@@ -139,7 +142,7 @@ - import _ctypes_test - from ctypes import CDLL, c_void_p, ArgumentError - -- func = CDLL(_ctypes_test.__file__)._testfunc_p_p -+ func = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))._testfunc_p_p - func.restype = c_void_p - # TypeError: has no from_param method - self.assertRaises(TypeError, setattr, func, "argtypes", (object,)) -diff -Nru orig/Lib/ctypes/test/test_pickling.py modified/Lib/ctypes/test/test_pickling.py ---- orig/Lib/ctypes/test/test_pickling.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pickling.py 2015-06-28 21:36:49.000000000 +0800 -@@ -1,8 +1,11 @@ --import unittest - import pickle -+import os -+import unittest - from ctypes import * - import _ctypes_test --dll = CDLL(_ctypes_test.__file__) -+ -+ -+dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - class X(Structure): - _fields_ = [("a", c_int), ("b", c_double)] -diff -Nru orig/Lib/ctypes/test/test_pointers.py modified/Lib/ctypes/test/test_pointers.py ---- orig/Lib/ctypes/test/test_pointers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_pointers.py 2015-06-28 21:38:12.000000000 +0800 -@@ -1,4 +1,6 @@ --import unittest, sys -+import os -+import sys -+import unittest - - from ctypes import * - import _ctypes_test -@@ -8,6 +10,7 @@ - python_types = [int, int, int, int, int, int, - int, int, int, int, float, float] - -+ - class PointersTestCase(unittest.TestCase): - - def test_pointer_crash(self): -@@ -20,7 +23,7 @@ - self.assertRaises(TypeError, A, c_ulong(33)) - - def test_pass_pointers(self): -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - func = dll._testfunc_p_p - func.restype = c_long - -@@ -35,7 +38,7 @@ - self.assertEqual(res[0], 12345678) - - def test_change_pointers(self): -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - func = dll._testfunc_p_p - - i = c_int(87654) -@@ -70,7 +73,7 @@ - return 0 - callback = PROTOTYPE(func) - -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - # This function expects a function pointer, - # and calls this with an integer pointer as parameter. - # The int pointer points to a table containing the numbers 1..10 -@@ -135,7 +138,7 @@ - - def test_charpp(self): - """Test that a character pointer-to-pointer is correctly passed""" -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - func = dll._testfunc_c_p_p - func.restype = c_char_p - argv = (c_char_p * 2)() -diff -Nru orig/Lib/ctypes/test/test_prototypes.py modified/Lib/ctypes/test/test_prototypes.py ---- orig/Lib/ctypes/test/test_prototypes.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_prototypes.py 2015-06-28 21:37:34.000000000 +0800 -@@ -1,6 +1,7 @@ -+import os -+import unittest - from ctypes import * - from ctypes.test import need_symbol --import unittest - - # IMPORTANT INFO: - # -@@ -23,7 +24,9 @@ - # In this case, there would have to be an additional reference to the argument... - - import _ctypes_test --testdll = CDLL(_ctypes_test.__file__) -+ -+ -+testdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - # Return machine address `a` as a (possibly long) non-negative integer. - # Starting with Python 2.5, id(anything) is always non-negative, and -diff -Nru orig/Lib/ctypes/test/test_refcounts.py modified/Lib/ctypes/test/test_refcounts.py ---- orig/Lib/ctypes/test/test_refcounts.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_refcounts.py 2015-06-28 21:37:38.000000000 +0800 -@@ -1,13 +1,17 @@ --import unittest --from test import support - import ctypes - import gc -+import os -+import unittest -+from test import support - - MyCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int) - OtherCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_ulonglong) - - import _ctypes_test --dll = ctypes.CDLL(_ctypes_test.__file__) -+ -+ -+dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) -+ - - class RefcountTestCase(unittest.TestCase): - -diff -Nru orig/Lib/ctypes/test/test_returnfuncptrs.py modified/Lib/ctypes/test/test_returnfuncptrs.py ---- orig/Lib/ctypes/test/test_returnfuncptrs.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_returnfuncptrs.py 2015-06-28 21:37:45.000000000 +0800 -@@ -1,15 +1,16 @@ -+import os - import unittest - from ctypes import * --import os - - import _ctypes_test - -+ - class ReturnFuncPtrTestCase(unittest.TestCase): - - def test_with_prototype(self): - # The _ctypes_test shared lib/dll exports quite some functions for testing. - # The get_strchr function returns a *pointer* to the C strchr function. -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - get_strchr = dll.get_strchr - get_strchr.restype = CFUNCTYPE(c_char_p, c_char_p, c_char) - strchr = get_strchr() -@@ -21,7 +22,7 @@ - self.assertRaises(TypeError, strchr, b"abcdef") - - def test_without_prototype(self): -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - get_strchr = dll.get_strchr - # the default 'c_int' would not work on systems where sizeof(int) != sizeof(void *) - get_strchr.restype = c_void_p -@@ -35,7 +36,7 @@ - self.assertRaises(TypeError, strchr, b"abcdef") - - def test_from_dll(self): -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - # _CFuncPtr instances are now callable with a tuple argument - # which denotes a function name and a dll: - strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)(("my_strchr", dll)) -@@ -51,13 +52,13 @@ - if key == 0: - return "my_strchr" - if key == 1: -- return CDLL(_ctypes_test.__file__) -+ return CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - raise IndexError - - # _CFuncPtr instances are now callable with a tuple argument - # which denotes a function name and a dll: - strchr = CFUNCTYPE(c_char_p, c_char_p, c_char)( -- BadSequence(("my_strchr", CDLL(_ctypes_test.__file__)))) -+ BadSequence(("my_strchr", CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))))) - self.assertTrue(strchr(b"abcdef", b"b"), "bcdef") - self.assertEqual(strchr(b"abcdef", b"x"), None) - self.assertRaises(ArgumentError, strchr, b"abcdef", 3.0) -diff -Nru orig/Lib/ctypes/test/test_slicing.py modified/Lib/ctypes/test/test_slicing.py ---- orig/Lib/ctypes/test/test_slicing.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_slicing.py 2015-06-28 21:37:52.000000000 +0800 -@@ -1,3 +1,4 @@ -+import os - import unittest - from ctypes import * - from ctypes.test import need_symbol -@@ -62,7 +63,7 @@ - def test_char_ptr(self): - s = b"abcdefghijklmnopqrstuvwxyz" - -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - dll.my_strdup.restype = POINTER(c_char) - dll.my_free.restype = None - res = dll.my_strdup(s) -@@ -94,7 +95,7 @@ - dll.my_free(res) - - def test_char_ptr_with_free(self): -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - s = b"abcdefghijklmnopqrstuvwxyz" - - class allocated_c_char_p(c_char_p): -@@ -130,7 +131,7 @@ - def test_wchar_ptr(self): - s = "abcdefghijklmnopqrstuvwxyz\0" - -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - dll.my_wcsdup.restype = POINTER(c_wchar) - dll.my_wcsdup.argtypes = POINTER(c_wchar), - dll.my_free.restype = None -diff -Nru orig/Lib/ctypes/test/test_stringptr.py modified/Lib/ctypes/test/test_stringptr.py ---- orig/Lib/ctypes/test/test_stringptr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_stringptr.py 2015-06-28 21:37:55.000000000 +0800 -@@ -1,10 +1,12 @@ -+import os - import unittest - from test import support - from ctypes import * - - import _ctypes_test - --lib = CDLL(_ctypes_test.__file__) -+ -+lib = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - class StringPtrTestCase(unittest.TestCase): - -diff -Nru orig/Lib/ctypes/test/test_unicode.py modified/Lib/ctypes/test/test_unicode.py ---- orig/Lib/ctypes/test/test_unicode.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_unicode.py 2015-06-28 21:37:59.000000000 +0800 -@@ -1,13 +1,15 @@ -+import os - import unittest - import ctypes - from ctypes.test import need_symbol - - import _ctypes_test - -+ - @need_symbol('c_wchar') - class UnicodeTestCase(unittest.TestCase): - def test_wcslen(self): -- dll = ctypes.CDLL(_ctypes_test.__file__) -+ dll = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - wcslen = dll.my_wcslen - wcslen.argtypes = [ctypes.c_wchar_p] - -@@ -26,7 +28,7 @@ - self.assertEqual(buf[::2], 'a\xe4\xfc') - self.assertEqual(buf[6:5:-1], "") - --func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p -+func = ctypes.CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE']))._testfunc_p_p - - class StringTestCase(UnicodeTestCase): - def setUp(self): -diff -Nru orig/Lib/ctypes/test/test_values.py modified/Lib/ctypes/test/test_values.py ---- orig/Lib/ctypes/test/test_values.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_values.py 2015-06-28 21:38:03.000000000 +0800 -@@ -2,18 +2,20 @@ - A testcase which accesses *values* in a dll. - """ - --import unittest -+import os - import sys -+import unittest - from ctypes import * - - import _ctypes_test - -+ - class ValuesTestCase(unittest.TestCase): - - def test_an_integer(self): - # This test checks and changes an integer stored inside the - # _ctypes_test dll/shared lib. -- ctdll = CDLL(_ctypes_test.__file__) -+ ctdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - an_integer = c_int.in_dll(ctdll, "an_integer") - x = an_integer.value - self.assertEqual(x, ctdll.get_an_integer()) -@@ -25,9 +27,10 @@ - self.assertEqual(x, ctdll.get_an_integer()) - - def test_undefined(self): -- ctdll = CDLL(_ctypes_test.__file__) -+ ctdll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - self.assertRaises(ValueError, c_int.in_dll, ctdll, "Undefined_Symbol") - -+ - @unittest.skipUnless(sys.platform == 'win32', 'Windows-specific test') - class Win_ValuesTestCase(unittest.TestCase): - """This test only works when python itself is a dll/shared library""" -diff -Nru orig/Lib/ctypes/test/test_win32.py modified/Lib/ctypes/test/test_win32.py ---- orig/Lib/ctypes/test/test_win32.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/test/test_win32.py 2015-06-28 21:38:08.000000000 +0800 -@@ -1,7 +1,9 @@ - # Windows specific tests - - from ctypes import * --import unittest, sys -+import os -+import sys -+import unittest - from test import support - - import _ctypes_test -@@ -109,7 +111,7 @@ - ("right", c_long), - ("bottom", c_long)] - -- dll = CDLL(_ctypes_test.__file__) -+ dll = CDLL(getattr(_ctypes_test, '__file__', os.environ['TEST_EXECUTABLE'])) - - pt = POINT(10, 10) - rect = RECT(0, 0, 20, 20) -diff -Nru orig/Lib/ctypes/util.py modified/Lib/ctypes/util.py ---- orig/Lib/ctypes/util.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/ctypes/util.py 2015-02-28 19:22:12.000000000 +0800 -@@ -70,7 +70,7 @@ - def find_library(name): - return name - --if os.name == "posix" and sys.platform == "darwin": -+if os.name == "posix" and sys.platform in ("darwin", "ios"): - from ctypes.macholib.dyld import dyld_find as _dyld_find - def find_library(name): - possible = ['lib%s.dylib' % name, -diff -Nru orig/Lib/distutils/tests/test_build_ext.py modified/Lib/distutils/tests/test_build_ext.py ---- orig/Lib/distutils/tests/test_build_ext.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_ext.py 2015-05-03 00:00:04.000000000 +0800 -@@ -37,6 +37,7 @@ - from distutils.command import build_ext - build_ext.USER_BASE = site.USER_BASE - -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_build_ext(self): - global ALREADY_TESTED - copy_xxmodule_c(self.tmp_dir) -@@ -285,6 +286,7 @@ - cmd.run() - self.assertEqual(cmd.compiler, 'unix') - -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_get_outputs(self): - tmp_dir = self.mkdtemp() - c_file = os.path.join(tmp_dir, 'foo.c') -diff -Nru orig/Lib/distutils/tests/test_build_py.py modified/Lib/distutils/tests/test_build_py.py ---- orig/Lib/distutils/tests/test_build_py.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_build_py.py 2015-05-03 00:00:35.000000000 +0800 -@@ -106,6 +106,7 @@ - ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) - - @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_byte_compile_optimized(self): - project_dir, dist = self.create_dist(py_modules=['boiledeggs']) - os.chdir(project_dir) -diff -Nru orig/Lib/distutils/tests/test_config_cmd.py modified/Lib/distutils/tests/test_config_cmd.py ---- orig/Lib/distutils/tests/test_config_cmd.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_config_cmd.py 2015-05-03 00:01:43.000000000 +0800 -@@ -38,6 +38,7 @@ - self.assertEqual(len(self._logs), numlines+1) - - @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") -+ @unittest.skipUnless(hasattr(os, 'fork'), "distutils cannot spawn child processes") - def test_search_cpp(self): - pkg_dir, dist = self.create_dist() - cmd = config(dist) -diff -Nru orig/Lib/distutils/tests/test_cygwinccompiler.py modified/Lib/distutils/tests/test_cygwinccompiler.py ---- orig/Lib/distutils/tests/test_cygwinccompiler.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_cygwinccompiler.py 2015-04-30 08:21:03.000000000 +0800 -@@ -3,16 +3,19 @@ - import sys - import os - from io import BytesIO --import subprocess - from test.support import run_unittest - --from distutils import cygwinccompiler --from distutils.cygwinccompiler import (CygwinCCompiler, check_config_h, -- CONFIG_H_OK, CONFIG_H_NOTOK, -- CONFIG_H_UNCERTAIN, get_versions, -- get_msvcr) -+# Importing cygwinccompiler attempts to import other tools -+# that may not exist unless you're on win32. -+if sys.platform == 'win32': -+ from distutils import cygwinccompiler -+ from distutils.cygwinccompiler import (check_config_h, -+ CONFIG_H_OK, CONFIG_H_NOTOK, -+ CONFIG_H_UNCERTAIN, get_versions, -+ get_msvcr) - from distutils.tests import support - -+ - class FakePopen(object): - test_class = None - -@@ -26,6 +29,7 @@ - self.stdout = os.popen(cmd, 'r') - - -+@unittest.skipUnless(sys.platform == "win32", "These tests are only for win32") - class CygwinCCompilerTestCase(support.TempdirManager, - unittest.TestCase): - -@@ -119,7 +123,7 @@ - def test_get_msvcr(self): - - # none -- sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' -+ sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' - '\n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]') - self.assertEqual(get_msvcr(), None) - -diff -Nru orig/Lib/distutils/tests/test_install.py modified/Lib/distutils/tests/test_install.py ---- orig/Lib/distutils/tests/test_install.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install.py 2015-05-02 23:58:59.000000000 +0800 -@@ -197,6 +197,7 @@ - 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] - self.assertEqual(found, expected) - -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_record_extensions(self): - install_dir = self.mkdtemp() - project_dir, dist = self.create_dist(ext_modules=[ -diff -Nru orig/Lib/distutils/tests/test_install_lib.py modified/Lib/distutils/tests/test_install_lib.py ---- orig/Lib/distutils/tests/test_install_lib.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_install_lib.py 2015-05-03 00:02:08.000000000 +0800 -@@ -35,6 +35,7 @@ - self.assertEqual(cmd.optimize, 2) - - @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_byte_compile(self): - project_dir, dist = self.create_dist() - os.chdir(project_dir) -diff -Nru orig/Lib/distutils/tests/test_spawn.py modified/Lib/distutils/tests/test_spawn.py ---- orig/Lib/distutils/tests/test_spawn.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_spawn.py 2015-05-03 00:03:50.000000000 +0800 -@@ -1,14 +1,14 @@ - """Tests for distutils.spawn.""" - import unittest - import os --import time --from test.support import captured_stdout, run_unittest -+from test.support import run_unittest - - from distutils.spawn import _nt_quote_args --from distutils.spawn import spawn, find_executable -+from distutils.spawn import spawn - from distutils.errors import DistutilsExecError - from distutils.tests import support - -+ - class SpawnTestCase(support.TempdirManager, - support.LoggingSilencer, - unittest.TestCase): -@@ -22,9 +22,7 @@ - res = _nt_quote_args(args) - self.assertEqual(res, wanted) - -- -- @unittest.skipUnless(os.name in ('nt', 'posix'), -- 'Runs only under posix or nt') -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_spawn(self): - tmpdir = self.mkdtemp() - -@@ -51,6 +49,7 @@ - os.chmod(exe, 0o777) - spawn([exe]) # should work without any error - -+ - def test_suite(): - return unittest.makeSuite(SpawnTestCase) - -diff -Nru orig/Lib/distutils/tests/test_sysconfig.py modified/Lib/distutils/tests/test_sysconfig.py ---- orig/Lib/distutils/tests/test_sysconfig.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_sysconfig.py 2015-05-04 14:42:47.000000000 +0800 -@@ -11,6 +11,7 @@ - from distutils.tests import support - from test.support import TESTFN, run_unittest, check_warnings - -+ - class SysconfigTestCase(support.EnvironGuard, unittest.TestCase): - def setUp(self): - super(SysconfigTestCase, self).setUp() -@@ -177,6 +178,7 @@ - self.assertIsNotNone(vars['SO']) - self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_customize_compiler_before_get_config_vars(self): - # Issue #21923: test that a Distribution compiler - # instance can be called without an explicit call to -diff -Nru orig/Lib/distutils/tests/test_util.py modified/Lib/distutils/tests/test_util.py ---- orig/Lib/distutils/tests/test_util.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/distutils/tests/test_util.py 2015-05-03 00:04:32.000000000 +0800 -@@ -10,12 +10,13 @@ - check_environ, split_quoted, strtobool, - rfc822_escape, byte_compile, - grok_environment_error) --from distutils import util # used to patch _environ_checked -+from distutils import util # used to patch _environ_checked - from distutils.sysconfig import get_config_vars - from distutils import sysconfig - from distutils.tests import support - import _osx_support - -+ - class UtilTestCase(support.EnvironGuard, unittest.TestCase): - - def setUp(self): -@@ -239,6 +240,7 @@ - - # XXX platforms to be covered: mac - -+ @unittest.skipUnless(os.name == 'nt' or (os.name == 'posix' and hasattr(os, 'fork')), "distutils cannot spawn child processes") - def test_check_environ(self): - util._environ_checked = 0 - if 'HOME' in os.environ: -diff -Nru orig/Lib/importlib/_bootstrap.py modified/Lib/importlib/_bootstrap.py ---- orig/Lib/importlib/_bootstrap.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/importlib/_bootstrap.py 2015-05-02 11:56:09.000000000 +0800 -@@ -22,7 +22,7 @@ - - # Bootstrap-related code ###################################################### - --_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' -+_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin', 'ios' - - - def _make_relax_case(): -diff -Nru orig/Lib/plat-ios/IN.py modified/Lib/plat-ios/IN.py ---- orig/Lib/plat-ios/IN.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/IN.py 2015-07-04 14:09:06.000000000 +0800 -@@ -0,0 +1,8269 @@ -+# Generated by h2py from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/usr/include/netinet/in.h -+ -+# Included from sys/appleapiopts.h -+ -+# Included from sys/_types.h -+ -+# Included from sys/cdefs.h -+def __P(protos): return protos -+ -+def __STRING(x): return #x -+ -+def __P(protos): return () -+ -+def __STRING(x): return "x" -+ -+def __deprecated_msg(_msg): return __attribute__((deprecated(_msg))) -+ -+def __deprecated_msg(_msg): return __attribute__((deprecated)) -+ -+def __deprecated_msg(_msg): return __attribute__((deprecated(_msg))) -+ -+def __deprecated_msg(_msg): return __attribute__((deprecated)) -+ -+def __deprecated_enum_msg(_msg): return __deprecated_msg(_msg) -+ -+def __COPYRIGHT(s): return __IDSTRING(copyright,s) -+ -+def __RCSID(s): return __IDSTRING(rcsid,s) -+ -+def __SCCSID(s): return __IDSTRING(sccsid,s) -+ -+def __PROJECT_VERSION(s): return __IDSTRING(project_version,s) -+ -+def __FBSDID(s): return -+ -+__DARWIN_ONLY_64_BIT_INO_T = 1 -+__DARWIN_ONLY_UNIX_CONFORMANCE = 1 -+__DARWIN_ONLY_VERS_1050 = 1 -+__DARWIN_ONLY_UNIX_CONFORMANCE = 1 -+__DARWIN_ONLY_UNIX_CONFORMANCE = 0 -+__DARWIN_UNIX03 = 1 -+__DARWIN_UNIX03 = 0 -+__DARWIN_UNIX03 = 1 -+__DARWIN_UNIX03 = 0 -+__DARWIN_UNIX03 = 0 -+__DARWIN_UNIX03 = 1 -+__DARWIN_64_BIT_INO_T = 1 -+__DARWIN_64_BIT_INO_T = 0 -+__DARWIN_64_BIT_INO_T = 1 -+__DARWIN_64_BIT_INO_T = 0 -+__DARWIN_64_BIT_INO_T = 1 -+__DARWIN_VERS_1050 = 1 -+__DARWIN_VERS_1050 = 0 -+__DARWIN_VERS_1050 = 1 -+__DARWIN_NON_CANCELABLE = 0 -+__DARWIN_SUF_UNIX03 = "$UNIX2003" -+__DARWIN_SUF_64_BIT_INO_T = "$INODE64" -+__DARWIN_SUF_1050 = "$1050" -+__DARWIN_SUF_NON_CANCELABLE = "$NOCANCEL" -+__DARWIN_SUF_EXTSN = "$DARWIN_EXTSN" -+ -+# Included from sys/_symbol_aliasing.h -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_2_2(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_3_2(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_2(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_4_3(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_5_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_5_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_6_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_6_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_7_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_7_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_2(x): return x -+ -+def __DARWIN_ALIAS_STARTING_IPHONE___IPHONE_8_3(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_0(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_1(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_2(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_3(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_4(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_5(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_6(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_7(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_8(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_9(x): return x -+ -+def __DARWIN_ALIAS_STARTING_MAC___MAC_10_10(x): return x -+ -+_POSIX_C_SOURCE = 199009 -+_POSIX_C_SOURCE = 199209 -+_POSIX_C_SOURCE = 200809 -+_POSIX_C_SOURCE = 200112 -+_POSIX_C_SOURCE = 199506 -+_POSIX_C_SOURCE = 198808 -+ -+# Included from sys/_posix_availability.h -+def __POSIX_C_DEPRECATED(ver): return ___POSIX_C_DEPRECATED_STARTING_##ver -+ -+__DARWIN_C_ANSI = 10000 -+__DARWIN_C_FULL = 900000 -+__DARWIN_C_LEVEL = __DARWIN_C_ANSI -+__DARWIN_C_LEVEL = _POSIX_C_SOURCE -+__DARWIN_C_LEVEL = __DARWIN_C_FULL -+__STDC_WANT_LIB_EXT1__ = 1 -+_DARWIN_FEATURE_64_BIT_INODE = 1 -+_DARWIN_FEATURE_ONLY_64_BIT_INODE = 1 -+_DARWIN_FEATURE_ONLY_VERS_1050 = 1 -+_DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1 -+_DARWIN_FEATURE_UNIX_CONFORMANCE = 3 -+ -+# Included from machine/_types.h -+__DARWIN_NULL = (0) -+__DARWIN_NULL = 0 -+ -+# Included from sys/_pthread/_pthread_types.h -+__PTHREAD_SIZE__ = 8176 -+__PTHREAD_ATTR_SIZE__ = 56 -+__PTHREAD_MUTEXATTR_SIZE__ = 8 -+__PTHREAD_MUTEX_SIZE__ = 56 -+__PTHREAD_CONDATTR_SIZE__ = 8 -+__PTHREAD_COND_SIZE__ = 40 -+__PTHREAD_ONCE_SIZE__ = 8 -+__PTHREAD_RWLOCK_SIZE__ = 192 -+__PTHREAD_RWLOCKATTR_SIZE__ = 16 -+__PTHREAD_SIZE__ = 4088 -+__PTHREAD_ATTR_SIZE__ = 36 -+__PTHREAD_MUTEXATTR_SIZE__ = 8 -+__PTHREAD_MUTEX_SIZE__ = 40 -+__PTHREAD_CONDATTR_SIZE__ = 4 -+__PTHREAD_COND_SIZE__ = 24 -+__PTHREAD_ONCE_SIZE__ = 4 -+__PTHREAD_RWLOCK_SIZE__ = 124 -+__PTHREAD_RWLOCKATTR_SIZE__ = 12 -+ -+# Included from stdint.h -+__WORDSIZE = 64 -+__WORDSIZE = 32 -+ -+# Included from sys/_types/_int8_t.h -+ -+# Included from sys/_types/_int16_t.h -+ -+# Included from sys/_types/_int32_t.h -+ -+# Included from sys/_types/_int64_t.h -+ -+# Included from _types/_uint8_t.h -+ -+# Included from _types/_uint16_t.h -+ -+# Included from _types/_uint32_t.h -+ -+# Included from _types/_uint64_t.h -+ -+# Included from sys/_types/_intptr_t.h -+ -+# Included from sys/_types/_uintptr_t.h -+ -+# Included from _types/_intmax_t.h -+ -+# Included from _types/_uintmax_t.h -+INT8_MAX = 127 -+INT16_MAX = 32767 -+INT32_MAX = 2147483647 -+INT8_MIN = -128 -+INT16_MIN = -32768 -+INT32_MIN = (-INT32_MAX-1) -+UINT8_MAX = 255 -+UINT16_MAX = 65535 -+INT_LEAST8_MIN = INT8_MIN -+INT_LEAST16_MIN = INT16_MIN -+INT_LEAST32_MIN = INT32_MIN -+INT_LEAST8_MAX = INT8_MAX -+INT_LEAST16_MAX = INT16_MAX -+INT_LEAST32_MAX = INT32_MAX -+UINT_LEAST8_MAX = UINT8_MAX -+UINT_LEAST16_MAX = UINT16_MAX -+INT_FAST8_MIN = INT8_MIN -+INT_FAST16_MIN = INT16_MIN -+INT_FAST32_MIN = INT32_MIN -+INT_FAST8_MAX = INT8_MAX -+INT_FAST16_MAX = INT16_MAX -+INT_FAST32_MAX = INT32_MAX -+UINT_FAST8_MAX = UINT8_MAX -+UINT_FAST16_MAX = UINT16_MAX -+INTPTR_MIN = INT32_MIN -+INTPTR_MAX = INT32_MAX -+PTRDIFF_MIN = INT32_MIN -+PTRDIFF_MAX = INT32_MAX -+WCHAR_MAX = 0x7fffffff -+WCHAR_MIN = 0 -+WCHAR_MIN = (-WCHAR_MAX-1) -+WINT_MIN = INT32_MIN -+WINT_MAX = INT32_MAX -+SIG_ATOMIC_MIN = INT32_MIN -+SIG_ATOMIC_MAX = INT32_MAX -+def INT8_C(v): return (v) -+ -+def INT16_C(v): return (v) -+ -+def INT32_C(v): return (v) -+ -+ -+# Included from Availability.h -+__MAC_10_0 = 1000 -+__MAC_10_1 = 1010 -+__MAC_10_2 = 1020 -+__MAC_10_3 = 1030 -+__MAC_10_4 = 1040 -+__MAC_10_5 = 1050 -+__MAC_10_6 = 1060 -+__MAC_10_7 = 1070 -+__MAC_10_8 = 1080 -+__MAC_10_9 = 1090 -+__MAC_10_10 = 101000 -+__IPHONE_2_0 = 20000 -+__IPHONE_2_1 = 20100 -+__IPHONE_2_2 = 20200 -+__IPHONE_3_0 = 30000 -+__IPHONE_3_1 = 30100 -+__IPHONE_3_2 = 30200 -+__IPHONE_4_0 = 40000 -+__IPHONE_4_1 = 40100 -+__IPHONE_4_2 = 40200 -+__IPHONE_4_3 = 40300 -+__IPHONE_5_0 = 50000 -+__IPHONE_5_1 = 50100 -+__IPHONE_6_0 = 60000 -+__IPHONE_6_1 = 60100 -+__IPHONE_7_0 = 70000 -+__IPHONE_7_1 = 70100 -+__IPHONE_8_0 = 80000 -+__IPHONE_8_1 = 80100 -+__IPHONE_8_2 = 80200 -+__IPHONE_8_3 = 80300 -+ -+# Included from AvailabilityInternal.h -+def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated(_msg))) -+ -+def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated)) -+ -+def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated(_msg))) -+ -+def __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg): return __attribute__((deprecated)) -+ -+__IPHONE_OS_VERSION_MAX_ALLOWED = __IPHONE_8_3 -+__IPHONE_OS_VERSION_MIN_REQUIRED = __IPHONE_2_0 -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=2.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=2.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=2.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=2.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=2.2,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=2.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=3.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=3.2,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=3.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.2,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=4.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=4.3,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=4.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=5.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=5.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=5.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=6.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=6.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=6.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=7.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=7.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=7.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.0,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.0))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.1,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.1))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.2,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.2))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.3,deprecated=8.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __attribute__((availability(ios,introduced=8.3,deprecated=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,introduced=8.3))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __attribute__((availability(ios,unavailable))) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_2_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_3_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_4_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_5_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_6_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_7_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_0_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_2_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_3_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_4_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_5_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_6_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_7_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_0 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_1 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_2 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_REGULAR -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL__IPHONE_8_3 -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_2_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_3_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_4_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_5_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_6_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_7_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_0_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_1_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_2_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_8_3_DEP__IPHONE_8_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__IPHONE_NA_DEP__IPHONE_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE -+ -+__MAC_OS_X_VERSION_MAX_ALLOWED = __MAC_10_10 -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_0_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.0))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.1))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.2))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.3))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.0))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.1))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.3))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.1))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.2))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.3))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.2))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.3))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.3))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.4))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.5))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.6))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.7))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.8))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.9))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10,message=_msg))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10,deprecated=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,introduced=10.10))) -+ -+def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __attribute__((availability(macosx,unavailable))) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_1_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_2_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_3_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_4_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_5_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_6_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_7_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_8_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_9_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL_DEPRECATED_MSG(_msg) -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_10_10_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_0 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_1_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_1 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_2_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_2 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_3_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_3 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_4_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_4 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_5_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_5 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_6_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_6 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_7_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_7 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_8_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_8 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_9_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_9 -+ -+def __AVAILABILITY_INTERNAL__MAC_10_10_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL__MAC_10_10 -+ -+def __AVAILABILITY_INTERNAL__MAC_NA_DEP__MAC_NA_MSG(_msg): return __AVAILABILITY_INTERNAL_UNAVAILABLE -+ -+def __OSX_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(macosx_app_extension,unavailable,_msg) -+ -+def __IOS_EXTENSION_UNAVAILABLE(_msg): return __OS_AVAILABILITY_MSG(ios_app_extension,unavailable,_msg) -+ -+ -+# Included from sys/_types/_in_addr_t.h -+ -+# Included from sys/_types/_in_port_t.h -+ -+# Included from sys/socket.h -+ -+# Included from sys/types.h -+ -+# Included from machine/types.h -+ -+# Included from machine/endian.h -+ -+# Included from sys/_types/_dev_t.h -+ -+# Included from sys/_types/_blkcnt_t.h -+ -+# Included from sys/_types/_blksize_t.h -+ -+# Included from sys/_types/_gid_t.h -+ -+# Included from sys/_types/_ino_t.h -+ -+# Included from sys/_types/_ino64_t.h -+ -+# Included from sys/_types/_key_t.h -+ -+# Included from sys/_types/_mode_t.h -+ -+# Included from sys/_types/_nlink_t.h -+ -+# Included from sys/_types/_id_t.h -+ -+# Included from sys/_types/_pid_t.h -+ -+# Included from sys/_types/_off_t.h -+ -+# Included from sys/_types/_uid_t.h -+def major(x): return ((int32_t)(((u_int32_t)(x) >> 24) & 0xff)) -+ -+def minor(x): return ((int32_t)((x) & 0xffffff)) -+ -+ -+# Included from sys/_types/_clock_t.h -+ -+# Included from sys/_types/_size_t.h -+ -+# Included from sys/_types/_ssize_t.h -+ -+# Included from sys/_types/_time_t.h -+ -+# Included from sys/_types/_useconds_t.h -+ -+# Included from sys/_types/_suseconds_t.h -+ -+# Included from sys/_types/_rsize_t.h -+ -+# Included from sys/_types/_errno_t.h -+ -+# Included from sys/_types/_fd_def.h -+__DARWIN_FD_SETSIZE = 1024 -+__DARWIN_NBBY = 8 -+def __DARWIN_FD_ZERO(p): return __builtin_bzero(p, sizeof(*(p))) -+ -+def __DARWIN_FD_ZERO(p): return bzero(p, sizeof(*(p))) -+ -+NBBY = __DARWIN_NBBY -+ -+# Included from sys/_types/_fd_setsize.h -+FD_SETSIZE = __DARWIN_FD_SETSIZE -+ -+# Included from sys/_types/_fd_set.h -+ -+# Included from sys/_types/_fd_clr.h -+ -+# Included from sys/_types/_fd_zero.h -+def FD_ZERO(p): return __DARWIN_FD_ZERO(p) -+ -+ -+# Included from sys/_types/_fd_isset.h -+ -+# Included from sys/_types/_fd_copy.h -+ -+# Included from sys/_pthread/_pthread_attr_t.h -+ -+# Included from sys/_pthread/_pthread_cond_t.h -+ -+# Included from sys/_pthread/_pthread_condattr_t.h -+ -+# Included from sys/_pthread/_pthread_mutex_t.h -+ -+# Included from sys/_pthread/_pthread_mutexattr_t.h -+ -+# Included from sys/_pthread/_pthread_once_t.h -+ -+# Included from sys/_pthread/_pthread_rwlock_t.h -+ -+# Included from sys/_pthread/_pthread_rwlockattr_t.h -+ -+# Included from sys/_pthread/_pthread_t.h -+ -+# Included from sys/_pthread/_pthread_key_t.h -+ -+# Included from sys/_types/_fsblkcnt_t.h -+ -+# Included from sys/_types/_fsfilcnt_t.h -+ -+# Included from machine/_param.h -+ -+# Included from sys/_types/_sa_family_t.h -+ -+# Included from sys/_types/_socklen_t.h -+ -+# Included from sys/_types/_iovec_t.h -+SOCK_STREAM = 1 -+SOCK_DGRAM = 2 -+SOCK_RAW = 3 -+SOCK_RDM = 4 -+SOCK_SEQPACKET = 5 -+SO_DEBUG = 0x0001 -+SO_ACCEPTCONN = 0x0002 -+SO_REUSEADDR = 0x0004 -+SO_KEEPALIVE = 0x0008 -+SO_DONTROUTE = 0x0010 -+SO_BROADCAST = 0x0020 -+SO_USELOOPBACK = 0x0040 -+SO_LINGER = 0x0080 -+SO_LINGER = 0x1080 -+SO_OOBINLINE = 0x0100 -+SO_REUSEPORT = 0x0200 -+SO_TIMESTAMP = 0x0400 -+SO_TIMESTAMP_MONOTONIC = 0x0800 -+SO_ACCEPTFILTER = 0x1000 -+SO_DONTTRUNC = 0x2000 -+SO_WANTMORE = 0x4000 -+SO_WANTOOBFLAG = 0x8000 -+SO_SNDBUF = 0x1001 -+SO_RCVBUF = 0x1002 -+SO_SNDLOWAT = 0x1003 -+SO_RCVLOWAT = 0x1004 -+SO_SNDTIMEO = 0x1005 -+SO_RCVTIMEO = 0x1006 -+SO_ERROR = 0x1007 -+SO_TYPE = 0x1008 -+SO_LABEL = 0x1010 -+SO_PEERLABEL = 0x1011 -+SO_NREAD = 0x1020 -+SO_NKE = 0x1021 -+SO_NOSIGPIPE = 0x1022 -+SO_NOADDRERR = 0x1023 -+SO_NWRITE = 0x1024 -+SO_REUSESHAREUID = 0x1025 -+SO_NOTIFYCONFLICT = 0x1026 -+SO_UPCALLCLOSEWAIT = 0x1027 -+SO_LINGER_SEC = 0x1080 -+SO_RANDOMPORT = 0x1082 -+SO_NP_EXTENSIONS = 0x1083 -+SO_NUMRCVPKT = 0x1112 -+SONPX_SETOPTSHUT = 0x000000001 -+SOL_SOCKET = 0xffff -+AF_UNSPEC = 0 -+AF_UNIX = 1 -+AF_LOCAL = AF_UNIX -+AF_INET = 2 -+AF_IMPLINK = 3 -+AF_PUP = 4 -+AF_CHAOS = 5 -+AF_NS = 6 -+AF_ISO = 7 -+AF_OSI = AF_ISO -+AF_ECMA = 8 -+AF_DATAKIT = 9 -+AF_CCITT = 10 -+AF_SNA = 11 -+AF_DECnet = 12 -+AF_DLI = 13 -+AF_LAT = 14 -+AF_HYLINK = 15 -+AF_APPLETALK = 16 -+AF_ROUTE = 17 -+AF_LINK = 18 -+pseudo_AF_XTP = 19 -+AF_COIP = 20 -+AF_CNT = 21 -+pseudo_AF_RTIP = 22 -+AF_IPX = 23 -+AF_SIP = 24 -+pseudo_AF_PIP = 25 -+AF_NDRV = 27 -+AF_ISDN = 28 -+AF_E164 = AF_ISDN -+pseudo_AF_KEY = 29 -+AF_INET6 = 30 -+AF_NATM = 31 -+AF_SYSTEM = 32 -+AF_NETBIOS = 33 -+AF_PPP = 34 -+pseudo_AF_HDRCMPLT = 35 -+AF_RESERVED_36 = 36 -+AF_IEEE80211 = 37 -+AF_UTUN = 38 -+AF_MAX = 40 -+SOCK_MAXADDRLEN = 255 -+_SS_MAXSIZE = 128 -+PF_UNSPEC = AF_UNSPEC -+PF_LOCAL = AF_LOCAL -+PF_UNIX = PF_LOCAL -+PF_INET = AF_INET -+PF_IMPLINK = AF_IMPLINK -+PF_PUP = AF_PUP -+PF_CHAOS = AF_CHAOS -+PF_NS = AF_NS -+PF_ISO = AF_ISO -+PF_OSI = AF_ISO -+PF_ECMA = AF_ECMA -+PF_DATAKIT = AF_DATAKIT -+PF_CCITT = AF_CCITT -+PF_SNA = AF_SNA -+PF_DECnet = AF_DECnet -+PF_DLI = AF_DLI -+PF_LAT = AF_LAT -+PF_HYLINK = AF_HYLINK -+PF_APPLETALK = AF_APPLETALK -+PF_ROUTE = AF_ROUTE -+PF_LINK = AF_LINK -+PF_XTP = pseudo_AF_XTP -+PF_COIP = AF_COIP -+PF_CNT = AF_CNT -+PF_SIP = AF_SIP -+PF_IPX = AF_IPX -+PF_RTIP = pseudo_AF_RTIP -+PF_PIP = pseudo_AF_PIP -+PF_NDRV = AF_NDRV -+PF_ISDN = AF_ISDN -+PF_KEY = pseudo_AF_KEY -+PF_INET6 = AF_INET6 -+PF_NATM = AF_NATM -+PF_SYSTEM = AF_SYSTEM -+PF_NETBIOS = AF_NETBIOS -+PF_PPP = AF_PPP -+PF_RESERVED_36 = AF_RESERVED_36 -+PF_UTUN = AF_UTUN -+PF_MAX = AF_MAX -+NET_MAXID = AF_MAX -+NET_RT_DUMP = 1 -+NET_RT_FLAGS = 2 -+NET_RT_IFLIST = 3 -+NET_RT_STAT = 4 -+NET_RT_TRASH = 5 -+NET_RT_IFLIST2 = 6 -+NET_RT_DUMP2 = 7 -+NET_RT_MAXID = 10 -+SOMAXCONN = 128 -+MSG_OOB = 0x1 -+MSG_PEEK = 0x2 -+MSG_DONTROUTE = 0x4 -+MSG_EOR = 0x8 -+MSG_TRUNC = 0x10 -+MSG_CTRUNC = 0x20 -+MSG_WAITALL = 0x40 -+MSG_DONTWAIT = 0x80 -+MSG_EOF = 0x100 -+MSG_WAITSTREAM = 0x200 -+MSG_FLUSH = 0x400 -+MSG_HOLD = 0x800 -+MSG_SEND = 0x1000 -+MSG_HAVEMORE = 0x2000 -+MSG_RCVMORE = 0x4000 -+MSG_NEEDSA = 0x10000 -+CMGROUP_MAX = 16 -+def CMSG_FIRSTHDR(mhdr): return \ -+ -+SCM_RIGHTS = 0x01 -+SCM_TIMESTAMP = 0x02 -+SCM_CREDS = 0x03 -+SCM_TIMESTAMP_MONOTONIC = 0x04 -+SHUT_RD = 0 -+SHUT_WR = 1 -+SHUT_RDWR = 2 -+ -+# Included from sys/_endian.h -+def ntohl(x): return ((__uint32_t)(x)) -+ -+def ntohs(x): return ((__uint16_t)(x)) -+ -+def htonl(x): return ((__uint32_t)(x)) -+ -+def htons(x): return ((__uint16_t)(x)) -+ -+def ntohll(x): return ((__uint64_t)(x)) -+ -+def htonll(x): return ((__uint64_t)(x)) -+ -+def NTOHL(x): return (x) -+ -+def NTOHS(x): return (x) -+ -+def NTOHLL(x): return (x) -+ -+def HTONL(x): return (x) -+ -+def HTONS(x): return (x) -+ -+def HTONLL(x): return (x) -+ -+ -+# Included from libkern/_OSByteOrder.h -+def __DARWIN_OSSwapConstInt16(x): return \ -+ -+def __DARWIN_OSSwapConstInt32(x): return \ -+ -+def __DARWIN_OSSwapConstInt64(x): return \ -+ -+ -+# Included from libkern/arm/OSByteOrder.h -+ -+# Included from arm/arch.h -+ -+# Included from sys/_types/_os_inline.h -+def __DARWIN_OSSwapInt16(x): return \ -+ -+def __DARWIN_OSSwapInt32(x): return \ -+ -+def __DARWIN_OSSwapInt64(x): return \ -+ -+def __DARWIN_OSSwapInt16(x): return _OSSwapInt16(x) -+ -+def __DARWIN_OSSwapInt32(x): return _OSSwapInt32(x) -+ -+def __DARWIN_OSSwapInt64(x): return _OSSwapInt64(x) -+ -+def ntohs(x): return __DARWIN_OSSwapInt16(x) -+ -+def htons(x): return __DARWIN_OSSwapInt16(x) -+ -+def ntohl(x): return __DARWIN_OSSwapInt32(x) -+ -+def htonl(x): return __DARWIN_OSSwapInt32(x) -+ -+def ntohll(x): return __DARWIN_OSSwapInt64(x) -+ -+def htonll(x): return __DARWIN_OSSwapInt64(x) -+ -+IPPROTO_IP = 0 -+IPPROTO_HOPOPTS = 0 -+IPPROTO_ICMP = 1 -+IPPROTO_IGMP = 2 -+IPPROTO_GGP = 3 -+IPPROTO_IPV4 = 4 -+IPPROTO_IPIP = IPPROTO_IPV4 -+IPPROTO_TCP = 6 -+IPPROTO_ST = 7 -+IPPROTO_EGP = 8 -+IPPROTO_PIGP = 9 -+IPPROTO_RCCMON = 10 -+IPPROTO_NVPII = 11 -+IPPROTO_PUP = 12 -+IPPROTO_ARGUS = 13 -+IPPROTO_EMCON = 14 -+IPPROTO_XNET = 15 -+IPPROTO_CHAOS = 16 -+IPPROTO_UDP = 17 -+IPPROTO_MUX = 18 -+IPPROTO_MEAS = 19 -+IPPROTO_HMP = 20 -+IPPROTO_PRM = 21 -+IPPROTO_IDP = 22 -+IPPROTO_TRUNK1 = 23 -+IPPROTO_TRUNK2 = 24 -+IPPROTO_LEAF1 = 25 -+IPPROTO_LEAF2 = 26 -+IPPROTO_RDP = 27 -+IPPROTO_IRTP = 28 -+IPPROTO_TP = 29 -+IPPROTO_BLT = 30 -+IPPROTO_NSP = 31 -+IPPROTO_INP = 32 -+IPPROTO_SEP = 33 -+IPPROTO_3PC = 34 -+IPPROTO_IDPR = 35 -+IPPROTO_XTP = 36 -+IPPROTO_DDP = 37 -+IPPROTO_CMTP = 38 -+IPPROTO_TPXX = 39 -+IPPROTO_IL = 40 -+IPPROTO_IPV6 = 41 -+IPPROTO_SDRP = 42 -+IPPROTO_ROUTING = 43 -+IPPROTO_FRAGMENT = 44 -+IPPROTO_IDRP = 45 -+IPPROTO_RSVP = 46 -+IPPROTO_GRE = 47 -+IPPROTO_MHRP = 48 -+IPPROTO_BHA = 49 -+IPPROTO_ESP = 50 -+IPPROTO_AH = 51 -+IPPROTO_INLSP = 52 -+IPPROTO_SWIPE = 53 -+IPPROTO_NHRP = 54 -+IPPROTO_ICMPV6 = 58 -+IPPROTO_NONE = 59 -+IPPROTO_DSTOPTS = 60 -+IPPROTO_AHIP = 61 -+IPPROTO_CFTP = 62 -+IPPROTO_HELLO = 63 -+IPPROTO_SATEXPAK = 64 -+IPPROTO_KRYPTOLAN = 65 -+IPPROTO_RVD = 66 -+IPPROTO_IPPC = 67 -+IPPROTO_ADFS = 68 -+IPPROTO_SATMON = 69 -+IPPROTO_VISA = 70 -+IPPROTO_IPCV = 71 -+IPPROTO_CPNX = 72 -+IPPROTO_CPHB = 73 -+IPPROTO_WSN = 74 -+IPPROTO_PVP = 75 -+IPPROTO_BRSATMON = 76 -+IPPROTO_ND = 77 -+IPPROTO_WBMON = 78 -+IPPROTO_WBEXPAK = 79 -+IPPROTO_EON = 80 -+IPPROTO_VMTP = 81 -+IPPROTO_SVMTP = 82 -+IPPROTO_VINES = 83 -+IPPROTO_TTP = 84 -+IPPROTO_IGP = 85 -+IPPROTO_DGP = 86 -+IPPROTO_TCF = 87 -+IPPROTO_IGRP = 88 -+IPPROTO_OSPFIGP = 89 -+IPPROTO_SRPC = 90 -+IPPROTO_LARP = 91 -+IPPROTO_MTP = 92 -+IPPROTO_AX25 = 93 -+IPPROTO_IPEIP = 94 -+IPPROTO_MICP = 95 -+IPPROTO_SCCSP = 96 -+IPPROTO_ETHERIP = 97 -+IPPROTO_ENCAP = 98 -+IPPROTO_APES = 99 -+IPPROTO_GMTP = 100 -+IPPROTO_PIM = 103 -+IPPROTO_IPCOMP = 108 -+IPPROTO_PGM = 113 -+IPPROTO_SCTP = 132 -+IPPROTO_DIVERT = 254 -+IPPROTO_RAW = 255 -+IPPROTO_MAX = 256 -+IPPROTO_DONE = 257 -+__DARWIN_IPPORT_RESERVED = 1024 -+IPPORT_RESERVED = __DARWIN_IPPORT_RESERVED -+IPPORT_USERRESERVED = 5000 -+IPPORT_HIFIRSTAUTO = 49152 -+IPPORT_HILASTAUTO = 65535 -+IPPORT_RESERVEDSTART = 600 -+def IN_CLASSA(i): return (((u_int32_t)(i) & 0x80000000) == 0) -+ -+IN_CLASSA_NET = 0xff000000 -+IN_CLASSA_NSHIFT = 24 -+IN_CLASSA_HOST = 0x00ffffff -+IN_CLASSA_MAX = 128 -+def IN_CLASSB(i): return (((u_int32_t)(i) & 0xc0000000) == 0x80000000) -+ -+IN_CLASSB_NET = 0xffff0000 -+IN_CLASSB_NSHIFT = 16 -+IN_CLASSB_HOST = 0x0000ffff -+IN_CLASSB_MAX = 65536 -+def IN_CLASSC(i): return (((u_int32_t)(i) & 0xe0000000) == 0xc0000000) -+ -+IN_CLASSC_NET = 0xffffff00 -+IN_CLASSC_NSHIFT = 8 -+IN_CLASSC_HOST = 0x000000ff -+def IN_CLASSD(i): return (((u_int32_t)(i) & 0xf0000000) == 0xe0000000) -+ -+IN_CLASSD_NET = 0xf0000000 -+IN_CLASSD_NSHIFT = 28 -+IN_CLASSD_HOST = 0x0fffffff -+def IN_MULTICAST(i): return IN_CLASSD(i) -+ -+def IN_EXPERIMENTAL(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) -+ -+def IN_BADCLASS(i): return (((u_int32_t)(i) & 0xf0000000) == 0xf0000000) -+ -+INADDR_NONE = 0xffffffff -+def IN_LINKLOCAL(i): return (((u_int32_t)(i) & IN_CLASSB_NET) == IN_LINKLOCALNETNUM) -+ -+def IN_LOOPBACK(i): return (((u_int32_t)(i) & 0xff000000) == 0x7f000000) -+ -+def IN_ZERONET(i): return (((u_int32_t)(i) & 0xff000000) == 0) -+ -+def IN_LOCAL_GROUP(i): return (((u_int32_t)(i) & 0xffffff00) == 0xe0000000) -+ -+IN_LOOPBACKNET = 127 -+INET_ADDRSTRLEN = 16 -+IP_OPTIONS = 1 -+IP_HDRINCL = 2 -+IP_TOS = 3 -+IP_TTL = 4 -+IP_RECVOPTS = 5 -+IP_RECVRETOPTS = 6 -+IP_RECVDSTADDR = 7 -+IP_RETOPTS = 8 -+IP_MULTICAST_IF = 9 -+IP_MULTICAST_TTL = 10 -+IP_MULTICAST_LOOP = 11 -+IP_ADD_MEMBERSHIP = 12 -+IP_DROP_MEMBERSHIP = 13 -+IP_MULTICAST_VIF = 14 -+IP_RSVP_ON = 15 -+IP_RSVP_OFF = 16 -+IP_RSVP_VIF_ON = 17 -+IP_RSVP_VIF_OFF = 18 -+IP_PORTRANGE = 19 -+IP_RECVIF = 20 -+IP_IPSEC_POLICY = 21 -+IP_FAITH = 22 -+IP_STRIPHDR = 23 -+IP_RECVTTL = 24 -+IP_BOUND_IF = 25 -+IP_PKTINFO = 26 -+IP_RECVPKTINFO = IP_PKTINFO -+IP_FW_ADD = 40 -+IP_FW_DEL = 41 -+IP_FW_FLUSH = 42 -+IP_FW_ZERO = 43 -+IP_FW_GET = 44 -+IP_FW_RESETLOG = 45 -+IP_OLD_FW_ADD = 50 -+IP_OLD_FW_DEL = 51 -+IP_OLD_FW_FLUSH = 52 -+IP_OLD_FW_ZERO = 53 -+IP_OLD_FW_GET = 54 -+IP_NAT__XXX = 55 -+IP_OLD_FW_RESETLOG = 56 -+IP_DUMMYNET_CONFIGURE = 60 -+IP_DUMMYNET_DEL = 61 -+IP_DUMMYNET_FLUSH = 62 -+IP_DUMMYNET_GET = 64 -+IP_TRAFFIC_MGT_BACKGROUND = 65 -+IP_MULTICAST_IFINDEX = 66 -+IP_ADD_SOURCE_MEMBERSHIP = 70 -+IP_DROP_SOURCE_MEMBERSHIP = 71 -+IP_BLOCK_SOURCE = 72 -+IP_UNBLOCK_SOURCE = 73 -+IP_MSFILTER = 74 -+MCAST_JOIN_GROUP = 80 -+MCAST_LEAVE_GROUP = 81 -+MCAST_JOIN_SOURCE_GROUP = 82 -+MCAST_LEAVE_SOURCE_GROUP = 83 -+MCAST_BLOCK_SOURCE = 84 -+MCAST_UNBLOCK_SOURCE = 85 -+IP_DEFAULT_MULTICAST_TTL = 1 -+IP_DEFAULT_MULTICAST_LOOP = 1 -+IP_MIN_MEMBERSHIPS = 31 -+IP_MAX_MEMBERSHIPS = 4095 -+IP_MAX_GROUP_SRC_FILTER = 512 -+IP_MAX_SOCK_SRC_FILTER = 128 -+IP_MAX_SOCK_MUTE_FILTER = 128 -+MCAST_UNDEFINED = 0 -+MCAST_INCLUDE = 1 -+MCAST_EXCLUDE = 2 -+IP_PORTRANGE_DEFAULT = 0 -+IP_PORTRANGE_HIGH = 1 -+IP_PORTRANGE_LOW = 2 -+IPPROTO_MAXID = (IPPROTO_AH + 1) -+IPCTL_FORWARDING = 1 -+IPCTL_SENDREDIRECTS = 2 -+IPCTL_DEFTTL = 3 -+IPCTL_DEFMTU = 4 -+IPCTL_RTEXPIRE = 5 -+IPCTL_RTMINEXPIRE = 6 -+IPCTL_RTMAXCACHE = 7 -+IPCTL_SOURCEROUTE = 8 -+IPCTL_DIRECTEDBROADCAST = 9 -+IPCTL_INTRQMAXLEN = 10 -+IPCTL_INTRQDROPS = 11 -+IPCTL_STATS = 12 -+IPCTL_ACCEPTSOURCEROUTE = 13 -+IPCTL_FASTFORWARDING = 14 -+IPCTL_KEEPFAITH = 15 -+IPCTL_GIF_TTL = 16 -+IPCTL_MAXID = 17 -+ -+# Included from netinet6/in6.h -+__KAME_VERSION = "2009/apple-darwin" -+IPV6PORT_RESERVED = 1024 -+IPV6PORT_ANONMIN = 49152 -+IPV6PORT_ANONMAX = 65535 -+IPV6PORT_RESERVEDMIN = 600 -+IPV6PORT_RESERVEDMAX = (IPV6PORT_RESERVED-1) -+INET6_ADDRSTRLEN = 46 -+def IN6_IS_ADDR_UNSPECIFIED(a): return \ -+ -+def IN6_IS_ADDR_LOOPBACK(a): return \ -+ -+def IN6_IS_ADDR_V4COMPAT(a): return \ -+ -+def IN6_IS_ADDR_V4MAPPED(a): return \ -+ -+__IPV6_ADDR_SCOPE_NODELOCAL = 0x01 -+__IPV6_ADDR_SCOPE_INTFACELOCAL = 0x01 -+__IPV6_ADDR_SCOPE_LINKLOCAL = 0x02 -+__IPV6_ADDR_SCOPE_SITELOCAL = 0x05 -+__IPV6_ADDR_SCOPE_ORGLOCAL = 0x08 -+__IPV6_ADDR_SCOPE_GLOBAL = 0x0e -+def IN6_IS_ADDR_LINKLOCAL(a): return \ -+ -+def IN6_IS_ADDR_SITELOCAL(a): return \ -+ -+def IN6_IS_ADDR_UNIQUE_LOCAL(a): return \ -+ -+def IN6_IS_ADDR_MC_NODELOCAL(a): return \ -+ -+def IN6_IS_ADDR_MC_LINKLOCAL(a): return \ -+ -+def IN6_IS_ADDR_MC_SITELOCAL(a): return \ -+ -+def IN6_IS_ADDR_MC_ORGLOCAL(a): return \ -+ -+def IN6_IS_ADDR_MC_GLOBAL(a): return \ -+ -+IPV6_OPTIONS = 1 -+IPV6_RECVOPTS = 5 -+IPV6_RECVRETOPTS = 6 -+IPV6_RECVDSTADDR = 7 -+IPV6_RETOPTS = 8 -+IPV6_SOCKOPT_RESERVED1 = 3 -+IPV6_UNICAST_HOPS = 4 -+IPV6_MULTICAST_IF = 9 -+IPV6_MULTICAST_HOPS = 10 -+IPV6_MULTICAST_LOOP = 11 -+IPV6_JOIN_GROUP = 12 -+IPV6_LEAVE_GROUP = 13 -+IPV6_PORTRANGE = 14 -+ICMP6_FILTER = 18 -+IPV6_2292PKTINFO = 19 -+IPV6_2292HOPLIMIT = 20 -+IPV6_2292NEXTHOP = 21 -+IPV6_2292HOPOPTS = 22 -+IPV6_2292DSTOPTS = 23 -+IPV6_2292RTHDR = 24 -+IPV6_2292PKTOPTIONS = 25 -+IPV6_PKTINFO = IPV6_2292PKTINFO -+IPV6_HOPLIMIT = IPV6_2292HOPLIMIT -+IPV6_NEXTHOP = IPV6_2292NEXTHOP -+IPV6_HOPOPTS = IPV6_2292HOPOPTS -+IPV6_DSTOPTS = IPV6_2292DSTOPTS -+IPV6_RTHDR = IPV6_2292RTHDR -+IPV6_PKTOPTIONS = IPV6_2292PKTOPTIONS -+IPV6_CHECKSUM = 26 -+IPV6_V6ONLY = 27 -+IPV6_BINDV6ONLY = IPV6_V6ONLY -+IPV6_IPSEC_POLICY = 28 -+IPV6_FAITH = 29 -+IPV6_FW_ADD = 30 -+IPV6_FW_DEL = 31 -+IPV6_FW_FLUSH = 32 -+IPV6_FW_ZERO = 33 -+IPV6_FW_GET = 34 -+IPV6_RECVTCLASS = 35 -+IPV6_TCLASS = 36 -+IPV6_RTHDRDSTOPTS = 57 -+IPV6_RECVPKTINFO = 61 -+IPV6_RECVHOPLIMIT = 37 -+IPV6_RECVRTHDR = 38 -+IPV6_RECVHOPOPTS = 39 -+IPV6_RECVDSTOPTS = 40 -+IPV6_USE_MIN_MTU = 42 -+IPV6_RECVPATHMTU = 43 -+IPV6_PATHMTU = 44 -+IPV6_REACHCONF = 45 -+IPV6_3542PKTINFO = 46 -+IPV6_3542HOPLIMIT = 47 -+IPV6_3542NEXTHOP = 48 -+IPV6_3542HOPOPTS = 49 -+IPV6_3542DSTOPTS = 50 -+IPV6_3542RTHDR = 51 -+IPV6_PKTINFO = IPV6_3542PKTINFO -+IPV6_HOPLIMIT = IPV6_3542HOPLIMIT -+IPV6_NEXTHOP = IPV6_3542NEXTHOP -+IPV6_HOPOPTS = IPV6_3542HOPOPTS -+IPV6_DSTOPTS = IPV6_3542DSTOPTS -+IPV6_RTHDR = IPV6_3542RTHDR -+IPV6_AUTOFLOWLABEL = 59 -+IPV6_DONTFRAG = 62 -+IPV6_PREFER_TEMPADDR = 63 -+IPV6_MSFILTER = 74 -+IPV6_BOUND_IF = 125 -+IPV6_RTHDR_LOOSE = 0 -+IPV6_RTHDR_STRICT = 1 -+IPV6_RTHDR_TYPE_0 = 0 -+IPV6_DEFAULT_MULTICAST_HOPS = 1 -+IPV6_DEFAULT_MULTICAST_LOOP = 1 -+IPV6_MIN_MEMBERSHIPS = 31 -+IPV6_MAX_MEMBERSHIPS = 4095 -+IPV6_MAX_GROUP_SRC_FILTER = 512 -+IPV6_MAX_SOCK_SRC_FILTER = 128 -+IPV6_PORTRANGE_DEFAULT = 0 -+IPV6_PORTRANGE_HIGH = 1 -+IPV6_PORTRANGE_LOW = 2 -+IPV6PROTO_MAXID = (IPPROTO_PIM + 1) -+IPV6CTL_FORWARDING = 1 -+IPV6CTL_SENDREDIRECTS = 2 -+IPV6CTL_DEFHLIM = 3 -+IPV6CTL_DEFMTU = 4 -+IPV6CTL_FORWSRCRT = 5 -+IPV6CTL_STATS = 6 -+IPV6CTL_MRTSTATS = 7 -+IPV6CTL_MRTPROTO = 8 -+IPV6CTL_MAXFRAGPACKETS = 9 -+IPV6CTL_SOURCECHECK = 10 -+IPV6CTL_SOURCECHECK_LOGINT = 11 -+IPV6CTL_ACCEPT_RTADV = 12 -+IPV6CTL_KEEPFAITH = 13 -+IPV6CTL_LOG_INTERVAL = 14 -+IPV6CTL_HDRNESTLIMIT = 15 -+IPV6CTL_DAD_COUNT = 16 -+IPV6CTL_AUTO_FLOWLABEL = 17 -+IPV6CTL_DEFMCASTHLIM = 18 -+IPV6CTL_GIF_HLIM = 19 -+IPV6CTL_KAME_VERSION = 20 -+IPV6CTL_USE_DEPRECATED = 21 -+IPV6CTL_RR_PRUNE = 22 -+IPV6CTL_MAPPED_ADDR = 23 -+IPV6CTL_V6ONLY = 24 -+IPV6CTL_RTEXPIRE = 25 -+IPV6CTL_RTMINEXPIRE = 26 -+IPV6CTL_RTMAXCACHE = 27 -+IPV6CTL_USETEMPADDR = 32 -+IPV6CTL_TEMPPLTIME = 33 -+IPV6CTL_TEMPVLTIME = 34 -+IPV6CTL_AUTO_LINKLOCAL = 35 -+IPV6CTL_RIP6STATS = 36 -+IPV6CTL_PREFER_TEMPADDR = 37 -+IPV6CTL_ADDRCTLPOLICY = 38 -+IPV6CTL_USE_DEFAULTZONE = 39 -+IPV6CTL_MAXFRAGS = 41 -+IPV6CTL_MCAST_PMTU = 44 -+IPV6CTL_NEIGHBORGCTHRESH = 46 -+IPV6CTL_MAXIFPREFIXES = 47 -+IPV6CTL_MAXIFDEFROUTERS = 48 -+IPV6CTL_MAXDYNROUTES = 49 -+ICMPV6CTL_ND6_ONLINKNSRFC4861 = 50 -+IPV6CTL_MAXID = 51 -diff -Nru orig/Lib/plat-ios/regen modified/Lib/plat-ios/regen ---- orig/Lib/plat-ios/regen 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Lib/plat-ios/regen 2015-04-26 09:08:15.000000000 +0800 -@@ -0,0 +1,3 @@ -+#! /bin/sh -+set -v -+include=`xcrun --sdk iphoneos --show-sdk-path`/usr/include python$EXE ../../Tools/scripts/h2py.py -i '(u_long)' `xcrun --sdk iphoneos --show-sdk-path`/usr/include/netinet/in.h -diff -Nru orig/Lib/platform.py modified/Lib/platform.py ---- orig/Lib/platform.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/platform.py 2015-02-28 19:30:28.000000000 +0800 -@@ -841,7 +841,7 @@ - - """ Interface to the system's uname command. - """ -- if sys.platform in ('dos', 'win32', 'win16'): -+ if sys.platform in ('dos', 'win32', 'win16', 'ios'): - # XXX Others too ? - return default - try: -@@ -864,7 +864,7 @@ - default in case the command should fail. - - """ -- if sys.platform in ('dos', 'win32', 'win16'): -+ if sys.platform in ('dos', 'win32', 'win16', 'ios'): - # XXX Others too ? - return default - target = _follow_symlinks(target) -diff -Nru orig/Lib/site.py modified/Lib/site.py ---- orig/Lib/site.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/site.py 2015-07-04 21:19:43.000000000 +0800 -@@ -266,6 +266,9 @@ - if get_config_var('PYTHONFRAMEWORK'): - USER_SITE = get_path('purelib', 'osx_framework_user') - return USER_SITE -+ elif sys.platform == 'ios': -+ USER_SITE = get_path('purelib', 'ios') -+ return USER_SITE - - USER_SITE = get_path('purelib', '%s_user' % os.name) - return USER_SITE -diff -Nru orig/Lib/subprocess.py modified/Lib/subprocess.py ---- orig/Lib/subprocess.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/subprocess.py 2015-06-28 20:16:04.000000000 +0800 -@@ -423,1268 +423,1269 @@ - else: - _PopenSelector = selectors.SelectSelector - -- --__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -- "getoutput", "check_output", "CalledProcessError", "DEVNULL"] -- --if mswindows: -- from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, -- STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, -- STD_ERROR_HANDLE, SW_HIDE, -- STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) -- -- __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", -- "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", -- "STD_ERROR_HANDLE", "SW_HIDE", -- "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) -- -- class Handle(int): -- closed = False -- -- def Close(self, CloseHandle=_winapi.CloseHandle): -- if not self.closed: -- self.closed = True -- CloseHandle(self) -- -- def Detach(self): -- if not self.closed: -- self.closed = True -- return int(self) -- raise ValueError("already closed") -- -- def __repr__(self): -- return "Handle(%d)" % int(self) -- -- __del__ = Close -- __str__ = __repr__ -- --try: -- MAXFD = os.sysconf("SC_OPEN_MAX") --except: -- MAXFD = 256 -- --# This lists holds Popen instances for which the underlying process had not --# exited at the time its __del__ method got called: those processes are wait()ed --# for synchronously from _cleanup() when a new Popen object is created, to avoid --# zombie processes. --_active = [] -- --def _cleanup(): -- for inst in _active[:]: -- res = inst._internal_poll(_deadstate=sys.maxsize) -- if res is not None: -- try: -- _active.remove(inst) -- except ValueError: -- # This can happen if two threads create a new Popen instance. -- # It's harmless that it was already removed, so ignore. -- pass -- - PIPE = -1 - STDOUT = -2 - DEVNULL = -3 - -+if sys.platform == 'ios': -+ # iOS doesn't support subprocesses; however, some modules still import -+ # subprocess, so it's helpful to retain the symbols in the namespace. -+ __all__ = ["PIPE", "STDOUT", "DEVNULL", "CalledProcessError"] -+else: -+ __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", -+ "getoutput", "check_output", "CalledProcessError", "DEVNULL"] - --def _eintr_retry_call(func, *args): -- while True: -- try: -- return func(*args) -- except InterruptedError: -- continue -- -- --# XXX This function is only used by multiprocessing and the test suite, --# but it's here so that it can be imported when Python is compiled without --# threads. -- --def _args_from_interpreter_flags(): -- """Return a list of command-line arguments reproducing the current -- settings in sys.flags and sys.warnoptions.""" -- flag_opt_map = { -- 'debug': 'd', -- # 'inspect': 'i', -- # 'interactive': 'i', -- 'optimize': 'O', -- 'dont_write_bytecode': 'B', -- 'no_user_site': 's', -- 'no_site': 'S', -- 'ignore_environment': 'E', -- 'verbose': 'v', -- 'bytes_warning': 'b', -- 'quiet': 'q', -- 'hash_randomization': 'R', -- } -- args = [] -- for flag, opt in flag_opt_map.items(): -- v = getattr(sys.flags, flag) -- if v > 0: -- if flag == 'hash_randomization': -- v = 1 # Handle specification of an exact seed -- args.append('-' + opt * v) -- for opt in sys.warnoptions: -- args.append('-W' + opt) -- return args -- -- --def call(*popenargs, timeout=None, **kwargs): -- """Run command with arguments. Wait for command to complete or -- timeout, then return the returncode attribute. -- -- The arguments are the same as for the Popen constructor. Example: -- -- retcode = call(["ls", "-l"]) -- """ -- with Popen(*popenargs, **kwargs) as p: -- try: -- return p.wait(timeout=timeout) -- except: -- p.kill() -- p.wait() -- raise -- -- --def check_call(*popenargs, **kwargs): -- """Run command with arguments. Wait for command to complete. If -- the exit code was zero then return, otherwise raise -- CalledProcessError. The CalledProcessError object will have the -- return code in the returncode attribute. -- -- The arguments are the same as for the call function. Example: -- -- check_call(["ls", "-l"]) -- """ -- retcode = call(*popenargs, **kwargs) -- if retcode: -- cmd = kwargs.get("args") -- if cmd is None: -- cmd = popenargs[0] -- raise CalledProcessError(retcode, cmd) -- return 0 -- -- --def check_output(*popenargs, timeout=None, **kwargs): -- r"""Run command with arguments and return its output. -- -- If the exit code was non-zero it raises a CalledProcessError. The -- CalledProcessError object will have the return code in the returncode -- attribute and output in the output attribute. -- -- The arguments are the same as for the Popen constructor. Example: -- -- >>> check_output(["ls", "-l", "/dev/null"]) -- b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' -- -- The stdout argument is not allowed as it is used internally. -- To capture standard error in the result, use stderr=STDOUT. -- -- >>> check_output(["/bin/sh", "-c", -- ... "ls -l non_existent_file ; exit 0"], -- ... stderr=STDOUT) -- b'ls: non_existent_file: No such file or directory\n' -- -- There is an additional optional argument, "input", allowing you to -- pass a string to the subprocess's stdin. If you use this argument -- you may not also use the Popen constructor's "stdin" argument, as -- it too will be used internally. Example: -- -- >>> check_output(["sed", "-e", "s/foo/bar/"], -- ... input=b"when in the course of fooman events\n") -- b'when in the course of barman events\n' -- -- If universal_newlines=True is passed, the return value will be a -- string rather than bytes. -- """ -- if 'stdout' in kwargs: -- raise ValueError('stdout argument not allowed, it will be overridden.') -- if 'input' in kwargs: -- if 'stdin' in kwargs: -- raise ValueError('stdin and input arguments may not both be used.') -- inputdata = kwargs['input'] -- del kwargs['input'] -- kwargs['stdin'] = PIPE -- else: -- inputdata = None -- with Popen(*popenargs, stdout=PIPE, **kwargs) as process: -- try: -- output, unused_err = process.communicate(inputdata, timeout=timeout) -- except TimeoutExpired: -- process.kill() -- output, unused_err = process.communicate() -- raise TimeoutExpired(process.args, timeout, output=output) -- except: -- process.kill() -- process.wait() -- raise -- retcode = process.poll() -- if retcode: -- raise CalledProcessError(retcode, process.args, output=output) -- return output -- -- --def list2cmdline(seq): -- """ -- Translate a sequence of arguments into a command line -- string, using the same rules as the MS C runtime: -- -- 1) Arguments are delimited by white space, which is either a -- space or a tab. -- -- 2) A string surrounded by double quotation marks is -- interpreted as a single argument, regardless of white space -- contained within. A quoted string can be embedded in an -- argument. -- -- 3) A double quotation mark preceded by a backslash is -- interpreted as a literal double quotation mark. -- -- 4) Backslashes are interpreted literally, unless they -- immediately precede a double quotation mark. -- -- 5) If backslashes immediately precede a double quotation mark, -- every pair of backslashes is interpreted as a literal -- backslash. If the number of backslashes is odd, the last -- backslash escapes the next double quotation mark as -- described in rule 3. -- """ -- -- # See -- # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -- # or search http://msdn.microsoft.com for -- # "Parsing C++ Command-Line Arguments" -- result = [] -- needquote = False -- for arg in seq: -- bs_buf = [] -- -- # Add a space to separate this argument from the others -- if result: -- result.append(' ') -- -- needquote = (" " in arg) or ("\t" in arg) or not arg -- if needquote: -- result.append('"') -- -- for c in arg: -- if c == '\\': -- # Don't know if we need to double yet. -- bs_buf.append(c) -- elif c == '"': -- # Double backslashes. -- result.append('\\' * len(bs_buf)*2) -- bs_buf = [] -- result.append('\\"') -- else: -- # Normal char -- if bs_buf: -- result.extend(bs_buf) -- bs_buf = [] -- result.append(c) -- -- # Add remaining backslashes, if any. -- if bs_buf: -- result.extend(bs_buf) -- -- if needquote: -- result.extend(bs_buf) -- result.append('"') -- -- return ''.join(result) -- -- --# Various tools for executing commands and looking at their output and status. --# -- --def getstatusoutput(cmd): -- """ Return (status, output) of executing cmd in a shell. -+ if mswindows: -+ from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, -+ STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, -+ STD_ERROR_HANDLE, SW_HIDE, -+ STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) -+ -+ __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", -+ "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", -+ "STD_ERROR_HANDLE", "SW_HIDE", -+ "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) -+ -+ class Handle(int): -+ closed = False -+ -+ def Close(self, CloseHandle=_winapi.CloseHandle): -+ if not self.closed: -+ self.closed = True -+ CloseHandle(self) -+ -+ def Detach(self): -+ if not self.closed: -+ self.closed = True -+ return int(self) -+ raise ValueError("already closed") - -- Execute the string 'cmd' in a shell with 'check_output' and -- return a 2-tuple (status, output). Universal newlines mode is used, -- meaning that the result with be decoded to a string. -+ def __repr__(self): -+ return "Handle(%d)" % int(self) - -- A trailing newline is stripped from the output. -- The exit status for the command can be interpreted -- according to the rules for the function 'wait'. Example: -+ __del__ = Close -+ __str__ = __repr__ - -- >>> import subprocess -- >>> subprocess.getstatusoutput('ls /bin/ls') -- (0, '/bin/ls') -- >>> subprocess.getstatusoutput('cat /bin/junk') -- (256, 'cat: /bin/junk: No such file or directory') -- >>> subprocess.getstatusoutput('/bin/junk') -- (256, 'sh: /bin/junk: not found') -- """ - try: -- data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) -- status = 0 -- except CalledProcessError as ex: -- data = ex.output -- status = ex.returncode -- if data[-1:] == '\n': -- data = data[:-1] -- return status, data -- --def getoutput(cmd): -- """Return output (stdout or stderr) of executing cmd in a shell. -- -- Like getstatusoutput(), except the exit status is ignored and the return -- value is a string containing the command's output. Example: -- -- >>> import subprocess -- >>> subprocess.getoutput('ls /bin/ls') -- '/bin/ls' -- """ -- return getstatusoutput(cmd)[1] -- -- --_PLATFORM_DEFAULT_CLOSE_FDS = object() -- -- --class Popen(object): -- -- _child_created = False # Set here since __del__ checks it -- -- def __init__(self, args, bufsize=-1, executable=None, -- stdin=None, stdout=None, stderr=None, -- preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, -- shell=False, cwd=None, env=None, universal_newlines=False, -- startupinfo=None, creationflags=0, -- restore_signals=True, start_new_session=False, -- pass_fds=()): -- """Create new Popen instance.""" -- _cleanup() -- # Held while anything is calling waitpid before returncode has been -- # updated to prevent clobbering returncode if wait() or poll() are -- # called from multiple threads at once. After acquiring the lock, -- # code must re-check self.returncode to see if another thread just -- # finished a waitpid() call. -- self._waitpid_lock = threading.Lock() -- -- self._input = None -- self._communication_started = False -- if bufsize is None: -- bufsize = -1 # Restore default -- if not isinstance(bufsize, int): -- raise TypeError("bufsize must be an integer") -+ MAXFD = os.sysconf("SC_OPEN_MAX") -+ except: -+ MAXFD = 256 -+ -+ # This lists holds Popen instances for which the underlying process had not -+ # exited at the time its __del__ method got called: those processes are wait()ed -+ # for synchronously from _cleanup() when a new Popen object is created, to avoid -+ # zombie processes. -+ _active = [] -+ -+ def _cleanup(): -+ for inst in _active[:]: -+ res = inst._internal_poll(_deadstate=sys.maxsize) -+ if res is not None: -+ try: -+ _active.remove(inst) -+ except ValueError: -+ # This can happen if two threads create a new Popen instance. -+ # It's harmless that it was already removed, so ignore. -+ pass - -- if mswindows: -- if preexec_fn is not None: -- raise ValueError("preexec_fn is not supported on Windows " -- "platforms") -- any_stdio_set = (stdin is not None or stdout is not None or -- stderr is not None) -- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -- if any_stdio_set: -- close_fds = False -+ def _eintr_retry_call(func, *args): -+ while True: -+ try: -+ return func(*args) -+ except InterruptedError: -+ continue -+ -+ -+ # XXX This function is only used by multiprocessing and the test suite, -+ # but it's here so that it can be imported when Python is compiled without -+ # threads. -+ -+ def _args_from_interpreter_flags(): -+ """Return a list of command-line arguments reproducing the current -+ settings in sys.flags and sys.warnoptions.""" -+ flag_opt_map = { -+ 'debug': 'd', -+ # 'inspect': 'i', -+ # 'interactive': 'i', -+ 'optimize': 'O', -+ 'dont_write_bytecode': 'B', -+ 'no_user_site': 's', -+ 'no_site': 'S', -+ 'ignore_environment': 'E', -+ 'verbose': 'v', -+ 'bytes_warning': 'b', -+ 'quiet': 'q', -+ 'hash_randomization': 'R', -+ } -+ args = [] -+ for flag, opt in flag_opt_map.items(): -+ v = getattr(sys.flags, flag) -+ if v > 0: -+ if flag == 'hash_randomization': -+ v = 1 # Handle specification of an exact seed -+ args.append('-' + opt * v) -+ for opt in sys.warnoptions: -+ args.append('-W' + opt) -+ return args -+ -+ -+ def call(*popenargs, timeout=None, **kwargs): -+ """Run command with arguments. Wait for command to complete or -+ timeout, then return the returncode attribute. -+ -+ The arguments are the same as for the Popen constructor. Example: -+ -+ retcode = call(["ls", "-l"]) -+ """ -+ with Popen(*popenargs, **kwargs) as p: -+ try: -+ return p.wait(timeout=timeout) -+ except: -+ p.kill() -+ p.wait() -+ raise -+ -+ -+ def check_call(*popenargs, **kwargs): -+ """Run command with arguments. Wait for command to complete. If -+ the exit code was zero then return, otherwise raise -+ CalledProcessError. The CalledProcessError object will have the -+ return code in the returncode attribute. -+ -+ The arguments are the same as for the call function. Example: -+ -+ check_call(["ls", "-l"]) -+ """ -+ retcode = call(*popenargs, **kwargs) -+ if retcode: -+ cmd = kwargs.get("args") -+ if cmd is None: -+ cmd = popenargs[0] -+ raise CalledProcessError(retcode, cmd) -+ return 0 -+ -+ -+ def check_output(*popenargs, timeout=None, **kwargs): -+ r"""Run command with arguments and return its output. -+ -+ If the exit code was non-zero it raises a CalledProcessError. The -+ CalledProcessError object will have the return code in the returncode -+ attribute and output in the output attribute. -+ -+ The arguments are the same as for the Popen constructor. Example: -+ -+ >>> check_output(["ls", "-l", "/dev/null"]) -+ b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' -+ -+ The stdout argument is not allowed as it is used internally. -+ To capture standard error in the result, use stderr=STDOUT. -+ -+ >>> check_output(["/bin/sh", "-c", -+ ... "ls -l non_existent_file ; exit 0"], -+ ... stderr=STDOUT) -+ b'ls: non_existent_file: No such file or directory\n' -+ -+ There is an additional optional argument, "input", allowing you to -+ pass a string to the subprocess's stdin. If you use this argument -+ you may not also use the Popen constructor's "stdin" argument, as -+ it too will be used internally. Example: -+ -+ >>> check_output(["sed", "-e", "s/foo/bar/"], -+ ... input=b"when in the course of fooman events\n") -+ b'when in the course of barman events\n' -+ -+ If universal_newlines=True is passed, the return value will be a -+ string rather than bytes. -+ """ -+ if 'stdout' in kwargs: -+ raise ValueError('stdout argument not allowed, it will be overridden.') -+ if 'input' in kwargs: -+ if 'stdin' in kwargs: -+ raise ValueError('stdin and input arguments may not both be used.') -+ inputdata = kwargs['input'] -+ del kwargs['input'] -+ kwargs['stdin'] = PIPE -+ else: -+ inputdata = None -+ with Popen(*popenargs, stdout=PIPE, **kwargs) as process: -+ try: -+ output, unused_err = process.communicate(inputdata, timeout=timeout) -+ except TimeoutExpired: -+ process.kill() -+ output, unused_err = process.communicate() -+ raise TimeoutExpired(process.args, timeout, output=output) -+ except: -+ process.kill() -+ process.wait() -+ raise -+ retcode = process.poll() -+ if retcode: -+ raise CalledProcessError(retcode, process.args, output=output) -+ return output -+ -+ -+ def list2cmdline(seq): -+ """ -+ Translate a sequence of arguments into a command line -+ string, using the same rules as the MS C runtime: -+ -+ 1) Arguments are delimited by white space, which is either a -+ space or a tab. -+ -+ 2) A string surrounded by double quotation marks is -+ interpreted as a single argument, regardless of white space -+ contained within. A quoted string can be embedded in an -+ argument. -+ -+ 3) A double quotation mark preceded by a backslash is -+ interpreted as a literal double quotation mark. -+ -+ 4) Backslashes are interpreted literally, unless they -+ immediately precede a double quotation mark. -+ -+ 5) If backslashes immediately precede a double quotation mark, -+ every pair of backslashes is interpreted as a literal -+ backslash. If the number of backslashes is odd, the last -+ backslash escapes the next double quotation mark as -+ described in rule 3. -+ """ -+ -+ # See -+ # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx -+ # or search http://msdn.microsoft.com for -+ # "Parsing C++ Command-Line Arguments" -+ result = [] -+ needquote = False -+ for arg in seq: -+ bs_buf = [] -+ -+ # Add a space to separate this argument from the others -+ if result: -+ result.append(' ') -+ -+ needquote = (" " in arg) or ("\t" in arg) or not arg -+ if needquote: -+ result.append('"') -+ -+ for c in arg: -+ if c == '\\': -+ # Don't know if we need to double yet. -+ bs_buf.append(c) -+ elif c == '"': -+ # Double backslashes. -+ result.append('\\' * len(bs_buf)*2) -+ bs_buf = [] -+ result.append('\\"') - else: -+ # Normal char -+ if bs_buf: -+ result.extend(bs_buf) -+ bs_buf = [] -+ result.append(c) -+ -+ # Add remaining backslashes, if any. -+ if bs_buf: -+ result.extend(bs_buf) -+ -+ if needquote: -+ result.extend(bs_buf) -+ result.append('"') -+ -+ return ''.join(result) -+ -+ -+ # Various tools for executing commands and looking at their output and status. -+ # -+ -+ def getstatusoutput(cmd): -+ """ Return (status, output) of executing cmd in a shell. -+ -+ Execute the string 'cmd' in a shell with 'check_output' and -+ return a 2-tuple (status, output). Universal newlines mode is used, -+ meaning that the result with be decoded to a string. -+ -+ A trailing newline is stripped from the output. -+ The exit status for the command can be interpreted -+ according to the rules for the function 'wait'. Example: -+ -+ >>> import subprocess -+ >>> subprocess.getstatusoutput('ls /bin/ls') -+ (0, '/bin/ls') -+ >>> subprocess.getstatusoutput('cat /bin/junk') -+ (256, 'cat: /bin/junk: No such file or directory') -+ >>> subprocess.getstatusoutput('/bin/junk') -+ (256, 'sh: /bin/junk: not found') -+ """ -+ try: -+ data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) -+ status = 0 -+ except CalledProcessError as ex: -+ data = ex.output -+ status = ex.returncode -+ if data[-1:] == '\n': -+ data = data[:-1] -+ return status, data -+ -+ def getoutput(cmd): -+ """Return output (stdout or stderr) of executing cmd in a shell. -+ -+ Like getstatusoutput(), except the exit status is ignored and the return -+ value is a string containing the command's output. Example: -+ -+ >>> import subprocess -+ >>> subprocess.getoutput('ls /bin/ls') -+ '/bin/ls' -+ """ -+ return getstatusoutput(cmd)[1] -+ -+ _PLATFORM_DEFAULT_CLOSE_FDS = object() -+ -+ class Popen(object): -+ -+ _child_created = False # Set here since __del__ checks it -+ -+ def __init__(self, args, bufsize=-1, executable=None, -+ stdin=None, stdout=None, stderr=None, -+ preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, -+ shell=False, cwd=None, env=None, universal_newlines=False, -+ startupinfo=None, creationflags=0, -+ restore_signals=True, start_new_session=False, -+ pass_fds=()): -+ """Create new Popen instance.""" -+ _cleanup() -+ # Held while anything is calling waitpid before returncode has been -+ # updated to prevent clobbering returncode if wait() or poll() are -+ # called from multiple threads at once. After acquiring the lock, -+ # code must re-check self.returncode to see if another thread just -+ # finished a waitpid() call. -+ self._waitpid_lock = threading.Lock() -+ -+ self._input = None -+ self._communication_started = False -+ if bufsize is None: -+ bufsize = -1 # Restore default -+ if not isinstance(bufsize, int): -+ raise TypeError("bufsize must be an integer") -+ -+ if mswindows: -+ if preexec_fn is not None: -+ raise ValueError("preexec_fn is not supported on Windows " -+ "platforms") -+ any_stdio_set = (stdin is not None or stdout is not None or -+ stderr is not None) -+ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -+ if any_stdio_set: -+ close_fds = False -+ else: -+ close_fds = True -+ elif close_fds and any_stdio_set: -+ raise ValueError( -+ "close_fds is not supported on Windows platforms" -+ " if you redirect stdin/stdout/stderr") -+ else: -+ # POSIX -+ if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: - close_fds = True -- elif close_fds and any_stdio_set: -- raise ValueError( -- "close_fds is not supported on Windows platforms" -- " if you redirect stdin/stdout/stderr") -- else: -- # POSIX -- if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: -- close_fds = True -- if pass_fds and not close_fds: -- warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) -- close_fds = True -- if startupinfo is not None: -- raise ValueError("startupinfo is only supported on Windows " -- "platforms") -- if creationflags != 0: -- raise ValueError("creationflags is only supported on Windows " -- "platforms") -- -- self.args = args -- self.stdin = None -- self.stdout = None -- self.stderr = None -- self.pid = None -- self.returncode = None -- self.universal_newlines = universal_newlines -- -- # Input and output objects. The general principle is like -- # this: -- # -- # Parent Child -- # ------ ----- -- # p2cwrite ---stdin---> p2cread -- # c2pread <--stdout--- c2pwrite -- # errread <--stderr--- errwrite -- # -- # On POSIX, the child objects are file descriptors. On -- # Windows, these are Windows file handles. The parent objects -- # are file descriptors on both platforms. The parent objects -- # are -1 when not using PIPEs. The child objects are -1 -- # when not redirecting. -- -- (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) = self._get_handles(stdin, stdout, stderr) -- -- # We wrap OS handles *before* launching the child, otherwise a -- # quickly terminating child could make our fds unwrappable -- # (see #8458). -+ if pass_fds and not close_fds: -+ warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) -+ close_fds = True -+ if startupinfo is not None: -+ raise ValueError("startupinfo is only supported on Windows " -+ "platforms") -+ if creationflags != 0: -+ raise ValueError("creationflags is only supported on Windows " -+ "platforms") -+ -+ self.args = args -+ self.stdin = None -+ self.stdout = None -+ self.stderr = None -+ self.pid = None -+ self.returncode = None -+ self.universal_newlines = universal_newlines -+ -+ # Input and output objects. The general principle is like -+ # this: -+ # -+ # Parent Child -+ # ------ ----- -+ # p2cwrite ---stdin---> p2cread -+ # c2pread <--stdout--- c2pwrite -+ # errread <--stderr--- errwrite -+ # -+ # On POSIX, the child objects are file descriptors. On -+ # Windows, these are Windows file handles. The parent objects -+ # are file descriptors on both platforms. The parent objects -+ # are -1 when not using PIPEs. The child objects are -1 -+ # when not redirecting. -+ -+ (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) = self._get_handles(stdin, stdout, stderr) -+ -+ # We wrap OS handles *before* launching the child, otherwise a -+ # quickly terminating child could make our fds unwrappable -+ # (see #8458). -+ -+ if mswindows: -+ if p2cwrite != -1: -+ p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) -+ if c2pread != -1: -+ c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) -+ if errread != -1: -+ errread = msvcrt.open_osfhandle(errread.Detach(), 0) - -- if mswindows: - if p2cwrite != -1: -- p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) -+ self.stdin = io.open(p2cwrite, 'wb', bufsize) -+ if universal_newlines: -+ self.stdin = io.TextIOWrapper(self.stdin, write_through=True) - if c2pread != -1: -- c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) -+ self.stdout = io.open(c2pread, 'rb', bufsize) -+ if universal_newlines: -+ self.stdout = io.TextIOWrapper(self.stdout) - if errread != -1: -- errread = msvcrt.open_osfhandle(errread.Detach(), 0) -- -- if p2cwrite != -1: -- self.stdin = io.open(p2cwrite, 'wb', bufsize) -- if universal_newlines: -- self.stdin = io.TextIOWrapper(self.stdin, write_through=True) -- if c2pread != -1: -- self.stdout = io.open(c2pread, 'rb', bufsize) -- if universal_newlines: -- self.stdout = io.TextIOWrapper(self.stdout) -- if errread != -1: -- self.stderr = io.open(errread, 'rb', bufsize) -- if universal_newlines: -- self.stderr = io.TextIOWrapper(self.stderr) -+ self.stderr = io.open(errread, 'rb', bufsize) -+ if universal_newlines: -+ self.stderr = io.TextIOWrapper(self.stderr) - -- self._closed_child_pipe_fds = False -- try: -- self._execute_child(args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- restore_signals, start_new_session) -- except: -- # Cleanup if the child failed starting. -- for f in filter(None, (self.stdin, self.stdout, self.stderr)): -- try: -- f.close() -- except OSError: -- pass # Ignore EBADF or other errors. -- -- if not self._closed_child_pipe_fds: -- to_close = [] -- if stdin == PIPE: -- to_close.append(p2cread) -- if stdout == PIPE: -- to_close.append(c2pwrite) -- if stderr == PIPE: -- to_close.append(errwrite) -- if hasattr(self, '_devnull'): -- to_close.append(self._devnull) -- for fd in to_close: -+ self._closed_child_pipe_fds = False -+ try: -+ self._execute_child(args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ restore_signals, start_new_session) -+ except: -+ # Cleanup if the child failed starting. -+ for f in filter(None, (self.stdin, self.stdout, self.stderr)): - try: -- os.close(fd) -+ f.close() - except OSError: -- pass -+ pass # Ignore EBADF or other errors. - -- raise -+ if not self._closed_child_pipe_fds: -+ to_close = [] -+ if stdin == PIPE: -+ to_close.append(p2cread) -+ if stdout == PIPE: -+ to_close.append(c2pwrite) -+ if stderr == PIPE: -+ to_close.append(errwrite) -+ if hasattr(self, '_devnull'): -+ to_close.append(self._devnull) -+ for fd in to_close: -+ try: -+ os.close(fd) -+ except OSError: -+ pass - -+ raise - -- def _translate_newlines(self, data, encoding): -- data = data.decode(encoding) -- return data.replace("\r\n", "\n").replace("\r", "\n") -- -- def __enter__(self): -- return self -- -- def __exit__(self, type, value, traceback): -- if self.stdout: -- self.stdout.close() -- if self.stderr: -- self.stderr.close() -- if self.stdin: -- self.stdin.close() -- # Wait for the process to terminate, to avoid zombies. -- self.wait() -- -- def __del__(self, _maxsize=sys.maxsize): -- if not self._child_created: -- # We didn't get to successfully create a child process. -- return -- # In case the child hasn't been waited on, check if it's done. -- self._internal_poll(_deadstate=_maxsize) -- if self.returncode is None and _active is not None: -- # Child is still running, keep us alive until we can wait on it. -- _active.append(self) -- -- def _get_devnull(self): -- if not hasattr(self, '_devnull'): -- self._devnull = os.open(os.devnull, os.O_RDWR) -- return self._devnull -- -- def communicate(self, input=None, timeout=None): -- """Interact with process: Send data to stdin. Read data from -- stdout and stderr, until end-of-file is reached. Wait for -- process to terminate. The optional input argument should be -- bytes to be sent to the child process, or None, if no data -- should be sent to the child. -- -- communicate() returns a tuple (stdout, stderr).""" -- -- if self._communication_started and input: -- raise ValueError("Cannot send input after starting communication") -- -- # Optimization: If we are not worried about timeouts, we haven't -- # started communicating, and we have one or zero pipes, using select() -- # or threads is unnecessary. -- if (timeout is None and not self._communication_started and -- [self.stdin, self.stdout, self.stderr].count(None) >= 2): -- stdout = None -- stderr = None -- if self.stdin: -- if input: -- try: -- self.stdin.write(input) -- except OSError as e: -- if e.errno != errno.EPIPE and e.errno != errno.EINVAL: -- raise -- self.stdin.close() -- elif self.stdout: -- stdout = _eintr_retry_call(self.stdout.read) -- self.stdout.close() -- elif self.stderr: -- stderr = _eintr_retry_call(self.stderr.read) -- self.stderr.close() -- self.wait() -- else: -- if timeout is not None: -- endtime = _time() + timeout -- else: -- endtime = None - -- try: -- stdout, stderr = self._communicate(input, endtime, timeout) -- finally: -- self._communication_started = True -+ def _translate_newlines(self, data, encoding): -+ data = data.decode(encoding) -+ return data.replace("\r\n", "\n").replace("\r", "\n") - -- sts = self.wait(timeout=self._remaining_time(endtime)) -+ def __enter__(self): -+ return self - -- return (stdout, stderr) -+ def __exit__(self, type, value, traceback): -+ if self.stdout: -+ self.stdout.close() -+ if self.stderr: -+ self.stderr.close() -+ if self.stdin: -+ self.stdin.close() -+ # Wait for the process to terminate, to avoid zombies. -+ self.wait() - -+ def __del__(self, _maxsize=sys.maxsize): -+ if not self._child_created: -+ # We didn't get to successfully create a child process. -+ return -+ # In case the child hasn't been waited on, check if it's done. -+ self._internal_poll(_deadstate=_maxsize) -+ if self.returncode is None and _active is not None: -+ # Child is still running, keep us alive until we can wait on it. -+ _active.append(self) -+ -+ def _get_devnull(self): -+ if not hasattr(self, '_devnull'): -+ self._devnull = os.open(os.devnull, os.O_RDWR) -+ return self._devnull -+ -+ def communicate(self, input=None, timeout=None): -+ """Interact with process: Send data to stdin. Read data from -+ stdout and stderr, until end-of-file is reached. Wait for -+ process to terminate. The optional input argument should be -+ bytes to be sent to the child process, or None, if no data -+ should be sent to the child. -+ -+ communicate() returns a tuple (stdout, stderr).""" -+ -+ if self._communication_started and input: -+ raise ValueError("Cannot send input after starting communication") -+ -+ # Optimization: If we are not worried about timeouts, we haven't -+ # started communicating, and we have one or zero pipes, using select() -+ # or threads is unnecessary. -+ if (timeout is None and not self._communication_started and -+ [self.stdin, self.stdout, self.stderr].count(None) >= 2): -+ stdout = None -+ stderr = None -+ if self.stdin: -+ if input: -+ try: -+ self.stdin.write(input) -+ except OSError as e: -+ if e.errno != errno.EPIPE and e.errno != errno.EINVAL: -+ raise -+ self.stdin.close() -+ elif self.stdout: -+ stdout = _eintr_retry_call(self.stdout.read) -+ self.stdout.close() -+ elif self.stderr: -+ stderr = _eintr_retry_call(self.stderr.read) -+ self.stderr.close() -+ self.wait() -+ else: -+ if timeout is not None: -+ endtime = _time() + timeout -+ else: -+ endtime = None - -- def poll(self): -- return self._internal_poll() -+ try: -+ stdout, stderr = self._communicate(input, endtime, timeout) -+ finally: -+ self._communication_started = True - -+ sts = self.wait(timeout=self._remaining_time(endtime)) - -- def _remaining_time(self, endtime): -- """Convenience for _communicate when computing timeouts.""" -- if endtime is None: -- return None -- else: -- return endtime - _time() -+ return (stdout, stderr) - - -- def _check_timeout(self, endtime, orig_timeout): -- """Convenience for checking if a timeout has expired.""" -- if endtime is None: -- return -- if _time() > endtime: -- raise TimeoutExpired(self.args, orig_timeout) -+ def poll(self): -+ return self._internal_poll() - - -- if mswindows: -- # -- # Windows methods -- # -- def _get_handles(self, stdin, stdout, stderr): -- """Construct and return tuple with IO objects: -- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -- """ -- if stdin is None and stdout is None and stderr is None: -- return (-1, -1, -1, -1, -1, -1) -- -- p2cread, p2cwrite = -1, -1 -- c2pread, c2pwrite = -1, -1 -- errread, errwrite = -1, -1 -- -- if stdin is None: -- p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) -- if p2cread is None: -- p2cread, _ = _winapi.CreatePipe(None, 0) -- p2cread = Handle(p2cread) -- _winapi.CloseHandle(_) -- elif stdin == PIPE: -- p2cread, p2cwrite = _winapi.CreatePipe(None, 0) -- p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) -- elif stdin == DEVNULL: -- p2cread = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stdin, int): -- p2cread = msvcrt.get_osfhandle(stdin) -+ def _remaining_time(self, endtime): -+ """Convenience for _communicate when computing timeouts.""" -+ if endtime is None: -+ return None - else: -- # Assuming file-like object -- p2cread = msvcrt.get_osfhandle(stdin.fileno()) -- p2cread = self._make_inheritable(p2cread) -- -- if stdout is None: -- c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) -- if c2pwrite is None: -- _, c2pwrite = _winapi.CreatePipe(None, 0) -- c2pwrite = Handle(c2pwrite) -- _winapi.CloseHandle(_) -- elif stdout == PIPE: -- c2pread, c2pwrite = _winapi.CreatePipe(None, 0) -- c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) -- elif stdout == DEVNULL: -- c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stdout, int): -- c2pwrite = msvcrt.get_osfhandle(stdout) -- else: -- # Assuming file-like object -- c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) -- c2pwrite = self._make_inheritable(c2pwrite) -- -- if stderr is None: -- errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) -- if errwrite is None: -- _, errwrite = _winapi.CreatePipe(None, 0) -- errwrite = Handle(errwrite) -- _winapi.CloseHandle(_) -- elif stderr == PIPE: -- errread, errwrite = _winapi.CreatePipe(None, 0) -- errread, errwrite = Handle(errread), Handle(errwrite) -- elif stderr == STDOUT: -- errwrite = c2pwrite -- elif stderr == DEVNULL: -- errwrite = msvcrt.get_osfhandle(self._get_devnull()) -- elif isinstance(stderr, int): -- errwrite = msvcrt.get_osfhandle(stderr) -- else: -- # Assuming file-like object -- errwrite = msvcrt.get_osfhandle(stderr.fileno()) -- errwrite = self._make_inheritable(errwrite) -- -- return (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- -- def _make_inheritable(self, handle): -- """Return a duplicate of handle, which is inheritable""" -- h = _winapi.DuplicateHandle( -- _winapi.GetCurrentProcess(), handle, -- _winapi.GetCurrentProcess(), 0, 1, -- _winapi.DUPLICATE_SAME_ACCESS) -- return Handle(h) -- -- -- def _execute_child(self, args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- unused_restore_signals, unused_start_new_session): -- """Execute program (MS Windows version)""" -- -- assert not pass_fds, "pass_fds not supported on Windows." -- -- if not isinstance(args, str): -- args = list2cmdline(args) -- -- # Process startup details -- if startupinfo is None: -- startupinfo = STARTUPINFO() -- if -1 not in (p2cread, c2pwrite, errwrite): -- startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES -- startupinfo.hStdInput = p2cread -- startupinfo.hStdOutput = c2pwrite -- startupinfo.hStdError = errwrite -- -- if shell: -- startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW -- startupinfo.wShowWindow = _winapi.SW_HIDE -- comspec = os.environ.get("COMSPEC", "cmd.exe") -- args = '{} /c "{}"'.format (comspec, args) -+ return endtime - _time() - -- # Start the process -- try: -- hp, ht, pid, tid = _winapi.CreateProcess(executable, args, -- # no special security -- None, None, -- int(not close_fds), -- creationflags, -- env, -- cwd, -- startupinfo) -- finally: -- # Child is launched. Close the parent's copy of those pipe -- # handles that only the child should have open. You need -- # to make sure that no handles to the write end of the -- # output pipe are maintained in this process or else the -- # pipe will not close when the child process exits and the -- # ReadFile will hang. -- if p2cread != -1: -- p2cread.Close() -- if c2pwrite != -1: -- c2pwrite.Close() -- if errwrite != -1: -- errwrite.Close() -- if hasattr(self, '_devnull'): -- os.close(self._devnull) -- -- # Retain the process handle, but close the thread handle -- self._child_created = True -- self._handle = Handle(hp) -- self.pid = pid -- _winapi.CloseHandle(ht) -- -- def _internal_poll(self, _deadstate=None, -- _WaitForSingleObject=_winapi.WaitForSingleObject, -- _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, -- _GetExitCodeProcess=_winapi.GetExitCodeProcess): -- """Check if child process has terminated. Returns returncode -- attribute. -- -- This method is called by __del__, so it can only refer to objects -- in its local scope. -- -- """ -- if self.returncode is None: -- if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: -- self.returncode = _GetExitCodeProcess(self._handle) -- return self.returncode -- -- -- def wait(self, timeout=None, endtime=None): -- """Wait for child process to terminate. Returns returncode -- attribute.""" -- if endtime is not None: -- timeout = self._remaining_time(endtime) -- if timeout is None: -- timeout_millis = _winapi.INFINITE -- else: -- timeout_millis = int(timeout * 1000) -- if self.returncode is None: -- result = _winapi.WaitForSingleObject(self._handle, -- timeout_millis) -- if result == _winapi.WAIT_TIMEOUT: -- raise TimeoutExpired(self.args, timeout) -- self.returncode = _winapi.GetExitCodeProcess(self._handle) -- return self.returncode -- -- -- def _readerthread(self, fh, buffer): -- buffer.append(fh.read()) -- fh.close() -- -- -- def _communicate(self, input, endtime, orig_timeout): -- # Start reader threads feeding into a list hanging off of this -- # object, unless they've already been started. -- if self.stdout and not hasattr(self, "_stdout_buff"): -- self._stdout_buff = [] -- self.stdout_thread = \ -- threading.Thread(target=self._readerthread, -- args=(self.stdout, self._stdout_buff)) -- self.stdout_thread.daemon = True -- self.stdout_thread.start() -- if self.stderr and not hasattr(self, "_stderr_buff"): -- self._stderr_buff = [] -- self.stderr_thread = \ -- threading.Thread(target=self._readerthread, -- args=(self.stderr, self._stderr_buff)) -- self.stderr_thread.daemon = True -- self.stderr_thread.start() - -- if self.stdin: -- if input is not None: -- try: -- self.stdin.write(input) -- except OSError as e: -- if e.errno == errno.EPIPE: -- # communicate() should ignore pipe full error -- pass -- elif (e.errno == errno.EINVAL -- and self.poll() is not None): -- # Issue #19612: stdin.write() fails with EINVAL -- # if the process already exited before the write -- pass -- else: -- raise -- self.stdin.close() -+ def _check_timeout(self, endtime, orig_timeout): -+ """Convenience for checking if a timeout has expired.""" -+ if endtime is None: -+ return -+ if _time() > endtime: -+ raise TimeoutExpired(self.args, orig_timeout) - -- # Wait for the reader threads, or time out. If we time out, the -- # threads remain reading and the fds left open in case the user -- # calls communicate again. -- if self.stdout is not None: -- self.stdout_thread.join(self._remaining_time(endtime)) -- if self.stdout_thread.is_alive(): -- raise TimeoutExpired(self.args, orig_timeout) -- if self.stderr is not None: -- self.stderr_thread.join(self._remaining_time(endtime)) -- if self.stderr_thread.is_alive(): -- raise TimeoutExpired(self.args, orig_timeout) -- -- # Collect the output from and close both pipes, now that we know -- # both have been read successfully. -- stdout = None -- stderr = None -- if self.stdout: -- stdout = self._stdout_buff -- self.stdout.close() -- if self.stderr: -- stderr = self._stderr_buff -- self.stderr.close() - -- # All data exchanged. Translate lists into strings. -- if stdout is not None: -- stdout = stdout[0] -- if stderr is not None: -- stderr = stderr[0] -+ if mswindows: -+ # -+ # Windows methods -+ # -+ def _get_handles(self, stdin, stdout, stderr): -+ """Construct and return tuple with IO objects: -+ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -+ """ -+ if stdin is None and stdout is None and stderr is None: -+ return (-1, -1, -1, -1, -1, -1) -+ -+ p2cread, p2cwrite = -1, -1 -+ c2pread, c2pwrite = -1, -1 -+ errread, errwrite = -1, -1 -+ -+ if stdin is None: -+ p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) -+ if p2cread is None: -+ p2cread, _ = _winapi.CreatePipe(None, 0) -+ p2cread = Handle(p2cread) -+ _winapi.CloseHandle(_) -+ elif stdin == PIPE: -+ p2cread, p2cwrite = _winapi.CreatePipe(None, 0) -+ p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) -+ elif stdin == DEVNULL: -+ p2cread = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stdin, int): -+ p2cread = msvcrt.get_osfhandle(stdin) -+ else: -+ # Assuming file-like object -+ p2cread = msvcrt.get_osfhandle(stdin.fileno()) -+ p2cread = self._make_inheritable(p2cread) -+ -+ if stdout is None: -+ c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) -+ if c2pwrite is None: -+ _, c2pwrite = _winapi.CreatePipe(None, 0) -+ c2pwrite = Handle(c2pwrite) -+ _winapi.CloseHandle(_) -+ elif stdout == PIPE: -+ c2pread, c2pwrite = _winapi.CreatePipe(None, 0) -+ c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) -+ elif stdout == DEVNULL: -+ c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stdout, int): -+ c2pwrite = msvcrt.get_osfhandle(stdout) -+ else: -+ # Assuming file-like object -+ c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) -+ c2pwrite = self._make_inheritable(c2pwrite) -+ -+ if stderr is None: -+ errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) -+ if errwrite is None: -+ _, errwrite = _winapi.CreatePipe(None, 0) -+ errwrite = Handle(errwrite) -+ _winapi.CloseHandle(_) -+ elif stderr == PIPE: -+ errread, errwrite = _winapi.CreatePipe(None, 0) -+ errread, errwrite = Handle(errread), Handle(errwrite) -+ elif stderr == STDOUT: -+ errwrite = c2pwrite -+ elif stderr == DEVNULL: -+ errwrite = msvcrt.get_osfhandle(self._get_devnull()) -+ elif isinstance(stderr, int): -+ errwrite = msvcrt.get_osfhandle(stderr) -+ else: -+ # Assuming file-like object -+ errwrite = msvcrt.get_osfhandle(stderr.fileno()) -+ errwrite = self._make_inheritable(errwrite) -+ -+ return (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) -+ -+ -+ def _make_inheritable(self, handle): -+ """Return a duplicate of handle, which is inheritable""" -+ h = _winapi.DuplicateHandle( -+ _winapi.GetCurrentProcess(), handle, -+ _winapi.GetCurrentProcess(), 0, 1, -+ _winapi.DUPLICATE_SAME_ACCESS) -+ return Handle(h) -+ -+ -+ def _execute_child(self, args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ unused_restore_signals, unused_start_new_session): -+ """Execute program (MS Windows version)""" -+ -+ assert not pass_fds, "pass_fds not supported on Windows." -+ -+ if not isinstance(args, str): -+ args = list2cmdline(args) -+ -+ # Process startup details -+ if startupinfo is None: -+ startupinfo = STARTUPINFO() -+ if -1 not in (p2cread, c2pwrite, errwrite): -+ startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES -+ startupinfo.hStdInput = p2cread -+ startupinfo.hStdOutput = c2pwrite -+ startupinfo.hStdError = errwrite -+ -+ if shell: -+ startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW -+ startupinfo.wShowWindow = _winapi.SW_HIDE -+ comspec = os.environ.get("COMSPEC", "cmd.exe") -+ args = '{} /c "{}"'.format (comspec, args) - -- return (stdout, stderr) -+ # Start the process -+ try: -+ hp, ht, pid, tid = _winapi.CreateProcess(executable, args, -+ # no special security -+ None, None, -+ int(not close_fds), -+ creationflags, -+ env, -+ cwd, -+ startupinfo) -+ finally: -+ # Child is launched. Close the parent's copy of those pipe -+ # handles that only the child should have open. You need -+ # to make sure that no handles to the write end of the -+ # output pipe are maintained in this process or else the -+ # pipe will not close when the child process exits and the -+ # ReadFile will hang. -+ if p2cread != -1: -+ p2cread.Close() -+ if c2pwrite != -1: -+ c2pwrite.Close() -+ if errwrite != -1: -+ errwrite.Close() -+ if hasattr(self, '_devnull'): -+ os.close(self._devnull) -+ -+ # Retain the process handle, but close the thread handle -+ self._child_created = True -+ self._handle = Handle(hp) -+ self.pid = pid -+ _winapi.CloseHandle(ht) -+ -+ def _internal_poll(self, _deadstate=None, -+ _WaitForSingleObject=_winapi.WaitForSingleObject, -+ _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, -+ _GetExitCodeProcess=_winapi.GetExitCodeProcess): -+ """Check if child process has terminated. Returns returncode -+ attribute. -+ -+ This method is called by __del__, so it can only refer to objects -+ in its local scope. -+ -+ """ -+ if self.returncode is None: -+ if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: -+ self.returncode = _GetExitCodeProcess(self._handle) -+ return self.returncode - -- def send_signal(self, sig): -- """Send a signal to the process -- """ -- if sig == signal.SIGTERM: -- self.terminate() -- elif sig == signal.CTRL_C_EVENT: -- os.kill(self.pid, signal.CTRL_C_EVENT) -- elif sig == signal.CTRL_BREAK_EVENT: -- os.kill(self.pid, signal.CTRL_BREAK_EVENT) -- else: -- raise ValueError("Unsupported signal: {}".format(sig)) - -- def terminate(self): -- """Terminates the process -- """ -- try: -- _winapi.TerminateProcess(self._handle, 1) -- except PermissionError: -- # ERROR_ACCESS_DENIED (winerror 5) is received when the -- # process already died. -- rc = _winapi.GetExitCodeProcess(self._handle) -- if rc == _winapi.STILL_ACTIVE: -- raise -- self.returncode = rc -+ def wait(self, timeout=None, endtime=None): -+ """Wait for child process to terminate. Returns returncode -+ attribute.""" -+ if endtime is not None: -+ timeout = self._remaining_time(endtime) -+ if timeout is None: -+ timeout_millis = _winapi.INFINITE -+ else: -+ timeout_millis = int(timeout * 1000) -+ if self.returncode is None: -+ result = _winapi.WaitForSingleObject(self._handle, -+ timeout_millis) -+ if result == _winapi.WAIT_TIMEOUT: -+ raise TimeoutExpired(self.args, timeout) -+ self.returncode = _winapi.GetExitCodeProcess(self._handle) -+ return self.returncode - -- kill = terminate - -- else: -- # -- # POSIX methods -- # -- def _get_handles(self, stdin, stdout, stderr): -- """Construct and return tuple with IO objects: -- p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -- """ -- p2cread, p2cwrite = -1, -1 -- c2pread, c2pwrite = -1, -1 -- errread, errwrite = -1, -1 -- -- if stdin is None: -- pass -- elif stdin == PIPE: -- p2cread, p2cwrite = os.pipe() -- elif stdin == DEVNULL: -- p2cread = self._get_devnull() -- elif isinstance(stdin, int): -- p2cread = stdin -- else: -- # Assuming file-like object -- p2cread = stdin.fileno() -+ def _readerthread(self, fh, buffer): -+ buffer.append(fh.read()) -+ fh.close() -+ -+ -+ def _communicate(self, input, endtime, orig_timeout): -+ # Start reader threads feeding into a list hanging off of this -+ # object, unless they've already been started. -+ if self.stdout and not hasattr(self, "_stdout_buff"): -+ self._stdout_buff = [] -+ self.stdout_thread = \ -+ threading.Thread(target=self._readerthread, -+ args=(self.stdout, self._stdout_buff)) -+ self.stdout_thread.daemon = True -+ self.stdout_thread.start() -+ if self.stderr and not hasattr(self, "_stderr_buff"): -+ self._stderr_buff = [] -+ self.stderr_thread = \ -+ threading.Thread(target=self._readerthread, -+ args=(self.stderr, self._stderr_buff)) -+ self.stderr_thread.daemon = True -+ self.stderr_thread.start() - -- if stdout is None: -- pass -- elif stdout == PIPE: -- c2pread, c2pwrite = os.pipe() -- elif stdout == DEVNULL: -- c2pwrite = self._get_devnull() -- elif isinstance(stdout, int): -- c2pwrite = stdout -- else: -- # Assuming file-like object -- c2pwrite = stdout.fileno() -+ if self.stdin: -+ if input is not None: -+ try: -+ self.stdin.write(input) -+ except OSError as e: -+ if e.errno == errno.EPIPE: -+ # communicate() should ignore pipe full error -+ pass -+ elif (e.errno == errno.EINVAL -+ and self.poll() is not None): -+ # Issue #19612: stdin.write() fails with EINVAL -+ # if the process already exited before the write -+ pass -+ else: -+ raise -+ self.stdin.close() - -- if stderr is None: -- pass -- elif stderr == PIPE: -- errread, errwrite = os.pipe() -- elif stderr == STDOUT: -- errwrite = c2pwrite -- elif stderr == DEVNULL: -- errwrite = self._get_devnull() -- elif isinstance(stderr, int): -- errwrite = stderr -- else: -- # Assuming file-like object -- errwrite = stderr.fileno() -+ # Wait for the reader threads, or time out. If we time out, the -+ # threads remain reading and the fds left open in case the user -+ # calls communicate again. -+ if self.stdout is not None: -+ self.stdout_thread.join(self._remaining_time(endtime)) -+ if self.stdout_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) -+ if self.stderr is not None: -+ self.stderr_thread.join(self._remaining_time(endtime)) -+ if self.stderr_thread.is_alive(): -+ raise TimeoutExpired(self.args, orig_timeout) - -- return (p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite) -- -- -- def _close_fds(self, fds_to_keep): -- start_fd = 3 -- for fd in sorted(fds_to_keep): -- if fd >= start_fd: -- os.closerange(start_fd, fd) -- start_fd = fd + 1 -- if start_fd <= MAXFD: -- os.closerange(start_fd, MAXFD) -- -- -- def _execute_child(self, args, executable, preexec_fn, close_fds, -- pass_fds, cwd, env, -- startupinfo, creationflags, shell, -- p2cread, p2cwrite, -- c2pread, c2pwrite, -- errread, errwrite, -- restore_signals, start_new_session): -- """Execute program (POSIX version)""" -+ # Collect the output from and close both pipes, now that we know -+ # both have been read successfully. -+ stdout = None -+ stderr = None -+ if self.stdout: -+ stdout = self._stdout_buff -+ self.stdout.close() -+ if self.stderr: -+ stderr = self._stderr_buff -+ self.stderr.close() - -- if isinstance(args, (str, bytes)): -- args = [args] -- else: -- args = list(args) -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = stdout[0] -+ if stderr is not None: -+ stderr = stderr[0] - -- if shell: -- args = ["/bin/sh", "-c"] + args -- if executable: -- args[0] = executable -- -- if executable is None: -- executable = args[0] -- orig_executable = executable -- -- # For transferring possible exec failure from child to parent. -- # Data format: "exception name:hex errno:description" -- # Pickle is not used; it is complex and involves memory allocation. -- errpipe_read, errpipe_write = os.pipe() -- # errpipe_write must not be in the standard io 0, 1, or 2 fd range. -- low_fds_to_close = [] -- while errpipe_write < 3: -- low_fds_to_close.append(errpipe_write) -- errpipe_write = os.dup(errpipe_write) -- for low_fd in low_fds_to_close: -- os.close(low_fd) -- try: -- try: -- # We must avoid complex work that could involve -- # malloc or free in the child process to avoid -- # potential deadlocks, thus we do all this here. -- # and pass it to fork_exec() -- -- if env is not None: -- env_list = [os.fsencode(k) + b'=' + os.fsencode(v) -- for k, v in env.items()] -- else: -- env_list = None # Use execv instead of execve. -- executable = os.fsencode(executable) -- if os.path.dirname(executable): -- executable_list = (executable,) -- else: -- # This matches the behavior of os._execvpe(). -- executable_list = tuple( -- os.path.join(os.fsencode(dir), executable) -- for dir in os.get_exec_path(env)) -- fds_to_keep = set(pass_fds) -- fds_to_keep.add(errpipe_write) -- self.pid = _posixsubprocess.fork_exec( -- args, executable_list, -- close_fds, sorted(fds_to_keep), cwd, env_list, -- p2cread, p2cwrite, c2pread, c2pwrite, -- errread, errwrite, -- errpipe_read, errpipe_write, -- restore_signals, start_new_session, preexec_fn) -- self._child_created = True -- finally: -- # be sure the FD is closed no matter what -- os.close(errpipe_write) -+ return (stdout, stderr) - -- # self._devnull is not always defined. -- devnull_fd = getattr(self, '_devnull', None) -- if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: -- os.close(p2cread) -- if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: -- os.close(c2pwrite) -- if errwrite != -1 and errread != -1 and errwrite != devnull_fd: -- os.close(errwrite) -- if devnull_fd is not None: -- os.close(devnull_fd) -- # Prevent a double close of these fds from __init__ on error. -- self._closed_child_pipe_fds = True -- -- # Wait for exec to fail or succeed; possibly raising an -- # exception (limited in size) -- errpipe_data = bytearray() -- while True: -- part = _eintr_retry_call(os.read, errpipe_read, 50000) -- errpipe_data += part -- if not part or len(errpipe_data) > 50000: -- break -- finally: -- # be sure the FD is closed no matter what -- os.close(errpipe_read) -+ def send_signal(self, sig): -+ """Send a signal to the process -+ """ -+ if sig == signal.SIGTERM: -+ self.terminate() -+ elif sig == signal.CTRL_C_EVENT: -+ os.kill(self.pid, signal.CTRL_C_EVENT) -+ elif sig == signal.CTRL_BREAK_EVENT: -+ os.kill(self.pid, signal.CTRL_BREAK_EVENT) -+ else: -+ raise ValueError("Unsupported signal: {}".format(sig)) - -- if errpipe_data: -+ def terminate(self): -+ """Terminates the process -+ """ - try: -- _eintr_retry_call(os.waitpid, self.pid, 0) -- except OSError as e: -- if e.errno != errno.ECHILD: -+ _winapi.TerminateProcess(self._handle, 1) -+ except PermissionError: -+ # ERROR_ACCESS_DENIED (winerror 5) is received when the -+ # process already died. -+ rc = _winapi.GetExitCodeProcess(self._handle) -+ if rc == _winapi.STILL_ACTIVE: - raise -- try: -- exception_name, hex_errno, err_msg = ( -- errpipe_data.split(b':', 2)) -- except ValueError: -- exception_name = b'SubprocessError' -- hex_errno = b'0' -- err_msg = (b'Bad exception data from child: ' + -- repr(errpipe_data)) -- child_exception_type = getattr( -- builtins, exception_name.decode('ascii'), -- SubprocessError) -- err_msg = err_msg.decode(errors="surrogatepass") -- if issubclass(child_exception_type, OSError) and hex_errno: -- errno_num = int(hex_errno, 16) -- child_exec_never_called = (err_msg == "noexec") -- if child_exec_never_called: -- err_msg = "" -- if errno_num != 0: -- err_msg = os.strerror(errno_num) -- if errno_num == errno.ENOENT: -- if child_exec_never_called: -- # The error must be from chdir(cwd). -- err_msg += ': ' + repr(cwd) -- else: -- err_msg += ': ' + repr(orig_executable) -- raise child_exception_type(errno_num, err_msg) -- raise child_exception_type(err_msg) -+ self.returncode = rc - -+ kill = terminate - -- def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, -- _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, -- _WEXITSTATUS=os.WEXITSTATUS): -- """All callers to this function MUST hold self._waitpid_lock.""" -- # This method is called (indirectly) by __del__, so it cannot -- # refer to anything outside of its local scope. -- if _WIFSIGNALED(sts): -- self.returncode = -_WTERMSIG(sts) -- elif _WIFEXITED(sts): -- self.returncode = _WEXITSTATUS(sts) -- else: -- # Should never happen -- raise SubprocessError("Unknown child exit status!") -+ else: -+ # -+ # POSIX methods -+ # -+ def _get_handles(self, stdin, stdout, stderr): -+ """Construct and return tuple with IO objects: -+ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite -+ """ -+ p2cread, p2cwrite = -1, -1 -+ c2pread, c2pwrite = -1, -1 -+ errread, errwrite = -1, -1 -+ -+ if stdin is None: -+ pass -+ elif stdin == PIPE: -+ p2cread, p2cwrite = os.pipe() -+ elif stdin == DEVNULL: -+ p2cread = self._get_devnull() -+ elif isinstance(stdin, int): -+ p2cread = stdin -+ else: -+ # Assuming file-like object -+ p2cread = stdin.fileno() -+ -+ if stdout is None: -+ pass -+ elif stdout == PIPE: -+ c2pread, c2pwrite = os.pipe() -+ elif stdout == DEVNULL: -+ c2pwrite = self._get_devnull() -+ elif isinstance(stdout, int): -+ c2pwrite = stdout -+ else: -+ # Assuming file-like object -+ c2pwrite = stdout.fileno() -+ -+ if stderr is None: -+ pass -+ elif stderr == PIPE: -+ errread, errwrite = os.pipe() -+ elif stderr == STDOUT: -+ errwrite = c2pwrite -+ elif stderr == DEVNULL: -+ errwrite = self._get_devnull() -+ elif isinstance(stderr, int): -+ errwrite = stderr -+ else: -+ # Assuming file-like object -+ errwrite = stderr.fileno() - -+ return (p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite) -+ -+ -+ def _close_fds(self, fds_to_keep): -+ start_fd = 3 -+ for fd in sorted(fds_to_keep): -+ if fd >= start_fd: -+ os.closerange(start_fd, fd) -+ start_fd = fd + 1 -+ if start_fd <= MAXFD: -+ os.closerange(start_fd, MAXFD) -+ -+ -+ def _execute_child(self, args, executable, preexec_fn, close_fds, -+ pass_fds, cwd, env, -+ startupinfo, creationflags, shell, -+ p2cread, p2cwrite, -+ c2pread, c2pwrite, -+ errread, errwrite, -+ restore_signals, start_new_session): -+ """Execute program (POSIX version)""" - -- def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -- _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): -- """Check if child process has terminated. Returns returncode -- attribute. -- -- This method is called by __del__, so it cannot reference anything -- outside of the local scope (nor can any methods it calls). -- -- """ -- if self.returncode is None: -- if not self._waitpid_lock.acquire(False): -- # Something else is busy calling waitpid. Don't allow two -- # at once. We know nothing yet. -- return None -+ if isinstance(args, (str, bytes)): -+ args = [args] -+ else: -+ args = list(args) -+ -+ if shell: -+ args = ["/bin/sh", "-c"] + args -+ if executable: -+ args[0] = executable -+ -+ if executable is None: -+ executable = args[0] -+ orig_executable = executable -+ -+ # For transferring possible exec failure from child to parent. -+ # Data format: "exception name:hex errno:description" -+ # Pickle is not used; it is complex and involves memory allocation. -+ errpipe_read, errpipe_write = os.pipe() -+ # errpipe_write must not be in the standard io 0, 1, or 2 fd range. -+ low_fds_to_close = [] -+ while errpipe_write < 3: -+ low_fds_to_close.append(errpipe_write) -+ errpipe_write = os.dup(errpipe_write) -+ for low_fd in low_fds_to_close: -+ os.close(low_fd) - try: -- if self.returncode is not None: -- return self.returncode # Another thread waited. -- pid, sts = _waitpid(self.pid, _WNOHANG) -- if pid == self.pid: -- self._handle_exitstatus(sts) -- except OSError as e: -- if _deadstate is not None: -- self.returncode = _deadstate -- elif e.errno == _ECHILD: -- # This happens if SIGCLD is set to be ignored or -- # waiting for child processes has otherwise been -- # disabled for our process. This child is dead, we -- # can't get the status. -- # http://bugs.python.org/issue15756 -- self.returncode = 0 -+ try: -+ # We must avoid complex work that could involve -+ # malloc or free in the child process to avoid -+ # potential deadlocks, thus we do all this here. -+ # and pass it to fork_exec() -+ -+ if env is not None: -+ env_list = [os.fsencode(k) + b'=' + os.fsencode(v) -+ for k, v in env.items()] -+ else: -+ env_list = None # Use execv instead of execve. -+ executable = os.fsencode(executable) -+ if os.path.dirname(executable): -+ executable_list = (executable,) -+ else: -+ # This matches the behavior of os._execvpe(). -+ executable_list = tuple( -+ os.path.join(os.fsencode(dir), executable) -+ for dir in os.get_exec_path(env)) -+ fds_to_keep = set(pass_fds) -+ fds_to_keep.add(errpipe_write) -+ self.pid = _posixsubprocess.fork_exec( -+ args, executable_list, -+ close_fds, sorted(fds_to_keep), cwd, env_list, -+ p2cread, p2cwrite, c2pread, c2pwrite, -+ errread, errwrite, -+ errpipe_read, errpipe_write, -+ restore_signals, start_new_session, preexec_fn) -+ self._child_created = True -+ finally: -+ # be sure the FD is closed no matter what -+ os.close(errpipe_write) -+ -+ # self._devnull is not always defined. -+ devnull_fd = getattr(self, '_devnull', None) -+ if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: -+ os.close(p2cread) -+ if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: -+ os.close(c2pwrite) -+ if errwrite != -1 and errread != -1 and errwrite != devnull_fd: -+ os.close(errwrite) -+ if devnull_fd is not None: -+ os.close(devnull_fd) -+ # Prevent a double close of these fds from __init__ on error. -+ self._closed_child_pipe_fds = True -+ -+ # Wait for exec to fail or succeed; possibly raising an -+ # exception (limited in size) -+ errpipe_data = bytearray() -+ while True: -+ part = _eintr_retry_call(os.read, errpipe_read, 50000) -+ errpipe_data += part -+ if not part or len(errpipe_data) > 50000: -+ break - finally: -- self._waitpid_lock.release() -- return self.returncode -+ # be sure the FD is closed no matter what -+ os.close(errpipe_read) -+ -+ if errpipe_data: -+ try: -+ _eintr_retry_call(os.waitpid, self.pid, 0) -+ except OSError as e: -+ if e.errno != errno.ECHILD: -+ raise -+ try: -+ exception_name, hex_errno, err_msg = ( -+ errpipe_data.split(b':', 2)) -+ except ValueError: -+ exception_name = b'SubprocessError' -+ hex_errno = b'0' -+ err_msg = (b'Bad exception data from child: ' + -+ repr(errpipe_data)) -+ child_exception_type = getattr( -+ builtins, exception_name.decode('ascii'), -+ SubprocessError) -+ err_msg = err_msg.decode(errors="surrogatepass") -+ if issubclass(child_exception_type, OSError) and hex_errno: -+ errno_num = int(hex_errno, 16) -+ child_exec_never_called = (err_msg == "noexec") -+ if child_exec_never_called: -+ err_msg = "" -+ if errno_num != 0: -+ err_msg = os.strerror(errno_num) -+ if errno_num == errno.ENOENT: -+ if child_exec_never_called: -+ # The error must be from chdir(cwd). -+ err_msg += ': ' + repr(cwd) -+ else: -+ err_msg += ': ' + repr(orig_executable) -+ raise child_exception_type(errno_num, err_msg) -+ raise child_exception_type(err_msg) - - -- def _try_wait(self, wait_flags): -- """All callers to this function MUST hold self._waitpid_lock.""" -- try: -- (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) -- except OSError as e: -- if e.errno != errno.ECHILD: -- raise -- # This happens if SIGCLD is set to be ignored or waiting -- # for child processes has otherwise been disabled for our -- # process. This child is dead, we can't get the status. -- pid = self.pid -- sts = 0 -- return (pid, sts) -- -- -- def wait(self, timeout=None, endtime=None): -- """Wait for child process to terminate. Returns returncode -- attribute.""" -- if self.returncode is not None: -- return self.returncode -+ def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, -+ _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, -+ _WEXITSTATUS=os.WEXITSTATUS): -+ """All callers to this function MUST hold self._waitpid_lock.""" -+ # This method is called (indirectly) by __del__, so it cannot -+ # refer to anything outside of its local scope. -+ if _WIFSIGNALED(sts): -+ self.returncode = -_WTERMSIG(sts) -+ elif _WIFEXITED(sts): -+ self.returncode = _WEXITSTATUS(sts) -+ else: -+ # Should never happen -+ raise SubprocessError("Unknown child exit status!") - -- # endtime is preferred to timeout. timeout is only used for -- # printing. -- if endtime is not None or timeout is not None: -- if endtime is None: -- endtime = _time() + timeout -- elif timeout is None: -- timeout = self._remaining_time(endtime) - -- if endtime is not None: -- # Enter a busy loop if we have a timeout. This busy loop was -- # cribbed from Lib/threading.py in Thread.wait() at r71065. -- delay = 0.0005 # 500 us -> initial delay of 1 ms -- while True: -- if self._waitpid_lock.acquire(False): -- try: -- if self.returncode is not None: -- break # Another thread waited. -- (pid, sts) = self._try_wait(os.WNOHANG) -- assert pid == self.pid or pid == 0 -- if pid == self.pid: -- self._handle_exitstatus(sts) -- break -- finally: -- self._waitpid_lock.release() -- remaining = self._remaining_time(endtime) -- if remaining <= 0: -- raise TimeoutExpired(self.args, timeout) -- delay = min(delay * 2, remaining, .05) -- time.sleep(delay) -- else: -- while self.returncode is None: -- with self._waitpid_lock: -+ def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, -+ _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): -+ """Check if child process has terminated. Returns returncode -+ attribute. -+ -+ This method is called by __del__, so it cannot reference anything -+ outside of the local scope (nor can any methods it calls). -+ -+ """ -+ if self.returncode is None: -+ if not self._waitpid_lock.acquire(False): -+ # Something else is busy calling waitpid. Don't allow two -+ # at once. We know nothing yet. -+ return None -+ try: - if self.returncode is not None: -- break # Another thread waited. -- (pid, sts) = self._try_wait(0) -- # Check the pid and loop as waitpid has been known to -- # return 0 even without WNOHANG in odd situations. -- # http://bugs.python.org/issue14396. -+ return self.returncode # Another thread waited. -+ pid, sts = _waitpid(self.pid, _WNOHANG) - if pid == self.pid: - self._handle_exitstatus(sts) -- return self.returncode -- -- -- def _communicate(self, input, endtime, orig_timeout): -- if self.stdin and not self._communication_started: -- # Flush stdio buffer. This might block, if the user has -- # been writing to .stdin in an uncontrolled fashion. -- self.stdin.flush() -- if not input: -- self.stdin.close() -- -- stdout = None -- stderr = None -+ except OSError as e: -+ if _deadstate is not None: -+ self.returncode = _deadstate -+ elif e.errno == _ECHILD: -+ # This happens if SIGCLD is set to be ignored or -+ # waiting for child processes has otherwise been -+ # disabled for our process. This child is dead, we -+ # can't get the status. -+ # http://bugs.python.org/issue15756 -+ self.returncode = 0 -+ finally: -+ self._waitpid_lock.release() -+ return self.returncode - -- # Only create this mapping if we haven't already. -- if not self._communication_started: -- self._fileobj2output = {} -- if self.stdout: -- self._fileobj2output[self.stdout] = [] -- if self.stderr: -- self._fileobj2output[self.stderr] = [] - -- if self.stdout: -- stdout = self._fileobj2output[self.stdout] -- if self.stderr: -- stderr = self._fileobj2output[self.stderr] -+ def _try_wait(self, wait_flags): -+ """All callers to this function MUST hold self._waitpid_lock.""" -+ try: -+ (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) -+ except OSError as e: -+ if e.errno != errno.ECHILD: -+ raise -+ # This happens if SIGCLD is set to be ignored or waiting -+ # for child processes has otherwise been disabled for our -+ # process. This child is dead, we can't get the status. -+ pid = self.pid -+ sts = 0 -+ return (pid, sts) -+ -+ -+ def wait(self, timeout=None, endtime=None): -+ """Wait for child process to terminate. Returns returncode -+ attribute.""" -+ if self.returncode is not None: -+ return self.returncode -+ -+ # endtime is preferred to timeout. timeout is only used for -+ # printing. -+ if endtime is not None or timeout is not None: -+ if endtime is None: -+ endtime = _time() + timeout -+ elif timeout is None: -+ timeout = self._remaining_time(endtime) -+ -+ if endtime is not None: -+ # Enter a busy loop if we have a timeout. This busy loop was -+ # cribbed from Lib/threading.py in Thread.wait() at r71065. -+ delay = 0.0005 # 500 us -> initial delay of 1 ms -+ while True: -+ if self._waitpid_lock.acquire(False): -+ try: -+ if self.returncode is not None: -+ break # Another thread waited. -+ (pid, sts) = self._try_wait(os.WNOHANG) -+ assert pid == self.pid or pid == 0 -+ if pid == self.pid: -+ self._handle_exitstatus(sts) -+ break -+ finally: -+ self._waitpid_lock.release() -+ remaining = self._remaining_time(endtime) -+ if remaining <= 0: -+ raise TimeoutExpired(self.args, timeout) -+ delay = min(delay * 2, remaining, .05) -+ time.sleep(delay) -+ else: -+ while self.returncode is None: -+ with self._waitpid_lock: -+ if self.returncode is not None: -+ break # Another thread waited. -+ (pid, sts) = self._try_wait(0) -+ # Check the pid and loop as waitpid has been known to -+ # return 0 even without WNOHANG in odd situations. -+ # http://bugs.python.org/issue14396. -+ if pid == self.pid: -+ self._handle_exitstatus(sts) -+ return self.returncode - -- self._save_input(input) - -- if self._input: -- input_view = memoryview(self._input) -+ def _communicate(self, input, endtime, orig_timeout): -+ if self.stdin and not self._communication_started: -+ # Flush stdio buffer. This might block, if the user has -+ # been writing to .stdin in an uncontrolled fashion. -+ self.stdin.flush() -+ if not input: -+ self.stdin.close() -+ -+ stdout = None -+ stderr = None -+ -+ # Only create this mapping if we haven't already. -+ if not self._communication_started: -+ self._fileobj2output = {} -+ if self.stdout: -+ self._fileobj2output[self.stdout] = [] -+ if self.stderr: -+ self._fileobj2output[self.stderr] = [] - -- with _PopenSelector() as selector: -- if self.stdin and input: -- selector.register(self.stdin, selectors.EVENT_WRITE) - if self.stdout: -- selector.register(self.stdout, selectors.EVENT_READ) -+ stdout = self._fileobj2output[self.stdout] - if self.stderr: -- selector.register(self.stderr, selectors.EVENT_READ) -+ stderr = self._fileobj2output[self.stderr] - -- while selector.get_map(): -- timeout = self._remaining_time(endtime) -- if timeout is not None and timeout < 0: -- raise TimeoutExpired(self.args, orig_timeout) -- -- ready = selector.select(timeout) -- self._check_timeout(endtime, orig_timeout) -+ self._save_input(input) - -- # XXX Rewrite these to use non-blocking I/O on the file -- # objects; they are no longer using C stdio! -+ if self._input: -+ input_view = memoryview(self._input) - -- for key, events in ready: -- if key.fileobj is self.stdin: -- chunk = input_view[self._input_offset : -- self._input_offset + _PIPE_BUF] -- try: -- self._input_offset += os.write(key.fd, chunk) -- except OSError as e: -- if e.errno == errno.EPIPE: -- selector.unregister(key.fileobj) -- key.fileobj.close() -+ with _PopenSelector() as selector: -+ if self.stdin and input: -+ selector.register(self.stdin, selectors.EVENT_WRITE) -+ if self.stdout: -+ selector.register(self.stdout, selectors.EVENT_READ) -+ if self.stderr: -+ selector.register(self.stderr, selectors.EVENT_READ) -+ -+ while selector.get_map(): -+ timeout = self._remaining_time(endtime) -+ if timeout is not None and timeout < 0: -+ raise TimeoutExpired(self.args, orig_timeout) -+ -+ ready = selector.select(timeout) -+ self._check_timeout(endtime, orig_timeout) -+ -+ # XXX Rewrite these to use non-blocking I/O on the file -+ # objects; they are no longer using C stdio! -+ -+ for key, events in ready: -+ if key.fileobj is self.stdin: -+ chunk = input_view[self._input_offset : -+ self._input_offset + _PIPE_BUF] -+ try: -+ self._input_offset += os.write(key.fd, chunk) -+ except OSError as e: -+ if e.errno == errno.EPIPE: -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ else: -+ raise - else: -- raise -- else: -- if self._input_offset >= len(self._input): -+ if self._input_offset >= len(self._input): -+ selector.unregister(key.fileobj) -+ key.fileobj.close() -+ elif key.fileobj in (self.stdout, self.stderr): -+ data = os.read(key.fd, 32768) -+ if not data: - selector.unregister(key.fileobj) - key.fileobj.close() -- elif key.fileobj in (self.stdout, self.stderr): -- data = os.read(key.fd, 32768) -- if not data: -- selector.unregister(key.fileobj) -- key.fileobj.close() -- self._fileobj2output[key.fileobj].append(data) -- -- self.wait(timeout=self._remaining_time(endtime)) -- -- # All data exchanged. Translate lists into strings. -- if stdout is not None: -- stdout = b''.join(stdout) -- if stderr is not None: -- stderr = b''.join(stderr) -- -- # Translate newlines, if requested. -- # This also turns bytes into strings. -- if self.universal_newlines: -- if stdout is not None: -- stdout = self._translate_newlines(stdout, -- self.stdout.encoding) -- if stderr is not None: -- stderr = self._translate_newlines(stderr, -- self.stderr.encoding) -+ self._fileobj2output[key.fileobj].append(data) - -- return (stdout, stderr) -+ self.wait(timeout=self._remaining_time(endtime)) - -+ # All data exchanged. Translate lists into strings. -+ if stdout is not None: -+ stdout = b''.join(stdout) -+ if stderr is not None: -+ stderr = b''.join(stderr) - -- def _save_input(self, input): -- # This method is called from the _communicate_with_*() methods -- # so that if we time out while communicating, we can continue -- # sending input if we retry. -- if self.stdin and self._input is None: -- self._input_offset = 0 -- self._input = input -- if self.universal_newlines and input is not None: -- self._input = self._input.encode(self.stdin.encoding) -- -- -- def send_signal(self, sig): -- """Send a signal to the process -- """ -- os.kill(self.pid, sig) -- -- def terminate(self): -- """Terminate the process with SIGTERM -- """ -- self.send_signal(signal.SIGTERM) -- -- def kill(self): -- """Kill the process with SIGKILL -- """ -- self.send_signal(signal.SIGKILL) -+ # Translate newlines, if requested. -+ # This also turns bytes into strings. -+ if self.universal_newlines: -+ if stdout is not None: -+ stdout = self._translate_newlines(stdout, -+ self.stdout.encoding) -+ if stderr is not None: -+ stderr = self._translate_newlines(stderr, -+ self.stderr.encoding) -+ -+ return (stdout, stderr) -+ -+ -+ def _save_input(self, input): -+ # This method is called from the _communicate_with_*() methods -+ # so that if we time out while communicating, we can continue -+ # sending input if we retry. -+ if self.stdin and self._input is None: -+ self._input_offset = 0 -+ self._input = input -+ if self.universal_newlines and input is not None: -+ self._input = self._input.encode(self.stdin.encoding) -+ -+ -+ def send_signal(self, sig): -+ """Send a signal to the process -+ """ -+ os.kill(self.pid, sig) -+ -+ def terminate(self): -+ """Terminate the process with SIGTERM -+ """ -+ self.send_signal(signal.SIGTERM) -+ -+ def kill(self): -+ """Kill the process with SIGKILL -+ """ -+ self.send_signal(signal.SIGKILL) -diff -Nru orig/Lib/sysconfig.py modified/Lib/sysconfig.py ---- orig/Lib/sysconfig.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/sysconfig.py 2015-07-04 21:18:58.000000000 +0800 -@@ -78,6 +78,15 @@ - 'scripts': '{userbase}/bin', - 'data': '{userbase}', - }, -+ 'ios': { -+ 'stdlib': '{installed_base}/lib/python%s' % sys.version[:3], -+ 'platstdlib': '{installed_base}/lib/python%s' % sys.version[:3], -+ 'purelib': '{installed_base}/lib/python%s/site-packages' % sys.version[:3], -+ 'platlib': '{installed_base}/lib/python%s/site-packages' % sys.version[:3], -+ 'include': '{installed_base}/include', -+ 'scripts': '{installed_base}/bin', -+ 'data': '{installed_base}/Resources', -+ }, - } - - _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', -@@ -181,6 +190,8 @@ - if os.name == 'posix': - # the default scheme for posix is posix_prefix - return 'posix_prefix' -+ elif sys.platform == 'ios': -+ return 'ios' - return os.name - - -@@ -205,6 +216,11 @@ - else: - return joinuser("~", "Library", framework, "%d.%d" % - sys.version_info[:2]) -+ elif sys.platform == 'ios': -+ if env_base: -+ return env_base -+ else: -+ return _BASE_PREFIX - - if env_base: - return env_base -diff -Nru orig/Lib/test/__main__.py modified/Lib/test/__main__.py ---- orig/Lib/test/__main__.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/__main__.py 2015-05-04 07:57:38.000000000 +0800 -@@ -1,3 +1,5 @@ -+import sys - from test import regrtest - --regrtest.main_in_temp_cwd() -+result = regrtest.main_in_temp_cwd() -+sys.exit(result) -diff -Nru orig/Lib/test/regrtest.py modified/Lib/test/regrtest.py ---- orig/Lib/test/regrtest.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/regrtest.py 2015-05-04 07:58:07.000000000 +0800 -@@ -538,7 +538,7 @@ - sys.stdout.flush() - print() # Force a newline (just in case) - print(json.dumps(result)) -- sys.exit(0) -+ return 0 - - good = [] - bad = [] -@@ -678,7 +678,7 @@ - from threading import Thread - except ImportError: - print("Multiprocess option requires thread support") -- sys.exit(2) -+ return 2 - from queue import Queue - debug_output_pat = re.compile(r"\[\d+ refs, \d+ blocks\]$") - output = Queue() -@@ -840,7 +840,7 @@ - if ns.runleaks: - os.system("leaks %d" % os.getpid()) - -- sys.exit(len(bad) > 0 or interrupted) -+ return (len(bad) > 0 or interrupted) - - - # small set of tests to determine if we have a basically functioning interpreter -@@ -1561,7 +1561,9 @@ - # change the CWD, the original CWD will be used. The original CWD is - # available from support.SAVEDCWD. - with support.temp_cwd(test_cwd, quiet=True): -- main() -+ result = main() -+ -+ return result - - - if __name__ == '__main__': -@@ -1586,4 +1588,5 @@ - # sanity check - assert __file__ == os.path.abspath(sys.argv[0]) - -- main_in_temp_cwd() -+ result = main_in_temp_cwd() -+ sys.exit(retval) -diff -Nru orig/Lib/test/script_helper.py modified/Lib/test/script_helper.py ---- orig/Lib/test/script_helper.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/script_helper.py 2015-05-04 14:42:40.000000000 +0800 -@@ -10,12 +10,15 @@ - import py_compile - import contextlib - import shutil -+import unittest - import zipfile - - from importlib.util import source_from_cache - from test.support import make_legacy_pyc, strip_python_stderr, temp_dir - -+ - # Executing the interpreter in a subprocess -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def _assert_python(expected_success, *args, **env_vars): - if '__isolated' in env_vars: - isolated = env_vars.pop('__isolated') -@@ -55,6 +58,7 @@ - "stderr follows:\n%s" % (rc, err.decode('ascii', 'ignore'))) - return rc, out, err - -+ - def assert_python_ok(*args, **env_vars): - """ - Assert that running the interpreter with `args` and optional environment -@@ -68,6 +72,7 @@ - """ - return _assert_python(True, *args, **env_vars) - -+ - def assert_python_failure(*args, **env_vars): - """ - Assert that running the interpreter with `args` and optional environment -@@ -78,6 +83,8 @@ - """ - return _assert_python(False, *args, **env_vars) - -+ -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw): - """Run a Python subprocess with the given arguments. - -@@ -98,6 +105,7 @@ - stdout=stdout, stderr=stderr, - **kw) - -+ - def kill_python(p): - """Run the given Popen process until completion and return stdout.""" - p.stdin.close() -@@ -109,6 +117,7 @@ - subprocess._cleanup() - return data - -+ - def make_script(script_dir, script_basename, source, omit_suffix=False): - script_filename = script_basename - if not omit_suffix: -@@ -121,6 +130,7 @@ - importlib.invalidate_caches() - return script_name - -+ - def make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None): - zip_filename = zip_basename+os.extsep+'zip' - zip_name = os.path.join(zip_dir, zip_filename) -@@ -142,10 +152,12 @@ - # zip_file.close() - return zip_name, os.path.join(zip_name, name_in_zip) - -+ - def make_pkg(pkg_dir, init_source=''): - os.mkdir(pkg_dir) - make_script(pkg_dir, '__init__', init_source) - -+ - def make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, - source, depth=1, compiled=False): - unlink = [] -diff -Nru orig/Lib/test/support/__init__.py modified/Lib/test/support/__init__.py ---- orig/Lib/test/support/__init__.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/support/__init__.py 2015-05-04 13:16:34.000000000 +0800 -@@ -778,8 +778,8 @@ - - # TESTFN_UNICODE is a non-ascii filename - TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" --if sys.platform == 'darwin': -- # In Mac OS X's VFS API file names are, by definition, canonically -+if sys.platform in ('darwin', 'ios'): -+ # In iOS and Mac OS X, VFS API file names are, by definition, canonically - # decomposed Unicode, encoded using UTF-8. See QA1173: - # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html - import unicodedata -@@ -805,8 +805,8 @@ - 'Unicode filename tests may not be effective' - % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) - TESTFN_UNENCODABLE = None --# Mac OS X denies unencodable filenames (invalid utf-8) --elif sys.platform != 'darwin': -+# Mac OS X and iOS deny unencodable filenames (invalid utf-8) -+elif sys.platform not in ('darwin', 'ios'): - try: - # ascii and utf-8 cannot encode the byte 0xff - b'\xff'.decode(TESTFN_ENCODING) -diff -Nru orig/Lib/test/test_base64.py modified/Lib/test/test_base64.py ---- orig/Lib/test/test_base64.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_base64.py 2015-05-04 14:42:53.000000000 +0800 -@@ -5,7 +5,6 @@ - import os - import sys - import subprocess --import struct - from array import array - - -@@ -622,7 +621,7 @@ - self.assertTrue(issubclass(binascii.Error, ValueError)) - - -- -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - class TestMain(unittest.TestCase): - def tearDown(self): - if os.path.exists(support.TESTFN): -@@ -658,7 +657,6 @@ - self.assertEqual(output.rstrip(), b'a\xffb') - - -- - def test_main(): - support.run_unittest(__name__) - -diff -Nru orig/Lib/test/test_capi.py modified/Lib/test/test_capi.py ---- orig/Lib/test/test_capi.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_capi.py 2015-05-04 14:42:39.000000000 +0800 -@@ -44,6 +44,7 @@ - self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test") - - @unittest.skipUnless(threading, 'Threading required for this test.') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_no_FatalError_infinite_loop(self): - with support.SuppressCrashReport(): - p = subprocess.Popen([sys.executable, "-c", -@@ -433,6 +434,7 @@ - self.assertRaises(ValueError, _testcapi.parse_tuple_and_keywords, - (), {}, b'', [42]) - -+ - @unittest.skipUnless(threading, 'Threading required for this test.') - class TestThreadState(unittest.TestCase): - -diff -Nru orig/Lib/test/test_cmd_line.py modified/Lib/test/test_cmd_line.py ---- orig/Lib/test/test_cmd_line.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_cmd_line.py 2015-05-04 14:43:14.000000000 +0800 -@@ -56,6 +56,7 @@ - rc, out, err = assert_python_ok('-vv') - self.assertNotIn(b'stack overflow', err) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_xoptions(self): - def get_xoptions(*args): - # use subprocess module directly because test.script_helper adds -@@ -72,6 +73,7 @@ - opts = get_xoptions('-Xa', '-Xb=c,d=e') - self.assertEqual(opts, {'a': True, 'b': 'c,d=e'}) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_showrefcount(self): - def run_python(*args): - # this is similar to assert_python_ok but doesn't strip -@@ -145,6 +147,7 @@ - # arguments as unicode (using wmain() instead of main()). - @unittest.skipIf(sys.platform == 'win32', - 'Windows has a native unicode API') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_undecodable_code(self): - undecodable = b"\xff" - env = os.environ.copy() -@@ -209,6 +212,7 @@ - ) - check_output(text) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_unbuffered_output(self): - # Test expected operation of the '-u' switch - for stream in ('stdout', 'stderr'): -@@ -268,6 +272,7 @@ - # for empty and unset PYTHONPATH - self.assertEqual(out1, out2) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_displayhook_unencodable(self): - for encoding in ('ascii', 'latin-1', 'utf-8'): - env = os.environ.copy() -@@ -286,6 +291,7 @@ - escaped = repr(text).encode(encoding, 'backslashreplace') - self.assertIn(escaped, data) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def check_input(self, code, expected): - with tempfile.NamedTemporaryFile("wb+") as stdin: - sep = os.linesep.encode('ASCII') -@@ -357,6 +363,7 @@ - # Issue #7111: Python should work without standard streams - - @unittest.skipIf(os.name != 'posix', "test needs POSIX semantics") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def _test_no_stdio(self, streams): - code = """if 1: - import os, sys -diff -Nru orig/Lib/test/test_doctest.py modified/Lib/test/test_doctest.py ---- orig/Lib/test/test_doctest.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_doctest.py 2015-04-27 21:32:27.000000000 +0800 -@@ -2657,7 +2657,12 @@ - TestResults(failed=1, attempted=1) - """ - --def test_CLI(): r""" -+if sys.platform == 'ios': -+ # Mobile platforms can't invoke doctest from the command line, -+ # so skip this test. -+ pass -+else: -+ def test_CLI(): r""" - The doctest module can be used to run doctests against an arbitrary file. - These tests test this CLI functionality. - -diff -Nru orig/Lib/test/test_faulthandler.py modified/Lib/test/test_faulthandler.py ---- orig/Lib/test/test_faulthandler.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_faulthandler.py 2015-05-04 14:45:25.000000000 +0800 -@@ -7,7 +7,6 @@ - import subprocess - import sys - from test import support, script_helper --from test.script_helper import assert_python_ok - import tempfile - import unittest - from textwrap import dedent -@@ -20,6 +19,7 @@ - - TIMEOUT = 0.5 - -+ - def expected_traceback(lineno1, lineno2, header, min_count=1): - regex = header - regex += ' File "", line %s in func\n' % lineno1 -@@ -29,6 +29,7 @@ - else: - return '^' + regex + '$' - -+ - @contextmanager - def temporary_filename(): - filename = tempfile.mktemp() -@@ -37,6 +38,7 @@ - finally: - support.unlink(filename) - -+ - class FaultHandlerTests(unittest.TestCase): - def get_output(self, code, filename=None): - """ -@@ -247,6 +249,7 @@ - finally: - sys.stderr = orig_stderr - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_disabled_by_default(self): - # By default, the module should be disabled - code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -255,6 +258,7 @@ - output = subprocess.check_output(args) - self.assertEqual(output.rstrip(), b"False") - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_sys_xoptions(self): - # Test python -X faulthandler - code = "import faulthandler; print(faulthandler.is_enabled())" -@@ -263,6 +267,7 @@ - output = subprocess.check_output(args) - self.assertEqual(output.rstrip(), b"True") - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_env_var(self): - # empty env var - code = "import faulthandler; print(faulthandler.is_enabled())" -diff -Nru orig/Lib/test/test_fcntl.py modified/Lib/test/test_fcntl.py ---- orig/Lib/test/test_fcntl.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_fcntl.py 2015-04-27 21:44:57.000000000 +0800 -@@ -23,7 +23,7 @@ - start_len = "qq" - - if (sys.platform.startswith(('netbsd', 'freebsd', 'openbsd', 'bsdos')) -- or sys.platform == 'darwin'): -+ or sys.platform in ('darwin', 'ios')): - if struct.calcsize('l') == 8: - off_t = 'l' - pid_t = 'i' -@@ -45,12 +45,15 @@ - - lockdata = get_lockdata() - -+ - class BadFile: - def __init__(self, fn): - self.fn = fn -+ - def fileno(self): - return self.fn - -+ - class TestFcntl(unittest.TestCase): - - def setUp(self): -diff -Nru orig/Lib/test/test_file_eintr.py modified/Lib/test/test_file_eintr.py ---- orig/Lib/test/test_file_eintr.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_file_eintr.py 2015-05-04 14:42:38.000000000 +0800 -@@ -68,6 +68,7 @@ - self.fail('Error from IO process %s:\nSTDOUT:\n%sSTDERR:\n%s\n' % - (why, stdout.decode(), stderr.decode())) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def _test_reading(self, data_to_write, read_and_verify_code): - """Generic buffered read method test harness to validate EINTR behavior. - -diff -Nru orig/Lib/test/test_gc.py modified/Lib/test/test_gc.py ---- orig/Lib/test/test_gc.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_gc.py 2015-05-04 14:42:37.000000000 +0800 -@@ -633,6 +633,8 @@ - del x - gc.set_debug(%s) - """ -+ -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def run_command(code): - p = subprocess.Popen([sys.executable, "-Wd", "-c", code], - stdout=subprocess.PIPE, -diff -Nru orig/Lib/test/test_gdb.py modified/Lib/test/test_gdb.py ---- orig/Lib/test/test_gdb.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_gdb.py 2015-05-03 00:05:45.000000000 +0800 -@@ -28,6 +28,9 @@ - # This is what "no gdb" looks like. There may, however, be other - # errors that manifest this way too. - raise unittest.SkipTest("Couldn't find gdb on the path") -+except AttributeError: -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") -+ - gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version) - gdb_major_version = int(gdb_version_number.group(1)) - gdb_minor_version = int(gdb_version_number.group(2)) -diff -Nru orig/Lib/test/test_getpass.py modified/Lib/test/test_getpass.py ---- orig/Lib/test/test_getpass.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_getpass.py 2015-05-02 22:48:44.000000000 +0800 -@@ -1,5 +1,6 @@ - import getpass - import os -+import sys - import unittest - from io import BytesIO, StringIO, TextIOWrapper - from unittest import mock -@@ -14,6 +15,7 @@ - except ImportError: - pwd = None - -+ - @mock.patch('os.environ') - class GetpassGetuserTest(unittest.TestCase): - -diff -Nru orig/Lib/test/test_httpservers.py modified/Lib/test/test_httpservers.py ---- orig/Lib/test/test_httpservers.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_httpservers.py 2015-06-28 20:16:12.000000000 +0800 -@@ -16,6 +16,7 @@ - import urllib.parse - import html - import http.client -+import subprocess - import tempfile - from io import BytesIO - -@@ -277,11 +278,11 @@ - with open(os.path.join(self.tempdir, filename), 'wb') as f: - f.write(support.TESTFN_UNDECODABLE) - response = self.request(self.tempdir_name + '/') -- if sys.platform == 'darwin': -+ if sys.platform in ('darwin', 'ios'): - # On Mac OS the HFS+ filesystem replaces bytes that aren't valid - # UTF-8 into a percent-encoded value. - for name in os.listdir(self.tempdir): -- if name != 'test': # Ignore a filename created in setUp(). -+ if name != 'test': # Ignore a filename created in setUp(). - filename = name - break - body = self.check_status_and_reason(response, 200) -@@ -362,6 +363,7 @@ - - @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0, - "This test can't be run reliably as root (issue #13308).") -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - class CGIHTTPServerTestCase(BaseTestCase): - class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): - pass -@@ -550,6 +552,7 @@ - def log_message(self, format, *args): - pass - -+ - class RejectingSocketlessRequestHandler(SocketlessRequestHandler): - def handle_expect_100(self): - self.send_error(417) -@@ -580,7 +583,7 @@ - - HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK') - -- def setUp (self): -+ def setUp(self): - self.handler = SocketlessRequestHandler() - - def send_typical_request(self, message): -@@ -731,6 +734,7 @@ - self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n') - self.assertFalse(self.handler.get_called) - -+ - class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): - """ Test url parsing """ - def setUp(self): -diff -Nru orig/Lib/test/test_imp.py modified/Lib/test/test_imp.py ---- orig/Lib/test/test_imp.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_imp.py 2015-04-30 10:07:30.000000000 +0800 -@@ -19,7 +19,7 @@ - """Decorator to skip a test if not running under CPython or lacking - imp.load_dynamic().""" - meth = support.cpython_only(meth) -- return unittest.skipIf(not hasattr(imp, 'load_dynamic'), -+ return unittest.skipIf(not getattr(imp, 'load_dynamic'), - 'imp.load_dynamic() required')(meth) - - -diff -Nru orig/Lib/test/test_import.py modified/Lib/test/test_import.py ---- orig/Lib/test/test_import.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_import.py 2015-07-04 22:52:30.000000000 +0800 -@@ -280,6 +280,7 @@ - """)) - script_helper.assert_python_ok(testfn) - -+ @skip_if_dont_write_bytecode - def test_timestamp_overflow(self): - # A modification timestamp larger than 2**32 should not be a problem - # when importing a module (issue #11235). -diff -Nru orig/Lib/test/test_importlib/extension/test_finder.py modified/Lib/test/test_importlib/extension/test_finder.py ---- orig/Lib/test/test_importlib/extension/test_finder.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_finder.py 2015-04-30 22:06:18.000000000 +0800 -@@ -4,11 +4,13 @@ - - machinery = test_util.import_importlib('importlib.machinery') - -+import sys - import unittest - import warnings - - # XXX find_spec tests - -+@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') - class FinderTests(abc.FinderTests): - - """Test the finder for extension modules.""" -diff -Nru orig/Lib/test/test_importlib/extension/test_loader.py modified/Lib/test/test_importlib/extension/test_loader.py ---- orig/Lib/test/test_importlib/extension/test_loader.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/extension/test_loader.py 2015-04-30 21:52:11.000000000 +0800 -@@ -10,6 +10,7 @@ - import unittest - - -+@unittest.skipIf(sys.platform == 'ios', 'iOS does not support dynamic loading') - class LoaderTests(abc.LoaderTests): - - """Test load_module() for extension modules.""" -diff -Nru orig/Lib/test/test_importlib/source/test_case_sensitivity.py modified/Lib/test/test_importlib/source/test_case_sensitivity.py ---- orig/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-02-03 19:49:03.000000000 +0800 -+++ modified/Lib/test/test_importlib/source/test_case_sensitivity.py 2015-05-02 19:23:40.000000000 +0800 -@@ -63,18 +63,22 @@ - self.assertIsNotNone(insensitive) - self.assertIn(self.name, insensitive.get_filename(self.name)) - -+ - class CaseSensitivityTestPEP302(CaseSensitivityTest): - def find(self, finder): - return finder.find_module(self.name) - -+ - Frozen_CaseSensitivityTestPEP302, Source_CaseSensitivityTestPEP302 = util.test_both( - CaseSensitivityTestPEP302, importlib=importlib, machinery=machinery) - -+ - class CaseSensitivityTestPEP451(CaseSensitivityTest): - def find(self, finder): - found = finder.find_spec(self.name) - return found.loader if found is not None else found - -+ - Frozen_CaseSensitivityTestPEP451, Source_CaseSensitivityTestPEP451 = util.test_both( - CaseSensitivityTestPEP451, importlib=importlib, machinery=machinery) - -diff -Nru orig/Lib/test/test_io.py modified/Lib/test/test_io.py ---- orig/Lib/test/test_io.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_io.py 2015-05-04 10:09:23.000000000 +0800 -@@ -420,7 +420,7 @@ - # On Windows and Mac OSX this test comsumes large resources; It takes - # a long time to build the >2GB file and takes >2GB of disk space - # therefore the resource must be enabled to run this test. -- if sys.platform[:3] == 'win' or sys.platform == 'darwin': -+ if sys.platform[:3] == 'win' or sys.platform in ('darwin', 'ios'): - support.requires( - 'largefile', - 'test requires %s bytes and a long time to run' % self.LARGE) -@@ -688,6 +688,7 @@ - support.gc_collect() - self.assertTrue(wr() is None, wr) - -+ - class PyIOTest(IOTest): - pass - -diff -Nru orig/Lib/test/test_json/test_tool.py modified/Lib/test/test_json/test_tool.py ---- orig/Lib/test/test_json/test_tool.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_json/test_tool.py 2015-05-04 14:42:37.000000000 +0800 -@@ -6,6 +6,7 @@ - from test import support - from test.script_helper import assert_python_ok - -+ - class TestTool(unittest.TestCase): - data = """ - -@@ -37,6 +38,7 @@ - ] - """) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_stdin_stdout(self): - with subprocess.Popen( - (sys.executable, '-m', 'json.tool'), -diff -Nru orig/Lib/test/test_keyword.py modified/Lib/test/test_keyword.py ---- orig/Lib/test/test_keyword.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_keyword.py 2015-05-04 14:42:36.000000000 +0800 -@@ -46,6 +46,7 @@ - fp.writelines(lines[:lines.index(b"#--start keywords--" + nl) + 1]) - fp.writelines(lines[lines.index(b"#--end keywords--" + nl):]) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def _generate_keywords(self, grammar_file, target_keyword_py_file): - proc = subprocess.Popen([sys.executable, - KEYWORD_FILE, -diff -Nru orig/Lib/test/test_logging.py modified/Lib/test/test_logging.py ---- orig/Lib/test/test_logging.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_logging.py 2015-07-04 22:52:40.000000000 +0800 -@@ -1460,9 +1460,20 @@ - # just need a name - file can't be present, or we'll get an - # 'address already in use' error. - os.remove(fn) -+ # Check the size of the socket file name. If it exceeds 108 -+ # characters (UNIX_PATH_MAX), it can't be used as a UNIX socket. -+ # In this case, fall back to a path constructed somewhere that -+ # is known to be short. -+ if len(fn) > 108: -+ fd, fn = tempfile.mkstemp(prefix='test_logging_', suffix='.sock', dir='/tmp') -+ os.close(fd) -+ # just need a name - file can't be present, or we'll get an -+ # 'address already in use' error. -+ os.remove(fn) - return fn - - @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(threading, 'Threading required for this test.') - class UnixSocketHandlerTest(SocketHandlerTest): - -@@ -1535,6 +1546,7 @@ - self.assertEqual(self.log_output, "spam\neggs\n") - - @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(threading, 'Threading required for this test.') - class UnixDatagramHandlerTest(DatagramHandlerTest): - -@@ -1610,6 +1622,7 @@ - self.assertEqual(self.log_output, b'<11>h\xc3\xa4m-sp\xc3\xa4m') - - @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(threading, 'Threading required for this test.') - class UnixSysLogHandlerTest(SysLogHandlerTest): - -diff -Nru orig/Lib/test/test_mailcap.py modified/Lib/test/test_mailcap.py ---- orig/Lib/test/test_mailcap.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_mailcap.py 2015-05-04 14:35:55.000000000 +0800 -@@ -1,6 +1,7 @@ - import mailcap - import os - import shutil -+import sys - import test.support - import unittest - -@@ -190,7 +191,7 @@ - ] - self._run_cases(cases) - -- @unittest.skipUnless(os.name == "posix", "Requires 'test' command on system") -+ @unittest.skipUnless(os.name == "posix" and sys.platform != 'ios', "Requires 'test' command on system") - def test_test(self): - # findmatch() will automatically check any "test" conditions and skip - # the entry if the check fails. -diff -Nru orig/Lib/test/test_marshal.py modified/Lib/test/test_marshal.py ---- orig/Lib/test/test_marshal.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_marshal.py 2015-05-04 10:29:33.000000000 +0800 -@@ -190,7 +190,10 @@ - if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'): - MAX_MARSHAL_STACK_DEPTH = 1500 - else: -- MAX_MARSHAL_STACK_DEPTH = 2000 -+ if sys.platform == 'ios': -+ MAX_MARSHAL_STACK_DEPTH = 1500 -+ else: -+ MAX_MARSHAL_STACK_DEPTH = 2000 - for i in range(MAX_MARSHAL_STACK_DEPTH - 2): - last.append([0]) - last = last[-1] -diff -Nru orig/Lib/test/test_mmap.py modified/Lib/test/test_mmap.py ---- orig/Lib/test/test_mmap.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_mmap.py 2015-05-04 13:15:53.000000000 +0800 -@@ -229,7 +229,7 @@ - with open(TESTFN, "r+b") as f: - self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4) - -- if os.name == "posix": -+ if os.name == "posix" and sys.platform != 'ios': - # Try incompatible flags, prot and access parameters. - with open(TESTFN, "r+b") as f: - self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, -@@ -718,7 +718,7 @@ - unlink(TESTFN) - - def _make_test_file(self, num_zeroes, tail): -- if sys.platform[:3] == 'win' or sys.platform == 'darwin': -+ if sys.platform[:3] == 'win' or sys.platform in ('darwin', 'ios'): - requires('largefile', - 'test requires %s bytes and a long time to run' % str(0x180000000)) - f = open(TESTFN, 'w+b') -diff -Nru orig/Lib/test/test_os.py modified/Lib/test/test_os.py ---- orig/Lib/test/test_os.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_os.py 2015-05-04 14:42:36.000000000 +0800 -@@ -555,6 +555,7 @@ - - # Bug 1110478 - @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_update2(self): - os.environ.clear() - os.environ.update(HELLO="World") -@@ -563,6 +564,7 @@ - self.assertEqual(value, "World") - - @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_os_popen_iter(self): - with os.popen( - "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: -@@ -1147,6 +1149,7 @@ - os.execve = orig_execve - os.defpath = orig_defpath - -+@unittest.skipUnless(hasattr(os, 'execv'), "os module doesn't provide execvpe()") - class ExecTests(unittest.TestCase): - @unittest.skipIf(USING_LINUXTHREADS, - "avoid triggering a linuxthreads bug: see issue #4970") -@@ -1398,6 +1401,7 @@ - self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) - - @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_setreuid_neg1(self): - # Needs to accept -1. We run this in a subprocess to avoid - # altering the test runner's process state (issue8045). -@@ -1406,6 +1410,7 @@ - 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) - - @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_setregid(self): - if os.getuid() != 0 and not HAVE_WHEEL_GROUP: - self.assertRaises(OSError, os.setregid, 0, 0) -@@ -1413,6 +1418,7 @@ - self.assertRaises(OverflowError, os.setregid, 0, 1<<32) - - @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_setregid_neg1(self): - # Needs to accept -1. We run this in a subprocess to avoid - # altering the test runner's process state (issue8045). -@@ -1838,6 +1844,7 @@ - - class PidTests(unittest.TestCase): - @unittest.skipUnless(hasattr(os, 'getppid'), "test needs os.getppid") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_getppid(self): - p = subprocess.Popen([sys.executable, '-c', - 'import os; print(os.getppid())'], -@@ -2295,6 +2302,7 @@ - self.assertGreaterEqual(size.columns, 0) - self.assertGreaterEqual(size.lines, 0) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_stty_match(self): - """Check if stty returns the same results - -diff -Nru orig/Lib/test/test_pdb.py modified/Lib/test/test_pdb.py ---- orig/Lib/test/test_pdb.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pdb.py 2015-05-04 14:42:35.000000000 +0800 -@@ -910,6 +910,7 @@ - - class PdbTestCase(unittest.TestCase): - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def run_pdb(self, script, commands): - """Run 'script' lines with pdb and the pdb 'commands'.""" - filename = 'main.py' -@@ -957,6 +958,7 @@ - ('bar', 4), - ) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_issue7964(self): - # open the file as binary so we can force \r\n newline - with open(support.TESTFN, 'wb') as f: -@@ -1008,6 +1010,7 @@ - any('main.py(5)foo()->None' in l for l in stdout.splitlines()), - 'Fail to step into the caller after a return') - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_issue13210(self): - # invoking "continue" on a non-main thread triggered an exception - # inside signal.signal -diff -Nru orig/Lib/test/test_pep277.py modified/Lib/test/test_pep277.py ---- orig/Lib/test/test_pep277.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pep277.py 2015-05-04 13:16:06.000000000 +0800 -@@ -27,7 +27,7 @@ - # these normal forms. For example, HFS Plus uses a variant of Normal Form D - # in which U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through - # U+2FAFF are not decomposed." --if sys.platform != 'darwin': -+if sys.platform not in ('darwin', 'ios'): - filenames.extend([ - # Specific code points: NFC(fn), NFD(fn), NFKC(fn) and NFKD(fn) all differents - '11_\u0385\u03d3\u03d4', -@@ -117,11 +117,11 @@ - os.stat(name) - self._apply_failure(os.listdir, name, self._listdir_failure) - -- # Skip the test on darwin, because darwin does normalize the filename to -+ # Skip the test on darwin/iOS, because darwin does normalize the filename to - # NFD (a variant of Unicode NFD form). Normalize the filename to NFC, NFKC, - # NFKD in Python is useless, because darwin will normalize it later and so - # open(), os.stat(), etc. don't raise any exception. -- @unittest.skipIf(sys.platform == 'darwin', 'irrelevant test on Mac OS X') -+ @unittest.skipIf(sys.platform in ('darwin', 'ios'), 'irrelevant test on Mac OS X') - def test_normalize(self): - files = set(self.files) - others = set() -@@ -136,10 +136,10 @@ - self._apply_failure(os.remove, name) - self._apply_failure(os.listdir, name) - -- # Skip the test on darwin, because darwin uses a normalization different -+ # Skip the test on darwin/iOS, because darwin uses a normalization different - # than Python NFD normalization: filenames are different even if we use - # Python NFD normalization. -- @unittest.skipIf(sys.platform == 'darwin', 'irrelevant test on Mac OS X') -+ @unittest.skipIf(sys.platform in ('darwin', 'ios'), 'irrelevant test on Mac OS X') - def test_listdir(self): - sf0 = set(self.files) - with warnings.catch_warnings(): -diff -Nru orig/Lib/test/test_pipes.py modified/Lib/test/test_pipes.py ---- orig/Lib/test/test_pipes.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pipes.py 2015-05-02 21:03:07.000000000 +0800 -@@ -1,17 +1,21 @@ - import pipes - import os - import string -+import sys - import unittest - from test.support import TESTFN, run_unittest, unlink, reap_children - - if os.name != 'posix': - raise unittest.SkipTest('pipes module only works on posix') -+if sys.platform == 'ios': -+ raise unittest.SkipTest('pipes tests cannot run on iOS') - - TESTFN2 = TESTFN + "2" - - # tr a-z A-Z is not portable, so make the ranges explicit - s_command = 'tr %s %s' % (string.ascii_lowercase, string.ascii_uppercase) - -+ - class SimplePipeTests(unittest.TestCase): - def tearDown(self): - for f in (TESTFN, TESTFN2): -diff -Nru orig/Lib/test/test_platform.py modified/Lib/test/test_platform.py ---- orig/Lib/test/test_platform.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_platform.py 2015-05-04 14:43:41.000000000 +0800 -@@ -9,11 +9,13 @@ - - from test import support - -+ - class PlatformTest(unittest.TestCase): - def test_architecture(self): - res = platform.architecture() - - @support.skip_unless_symlink -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_architecture_via_symlink(self): # issue3762 - # On Windows, the EXE needs to know where pythonXY.dll is at so we have - # to add the directory to the path. -@@ -187,7 +189,7 @@ - def test_mac_ver(self): - res = platform.mac_ver() - -- if platform.uname().system == 'Darwin': -+ if platform.uname().system == 'Darwin' and sys.platform != 'ios': - # We're on a MacOSX system, check that - # the right version information is returned - fd = os.popen('sw_vers', 'r') -@@ -216,7 +218,6 @@ - else: - self.assertEqual(res[2], 'PowerPC') - -- - @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") - def test_mac_ver_with_fork(self): - # Issue7895: platform.mac_ver() crashes when using fork without exec -@@ -265,6 +266,7 @@ - ): - self.assertEqual(platform._parse_release_file(input), output) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_popen(self): - mswindows = (sys.platform == "win32") - -diff -Nru orig/Lib/test/test_poll.py modified/Lib/test/test_poll.py ---- orig/Lib/test/test_poll.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_poll.py 2015-05-04 14:43:49.000000000 +0800 -@@ -25,6 +25,7 @@ - match.append(fd) - return match - -+ - class PollTests(unittest.TestCase): - - def test_poll1(self): -@@ -121,6 +122,7 @@ - # Another test case for poll(). This is copied from the test case for - # select(), modified to use poll() instead. - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_poll2(self): - cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' - proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, -diff -Nru orig/Lib/test/test_popen.py modified/Lib/test/test_popen.py ---- orig/Lib/test/test_popen.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_popen.py 2015-05-04 14:42:34.000000000 +0800 -@@ -5,7 +5,9 @@ - - import unittest - from test import support --import os, sys -+import os -+import subprocess -+import sys - - # Test that command-lines get down as we expect. - # To do this we execute: -@@ -16,6 +18,8 @@ - if ' ' in python: - python = '"' + python + '"' # quote embedded space for cmdline - -+ -+@unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - class PopenTest(unittest.TestCase): - - def _do_test_commandline(self, cmdline, expected): -@@ -23,7 +27,7 @@ - cmd = cmd % (python, cmdline) - with os.popen(cmd) as p: - data = p.read() -- got = eval(data)[1:] # strip off argv[0] -+ got = eval(data)[1:] # strip off argv[0] - self.assertEqual(got, expected) - - def test_popen(self): -@@ -57,6 +61,7 @@ - with os.popen("echo hello") as f: - self.assertEqual(list(f), ["hello\n"]) - -+ - def test_main(): - support.run_unittest(PopenTest) - -diff -Nru orig/Lib/test/test_posix.py modified/Lib/test/test_posix.py ---- orig/Lib/test/test_posix.py 2015-05-02 23:43:12.000000000 +0800 -+++ modified/Lib/test/test_posix.py 2015-05-04 14:42:33.000000000 +0800 -@@ -12,8 +12,8 @@ - import fcntl - import platform - import pwd --import shutil - import stat -+import subprocess - import tempfile - import unittest - import warnings -@@ -21,6 +21,7 @@ - _DUMMY_SYMLINK = os.path.join(tempfile.gettempdir(), - support.TESTFN + '-dummy-symlink') - -+ - class PosixTester(unittest.TestCase): - - def setUp(self): -@@ -492,9 +493,10 @@ - check_stat(uid, gid) - self.assertRaises(OSError, chown_func, first_param, 0, -1) - check_stat(uid, gid) -- if 0 not in os.getgroups(): -- self.assertRaises(OSError, chown_func, first_param, -1, 0) -- check_stat(uid, gid) -+ if hasattr(os, 'getgroups'): -+ if 0 not in os.getgroups(): -+ self.assertRaises(OSError, chown_func, first_param, -1, 0) -+ check_stat(uid, gid) - # test illegal types - for t in str, float: - self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) -@@ -754,8 +756,8 @@ - group = pwd.getpwuid(os.getuid())[3] - self.assertIn(group, posix.getgrouplist(user, group)) - -- - @unittest.skipUnless(hasattr(os, 'getegid'), "test needs os.getegid()") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_getgroups(self): - with os.popen('id -G 2>/dev/null') as idg: - groups = idg.read().strip() -diff -Nru orig/Lib/test/test_pty.py modified/Lib/test/test_pty.py ---- orig/Lib/test/test_pty.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_pty.py 2015-05-04 14:42:26.000000000 +0800 -@@ -110,7 +110,7 @@ - os.close(slave_fd) - os.close(master_fd) - -- -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") - def test_fork(self): - debug("calling pty.fork()") - pid, master_fd = pty.fork() -diff -Nru orig/Lib/test/test_quopri.py modified/Lib/test/test_quopri.py ---- orig/Lib/test/test_quopri.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_quopri.py 2015-05-04 14:42:33.000000000 +0800 -@@ -174,6 +174,7 @@ - for p, e in self.HSTRINGS: - self.assertEqual(quopri.decodestring(e, header=True), p) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_scriptencode(self): - (p, e) = self.STRINGS[-1] - process = subprocess.Popen([sys.executable, "-mquopri"], -@@ -190,6 +191,7 @@ - self.assertEqual(cout[i], e[i]) - self.assertEqual(cout, e) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_scriptdecode(self): - (p, e) = self.STRINGS[-1] - process = subprocess.Popen([sys.executable, "-mquopri", "-d"], -diff -Nru orig/Lib/test/test_select.py modified/Lib/test/test_select.py ---- orig/Lib/test/test_select.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_select.py 2015-05-04 14:42:32.000000000 +0800 -@@ -1,11 +1,13 @@ - import errno - import os - import select -+import subprocess - import sys - import unittest - from test import support - --@unittest.skipIf((sys.platform[:3]=='win'), -+ -+@unittest.skipIf((sys.platform[:3] == 'win'), - "can't easily test on this system") - class SelectTestCase(unittest.TestCase): - -@@ -44,6 +46,7 @@ - self.assertIsNot(r, x) - self.assertIsNot(w, x) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_select(self): - cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' - p = os.popen(cmd, 'r') -diff -Nru orig/Lib/test/test_shutil.py modified/Lib/test/test_shutil.py ---- orig/Lib/test/test_shutil.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_shutil.py 2015-07-04 22:52:47.000000000 +0800 -@@ -48,6 +48,7 @@ - except ImportError: - ZIP_SUPPORT = find_executable('zip') - -+ - def _fake_rename(*args, **kwargs): - # Pretend the destination path is on a different filesystem. - raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link") -@@ -1318,6 +1319,7 @@ - self.assertEqual(['foo'], os.listdir(rv)) - - -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't support other executables.") - class TestWhich(unittest.TestCase): - - def setUp(self): -@@ -1741,6 +1743,7 @@ - self.assertEqual(size.lines, 888) - - @unittest.skipUnless(os.isatty(sys.__stdout__.fileno()), "not on tty") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_stty_match(self): - """Check if stty returns the same results ignoring env - -diff -Nru orig/Lib/test/test_signal.py modified/Lib/test/test_signal.py ---- orig/Lib/test/test_signal.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_signal.py 2015-05-04 14:42:31.000000000 +0800 -@@ -135,6 +135,7 @@ - @unittest.skipIf(sys.platform=='freebsd6', - 'inter process signals not reliable (do not mix well with threading) ' - 'on freebsd6') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_main(self): - # This function spawns a child process to insulate the main - # test-running process from all the signals. It then -diff -Nru orig/Lib/test/test_site.py modified/Lib/test/test_site.py ---- orig/Lib/test/test_site.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_site.py 2015-07-04 21:21:33.000000000 +0800 -@@ -31,6 +31,7 @@ - os.makedirs(site.USER_SITE) - site.addsitedir(site.USER_SITE) - -+ - class HelperFunctionsTests(unittest.TestCase): - """Tests for helper functions. - """ -@@ -164,6 +165,7 @@ - - @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " - "user-site (site.ENABLE_USER_SITE)") -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_s_option(self): - usersite = site.USER_SITE - self.assertIn(usersite, sys.path) -@@ -231,7 +233,7 @@ - dirs = site.getsitepackages() - - if (sys.platform == "darwin" and -- sysconfig.get_config_var("PYTHONFRAMEWORK")): -+ sysconfig.get_config_var("PYTHONFRAMEWORK")): - # OS X framework builds - site.PREFIXES = ['Python.framework'] - dirs = site.getsitepackages() -@@ -322,6 +324,7 @@ - """Restore sys.path""" - sys.path[:] = self.sys_path - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_abs_paths(self): - # Make sure all imported modules have their __file__ and __cached__ - # attributes as absolute paths. Arranging to put the Lib directory on -@@ -432,6 +435,7 @@ - - class StartupImportTests(unittest.TestCase): - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_startup_imports(self): - # This tests checks which modules are loaded by Python when it - # initially starts upon startup. -diff -Nru orig/Lib/test/test_socket.py modified/Lib/test/test_socket.py ---- orig/Lib/test/test_socket.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_socket.py 2015-07-04 22:53:12.000000000 +0800 -@@ -530,6 +530,7 @@ - sock.bind(path) - self.addCleanup(support.unlink, path) - -+ - class UnixStreamBase(UnixSocketTestBase): - """Base class for Unix-domain SOCK_STREAM tests.""" - -@@ -774,8 +775,7 @@ - self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names))) - - def test_host_resolution(self): -- for addr in ['0.1.1.~1', '1+.1.1.1', '::1q', '::1::2', -- '1:1:1:1:1:1:1:1:1']: -+ for addr in ['0.1.1.~1', '1+.1.1.1']: - self.assertRaises(OSError, socket.gethostbyname, addr) - self.assertRaises(OSError, socket.gethostbyaddr, addr) - -@@ -787,6 +787,12 @@ - for host in [support.HOST]: - self.assertIn(host, socket.gethostbyaddr(host)[2]) - -+ @unittest.skipUnless(socket.has_ipv6, "test needs IPv6 support") -+ def test_host_resolution_ipv6(self): -+ for addr in ['::1q', '::1::2', '1:1:1:1:1:1:1:1:1']: -+ self.assertRaises(OSError, socket.gethostbyname, addr) -+ self.assertRaises(OSError, socket.gethostbyaddr, addr) -+ - @unittest.skipUnless(hasattr(socket, 'sethostname'), "test needs socket.sethostname()") - @unittest.skipUnless(hasattr(socket, 'gethostname'), "test needs socket.gethostname()") - def test_sethostname(self): -@@ -1286,7 +1292,7 @@ - # these should all be successful - socket.gethostbyname('испытание.python.org') - socket.gethostbyname_ex('испытание.python.org') -- socket.getaddrinfo('испытание.python.org',0,socket.AF_UNSPEC,socket.SOCK_STREAM) -+ socket.getaddrinfo('испытание.python.org', 0, socket.AF_UNSPEC, socket.SOCK_STREAM) - # this may not work if the forward lookup choses the IPv6 address, as that doesn't - # have a reverse entry yet - # socket.gethostbyaddr('испытание.python.org') -@@ -2727,7 +2733,7 @@ - def _testFDPassCMSG_LEN(self): - self.createAndSendFDs(1) - -- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") -+ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @requireAttrs(socket, "CMSG_SPACE") - def testFDPassSeparate(self): - # Pass two FDs in two separate arrays. Arrays may be combined -@@ -2737,7 +2743,7 @@ - maxcmsgs=2) - - @testFDPassSeparate.client_skip -- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") -+ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - def _testFDPassSeparate(self): - fd0, fd1 = self.newFDs(2) - self.assertEqual( -@@ -2749,7 +2755,7 @@ - array.array("i", [fd1]))]), - len(MSG)) - -- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") -+ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - @requireAttrs(socket, "CMSG_SPACE") - def testFDPassSeparateMinSpace(self): - # Pass two FDs in two separate arrays, receiving them into the -@@ -2761,7 +2767,7 @@ - maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC) - - @testFDPassSeparateMinSpace.client_skip -- @unittest.skipIf(sys.platform == "darwin", "skipping, see issue #12958") -+ @unittest.skipIf(sys.platform in ("darwin", "ios"), "skipping, see issue #12958") - def _testFDPassSeparateMinSpace(self): - fd0, fd1 = self.newFDs(2) - self.assertEqual( -@@ -3532,12 +3538,14 @@ - - @requireAttrs(socket.socket, "sendmsg") - @requireAttrs(socket, "AF_UNIX") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(thread, 'Threading required for this test.') - class SendmsgUnixStreamTest(SendmsgStreamTests, SendrecvmsgUnixStreamTestBase): - pass - - @requireAttrs(socket.socket, "recvmsg") - @requireAttrs(socket, "AF_UNIX") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(thread, 'Threading required for this test.') - class RecvmsgUnixStreamTest(RecvmsgTests, RecvmsgGenericStreamTests, - SendrecvmsgUnixStreamTestBase): -@@ -3545,6 +3553,7 @@ - - @requireAttrs(socket.socket, "recvmsg_into") - @requireAttrs(socket, "AF_UNIX") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(thread, 'Threading required for this test.') - class RecvmsgIntoUnixStreamTest(RecvmsgIntoTests, RecvmsgGenericStreamTests, - SendrecvmsgUnixStreamTestBase): -@@ -3552,12 +3561,14 @@ - - @requireAttrs(socket.socket, "sendmsg", "recvmsg") - @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(thread, 'Threading required for this test.') - class RecvmsgSCMRightsStreamTest(SCMRightsTest, SendrecvmsgUnixStreamTestBase): - pass - - @requireAttrs(socket.socket, "sendmsg", "recvmsg_into") - @requireAttrs(socket, "AF_UNIX", "SOL_SOCKET", "SCM_RIGHTS") -+@unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - @unittest.skipUnless(thread, 'Threading required for this test.') - class RecvmsgIntoSCMRightsStreamTest(RecvmsgIntoMixin, SCMRightsTest, - SendrecvmsgUnixStreamTestBase): -diff -Nru orig/Lib/test/test_socketserver.py modified/Lib/test/test_socketserver.py ---- orig/Lib/test/test_socketserver.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_socketserver.py 2015-07-04 22:53:26.000000000 +0800 -@@ -8,7 +8,7 @@ - import select - import signal - import socket --import select -+import sys - import errno - import tempfile - import unittest -@@ -32,6 +32,7 @@ - HAVE_FORKING = hasattr(os, "fork") - requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking') - -+ - def signal_alarm(n): - """Call signal.alarm when it exists (i.e. not on Windows).""" - if hasattr(signal, 'alarm'): -@@ -186,12 +187,14 @@ - self.stream_examine) - - @requires_unix_sockets -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_UnixStreamServer(self): - self.run_server(socketserver.UnixStreamServer, - socketserver.StreamRequestHandler, - self.stream_examine) - - @requires_unix_sockets -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't fully support UNIX sockets.") - def test_ThreadingUnixStreamServer(self): - self.run_server(socketserver.ThreadingUnixStreamServer, - socketserver.StreamRequestHandler, -diff -Nru orig/Lib/test/test_source_encoding.py modified/Lib/test/test_source_encoding.py ---- orig/Lib/test/test_source_encoding.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_source_encoding.py 2015-05-04 14:44:09.000000000 +0800 -@@ -7,6 +7,7 @@ - import sys - import subprocess - -+ - class SourceEncodingTest(unittest.TestCase): - - def test_pep263(self): -@@ -59,6 +60,7 @@ - # two bytes in common with the UTF-8 BOM - self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_20731(self): - sub = subprocess.Popen([sys.executable, - os.path.join(os.path.dirname(__file__), -diff -Nru orig/Lib/test/test_subprocess.py modified/Lib/test/test_subprocess.py ---- orig/Lib/test/test_subprocess.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_subprocess.py 2015-05-02 21:04:07.000000000 +0800 -@@ -26,6 +26,9 @@ - - mswindows = (sys.platform == "win32") - -+if not hasattr(subprocess, 'Popen'): -+ raise unittest.SkipTest("subprocess module doesn't provide Popen()") -+ - # - # Depends on the following external programs: Python - # -diff -Nru orig/Lib/test/test_sundry.py modified/Lib/test/test_sundry.py ---- orig/Lib/test/test_sundry.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sundry.py 2015-04-30 10:12:55.000000000 +0800 -@@ -20,7 +20,8 @@ - - import distutils.bcppcompiler - import distutils.ccompiler -- import distutils.cygwinccompiler -+ if sys.platform.startswith('win'): -+ import distutils.cygwinccompiler - import distutils.filelist - if sys.platform.startswith('win'): - import distutils.msvccompiler -diff -Nru orig/Lib/test/test_sys.py modified/Lib/test/test_sys.py ---- orig/Lib/test/test_sys.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sys.py 2015-05-04 14:44:19.000000000 +0800 -@@ -20,6 +20,7 @@ - except ImportError: - threading = None - -+ - class SysModuleTest(unittest.TestCase): - - def setUp(self): -@@ -216,6 +217,7 @@ - finally: - sys.setrecursionlimit(oldlimit) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_recursionlimit_fatalerror(self): - # A fatal error occurs if a second recursion limit is hit when recovering - # from a first one. -@@ -542,6 +544,7 @@ - def test_clear_type_cache(self): - sys._clear_type_cache() - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_ioencoding(self): - env = dict(os.environ) - -@@ -587,6 +590,7 @@ - - @unittest.skipUnless(test.support.FS_NONASCII, - 'requires OS support of non-ASCII encodings') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_ioencoding_nonascii(self): - env = dict(os.environ) - -@@ -599,6 +603,7 @@ - - @unittest.skipIf(sys.base_prefix != sys.prefix, - 'Test is not venv-compatible') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_executable(self): - # sys.executable should be absolute - self.assertEqual(os.path.abspath(sys.executable), sys.executable) -diff -Nru orig/Lib/test/test_sysconfig.py modified/Lib/test/test_sysconfig.py ---- orig/Lib/test/test_sysconfig.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_sysconfig.py 2015-07-04 22:53:33.000000000 +0800 -@@ -15,6 +15,7 @@ - get_scheme_names, get_config_var, _main) - import _osx_support - -+ - class TestSysConfig(unittest.TestCase): - - def setUp(self): -@@ -234,11 +235,12 @@ - self.assertTrue(os.path.isfile(config_h), config_h) - - def test_get_scheme_names(self): -- wanted = ('nt', 'nt_user', 'osx_framework_user', -+ wanted = ('ios', 'nt', 'nt_user', 'osx_framework_user', - 'posix_home', 'posix_prefix', 'posix_user') - self.assertEqual(get_scheme_names(), wanted) - - @skip_unless_symlink -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_symlink(self): - # On Windows, the EXE needs to know where pythonXY.dll is at so we have - # to add the directory to the path. -diff -Nru orig/Lib/test/test_thread.py modified/Lib/test/test_thread.py ---- orig/Lib/test/test_thread.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_thread.py 2015-05-04 14:44:49.000000000 +0800 -@@ -14,12 +14,14 @@ - - _print_mutex = thread.allocate_lock() - -+ - def verbose_print(arg): - """Helper function for printing out debugging output.""" - if support.verbose: - with _print_mutex: - print(arg) - -+ - class BasicThreadTest(unittest.TestCase): - - def setUp(self): -@@ -219,6 +221,7 @@ - - @unittest.skipIf(sys.platform.startswith('win'), - "This test is only appropriate for POSIX-like systems.") -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") - @support.reap_threads - def test_forkinthread(self): - def thread1(): -diff -Nru orig/Lib/test/test_threading.py modified/Lib/test/test_threading.py ---- orig/Lib/test/test_threading.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_threading.py 2015-05-02 16:19:47.000000000 +0800 -@@ -825,6 +825,7 @@ - - class SubinterpThreadingTests(BaseTestCase): - -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't have os.pipe") - def test_threads_join(self): - # Non-daemon threads should be joined at subinterpreter shutdown - # (issue #18808) -@@ -848,6 +849,7 @@ - # The thread was joined properly. - self.assertEqual(os.read(r, 1), b"x") - -+ @unittest.skipIf(sys.platform == 'ios', "iOS doesn't have os.pipe") - def test_threads_join_2(self): - # Same as above, but a delay gets introduced after the thread's - # Python code returned but before the thread state is deleted. -diff -Nru orig/Lib/test/test_traceback.py modified/Lib/test/test_traceback.py ---- orig/Lib/test/test_traceback.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_traceback.py 2015-05-04 14:42:29.000000000 +0800 -@@ -1,6 +1,7 @@ - """Test cases for traceback module""" - - from io import StringIO -+import subprocess - import sys - import unittest - import re -@@ -101,11 +102,12 @@ - err = traceback.format_exception_only(None, None) - self.assertEqual(err, ['None\n']) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_encoded_file(self): - # Test that tracebacks are correctly printed for encoded source files: - # - correct line number (Issue2384) - # - respect file encoding (Issue3975) -- import tempfile, sys, subprocess, os -+ import tempfile, sys, os - - # The spawned subprocess has its stdout redirected to a PIPE, and its - # encoding may be different from the current interpreter, on Windows -diff -Nru orig/Lib/test/test_unicodedata.py modified/Lib/test/test_unicodedata.py ---- orig/Lib/test/test_unicodedata.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_unicodedata.py 2015-05-04 14:42:28.000000000 +0800 -@@ -222,8 +222,10 @@ - self.assertEqual(eaw('\u2010'), 'A') - self.assertEqual(eaw('\U00020000'), 'W') - -+ - class UnicodeMiscTest(UnicodeDatabaseTest): - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_failed_import_during_compiling(self): - # Issue 4367 - # Decoding \N escapes requires the unicodedata module. If it can't be -diff -Nru orig/Lib/test/test_urllib2net.py modified/Lib/test/test_urllib2net.py ---- orig/Lib/test/test_urllib2net.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_urllib2net.py 2015-05-04 13:16:45.000000000 +0800 -@@ -156,6 +156,7 @@ - - ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) - -+ @unittest.skipIf(ssl is None, 'test requires ssl module') - def test_urlwithfrag(self): - urlwith_frag = "https://docs.python.org/2/glossary.html#glossary" - with support.transient_internet(urlwith_frag): -@@ -164,6 +165,7 @@ - self.assertEqual(res.geturl(), - "https://docs.python.org/2/glossary.html#glossary") - -+ @unittest.skipIf(ssl is None, 'test requires ssl module') - def test_redirect_url_withfrag(self): - redirect_url_with_frag = "http://bit.ly/1iSHToT" - with support.transient_internet(redirect_url_with_frag): -diff -Nru orig/Lib/test/test_uuid.py modified/Lib/test/test_uuid.py ---- orig/Lib/test/test_uuid.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_uuid.py 2015-05-04 14:44:34.000000000 +0800 -@@ -3,9 +3,11 @@ - import builtins - import io - import os -+import subprocess - import shutil - import uuid - -+ - def importable(name): - try: - __import__(name) -@@ -13,6 +15,7 @@ - except: - return False - -+ - class TestUUID(unittest.TestCase): - last_node = None - source2node = {} -@@ -314,6 +317,7 @@ - TestUUID.last_node = node - - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_ifconfig_getnode(self): - node = uuid._ifconfig_getnode() - if node is not None: -@@ -472,6 +476,7 @@ - equal(str(u), v) - - @unittest.skipUnless(os.name == 'posix', 'requires Posix') -+ @unittest.skipUnless(hasattr(os, 'fork'), "test requires os.fork()") - def testIssue8621(self): - # On at least some versions of OSX uuid.uuid4 generates - # the same sequence of UUIDs in the parent and any -diff -Nru orig/Lib/test/test_venv.py modified/Lib/test/test_venv.py ---- orig/Lib/test/test_venv.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_venv.py 2015-05-04 14:44:42.000000000 +0800 -@@ -15,7 +15,6 @@ - import tempfile - from test.support import (captured_stdout, captured_stderr, run_unittest, - can_symlink, EnvironmentVarGuard) --import textwrap - import unittest - import venv - -@@ -36,6 +35,7 @@ - def failsOnWindows(f): - return f - -+ - class BaseTest(unittest.TestCase): - """Base class for venv tests.""" - -@@ -112,6 +112,7 @@ - self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) - - @skipInVenv -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_prefixes(self): - """ - Test that the prefix values are as expected. -@@ -250,6 +251,7 @@ - # point to the venv being used to run the test, and we lose the link - # to the source build - so Python can't initialise properly. - @skipInVenv -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_executable(self): - """ - Test that the sys.executable value is as expected. -@@ -264,6 +266,7 @@ - self.assertEqual(out.strip(), envpy.encode()) - - @unittest.skipUnless(can_symlink(), 'Needs symlinks') -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_executable_symlinks(self): - """ - Test that the sys.executable value is as expected. -@@ -282,6 +285,7 @@ - @skipInVenv - class EnsurePipTest(BaseTest): - """Test venv module installation of pip.""" -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def assert_pip_not_installed(self): - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) -@@ -320,6 +324,7 @@ - - # Requesting pip fails without SSL (http://bugs.python.org/issue19744) - @unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE) -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_with_pip(self): - shutil.rmtree(self.env_dir) - with EnvironmentVarGuard() as envvars: -diff -Nru orig/Lib/test/test_webbrowser.py modified/Lib/test/test_webbrowser.py ---- orig/Lib/test/test_webbrowser.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_webbrowser.py 2015-04-30 10:04:24.000000000 +0800 -@@ -2,8 +2,11 @@ - import unittest - import subprocess - from unittest import mock -+import sys - from test import support - -+if sys.platform == 'ios': -+ raise unittest.SkipTest("Can't run webbrowser tests on iOS") - - URL = 'http://www.example.com/' - CMD_NAME = 'test' -diff -Nru orig/Lib/test/test_zipfile.py modified/Lib/test/test_zipfile.py ---- orig/Lib/test/test_zipfile.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/test/test_zipfile.py 2015-07-04 22:53:46.000000000 +0800 -@@ -583,6 +583,7 @@ - if name + 'o' not in namelist: - self.assertIn(name + 'c', namelist) - -+ @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") - def test_write_pyfile(self): - with TemporaryFile() as t, zipfile.PyZipFile(t, "w") as zipfp: - fn = __file__ -@@ -625,6 +626,7 @@ - self.assertCompiledIn('email/__init__.py', names) - self.assertCompiledIn('email/mime/text.py', names) - -+ @unittest.skipIf(sys.dont_write_bytecode, "Test requires ability to write bytecode") - def test_write_filtered_python_package(self): - import test - packagedir = os.path.dirname(test.__file__) -diff -Nru orig/Lib/unittest/test/test_break.py modified/Lib/unittest/test/test_break.py ---- orig/Lib/unittest/test/test_break.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/unittest/test/test_break.py 2015-04-27 09:20:54.000000000 +0800 -@@ -9,7 +9,7 @@ - - - @unittest.skipUnless(hasattr(os, 'kill'), "Test requires os.kill") --@unittest.skipIf(sys.platform =="win32", "Test cannot run on Windows") -+@unittest.skipIf(sys.platform == "win32", "Test cannot run on Windows") - @unittest.skipIf(sys.platform == 'freebsd6', "Test kills regrtest on freebsd6 " - "if threads have been used") - class TestBreak(unittest.TestCase): -diff -Nru orig/Lib/unittest/test/test_runner.py modified/Lib/unittest/test/test_runner.py ---- orig/Lib/unittest/test/test_runner.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/unittest/test/test_runner.py 2015-05-04 14:42:27.000000000 +0800 -@@ -270,6 +270,7 @@ - expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) - self.assertEqual(runner._makeResult(), expectedresult) - -+ @unittest.skipUnless(hasattr(subprocess, 'Popen'), "test requires subprocess.Popen()") - def test_warnings(self): - """ - Check that warnings argument of TextTestRunner correctly affects the -diff -Nru orig/Lib/webbrowser.py modified/Lib/webbrowser.py ---- orig/Lib/webbrowser.py 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Lib/webbrowser.py 2015-03-15 00:57:57.000000000 +0800 -@@ -602,6 +602,57 @@ - register("firefox", None, MacOSXOSAScript('firefox'), -1) - register("MacOSX", None, MacOSXOSAScript('default'), -1) - -+# -+# Platform support for iOS -+# -+if sys.platform == 'ios': -+ class MobileSafari(BaseBrowser): -+ def open(self, url, new=0, autoraise=True): -+ # This code is the equivalent of: -+ # NSURL *nsurl = [NSURL URLWithString:url]; -+ # [[UIApplication sharedApplication] openURL:nsurl]; -+ from ctypes import cdll, c_void_p, c_char_p, c_uint32 -+ from ctypes import util -+ objc = cdll.LoadLibrary(util.find_library(b'objc')) -+ cf = cdll.LoadLibrary(util.find_library(b'CoreFoundation')) -+ objc.objc_getClass.restype = c_void_p -+ objc.objc_getClass.argtypes = [c_char_p] -+ objc.sel_registerName.restype = c_void_p -+ objc.sel_registerName.argtypes = [c_char_p] -+ cf.CFStringCreateWithCString.restype = c_void_p -+ cf.CFStringCreateWithCString.argtypes = [c_void_p, c_char_p, c_uint32] -+ -+ # Get an NSString describing the URL -+ kCFStringEncodingUTF8 = 0x08000100 -+ url = c_void_p(cf.CFStringCreateWithCString(None, url.encode('utf-8'), kCFStringEncodingUTF8)) -+ autorelease = c_void_p(objc.sel_registerName(b'autorelease')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] -+ objc.objc_msgSend.restype = c_void_p -+ objc.objc_msgSend(url, autorelease) -+ -+ # Get an NSURL object representing the URL -+ NSURL = c_void_p(objc.objc_getClass(b'NSURL')) -+ urlWithString_ = c_void_p(objc.sel_registerName(b'URLWithString:')) -+ objc.objc_msgSend.restype = c_void_p -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] -+ nsurl = c_void_p(objc.objc_msgSend(NSURL, urlWithString_, url)) -+ -+ # Get the shared UIApplication instance -+ UIApplication = c_void_p(objc.objc_getClass(b'UIApplication')) -+ sharedApplication = c_void_p(objc.sel_registerName(b'sharedApplication')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p] -+ objc.objc_msgSend.restype = c_void_p -+ shared_app = c_void_p(objc.objc_msgSend(UIApplication, sharedApplication)) -+ -+ # Open the URL on the shared application -+ openURL_ = c_void_p(objc.sel_registerName(b'openURL:')) -+ objc.objc_msgSend.argtypes = [c_void_p, c_void_p, c_void_p] -+ objc.objc_msgSend.restype = None -+ objc.objc_msgSend(shared_app, openURL_, nsurl) -+ -+ return True -+ -+ register("mobilesafari", None, MobileSafari(), -1) - - # OK, now that we know what the default preference orders for each - # platform are, allow user to override them with the BROWSER variable. -diff -Nru orig/Modules/Setup.embedded modified/Modules/Setup.embedded ---- orig/Modules/Setup.embedded 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.embedded 2015-07-04 23:36:43.000000000 +0800 -@@ -0,0 +1,91 @@ -+##################################################################### -+# Static compilation instructions for all binary modules. -+##################################################################### -+ -+_bisect _bisectmodule.c -+_codecs_cn cjkcodecs/_codecs_cn.c -+_codecs_hk cjkcodecs/_codecs_hk.c -+_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -+_codecs_jp cjkcodecs/_codecs_jp.c -+_codecs_kr cjkcodecs/_codecs_kr.c -+_codecs_tw cjkcodecs/_codecs_tw.c -+_crypt _cryptmodule.c -+_csv _csv.c -+_datetime _datetimemodule.c -+_elementtree _elementtree.c \ -+ -I$(srcdir)/Modules/expat -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+_heapq _heapqmodule.c -+_json _json.c -+_lsprof _lsprof.o rotatingtree.c -+_md5 md5module.c -+_multibytecodec cjkcodecs/multibytecodec.c -+_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -+_opcode _opcode.c -+_pickle _pickle.c -+_posixsubprocess _posixsubprocess.c -+_random _randommodule.c -+_sha1 sha1module.c -+_sha256 sha256module.c -+_sha512 sha512module.c -+_socket socketmodule.c -+_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ -+ _sqlite/cache.c \ -+ _sqlite/connection.c \ -+ _sqlite/cursor.c \ -+ _sqlite/microprotocols.c \ -+ _sqlite/module.c \ -+ _sqlite/prepare_protocol.c \ -+ _sqlite/row.c \ -+ _sqlite/statement.c \ -+ _sqlite/util.c -+_struct _struct.c -+array arraymodule.c -+audioop audioop.c -+binascii binascii.c -+cmath cmathmodule.c _math.c -+fcntl fcntlmodule.c -+grp grpmodule.c -+math mathmodule.c -+mmap mmapmodule.c -+parser parsermodule.c -+pyexpat expat/xmlparse.c \ -+ expat/xmlrole.c \ -+ expat/xmltok.c \ -+ pyexpat.c \ -+ -I$(srcdir)/Modules/expat \ -+ -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -+resource resource.c -+select selectmodule.c -+syslog syslogmodule.c -+termios termios.c -+time timemodule.c -+unicodedata unicodedata.c -+zlib zlibmodule.c -I$(prefix)/include -lz -+ -+##################################################################### -+# Testing modules -+##################################################################### -+_ctypes_test _ctypes/_ctypes_test.c -+_testbuffer _testbuffer.c -+_testcapi _testcapimodule.c -+_testimportmultiple _testimportmultiple.c -+ -+##################################################################### -+# Modules that require additional frameworks -+##################################################################### -+#_bz2 bz2module.c -lbz2 -+#_curses _cursesmodule.c -lcurses -ltermcap -+#_curses_panel _curses_panel.c -lpanel -lncurses -+#_dbm _dbmmodule.c -+#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -+#_lzma -+#_ssl _ssl.c \ -+# -I$(SSL)/include -I$(SSL)/include/openssl \ -+# -L$(SSL)/lib -lssl -lcrypto -+# -DUSE_SSL -+#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -+#nis nismodule.c -lnsl -+#ossaudiodev -+#readline readline.c -lreadline -ltermcap -+#spwd spwdmodule.c -diff -Nru orig/Modules/Setup.ios-aarch64 modified/Modules/Setup.ios-aarch64 ---- orig/Modules/Setup.ios-aarch64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-aarch64 2015-12-20 23:03:15.000000000 +0800 -@@ -0,0 +1,35 @@ -+ -+##################################################################### -+# iOS ARM64: Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/aarch64/ffi_arm64.c \ -+ _ctypes/libffi_ios/aarch64/sysv_arm64.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include -+ -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -diff -Nru orig/Modules/Setup.ios-arm modified/Modules/Setup.ios-arm ---- orig/Modules/Setup.ios-arm 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-arm 2015-12-20 23:02:39.000000000 +0800 -@@ -0,0 +1,36 @@ -+ -+##################################################################### -+# iOS ARMv7: Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/arm/ffi_armv7.c \ -+ _ctypes/libffi_ios/arm/sysv_armv7.S \ -+ _ctypes/libffi_ios/arm/trampoline_armv7.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include -+ -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_32=1 -DANSI=1 -diff -Nru orig/Modules/Setup.ios-i386 modified/Modules/Setup.ios-i386 ---- orig/Modules/Setup.ios-i386 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-i386 2015-12-20 23:01:44.000000000 +0800 -@@ -0,0 +1,35 @@ -+ -+##################################################################### -+# iOS i386 Simulator: Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/x86/ffi_i386.c \ -+ _ctypes/libffi_ios/x86/sysv_i386.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include -+ -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_32=1 -DANSI=1 -diff -Nru orig/Modules/Setup.ios-x86_64 modified/Modules/Setup.ios-x86_64 ---- orig/Modules/Setup.ios-x86_64 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/Setup.ios-x86_64 2015-12-20 23:01:43.000000000 +0800 -@@ -0,0 +1,35 @@ -+ -+##################################################################### -+# iOS x86_64 Simulator: Platform specific configuration -+##################################################################### -+_ctypes _ctypes/_ctypes.c \ -+ _ctypes/callbacks.c \ -+ _ctypes/callproc.c \ -+ _ctypes/stgdict.c \ -+ _ctypes/cfield.c \ -+ _ctypes/libffi_ios/prep_cif.c \ -+ _ctypes/libffi_ios/types.c \ -+ _ctypes/libffi_ios/raw_api.c \ -+ _ctypes/libffi_ios/java_raw_api.c \ -+ _ctypes/libffi_ios/closures.c \ -+ _ctypes/libffi_ios/x86/ffi64_x86_64.c \ -+ _ctypes/libffi_ios/x86/unix64_x86_64.S \ -+ -I$(srcdir)/Modules/_ctypes/libffi_ios/include -+ -+_decimal _decimal/_decimal.c \ -+ _decimal/libmpdec/basearith.c \ -+ _decimal/libmpdec/constants.c \ -+ _decimal/libmpdec/context.c \ -+ _decimal/libmpdec/convolute.c \ -+ _decimal/libmpdec/crt.c \ -+ _decimal/libmpdec/difradix2.c \ -+ _decimal/libmpdec/fnt.c \ -+ _decimal/libmpdec/fourstep.c \ -+ _decimal/libmpdec/io.c \ -+ _decimal/libmpdec/memory.c \ -+ _decimal/libmpdec/mpdecimal.c \ -+ _decimal/libmpdec/numbertheory.c \ -+ _decimal/libmpdec/sixstep.c \ -+ _decimal/libmpdec/transpose.c \ -+ -I$(srcdir)/Modules/_decimal/libmpdec \ -+ -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -diff -Nru orig/Modules/_ctypes/libffi_ios/LICENSE modified/Modules/_ctypes/libffi_ios/LICENSE ---- orig/Modules/_ctypes/libffi_ios/LICENSE 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/LICENSE 2015-04-26 07:29:16.000000000 +0800 -@@ -0,0 +1,21 @@ -+libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. -+See source files for details. -+ -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. -diff -Nru orig/Modules/_ctypes/libffi_ios/README modified/Modules/_ctypes/libffi_ios/README ---- orig/Modules/_ctypes/libffi_ios/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README 2015-12-21 09:55:54.000000000 +0800 -@@ -0,0 +1,450 @@ -+Status -+====== -+ -+libffi-4?? was released on TBD. Check the libffi web -+page for updates: . -+ -+ -+What is libffi? -+=============== -+ -+Compilers for high level languages generate code that follow certain -+conventions. These conventions are necessary, in part, for separate -+compilation to work. One such convention is the "calling -+convention". The "calling convention" is essentially a set of -+assumptions made by the compiler about where function arguments will -+be found on entry to a function. A "calling convention" also specifies -+where the return value for a function is found. -+ -+Some programs may not know at the time of compilation what arguments -+are to be passed to a function. For instance, an interpreter may be -+told at run-time about the number and types of arguments used to call -+a given function. Libffi can be used in such programs to provide a -+bridge from the interpreter program to compiled code. -+ -+The libffi library provides a portable, high level programming -+interface to various calling conventions. This allows a programmer to -+call any function specified by a call interface description at run -+time. -+ -+FFI stands for Foreign Function Interface. A foreign function -+interface is the popular name for the interface that allows code -+written in one language to call code written in another language. The -+libffi library really only provides the lowest, machine dependent -+layer of a fully featured foreign function interface. A layer must -+exist above libffi that handles type conversions for values passed -+between the two languages. -+ -+ -+Supported Platforms -+=================== -+ -+Libffi has been ported to many different platforms. -+For specific configuration details and testing status, please -+refer to the wiki page here: -+ -+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2 -+ -+At the time of release, the following basic configurations have been -+tested: -+ -+|-----------------+------------------+-------------------------| -+| Architecture | Operating System | Compiler | -+|-----------------+------------------+-------------------------| -+| AArch64 (ARM64) | iOS | Clang | -+| AArch64 | Linux | GCC | -+| Alpha | Linux | GCC | -+| Alpha | Tru64 | GCC | -+| ARC | Linux | GCC | -+| ARM | Linux | GCC | -+| ARM | iOS | GCC | -+| AVR32 | Linux | GCC | -+| Blackfin | uClinux | GCC | -+| HPPA | HPUX | GCC | -+| IA-64 | Linux | GCC | -+| M68K | FreeMiNT | GCC | -+| M68K | Linux | GCC | -+| M68K | RTEMS | GCC | -+| M88K | OpenBSD/mvme88k | GCC | -+| Meta | Linux | GCC | -+| MicroBlaze | Linux | GCC | -+| MIPS | IRIX | GCC | -+| MIPS | Linux | GCC | -+| MIPS | RTEMS | GCC | -+| MIPS64 | Linux | GCC | -+| Moxie | Bare metal | GCC | -+| Nios II | Linux | GCC | -+| OpenRISC | Linux | GCC | -+| PowerPC 32-bit | AIX | IBM XL C | -+| PowerPC 64-bit | AIX | IBM XL C | -+| PowerPC | AMIGA | GCC | -+| PowerPC | Linux | GCC | -+| PowerPC | Mac OSX | GCC | -+| PowerPC | FreeBSD | GCC | -+| PowerPC 64-bit | FreeBSD | GCC | -+| PowerPC 64-bit | Linux ELFv1 | GCC | -+| PowerPC 64-bit | Linux ELFv2 | GCC | -+| S390 | Linux | GCC | -+| S390X | Linux | GCC | -+| SPARC | Linux | GCC | -+| SPARC | Solaris | GCC | -+| SPARC | Solaris | Oracle Solaris Studio C | -+| SPARC64 | Linux | GCC | -+| SPARC64 | FreeBSD | GCC | -+| SPARC64 | Solaris | Oracle Solaris Studio C | -+| TILE-Gx/TILEPro | Linux | GCC | -+| VAX | OpenBSD/vax | GCC | -+| X86 | FreeBSD | GCC | -+| X86 | GNU HURD | GCC | -+| X86 | Interix | GCC | -+| X86 | kFreeBSD | GCC | -+| X86 | Linux | GCC | -+| X86 | Mac OSX | GCC | -+| X86 | OpenBSD | GCC | -+| X86 | OS/2 | GCC | -+| X86 | Solaris | GCC | -+| X86 | Solaris | Oracle Solaris Studio C | -+| X86 | Windows/Cygwin | GCC | -+| X86 | Windows/MingW | GCC | -+| X86-64 | FreeBSD | GCC | -+| X86-64 | Linux | GCC | -+| X86-64 | Linux/x32 | GCC | -+| X86-64 | OpenBSD | GCC | -+| X86-64 | Solaris | Oracle Solaris Studio C | -+| X86-64 | Windows/Cygwin | GCC | -+| X86-64 | Windows/MingW | GCC | -+| Xtensa | Linux | GCC | -+|-----------------+------------------+-------------------------| -+ -+Please send additional platform test results to -+libffi-discuss@sourceware.org and feel free to update the wiki page -+above. -+ -+Installing libffi -+================= -+ -+First you must configure the distribution for your particular -+system. Go to the directory you wish to build libffi in and run the -+"configure" program found in the root directory of the libffi source -+distribution. -+ -+If you're building libffi directly from version control, configure won't -+exist yet; run ./autogen.sh first. -+ -+You may want to tell configure where to install the libffi library and -+header files. To do that, use the --prefix configure switch. Libffi -+will install under /usr/local by default. -+ -+If you want to enable extra run-time debugging checks use the the -+--enable-debug configure switch. This is useful when your program dies -+mysteriously while using libffi. -+ -+Another useful configure switch is --enable-purify-safety. Using this -+will add some extra code which will suppress certain warnings when you -+are using Purify with libffi. Only use this switch when using -+Purify, as it will slow down the library. -+ -+It's also possible to build libffi on Windows platforms with -+Microsoft's Visual C++ compiler. In this case, use the msvcc.sh -+wrapper script during configuration like so: -+ -+path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" -+ -+For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and -+CXX="path/to/msvcc.sh -m64". You may also need to specify --build -+appropriately. -+ -+It is also possible to build libffi on Windows platforms with the LLVM -+project's clang-cl compiler, like below: -+ -+path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP" -+ -+When building with MSVC under a MingW environment, you may need to -+remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath' -+command. ('cygpath' is not present in MingW, and is not required when -+using MingW-style paths.) -+ -+For iOS builds, the 'libffi.xcodeproj' Xcode project is available. -+ -+Configure has many other options. Use "configure --help" to see them all. -+ -+Once configure has finished, type "make". Note that you must be using -+GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make . -+ -+To ensure that libffi is working as advertised, type "make check". -+This will require that you have DejaGNU installed. -+ -+To install the library and header files, type "make install". -+ -+ -+History -+======= -+ -+See the git log for details at http://github.com/atgreen/libffi. -+ -+4.0 TBD -+ New API in support of GO closures. -+ -+3.2.1 Nov-12-14 -+ Build fix for non-iOS AArch64 targets. -+ -+3.2 Nov-11-14 -+ Add C99 Complex Type support (currently only supported on -+ s390). -+ Add support for PASCAL and REGISTER calling conventions on x86 -+ Windows/Linux. -+ Add OpenRISC and Cygwin-64 support. -+ Bug fixes. -+ -+3.1 May-19-14 -+ Add AArch64 (ARM64) iOS support. -+ Add Nios II support. -+ Add m88k and DEC VAX support. -+ Add support for stdcall, thiscall, and fastcall on non-Windows -+ 32-bit x86 targets such as Linux. -+ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi -+ fixes. -+ Make the testsuite more robust: eliminate several spurious -+ failures, and respect the $CC and $CXX environment variables. -+ Archive off the manually maintained ChangeLog in favor of git -+ log. -+ -+3.0.13 Mar-17-13 -+ Add Meta support. -+ Add missing Moxie bits. -+ Fix stack alignment bug on 32-bit x86. -+ Build fix for m68000 targets. -+ Build fix for soft-float Power targets. -+ Fix the install dir location for some platforms when building -+ with GCC (OS X, Solaris). -+ Fix Cygwin regression. -+ -+3.0.12 Feb-11-13 -+ Add Moxie support. -+ Add AArch64 support. -+ Add Blackfin support. -+ Add TILE-Gx/TILEPro support. -+ Add MicroBlaze support. -+ Add Xtensa support. -+ Add support for PaX enabled kernels with MPROTECT. -+ Add support for native vendor compilers on -+ Solaris and AIX. -+ Work around LLVM/GCC interoperability issue on x86_64. -+ -+3.0.11 Apr-11-12 -+ Lots of build fixes. -+ Add support for variadic functions (ffi_prep_cif_var). -+ Add Linux/x32 support. -+ Add thiscall, fastcall and MSVC cdecl support on Windows. -+ Add Amiga and newer MacOS support. -+ Add m68k FreeMiNT support. -+ Integration with iOS' xcode build tools. -+ Fix Octeon and MC68881 support. -+ Fix code pessimizations. -+ -+3.0.10 Aug-23-11 -+ Add support for Apple's iOS. -+ Add support for ARM VFP ABI. -+ Add RTEMS support for MIPS and M68K. -+ Fix instruction cache clearing problems on -+ ARM and SPARC. -+ Fix the N64 build on mips-sgi-irix6.5. -+ Enable builds with Microsoft's compiler. -+ Enable x86 builds with Oracle's Solaris compiler. -+ Fix support for calling code compiled with Oracle's Sparc -+ Solaris compiler. -+ Testsuite fixes for Tru64 Unix. -+ Additional platform support. -+ -+3.0.9 Dec-31-09 -+ Add AVR32 and win64 ports. Add ARM softfp support. -+ Many fixes for AIX, Solaris, HP-UX, *BSD. -+ Several PowerPC and x86-64 bug fixes. -+ Build DLL for windows. -+ -+3.0.8 Dec-19-08 -+ Add *BSD, BeOS, and PA-Linux support. -+ -+3.0.7 Nov-11-08 -+ Fix for ppc FreeBSD. -+ (thanks to Andreas Tobler) -+ -+3.0.6 Jul-17-08 -+ Fix for closures on sh. -+ Mark the sh/sh64 stack as non-executable. -+ (both thanks to Kaz Kojima) -+ -+3.0.5 Apr-3-08 -+ Fix libffi.pc file. -+ Fix #define ARM for IcedTea users. -+ Fix x86 closure bug. -+ -+3.0.4 Feb-24-08 -+ Fix x86 OpenBSD configury. -+ -+3.0.3 Feb-22-08 -+ Enable x86 OpenBSD thanks to Thomas Heller, and -+ x86-64 FreeBSD thanks to Björn König and Andreas Tobler. -+ Clean up test instruction in README. -+ -+3.0.2 Feb-21-08 -+ Improved x86 FreeBSD support. -+ Thanks to Björn König. -+ -+3.0.1 Feb-15-08 -+ Fix instruction cache flushing bug on MIPS. -+ Thanks to David Daney. -+ -+3.0.0 Feb-15-08 -+ Many changes, mostly thanks to the GCC project. -+ Cygnus Solutions is now Red Hat. -+ -+ [10 years go by...] -+ -+1.20 Oct-5-98 -+ Raffaele Sena produces ARM port. -+ -+1.19 Oct-5-98 -+ Fixed x86 long double and long long return support. -+ m68k bug fixes from Andreas Schwab. -+ Patch for DU assembler compatibility for the Alpha from Richard -+ Henderson. -+ -+1.18 Apr-17-98 -+ Bug fixes and MIPS configuration changes. -+ -+1.17 Feb-24-98 -+ Bug fixes and m68k port from Andreas Schwab. PowerPC port from -+ Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. -+ -+1.16 Feb-11-98 -+ Richard Henderson produces Alpha port. -+ -+1.15 Dec-4-97 -+ Fixed an n32 ABI bug. New libtool, auto* support. -+ -+1.14 May-13-97 -+ libtool is now used to generate shared and static libraries. -+ Fixed a minor portability problem reported by Russ McManus -+ . -+ -+1.13 Dec-2-96 -+ Added --enable-purify-safety to keep Purify from complaining -+ about certain low level code. -+ Sparc fix for calling functions with < 6 args. -+ Linux x86 a.out fix. -+ -+1.12 Nov-22-96 -+ Added missing ffi_type_void, needed for supporting void return -+ types. Fixed test case for non MIPS machines. Cygnus Support -+ is now Cygnus Solutions. -+ -+1.11 Oct-30-96 -+ Added notes about GNU make. -+ -+1.10 Oct-29-96 -+ Added configuration fix for non GNU compilers. -+ -+1.09 Oct-29-96 -+ Added --enable-debug configure switch. Clean-ups based on LCLint -+ feedback. ffi_mips.h is always installed. Many configuration -+ fixes. Fixed ffitest.c for sparc builds. -+ -+1.08 Oct-15-96 -+ Fixed n32 problem. Many clean-ups. -+ -+1.07 Oct-14-96 -+ Gordon Irlam rewrites v8.S again. Bug fixes. -+ -+1.06 Oct-14-96 -+ Gordon Irlam improved the sparc port. -+ -+1.05 Oct-14-96 -+ Interface changes based on feedback. -+ -+1.04 Oct-11-96 -+ Sparc port complete (modulo struct passing bug). -+ -+1.03 Oct-10-96 -+ Passing struct args, and returning struct values works for -+ all architectures/calling conventions. Expanded tests. -+ -+1.02 Oct-9-96 -+ Added SGI n32 support. Fixed bugs in both o32 and Linux support. -+ Added "make test". -+ -+1.01 Oct-8-96 -+ Fixed float passing bug in mips version. Restructured some -+ of the code. Builds cleanly with SGI tools. -+ -+1.00 Oct-7-96 -+ First release. No public announcement. -+ -+ -+Authors & Credits -+================= -+ -+libffi was originally written by Anthony Green . -+ -+The developers of the GNU Compiler Collection project have made -+innumerable valuable contributions. See the ChangeLog file for -+details. -+ -+Some of the ideas behind libffi were inspired by Gianni Mariani's free -+gencall library for Silicon Graphics machines. -+ -+The closure mechanism was designed and implemented by Kresten Krab -+Thorup. -+ -+Major processor architecture ports were contributed by the following -+developers: -+ -+aarch64 Marcus Shawcroft, James Greenhalgh -+alpha Richard Henderson -+arm Raffaele Sena -+blackfin Alexandre Keunecke I. de Mendonca -+cris Simon Posnjak, Hans-Peter Nilsson -+frv Anthony Green -+ia64 Hans Boehm -+m32r Kazuhiro Inaoka -+m68k Andreas Schwab -+m88k Miod Vallat -+microblaze Nathan Rossi -+mips Anthony Green, Casey Marshall -+mips64 David Daney -+moxie Anthony Green -+nios ii Sandra Loosemore -+openrisc Sebastian Macke -+pa Randolph Chung, Dave Anglin, Andreas Tobler -+powerpc Geoffrey Keating, Andreas Tobler, -+ David Edelsohn, John Hornkvist -+powerpc64 Jakub Jelinek -+s390 Gerhard Tonn, Ulrich Weigand -+sh Kaz Kojima -+sh64 Kaz Kojima -+sparc Anthony Green, Gordon Irlam -+tile-gx/tilepro Walter Lee -+vax Miod Vallat -+x86 Anthony Green, Jon Beniston -+x86-64 Bo Thorsen -+xtensa Chris Zankel -+ -+Jesper Skov and Andrew Haley both did more than their fair share of -+stepping through the code and tracking down bugs. -+ -+Thanks also to Tom Tromey for bug fixes, documentation and -+configuration help. -+ -+Thanks to Jim Blandy, who provided some useful feedback on the libffi -+interface. -+ -+Andreas Tobler has done a tremendous amount of work on the testsuite. -+ -+Alex Oliva solved the executable page problem for SElinux. -+ -+The list above is almost certainly incomplete and inaccurate. I'm -+happy to make corrections or additions upon request. -+ -+If you have a problem, or have found a bug, please send a note to the -+author at green@moxielogic.com, or the project mailing list at -+libffi-discuss@sourceware.org. -diff -Nru orig/Modules/_ctypes/libffi_ios/README.python modified/Modules/_ctypes/libffi_ios/README.python ---- orig/Modules/_ctypes/libffi_ios/README.python 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/README.python 2015-12-20 18:48:11.000000000 +0800 -@@ -0,0 +1,14 @@ -+This directory contains the generated source code for running libffi -+on iOS platforms (physical and simulator). It contains support for -+ARMv7, i386 and x86_64 platforms. -+ -+libffi requires a code-generation step for Apple platforms. This code -+generation is performed using the `generate-darwin-source-and-headers.py` -+script in the home directory of the libffi project. -+ -+This directory is the combined output of the darwin_common and darwin_ios -+generated code directories. It has been pruned of source files that are -+not needed for ctypes. -+ -+The code in this directory uses the source code from a pre-release version -+and patched verion of libffi 4. -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c ---- orig/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/ffi_arm64.c 2015-12-20 22:04:51.000000000 +0800 -@@ -0,0 +1,934 @@ -+#ifdef __arm64__ -+ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. -+ -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "internal.h" -+ -+/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; -+ all further uses in this file will refer to the 128-bit type. */ -+#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE -+# if FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+#else -+# undef FFI_TYPE_LONGDOUBLE -+# define FFI_TYPE_LONGDOUBLE 4 -+#endif -+ -+union _d -+{ -+ UINT64 d; -+ UINT32 s[2]; -+}; -+ -+struct _v -+{ -+ union _d d[2] __attribute__((aligned(16))); -+}; -+ -+struct call_context -+{ -+ struct _v v[N_V_ARG_REG]; -+ UINT64 x[N_X_ARG_REG]; -+}; -+ -+#if defined (__clang__) && defined (__APPLE__) -+extern void sys_icache_invalidate (void *start, size_t len); -+#endif -+ -+static inline void -+ffi_clear_cache (void *start, void *end) -+{ -+#if defined (__clang__) && defined (__APPLE__) -+ sys_icache_invalidate (start, (char *)end - (char *)start); -+#elif defined (__GNUC__) -+ __builtin___clear_cache (start, end); -+#else -+#error "Missing builtin to flush instruction cache" -+#endif -+} -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#include -+#endif -+ -+#endif -+ -+/* A subroutine of is_vfp_type. Given a structure type, return the type code -+ of the first non-structure element. Recurse for structure elements. -+ Return -1 if the structure is in fact empty, i.e. no nested elements. */ -+ -+static int -+is_hfa0 (const ffi_type *ty) -+{ -+ ffi_type **elements = ty->elements; -+ int i, ret = -1; -+ -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ ret = elements[i]->type; -+ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) -+ { -+ ret = is_hfa0 (elements[i]); -+ if (ret < 0) -+ continue; -+ } -+ break; -+ } -+ -+ return ret; -+} -+ -+/* A subroutine of is_vfp_type. Given a structure type, return true if all -+ of the non-structure elements are the same as CANDIDATE. */ -+ -+static int -+is_hfa1 (const ffi_type *ty, int candidate) -+{ -+ ffi_type **elements = ty->elements; -+ int i; -+ -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } -+ -+ return 1; -+} -+ -+/* Determine if TY may be allocated to the FP registers. This is both an -+ fp scalar type as well as an homogenous floating point aggregate (HFA). -+ That is, a structure consisting of 1 to 4 members of all the same type, -+ where that type is an fp scalar. -+ -+ Returns non-zero iff TY is an HFA. The result is the AARCH64_RET_* -+ constant for the type. */ -+ -+static int -+is_vfp_type (const ffi_type *ty) -+{ -+ ffi_type **elements; -+ int candidate, i; -+ size_t size, ele_count; -+ -+ /* Quickest tests first. */ -+ candidate = ty->type; -+ switch (candidate) -+ { -+ default: -+ return 0; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 1; -+ goto done; -+ case FFI_TYPE_COMPLEX: -+ candidate = ty->elements[0]->type; -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = 2; -+ goto done; -+ } -+ return 0; -+ case FFI_TYPE_STRUCT: -+ break; -+ } -+ -+ /* No HFA types are smaller than 4 bytes, or larger than 64 bytes. */ -+ size = ty->size; -+ if (size < 4 || size > 64) -+ return 0; -+ -+ /* Find the type of the first non-structure member. */ -+ elements = ty->elements; -+ candidate = elements[0]->type; -+ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) -+ { -+ for (i = 0; ; ++i) -+ { -+ candidate = is_hfa0 (elements[i]); -+ if (candidate >= 0) -+ break; -+ } -+ } -+ -+ /* If the first member is not a floating point type, it's not an HFA. -+ Also quickly re-check the size of the structure. */ -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ ele_count = size / sizeof(float); -+ if (size != ele_count * sizeof(float)) -+ return 0; -+ break; -+ case FFI_TYPE_DOUBLE: -+ ele_count = size / sizeof(double); -+ if (size != ele_count * sizeof(double)) -+ return 0; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ ele_count = size / sizeof(long double); -+ if (size != ele_count * sizeof(long double)) -+ return 0; -+ break; -+ default: -+ return 0; -+ } -+ if (ele_count > 4) -+ return 0; -+ -+ /* Finally, make sure that all scalar elements are the same type. */ -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } -+ -+ /* All tests succeeded. Encode the result. */ -+ done: -+ return candidate * 4 + (4 - ele_count); -+} -+ -+/* Representation of the procedure call argument marshalling -+ state. -+ -+ The terse state variable names match the names used in the AARCH64 -+ PCS. */ -+ -+struct arg_state -+{ -+ unsigned ngrn; /* Next general-purpose register number. */ -+ unsigned nsrn; /* Next vector register number. */ -+ size_t nsaa; /* Next stack offset. */ -+ -+#if defined (__APPLE__) -+ unsigned allocating_variadic; -+#endif -+}; -+ -+/* Initialize a procedure call argument marshalling state. */ -+static void -+arg_init (struct arg_state *state) -+{ -+ state->ngrn = 0; -+ state->nsrn = 0; -+ state->nsaa = 0; -+#if defined (__APPLE__) -+ state->allocating_variadic = 0; -+#endif -+} -+ -+/* Allocate an aligned slot on the stack and return a pointer to it. */ -+static void * -+allocate_to_stack (struct arg_state *state, void *stack, -+ size_t alignment, size_t size) -+{ -+ size_t nsaa = state->nsaa; -+ -+ /* Round up the NSAA to the larger of 8 or the natural -+ alignment of the argument's type. */ -+#if defined (__APPLE__) -+ if (state->allocating_variadic && alignment < 8) -+ alignment = 8; -+#else -+ if (alignment < 8) -+ alignment = 8; -+#endif -+ -+ nsaa = ALIGN (nsaa, alignment); -+ state->nsaa = nsaa + size; -+ -+ return (char *)stack + nsaa; -+} -+ -+static ffi_arg -+extend_integer_type (void *source, int type) -+{ -+ switch (type) -+ { -+ case FFI_TYPE_UINT8: -+ return *(UINT8 *) source; -+ case FFI_TYPE_SINT8: -+ return *(SINT8 *) source; -+ case FFI_TYPE_UINT16: -+ return *(UINT16 *) source; -+ case FFI_TYPE_SINT16: -+ return *(SINT16 *) source; -+ case FFI_TYPE_UINT32: -+ return *(UINT32 *) source; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ return *(SINT32 *) source; -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ return *(UINT64 *) source; -+ break; -+ case FFI_TYPE_POINTER: -+ return *(uintptr_t *) source; -+ default: -+ abort(); -+ } -+} -+ -+static void -+extend_hfa_type (void *dest, void *src, int h) -+{ -+ int f = h - AARCH64_RET_S4; -+ void *x0; -+ -+ asm volatile ( -+ "adr %0, 0f\n" -+" add %0, %0, %1\n" -+" br %0\n" -+"0: ldp s16, s17, [%3]\n" /* S4 */ -+" ldp s18, s19, [%3, #8]\n" -+" b 4f\n" -+" ldp s16, s17, [%3]\n" /* S3 */ -+" ldr s18, [%3, #8]\n" -+" b 3f\n" -+" ldp s16, s17, [%3]\n" /* S2 */ -+" b 2f\n" -+" nop\n" -+" ldr s16, [%3]\n" /* S1 */ -+" b 1f\n" -+" nop\n" -+" ldp d16, d17, [%3]\n" /* D4 */ -+" ldp d18, d19, [%3, #16]\n" -+" b 4f\n" -+" ldp d16, d17, [%3]\n" /* D3 */ -+" ldr d18, [%3, #16]\n" -+" b 3f\n" -+" ldp d16, d17, [%3]\n" /* D2 */ -+" b 2f\n" -+" nop\n" -+" ldr d16, [%3]\n" /* D1 */ -+" b 1f\n" -+" nop\n" -+" ldp q16, q17, [%3]\n" /* Q4 */ -+" ldp q18, q19, [%3, #16]\n" -+" b 4f\n" -+" ldp q16, q17, [%3]\n" /* Q3 */ -+" ldr q18, [%3, #16]\n" -+" b 3f\n" -+" ldp q16, q17, [%3]\n" /* Q2 */ -+" b 2f\n" -+" nop\n" -+" ldr q16, [%3]\n" /* Q1 */ -+" b 1f\n" -+"4: str q19, [%2, #48]\n" -+"3: str q18, [%2, #32]\n" -+"2: str q17, [%2, #16]\n" -+"1: str q16, [%2]" -+ : "=&r"(x0) -+ : "r"(f * 12), "r"(dest), "r"(src) -+ : "memory", "v16", "v17", "v18", "v19"); -+} -+ -+static void * -+compress_hfa_type (void *dest, void *reg, int h) -+{ -+ switch (h) -+ { -+ case AARCH64_RET_S1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 12; -+#endif -+ } -+ else -+ *(float *)dest = *(float *)reg; -+ break; -+ case AARCH64_RET_S2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.s, v17.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_S3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.s, v17.s, v18.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_S4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.s, v17.s, v18.s, v19.s }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; -+ -+ case AARCH64_RET_D1: -+ if (dest == reg) -+ { -+#ifdef __AARCH64EB__ -+ dest += 8; -+#endif -+ } -+ else -+ *(double *)dest = *(double *)reg; -+ break; -+ case AARCH64_RET_D2: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "st2 { v16.d, v17.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17"); -+ break; -+ case AARCH64_RET_D3: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldr q18, [%1, #32]\n\t" -+ "st3 { v16.d, v17.d, v18.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18"); -+ break; -+ case AARCH64_RET_D4: -+ asm ("ldp q16, q17, [%1]\n\t" -+ "ldp q18, q19, [%1, #32]\n\t" -+ "st4 { v16.d, v17.d, v18.d, v19.d }[0], [%0]" -+ : : "r"(dest), "r"(reg) : "memory", "v16", "v17", "v18", "v19"); -+ break; -+ -+ default: -+ if (dest != reg) -+ return memcpy (dest, reg, 16 * (4 - (h & 3))); -+ break; -+ } -+ return dest; -+} -+ -+/* Either allocate an appropriate register for the argument type, or if -+ none are available, allocate a stack slot and return a pointer -+ to the allocated space. */ -+ -+static void * -+allocate_int_to_reg_or_stack (struct call_context *context, -+ struct arg_state *state, -+ void *stack, size_t size) -+{ -+ if (state->ngrn < N_X_ARG_REG) -+ return &context->x[state->ngrn++]; -+ -+ state->ngrn = N_X_ARG_REG; -+ return allocate_to_stack (state, stack, size, size); -+} -+ -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ ffi_type *rtype = cif->rtype; -+ size_t bytes = cif->bytes; -+ int flags, i, n; -+ -+ switch (rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = AARCH64_RET_VOID; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = AARCH64_RET_UINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = AARCH64_RET_UINT16; -+ break; -+ case FFI_TYPE_UINT32: -+ flags = AARCH64_RET_UINT32; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = AARCH64_RET_SINT8; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = AARCH64_RET_SINT16; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ flags = AARCH64_RET_SINT32; -+ break; -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = AARCH64_RET_INT64; -+ break; -+ case FFI_TYPE_POINTER: -+ flags = (sizeof(void *) == 4 ? AARCH64_RET_UINT32 : AARCH64_RET_INT64); -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ flags = is_vfp_type (rtype); -+ if (flags == 0) -+ { -+ size_t s = rtype->size; -+ if (s > 16) -+ { -+ flags = AARCH64_RET_VOID | AARCH64_RET_IN_MEM; -+ bytes += 8; -+ } -+ else if (s == 16) -+ flags = AARCH64_RET_INT128; -+ else if (s == 8) -+ flags = AARCH64_RET_INT64; -+ else -+ flags = AARCH64_RET_INT128 | AARCH64_RET_NEED_COPY; -+ } -+ break; -+ -+ default: -+ abort(); -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ if (is_vfp_type (cif->arg_types[i])) -+ { -+ flags |= AARCH64_FLAG_ARG_V; -+ break; -+ } -+ -+ /* Round the stack up to a multiple of the stack alignment requirement. */ -+ cif->bytes = ALIGN(bytes, 16); -+ cif->flags = flags; -+#if defined (__APPLE__) -+ cif->aarch64_nfixedargs = 0; -+#endif -+ -+ return FFI_OK; -+} -+ -+#if defined (__APPLE__) -+/* Perform Apple-specific cif processing for variadic calls */ -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs) -+{ -+ ffi_status status = ffi_prep_cif_machdep (cif); -+ cif->aarch64_nfixedargs = nfixedargs; -+ return status; -+} -+#endif /* __APPLE__ */ -+ -+extern void ffi_call_SYSV (struct call_context *context, void *frame, -+ void (*fn)(void), void *rvalue, int flags, -+ void *closure) FFI_HIDDEN; -+ -+/* Call a function with the provided arguments and capture the return -+ value. */ -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *orig_rvalue, -+ void **avalue, void *closure) -+{ -+ struct call_context *context; -+ void *stack, *frame, *rvalue; -+ struct arg_state state; -+ size_t stack_bytes, rtype_size, rsize; -+ int i, nargs, flags; -+ ffi_type *rtype; -+ -+ flags = cif->flags; -+ rtype = cif->rtype; -+ rtype_size = rtype->size; -+ stack_bytes = cif->bytes; -+ -+ /* If the target function returns a structure via hidden pointer, -+ then we cannot allow a null rvalue. Otherwise, mash a null -+ rvalue to void return type. */ -+ rsize = 0; -+ if (flags & AARCH64_RET_IN_MEM) -+ { -+ if (orig_rvalue == NULL) -+ rsize = rtype_size; -+ } -+ else if (orig_rvalue == NULL) -+ flags &= AARCH64_FLAG_ARG_V; -+ else if (flags & AARCH64_RET_NEED_COPY) -+ rsize = 16; -+ -+ /* Allocate consectutive stack for everything we'll need. */ -+ context = alloca (sizeof(struct call_context) + stack_bytes + 32 + rsize); -+ stack = context + 1; -+ frame = stack + stack_bytes; -+ rvalue = (rsize ? frame + 32 : orig_rvalue); -+ -+ arg_init (&state); -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ size_t s = ty->size; -+ void *a = avalue[i]; -+ int h, t; -+ -+ t = ty->type; -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; -+ -+ /* If the argument is a basic type the argument is allocated to an -+ appropriate register, or if none are available, to the stack. */ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ do_pointer: -+ { -+ ffi_arg ext = extend_integer_type (a, t); -+ if (state.ngrn < N_X_ARG_REG) -+ context->x[state.ngrn++] = ext; -+ else -+ { -+ void *d = allocate_to_stack (&state, stack, ty->alignment, s); -+ state.ngrn = N_X_ARG_REG; -+ /* Note that the default abi extends each argument -+ to a full 64-bit slot, while the iOS abi allocates -+ only enough space. */ -+#ifdef __APPLE__ -+ memcpy(d, a, s); -+#else -+ *(ffi_arg *)d = ext; -+#endif -+ } -+ } -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ { -+ void *dest; -+ -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ int elems = 4 - (h & 3); -+ if (state.nsrn + elems <= N_V_ARG_REG) -+ { -+ dest = &context->v[state.nsrn]; -+ state.nsrn += elems; -+ extend_hfa_type (dest, a, h); -+ break; -+ } -+ state.nsrn = N_V_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ else if (s > 16) -+ { -+ /* If the argument is a composite type that is larger than 16 -+ bytes, then the argument has been copied to memory, and -+ the argument is replaced by a pointer to the copy. */ -+ a = &avalue[i]; -+ t = FFI_TYPE_POINTER; -+ goto do_pointer; -+ } -+ else -+ { -+ size_t n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ /* If the argument is a composite type and the size in -+ double-words is not more than the number of available -+ X registers, then the argument is copied into -+ consecutive X registers. */ -+ dest = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ /* Otherwise, there are insufficient X registers. Further -+ X register allocations are prevented, the NSAA is -+ adjusted and the argument is copied to memory at the -+ adjusted NSAA. */ -+ state.ngrn = N_X_ARG_REG; -+ dest = allocate_to_stack (&state, stack, ty->alignment, s); -+ } -+ } -+ memcpy (dest, a, s); -+ } -+ break; -+ -+ default: -+ abort(); -+ } -+ -+#if defined (__APPLE__) -+ if (i + 1 == cif->aarch64_nfixedargs) -+ { -+ state.ngrn = N_X_ARG_REG; -+ state.nsrn = N_V_ARG_REG; -+ state.allocating_variadic = 1; -+ } -+#endif -+ } -+ -+ ffi_call_SYSV (context, frame, fn, rvalue, flags, closure); -+ -+ if (flags & AARCH64_RET_NEED_COPY) -+ memcpy (orig_rvalue, rvalue, rtype_size); -+} -+ -+void -+ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} -+ -+#ifdef FFI_GO_CLOSURES -+void -+ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+#endif /* FFI_GO_CLOSURES */ -+ -+/* Build a trampoline. */ -+ -+extern void ffi_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_closure_SYSV_V (void) FFI_HIDDEN; -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure *closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; -+ -+ void (*start)(void); -+ -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_closure_SYSV_V; -+ else -+ start = ffi_closure_SYSV; -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+#ifdef __MACH__ -+ void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); -+ config[0] = closure; -+ config[1] = start; -+#endif -+#else -+ static const unsigned char trampoline[16] = { -+ 0x90, 0x00, 0x00, 0x58, /* ldr x16, tramp+16 */ -+ 0xf1, 0xff, 0xff, 0x10, /* adr x17, tramp+0 */ -+ 0x00, 0x02, 0x1f, 0xd6 /* br x16 */ -+ }; -+ char *tramp = closure->tramp; -+ -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ -+ *(UINT64 *)(tramp + 16) = (uintptr_t)start; -+ -+ ffi_clear_cache(tramp, tramp + FFI_TRAMPOLINE_SIZE); -+#endif -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; -+} -+ -+#ifdef FFI_GO_CLOSURES -+extern void ffi_go_closure_SYSV (void) FFI_HIDDEN; -+extern void ffi_go_closure_SYSV_V (void) FFI_HIDDEN; -+ -+ffi_status -+ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*)) -+{ -+ void (*start)(void); -+ -+ if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; -+ -+ if (cif->flags & AARCH64_FLAG_ARG_V) -+ start = ffi_go_closure_SYSV_V; -+ else -+ start = ffi_go_closure_SYSV; -+ -+ closure->tramp = start; -+ closure->cif = cif; -+ closure->fun = fun; -+ -+ return FFI_OK; -+} -+#endif /* FFI_GO_CLOSURES */ -+ -+/* Primary handler to setup and invoke a function within a closure. -+ -+ A closure when invoked enters via the assembler wrapper -+ ffi_closure_SYSV(). The wrapper allocates a call context on the -+ stack, saves the interesting registers (from the perspective of -+ the calling convention) into the context then passes control to -+ ffi_closure_SYSV_inner() passing the saved context and a pointer to -+ the stack at the point ffi_closure_SYSV() was invoked. -+ -+ On the return path the assembler wrapper will reload call context -+ registers. -+ -+ ffi_closure_SYSV_inner() marshalls the call context into ffi value -+ descriptors, invokes the wrapped function, then marshalls the return -+ value back into the call context. */ -+ -+int FFI_HIDDEN -+ffi_closure_SYSV_inner (ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ struct call_context *context, -+ void *stack, void *rvalue, void *struct_rvalue) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ int i, h, nargs, flags; -+ struct arg_state state; -+ -+ arg_init (&state); -+ -+ for (i = 0, nargs = cif->nargs; i < nargs; i++) -+ { -+ ffi_type *ty = cif->arg_types[i]; -+ int t = ty->type; -+ size_t n, s = ty->size; -+ -+ switch (t) -+ { -+ case FFI_TYPE_VOID: -+ FFI_ASSERT (0); -+ break; -+ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ avalue[i] = allocate_int_to_reg_or_stack (context, &state, stack, s); -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ h = is_vfp_type (ty); -+ if (h) -+ { -+ n = 4 - (h & 3); -+ if (state.nsrn + n <= N_V_ARG_REG) -+ { -+ void *reg = &context->v[state.nsrn]; -+ state.nsrn += n; -+ -+ /* Eeek! We need a pointer to the structure, however the -+ homogeneous float elements are being passed in individual -+ registers, therefore for float and double the structure -+ is not represented as a contiguous sequence of bytes in -+ our saved register context. We don't need the original -+ contents of the register storage, so we reformat the -+ structure into the same memory. */ -+ avalue[i] = compress_hfa_type (reg, reg, h); -+ } -+ else -+ { -+ state.nsrn = N_V_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ else if (s > 16) -+ { -+ /* Replace Composite type of size greater than 16 with a -+ pointer. */ -+ avalue[i] = *(void **) -+ allocate_int_to_reg_or_stack (context, &state, stack, -+ sizeof (void *)); -+ } -+ else -+ { -+ n = (s + 7) / 8; -+ if (state.ngrn + n <= N_X_ARG_REG) -+ { -+ avalue[i] = &context->x[state.ngrn]; -+ state.ngrn += n; -+ } -+ else -+ { -+ state.ngrn = N_X_ARG_REG; -+ avalue[i] = allocate_to_stack (&state, stack, -+ ty->alignment, s); -+ } -+ } -+ break; -+ -+ default: -+ abort(); -+ } -+ } -+ -+ flags = cif->flags; -+ if (flags & AARCH64_RET_IN_MEM) -+ rvalue = struct_rvalue; -+ -+ fun (cif, rvalue, avalue, user_data); -+ -+ return flags; -+} -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/internal.h modified/Modules/_ctypes/libffi_ios/aarch64/internal.h ---- orig/Modules/_ctypes/libffi_ios/aarch64/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/internal.h 2015-12-20 19:03:29.000000000 +0800 -@@ -0,0 +1,67 @@ -+/* -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. */ -+ -+#define AARCH64_RET_VOID 0 -+#define AARCH64_RET_INT64 1 -+#define AARCH64_RET_INT128 2 -+ -+#define AARCH64_RET_UNUSED3 3 -+#define AARCH64_RET_UNUSED4 4 -+#define AARCH64_RET_UNUSED5 5 -+#define AARCH64_RET_UNUSED6 6 -+#define AARCH64_RET_UNUSED7 7 -+ -+/* Note that FFI_TYPE_FLOAT == 2, _DOUBLE == 3, _LONGDOUBLE == 4, -+ so _S4 through _Q1 are layed out as (TYPE * 4) + (4 - COUNT). */ -+#define AARCH64_RET_S4 8 -+#define AARCH64_RET_S3 9 -+#define AARCH64_RET_S2 10 -+#define AARCH64_RET_S1 11 -+ -+#define AARCH64_RET_D4 12 -+#define AARCH64_RET_D3 13 -+#define AARCH64_RET_D2 14 -+#define AARCH64_RET_D1 15 -+ -+#define AARCH64_RET_Q4 16 -+#define AARCH64_RET_Q3 17 -+#define AARCH64_RET_Q2 18 -+#define AARCH64_RET_Q1 19 -+ -+/* Note that each of the sub-64-bit integers gets two entries. */ -+#define AARCH64_RET_UINT8 20 -+#define AARCH64_RET_UINT16 22 -+#define AARCH64_RET_UINT32 24 -+ -+#define AARCH64_RET_SINT8 26 -+#define AARCH64_RET_SINT16 28 -+#define AARCH64_RET_SINT32 30 -+ -+#define AARCH64_RET_MASK 31 -+ -+#define AARCH64_RET_IN_MEM (1 << 5) -+#define AARCH64_RET_NEED_COPY (1 << 6) -+ -+#define AARCH64_FLAG_ARG_V_BIT 7 -+#define AARCH64_FLAG_ARG_V (1 << AARCH64_FLAG_ARG_V_BIT) -+ -+#define N_X_ARG_REG 8 -+#define N_V_ARG_REG 8 -+#define CALL_CONTEXT_SIZE (N_V_ARG_REG * 16 + N_X_ARG_REG * 8) -diff -Nru orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S ---- orig/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/aarch64/sysv_arm64.S 2015-12-20 22:31:37.000000000 +0800 -@@ -0,0 +1,443 @@ -+#ifdef __arm64__ -+ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. -+ -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. */ -+ -+#define LIBFFI_ASM -+#include -+#include -+#include -+#include "internal.h" -+ -+#ifdef HAVE_MACHINE_ASM_H -+#include -+#else -+#ifdef __USER_LABEL_PREFIX__ -+#define CONCAT1(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b -+ -+/* Use the right prefix for global labels. */ -+#define CNAME(x) CONCAT1 (__USER_LABEL_PREFIX__, x) -+#else -+#define CNAME(x) x -+#endif -+#endif -+ -+#ifdef __AARCH64EB__ -+# define BE(X) X -+#else -+# define BE(X) 0 -+#endif -+ -+#ifdef __ILP32__ -+#define PTR_REG(n) w##n -+#else -+#define PTR_REG(n) x##n -+#endif -+ -+#ifdef __ILP32__ -+#define PTR_SIZE 4 -+#else -+#define PTR_SIZE 8 -+#endif -+ -+ .text -+ .align 4 -+ -+/* ffi_call_SYSV -+ extern void ffi_call_SYSV (void *stack, void *frame, -+ void (*fn)(void), void *rvalue, -+ int flags, void *closure); -+ -+ Therefore on entry we have: -+ -+ x0 stack -+ x1 frame -+ x2 fn -+ x3 rvalue -+ x4 flags -+ x5 closure -+*/ -+ -+ cfi_startproc -+CNAME(ffi_call_SYSV): -+ /* Use a stack frame allocated by our caller. */ -+ cfi_def_cfa(x1, 32); -+ stp x29, x30, [x1] -+ mov x29, x1 -+ mov sp, x0 -+ cfi_def_cfa_register(x29) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+ -+ mov x9, x2 /* save fn */ -+ mov x8, x3 /* install structure return */ -+#ifdef FFI_GO_CLOSURES -+ mov x18, x5 /* install static chain */ -+#endif -+ stp x3, x4, [x29, #16] /* save rvalue and flags */ -+ -+ /* Load the vector argument passing registers, if necessary. */ -+ tbz w4, #AARCH64_FLAG_ARG_V_BIT, 1f -+ ldp q0, q1, [sp, #0] -+ ldp q2, q3, [sp, #32] -+ ldp q4, q5, [sp, #64] -+ ldp q6, q7, [sp, #96] -+1: -+ /* Load the core argument passing registers, including -+ the structure return pointer. */ -+ ldp x0, x1, [sp, #16*N_V_ARG_REG + 0] -+ ldp x2, x3, [sp, #16*N_V_ARG_REG + 16] -+ ldp x4, x5, [sp, #16*N_V_ARG_REG + 32] -+ ldp x6, x7, [sp, #16*N_V_ARG_REG + 48] -+ -+ /* Deallocate the context, leaving the stacked arguments. */ -+ add sp, sp, #CALL_CONTEXT_SIZE -+ -+ blr x9 /* call fn */ -+ -+ ldp x3, x4, [x29, #16] /* reload rvalue and flags */ -+ -+ /* Partially deconstruct the stack frame. */ -+ mov sp, x29 -+ cfi_def_cfa_register (sp) -+ ldp x29, x30, [x29] -+ -+ /* Save the return value as directed. */ -+ adr x5, 0f -+ and w4, w4, #AARCH64_RET_MASK -+ add x5, x5, x4, lsl #3 -+ br x5 -+ -+ /* Note that each table entry is 2 insns, and thus 8 bytes. -+ For integer data, note that we're storing into ffi_arg -+ and therefore we want to extend to 64 bits; these types -+ have two consecutive entries allocated for them. */ -+ .align 4 -+0: ret /* VOID */ -+ nop -+1: str x0, [x3] /* INT64 */ -+ ret -+2: stp x0, x1, [x3] /* INT128 */ -+ ret -+3: brk #1000 /* UNUSED */ -+ ret -+4: brk #1000 /* UNUSED */ -+ ret -+5: brk #1000 /* UNUSED */ -+ ret -+6: brk #1000 /* UNUSED */ -+ ret -+7: brk #1000 /* UNUSED */ -+ ret -+8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ -+ ret -+9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ -+ ret -+10: stp s0, s1, [x3] /* S2 */ -+ ret -+11: str s0, [x3] /* S1 */ -+ ret -+12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ -+ ret -+13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ -+ ret -+14: stp d0, d1, [x3] /* D2 */ -+ ret -+15: str d0, [x3] /* D1 */ -+ ret -+16: str q3, [x3, #48] /* Q4 */ -+ nop -+17: str q2, [x3, #32] /* Q3 */ -+ nop -+18: stp q0, q1, [x3] /* Q2 */ -+ ret -+19: str q0, [x3] /* Q1 */ -+ ret -+20: uxtb w0, w0 /* UINT8 */ -+ str x0, [x3] -+21: ret /* reserved */ -+ nop -+22: uxth w0, w0 /* UINT16 */ -+ str x0, [x3] -+23: ret /* reserved */ -+ nop -+24: mov w0, w0 /* UINT32 */ -+ str x0, [x3] -+25: ret /* reserved */ -+ nop -+26: sxtb x0, w0 /* SINT8 */ -+ str x0, [x3] -+27: ret /* reserved */ -+ nop -+28: sxth x0, w0 /* SINT16 */ -+ str x0, [x3] -+29: ret /* reserved */ -+ nop -+30: sxtw x0, w0 /* SINT32 */ -+ str x0, [x3] -+31: ret /* reserved */ -+ nop -+ -+ cfi_endproc -+ -+ .globl CNAME(ffi_call_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_call_SYSV), #function -+ .hidden CNAME(ffi_call_SYSV) -+ .size CNAME(ffi_call_SYSV), .-CNAME(ffi_call_SYSV) -+#endif -+ -+/* ffi_closure_SYSV -+ -+ Closure invocation glue. This is the low level code invoked directly by -+ the closure trampoline to setup and call a closure. -+ -+ On entry x17 points to a struct ffi_closure, x16 has been clobbered -+ all other registers are preserved. -+ -+ We allocate a call context and save the argument passing registers, -+ then invoked the generic C ffi_closure_SYSV_inner() function to do all -+ the real work, on return we load the result passing registers back from -+ the call context. -+*/ -+ -+#define ffi_closure_SYSV_FS (8*2 + CALL_CONTEXT_SIZE + 64) -+ -+ .align 4 -+CNAME(ffi_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+ -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc -+ -+ .globl CNAME(ffi_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV_V), #function -+ .hidden CNAME(ffi_closure_SYSV_V) -+ .size CNAME(ffi_closure_SYSV_V), . - CNAME(ffi_closure_SYSV_V) -+#endif -+ -+ .align 4 -+ cfi_startproc -+CNAME(ffi_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp -+ -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] -+ -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ -+ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ -+.Ldo_closure: -+ add x3, sp, #16 /* load context */ -+ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ -+ add x5, sp, #16+CALL_CONTEXT_SIZE /* load rvalue */ -+ mov x6, x8 /* load struct_rval */ -+ bl CNAME(ffi_closure_SYSV_inner) -+ -+ /* Load the return value as directed. */ -+ adr x1, 0f -+ and w0, w0, #AARCH64_RET_MASK -+ add x1, x1, x0, lsl #3 -+ add x3, sp, #16+CALL_CONTEXT_SIZE -+ br x1 -+ -+ /* Note that each table entry is 2 insns, and thus 8 bytes. */ -+ .align 4 -+0: b 99f /* VOID */ -+ nop -+1: ldr x0, [x3] /* INT64 */ -+ b 99f -+2: ldp x0, x1, [x3] /* INT128 */ -+ b 99f -+3: brk #1000 /* UNUSED */ -+ nop -+4: brk #1000 /* UNUSED */ -+ nop -+5: brk #1000 /* UNUSED */ -+ nop -+6: brk #1000 /* UNUSED */ -+ nop -+7: brk #1000 /* UNUSED */ -+ nop -+8: ldr s3, [x3, #12] /* S4 */ -+ nop -+9: ldr s2, [x2, #8] /* S3 */ -+ nop -+10: ldp s0, s1, [x3] /* S2 */ -+ b 99f -+11: ldr s0, [x3] /* S1 */ -+ b 99f -+12: ldr d3, [x3, #24] /* D4 */ -+ nop -+13: ldr d2, [x3, #16] /* D3 */ -+ nop -+14: ldp d0, d1, [x3] /* D2 */ -+ b 99f -+15: ldr d0, [x3] /* D1 */ -+ b 99f -+16: ldr q3, [x3, #48] /* Q4 */ -+ nop -+17: ldr q2, [x3, #32] /* Q3 */ -+ nop -+18: ldp q0, q1, [x3] /* Q2 */ -+ b 99f -+19: ldr q0, [x3] /* Q1 */ -+ b 99f -+20: ldrb w0, [x3, #BE(7)] /* UINT8 */ -+ b 99f -+21: brk #1000 /* reserved */ -+ nop -+22: ldrh w0, [x3, #BE(6)] /* UINT16 */ -+ b 99f -+23: brk #1000 /* reserved */ -+ nop -+24: ldr w0, [x3, #BE(4)] /* UINT32 */ -+ b 99f -+25: brk #1000 /* reserved */ -+ nop -+26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ -+ b 99f -+27: brk #1000 /* reserved */ -+ nop -+28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ -+ b 99f -+29: brk #1000 /* reserved */ -+ nop -+30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ -+ nop -+31: /* reserved */ -+99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS -+ cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS) -+ cfi_restore (x29) -+ cfi_restore (x30) -+ ret -+ cfi_endproc -+ -+ .globl CNAME(ffi_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_closure_SYSV), #function -+ .hidden CNAME(ffi_closure_SYSV) -+ .size CNAME(ffi_closure_SYSV), . - CNAME(ffi_closure_SYSV) -+#endif -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#include -+ .align PAGE_MAX_SHIFT -+CNAME(ffi_closure_trampoline_table_page): -+ .rept PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE -+ adr x16, -PAGE_MAX_SIZE -+ ldp x17, x16, [x16] -+ br x16 -+ nop /* each entry in the trampoline config page is 2*sizeof(void*) so the trampoline itself cannot be smaller that 16 bytes */ -+ .endr -+ -+ .globl CNAME(ffi_closure_trampoline_table_page) -+ #ifdef __ELF__ -+ .type CNAME(ffi_closure_trampoline_table_page), #function -+ .hidden CNAME(ffi_closure_trampoline_table_page) -+ .size CNAME(ffi_closure_trampoline_table_page), . - CNAME(ffi_closure_trampoline_table_page) -+ #endif -+#endif -+ -+#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+#ifdef FFI_GO_CLOSURES -+ .align 4 -+CNAME(ffi_go_closure_SYSV_V): -+ cfi_startproc -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+ -+ /* Save the argument passing vector registers. */ -+ stp q0, q1, [sp, #16 + 0] -+ stp q2, q3, [sp, #16 + 32] -+ stp q4, q5, [sp, #16 + 64] -+ stp q6, q7, [sp, #16 + 96] -+ b 0f -+ cfi_endproc -+ -+ .globl CNAME(ffi_go_closure_SYSV_V) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV_V), #function -+ .hidden CNAME(ffi_go_closure_SYSV_V) -+ .size CNAME(ffi_go_closure_SYSV_V), . - CNAME(ffi_go_closure_SYSV_V) -+#endif -+ -+ .align 4 -+ cfi_startproc -+CNAME(ffi_go_closure_SYSV): -+ stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! -+ cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+0: -+ mov x29, sp -+ -+ /* Save the argument passing core registers. */ -+ stp x0, x1, [sp, #16 + 16*N_V_ARG_REG + 0] -+ stp x2, x3, [sp, #16 + 16*N_V_ARG_REG + 16] -+ stp x4, x5, [sp, #16 + 16*N_V_ARG_REG + 32] -+ stp x6, x7, [sp, #16 + 16*N_V_ARG_REG + 48] -+ -+ /* Load ffi_closure_inner arguments. */ -+ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ -+ mov x2, x18 /* load user_data */ -+ b .Ldo_closure -+ cfi_endproc -+ -+ .globl CNAME(ffi_go_closure_SYSV) -+#ifdef __ELF__ -+ .type CNAME(ffi_go_closure_SYSV), #function -+ .hidden CNAME(ffi_go_closure_SYSV) -+ .size CNAME(ffi_go_closure_SYSV), . - CNAME(ffi_go_closure_SYSV) -+#endif -+#endif /* FFI_GO_CLOSURES */ -+ -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c ---- orig/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/ffi_armv7.c 2015-12-20 22:05:17.000000000 +0800 -@@ -0,0 +1,813 @@ -+#ifdef __arm__ -+ -+/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 2011 Timothy Wall -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2011 Free Software Foundation -+ Copyright (c) 1998, 2008, 2011 Red Hat, Inc. -+ -+ ARM Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#include -+#include -+#include -+#include -+#include "internal.h" -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#include -+#endif -+ -+#else -+extern unsigned int ffi_arm_trampoline[2] FFI_HIDDEN; -+#endif -+ -+/* Forward declares. */ -+static int vfp_type_p (const ffi_type *); -+static void layout_vfp_args (ffi_cif *); -+ -+static void * -+ffi_align (ffi_type *ty, void *p) -+{ -+ /* Align if necessary */ -+ size_t alignment; -+#ifdef _WIN32_WCE -+ alignment = 4; -+#else -+ alignment = ty->alignment; -+ if (alignment < 4) -+ alignment = 4; -+#endif -+ return (void *) ALIGN (p, alignment); -+} -+ -+static size_t -+ffi_put_arg (ffi_type *ty, void *src, void *dst) -+{ -+ size_t z = ty->size; -+ -+ switch (ty->type) -+ { -+ case FFI_TYPE_SINT8: -+ *(UINT32 *)dst = *(SINT8 *)src; -+ break; -+ case FFI_TYPE_UINT8: -+ *(UINT32 *)dst = *(UINT8 *)src; -+ break; -+ case FFI_TYPE_SINT16: -+ *(UINT32 *)dst = *(SINT16 *)src; -+ break; -+ case FFI_TYPE_UINT16: -+ *(UINT32 *)dst = *(UINT16 *)src; -+ break; -+ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ case FFI_TYPE_FLOAT: -+ *(UINT32 *)dst = *(UINT32 *)src; -+ break; -+ -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_DOUBLE: -+ *(UINT64 *)dst = *(UINT64 *)src; -+ break; -+ -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ memcpy (dst, src, z); -+ break; -+ -+ default: -+ abort(); -+ } -+ -+ return ALIGN (z, 4); -+} -+ -+/* ffi_prep_args is called once stack space has been allocated -+ for the function's arguments. -+ -+ The vfp_space parameter is the load area for VFP regs, the return -+ value is cif->vfp_used (word bitset of VFP regs used for passing -+ arguments). These are only used for the VFP hard-float ABI. -+*/ -+static void -+ffi_prep_args_SYSV (ffi_cif *cif, int flags, void *rvalue, -+ void **avalue, char *argp) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n; -+ -+ if (flags == ARM_TYPE_STRUCT) -+ { -+ *(void **) argp = rvalue; -+ argp += 4; -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ argp = ffi_align (ty, argp); -+ argp += ffi_put_arg (ty, avalue[i], argp); -+ } -+} -+ -+static void -+ffi_prep_args_VFP (ffi_cif *cif, int flags, void *rvalue, -+ void **avalue, char *stack, char *vfp_space) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n, vi = 0; -+ char *argp, *regp, *eo_regp; -+ char stack_used = 0; -+ char done_with_regs = 0; -+ -+ /* The first 4 words on the stack are used for values -+ passed in core registers. */ -+ regp = stack; -+ eo_regp = argp = regp + 16; -+ -+ /* If the function returns an FFI_TYPE_STRUCT in memory, -+ that address is passed in r0 to the function. */ -+ if (flags == ARM_TYPE_STRUCT) -+ { -+ *(void **) regp = rvalue; -+ regp += 4; -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ void *a = avalue[i]; -+ int is_vfp_type = vfp_type_p (ty); -+ -+ /* Allocated in VFP registers. */ -+ if (vi < cif->vfp_nargs && is_vfp_type) -+ { -+ char *vfp_slot = vfp_space + cif->vfp_args[vi++] * 4; -+ ffi_put_arg (ty, a, vfp_slot); -+ continue; -+ } -+ /* Try allocating in core registers. */ -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char *tregp = ffi_align (ty, regp); -+ size_t size = ty->size; -+ size = (size < 4) ? 4 : size; // pad -+ /* Check if there is space left in the aligned register -+ area to place the argument. */ -+ if (tregp + size <= eo_regp) -+ { -+ regp = tregp + ffi_put_arg (ty, a, tregp); -+ done_with_regs = (regp == argp); -+ // ensure we did not write into the stack area -+ FFI_ASSERT (regp <= argp); -+ continue; -+ } -+ /* In case there are no arguments in the stack area yet, -+ the argument is passed in the remaining core registers -+ and on the stack. */ -+ else if (!stack_used) -+ { -+ stack_used = 1; -+ done_with_regs = 1; -+ argp = tregp + ffi_put_arg (ty, a, tregp); -+ FFI_ASSERT (eo_regp < argp); -+ continue; -+ } -+ } -+ /* Base case, arguments are passed on the stack */ -+ stack_used = 1; -+ argp = ffi_align (ty, argp); -+ argp += ffi_put_arg (ty, a, argp); -+ } -+} -+ -+/* Perform machine dependent cif processing */ -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int flags = 0, cabi = cif->abi; -+ size_t bytes = cif->bytes; -+ -+ /* Map out the register placements of VFP register args. The VFP -+ hard-float calling conventions are slightly more sophisticated -+ than the base calling conventions, so we do it here instead of -+ in ffi_prep_args(). */ -+ if (cabi == FFI_VFP) -+ layout_vfp_args (cif); -+ -+ /* Set the return type flag */ -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = ARM_TYPE_VOID; -+ break; -+ -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_POINTER: -+ flags = ARM_TYPE_INT; -+ break; -+ -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = ARM_TYPE_INT64; -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_S : ARM_TYPE_INT); -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = (cabi == FFI_VFP ? ARM_TYPE_VFP_D : ARM_TYPE_INT64); -+ break; -+ -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_COMPLEX: -+ if (cabi == FFI_VFP) -+ { -+ int h = vfp_type_p (cif->rtype); -+ -+ flags = ARM_TYPE_VFP_N; -+ if (h == 0x100 + FFI_TYPE_FLOAT) -+ flags = ARM_TYPE_VFP_S; -+ if (h == 0x100 + FFI_TYPE_DOUBLE) -+ flags = ARM_TYPE_VFP_D; -+ if (h != 0) -+ break; -+ } -+ -+ /* A Composite Type not larger than 4 bytes is returned in r0. -+ A Composite Type larger than 4 bytes, or whose size cannot -+ be determined statically ... is stored in memory at an -+ address passed [in r0]. */ -+ if (cif->rtype->size <= 4) -+ flags = ARM_TYPE_INT; -+ else -+ { -+ flags = ARM_TYPE_STRUCT; -+ bytes += 4; -+ } -+ break; -+ -+ default: -+ abort(); -+ } -+ -+ /* Round the stack up to a multiple of 8 bytes. This isn't needed -+ everywhere, but it is on some platforms, and it doesn't harm anything -+ when it isn't needed. */ -+ bytes = ALIGN (bytes, 8); -+ -+ /* Minimum stack space is the 4 register arguments that we pop. */ -+ if (bytes < 4*4) -+ bytes = 4*4; -+ -+ cif->bytes = bytes; -+ cif->flags = flags; -+ -+ return FFI_OK; -+} -+ -+/* Perform machine dependent cif processing for variadic calls */ -+ffi_status -+ffi_prep_cif_machdep_var (ffi_cif * cif, -+ unsigned int nfixedargs, unsigned int ntotalargs) -+{ -+ /* VFP variadic calls actually use the SYSV ABI */ -+ if (cif->abi == FFI_VFP) -+ cif->abi = FFI_SYSV; -+ -+ return ffi_prep_cif_machdep (cif); -+} -+ -+/* Prototypes for assembly functions, in sysv.S. */ -+ -+struct call_frame -+{ -+ void *fp; -+ void *lr; -+ void *rvalue; -+ int flags; -+ void *closure; -+}; -+ -+extern void ffi_call_SYSV (void *stack, struct call_frame *, -+ void (*fn) (void)) FFI_HIDDEN; -+extern void ffi_call_VFP (void *vfp_space, struct call_frame *, -+ void (*fn) (void), unsigned vfp_used) FFI_HIDDEN; -+ -+static void -+ffi_call_int (ffi_cif * cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ int flags = cif->flags; -+ ffi_type *rtype = cif->rtype; -+ size_t bytes, rsize, vfp_size; -+ char *stack, *vfp_space, *new_rvalue; -+ struct call_frame *frame; -+ -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ /* If the return value is a struct and we don't have a return -+ value address then we need to make one. Otherwise the return -+ value is in registers and we can ignore them. */ -+ if (flags == ARM_TYPE_STRUCT) -+ rsize = rtype->size; -+ else -+ flags = ARM_TYPE_VOID; -+ } -+ else if (flags == ARM_TYPE_VFP_N) -+ { -+ /* Largest case is double x 4. */ -+ rsize = 32; -+ } -+ else if (flags == ARM_TYPE_INT && rtype->type == FFI_TYPE_STRUCT) -+ rsize = 4; -+ -+ /* Largest case. */ -+ vfp_size = (cif->abi == FFI_VFP && cif->vfp_used ? 8*8: 0); -+ -+ bytes = cif->bytes; -+ stack = alloca (vfp_size + bytes + sizeof(struct call_frame) + rsize); -+ -+ vfp_space = NULL; -+ if (vfp_size) -+ { -+ vfp_space = stack; -+ stack += vfp_size; -+ } -+ -+ frame = (struct call_frame *)(stack + bytes); -+ -+ new_rvalue = rvalue; -+ if (rsize) -+ new_rvalue = (void *)(frame + 1); -+ -+ frame->rvalue = new_rvalue; -+ frame->flags = flags; -+ frame->closure = closure; -+ -+ if (vfp_space) -+ { -+ ffi_prep_args_VFP (cif, flags, new_rvalue, avalue, stack, vfp_space); -+ ffi_call_VFP (vfp_space, frame, fn, cif->vfp_used); -+ } -+ else -+ { -+ ffi_prep_args_SYSV (cif, flags, new_rvalue, avalue, stack); -+ ffi_call_SYSV (stack, frame, fn); -+ } -+ -+ if (rvalue && rvalue != new_rvalue) -+ memcpy (rvalue, new_rvalue, rtype->size); -+} -+ -+void -+ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} -+ -+void -+ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+ -+static void * -+ffi_prep_incoming_args_SYSV (ffi_cif *cif, void *rvalue, -+ char *argp, void **avalue) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n; -+ -+ if (cif->flags == ARM_TYPE_STRUCT) -+ { -+ rvalue = *(void **) argp; -+ argp += 4; -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; -+ -+ argp = ffi_align (ty, argp); -+ avalue[i] = (void *) argp; -+ argp += z; -+ } -+ -+ return rvalue; -+} -+ -+static void * -+ffi_prep_incoming_args_VFP (ffi_cif *cif, void *rvalue, char *stack, -+ char *vfp_space, void **avalue) -+{ -+ ffi_type **arg_types = cif->arg_types; -+ int i, n, vi = 0; -+ char *argp, *regp, *eo_regp; -+ char done_with_regs = 0; -+ char stack_used = 0; -+ -+ regp = stack; -+ eo_regp = argp = regp + 16; -+ -+ if (cif->flags == ARM_TYPE_STRUCT) -+ { -+ rvalue = *(void **) regp; -+ regp += 4; -+ } -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ int is_vfp_type = vfp_type_p (ty); -+ size_t z = ty->size; -+ -+ if (vi < cif->vfp_nargs && is_vfp_type) -+ { -+ avalue[i] = vfp_space + cif->vfp_args[vi++] * 4; -+ continue; -+ } -+ else if (!done_with_regs && !is_vfp_type) -+ { -+ char *tregp = ffi_align (ty, regp); -+ -+ z = (z < 4) ? 4 : z; // pad -+ -+ /* If the arguments either fits into the registers or uses registers -+ and stack, while we haven't read other things from the stack */ -+ if (tregp + z <= eo_regp || !stack_used) -+ { -+ /* Because we're little endian, this is what it turns into. */ -+ avalue[i] = (void *) tregp; -+ regp = tregp + z; -+ -+ /* If we read past the last core register, make sure we -+ have not read from the stack before and continue -+ reading after regp. */ -+ if (regp > eo_regp) -+ { -+ FFI_ASSERT (!stack_used); -+ argp = regp; -+ } -+ if (regp >= eo_regp) -+ { -+ done_with_regs = 1; -+ stack_used = 1; -+ } -+ continue; -+ } -+ } -+ -+ stack_used = 1; -+ argp = ffi_align (ty, argp); -+ avalue[i] = (void *) argp; -+ argp += z; -+ } -+ -+ return rvalue; -+} -+ -+struct closure_frame -+{ -+ char vfp_space[8*8] __attribute__((aligned(8))); -+ char result[8*4]; -+ char argp[]; -+}; -+ -+int FFI_HIDDEN -+ffi_closure_inner_SYSV (ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, -+ struct closure_frame *frame) -+{ -+ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); -+ void *rvalue = ffi_prep_incoming_args_SYSV (cif, frame->result, -+ frame->argp, avalue); -+ fun (cif, rvalue, avalue, user_data); -+ return cif->flags; -+} -+ -+int FFI_HIDDEN -+ffi_closure_inner_VFP (ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, -+ struct closure_frame *frame) -+{ -+ void **avalue = (void **) alloca (cif->nargs * sizeof (void *)); -+ void *rvalue = ffi_prep_incoming_args_VFP (cif, frame->result, frame->argp, -+ frame->vfp_space, avalue); -+ fun (cif, rvalue, avalue, user_data); -+ return cif->flags; -+} -+ -+void ffi_closure_SYSV (void) FFI_HIDDEN; -+void ffi_closure_VFP (void) FFI_HIDDEN; -+void ffi_go_closure_SYSV (void) FFI_HIDDEN; -+void ffi_go_closure_VFP (void) FFI_HIDDEN; -+ -+/* the cif must already be prep'ed */ -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure * closure, -+ ffi_cif * cif, -+ void (*fun) (ffi_cif *, void *, void **, void *), -+ void *user_data, void *codeloc) -+{ -+ void (*closure_func) (void) = ffi_closure_SYSV; -+ -+ if (cif->abi == FFI_VFP) -+ { -+ /* We only need take the vfp path if there are vfp arguments. */ -+ if (cif->vfp_used) -+ closure_func = ffi_closure_VFP; -+ } -+ else if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ void **config = (void **)((uint8_t *)codeloc - PAGE_MAX_SIZE); -+ config[0] = closure; -+ config[1] = closure_func; -+#else -+ memcpy (closure->tramp, ffi_arm_trampoline, 8); -+ __clear_cache(closure->tramp, closure->tramp + 8); /* clear data map */ -+ __clear_cache(codeloc, codeloc + 8); /* clear insn map */ -+ *(void (**)(void))(closure->tramp + 8) = closure_func; -+#endif -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; -+} -+ -+ffi_status -+ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, -+ void (*fun) (ffi_cif *, void *, void **, void *)) -+{ -+ void (*closure_func) (void) = ffi_go_closure_SYSV; -+ -+ if (cif->abi == FFI_VFP) -+ { -+ /* We only need take the vfp path if there are vfp arguments. */ -+ if (cif->vfp_used) -+ closure_func = ffi_go_closure_VFP; -+ } -+ else if (cif->abi != FFI_SYSV) -+ return FFI_BAD_ABI; -+ -+ closure->tramp = closure_func; -+ closure->cif = cif; -+ closure->fun = fun; -+ -+ return FFI_OK; -+} -+ -+/* Below are routines for VFP hard-float support. */ -+ -+/* A subroutine of vfp_type_p. Given a structure type, return the type code -+ of the first non-structure element. Recurse for structure elements. -+ Return -1 if the structure is in fact empty, i.e. no nested elements. */ -+ -+static int -+is_hfa0 (const ffi_type *ty) -+{ -+ ffi_type **elements = ty->elements; -+ int i, ret = -1; -+ -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ ret = elements[i]->type; -+ if (ret == FFI_TYPE_STRUCT || ret == FFI_TYPE_COMPLEX) -+ { -+ ret = is_hfa0 (elements[i]); -+ if (ret < 0) -+ continue; -+ } -+ break; -+ } -+ -+ return ret; -+} -+ -+/* A subroutine of vfp_type_p. Given a structure type, return true if all -+ of the non-structure elements are the same as CANDIDATE. */ -+ -+static int -+is_hfa1 (const ffi_type *ty, int candidate) -+{ -+ ffi_type **elements = ty->elements; -+ int i; -+ -+ if (elements != NULL) -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } -+ -+ return 1; -+} -+ -+/* Determine if TY is an homogenous floating point aggregate (HFA). -+ That is, a structure consisting of 1 to 4 members of all the same type, -+ where that type is a floating point scalar. -+ -+ Returns non-zero iff TY is an HFA. The result is an encoded value where -+ bits 0-7 contain the type code, and bits 8-10 contain the element count. */ -+ -+static int -+vfp_type_p (const ffi_type *ty) -+{ -+ ffi_type **elements; -+ int candidate, i; -+ size_t size, ele_count; -+ -+ /* Quickest tests first. */ -+ candidate = ty->type; -+ switch (ty->type) -+ { -+ default: -+ return 0; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_DOUBLE: -+ ele_count = 1; -+ goto done; -+ case FFI_TYPE_COMPLEX: -+ candidate = ty->elements[0]->type; -+ if (candidate != FFI_TYPE_FLOAT && candidate != FFI_TYPE_DOUBLE) -+ return 0; -+ ele_count = 2; -+ goto done; -+ case FFI_TYPE_STRUCT: -+ break; -+ } -+ -+ /* No HFA types are smaller than 4 bytes, or larger than 32 bytes. */ -+ size = ty->size; -+ if (size < 4 || size > 32) -+ return 0; -+ -+ /* Find the type of the first non-structure member. */ -+ elements = ty->elements; -+ candidate = elements[0]->type; -+ if (candidate == FFI_TYPE_STRUCT || candidate == FFI_TYPE_COMPLEX) -+ { -+ for (i = 0; ; ++i) -+ { -+ candidate = is_hfa0 (elements[i]); -+ if (candidate >= 0) -+ break; -+ } -+ } -+ -+ /* If the first member is not a floating point type, it's not an HFA. -+ Also quickly re-check the size of the structure. */ -+ switch (candidate) -+ { -+ case FFI_TYPE_FLOAT: -+ ele_count = size / sizeof(float); -+ if (size != ele_count * sizeof(float)) -+ return 0; -+ break; -+ case FFI_TYPE_DOUBLE: -+ ele_count = size / sizeof(double); -+ if (size != ele_count * sizeof(double)) -+ return 0; -+ break; -+ default: -+ return 0; -+ } -+ if (ele_count > 4) -+ return 0; -+ -+ /* Finally, make sure that all scalar elements are the same type. */ -+ for (i = 0; elements[i]; ++i) -+ { -+ int t = elements[i]->type; -+ if (t == FFI_TYPE_STRUCT || t == FFI_TYPE_COMPLEX) -+ { -+ if (!is_hfa1 (elements[i], candidate)) -+ return 0; -+ } -+ else if (t != candidate) -+ return 0; -+ } -+ -+ /* All tests succeeded. Encode the result. */ -+ done: -+ return (ele_count << 8) | candidate; -+} -+ -+static int -+place_vfp_arg (ffi_cif *cif, int h) -+{ -+ unsigned short reg = cif->vfp_reg_free; -+ int align = 1, nregs = h >> 8; -+ -+ if ((h & 0xff) == FFI_TYPE_DOUBLE) -+ align = 2, nregs *= 2; -+ -+ /* Align register number. */ -+ if ((reg & 1) && align == 2) -+ reg++; -+ -+ while (reg + nregs <= 16) -+ { -+ int s, new_used = 0; -+ for (s = reg; s < reg + nregs; s++) -+ { -+ new_used |= (1 << s); -+ if (cif->vfp_used & (1 << s)) -+ { -+ reg += align; -+ goto next_reg; -+ } -+ } -+ /* Found regs to allocate. */ -+ cif->vfp_used |= new_used; -+ cif->vfp_args[cif->vfp_nargs++] = reg; -+ -+ /* Update vfp_reg_free. */ -+ if (cif->vfp_used & (1 << cif->vfp_reg_free)) -+ { -+ reg += nregs; -+ while (cif->vfp_used & (1 << reg)) -+ reg += 1; -+ cif->vfp_reg_free = reg; -+ } -+ return 0; -+ next_reg:; -+ } -+ // done, mark all regs as used -+ cif->vfp_reg_free = 16; -+ cif->vfp_used = 0xFFFF; -+ return 1; -+} -+ -+static void -+layout_vfp_args (ffi_cif * cif) -+{ -+ int i; -+ /* Init VFP fields */ -+ cif->vfp_used = 0; -+ cif->vfp_nargs = 0; -+ cif->vfp_reg_free = 0; -+ memset (cif->vfp_args, -1, 16); /* Init to -1. */ -+ -+ for (i = 0; i < cif->nargs; i++) -+ { -+ int h = vfp_type_p (cif->arg_types[i]); -+ if (h && place_vfp_arg (cif, h) == 1) -+ break; -+ } -+} -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/internal.h modified/Modules/_ctypes/libffi_ios/arm/internal.h ---- orig/Modules/_ctypes/libffi_ios/arm/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/internal.h 2015-12-20 19:03:21.000000000 +0800 -@@ -0,0 +1,7 @@ -+#define ARM_TYPE_VFP_S 0 -+#define ARM_TYPE_VFP_D 1 -+#define ARM_TYPE_VFP_N 2 -+#define ARM_TYPE_INT64 3 -+#define ARM_TYPE_INT 4 -+#define ARM_TYPE_VOID 5 -+#define ARM_TYPE_STRUCT 6 -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S ---- orig/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/sysv_armv7.S 2015-12-20 22:31:41.000000000 +0800 -@@ -0,0 +1,388 @@ -+#ifdef __arm__ -+ -+/* ----------------------------------------------------------------------- -+ sysv.S - Copyright (c) 1998, 2008, 2011 Red Hat, Inc. -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ -+ ARM Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#define LIBFFI_ASM -+#include -+#include -+#include -+#include "internal.h" -+ -+/* GCC 4.8 provides __ARM_ARCH; construct it otherwise. */ -+#ifndef __ARM_ARCH -+# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ -+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ -+ || defined(__ARM_ARCH_7EM__) -+# define __ARM_ARCH 7 -+# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ -+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ -+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ -+ || defined(__ARM_ARCH_6M__) -+# define __ARM_ARCH 6 -+# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ -+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ -+ || defined(__ARM_ARCH_5TEJ__) -+# define __ARM_ARCH 5 -+# else -+# define __ARM_ARCH 4 -+# endif -+#endif -+ -+/* Conditionally compile unwinder directives. */ -+#ifdef __ARM_EABI__ -+# define UNWIND(...) __VA_ARGS__ -+#else -+# define UNWIND(...) -+#endif -+ -+#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__ARM_EABI__) -+ .cfi_sections .debug_frame -+#endif -+ -+#define CONCAT(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a ## b -+ -+#ifdef __USER_LABEL_PREFIX__ -+# define CNAME(X) CONCAT (__USER_LABEL_PREFIX__, X) -+#else -+# define CNAME(X) X -+#endif -+#ifdef __ELF__ -+# define SIZE(X) .size CNAME(X), . - CNAME(X) -+# define TYPE(X, Y) .type CNAME(X), Y -+#else -+# define SIZE(X) -+# define TYPE(X, Y) -+#endif -+ -+#define ARM_FUNC_START_LOCAL(name) \ -+ .align 3; \ -+ TYPE(CNAME(name), %function); \ -+ CNAME(name): -+ -+#define ARM_FUNC_START(name) \ -+ .globl CNAME(name); \ -+ FFI_HIDDEN(CNAME(name)); \ -+ ARM_FUNC_START_LOCAL(name) -+ -+#define ARM_FUNC_END(name) \ -+ SIZE(name) -+ -+/* Aid in defining a jump table with 8 bytes between entries. */ -+/* ??? The clang assembler doesn't handle .if with symbolic expressions. */ -+#ifdef __clang__ -+# define E(index) -+#else -+# define E(index) \ -+ .if . - 0b - 8*index; \ -+ .error "type table out of sync"; \ -+ .endif -+#endif -+ -+ .text -+ .syntax unified -+ .arm -+ -+#ifndef __clang__ -+ /* We require interworking on LDM, which implies ARMv5T, -+ which implies the existance of BLX. */ -+ .arch armv5t -+#endif -+ -+ /* Note that we use STC and LDC to encode VFP instructions, -+ so that we do not need ".fpu vfp", nor get that added to -+ the object file attributes. These will not be executed -+ unless the FFI_VFP abi is used. */ -+ -+ @ r0: stack -+ @ r1: frame -+ @ r2: fn -+ @ r3: vfp_used -+ -+ARM_FUNC_START(ffi_call_VFP) -+ UNWIND(.fnstart) -+ cfi_startproc -+ -+ cmp r3, #3 @ load only d0 if possible -+#ifdef __clang__ -+ vldrle d0, [sp] -+ vldmgt sp, {d0-d7} -+#else -+ ldcle p11, cr0, [r0] @ vldrle d0, [sp] -+ ldcgt p11, cr0, [r0], {16} @ vldmgt sp, {d0-d7} -+#endif -+ add r0, r0, #64 @ discard the vfp register args -+ /* FALLTHRU */ -+ARM_FUNC_END(ffi_call_VFP) -+ -+ARM_FUNC_START(ffi_call_SYSV) -+ stm r1, {fp, lr} -+ mov fp, r1 -+ -+ @ This is a bit of a lie wrt the origin of the unwind info, but -+ @ now we've got the usual frame pointer and two saved registers. -+ UNWIND(.save {fp,lr}) -+ UNWIND(.setfp fp, sp) -+ cfi_def_cfa(fp, 8) -+ cfi_rel_offset(fp, 0) -+ cfi_rel_offset(lr, 4) -+ -+ mov sp, r0 @ install the stack pointer -+ mov lr, r2 @ move the fn pointer out of the way -+ ldr ip, [fp, #16] @ install the static chain -+ ldmia sp!, {r0-r3} @ move first 4 parameters in registers. -+ blx lr @ call fn -+ -+ @ Load r2 with the pointer to storage for the return value -+ @ Load r3 with the return type code -+ ldr r2, [fp, #8] -+ ldr r3, [fp, #12] -+ -+ @ Deallocate the stack with the arguments. -+ mov sp, fp -+ cfi_def_cfa_register(sp) -+ -+ @ Store values stored in registers. -+ .align 3 -+ add pc, pc, r3, lsl #3 -+ nop -+0: -+E(ARM_TYPE_VFP_S) -+#ifdef __clang__ -+ vstr s0, [r2] -+#else -+ stc p10, cr0, [r2] @ vstr s0, [r2] -+#endif -+ pop {fp,pc} -+E(ARM_TYPE_VFP_D) -+#ifdef __clang__ -+ vstr d0, [r2] -+#else -+ stc p11, cr0, [r2] @ vstr d0, [r2] -+#endif -+ pop {fp,pc} -+E(ARM_TYPE_VFP_N) -+#ifdef __clang__ -+ vstm r2, {d0-d3} -+#else -+ stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3} -+#endif -+ pop {fp,pc} -+E(ARM_TYPE_INT64) -+ str r1, [r2, #4] -+ nop -+E(ARM_TYPE_INT) -+ str r0, [r2] -+ pop {fp,pc} -+E(ARM_TYPE_VOID) -+ pop {fp,pc} -+ nop -+E(ARM_TYPE_STRUCT) -+ pop {fp,pc} -+ -+ cfi_endproc -+ UNWIND(.fnend) -+ARM_FUNC_END(ffi_call_SYSV) -+ -+ -+/* -+ int ffi_closure_inner_* (cif, fun, user_data, frame) -+*/ -+ -+ARM_FUNC_START(ffi_go_closure_SYSV) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #4] @ load cif -+ ldr r1, [ip, #8] @ load fun -+ mov r2, ip @ load user_data -+ b 0f -+ cfi_endproc -+ARM_FUNC_END(ffi_go_closure_SYSV) -+ -+ARM_FUNC_START(ffi_closure_SYSV) -+ UNWIND(.fnstart) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ ldr ip, [ip] @ ip points to the config page, dereference to get the ffi_closure* -+#endif -+ ldr r0, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET] @ load cif -+ ldr r1, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+4] @ load fun -+ ldr r2, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+8] @ load user_data -+0: -+ add ip, sp, #16 @ compute entry sp -+ sub sp, sp, #64+32 @ allocate frame -+ cfi_adjust_cfa_offset(64+32) -+ stmdb sp!, {ip,lr} -+ -+ /* Remember that EABI unwind info only applies at call sites. -+ We need do nothing except note the save of the stack pointer -+ and the link registers. */ -+ UNWIND(.save {sp,lr}) -+ cfi_adjust_cfa_offset(8) -+ cfi_rel_offset(lr, 4) -+ -+ add r3, sp, #8 @ load frame -+ bl CNAME(ffi_closure_inner_SYSV) -+ -+ @ Load values returned in registers. -+ add r2, sp, #8+64 @ load result -+ adr r3, CNAME(ffi_closure_ret) -+ add pc, r3, r0, lsl #3 -+ cfi_endproc -+ UNWIND(.fnend) -+ARM_FUNC_END(ffi_closure_SYSV) -+ -+ARM_FUNC_START(ffi_go_closure_VFP) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ ldr r0, [ip, #4] @ load cif -+ ldr r1, [ip, #8] @ load fun -+ mov r2, ip @ load user_data -+ b 0f -+ cfi_endproc -+ARM_FUNC_END(ffi_go_closure_VFP) -+ -+ARM_FUNC_START(ffi_closure_VFP) -+ UNWIND(.fnstart) -+ cfi_startproc -+ stmdb sp!, {r0-r3} @ save argument regs -+ cfi_adjust_cfa_offset(16) -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ ldr ip, [ip] @ ip points to the config page, dereference to get the ffi_closure* -+#endif -+ ldr r0, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET] @ load cif -+ ldr r1, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+4] @ load fun -+ ldr r2, [ip, #FFI_TRAMPOLINE_CLOSURE_OFFSET+8] @ load user_data -+0: -+ add ip, sp, #16 -+ sub sp, sp, #64+32 @ allocate frame -+ cfi_adjust_cfa_offset(64+32) -+#ifdef __clang__ -+ vstm sp, {d0-d7} -+#else -+ stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7} -+#endif -+ stmdb sp!, {ip,lr} -+ -+ /* See above. */ -+ UNWIND(.save {sp,lr}) -+ cfi_adjust_cfa_offset(8) -+ cfi_rel_offset(lr, 4) -+ -+ add r3, sp, #8 @ load frame -+ bl CNAME(ffi_closure_inner_VFP) -+ -+ @ Load values returned in registers. -+ add r2, sp, #8+64 @ load result -+ adr r3, CNAME(ffi_closure_ret) -+ add pc, r3, r0, lsl #3 -+ cfi_endproc -+ UNWIND(.fnend) -+ARM_FUNC_END(ffi_closure_VFP) -+ -+/* Load values returned in registers for both closure entry points. -+ Note that we use LDM with SP in the register set. This is deprecated -+ by ARM, but not yet unpredictable. */ -+ -+ARM_FUNC_START_LOCAL(ffi_closure_ret) -+ cfi_startproc -+ cfi_rel_offset(sp, 0) -+ cfi_rel_offset(lr, 4) -+0: -+E(ARM_TYPE_VFP_S) -+#ifdef __clang__ -+ vldr s0, [r2] -+#else -+ ldc p10, cr0, [r2] @ vldr s0, [r2] -+#endif -+ ldm sp, {sp,pc} -+E(ARM_TYPE_VFP_D) -+#ifdef __clang__ -+ vldr d0, [r2] -+#else -+ ldc p11, cr0, [r2] @ vldr d0, [r2] -+#endif -+ ldm sp, {sp,pc} -+E(ARM_TYPE_VFP_N) -+#ifdef __clang__ -+ vldm r2, {d0-d3} -+#else -+ ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3} -+#endif -+ ldm sp, {sp,pc} -+E(ARM_TYPE_INT64) -+ ldr r1, [r2, #4] -+ nop -+E(ARM_TYPE_INT) -+ ldr r0, [r2] -+ ldm sp, {sp,pc} -+E(ARM_TYPE_VOID) -+ ldm sp, {sp,pc} -+ nop -+E(ARM_TYPE_STRUCT) -+ ldm sp, {sp,pc} -+ cfi_endproc -+ARM_FUNC_END(ffi_closure_ret) -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#include -+ -+.align PAGE_MAX_SHIFT -+ARM_FUNC_START(ffi_closure_trampoline_table_page) -+.rept PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE -+ adr ip, #-PAGE_MAX_SIZE @ the config page is PAGE_MAX_SIZE behind the trampoline page -+ sub ip, #8 @ account for pc bias -+ ldr pc, [ip, #4] @ jump to ffi_closure_SYSV or ffi_closure_VFP -+.endr -+ARM_FUNC_END(ffi_closure_trampoline_table_page) -+#endif -+ -+#else -+ -+ARM_FUNC_START(ffi_arm_trampoline) -+0: adr ip, 0b -+ ldr pc, 1f -+1: .long 0 -+ARM_FUNC_END(ffi_arm_trampoline) -+ -+#endif /* FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",%progbits -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S ---- orig/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/arm/trampoline_armv7.S 2015-12-20 18:50:24.000000000 +0800 -@@ -0,0 +1,5 @@ -+#ifdef __arm__ -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/closures.c modified/Modules/_ctypes/libffi_ios/closures.c ---- orig/Modules/_ctypes/libffi_ios/closures.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/closures.c 2015-12-20 22:04:37.000000000 +0800 -@@ -0,0 +1,925 @@ -+/* ----------------------------------------------------------------------- -+ closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. -+ Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc -+ Copyright (c) 2011 Plausible Labs Cooperative, Inc. -+ -+ Code to allocate and deallocate memory for closures. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#if defined __linux__ && !defined _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#endif -+ -+#include -+#include -+#include -+ -+#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE -+# if __gnu_linux__ && !defined(__ANDROID__) -+/* This macro indicates it may be forbidden to map anonymous memory -+ with both write and execute permission. Code compiled when this -+ option is defined will attempt to map such pages once, but if it -+ fails, it falls back to creating a temporary file in a writable and -+ executable filesystem and mapping pages from it into separate -+ locations in the virtual memory space, one location writable and -+ another executable. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# define HAVE_MNTENT 1 -+# endif -+# if defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__) -+/* Windows systems may have Data Execution Protection (DEP) enabled, -+ which requires the use of VirtualMalloc/VirtualFree to alloc/free -+ executable memory. */ -+# define FFI_MMAP_EXEC_WRIT 1 -+# endif -+#endif -+ -+#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX -+# ifdef __linux__ -+/* When defined to 1 check for SELinux and if SELinux is active, -+ don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that -+ might cause audit messages. */ -+# define FFI_MMAP_EXEC_SELINUX 1 -+# endif -+#endif -+ -+#if FFI_CLOSURES -+ -+#if FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+ -+#include -+#include -+#include -+#include -+ -+extern void *ffi_closure_trampoline_table_page; -+ -+typedef struct ffi_trampoline_table ffi_trampoline_table; -+typedef struct ffi_trampoline_table_entry ffi_trampoline_table_entry; -+ -+struct ffi_trampoline_table -+{ -+ /* contiguous writable and executable pages */ -+ vm_address_t config_page; -+ vm_address_t trampoline_page; -+ -+ /* free list tracking */ -+ uint16_t free_count; -+ ffi_trampoline_table_entry *free_list; -+ ffi_trampoline_table_entry *free_list_pool; -+ -+ ffi_trampoline_table *prev; -+ ffi_trampoline_table *next; -+}; -+ -+struct ffi_trampoline_table_entry -+{ -+ void *(*trampoline) (); -+ ffi_trampoline_table_entry *next; -+}; -+ -+/* Total number of trampolines that fit in one trampoline table */ -+#define FFI_TRAMPOLINE_COUNT (PAGE_MAX_SIZE / FFI_TRAMPOLINE_SIZE) -+ -+static pthread_mutex_t ffi_trampoline_lock = PTHREAD_MUTEX_INITIALIZER; -+static ffi_trampoline_table *ffi_trampoline_tables = NULL; -+ -+static ffi_trampoline_table * -+ffi_trampoline_table_alloc () -+{ -+ ffi_trampoline_table *table = NULL; -+ -+ /* Loop until we can allocate two contiguous pages */ -+ while (table == NULL) -+ { -+ vm_address_t config_page = 0x0; -+ kern_return_t kt; -+ -+ /* Try to allocate two pages */ -+ kt = -+ vm_allocate (mach_task_self (), &config_page, PAGE_MAX_SIZE * 2, -+ VM_FLAGS_ANYWHERE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_allocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } -+ -+ /* Now drop the second half of the allocation to make room for the trampoline table */ -+ vm_address_t trampoline_page = config_page + PAGE_MAX_SIZE; -+ kt = vm_deallocate (mach_task_self (), trampoline_page, PAGE_MAX_SIZE); -+ if (kt != KERN_SUCCESS) -+ { -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ break; -+ } -+ -+ /* Remap the trampoline table to directly follow the config page */ -+ vm_prot_t cur_prot; -+ vm_prot_t max_prot; -+ -+ vm_address_t trampoline_page_template = (vm_address_t)&ffi_closure_trampoline_table_page; -+#ifdef __arm__ -+ /* ffi_closure_trampoline_table_page can be thumb-biased on some ARM archs */ -+ trampoline_page_template &= ~1UL; -+#endif -+ -+ kt = -+ vm_remap (mach_task_self (), &trampoline_page, PAGE_MAX_SIZE, 0x0, FALSE, -+ mach_task_self (), trampoline_page_template, FALSE, -+ &cur_prot, &max_prot, VM_INHERIT_SHARE); -+ -+ /* If we lost access to the destination trampoline page, drop our config allocation mapping and retry */ -+ if (kt != KERN_SUCCESS) -+ { -+ /* Log unexpected failures */ -+ if (kt != KERN_NO_SPACE) -+ { -+ fprintf (stderr, "vm_remap() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ } -+ -+ vm_deallocate (mach_task_self (), config_page, PAGE_SIZE); -+ continue; -+ } -+ -+ /* We have valid trampoline and config pages */ -+ table = calloc (1, sizeof (ffi_trampoline_table)); -+ table->free_count = FFI_TRAMPOLINE_COUNT; -+ table->config_page = config_page; -+ table->trampoline_page = trampoline_page; -+ -+ /* Create and initialize the free list */ -+ table->free_list_pool = -+ calloc (FFI_TRAMPOLINE_COUNT, sizeof (ffi_trampoline_table_entry)); -+ -+ uint16_t i; -+ for (i = 0; i < table->free_count; i++) -+ { -+ ffi_trampoline_table_entry *entry = &table->free_list_pool[i]; -+ entry->trampoline = -+ (void *) (table->trampoline_page + (i * FFI_TRAMPOLINE_SIZE)); -+ -+ if (i < table->free_count - 1) -+ entry->next = &table->free_list_pool[i + 1]; -+ } -+ -+ table->free_list = table->free_list_pool; -+ } -+ -+ return table; -+} -+ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ /* Create the closure */ -+ ffi_closure *closure = malloc (size); -+ if (closure == NULL) -+ return NULL; -+ -+ pthread_mutex_lock (&ffi_trampoline_lock); -+ -+ /* Check for an active trampoline table with available entries. */ -+ ffi_trampoline_table *table = ffi_trampoline_tables; -+ if (table == NULL || table->free_list == NULL) -+ { -+ table = ffi_trampoline_table_alloc (); -+ if (table == NULL) -+ { -+ free (closure); -+ return NULL; -+ } -+ -+ /* Insert the new table at the top of the list */ -+ table->next = ffi_trampoline_tables; -+ if (table->next != NULL) -+ table->next->prev = table; -+ -+ ffi_trampoline_tables = table; -+ } -+ -+ /* Claim the free entry */ -+ ffi_trampoline_table_entry *entry = ffi_trampoline_tables->free_list; -+ ffi_trampoline_tables->free_list = entry->next; -+ ffi_trampoline_tables->free_count--; -+ entry->next = NULL; -+ -+ pthread_mutex_unlock (&ffi_trampoline_lock); -+ -+ /* Initialize the return values */ -+ *code = entry->trampoline; -+ closure->trampoline_table = table; -+ closure->trampoline_table_entry = entry; -+ -+ return closure; -+} -+ -+void -+ffi_closure_free (void *ptr) -+{ -+ ffi_closure *closure = ptr; -+ -+ pthread_mutex_lock (&ffi_trampoline_lock); -+ -+ /* Fetch the table and entry references */ -+ ffi_trampoline_table *table = closure->trampoline_table; -+ ffi_trampoline_table_entry *entry = closure->trampoline_table_entry; -+ -+ /* Return the entry to the free list */ -+ entry->next = table->free_list; -+ table->free_list = entry; -+ table->free_count++; -+ -+ /* If all trampolines within this table are free, and at least one other table exists, deallocate -+ * the table */ -+ if (table->free_count == FFI_TRAMPOLINE_COUNT -+ && ffi_trampoline_tables != table) -+ { -+ /* Remove from the list */ -+ if (table->prev != NULL) -+ table->prev->next = table->next; -+ -+ if (table->next != NULL) -+ table->next->prev = table->prev; -+ -+ /* Deallocate pages */ -+ kern_return_t kt; -+ kt = vm_deallocate (mach_task_self (), table->config_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ -+ kt = -+ vm_deallocate (mach_task_self (), table->trampoline_page, PAGE_SIZE); -+ if (kt != KERN_SUCCESS) -+ fprintf (stderr, "vm_deallocate() failure: %d at %s:%d\n", kt, -+ __FILE__, __LINE__); -+ -+ /* Deallocate free list */ -+ free (table->free_list_pool); -+ free (table); -+ } -+ else if (ffi_trampoline_tables != table) -+ { -+ /* Otherwise, bump this table to the top of the list */ -+ table->prev = NULL; -+ table->next = ffi_trampoline_tables; -+ if (ffi_trampoline_tables != NULL) -+ ffi_trampoline_tables->prev = table; -+ -+ ffi_trampoline_tables = table; -+ } -+ -+ pthread_mutex_unlock (&ffi_trampoline_lock); -+ -+ /* Free the closure */ -+ free (closure); -+} -+ -+#endif -+ -+// Per-target implementation; It's unclear what can reasonable be shared between two OS/architecture implementations. -+ -+#elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+#define USE_LOCKS 1 -+#define USE_DL_PREFIX 1 -+#ifdef __GNUC__ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 1 -+#endif -+#endif -+ -+/* We need to use mmap, not sbrk. */ -+#define HAVE_MORECORE 0 -+ -+/* We could, in theory, support mremap, but it wouldn't buy us anything. */ -+#define HAVE_MREMAP 0 -+ -+/* We have no use for this, so save some code and data. */ -+#define NO_MALLINFO 1 -+ -+/* We need all allocations to be in regular segments, otherwise we -+ lose track of the corresponding code address. */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+ -+/* Don't allocate more than a page unless needed. */ -+#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) -+ -+#if FFI_CLOSURE_TEST -+/* Don't release single pages, to avoid a worst-case scenario of -+ continuously allocating and releasing single pages, but release -+ pairs of pages, which should do just as well given that allocations -+ are likely to be small. */ -+#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) -+#endif -+ -+#include -+#include -+#include -+#include -+#ifndef _MSC_VER -+#include -+#endif -+#include -+#include -+#if !defined(X86_WIN32) && !defined(X86_WIN64) -+#ifdef HAVE_MNTENT -+#include -+#endif /* HAVE_MNTENT */ -+#include -+#include -+ -+/* We don't want sys/mman.h to be included after we redefine mmap and -+ dlmunmap. */ -+#include -+#define LACKS_SYS_MMAN_H 1 -+ -+#if FFI_MMAP_EXEC_SELINUX -+#include -+#include -+ -+static int selinux_enabled = -1; -+ -+static int -+selinux_enabled_check (void) -+{ -+ struct statfs sfs; -+ FILE *f; -+ char *buf = NULL; -+ size_t len = 0; -+ -+ if (statfs ("/selinux", &sfs) >= 0 -+ && (unsigned int) sfs.f_type == 0xf97cff8cU) -+ return 1; -+ f = fopen ("/proc/mounts", "r"); -+ if (f == NULL) -+ return 0; -+ while (getline (&buf, &len, f) >= 0) -+ { -+ char *p = strchr (buf, ' '); -+ if (p == NULL) -+ break; -+ p = strchr (p + 1, ' '); -+ if (p == NULL) -+ break; -+ if (strncmp (p + 1, "selinuxfs ", 10) == 0) -+ { -+ free (buf); -+ fclose (f); -+ return 1; -+ } -+ } -+ free (buf); -+ fclose (f); -+ return 0; -+} -+ -+#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ -+ : (selinux_enabled = selinux_enabled_check ())) -+ -+#else -+ -+#define is_selinux_enabled() 0 -+ -+#endif /* !FFI_MMAP_EXEC_SELINUX */ -+ -+/* On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC. */ -+#ifdef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#include -+ -+static int emutramp_enabled = -1; -+ -+static int -+emutramp_enabled_check (void) -+{ -+ char *buf = NULL; -+ size_t len = 0; -+ FILE *f; -+ int ret; -+ f = fopen ("/proc/self/status", "r"); -+ if (f == NULL) -+ return 0; -+ ret = 0; -+ -+ while (getline (&buf, &len, f) != -1) -+ if (!strncmp (buf, "PaX:", 4)) -+ { -+ char emutramp; -+ if (sscanf (buf, "%*s %*c%c", &emutramp) == 1) -+ ret = (emutramp == 'E'); -+ break; -+ } -+ free (buf); -+ fclose (f); -+ return ret; -+} -+ -+#define is_emutramp_enabled() (emutramp_enabled >= 0 ? emutramp_enabled \ -+ : (emutramp_enabled = emutramp_enabled_check ())) -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+#elif defined (__CYGWIN__) || defined(__INTERIX) -+ -+#include -+ -+/* Cygwin is Linux-like, but not quite that Linux-like. */ -+#define is_selinux_enabled() 0 -+ -+#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ -+ -+#ifndef FFI_MMAP_EXEC_EMUTRAMP_PAX -+#define is_emutramp_enabled() 0 -+#endif /* FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Declare all functions defined in dlmalloc.c as static. */ -+static void *dlmalloc(size_t); -+static void dlfree(void*); -+static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; -+static void *dlrealloc(void *, size_t) MAYBE_UNUSED; -+static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; -+static void *dlvalloc(size_t) MAYBE_UNUSED; -+static int dlmallopt(int, int) MAYBE_UNUSED; -+static size_t dlmalloc_footprint(void) MAYBE_UNUSED; -+static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; -+static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; -+static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; -+static void *dlpvalloc(size_t) MAYBE_UNUSED; -+static int dlmalloc_trim(size_t) MAYBE_UNUSED; -+static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; -+static void dlmalloc_stats(void) MAYBE_UNUSED; -+ -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+/* Use these for mmap and munmap within dlmalloc.c. */ -+static void *dlmmap(void *, size_t, int, int, int, off_t); -+static int dlmunmap(void *, size_t); -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ -+ -+#define mmap dlmmap -+#define munmap dlmunmap -+ -+#include "dlmalloc.c" -+ -+#undef mmap -+#undef munmap -+ -+#if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) -+ -+/* A mutex used to synchronize access to *exec* variables in this file. */ -+static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; -+ -+/* A file descriptor of a temporary file from which we'll map -+ executable pages. */ -+static int execfd = -1; -+ -+/* The amount of space already allocated from the temporary file. */ -+static size_t execsize = 0; -+ -+/* Open a temporary file name, and immediately unlink it. */ -+static int -+open_temp_exec_file_name (char *name, int flags) -+{ -+ int fd; -+ -+#ifdef HAVE_MKOSTEMP -+ fd = mkostemp (name, flags); -+#else -+ fd = mkstemp (name); -+#endif -+ -+ if (fd != -1) -+ unlink (name); -+ -+ return fd; -+} -+ -+/* Open a temporary file in the named directory. */ -+static int -+open_temp_exec_file_dir (const char *dir) -+{ -+ static const char suffix[] = "/ffiXXXXXX"; -+ int lendir, flags; -+ char *tempname; -+#ifdef O_TMPFILE -+ int fd; -+#endif -+ -+#ifdef O_CLOEXEC -+ flags = O_CLOEXEC; -+#else -+ flags = 0; -+#endif -+ -+#ifdef O_TMPFILE -+ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); -+ /* If the running system does not support the O_TMPFILE flag then retry without it. */ -+ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { -+ return fd; -+ } else { -+ errno = 0; -+ } -+#endif -+ -+ lendir = strlen (dir); -+ tempname = __builtin_alloca (lendir + sizeof (suffix)); -+ -+ if (!tempname) -+ return -1; -+ -+ memcpy (tempname, dir, lendir); -+ memcpy (tempname + lendir, suffix, sizeof (suffix)); -+ -+ return open_temp_exec_file_name (tempname, flags); -+} -+ -+/* Open a temporary file in the directory in the named environment -+ variable. */ -+static int -+open_temp_exec_file_env (const char *envvar) -+{ -+ const char *value = getenv (envvar); -+ -+ if (!value) -+ return -1; -+ -+ return open_temp_exec_file_dir (value); -+} -+ -+#ifdef HAVE_MNTENT -+/* Open a temporary file in an executable and writable mount point -+ listed in the mounts file. Subsequent calls with the same mounts -+ keep searching for mount points in the same file. Providing NULL -+ as the mounts file closes the file. */ -+static int -+open_temp_exec_file_mnt (const char *mounts) -+{ -+ static const char *last_mounts; -+ static FILE *last_mntent; -+ -+ if (mounts != last_mounts) -+ { -+ if (last_mntent) -+ endmntent (last_mntent); -+ -+ last_mounts = mounts; -+ -+ if (mounts) -+ last_mntent = setmntent (mounts, "r"); -+ else -+ last_mntent = NULL; -+ } -+ -+ if (!last_mntent) -+ return -1; -+ -+ for (;;) -+ { -+ int fd; -+ struct mntent mnt; -+ char buf[MAXPATHLEN * 3]; -+ -+ if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf)) == NULL) -+ return -1; -+ -+ if (hasmntopt (&mnt, "ro") -+ || hasmntopt (&mnt, "noexec") -+ || access (mnt.mnt_dir, W_OK)) -+ continue; -+ -+ fd = open_temp_exec_file_dir (mnt.mnt_dir); -+ -+ if (fd != -1) -+ return fd; -+ } -+} -+#endif /* HAVE_MNTENT */ -+ -+/* Instructions to look for a location to hold a temporary file that -+ can be mapped in for execution. */ -+static struct -+{ -+ int (*func)(const char *); -+ const char *arg; -+ int repeat; -+} open_temp_exec_file_opts[] = { -+ { open_temp_exec_file_env, "TMPDIR", 0 }, -+ { open_temp_exec_file_dir, "/tmp", 0 }, -+ { open_temp_exec_file_dir, "/var/tmp", 0 }, -+ { open_temp_exec_file_dir, "/dev/shm", 0 }, -+ { open_temp_exec_file_env, "HOME", 0 }, -+#ifdef HAVE_MNTENT -+ { open_temp_exec_file_mnt, "/etc/mtab", 1 }, -+ { open_temp_exec_file_mnt, "/proc/mounts", 1 }, -+#endif /* HAVE_MNTENT */ -+}; -+ -+/* Current index into open_temp_exec_file_opts. */ -+static int open_temp_exec_file_opts_idx = 0; -+ -+/* Reset a current multi-call func, then advances to the next entry. -+ If we're at the last, go back to the first and return nonzero, -+ otherwise return zero. */ -+static int -+open_temp_exec_file_opts_next (void) -+{ -+ if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); -+ -+ open_temp_exec_file_opts_idx++; -+ if (open_temp_exec_file_opts_idx -+ == (sizeof (open_temp_exec_file_opts) -+ / sizeof (*open_temp_exec_file_opts))) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ return 1; -+ } -+ -+ return 0; -+} -+ -+/* Return a file descriptor of a temporary zero-sized file in a -+ writable and executable filesystem. */ -+static int -+open_temp_exec_file (void) -+{ -+ int fd; -+ -+ do -+ { -+ fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func -+ (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); -+ -+ if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat -+ || fd == -1) -+ { -+ if (open_temp_exec_file_opts_next ()) -+ break; -+ } -+ } -+ while (fd == -1); -+ -+ return fd; -+} -+ -+/* Map in a chunk of memory from the temporary exec file into separate -+ locations in the virtual memory address space, one writable and one -+ executable. Returns the address of the writable portion, after -+ storing an offset to the corresponding executable portion at the -+ last word of the requested chunk. */ -+static void * -+dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) -+{ -+ void *ptr; -+ -+ if (execfd == -1) -+ { -+ open_temp_exec_file_opts_idx = 0; -+ retry_open: -+ execfd = open_temp_exec_file (); -+ if (execfd == -1) -+ return MFAIL; -+ } -+ -+ offset = execsize; -+ -+ if (ftruncate (execfd, offset + length)) -+ return MFAIL; -+ -+ flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); -+ flags |= MAP_SHARED; -+ -+ ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, -+ flags, execfd, offset); -+ if (ptr == MFAIL) -+ { -+ if (!offset) -+ { -+ close (execfd); -+ goto retry_open; -+ } -+ ftruncate (execfd, offset); -+ return MFAIL; -+ } -+ else if (!offset -+ && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) -+ open_temp_exec_file_opts_next (); -+ -+ start = mmap (start, length, prot, flags, execfd, offset); -+ -+ if (start == MFAIL) -+ { -+ munmap (ptr, length); -+ ftruncate (execfd, offset); -+ return start; -+ } -+ -+ mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; -+ -+ execsize += length; -+ -+ return start; -+} -+ -+/* Map in a writable and executable chunk of memory if possible. -+ Failing that, fall back to dlmmap_locked. */ -+static void * -+dlmmap (void *start, size_t length, int prot, -+ int flags, int fd, off_t offset) -+{ -+ void *ptr; -+ -+ assert (start == NULL && length % malloc_getpagesize == 0 -+ && prot == (PROT_READ | PROT_WRITE) -+ && flags == (MAP_PRIVATE | MAP_ANONYMOUS) -+ && fd == -1 && offset == 0); -+ -+#if FFI_CLOSURE_TEST -+ printf ("mapping in %zi\n", length); -+#endif -+ -+ if (execfd == -1 && is_emutramp_enabled ()) -+ { -+ ptr = mmap (start, length, prot & ~PROT_EXEC, flags, fd, offset); -+ return ptr; -+ } -+ -+ if (execfd == -1 && !is_selinux_enabled ()) -+ { -+ ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); -+ -+ if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) -+ /* Cool, no need to mess with separate segments. */ -+ return ptr; -+ -+ /* If MREMAP_DUP is ever introduced and implemented, try mmap -+ with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with -+ MREMAP_DUP and prot at this point. */ -+ } -+ -+ if (execsize == 0 || execfd == -1) -+ { -+ pthread_mutex_lock (&open_temp_exec_file_mutex); -+ ptr = dlmmap_locked (start, length, prot, flags, offset); -+ pthread_mutex_unlock (&open_temp_exec_file_mutex); -+ -+ return ptr; -+ } -+ -+ return dlmmap_locked (start, length, prot, flags, offset); -+} -+ -+/* Release memory at the given address, as well as the corresponding -+ executable page if it's separate. */ -+static int -+dlmunmap (void *start, size_t length) -+{ -+ /* We don't bother decreasing execsize or truncating the file, since -+ we can't quite tell whether we're unmapping the end of the file. -+ We don't expect frequent deallocation anyway. If we did, we -+ could locate pages in the file by writing to the pages being -+ deallocated and checking that the file contents change. -+ Yuck. */ -+ msegmentptr seg = segment_holding (gm, start); -+ void *code; -+ -+#if FFI_CLOSURE_TEST -+ printf ("unmapping %zi\n", length); -+#endif -+ -+ if (seg && (code = add_segment_exec_offset (start, seg)) != start) -+ { -+ int ret = munmap (code, length); -+ if (ret) -+ return ret; -+ } -+ -+ return munmap (start, length); -+} -+ -+#if FFI_CLOSURE_FREE_CODE -+/* Return segment holding given code address. */ -+static msegmentptr -+segment_holding_code (mstate m, char* addr) -+{ -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= add_segment_exec_offset (sp->base, sp) -+ && addr < add_segment_exec_offset (sp->base, sp) + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+#endif -+ -+#endif /* !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX) */ -+ -+/* Allocate a chunk of memory with the given size. Returns a pointer -+ to the writable address, and sets *CODE to the executable -+ corresponding virtual address. */ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ void *ptr; -+ -+ if (!code) -+ return NULL; -+ -+ ptr = dlmalloc (size); -+ -+ if (ptr) -+ { -+ msegmentptr seg = segment_holding (gm, ptr); -+ -+ *code = add_segment_exec_offset (ptr, seg); -+ } -+ -+ return ptr; -+} -+ -+/* Release a chunk of memory allocated with ffi_closure_alloc. If -+ FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the -+ writable or the executable address given. Otherwise, only the -+ writable address can be provided here. */ -+void -+ffi_closure_free (void *ptr) -+{ -+#if FFI_CLOSURE_FREE_CODE -+ msegmentptr seg = segment_holding_code (gm, ptr); -+ -+ if (seg) -+ ptr = sub_segment_exec_offset (ptr, seg); -+#endif -+ -+ dlfree (ptr); -+} -+ -+ -+#if FFI_CLOSURE_TEST -+/* Do some internal sanity testing to make sure allocation and -+ deallocation of pages are working as intended. */ -+int main () -+{ -+ void *p[3]; -+#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) -+#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) -+ GET (0, malloc_getpagesize / 2); -+ GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); -+ PUT (1); -+ GET (1, 2 * malloc_getpagesize); -+ GET (2, malloc_getpagesize / 2); -+ PUT (1); -+ PUT (0); -+ PUT (2); -+ return 0; -+} -+#endif /* FFI_CLOSURE_TEST */ -+# else /* ! FFI_MMAP_EXEC_WRIT */ -+ -+/* On many systems, memory returned by malloc is writable and -+ executable, so just use it. */ -+ -+#include -+ -+void * -+ffi_closure_alloc (size_t size, void **code) -+{ -+ if (!code) -+ return NULL; -+ -+ return *code = malloc (size); -+} -+ -+void -+ffi_closure_free (void *ptr) -+{ -+ free (ptr); -+} -+ -+# endif /* ! FFI_MMAP_EXEC_WRIT */ -+#endif /* FFI_CLOSURES */ -diff -Nru orig/Modules/_ctypes/libffi_ios/debug.c modified/Modules/_ctypes/libffi_ios/debug.c ---- orig/Modules/_ctypes/libffi_ios/debug.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/debug.c 2015-12-20 22:33:34.000000000 +0800 -@@ -0,0 +1,64 @@ -+/* ----------------------------------------------------------------------- -+ debug.c - Copyright (c) 1996 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#include -+#include -+#include -+#include -+ -+/* General debugging routines */ -+ -+void ffi_stop_here(void) -+{ -+ /* This function is only useful for debugging purposes. -+ Place a breakpoint on ffi_stop_here to be notified of -+ significant events. */ -+} -+ -+/* This function should only be called via the FFI_ASSERT() macro */ -+ -+void ffi_assert(char *expr, char *file, int line) -+{ -+ fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); -+ ffi_stop_here(); -+ abort(); -+} -+ -+/* Perform a sanity check on an ffi_type structure */ -+ -+void ffi_type_test(ffi_type *a, char *file, int line) -+{ -+ FFI_ASSERT_AT(a != NULL, file, line); -+ -+ FFI_ASSERT_AT(a->type <= FFI_TYPE_LAST, file, line); -+ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->size > 0, file, line); -+ FFI_ASSERT_AT(a->type == FFI_TYPE_VOID || a->alignment > 0, file, line); -+ FFI_ASSERT_AT((a->type != FFI_TYPE_STRUCT && a->type != FFI_TYPE_COMPLEX) -+ || a->elements != NULL, file, line); -+ FFI_ASSERT_AT(a->type != FFI_TYPE_COMPLEX -+ || (a->elements != NULL -+ && a->elements[0] != NULL && a->elements[1] == NULL), -+ file, line); -+ -+} -diff -Nru orig/Modules/_ctypes/libffi_ios/dlmalloc.c modified/Modules/_ctypes/libffi_ios/dlmalloc.c ---- orig/Modules/_ctypes/libffi_ios/dlmalloc.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/dlmalloc.c 2015-12-20 18:49:03.000000000 +0800 -@@ -0,0 +1,5161 @@ -+/* -+ This is a version (aka dlmalloc) of malloc/free/realloc written by -+ Doug Lea and released to the public domain, as explained at -+ http://creativecommons.org/licenses/publicdomain. Send questions, -+ comments, complaints, performance data, etc to dl@cs.oswego.edu -+ -+* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) -+ -+ Note: There may be an updated version of this malloc obtainable at -+ ftp://gee.cs.oswego.edu/pub/misc/malloc.c -+ Check before installing! -+ -+* Quickstart -+ -+ This library is all in one file to simplify the most common usage: -+ ftp it, compile it (-O3), and link it into another program. All of -+ the compile-time options default to reasonable values for use on -+ most platforms. You might later want to step through various -+ compile-time and dynamic tuning options. -+ -+ For convenience, an include file for code using this malloc is at: -+ ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h -+ You don't really need this .h file unless you call functions not -+ defined in your system include files. The .h file contains only the -+ excerpts from this file needed for using this malloc on ANSI C/C++ -+ systems, so long as you haven't changed compile-time options about -+ naming and tuning parameters. If you do, then you can create your -+ own malloc.h that does include all settings by cutting at the point -+ indicated below. Note that you may already by default be using a C -+ library containing a malloc that is based on some version of this -+ malloc (for example in linux). You might still want to use the one -+ in this file to customize settings or to avoid overheads associated -+ with library versions. -+ -+* Vital statistics: -+ -+ Supported pointer/size_t representation: 4 or 8 bytes -+ size_t MUST be an unsigned type of the same width as -+ pointers. (If you are using an ancient system that declares -+ size_t as a signed type, or need it to be a different width -+ than pointers, you can use a previous release of this malloc -+ (e.g. 2.7.2) supporting these.) -+ -+ Alignment: 8 bytes (default) -+ This suffices for nearly all current machines and C compilers. -+ However, you can define MALLOC_ALIGNMENT to be wider than this -+ if necessary (up to 128bytes), at the expense of using more space. -+ -+ Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) -+ 8 or 16 bytes (if 8byte sizes) -+ Each malloced chunk has a hidden word of overhead holding size -+ and status information, and additional cross-check word -+ if FOOTERS is defined. -+ -+ Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) -+ 8-byte ptrs: 32 bytes (including overhead) -+ -+ Even a request for zero bytes (i.e., malloc(0)) returns a -+ pointer to something of the minimum allocatable size. -+ The maximum overhead wastage (i.e., number of extra bytes -+ allocated than were requested in malloc) is less than or equal -+ to the minimum size, except for requests >= mmap_threshold that -+ are serviced via mmap(), where the worst case wastage is about -+ 32 bytes plus the remainder from a system page (the minimal -+ mmap unit); typically 4096 or 8192 bytes. -+ -+ Security: static-safe; optionally more or less -+ The "security" of malloc refers to the ability of malicious -+ code to accentuate the effects of errors (for example, freeing -+ space that is not currently malloc'ed or overwriting past the -+ ends of chunks) in code that calls malloc. This malloc -+ guarantees not to modify any memory locations below the base of -+ heap, i.e., static variables, even in the presence of usage -+ errors. The routines additionally detect most improper frees -+ and reallocs. All this holds as long as the static bookkeeping -+ for malloc itself is not corrupted by some other means. This -+ is only one aspect of security -- these checks do not, and -+ cannot, detect all possible programming errors. -+ -+ If FOOTERS is defined nonzero, then each allocated chunk -+ carries an additional check word to verify that it was malloced -+ from its space. These check words are the same within each -+ execution of a program using malloc, but differ across -+ executions, so externally crafted fake chunks cannot be -+ freed. This improves security by rejecting frees/reallocs that -+ could corrupt heap memory, in addition to the checks preventing -+ writes to statics that are always on. This may further improve -+ security at the expense of time and space overhead. (Note that -+ FOOTERS may also be worth using with MSPACES.) -+ -+ By default detected errors cause the program to abort (calling -+ "abort()"). You can override this to instead proceed past -+ errors by defining PROCEED_ON_ERROR. In this case, a bad free -+ has no effect, and a malloc that encounters a bad address -+ caused by user overwrites will ignore the bad address by -+ dropping pointers and indices to all known memory. This may -+ be appropriate for programs that should continue if at all -+ possible in the face of programming errors, although they may -+ run out of memory because dropped memory is never reclaimed. -+ -+ If you don't like either of these options, you can define -+ CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything -+ else. And if if you are sure that your program using malloc has -+ no errors or vulnerabilities, you can define INSECURE to 1, -+ which might (or might not) provide a small performance improvement. -+ -+ Thread-safety: NOT thread-safe unless USE_LOCKS defined -+ When USE_LOCKS is defined, each public call to malloc, free, -+ etc is surrounded with either a pthread mutex or a win32 -+ spinlock (depending on WIN32). This is not especially fast, and -+ can be a major bottleneck. It is designed only to provide -+ minimal protection in concurrent environments, and to provide a -+ basis for extensions. If you are using malloc in a concurrent -+ program, consider instead using ptmalloc, which is derived from -+ a version of this malloc. (See http://www.malloc.de). -+ -+ System requirements: Any combination of MORECORE and/or MMAP/MUNMAP -+ This malloc can use unix sbrk or any emulation (invoked using -+ the CALL_MORECORE macro) and/or mmap/munmap or any emulation -+ (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system -+ memory. On most unix systems, it tends to work best if both -+ MORECORE and MMAP are enabled. On Win32, it uses emulations -+ based on VirtualAlloc. It also uses common C library functions -+ like memset. -+ -+ Compliance: I believe it is compliant with the Single Unix Specification -+ (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably -+ others as well. -+ -+* Overview of algorithms -+ -+ This is not the fastest, most space-conserving, most portable, or -+ most tunable malloc ever written. However it is among the fastest -+ while also being among the most space-conserving, portable and -+ tunable. Consistent balance across these factors results in a good -+ general-purpose allocator for malloc-intensive programs. -+ -+ In most ways, this malloc is a best-fit allocator. Generally, it -+ chooses the best-fitting existing chunk for a request, with ties -+ broken in approximately least-recently-used order. (This strategy -+ normally maintains low fragmentation.) However, for requests less -+ than 256bytes, it deviates from best-fit when there is not an -+ exactly fitting available chunk by preferring to use space adjacent -+ to that used for the previous small request, as well as by breaking -+ ties in approximately most-recently-used order. (These enhance -+ locality of series of small allocations.) And for very large requests -+ (>= 256Kb by default), it relies on system memory mapping -+ facilities, if supported. (This helps avoid carrying around and -+ possibly fragmenting memory used only for large chunks.) -+ -+ All operations (except malloc_stats and mallinfo) have execution -+ times that are bounded by a constant factor of the number of bits in -+ a size_t, not counting any clearing in calloc or copying in realloc, -+ or actions surrounding MORECORE and MMAP that have times -+ proportional to the number of non-contiguous regions returned by -+ system allocation routines, which is often just 1. -+ -+ The implementation is not very modular and seriously overuses -+ macros. Perhaps someday all C compilers will do as good a job -+ inlining modular code as can now be done by brute-force expansion, -+ but now, enough of them seem not to. -+ -+ Some compilers issue a lot of warnings about code that is -+ dead/unreachable only on some platforms, and also about intentional -+ uses of negation on unsigned types. All known cases of each can be -+ ignored. -+ -+ For a longer but out of date high-level description, see -+ http://gee.cs.oswego.edu/dl/html/malloc.html -+ -+* MSPACES -+ If MSPACES is defined, then in addition to malloc, free, etc., -+ this file also defines mspace_malloc, mspace_free, etc. These -+ are versions of malloc routines that take an "mspace" argument -+ obtained using create_mspace, to control all internal bookkeeping. -+ If ONLY_MSPACES is defined, only these versions are compiled. -+ So if you would like to use this allocator for only some allocations, -+ and your system malloc for others, you can compile with -+ ONLY_MSPACES and then do something like... -+ static mspace mymspace = create_mspace(0,0); // for example -+ #define mymalloc(bytes) mspace_malloc(mymspace, bytes) -+ -+ (Note: If you only need one instance of an mspace, you can instead -+ use "USE_DL_PREFIX" to relabel the global malloc.) -+ -+ You can similarly create thread-local allocators by storing -+ mspaces as thread-locals. For example: -+ static __thread mspace tlms = 0; -+ void* tlmalloc(size_t bytes) { -+ if (tlms == 0) tlms = create_mspace(0, 0); -+ return mspace_malloc(tlms, bytes); -+ } -+ void tlfree(void* mem) { mspace_free(tlms, mem); } -+ -+ Unless FOOTERS is defined, each mspace is completely independent. -+ You cannot allocate from one and free to another (although -+ conformance is only weakly checked, so usage errors are not always -+ caught). If FOOTERS is defined, then each chunk carries around a tag -+ indicating its originating mspace, and frees are directed to their -+ originating spaces. -+ -+ ------------------------- Compile-time options --------------------------- -+ -+Be careful in setting #define values for numerical constants of type -+size_t. On some systems, literal values are not automatically extended -+to size_t precision unless they are explicitly casted. -+ -+WIN32 default: defined if _WIN32 defined -+ Defining WIN32 sets up defaults for MS environment and compilers. -+ Otherwise defaults are for unix. -+ -+MALLOC_ALIGNMENT default: (size_t)8 -+ Controls the minimum alignment for malloc'ed chunks. It must be a -+ power of two and at least 8, even on machines for which smaller -+ alignments would suffice. It may be defined as larger than this -+ though. Note however that code and data structures are optimized for -+ the case of 8-byte alignment. -+ -+MSPACES default: 0 (false) -+ If true, compile in support for independent allocation spaces. -+ This is only supported if HAVE_MMAP is true. -+ -+ONLY_MSPACES default: 0 (false) -+ If true, only compile in mspace versions, not regular versions. -+ -+USE_LOCKS default: 0 (false) -+ Causes each call to each public routine to be surrounded with -+ pthread or WIN32 mutex lock/unlock. (If set true, this can be -+ overridden on a per-mspace basis for mspace versions.) -+ -+FOOTERS default: 0 -+ If true, provide extra checking and dispatching by placing -+ information in the footers of allocated chunks. This adds -+ space and time overhead. -+ -+INSECURE default: 0 -+ If true, omit checks for usage errors and heap space overwrites. -+ -+USE_DL_PREFIX default: NOT defined -+ Causes compiler to prefix all public routines with the string 'dl'. -+ This can be useful when you only want to use this malloc in one part -+ of a program, using your regular system malloc elsewhere. -+ -+ABORT default: defined as abort() -+ Defines how to abort on failed checks. On most systems, a failed -+ check cannot die with an "assert" or even print an informative -+ message, because the underlying print routines in turn call malloc, -+ which will fail again. Generally, the best policy is to simply call -+ abort(). It's not very useful to do more than this because many -+ errors due to overwriting will show up as address faults (null, odd -+ addresses etc) rather than malloc-triggered checks, so will also -+ abort. Also, most compilers know that abort() does not return, so -+ can better optimize code conditionally calling it. -+ -+PROCEED_ON_ERROR default: defined as 0 (false) -+ Controls whether detected bad addresses cause them to bypassed -+ rather than aborting. If set, detected bad arguments to free and -+ realloc are ignored. And all bookkeeping information is zeroed out -+ upon a detected overwrite of freed heap space, thus losing the -+ ability to ever return it from malloc again, but enabling the -+ application to proceed. If PROCEED_ON_ERROR is defined, the -+ static variable malloc_corruption_error_count is compiled in -+ and can be examined to see if errors have occurred. This option -+ generates slower code than the default abort policy. -+ -+DEBUG default: NOT defined -+ The DEBUG setting is mainly intended for people trying to modify -+ this code or diagnose problems when porting to new platforms. -+ However, it may also be able to better isolate user errors than just -+ using runtime checks. The assertions in the check routines spell -+ out in more detail the assumptions and invariants underlying the -+ algorithms. The checking is fairly extensive, and will slow down -+ execution noticeably. Calling malloc_stats or mallinfo with DEBUG -+ set will attempt to check every non-mmapped allocated and free chunk -+ in the course of computing the summaries. -+ -+ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) -+ Debugging assertion failures can be nearly impossible if your -+ version of the assert macro causes malloc to be called, which will -+ lead to a cascade of further failures, blowing the runtime stack. -+ ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), -+ which will usually make debugging easier. -+ -+MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 -+ The action to take before "return 0" when malloc fails to be able to -+ return memory because there is none available. -+ -+HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES -+ True if this system supports sbrk or an emulation of it. -+ -+MORECORE default: sbrk -+ The name of the sbrk-style system routine to call to obtain more -+ memory. See below for guidance on writing custom MORECORE -+ functions. The type of the argument to sbrk/MORECORE varies across -+ systems. It cannot be size_t, because it supports negative -+ arguments, so it is normally the signed type of the same width as -+ size_t (sometimes declared as "intptr_t"). It doesn't much matter -+ though. Internally, we only call it with arguments less than half -+ the max value of a size_t, which should work across all reasonable -+ possibilities, although sometimes generating compiler warnings. See -+ near the end of this file for guidelines for creating a custom -+ version of MORECORE. -+ -+MORECORE_CONTIGUOUS default: 1 (true) -+ If true, take advantage of fact that consecutive calls to MORECORE -+ with positive arguments always return contiguous increasing -+ addresses. This is true of unix sbrk. It does not hurt too much to -+ set it true anyway, since malloc copes with non-contiguities. -+ Setting it false when definitely non-contiguous saves time -+ and possibly wasted space it would take to discover this though. -+ -+MORECORE_CANNOT_TRIM default: NOT defined -+ True if MORECORE cannot release space back to the system when given -+ negative arguments. This is generally necessary only if you are -+ using a hand-crafted MORECORE function that cannot handle negative -+ arguments. -+ -+HAVE_MMAP default: 1 (true) -+ True if this system supports mmap or an emulation of it. If so, and -+ HAVE_MORECORE is not true, MMAP is used for all system -+ allocation. If set and HAVE_MORECORE is true as well, MMAP is -+ primarily used to directly allocate very large blocks. It is also -+ used as a backup strategy in cases where MORECORE fails to provide -+ space from system. Note: A single call to MUNMAP is assumed to be -+ able to unmap memory that may have be allocated using multiple calls -+ to MMAP, so long as they are adjacent. -+ -+HAVE_MREMAP default: 1 on linux, else 0 -+ If true realloc() uses mremap() to re-allocate large blocks and -+ extend or shrink allocation spaces. -+ -+MMAP_CLEARS default: 1 on unix -+ True if mmap clears memory so calloc doesn't need to. This is true -+ for standard unix mmap using /dev/zero. -+ -+USE_BUILTIN_FFS default: 0 (i.e., not used) -+ Causes malloc to use the builtin ffs() function to compute indices. -+ Some compilers may recognize and intrinsify ffs to be faster than the -+ supplied C version. Also, the case of x86 using gcc is special-cased -+ to an asm instruction, so is already as fast as it can be, and so -+ this setting has no effect. (On most x86s, the asm version is only -+ slightly faster than the C version.) -+ -+malloc_getpagesize default: derive from system includes, or 4096. -+ The system page size. To the extent possible, this malloc manages -+ memory from the system in page-size units. This may be (and -+ usually is) a function rather than a constant. This is ignored -+ if WIN32, where page size is determined using getSystemInfo during -+ initialization. -+ -+USE_DEV_RANDOM default: 0 (i.e., not used) -+ Causes malloc to use /dev/random to initialize secure magic seed for -+ stamping footers. Otherwise, the current time is used. -+ -+NO_MALLINFO default: 0 -+ If defined, don't compile "mallinfo". This can be a simple way -+ of dealing with mismatches between system declarations and -+ those in this file. -+ -+MALLINFO_FIELD_TYPE default: size_t -+ The type of the fields in the mallinfo struct. This was originally -+ defined as "int" in SVID etc, but is more usefully defined as -+ size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set -+ -+REALLOC_ZERO_BYTES_FREES default: not defined -+ This should be set if a call to realloc with zero bytes should -+ be the same as a call to free. Some people think it should. Otherwise, -+ since this malloc returns a unique pointer for malloc(0), so does -+ realloc(p, 0). -+ -+LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -+LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -+LACKS_STDLIB_H default: NOT defined unless on WIN32 -+ Define these if your system does not have these header files. -+ You might need to manually insert some of the declarations they provide. -+ -+DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, -+ system_info.dwAllocationGranularity in WIN32, -+ otherwise 64K. -+ Also settable using mallopt(M_GRANULARITY, x) -+ The unit for allocating and deallocating memory from the system. On -+ most systems with contiguous MORECORE, there is no reason to -+ make this more than a page. However, systems with MMAP tend to -+ either require or encourage larger granularities. You can increase -+ this value to prevent system allocation functions to be called so -+ often, especially if they are slow. The value must be at least one -+ page and must be a power of two. Setting to 0 causes initialization -+ to either page size or win32 region size. (Note: In previous -+ versions of malloc, the equivalent of this option was called -+ "TOP_PAD") -+ -+DEFAULT_TRIM_THRESHOLD default: 2MB -+ Also settable using mallopt(M_TRIM_THRESHOLD, x) -+ The maximum amount of unused top-most memory to keep before -+ releasing via malloc_trim in free(). Automatic trimming is mainly -+ useful in long-lived programs using contiguous MORECORE. Because -+ trimming via sbrk can be slow on some systems, and can sometimes be -+ wasteful (in cases where programs immediately afterward allocate -+ more large chunks) the value should be high enough so that your -+ overall system performance would improve by releasing this much -+ memory. As a rough guide, you might set to a value close to the -+ average size of a process (program) running on your system. -+ Releasing this much memory would allow such a process to run in -+ memory. Generally, it is worth tuning trim thresholds when a -+ program undergoes phases where several large chunks are allocated -+ and released in ways that can reuse each other's storage, perhaps -+ mixed with phases where there are no such chunks at all. The trim -+ value must be greater than page size to have any useful effect. To -+ disable trimming completely, you can set to MAX_SIZE_T. Note that the trick -+ some people use of mallocing a huge space and then freeing it at -+ program startup, in an attempt to reserve system memory, doesn't -+ have the intended effect under automatic trimming, since that memory -+ will immediately be returned to the system. -+ -+DEFAULT_MMAP_THRESHOLD default: 256K -+ Also settable using mallopt(M_MMAP_THRESHOLD, x) -+ The request size threshold for using MMAP to directly service a -+ request. Requests of at least this size that cannot be allocated -+ using already-existing space will be serviced via mmap. (If enough -+ normal freed space already exists it is used instead.) Using mmap -+ segregates relatively large chunks of memory so that they can be -+ individually obtained and released from the host system. A request -+ serviced through mmap is never reused by any other request (at least -+ not directly; the system may just so happen to remap successive -+ requests to the same locations). Segregating space in this way has -+ the benefits that: Mmapped space can always be individually released -+ back to the system, which helps keep the system level memory demands -+ of a long-lived program low. Also, mapped memory doesn't become -+ `locked' between other chunks, as can happen with normally allocated -+ chunks, which means that even trimming via malloc_trim would not -+ release them. However, it has the disadvantage that the space -+ cannot be reclaimed, consolidated, and then used to service later -+ requests, as happens with normal chunks. The advantages of mmap -+ nearly always outweigh disadvantages for "large" chunks, but the -+ value of "large" may vary across systems. The default is an -+ empirically derived value that works well in most systems. You can -+ disable mmap by setting to MAX_SIZE_T. -+ -+*/ -+ -+#ifndef WIN32 -+#ifdef _WIN32 -+#define WIN32 1 -+#endif /* _WIN32 */ -+#endif /* WIN32 */ -+#ifdef WIN32 -+#define WIN32_LEAN_AND_MEAN -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_UNISTD_H -+#define LACKS_SYS_PARAM_H -+#define LACKS_SYS_MMAN_H -+#define LACKS_STRING_H -+#define LACKS_STRINGS_H -+#define LACKS_SYS_TYPES_H -+#define LACKS_ERRNO_H -+#define MALLOC_FAILURE_ACTION -+#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ -+#endif /* WIN32 */ -+ -+#ifdef __OS2__ -+#define INCL_DOS -+#include -+#define HAVE_MMAP 1 -+#define HAVE_MORECORE 0 -+#define LACKS_SYS_MMAN_H -+#endif /* __OS2__ */ -+ -+#if defined(DARWIN) || defined(_DARWIN) -+/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -+#ifndef HAVE_MORECORE -+#define HAVE_MORECORE 0 -+#define HAVE_MMAP 1 -+#endif /* HAVE_MORECORE */ -+#endif /* DARWIN */ -+ -+#ifndef LACKS_SYS_TYPES_H -+#include /* For size_t */ -+#endif /* LACKS_SYS_TYPES_H */ -+ -+/* The maximum possible size_t value has all bits set */ -+#define MAX_SIZE_T (~(size_t)0) -+ -+#ifndef ONLY_MSPACES -+#define ONLY_MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#ifndef MSPACES -+#if ONLY_MSPACES -+#define MSPACES 1 -+#else /* ONLY_MSPACES */ -+#define MSPACES 0 -+#endif /* ONLY_MSPACES */ -+#endif /* MSPACES */ -+#ifndef MALLOC_ALIGNMENT -+#define MALLOC_ALIGNMENT ((size_t)8U) -+#endif /* MALLOC_ALIGNMENT */ -+#ifndef FOOTERS -+#define FOOTERS 0 -+#endif /* FOOTERS */ -+#ifndef ABORT -+#define ABORT abort() -+#endif /* ABORT */ -+#ifndef ABORT_ON_ASSERT_FAILURE -+#define ABORT_ON_ASSERT_FAILURE 1 -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#ifndef PROCEED_ON_ERROR -+#define PROCEED_ON_ERROR 0 -+#endif /* PROCEED_ON_ERROR */ -+#ifndef USE_LOCKS -+#define USE_LOCKS 0 -+#endif /* USE_LOCKS */ -+#ifndef INSECURE -+#define INSECURE 0 -+#endif /* INSECURE */ -+#ifndef HAVE_MMAP -+#define HAVE_MMAP 1 -+#endif /* HAVE_MMAP */ -+#ifndef MMAP_CLEARS -+#define MMAP_CLEARS 1 -+#endif /* MMAP_CLEARS */ -+#ifndef HAVE_MREMAP -+#ifdef linux -+#define HAVE_MREMAP 1 -+#else /* linux */ -+#define HAVE_MREMAP 0 -+#endif /* linux */ -+#endif /* HAVE_MREMAP */ -+#ifndef MALLOC_FAILURE_ACTION -+#define MALLOC_FAILURE_ACTION errno = ENOMEM; -+#endif /* MALLOC_FAILURE_ACTION */ -+#ifndef HAVE_MORECORE -+#if ONLY_MSPACES -+#define HAVE_MORECORE 0 -+#else /* ONLY_MSPACES */ -+#define HAVE_MORECORE 1 -+#endif /* ONLY_MSPACES */ -+#endif /* HAVE_MORECORE */ -+#if !HAVE_MORECORE -+#define MORECORE_CONTIGUOUS 0 -+#else /* !HAVE_MORECORE */ -+#ifndef MORECORE -+#define MORECORE sbrk -+#endif /* MORECORE */ -+#ifndef MORECORE_CONTIGUOUS -+#define MORECORE_CONTIGUOUS 1 -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* HAVE_MORECORE */ -+#ifndef DEFAULT_GRANULARITY -+#if MORECORE_CONTIGUOUS -+#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -+#else /* MORECORE_CONTIGUOUS */ -+#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -+#endif /* MORECORE_CONTIGUOUS */ -+#endif /* DEFAULT_GRANULARITY */ -+#ifndef DEFAULT_TRIM_THRESHOLD -+#ifndef MORECORE_CANNOT_TRIM -+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -+#else /* MORECORE_CANNOT_TRIM */ -+#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -+#endif /* MORECORE_CANNOT_TRIM */ -+#endif /* DEFAULT_TRIM_THRESHOLD */ -+#ifndef DEFAULT_MMAP_THRESHOLD -+#if HAVE_MMAP -+#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -+#else /* HAVE_MMAP */ -+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -+#endif /* HAVE_MMAP */ -+#endif /* DEFAULT_MMAP_THRESHOLD */ -+#ifndef USE_BUILTIN_FFS -+#define USE_BUILTIN_FFS 0 -+#endif /* USE_BUILTIN_FFS */ -+#ifndef USE_DEV_RANDOM -+#define USE_DEV_RANDOM 0 -+#endif /* USE_DEV_RANDOM */ -+#ifndef NO_MALLINFO -+#define NO_MALLINFO 0 -+#endif /* NO_MALLINFO */ -+#ifndef MALLINFO_FIELD_TYPE -+#define MALLINFO_FIELD_TYPE size_t -+#endif /* MALLINFO_FIELD_TYPE */ -+ -+/* -+ mallopt tuning options. SVID/XPG defines four standard parameter -+ numbers for mallopt, normally defined in malloc.h. None of these -+ are used in this malloc, so setting them has no effect. But this -+ malloc does support the following options. -+*/ -+ -+#define M_TRIM_THRESHOLD (-1) -+#define M_GRANULARITY (-2) -+#define M_MMAP_THRESHOLD (-3) -+ -+/* ------------------------ Mallinfo declarations ------------------------ */ -+ -+#if !NO_MALLINFO -+/* -+ This version of malloc supports the standard SVID/XPG mallinfo -+ routine that returns a struct containing usage properties and -+ statistics. It should work on any system that has a -+ /usr/include/malloc.h defining struct mallinfo. The main -+ declaration needed is the mallinfo struct that is returned (by-copy) -+ by mallinfo(). The malloinfo struct contains a bunch of fields that -+ are not even meaningful in this version of malloc. These fields are -+ are instead filled by mallinfo() with other numbers that might be of -+ interest. -+ -+ HAVE_USR_INCLUDE_MALLOC_H should be set if you have a -+ /usr/include/malloc.h file that includes a declaration of struct -+ mallinfo. If so, it is included; else a compliant version is -+ declared below. These must be precisely the same for mallinfo() to -+ work. The original SVID version of this struct, defined on most -+ systems with mallinfo, declares all fields as ints. But some others -+ define as unsigned long. If your system defines the fields using a -+ type of different width than listed here, you MUST #include your -+ system version and #define HAVE_USR_INCLUDE_MALLOC_H. -+*/ -+ -+/* #define HAVE_USR_INCLUDE_MALLOC_H */ -+ -+#ifdef HAVE_USR_INCLUDE_MALLOC_H -+#include "/usr/include/malloc.h" -+#else /* HAVE_USR_INCLUDE_MALLOC_H */ -+ -+/* HP-UX's stdlib.h redefines mallinfo unless _STRUCT_MALLINFO is defined */ -+#define _STRUCT_MALLINFO -+ -+struct mallinfo { -+ MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ -+ MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ -+ MALLINFO_FIELD_TYPE smblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ -+ MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ -+ MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ -+ MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ -+ MALLINFO_FIELD_TYPE fordblks; /* total free space */ -+ MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -+}; -+ -+#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -+#endif /* NO_MALLINFO */ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+#if !ONLY_MSPACES -+ -+/* ------------------- Declarations of public routines ------------------- */ -+ -+#ifndef USE_DL_PREFIX -+#define dlcalloc calloc -+#define dlfree free -+#define dlmalloc malloc -+#define dlmemalign memalign -+#define dlrealloc realloc -+#define dlvalloc valloc -+#define dlpvalloc pvalloc -+#define dlmallinfo mallinfo -+#define dlmallopt mallopt -+#define dlmalloc_trim malloc_trim -+#define dlmalloc_stats malloc_stats -+#define dlmalloc_usable_size malloc_usable_size -+#define dlmalloc_footprint malloc_footprint -+#define dlmalloc_max_footprint malloc_max_footprint -+#define dlindependent_calloc independent_calloc -+#define dlindependent_comalloc independent_comalloc -+#endif /* USE_DL_PREFIX */ -+ -+ -+/* -+ malloc(size_t n) -+ Returns a pointer to a newly allocated chunk of at least n bytes, or -+ null if no space is available, in which case errno is set to ENOMEM -+ on ANSI C systems. -+ -+ If n is zero, malloc returns a minimum-sized chunk. (The minimum -+ size is 16 bytes on most 32bit systems, and 32 bytes on 64bit -+ systems.) Note that size_t is an unsigned type, so calls with -+ arguments that would be negative if signed are interpreted as -+ requests for huge amounts of space, which will often fail. The -+ maximum supported value of n differs across systems, but is in all -+ cases less than the maximum representable value of a size_t. -+*/ -+void* dlmalloc(size_t); -+ -+/* -+ free(void* p) -+ Releases the chunk of memory pointed to by p, that had been previously -+ allocated using malloc or a related routine such as realloc. -+ It has no effect if p is null. If p was not malloced or already -+ freed, free(p) will by default cause the current program to abort. -+*/ -+void dlfree(void*); -+ -+/* -+ calloc(size_t n_elements, size_t element_size); -+ Returns a pointer to n_elements * element_size bytes, with all locations -+ set to zero. -+*/ -+void* dlcalloc(size_t, size_t); -+ -+/* -+ realloc(void* p, size_t n) -+ Returns a pointer to a chunk of size n that contains the same data -+ as does chunk p up to the minimum of (n, p's size) bytes, or null -+ if no space is available. -+ -+ The returned pointer may or may not be the same as p. The algorithm -+ prefers extending p in most cases when possible, otherwise it -+ employs the equivalent of a malloc-copy-free sequence. -+ -+ If p is null, realloc is equivalent to malloc. -+ -+ If space is not available, realloc returns null, errno is set (if on -+ ANSI) and p is NOT freed. -+ -+ if n is for fewer bytes than already held by p, the newly unused -+ space is lopped off and freed if possible. realloc with a size -+ argument of zero (re)allocates a minimum-sized chunk. -+ -+ The old unix realloc convention of allowing the last-free'd chunk -+ to be used as an argument to realloc is not supported. -+*/ -+ -+void* dlrealloc(void*, size_t); -+ -+/* -+ memalign(size_t alignment, size_t n); -+ Returns a pointer to a newly allocated chunk of n bytes, aligned -+ in accord with the alignment argument. -+ -+ The alignment argument should be a power of two. If the argument is -+ not a power of two, the nearest greater power is used. -+ 8-byte alignment is guaranteed by normal malloc calls, so don't -+ bother calling memalign with an argument of 8 or less. -+ -+ Overreliance on memalign is a sure way to fragment space. -+*/ -+void* dlmemalign(size_t, size_t); -+ -+/* -+ valloc(size_t n); -+ Equivalent to memalign(pagesize, n), where pagesize is the page -+ size of the system. If the pagesize is unknown, 4096 is used. -+*/ -+void* dlvalloc(size_t); -+ -+/* -+ mallopt(int parameter_number, int parameter_value) -+ Sets tunable parameters The format is to provide a -+ (parameter-number, parameter-value) pair. mallopt then sets the -+ corresponding parameter to the argument value if it can (i.e., so -+ long as the value is meaningful), and returns 1 if successful else -+ 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, -+ normally defined in malloc.h. None of these are use in this malloc, -+ so setting them has no effect. But this malloc also supports other -+ options in mallopt. See below for details. Briefly, supported -+ parameters are as follows (listed defaults are for "typical" -+ configurations). -+ -+ Symbol param # default allowed param values -+ M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) -+ M_GRANULARITY -2 page size any power of 2 >= page size -+ M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -+*/ -+int dlmallopt(int, int); -+ -+/* -+ malloc_footprint(); -+ Returns the number of bytes obtained from the system. The total -+ number of bytes allocated by malloc, realloc etc., is less than this -+ value. Unlike mallinfo, this function returns only a precomputed -+ result, so can be called frequently to monitor memory consumption. -+ Even if locks are otherwise defined, this function does not use them, -+ so results might not be up to date. -+*/ -+size_t dlmalloc_footprint(void); -+ -+/* -+ malloc_max_footprint(); -+ Returns the maximum number of bytes obtained from the system. This -+ value will be greater than current footprint if deallocated space -+ has been reclaimed by the system. The peak number of bytes allocated -+ by malloc, realloc etc., is less than this value. Unlike mallinfo, -+ this function returns only a precomputed result, so can be called -+ frequently to monitor memory consumption. Even if locks are -+ otherwise defined, this function does not use them, so results might -+ not be up to date. -+*/ -+size_t dlmalloc_max_footprint(void); -+ -+#if !NO_MALLINFO -+/* -+ mallinfo() -+ Returns (by copy) a struct containing various summary statistics: -+ -+ arena: current total non-mmapped bytes allocated from system -+ ordblks: the number of free chunks -+ smblks: always zero. -+ hblks: current number of mmapped regions -+ hblkhd: total bytes held in mmapped regions -+ usmblks: the maximum total allocated space. This will be greater -+ than current total if trimming has occurred. -+ fsmblks: always zero -+ uordblks: current total allocated space (normal or mmapped) -+ fordblks: total free space -+ keepcost: the maximum number of bytes that could ideally be released -+ back to system via malloc_trim. ("ideally" means that -+ it ignores page restrictions etc.) -+ -+ Because these fields are ints, but internal bookkeeping may -+ be kept as longs, the reported values may wrap around zero and -+ thus be inaccurate. -+*/ -+struct mallinfo dlmallinfo(void); -+#endif /* NO_MALLINFO */ -+ -+/* -+ independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); -+ -+ independent_calloc is similar to calloc, but instead of returning a -+ single cleared space, it returns an array of pointers to n_elements -+ independent elements that can hold contents of size elem_size, each -+ of which starts out cleared, and can be independently freed, -+ realloc'ed etc. The elements are guaranteed to be adjacently -+ allocated (this is not guaranteed to occur with multiple callocs or -+ mallocs), which may also improve cache locality in some -+ applications. -+ -+ The "chunks" argument is optional (i.e., may be null, which is -+ probably the most typical usage). If it is null, the returned array -+ is itself dynamically allocated and should also be freed when it is -+ no longer needed. Otherwise, the chunks array must be of at least -+ n_elements in length. It is filled in with the pointers to the -+ chunks. -+ -+ In either case, independent_calloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and "chunks" -+ is null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). -+ -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use regular calloc and assign pointers into this -+ space to represent elements. (In this case though, you cannot -+ independently free elements.) -+ -+ independent_calloc simplifies and speeds up implementations of many -+ kinds of pools. It may also be useful when constructing large data -+ structures that initially have a fixed number of fixed-sized nodes, -+ but the number is not known at compile time, and some of the nodes -+ may later need to be freed. For example: -+ -+ struct Node { int item; struct Node* next; }; -+ -+ struct Node* build_list() { -+ struct Node** pool; -+ int n = read_number_of_nodes_needed(); -+ if (n <= 0) return 0; -+ pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); -+ if (pool == 0) die(); -+ // organize into a linked list... -+ struct Node* first = pool[0]; -+ for (i = 0; i < n-1; ++i) -+ pool[i]->next = pool[i+1]; -+ free(pool); // Can now free the array (or not, if it is needed later) -+ return first; -+ } -+*/ -+void** dlindependent_calloc(size_t, size_t, void**); -+ -+/* -+ independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); -+ -+ independent_comalloc allocates, all at once, a set of n_elements -+ chunks with sizes indicated in the "sizes" array. It returns -+ an array of pointers to these elements, each of which can be -+ independently freed, realloc'ed etc. The elements are guaranteed to -+ be adjacently allocated (this is not guaranteed to occur with -+ multiple callocs or mallocs), which may also improve cache locality -+ in some applications. -+ -+ The "chunks" argument is optional (i.e., may be null). If it is null -+ the returned array is itself dynamically allocated and should also -+ be freed when it is no longer needed. Otherwise, the chunks array -+ must be of at least n_elements in length. It is filled in with the -+ pointers to the chunks. -+ -+ In either case, independent_comalloc returns this pointer array, or -+ null if the allocation failed. If n_elements is zero and chunks is -+ null, it returns a chunk representing an array with zero elements -+ (which should be freed if not wanted). -+ -+ Each element must be individually freed when it is no longer -+ needed. If you'd like to instead be able to free all at once, you -+ should instead use a single regular malloc, and assign pointers at -+ particular offsets in the aggregate space. (In this case though, you -+ cannot independently free elements.) -+ -+ independent_comallac differs from independent_calloc in that each -+ element may have a different size, and also that it does not -+ automatically clear elements. -+ -+ independent_comalloc can be used to speed up allocation in cases -+ where several structs or objects must always be allocated at the -+ same time. For example: -+ -+ struct Head { ... } -+ struct Foot { ... } -+ -+ void send_message(char* msg) { -+ int msglen = strlen(msg); -+ size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; -+ void* chunks[3]; -+ if (independent_comalloc(3, sizes, chunks) == 0) -+ die(); -+ struct Head* head = (struct Head*)(chunks[0]); -+ char* body = (char*)(chunks[1]); -+ struct Foot* foot = (struct Foot*)(chunks[2]); -+ // ... -+ } -+ -+ In general though, independent_comalloc is worth using only for -+ larger values of n_elements. For small values, you probably won't -+ detect enough difference from series of malloc calls to bother. -+ -+ Overuse of independent_comalloc can increase overall memory usage, -+ since it cannot reuse existing noncontiguous small chunks that -+ might be available for some of the elements. -+*/ -+void** dlindependent_comalloc(size_t, size_t*, void**); -+ -+ -+/* -+ pvalloc(size_t n); -+ Equivalent to valloc(minimum-page-that-holds(n)), that is, -+ round up n to nearest pagesize. -+ */ -+void* dlpvalloc(size_t); -+ -+/* -+ malloc_trim(size_t pad); -+ -+ If possible, gives memory back to the system (via negative arguments -+ to sbrk) if there is unused memory at the `high' end of the malloc -+ pool or in unused MMAP segments. You can call this after freeing -+ large blocks of memory to potentially reduce the system-level memory -+ requirements of a program. However, it cannot guarantee to reduce -+ memory. Under some allocation patterns, some large free blocks of -+ memory will be locked between two used chunks, so they cannot be -+ given back to the system. -+ -+ The `pad' argument to malloc_trim represents the amount of free -+ trailing space to leave untrimmed. If this argument is zero, only -+ the minimum amount of memory to maintain internal data structures -+ will be left. Non-zero arguments can be supplied to maintain enough -+ trailing space to service future expected allocations without having -+ to re-obtain memory from the system. -+ -+ Malloc_trim returns 1 if it actually released any memory, else 0. -+*/ -+int dlmalloc_trim(size_t); -+ -+/* -+ malloc_usable_size(void* p); -+ -+ Returns the number of bytes you can actually use in -+ an allocated chunk, which may be more than you requested (although -+ often not) due to alignment and minimum size constraints. -+ You can use this many bytes without worrying about -+ overwriting other allocated objects. This is not a particularly great -+ programming practice. malloc_usable_size can be more useful in -+ debugging and assertions, for example: -+ -+ p = malloc(n); -+ assert(malloc_usable_size(p) >= 256); -+*/ -+size_t dlmalloc_usable_size(void*); -+ -+/* -+ malloc_stats(); -+ Prints on stderr the amount of space obtained from the system (both -+ via sbrk and mmap), the maximum amount (which may be more than -+ current if malloc_trim and/or munmap got called), and the current -+ number of bytes allocated via malloc (or realloc, etc) but not yet -+ freed. Note that this is the number of bytes allocated, not the -+ number requested. It will be larger than the number requested -+ because of alignment and bookkeeping overhead. Because it includes -+ alignment wastage as being in use, this figure may be greater than -+ zero even when no user-level chunks are allocated. -+ -+ The reported current and maximum system memory can be inaccurate if -+ a program makes other calls to system memory allocation functions -+ (normally sbrk) outside of malloc. -+ -+ malloc_stats prints only the most commonly interesting statistics. -+ More information can be obtained by calling mallinfo. -+*/ -+void dlmalloc_stats(void); -+ -+#endif /* ONLY_MSPACES */ -+ -+#if MSPACES -+ -+/* -+ mspace is an opaque type representing an independent -+ region of space that supports mspace_malloc, etc. -+*/ -+typedef void* mspace; -+ -+/* -+ create_mspace creates and returns a new independent space with the -+ given initial capacity, or, if 0, the default granularity size. It -+ returns null if there is no system memory available to create the -+ space. If argument locked is non-zero, the space uses a separate -+ lock to control access. The capacity of the space will grow -+ dynamically as needed to service mspace_malloc requests. You can -+ control the sizes of incremental increases of this space by -+ compiling with a different DEFAULT_GRANULARITY or dynamically -+ setting with mallopt(M_GRANULARITY, value). -+*/ -+mspace create_mspace(size_t capacity, int locked); -+ -+/* -+ destroy_mspace destroys the given space, and attempts to return all -+ of its memory back to the system, returning the total number of -+ bytes freed. After destruction, the results of access to all memory -+ used by the space become undefined. -+*/ -+size_t destroy_mspace(mspace msp); -+ -+/* -+ create_mspace_with_base uses the memory supplied as the initial base -+ of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this -+ space is used for bookkeeping, so the capacity must be at least this -+ large. (Otherwise 0 is returned.) When this initial space is -+ exhausted, additional memory will be obtained from the system. -+ Destroying this space will deallocate all additionally allocated -+ space (if possible) but not the initial base. -+*/ -+mspace create_mspace_with_base(void* base, size_t capacity, int locked); -+ -+/* -+ mspace_malloc behaves as malloc, but operates within -+ the given space. -+*/ -+void* mspace_malloc(mspace msp, size_t bytes); -+ -+/* -+ mspace_free behaves as free, but operates within -+ the given space. -+ -+ If compiled with FOOTERS==1, mspace_free is not actually needed. -+ free may be called instead of mspace_free because freed chunks from -+ any space are handled by their originating spaces. -+*/ -+void mspace_free(mspace msp, void* mem); -+ -+/* -+ mspace_realloc behaves as realloc, but operates within -+ the given space. -+ -+ If compiled with FOOTERS==1, mspace_realloc is not actually -+ needed. realloc may be called instead of mspace_realloc because -+ realloced chunks from any space are handled by their originating -+ spaces. -+*/ -+void* mspace_realloc(mspace msp, void* mem, size_t newsize); -+ -+/* -+ mspace_calloc behaves as calloc, but operates within -+ the given space. -+*/ -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); -+ -+/* -+ mspace_memalign behaves as memalign, but operates within -+ the given space. -+*/ -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); -+ -+/* -+ mspace_independent_calloc behaves as independent_calloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]); -+ -+/* -+ mspace_independent_comalloc behaves as independent_comalloc, but -+ operates within the given space. -+*/ -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]); -+ -+/* -+ mspace_footprint() returns the number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_footprint(mspace msp); -+ -+/* -+ mspace_max_footprint() returns the peak number of bytes obtained from the -+ system for this space. -+*/ -+size_t mspace_max_footprint(mspace msp); -+ -+ -+#if !NO_MALLINFO -+/* -+ mspace_mallinfo behaves as mallinfo, but reports properties of -+ the given space. -+*/ -+struct mallinfo mspace_mallinfo(mspace msp); -+#endif /* NO_MALLINFO */ -+ -+/* -+ mspace_malloc_stats behaves as malloc_stats, but reports -+ properties of the given space. -+*/ -+void mspace_malloc_stats(mspace msp); -+ -+/* -+ mspace_trim behaves as malloc_trim, but -+ operates within the given space. -+*/ -+int mspace_trim(mspace msp, size_t pad); -+ -+/* -+ An alias for mallopt. -+*/ -+int mspace_mallopt(int, int); -+ -+#endif /* MSPACES */ -+ -+#ifdef __cplusplus -+}; /* end of extern "C" */ -+#endif /* __cplusplus */ -+ -+/* -+ ======================================================================== -+ To make a fully customizable malloc.h header file, cut everything -+ above this line, put into file malloc.h, edit to suit, and #include it -+ on the next line, as well as in programs that use this malloc. -+ ======================================================================== -+*/ -+ -+/* #include "malloc.h" */ -+ -+/*------------------------------ internal #includes ---------------------- */ -+ -+#ifdef _MSC_VER -+#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -+#endif /* _MSC_VER */ -+ -+#include /* for printing in malloc_stats */ -+ -+#ifndef LACKS_ERRNO_H -+#include /* for MALLOC_FAILURE_ACTION */ -+#endif /* LACKS_ERRNO_H */ -+#if FOOTERS -+#include /* for magic initialization */ -+#endif /* FOOTERS */ -+#ifndef LACKS_STDLIB_H -+#include /* for abort() */ -+#endif /* LACKS_STDLIB_H */ -+#ifdef DEBUG -+#if ABORT_ON_ASSERT_FAILURE -+#define assert(x) if(!(x)) ABORT -+#else /* ABORT_ON_ASSERT_FAILURE */ -+#include -+#endif /* ABORT_ON_ASSERT_FAILURE */ -+#else /* DEBUG */ -+#define assert(x) -+#endif /* DEBUG */ -+#ifndef LACKS_STRING_H -+#include /* for memset etc */ -+#endif /* LACKS_STRING_H */ -+#if USE_BUILTIN_FFS -+#ifndef LACKS_STRINGS_H -+#include /* for ffs */ -+#endif /* LACKS_STRINGS_H */ -+#endif /* USE_BUILTIN_FFS */ -+#if HAVE_MMAP -+#ifndef LACKS_SYS_MMAN_H -+#include /* for mmap */ -+#endif /* LACKS_SYS_MMAN_H */ -+#ifndef LACKS_FCNTL_H -+#include -+#endif /* LACKS_FCNTL_H */ -+#endif /* HAVE_MMAP */ -+#if HAVE_MORECORE -+#ifndef LACKS_UNISTD_H -+#include /* for sbrk */ -+#else /* LACKS_UNISTD_H */ -+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -+extern void* sbrk(ptrdiff_t); -+#endif /* FreeBSD etc */ -+#endif /* LACKS_UNISTD_H */ -+#endif /* HAVE_MMAP */ -+ -+#ifndef WIN32 -+#ifndef malloc_getpagesize -+# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -+# ifndef _SC_PAGE_SIZE -+# define _SC_PAGE_SIZE _SC_PAGESIZE -+# endif -+# endif -+# ifdef _SC_PAGE_SIZE -+# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -+# else -+# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) -+ extern size_t getpagesize(); -+# define malloc_getpagesize getpagesize() -+# else -+# ifdef WIN32 /* use supplied emulation of getpagesize */ -+# define malloc_getpagesize getpagesize() -+# else -+# ifndef LACKS_SYS_PARAM_H -+# include -+# endif -+# ifdef EXEC_PAGESIZE -+# define malloc_getpagesize EXEC_PAGESIZE -+# else -+# ifdef NBPG -+# ifndef CLSIZE -+# define malloc_getpagesize NBPG -+# else -+# define malloc_getpagesize (NBPG * CLSIZE) -+# endif -+# else -+# ifdef NBPC -+# define malloc_getpagesize NBPC -+# else -+# ifdef PAGESIZE -+# define malloc_getpagesize PAGESIZE -+# else /* just guess */ -+# define malloc_getpagesize ((size_t)4096U) -+# endif -+# endif -+# endif -+# endif -+# endif -+# endif -+# endif -+#endif -+#endif -+ -+/* ------------------- size_t and alignment properties -------------------- */ -+ -+/* The byte and bit size of a size_t */ -+#define SIZE_T_SIZE (sizeof(size_t)) -+#define SIZE_T_BITSIZE (sizeof(size_t) << 3) -+ -+/* Some constants coerced to size_t */ -+/* Annoying but necessary to avoid errors on some platforms */ -+#define SIZE_T_ZERO ((size_t)0) -+#define SIZE_T_ONE ((size_t)1) -+#define SIZE_T_TWO ((size_t)2) -+#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -+#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -+#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -+#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) -+ -+/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -+#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) -+ -+/* True if address a has acceptable alignment */ -+#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) -+ -+/* the number of bytes to offset an address to align it */ -+#define align_offset(A)\ -+ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ -+ ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) -+ -+/* -------------------------- MMAP preliminaries ------------------------- */ -+ -+/* -+ If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and -+ checks to fail so compiler optimizer can delete code rather than -+ using so many "#if"s. -+*/ -+ -+ -+/* MORECORE and MMAP must return MFAIL on failure */ -+#define MFAIL ((void*)(MAX_SIZE_T)) -+#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ -+ -+#if !HAVE_MMAP -+#define IS_MMAPPED_BIT (SIZE_T_ZERO) -+#define USE_MMAP_BIT (SIZE_T_ZERO) -+#define CALL_MMAP(s) MFAIL -+#define CALL_MUNMAP(a, s) (-1) -+#define DIRECT_MMAP(s) MFAIL -+ -+#else /* HAVE_MMAP */ -+#define IS_MMAPPED_BIT (SIZE_T_ONE) -+#define USE_MMAP_BIT (SIZE_T_ONE) -+ -+#if !defined(WIN32) && !defined (__OS2__) -+#define CALL_MUNMAP(a, s) munmap((a), (s)) -+#define MMAP_PROT (PROT_READ|PROT_WRITE) -+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -+#define MAP_ANONYMOUS MAP_ANON -+#endif /* MAP_ANON */ -+#ifdef MAP_ANONYMOUS -+#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -+#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -+#else /* MAP_ANONYMOUS */ -+/* -+ Nearly all versions of mmap support MAP_ANONYMOUS, so the following -+ is unlikely to be needed, but is supplied just in case. -+*/ -+#define MMAP_FLAGS (MAP_PRIVATE) -+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -+#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ -+ (dev_zero_fd = open("/dev/zero", O_RDWR), \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ -+ mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -+#endif /* MAP_ANONYMOUS */ -+ -+#define DIRECT_MMAP(s) CALL_MMAP(s) -+ -+#elif defined(__OS2__) -+ -+/* OS/2 MMAP via DosAllocMem */ -+static void* os2mmap(size_t size) { -+ void* ptr; -+ if (DosAllocMem(&ptr, size, OBJ_ANY|PAG_COMMIT|PAG_READ|PAG_WRITE) && -+ DosAllocMem(&ptr, size, PAG_COMMIT|PAG_READ|PAG_WRITE)) -+ return MFAIL; -+ return ptr; -+} -+ -+#define os2direct_mmap(n) os2mmap(n) -+ -+/* This function supports releasing coalesed segments */ -+static int os2munmap(void* ptr, size_t size) { -+ while (size) { -+ ULONG ulSize = size; -+ ULONG ulFlags = 0; -+ if (DosQueryMem(ptr, &ulSize, &ulFlags) != 0) -+ return -1; -+ if ((ulFlags & PAG_BASE) == 0 ||(ulFlags & PAG_COMMIT) == 0 || -+ ulSize > size) -+ return -1; -+ if (DosFreeMem(ptr) != 0) -+ return -1; -+ ptr = ( void * ) ( ( char * ) ptr + ulSize ); -+ size -= ulSize; -+ } -+ return 0; -+} -+ -+#define CALL_MMAP(s) os2mmap(s) -+#define CALL_MUNMAP(a, s) os2munmap((a), (s)) -+#define DIRECT_MMAP(s) os2direct_mmap(s) -+ -+#else /* WIN32 */ -+ -+/* Win32 MMAP via VirtualAlloc */ -+static void* win32mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} -+ -+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -+static void* win32direct_mmap(size_t size) { -+ void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, -+ PAGE_EXECUTE_READWRITE); -+ return (ptr != 0)? ptr: MFAIL; -+} -+ -+/* This function supports releasing coalesed segments */ -+static int win32munmap(void* ptr, size_t size) { -+ MEMORY_BASIC_INFORMATION minfo; -+ char* cptr = ptr; -+ while (size) { -+ if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) -+ return -1; -+ if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || -+ minfo.State != MEM_COMMIT || minfo.RegionSize > size) -+ return -1; -+ if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) -+ return -1; -+ cptr += minfo.RegionSize; -+ size -= minfo.RegionSize; -+ } -+ return 0; -+} -+ -+#define CALL_MMAP(s) win32mmap(s) -+#define CALL_MUNMAP(a, s) win32munmap((a), (s)) -+#define DIRECT_MMAP(s) win32direct_mmap(s) -+#endif /* WIN32 */ -+#endif /* HAVE_MMAP */ -+ -+#if HAVE_MMAP && HAVE_MREMAP -+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -+#else /* HAVE_MMAP && HAVE_MREMAP */ -+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -+#endif /* HAVE_MMAP && HAVE_MREMAP */ -+ -+#if HAVE_MORECORE -+#define CALL_MORECORE(S) MORECORE(S) -+#else /* HAVE_MORECORE */ -+#define CALL_MORECORE(S) MFAIL -+#endif /* HAVE_MORECORE */ -+ -+/* mstate bit set if contiguous morecore disabled or failed */ -+#define USE_NONCONTIGUOUS_BIT (4U) -+ -+/* segment bit set in create_mspace_with_base */ -+#define EXTERN_BIT (8U) -+ -+ -+/* --------------------------- Lock preliminaries ------------------------ */ -+ -+#if USE_LOCKS -+ -+/* -+ When locks are defined, there are up to two global locks: -+ -+ * If HAVE_MORECORE, morecore_mutex protects sequences of calls to -+ MORECORE. In many cases sys_alloc requires two calls, that should -+ not be interleaved with calls by other threads. This does not -+ protect against direct calls to MORECORE by other threads not -+ using this lock, so there is still code to cope the best we can on -+ interference. -+ -+ * magic_init_mutex ensures that mparams.magic and other -+ unique mparams values are initialized only once. -+*/ -+ -+#if !defined(WIN32) && !defined(__OS2__) -+/* By default use posix locks */ -+#include -+#define MLOCK_T pthread_mutex_t -+#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) -+#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) -+#define RELEASE_LOCK(l) pthread_mutex_unlock(l) -+ -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; -+#endif /* HAVE_MORECORE */ -+ -+static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; -+ -+#elif defined(__OS2__) -+#define MLOCK_T HMTX -+#define INITIAL_LOCK(l) DosCreateMutexSem(0, l, 0, FALSE) -+#define ACQUIRE_LOCK(l) DosRequestMutexSem(*l, SEM_INDEFINITE_WAIT) -+#define RELEASE_LOCK(l) DosReleaseMutexSem(*l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; -+ -+#else /* WIN32 */ -+/* -+ Because lock-protected regions have bounded times, and there -+ are no recursive lock calls, we can use simple spinlocks. -+*/ -+ -+#define MLOCK_T long -+static int win32_acquire_lock (MLOCK_T *sl) { -+ for (;;) { -+#ifdef InterlockedCompareExchangePointer -+ if (!InterlockedCompareExchange(sl, 1, 0)) -+ return 0; -+#else /* Use older void* version */ -+ if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) -+ return 0; -+#endif /* InterlockedCompareExchangePointer */ -+ Sleep (0); -+ } -+} -+ -+static void win32_release_lock (MLOCK_T *sl) { -+ InterlockedExchange (sl, 0); -+} -+ -+#define INITIAL_LOCK(l) *(l)=0 -+#define ACQUIRE_LOCK(l) win32_acquire_lock(l) -+#define RELEASE_LOCK(l) win32_release_lock(l) -+#if HAVE_MORECORE -+static MLOCK_T morecore_mutex; -+#endif /* HAVE_MORECORE */ -+static MLOCK_T magic_init_mutex; -+#endif /* WIN32 */ -+ -+#define USE_LOCK_BIT (2U) -+#else /* USE_LOCKS */ -+#define USE_LOCK_BIT (0U) -+#define INITIAL_LOCK(l) -+#endif /* USE_LOCKS */ -+ -+#if USE_LOCKS && HAVE_MORECORE -+#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); -+#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); -+#else /* USE_LOCKS && HAVE_MORECORE */ -+#define ACQUIRE_MORECORE_LOCK() -+#define RELEASE_MORECORE_LOCK() -+#endif /* USE_LOCKS && HAVE_MORECORE */ -+ -+#if USE_LOCKS -+#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); -+#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); -+#else /* USE_LOCKS */ -+#define ACQUIRE_MAGIC_INIT_LOCK() -+#define RELEASE_MAGIC_INIT_LOCK() -+#endif /* USE_LOCKS */ -+ -+ -+/* ----------------------- Chunk representations ------------------------ */ -+ -+/* -+ (The following includes lightly edited explanations by Colin Plumb.) -+ -+ The malloc_chunk declaration below is misleading (but accurate and -+ necessary). It declares a "view" into memory allowing access to -+ necessary fields at known offsets from a given base. -+ -+ Chunks of memory are maintained using a `boundary tag' method as -+ originally described by Knuth. (See the paper by Paul Wilson -+ ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such -+ techniques.) Sizes of free chunks are stored both in the front of -+ each chunk and at the end. This makes consolidating fragmented -+ chunks into bigger chunks fast. The head fields also hold bits -+ representing whether chunks are free or in use. -+ -+ Here are some pictures to make it clearer. They are "exploded" to -+ show that the state of a chunk can be thought of as extending from -+ the high 31 bits of the head field of its header through the -+ prev_foot and PINUSE_BIT bit of the following chunk header. -+ -+ A chunk that's in use looks like: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk (if P = 1) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 1| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | | -+ +- -+ -+ | | -+ +- -+ -+ | : -+ +- size - sizeof(size_t) available payload bytes -+ -+ : | -+ chunk-> +- -+ -+ | | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| -+ | Size of next chunk (may or may not be in use) | +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ And if it's free, it looks like this: -+ -+ chunk-> +- -+ -+ | User payload (must be in use, or we would have merged!) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| -+ | Size of this chunk 0| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Next pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Prev pointer | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- size - sizeof(struct chunk) unused bytes -+ -+ : | -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| -+ | Size of next chunk (must be in use, or we would have merged)| +-+ -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | : -+ +- User payload -+ -+ : | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ |0| -+ +-+ -+ Note that since we always merge adjacent free chunks, the chunks -+ adjacent to a free chunk must be in use. -+ -+ Given a pointer to a chunk (which can be derived trivially from the -+ payload pointer) we can, in O(1) time, find out whether the adjacent -+ chunks are free, and if so, unlink them from the lists that they -+ are on and merge them with the current chunk. -+ -+ Chunks always begin on even word boundaries, so the mem portion -+ (which is returned to the user) is also on an even word boundary, and -+ thus at least double-word aligned. -+ -+ The P (PINUSE_BIT) bit, stored in the unused low-order bit of the -+ chunk size (which is always a multiple of two words), is an in-use -+ bit for the *previous* chunk. If that bit is *clear*, then the -+ word before the current chunk size contains the previous chunk -+ size, and can be used to find the front of the previous chunk. -+ The very first chunk allocated always has this bit set, preventing -+ access to non-existent (or non-owned) memory. If pinuse is set for -+ any given chunk, then you CANNOT determine the size of the -+ previous chunk, and might even get a memory addressing fault when -+ trying to do so. -+ -+ The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of -+ the chunk size redundantly records whether the current chunk is -+ inuse. This redundancy enables usage checks within free and realloc, -+ and reduces indirection when freeing and consolidating chunks. -+ -+ Each freshly allocated chunk must have both cinuse and pinuse set. -+ That is, each allocated chunk borders either a previously allocated -+ and still in-use chunk, or the base of its memory arena. This is -+ ensured by making all allocations from the the `lowest' part of any -+ found chunk. Further, no free chunk physically borders another one, -+ so each free chunk is known to be preceded and followed by either -+ inuse chunks or the ends of memory. -+ -+ Note that the `foot' of the current chunk is actually represented -+ as the prev_foot of the NEXT chunk. This makes it easier to -+ deal with alignments etc but can be very confusing when trying -+ to extend or adapt this code. -+ -+ The exceptions to all this are -+ -+ 1. The special chunk `top' is the top-most available chunk (i.e., -+ the one bordering the end of available memory). It is treated -+ specially. Top is never included in any bin, is used only if -+ no other chunk is available, and is released back to the -+ system if it is very large (see M_TRIM_THRESHOLD). In effect, -+ the top chunk is treated as larger (and thus less well -+ fitting) than any other available chunk. The top chunk -+ doesn't update its trailing size field since there is no next -+ contiguous chunk that would have to index off it. However, -+ space is still allocated for it (TOP_FOOT_SIZE) to enable -+ separation or merging when space is extended. -+ -+ 3. Chunks allocated via mmap, which have the lowest-order bit -+ (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set -+ PINUSE_BIT in their head fields. Because they are allocated -+ one-by-one, each must carry its own prev_foot field, which is -+ also used to hold the offset this chunk has within its mmapped -+ region, which is needed to preserve alignment. Each mmapped -+ chunk is trailed by the first two fields of a fake next-chunk -+ for sake of usage checks. -+ -+*/ -+ -+struct malloc_chunk { -+ size_t prev_foot; /* Size of previous chunk (if free). */ -+ size_t head; /* Size and inuse bits. */ -+ struct malloc_chunk* fd; /* double links -- used only if free. */ -+ struct malloc_chunk* bk; -+}; -+ -+typedef struct malloc_chunk mchunk; -+typedef struct malloc_chunk* mchunkptr; -+typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -+typedef size_t bindex_t; /* Described below */ -+typedef unsigned int binmap_t; /* Described below */ -+typedef unsigned int flag_t; /* The type of various bit flag sets */ -+ -+/* ------------------- Chunks sizes and alignments ----------------------- */ -+ -+#define MCHUNK_SIZE (sizeof(mchunk)) -+ -+#if FOOTERS -+#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+#else /* FOOTERS */ -+#define CHUNK_OVERHEAD (SIZE_T_SIZE) -+#endif /* FOOTERS */ -+ -+/* MMapped chunks need a second word of overhead ... */ -+#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -+/* ... and additional padding for fake next-chunk at foot */ -+#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) -+ -+/* The smallest size we can malloc is an aligned minimal chunk */ -+#define MIN_CHUNK_SIZE\ -+ ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) -+ -+/* conversion from malloc headers to user pointers, and back */ -+#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -+#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -+/* chunk associated with aligned address A */ -+#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) -+ -+/* Bounds on request (not chunk) sizes. */ -+#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -+#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) -+ -+/* pad request bytes into a usable size */ -+#define pad_request(req) \ -+ (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) -+ -+/* pad request, checking for minimum (but not maximum) */ -+#define request2size(req) \ -+ (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) -+ -+ -+/* ------------------ Operations on head and foot fields ----------------- */ -+ -+/* -+ The head field of a chunk is or'ed with PINUSE_BIT when previous -+ adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in -+ use. If the chunk was obtained with mmap, the prev_foot field has -+ IS_MMAPPED_BIT set, otherwise holding the offset of the base of the -+ mmapped region to the base of the chunk. -+*/ -+ -+#define PINUSE_BIT (SIZE_T_ONE) -+#define CINUSE_BIT (SIZE_T_TWO) -+#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) -+ -+/* Head value for fenceposts */ -+#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) -+ -+/* extraction of fields from head words */ -+#define cinuse(p) ((p)->head & CINUSE_BIT) -+#define pinuse(p) ((p)->head & PINUSE_BIT) -+#define chunksize(p) ((p)->head & ~(INUSE_BITS)) -+ -+#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -+#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) -+ -+/* Treat space at ptr +/- offset as a chunk */ -+#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -+#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) -+ -+/* Ptr to next or previous physical malloc_chunk. */ -+#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) -+#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) -+ -+/* extract next chunk's pinuse bit */ -+#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) -+ -+/* Get/set size at footer */ -+#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -+#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) -+ -+/* Set size, pinuse bit, and foot */ -+#define set_size_and_pinuse_of_free_chunk(p, s)\ -+ ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) -+ -+/* Set size, pinuse bit, foot, and clear next pinuse */ -+#define set_free_with_pinuse(p, s, n)\ -+ (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) -+ -+#define is_mmapped(p)\ -+ (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) -+ -+/* Get the internal overhead associated with chunk p */ -+#define overhead_for(p)\ -+ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) -+ -+/* Return true if malloced space is not necessarily cleared */ -+#if MMAP_CLEARS -+#define calloc_must_clear(p) (!is_mmapped(p)) -+#else /* MMAP_CLEARS */ -+#define calloc_must_clear(p) (1) -+#endif /* MMAP_CLEARS */ -+ -+/* ---------------------- Overlaid data structures ----------------------- */ -+ -+/* -+ When chunks are not in use, they are treated as nodes of either -+ lists or trees. -+ -+ "Small" chunks are stored in circular doubly-linked lists, and look -+ like this: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk in list | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space (may be 0 bytes long) . -+ . . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ Larger chunks are kept in a form of bitwise digital trees (aka -+ tries) keyed on chunksizes. Because malloc_tree_chunks are only for -+ free chunks greater than 256 bytes, their size doesn't impose any -+ constraints on user chunk sizes. Each node looks like: -+ -+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Size of previous chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `head:' | Size of chunk, in bytes |P| -+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Forward pointer to next chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Back pointer to previous chunk of same size | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to left child (child[0]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to right child (child[1]) | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Pointer to parent | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | bin index of this chunk | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ | Unused space . -+ . | -+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ `foot:' | Size of chunk, in bytes | -+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+ -+ Each tree holding treenodes is a tree of unique chunk sizes. Chunks -+ of the same size are arranged in a circularly-linked list, with only -+ the oldest chunk (the next to be used, in our FIFO ordering) -+ actually in the tree. (Tree members are distinguished by a non-null -+ parent pointer.) If a chunk with the same size an an existing node -+ is inserted, it is linked off the existing node using pointers that -+ work in the same way as fd/bk pointers of small chunks. -+ -+ Each tree contains a power of 2 sized range of chunk sizes (the -+ smallest is 0x100 <= x < 0x180), which is is divided in half at each -+ tree level, with the chunks in the smaller half of the range (0x100 -+ <= x < 0x140 for the top nose) in the left subtree and the larger -+ half (0x140 <= x < 0x180) in the right subtree. This is, of course, -+ done by inspecting individual bits. -+ -+ Using these rules, each node's left subtree contains all smaller -+ sizes than its right subtree. However, the node at the root of each -+ subtree has no particular ordering relationship to either. (The -+ dividing line between the subtree sizes is based on trie relation.) -+ If we remove the last chunk of a given size from the interior of the -+ tree, we need to replace it with a leaf node. The tree ordering -+ rules permit a node to be replaced by any leaf below it. -+ -+ The smallest chunk in a tree (a common operation in a best-fit -+ allocator) can be found by walking a path to the leftmost leaf in -+ the tree. Unlike a usual binary tree, where we follow left child -+ pointers until we reach a null, here we follow the right child -+ pointer any time the left one is null, until we reach a leaf with -+ both child pointers null. The smallest chunk in the tree will be -+ somewhere along that path. -+ -+ The worst case number of steps to add, find, or remove a node is -+ bounded by the number of bits differentiating chunks within -+ bins. Under current bin calculations, this ranges from 6 up to 21 -+ (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case -+ is of course much better. -+*/ -+ -+struct malloc_tree_chunk { -+ /* The first four fields must be compatible with malloc_chunk */ -+ size_t prev_foot; -+ size_t head; -+ struct malloc_tree_chunk* fd; -+ struct malloc_tree_chunk* bk; -+ -+ struct malloc_tree_chunk* child[2]; -+ struct malloc_tree_chunk* parent; -+ bindex_t index; -+}; -+ -+typedef struct malloc_tree_chunk tchunk; -+typedef struct malloc_tree_chunk* tchunkptr; -+typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ -+ -+/* A little helper macro for trees */ -+#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) -+ -+/* ----------------------------- Segments -------------------------------- */ -+ -+/* -+ Each malloc space may include non-contiguous segments, held in a -+ list headed by an embedded malloc_segment record representing the -+ top-most space. Segments also include flags holding properties of -+ the space. Large chunks that are directly allocated by mmap are not -+ included in this list. They are instead independently created and -+ destroyed without otherwise keeping track of them. -+ -+ Segment management mainly comes into play for spaces allocated by -+ MMAP. Any call to MMAP might or might not return memory that is -+ adjacent to an existing segment. MORECORE normally contiguously -+ extends the current space, so this space is almost always adjacent, -+ which is simpler and faster to deal with. (This is why MORECORE is -+ used preferentially to MMAP when both are available -- see -+ sys_alloc.) When allocating using MMAP, we don't use any of the -+ hinting mechanisms (inconsistently) supported in various -+ implementations of unix mmap, or distinguish reserving from -+ committing memory. Instead, we just ask for space, and exploit -+ contiguity when we get it. It is probably possible to do -+ better than this on some systems, but no general scheme seems -+ to be significantly better. -+ -+ Management entails a simpler variant of the consolidation scheme -+ used for chunks to reduce fragmentation -- new adjacent memory is -+ normally prepended or appended to an existing segment. However, -+ there are limitations compared to chunk consolidation that mostly -+ reflect the fact that segment processing is relatively infrequent -+ (occurring only when getting memory from system) and that we -+ don't expect to have huge numbers of segments: -+ -+ * Segments are not indexed, so traversal requires linear scans. (It -+ would be possible to index these, but is not worth the extra -+ overhead and complexity for most programs on most platforms.) -+ * New segments are only appended to old ones when holding top-most -+ memory; if they cannot be prepended to others, they are held in -+ different segments. -+ -+ Except for the top-most segment of an mstate, each segment record -+ is kept at the tail of its segment. Segments are added by pushing -+ segment records onto the list headed by &mstate.seg for the -+ containing mstate. -+ -+ Segment flags control allocation/merge/deallocation policies: -+ * If EXTERN_BIT set, then we did not allocate this segment, -+ and so should not try to deallocate or merge with others. -+ (This currently holds only for the initial segment passed -+ into create_mspace_with_base.) -+ * If IS_MMAPPED_BIT set, the segment may be merged with -+ other surrounding mmapped segments and trimmed/de-allocated -+ using munmap. -+ * If neither bit is set, then the segment was obtained using -+ MORECORE so can be merged with surrounding MORECORE'd segments -+ and deallocated/trimmed using MORECORE with negative arguments. -+*/ -+ -+struct malloc_segment { -+ char* base; /* base address */ -+ size_t size; /* allocated size */ -+ struct malloc_segment* next; /* ptr to next segment */ -+#if FFI_MMAP_EXEC_WRIT -+ /* The mmap magic is supposed to store the address of the executable -+ segment at the very end of the requested block. */ -+ -+# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) -+ -+ /* We can only merge segments if their corresponding executable -+ segments are at identical offsets. */ -+# define check_segment_merge(S,b,s) \ -+ (mmap_exec_offset((b),(s)) == (S)->exec_offset) -+ -+# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) -+# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) -+ -+ /* The removal of sflags only works with HAVE_MORECORE == 0. */ -+ -+# define get_segment_flags(S) (IS_MMAPPED_BIT) -+# define set_segment_flags(S,v) \ -+ (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ -+ (((S)->exec_offset = \ -+ mmap_exec_offset((S)->base, (S)->size)), \ -+ (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ -+ (S)->exec_offset) ? (ABORT, (v)) : \ -+ (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) -+ -+ /* We use an offset here, instead of a pointer, because then, when -+ base changes, we don't have to modify this. On architectures -+ with segmented addresses, this might not work. */ -+ ptrdiff_t exec_offset; -+#else -+ -+# define get_segment_flags(S) ((S)->sflags) -+# define set_segment_flags(S,v) ((S)->sflags = (v)) -+# define check_segment_merge(S,b,s) (1) -+ -+ flag_t sflags; /* mmap and extern flag */ -+#endif -+}; -+ -+#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) -+#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) -+ -+typedef struct malloc_segment msegment; -+typedef struct malloc_segment* msegmentptr; -+ -+/* ---------------------------- malloc_state ----------------------------- */ -+ -+/* -+ A malloc_state holds all of the bookkeeping for a space. -+ The main fields are: -+ -+ Top -+ The topmost chunk of the currently active segment. Its size is -+ cached in topsize. The actual size of topmost space is -+ topsize+TOP_FOOT_SIZE, which includes space reserved for adding -+ fenceposts and segment records if necessary when getting more -+ space from the system. The size at which to autotrim top is -+ cached from mparams in trim_check, except that it is disabled if -+ an autotrim fails. -+ -+ Designated victim (dv) -+ This is the preferred chunk for servicing small requests that -+ don't have exact fits. It is normally the chunk split off most -+ recently to service another small request. Its size is cached in -+ dvsize. The link fields of this chunk are not maintained since it -+ is not kept in a bin. -+ -+ SmallBins -+ An array of bin headers for free chunks. These bins hold chunks -+ with sizes less than MIN_LARGE_SIZE bytes. Each bin contains -+ chunks of all the same size, spaced 8 bytes apart. To simplify -+ use in double-linked lists, each bin header acts as a malloc_chunk -+ pointing to the real first node, if it exists (else pointing to -+ itself). This avoids special-casing for headers. But to avoid -+ waste, we allocate only the fd/bk pointers of bins, and then use -+ repositioning tricks to treat these as the fields of a chunk. -+ -+ TreeBins -+ Treebins are pointers to the roots of trees holding a range of -+ sizes. There are 2 equally spaced treebins for each power of two -+ from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything -+ larger. -+ -+ Bin maps -+ There is one bit map for small bins ("smallmap") and one for -+ treebins ("treemap). Each bin sets its bit when non-empty, and -+ clears the bit when empty. Bit operations are then used to avoid -+ bin-by-bin searching -- nearly all "search" is done without ever -+ looking at bins that won't be selected. The bit maps -+ conservatively use 32 bits per map word, even if on 64bit system. -+ For a good description of some of the bit-based techniques used -+ here, see Henry S. Warren Jr's book "Hacker's Delight" (and -+ supplement at http://hackersdelight.org/). Many of these are -+ intended to reduce the branchiness of paths through malloc etc, as -+ well as to reduce the number of memory locations read or written. -+ -+ Segments -+ A list of segments headed by an embedded malloc_segment record -+ representing the initial space. -+ -+ Address check support -+ The least_addr field is the least address ever obtained from -+ MORECORE or MMAP. Attempted frees and reallocs of any address less -+ than this are trapped (unless INSECURE is defined). -+ -+ Magic tag -+ A cross-check field that should always hold same value as mparams.magic. -+ -+ Flags -+ Bits recording whether to use MMAP, locks, or contiguous MORECORE -+ -+ Statistics -+ Each space keeps track of current and maximum system memory -+ obtained via MORECORE or MMAP. -+ -+ Locking -+ If USE_LOCKS is defined, the "mutex" lock is acquired and released -+ around every public call using this mspace. -+*/ -+ -+/* Bin types, widths and sizes */ -+#define NSMALLBINS (32U) -+#define NTREEBINS (32U) -+#define SMALLBIN_SHIFT (3U) -+#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -+#define TREEBIN_SHIFT (8U) -+#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -+#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -+#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) -+ -+struct malloc_state { -+ binmap_t smallmap; -+ binmap_t treemap; -+ size_t dvsize; -+ size_t topsize; -+ char* least_addr; -+ mchunkptr dv; -+ mchunkptr top; -+ size_t trim_check; -+ size_t magic; -+ mchunkptr smallbins[(NSMALLBINS+1)*2]; -+ tbinptr treebins[NTREEBINS]; -+ size_t footprint; -+ size_t max_footprint; -+ flag_t mflags; -+#if USE_LOCKS -+ MLOCK_T mutex; /* locate lock among fields that rarely change */ -+#endif /* USE_LOCKS */ -+ msegment seg; -+}; -+ -+typedef struct malloc_state* mstate; -+ -+/* ------------- Global malloc_state and malloc_params ------------------- */ -+ -+/* -+ malloc_params holds global properties, including those that can be -+ dynamically set using mallopt. There is a single instance, mparams, -+ initialized in init_mparams. -+*/ -+ -+struct malloc_params { -+ size_t magic; -+ size_t page_size; -+ size_t granularity; -+ size_t mmap_threshold; -+ size_t trim_threshold; -+ flag_t default_mflags; -+}; -+ -+static struct malloc_params mparams; -+ -+/* The global malloc_state used for all non-"mspace" calls */ -+static struct malloc_state _gm_; -+#define gm (&_gm_) -+#define is_global(M) ((M) == &_gm_) -+#define is_initialized(M) ((M)->top != 0) -+ -+/* -------------------------- system alloc setup ------------------------- */ -+ -+/* Operations on mflags */ -+ -+#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -+#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -+#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) -+ -+#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -+#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -+#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) -+ -+#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -+#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) -+ -+#define set_lock(M,L)\ -+ ((M)->mflags = (L)?\ -+ ((M)->mflags | USE_LOCK_BIT) :\ -+ ((M)->mflags & ~USE_LOCK_BIT)) -+ -+/* page-align a size */ -+#define page_align(S)\ -+ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) -+ -+/* granularity-align a size */ -+#define granularity_align(S)\ -+ (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) -+ -+#define is_page_aligned(S)\ -+ (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -+#define is_granularity_aligned(S)\ -+ (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) -+ -+/* True if segment S holds address A */ -+#define segment_holds(S, A)\ -+ ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) -+ -+/* Return segment holding given address */ -+static msegmentptr segment_holding(mstate m, char* addr) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if (addr >= sp->base && addr < sp->base + sp->size) -+ return sp; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+ -+/* Return true if segment contains a segment link */ -+static int has_segment_link(mstate m, msegmentptr ss) { -+ msegmentptr sp = &m->seg; -+ for (;;) { -+ if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) -+ return 1; -+ if ((sp = sp->next) == 0) -+ return 0; -+ } -+} -+ -+#ifndef MORECORE_CANNOT_TRIM -+#define should_trim(M,s) ((s) > (M)->trim_check) -+#else /* MORECORE_CANNOT_TRIM */ -+#define should_trim(M,s) (0) -+#endif /* MORECORE_CANNOT_TRIM */ -+ -+/* -+ TOP_FOOT_SIZE is padding at the end of a segment, including space -+ that may be needed to place segment records and fenceposts when new -+ noncontiguous segments are added. -+*/ -+#define TOP_FOOT_SIZE\ -+ (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) -+ -+ -+/* ------------------------------- Hooks -------------------------------- */ -+ -+/* -+ PREACTION should be defined to return 0 on success, and nonzero on -+ failure. If you are not using locking, you can redefine these to do -+ anything you like. -+*/ -+ -+#if USE_LOCKS -+ -+/* Ensure locks are initialized */ -+#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) -+ -+#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -+#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -+#else /* USE_LOCKS */ -+ -+#ifndef PREACTION -+#define PREACTION(M) (0) -+#endif /* PREACTION */ -+ -+#ifndef POSTACTION -+#define POSTACTION(M) -+#endif /* POSTACTION */ -+ -+#endif /* USE_LOCKS */ -+ -+/* -+ CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. -+ USAGE_ERROR_ACTION is triggered on detected bad frees and -+ reallocs. The argument p is an address that might have triggered the -+ fault. It is ignored by the two predefined actions, but might be -+ useful in custom actions that try to help diagnose errors. -+*/ -+ -+#if PROCEED_ON_ERROR -+ -+/* A count of the number of corruption errors causing resets */ -+int malloc_corruption_error_count; -+ -+/* default corruption action */ -+static void reset_on_error(mstate m); -+ -+#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -+#define USAGE_ERROR_ACTION(m, p) -+ -+#else /* PROCEED_ON_ERROR */ -+ -+#ifndef CORRUPTION_ERROR_ACTION -+#define CORRUPTION_ERROR_ACTION(m) ABORT -+#endif /* CORRUPTION_ERROR_ACTION */ -+ -+#ifndef USAGE_ERROR_ACTION -+#define USAGE_ERROR_ACTION(m,p) ABORT -+#endif /* USAGE_ERROR_ACTION */ -+ -+#endif /* PROCEED_ON_ERROR */ -+ -+/* -------------------------- Debugging setup ---------------------------- */ -+ -+#if ! DEBUG -+ -+#define check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) -+#define check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) -+#define check_malloc_state(M) -+#define check_top_chunk(M,P) -+ -+#else /* DEBUG */ -+#define check_free_chunk(M,P) do_check_free_chunk(M,P) -+#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -+#define check_top_chunk(M,P) do_check_top_chunk(M,P) -+#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -+#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -+#define check_malloc_state(M) do_check_malloc_state(M) -+ -+static void do_check_any_chunk(mstate m, mchunkptr p); -+static void do_check_top_chunk(mstate m, mchunkptr p); -+static void do_check_mmapped_chunk(mstate m, mchunkptr p); -+static void do_check_inuse_chunk(mstate m, mchunkptr p); -+static void do_check_free_chunk(mstate m, mchunkptr p); -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -+static void do_check_tree(mstate m, tchunkptr t); -+static void do_check_treebin(mstate m, bindex_t i); -+static void do_check_smallbin(mstate m, bindex_t i); -+static void do_check_malloc_state(mstate m); -+static int bin_find(mstate m, mchunkptr x); -+static size_t traverse_and_check(mstate m); -+#endif /* DEBUG */ -+ -+/* ---------------------------- Indexing Bins ---------------------------- */ -+ -+#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -+#define small_index(s) ((s) >> SMALLBIN_SHIFT) -+#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -+#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) -+ -+/* addressing by index. See above about smallbin repositioning */ -+#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -+#define treebin_at(M,i) (&((M)->treebins[i])) -+ -+/* assign tree index for size S to variable I */ -+#if defined(__GNUC__) && defined(__i386__) -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int K;\ -+ __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ -+ I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ -+ }\ -+} -+#else /* GNUC */ -+#define compute_tree_index(S, I)\ -+{\ -+ size_t X = S >> TREEBIN_SHIFT;\ -+ if (X == 0)\ -+ I = 0;\ -+ else if (X > 0xFFFF)\ -+ I = NTREEBINS-1;\ -+ else {\ -+ unsigned int Y = (unsigned int)X;\ -+ unsigned int N = ((Y - 0x100) >> 16) & 8;\ -+ unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ -+ N += K;\ -+ N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ -+ K = 14 - N + ((Y <<= K) >> 15);\ -+ I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ -+ }\ -+} -+#endif /* GNUC */ -+ -+/* Bit representing maximum resolved size in a treebin at i */ -+#define bit_for_tree_index(i) \ -+ (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) -+ -+/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -+#define leftshift_for_tree_index(i) \ -+ ((i == NTREEBINS-1)? 0 : \ -+ ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) -+ -+/* The size of the smallest chunk held in bin with index i */ -+#define minsize_for_tree_index(i) \ -+ ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ -+ (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) -+ -+ -+/* ------------------------ Operations on bin maps ----------------------- */ -+ -+/* bit corresponding to given index */ -+#define idx2bit(i) ((binmap_t)(1) << (i)) -+ -+/* Mark/Clear bits with given index */ -+#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -+#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -+#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) -+ -+#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -+#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -+#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) -+ -+/* index corresponding to given bit */ -+ -+#if defined(__GNUC__) && defined(__i386__) -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int J;\ -+ __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ -+ I = (bindex_t)J;\ -+} -+ -+#else /* GNUC */ -+#if USE_BUILTIN_FFS -+#define compute_bit2idx(X, I) I = ffs(X)-1 -+ -+#else /* USE_BUILTIN_FFS */ -+#define compute_bit2idx(X, I)\ -+{\ -+ unsigned int Y = X - 1;\ -+ unsigned int K = Y >> (16-4) & 16;\ -+ unsigned int N = K; Y >>= K;\ -+ N += K = Y >> (8-3) & 8; Y >>= K;\ -+ N += K = Y >> (4-2) & 4; Y >>= K;\ -+ N += K = Y >> (2-1) & 2; Y >>= K;\ -+ N += K = Y >> (1-0) & 1; Y >>= K;\ -+ I = (bindex_t)(N + Y);\ -+} -+#endif /* USE_BUILTIN_FFS */ -+#endif /* GNUC */ -+ -+/* isolate the least set bit of a bitmap */ -+#define least_bit(x) ((x) & -(x)) -+ -+/* mask with all bits to left of least bit of x on */ -+#define left_bits(x) ((x<<1) | -(x<<1)) -+ -+/* mask with all bits to left of or equal to least bit of x on */ -+#define same_or_left_bits(x) ((x) | -(x)) -+ -+ -+/* ----------------------- Runtime Check Support ------------------------- */ -+ -+/* -+ For security, the main invariant is that malloc/free/etc never -+ writes to a static address other than malloc_state, unless static -+ malloc_state itself has been corrupted, which cannot occur via -+ malloc (because of these checks). In essence this means that we -+ believe all pointers, sizes, maps etc held in malloc_state, but -+ check all of those linked or offsetted from other embedded data -+ structures. These checks are interspersed with main code in a way -+ that tends to minimize their run-time cost. -+ -+ When FOOTERS is defined, in addition to range checking, we also -+ verify footer fields of inuse chunks, which can be used guarantee -+ that the mstate controlling malloc/free is intact. This is a -+ streamlined version of the approach described by William Robertson -+ et al in "Run-time Detection of Heap-based Overflows" LISA'03 -+ http://www.usenix.org/events/lisa03/tech/robertson.html The footer -+ of an inuse chunk holds the xor of its mstate and a random seed, -+ that is checked upon calls to free() and realloc(). This is -+ (probablistically) unguessable from outside the program, but can be -+ computed by any code successfully malloc'ing any chunk, so does not -+ itself provide protection against code that has already broken -+ security through some other means. Unlike Robertson et al, we -+ always dynamically check addresses of all offset chunks (previous, -+ next, etc). This turns out to be cheaper than relying on hashes. -+*/ -+ -+#if !INSECURE -+/* Check if address a is at least as high as any from MORECORE or MMAP */ -+#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -+/* Check if address of next chunk n is higher than base chunk p */ -+#define ok_next(p, n) ((char*)(p) < (char*)(n)) -+/* Check if p has its cinuse bit on */ -+#define ok_cinuse(p) cinuse(p) -+/* Check if p has its pinuse bit on */ -+#define ok_pinuse(p) pinuse(p) -+ -+#else /* !INSECURE */ -+#define ok_address(M, a) (1) -+#define ok_next(b, n) (1) -+#define ok_cinuse(p) (1) -+#define ok_pinuse(p) (1) -+#endif /* !INSECURE */ -+ -+#if (FOOTERS && !INSECURE) -+/* Check if (alleged) mstate m has expected magic field */ -+#define ok_magic(M) ((M)->magic == mparams.magic) -+#else /* (FOOTERS && !INSECURE) */ -+#define ok_magic(M) (1) -+#endif /* (FOOTERS && !INSECURE) */ -+ -+ -+/* In gcc, use __builtin_expect to minimize impact of checks */ -+#if !INSECURE -+#if defined(__GNUC__) && __GNUC__ >= 3 -+#define RTCHECK(e) __builtin_expect(e, 1) -+#else /* GNUC */ -+#define RTCHECK(e) (e) -+#endif /* GNUC */ -+#else /* !INSECURE */ -+#define RTCHECK(e) (1) -+#endif /* !INSECURE */ -+ -+/* macros to set up inuse chunks with or without footers */ -+ -+#if !FOOTERS -+ -+#define mark_inuse_foot(M,p,s) -+ -+/* Set cinuse bit and pinuse bit of next chunk */ -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) -+ -+/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) -+ -+/* Set size, cinuse and pinuse bit of this chunk */ -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) -+ -+#else /* FOOTERS */ -+ -+/* Set foot of inuse chunk to be xor of mstate and seed */ -+#define mark_inuse_foot(M,p,s)\ -+ (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) -+ -+#define get_mstate_for(p)\ -+ ((mstate)(((mchunkptr)((char*)(p) +\ -+ (chunksize(p))))->prev_foot ^ mparams.magic)) -+ -+#define set_inuse(M,p,s)\ -+ ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ -+ mark_inuse_foot(M,p,s)) -+ -+#define set_inuse_and_pinuse(M,p,s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ -+ mark_inuse_foot(M,p,s)) -+ -+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ -+ ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ -+ mark_inuse_foot(M, p, s)) -+ -+#endif /* !FOOTERS */ -+ -+/* ---------------------------- setting mparams -------------------------- */ -+ -+/* Initialize mparams */ -+static int init_mparams(void) { -+ if (mparams.page_size == 0) { -+ size_t s; -+ -+ mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; -+ mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -+#if MORECORE_CONTIGUOUS -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -+#else /* MORECORE_CONTIGUOUS */ -+ mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -+#endif /* MORECORE_CONTIGUOUS */ -+ -+#if (FOOTERS && !INSECURE) -+ { -+#if USE_DEV_RANDOM -+ int fd; -+ unsigned char buf[sizeof(size_t)]; -+ /* Try to use /dev/urandom, else fall back on using time */ -+ if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && -+ read(fd, buf, sizeof(buf)) == sizeof(buf)) { -+ s = *((size_t *) buf); -+ close(fd); -+ } -+ else -+#endif /* USE_DEV_RANDOM */ -+ s = (size_t)(time(0) ^ (size_t)0x55555555U); -+ -+ s |= (size_t)8U; /* ensure nonzero */ -+ s &= ~(size_t)7U; /* improve chances of fault for bad values */ -+ -+ } -+#else /* (FOOTERS && !INSECURE) */ -+ s = (size_t)0x58585858U; -+#endif /* (FOOTERS && !INSECURE) */ -+ ACQUIRE_MAGIC_INIT_LOCK(); -+ if (mparams.magic == 0) { -+ mparams.magic = s; -+ /* Set up lock for main malloc area */ -+ INITIAL_LOCK(&gm->mutex); -+ gm->mflags = mparams.default_mflags; -+ } -+ RELEASE_MAGIC_INIT_LOCK(); -+ -+#if !defined(WIN32) && !defined(__OS2__) -+ mparams.page_size = malloc_getpagesize; -+ mparams.granularity = ((DEFAULT_GRANULARITY != 0)? -+ DEFAULT_GRANULARITY : mparams.page_size); -+#elif defined (__OS2__) -+ /* if low-memory is used, os2munmap() would break -+ if it were anything other than 64k */ -+ mparams.page_size = 4096u; -+ mparams.granularity = 65536u; -+#else /* WIN32 */ -+ { -+ SYSTEM_INFO system_info; -+ GetSystemInfo(&system_info); -+ mparams.page_size = system_info.dwPageSize; -+ mparams.granularity = system_info.dwAllocationGranularity; -+ } -+#endif /* WIN32 */ -+ -+ /* Sanity-check configuration: -+ size_t must be unsigned and as wide as pointer type. -+ ints must be at least 4 bytes. -+ alignment must be at least 8. -+ Alignment, min chunk size, and page size must all be powers of 2. -+ */ -+ if ((sizeof(size_t) != sizeof(char*)) || -+ (MAX_SIZE_T < MIN_CHUNK_SIZE) || -+ (sizeof(int) < 4) || -+ (MALLOC_ALIGNMENT < (size_t)8U) || -+ ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || -+ ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || -+ ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || -+ ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) -+ ABORT; -+ } -+ return 0; -+} -+ -+/* support for mallopt */ -+static int change_mparam(int param_number, int value) { -+ size_t val = (size_t)value; -+ init_mparams(); -+ switch(param_number) { -+ case M_TRIM_THRESHOLD: -+ mparams.trim_threshold = val; -+ return 1; -+ case M_GRANULARITY: -+ if (val >= mparams.page_size && ((val & (val-1)) == 0)) { -+ mparams.granularity = val; -+ return 1; -+ } -+ else -+ return 0; -+ case M_MMAP_THRESHOLD: -+ mparams.mmap_threshold = val; -+ return 1; -+ default: -+ return 0; -+ } -+} -+ -+#if DEBUG -+/* ------------------------- Debugging Support --------------------------- */ -+ -+/* Check properties of any chunk, whether free, inuse, mmapped etc */ -+static void do_check_any_chunk(mstate m, mchunkptr p) { -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+} -+ -+/* Check properties of top chunk */ -+static void do_check_top_chunk(mstate m, mchunkptr p) { -+ msegmentptr sp = segment_holding(m, (char*)p); -+ size_t sz = chunksize(p); -+ assert(sp != 0); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(sz == m->topsize); -+ assert(sz > 0); -+ assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); -+ assert(pinuse(p)); -+ assert(!next_pinuse(p)); -+} -+ -+/* Check properties of (inuse) mmapped chunks */ -+static void do_check_mmapped_chunk(mstate m, mchunkptr p) { -+ size_t sz = chunksize(p); -+ size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); -+ assert(is_mmapped(p)); -+ assert(use_mmap(m)); -+ assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); -+ assert(ok_address(m, p)); -+ assert(!is_small(sz)); -+ assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); -+ assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); -+ assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -+} -+ -+/* Check properties of inuse chunks */ -+static void do_check_inuse_chunk(mstate m, mchunkptr p) { -+ do_check_any_chunk(m, p); -+ assert(cinuse(p)); -+ assert(next_pinuse(p)); -+ /* If not pinuse and not mmapped, previous chunk has OK offset */ -+ assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); -+ if (is_mmapped(p)) -+ do_check_mmapped_chunk(m, p); -+} -+ -+/* Check properties of free chunks */ -+static void do_check_free_chunk(mstate m, mchunkptr p) { -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ mchunkptr next = chunk_plus_offset(p, sz); -+ do_check_any_chunk(m, p); -+ assert(!cinuse(p)); -+ assert(!next_pinuse(p)); -+ assert (!is_mmapped(p)); -+ if (p != m->dv && p != m->top) { -+ if (sz >= MIN_CHUNK_SIZE) { -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(is_aligned(chunk2mem(p))); -+ assert(next->prev_foot == sz); -+ assert(pinuse(p)); -+ assert (next == m->top || cinuse(next)); -+ assert(p->fd->bk == p); -+ assert(p->bk->fd == p); -+ } -+ else /* markers are always of size SIZE_T_SIZE */ -+ assert(sz == SIZE_T_SIZE); -+ } -+} -+ -+/* Check properties of malloced chunks at the point they are malloced */ -+static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); -+ do_check_inuse_chunk(m, p); -+ assert((sz & CHUNK_ALIGN_MASK) == 0); -+ assert(sz >= MIN_CHUNK_SIZE); -+ assert(sz >= s); -+ /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ -+ assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); -+ } -+} -+ -+/* Check a tree and its subtrees. */ -+static void do_check_tree(mstate m, tchunkptr t) { -+ tchunkptr head = 0; -+ tchunkptr u = t; -+ bindex_t tindex = t->index; -+ size_t tsize = chunksize(t); -+ bindex_t idx; -+ compute_tree_index(tsize, idx); -+ assert(tindex == idx); -+ assert(tsize >= MIN_LARGE_SIZE); -+ assert(tsize >= minsize_for_tree_index(idx)); -+ assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); -+ -+ do { /* traverse through chain of same-sized nodes */ -+ do_check_any_chunk(m, ((mchunkptr)u)); -+ assert(u->index == tindex); -+ assert(chunksize(u) == tsize); -+ assert(!cinuse(u)); -+ assert(!next_pinuse(u)); -+ assert(u->fd->bk == u); -+ assert(u->bk->fd == u); -+ if (u->parent == 0) { -+ assert(u->child[0] == 0); -+ assert(u->child[1] == 0); -+ } -+ else { -+ assert(head == 0); /* only one node on chain has parent */ -+ head = u; -+ assert(u->parent != u); -+ assert (u->parent->child[0] == u || -+ u->parent->child[1] == u || -+ *((tbinptr*)(u->parent)) == u); -+ if (u->child[0] != 0) { -+ assert(u->child[0]->parent == u); -+ assert(u->child[0] != u); -+ do_check_tree(m, u->child[0]); -+ } -+ if (u->child[1] != 0) { -+ assert(u->child[1]->parent == u); -+ assert(u->child[1] != u); -+ do_check_tree(m, u->child[1]); -+ } -+ if (u->child[0] != 0 && u->child[1] != 0) { -+ assert(chunksize(u->child[0]) < chunksize(u->child[1])); -+ } -+ } -+ u = u->fd; -+ } while (u != t); -+ assert(head != 0); -+} -+ -+/* Check all the chunks in a treebin. */ -+static void do_check_treebin(mstate m, bindex_t i) { -+ tbinptr* tb = treebin_at(m, i); -+ tchunkptr t = *tb; -+ int empty = (m->treemap & (1U << i)) == 0; -+ if (t == 0) -+ assert(empty); -+ if (!empty) -+ do_check_tree(m, t); -+} -+ -+/* Check all the chunks in a smallbin. */ -+static void do_check_smallbin(mstate m, bindex_t i) { -+ sbinptr b = smallbin_at(m, i); -+ mchunkptr p = b->bk; -+ unsigned int empty = (m->smallmap & (1U << i)) == 0; -+ if (p == b) -+ assert(empty); -+ if (!empty) { -+ for (; p != b; p = p->bk) { -+ size_t size = chunksize(p); -+ mchunkptr q; -+ /* each chunk claims to be free */ -+ do_check_free_chunk(m, p); -+ /* chunk belongs in bin */ -+ assert(small_index(size) == i); -+ assert(p->bk == b || chunksize(p->bk) == chunksize(p)); -+ /* chunk is followed by an inuse chunk */ -+ q = next_chunk(p); -+ if (q->head != FENCEPOST_HEAD) -+ do_check_inuse_chunk(m, q); -+ } -+ } -+} -+ -+/* Find x in a bin. Used in other check functions. */ -+static int bin_find(mstate m, mchunkptr x) { -+ size_t size = chunksize(x); -+ if (is_small(size)) { -+ bindex_t sidx = small_index(size); -+ sbinptr b = smallbin_at(m, sidx); -+ if (smallmap_is_marked(m, sidx)) { -+ mchunkptr p = b; -+ do { -+ if (p == x) -+ return 1; -+ } while ((p = p->fd) != b); -+ } -+ } -+ else { -+ bindex_t tidx; -+ compute_tree_index(size, tidx); -+ if (treemap_is_marked(m, tidx)) { -+ tchunkptr t = *treebin_at(m, tidx); -+ size_t sizebits = size << leftshift_for_tree_index(tidx); -+ while (t != 0 && chunksize(t) != size) { -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ sizebits <<= 1; -+ } -+ if (t != 0) { -+ tchunkptr u = t; -+ do { -+ if (u == (tchunkptr)x) -+ return 1; -+ } while ((u = u->fd) != t); -+ } -+ } -+ } -+ return 0; -+} -+ -+/* Traverse each chunk and check it; return total */ -+static size_t traverse_and_check(mstate m) { -+ size_t sum = 0; -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ sum += m->topsize + TOP_FOOT_SIZE; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ mchunkptr lastq = 0; -+ assert(pinuse(q)); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ sum += chunksize(q); -+ if (cinuse(q)) { -+ assert(!bin_find(m, q)); -+ do_check_inuse_chunk(m, q); -+ } -+ else { -+ assert(q == m->dv || bin_find(m, q)); -+ assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ -+ do_check_free_chunk(m, q); -+ } -+ lastq = q; -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } -+ return sum; -+} -+ -+/* Check all properties of malloc_state. */ -+static void do_check_malloc_state(mstate m) { -+ bindex_t i; -+ size_t total; -+ /* check bins */ -+ for (i = 0; i < NSMALLBINS; ++i) -+ do_check_smallbin(m, i); -+ for (i = 0; i < NTREEBINS; ++i) -+ do_check_treebin(m, i); -+ -+ if (m->dvsize != 0) { /* check dv chunk */ -+ do_check_any_chunk(m, m->dv); -+ assert(m->dvsize == chunksize(m->dv)); -+ assert(m->dvsize >= MIN_CHUNK_SIZE); -+ assert(bin_find(m, m->dv) == 0); -+ } -+ -+ if (m->top != 0) { /* check top chunk */ -+ do_check_top_chunk(m, m->top); -+ assert(m->topsize == chunksize(m->top)); -+ assert(m->topsize > 0); -+ assert(bin_find(m, m->top) == 0); -+ } -+ -+ total = traverse_and_check(m); -+ assert(total <= m->footprint); -+ assert(m->footprint <= m->max_footprint); -+} -+#endif /* DEBUG */ -+ -+/* ----------------------------- statistics ------------------------------ */ -+ -+#if !NO_MALLINFO -+static struct mallinfo internal_mallinfo(mstate m) { -+ struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -+ if (!PREACTION(m)) { -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ size_t nfree = SIZE_T_ONE; /* top always free */ -+ size_t mfree = m->topsize + TOP_FOOT_SIZE; -+ size_t sum = mfree; -+ msegmentptr s = &m->seg; -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ size_t sz = chunksize(q); -+ sum += sz; -+ if (!cinuse(q)) { -+ mfree += sz; -+ ++nfree; -+ } -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ -+ nm.arena = sum; -+ nm.ordblks = nfree; -+ nm.hblkhd = m->footprint - sum; -+ nm.usmblks = m->max_footprint; -+ nm.uordblks = m->footprint - mfree; -+ nm.fordblks = mfree; -+ nm.keepcost = m->topsize; -+ } -+ -+ POSTACTION(m); -+ } -+ return nm; -+} -+#endif /* !NO_MALLINFO */ -+ -+static void internal_malloc_stats(mstate m) { -+ if (!PREACTION(m)) { -+ size_t maxfp = 0; -+ size_t fp = 0; -+ size_t used = 0; -+ check_malloc_state(m); -+ if (is_initialized(m)) { -+ msegmentptr s = &m->seg; -+ maxfp = m->max_footprint; -+ fp = m->footprint; -+ used = fp - (m->topsize + TOP_FOOT_SIZE); -+ -+ while (s != 0) { -+ mchunkptr q = align_as_chunk(s->base); -+ while (segment_holds(s, q) && -+ q != m->top && q->head != FENCEPOST_HEAD) { -+ if (!cinuse(q)) -+ used -= chunksize(q); -+ q = next_chunk(q); -+ } -+ s = s->next; -+ } -+ } -+ -+ fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); -+ fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); -+ fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); -+ -+ POSTACTION(m); -+ } -+} -+ -+/* ----------------------- Operations on smallbins ----------------------- */ -+ -+/* -+ Various forms of linking and unlinking are defined as macros. Even -+ the ones for trees, which are very long but have very short typical -+ paths. This is ugly but reduces reliance on inlining support of -+ compilers. -+*/ -+ -+/* Link a free chunk into a smallbin */ -+#define insert_small_chunk(M, P, S) {\ -+ bindex_t I = small_index(S);\ -+ mchunkptr B = smallbin_at(M, I);\ -+ mchunkptr F = B;\ -+ assert(S >= MIN_CHUNK_SIZE);\ -+ if (!smallmap_is_marked(M, I))\ -+ mark_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, B->fd)))\ -+ F = B->fd;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ B->fd = P;\ -+ F->bk = P;\ -+ P->fd = F;\ -+ P->bk = B;\ -+} -+ -+/* Unlink a chunk from a smallbin */ -+#define unlink_small_chunk(M, P, S) {\ -+ mchunkptr F = P->fd;\ -+ mchunkptr B = P->bk;\ -+ bindex_t I = small_index(S);\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (F == B)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ -+ (B == smallbin_at(M,I) || ok_address(M, B)))) {\ -+ F->bk = B;\ -+ B->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} -+ -+/* Unlink the first chunk from a smallbin */ -+#define unlink_first_small_chunk(M, B, P, I) {\ -+ mchunkptr F = P->fd;\ -+ assert(P != B);\ -+ assert(P != F);\ -+ assert(chunksize(P) == small_index2size(I));\ -+ if (B == F)\ -+ clear_smallmap(M, I);\ -+ else if (RTCHECK(ok_address(M, F))) {\ -+ B->fd = F;\ -+ F->bk = B;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+} -+ -+/* Replace dv node, binning the old one */ -+/* Used only when dvsize known to be small */ -+#define replace_dv(M, P, S) {\ -+ size_t DVS = M->dvsize;\ -+ if (DVS != 0) {\ -+ mchunkptr DV = M->dv;\ -+ assert(is_small(DVS));\ -+ insert_small_chunk(M, DV, DVS);\ -+ }\ -+ M->dvsize = S;\ -+ M->dv = P;\ -+} -+ -+/* ------------------------- Operations on trees ------------------------- */ -+ -+/* Insert chunk into tree */ -+#define insert_large_chunk(M, X, S) {\ -+ tbinptr* H;\ -+ bindex_t I;\ -+ compute_tree_index(S, I);\ -+ H = treebin_at(M, I);\ -+ X->index = I;\ -+ X->child[0] = X->child[1] = 0;\ -+ if (!treemap_is_marked(M, I)) {\ -+ mark_treemap(M, I);\ -+ *H = X;\ -+ X->parent = (tchunkptr)H;\ -+ X->fd = X->bk = X;\ -+ }\ -+ else {\ -+ tchunkptr T = *H;\ -+ size_t K = S << leftshift_for_tree_index(I);\ -+ for (;;) {\ -+ if (chunksize(T) != S) {\ -+ tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ -+ K <<= 1;\ -+ if (*C != 0)\ -+ T = *C;\ -+ else if (RTCHECK(ok_address(M, C))) {\ -+ *C = X;\ -+ X->parent = T;\ -+ X->fd = X->bk = X;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr F = T->fd;\ -+ if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ -+ T->fd = F->bk = X;\ -+ X->fd = F;\ -+ X->bk = T;\ -+ X->parent = 0;\ -+ break;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ break;\ -+ }\ -+ }\ -+ }\ -+ }\ -+} -+ -+/* -+ Unlink steps: -+ -+ 1. If x is a chained node, unlink it from its same-sized fd/bk links -+ and choose its bk node as its replacement. -+ 2. If x was the last node of its size, but not a leaf node, it must -+ be replaced with a leaf node (not merely one with an open left or -+ right), to make sure that lefts and rights of descendants -+ correspond properly to bit masks. We use the rightmost descendant -+ of x. We could use any other leaf, but this is easy to locate and -+ tends to counteract removal of leftmosts elsewhere, and so keeps -+ paths shorter than minimally guaranteed. This doesn't loop much -+ because on average a node in a tree is near the bottom. -+ 3. If x is the base of a chain (i.e., has parent links) relink -+ x's parent and children to x's replacement (or null if none). -+*/ -+ -+#define unlink_large_chunk(M, X) {\ -+ tchunkptr XP = X->parent;\ -+ tchunkptr R;\ -+ if (X->bk != X) {\ -+ tchunkptr F = X->fd;\ -+ R = X->bk;\ -+ if (RTCHECK(ok_address(M, F))) {\ -+ F->bk = R;\ -+ R->fd = F;\ -+ }\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else {\ -+ tchunkptr* RP;\ -+ if (((R = *(RP = &(X->child[1]))) != 0) ||\ -+ ((R = *(RP = &(X->child[0]))) != 0)) {\ -+ tchunkptr* CP;\ -+ while ((*(CP = &(R->child[1])) != 0) ||\ -+ (*(CP = &(R->child[0])) != 0)) {\ -+ R = *(RP = CP);\ -+ }\ -+ if (RTCHECK(ok_address(M, RP)))\ -+ *RP = 0;\ -+ else {\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ }\ -+ if (XP != 0) {\ -+ tbinptr* H = treebin_at(M, X->index);\ -+ if (X == *H) {\ -+ if ((*H = R) == 0) \ -+ clear_treemap(M, X->index);\ -+ }\ -+ else if (RTCHECK(ok_address(M, XP))) {\ -+ if (XP->child[0] == X) \ -+ XP->child[0] = R;\ -+ else \ -+ XP->child[1] = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ if (R != 0) {\ -+ if (RTCHECK(ok_address(M, R))) {\ -+ tchunkptr C0, C1;\ -+ R->parent = XP;\ -+ if ((C0 = X->child[0]) != 0) {\ -+ if (RTCHECK(ok_address(M, C0))) {\ -+ R->child[0] = C0;\ -+ C0->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ if ((C1 = X->child[1]) != 0) {\ -+ if (RTCHECK(ok_address(M, C1))) {\ -+ R->child[1] = C1;\ -+ C1->parent = R;\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+ else\ -+ CORRUPTION_ERROR_ACTION(M);\ -+ }\ -+ }\ -+} -+ -+/* Relays to large vs small bin operations */ -+ -+#define insert_chunk(M, P, S)\ -+ if (is_small(S)) insert_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } -+ -+#define unlink_chunk(M, P, S)\ -+ if (is_small(S)) unlink_small_chunk(M, P, S)\ -+ else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } -+ -+ -+/* Relays to internal calls to malloc/free from realloc, memalign etc */ -+ -+#if ONLY_MSPACES -+#define internal_malloc(m, b) mspace_malloc(m, b) -+#define internal_free(m, mem) mspace_free(m,mem); -+#else /* ONLY_MSPACES */ -+#if MSPACES -+#define internal_malloc(m, b)\ -+ (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -+#define internal_free(m, mem)\ -+ if (m == gm) dlfree(mem); else mspace_free(m,mem); -+#else /* MSPACES */ -+#define internal_malloc(m, b) dlmalloc(b) -+#define internal_free(m, mem) dlfree(mem) -+#endif /* MSPACES */ -+#endif /* ONLY_MSPACES */ -+ -+/* ----------------------- Direct-mmapping chunks ----------------------- */ -+ -+/* -+ Directly mmapped chunks are set up with an offset to the start of -+ the mmapped region stored in the prev_foot field of the chunk. This -+ allows reconstruction of the required argument to MUNMAP when freed, -+ and also allows adjustment of the returned chunk to meet alignment -+ requirements (especially in memalign). There is also enough space -+ allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain -+ the PINUSE bit so frees can be checked. -+*/ -+ -+/* Malloc using mmap */ -+static void* mmap_alloc(mstate m, size_t nb) { -+ size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ if (mmsize > nb) { /* Check for wrap around 0 */ -+ char* mm = (char*)(DIRECT_MMAP(mmsize)); -+ if (mm != CMFAIL) { -+ size_t offset = align_offset(chunk2mem(mm)); -+ size_t psize = mmsize - offset - MMAP_FOOT_PAD; -+ mchunkptr p = (mchunkptr)(mm + offset); -+ p->prev_foot = offset | IS_MMAPPED_BIT; -+ (p)->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, p, psize); -+ chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; -+ -+ if (mm < m->least_addr) -+ m->least_addr = mm; -+ if ((m->footprint += mmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ assert(is_aligned(chunk2mem(p))); -+ check_mmapped_chunk(m, p); -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} -+ -+/* Realloc using mmap */ -+static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { -+ size_t oldsize = chunksize(oldp); -+ if (is_small(nb)) /* Can't shrink mmap regions below small size */ -+ return 0; -+ /* Keep old chunk if big enough but not too big */ -+ if (oldsize >= nb + SIZE_T_SIZE && -+ (oldsize - nb) <= (mparams.granularity << 1)) -+ return oldp; -+ else { -+ size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; -+ size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; -+ size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + -+ CHUNK_ALIGN_MASK); -+ char* cp = (char*)CALL_MREMAP((char*)oldp - offset, -+ oldmmsize, newmmsize, 1); -+ if (cp != CMFAIL) { -+ mchunkptr newp = (mchunkptr)(cp + offset); -+ size_t psize = newmmsize - offset - MMAP_FOOT_PAD; -+ newp->head = (psize|CINUSE_BIT); -+ mark_inuse_foot(m, newp, psize); -+ chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; -+ chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; -+ -+ if (cp < m->least_addr) -+ m->least_addr = cp; -+ if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ check_mmapped_chunk(m, newp); -+ return newp; -+ } -+ } -+ return 0; -+} -+ -+/* -------------------------- mspace management -------------------------- */ -+ -+/* Initialize top chunk and its size */ -+static void init_top(mstate m, mchunkptr p, size_t psize) { -+ /* Ensure alignment */ -+ size_t offset = align_offset(chunk2mem(p)); -+ p = (mchunkptr)((char*)p + offset); -+ psize -= offset; -+ -+ m->top = p; -+ m->topsize = psize; -+ p->head = psize | PINUSE_BIT; -+ /* set size of fake trailing chunk holding overhead space only once */ -+ chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; -+ m->trim_check = mparams.trim_threshold; /* reset on each update */ -+} -+ -+/* Initialize bins for a new mstate that is otherwise zeroed out */ -+static void init_bins(mstate m) { -+ /* Establish circular links for smallbins */ -+ bindex_t i; -+ for (i = 0; i < NSMALLBINS; ++i) { -+ sbinptr bin = smallbin_at(m,i); -+ bin->fd = bin->bk = bin; -+ } -+} -+ -+#if PROCEED_ON_ERROR -+ -+/* default corruption action */ -+static void reset_on_error(mstate m) { -+ int i; -+ ++malloc_corruption_error_count; -+ /* Reinitialize fields to forget about all memory */ -+ m->smallbins = m->treebins = 0; -+ m->dvsize = m->topsize = 0; -+ m->seg.base = 0; -+ m->seg.size = 0; -+ m->seg.next = 0; -+ m->top = m->dv = 0; -+ for (i = 0; i < NTREEBINS; ++i) -+ *treebin_at(m, i) = 0; -+ init_bins(m); -+} -+#endif /* PROCEED_ON_ERROR */ -+ -+/* Allocate chunk and prepend remainder with chunk in successor base. */ -+static void* prepend_alloc(mstate m, char* newbase, char* oldbase, -+ size_t nb) { -+ mchunkptr p = align_as_chunk(newbase); -+ mchunkptr oldfirst = align_as_chunk(oldbase); -+ size_t psize = (char*)oldfirst - (char*)p; -+ mchunkptr q = chunk_plus_offset(p, nb); -+ size_t qsize = psize - nb; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); -+ -+ assert((char*)oldfirst > (char*)q); -+ assert(pinuse(oldfirst)); -+ assert(qsize >= MIN_CHUNK_SIZE); -+ -+ /* consolidate remainder with first chunk of old base */ -+ if (oldfirst == m->top) { -+ size_t tsize = m->topsize += qsize; -+ m->top = q; -+ q->head = tsize | PINUSE_BIT; -+ check_top_chunk(m, q); -+ } -+ else if (oldfirst == m->dv) { -+ size_t dsize = m->dvsize += qsize; -+ m->dv = q; -+ set_size_and_pinuse_of_free_chunk(q, dsize); -+ } -+ else { -+ if (!cinuse(oldfirst)) { -+ size_t nsize = chunksize(oldfirst); -+ unlink_chunk(m, oldfirst, nsize); -+ oldfirst = chunk_plus_offset(oldfirst, nsize); -+ qsize += nsize; -+ } -+ set_free_with_pinuse(q, qsize, oldfirst); -+ insert_chunk(m, q, qsize); -+ check_free_chunk(m, q); -+ } -+ -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+} -+ -+ -+/* Add a segment to hold a new noncontiguous region */ -+static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { -+ /* Determine locations and sizes of segment, fenceposts, old top */ -+ char* old_top = (char*)m->top; -+ msegmentptr oldsp = segment_holding(m, old_top); -+ char* old_end = oldsp->base + oldsp->size; -+ size_t ssize = pad_request(sizeof(struct malloc_segment)); -+ char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); -+ size_t offset = align_offset(chunk2mem(rawsp)); -+ char* asp = rawsp + offset; -+ char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; -+ mchunkptr sp = (mchunkptr)csp; -+ msegmentptr ss = (msegmentptr)(chunk2mem(sp)); -+ mchunkptr tnext = chunk_plus_offset(sp, ssize); -+ mchunkptr p = tnext; -+ int nfences = 0; -+ -+ /* reset top to new space */ -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); -+ -+ /* Set up segment record */ -+ assert(is_aligned(ss)); -+ set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); -+ *ss = m->seg; /* Push current record */ -+ m->seg.base = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmapped); -+ m->seg.next = ss; -+ -+ /* Insert trailing fenceposts */ -+ for (;;) { -+ mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); -+ p->head = FENCEPOST_HEAD; -+ ++nfences; -+ if ((char*)(&(nextp->head)) < old_end) -+ p = nextp; -+ else -+ break; -+ } -+ assert(nfences >= 2); -+ -+ /* Insert the rest of old top into a bin as an ordinary free chunk */ -+ if (csp != old_top) { -+ mchunkptr q = (mchunkptr)old_top; -+ size_t psize = csp - old_top; -+ mchunkptr tn = chunk_plus_offset(q, psize); -+ set_free_with_pinuse(q, psize, tn); -+ insert_chunk(m, q, psize); -+ } -+ -+ check_top_chunk(m, m->top); -+} -+ -+/* -------------------------- System allocation -------------------------- */ -+ -+/* Get memory from system using MORECORE or MMAP */ -+static void* sys_alloc(mstate m, size_t nb) { -+ char* tbase = CMFAIL; -+ size_t tsize = 0; -+ flag_t mmap_flag = 0; -+ -+ init_mparams(); -+ -+ /* Directly map large chunks */ -+ if (use_mmap(m) && nb >= mparams.mmap_threshold) { -+ void* mem = mmap_alloc(m, nb); -+ if (mem != 0) -+ return mem; -+ } -+ -+ /* -+ Try getting memory in any of three ways (in most-preferred to -+ least-preferred order): -+ 1. A call to MORECORE that can normally contiguously extend memory. -+ (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or -+ or main space is mmapped or a previous contiguous call failed) -+ 2. A call to MMAP new space (disabled if not HAVE_MMAP). -+ Note that under the default settings, if MORECORE is unable to -+ fulfill a request, and HAVE_MMAP is true, then mmap is -+ used as a noncontiguous system allocator. This is a useful backup -+ strategy for systems with holes in address spaces -- in this case -+ sbrk cannot contiguously expand the heap, but mmap may be able to -+ find space. -+ 3. A call to MORECORE that cannot usually contiguously extend memory. -+ (disabled if not HAVE_MORECORE) -+ */ -+ -+ if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { -+ char* br = CMFAIL; -+ msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); -+ size_t asize = 0; -+ ACQUIRE_MORECORE_LOCK(); -+ -+ if (ss == 0) { /* First time through or recovery */ -+ char* base = (char*)CALL_MORECORE(0); -+ if (base != CMFAIL) { -+ asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Adjust to end on a page boundary */ -+ if (!is_page_aligned(base)) -+ asize += (page_align((size_t)base) - (size_t)base); -+ /* Can't call MORECORE if size is negative when treated as signed */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == base) { -+ tbase = base; -+ tsize = asize; -+ } -+ } -+ } -+ else { -+ /* Subtract out existing available top space from MORECORE request. */ -+ asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); -+ /* Use mem here only if it did continuously extend old space */ -+ if (asize < HALF_MAX_SIZE_T && -+ (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { -+ tbase = br; -+ tsize = asize; -+ } -+ } -+ -+ if (tbase == CMFAIL) { /* Cope with partial failure */ -+ if (br != CMFAIL) { /* Try to use/extend the space we did get */ -+ if (asize < HALF_MAX_SIZE_T && -+ asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { -+ size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); -+ if (esize < HALF_MAX_SIZE_T) { -+ char* end = (char*)CALL_MORECORE(esize); -+ if (end != CMFAIL) -+ asize += esize; -+ else { /* Can't use; try to release */ -+ (void)CALL_MORECORE(-asize); -+ br = CMFAIL; -+ } -+ } -+ } -+ } -+ if (br != CMFAIL) { /* Use the space we did get */ -+ tbase = br; -+ tsize = asize; -+ } -+ else -+ disable_contiguous(m); /* Don't try contiguous path in the future */ -+ } -+ -+ RELEASE_MORECORE_LOCK(); -+ } -+ -+ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ -+ size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; -+ size_t rsize = granularity_align(req); -+ if (rsize > nb) { /* Fail if wraps around zero */ -+ char* mp = (char*)(CALL_MMAP(rsize)); -+ if (mp != CMFAIL) { -+ tbase = mp; -+ tsize = rsize; -+ mmap_flag = IS_MMAPPED_BIT; -+ } -+ } -+ } -+ -+ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ -+ size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); -+ if (asize < HALF_MAX_SIZE_T) { -+ char* br = CMFAIL; -+ char* end = CMFAIL; -+ ACQUIRE_MORECORE_LOCK(); -+ br = (char*)(CALL_MORECORE(asize)); -+ end = (char*)(CALL_MORECORE(0)); -+ RELEASE_MORECORE_LOCK(); -+ if (br != CMFAIL && end != CMFAIL && br < end) { -+ size_t ssize = end - br; -+ if (ssize > nb + TOP_FOOT_SIZE) { -+ tbase = br; -+ tsize = ssize; -+ } -+ } -+ } -+ } -+ -+ if (tbase != CMFAIL) { -+ -+ if ((m->footprint += tsize) > m->max_footprint) -+ m->max_footprint = m->footprint; -+ -+ if (!is_initialized(m)) { /* first-time initialization */ -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = tsize; -+ (void)set_segment_flags(&m->seg, mmap_flag); -+ m->magic = mparams.magic; -+ init_bins(m); -+ if (is_global(m)) -+ init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); -+ else { -+ /* Offset top by embedded malloc_state */ -+ mchunkptr mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); -+ } -+ } -+ -+ else { -+ /* Try to merge with an existing segment */ -+ msegmentptr sp = &m->seg; -+ while (sp != 0 && tbase != sp->base + sp->size) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && -+ segment_holds(sp, m->top)) { /* append */ -+ sp->size += tsize; -+ init_top(m, m->top, m->topsize + tsize); -+ } -+ else { -+ if (tbase < m->least_addr) -+ m->least_addr = tbase; -+ sp = &m->seg; -+ while (sp != 0 && sp->base != tbase + tsize) -+ sp = sp->next; -+ if (sp != 0 && -+ !is_extern_segment(sp) && -+ check_segment_merge(sp, tbase, tsize) && -+ (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { -+ char* oldbase = sp->base; -+ sp->base = tbase; -+ sp->size += tsize; -+ return prepend_alloc(m, tbase, oldbase, nb); -+ } -+ else -+ add_segment(m, tbase, tsize, mmap_flag); -+ } -+ } -+ -+ if (nb < m->topsize) { /* Allocate from new or extended top space */ -+ size_t rsize = m->topsize -= nb; -+ mchunkptr p = m->top; -+ mchunkptr r = m->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(m, p, nb); -+ check_top_chunk(m, m->top); -+ check_malloced_chunk(m, chunk2mem(p), nb); -+ return chunk2mem(p); -+ } -+ } -+ -+ MALLOC_FAILURE_ACTION; -+ return 0; -+} -+ -+/* ----------------------- system deallocation -------------------------- */ -+ -+/* Unmap and unlink any mmapped segments that don't contain used chunks */ -+static size_t release_unused_segments(mstate m) { -+ size_t released = 0; -+ msegmentptr pred = &m->seg; -+ msegmentptr sp = pred->next; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ msegmentptr next = sp->next; -+ if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { -+ mchunkptr p = align_as_chunk(base); -+ size_t psize = chunksize(p); -+ /* Can unmap if first chunk holds entire segment and not pinned */ -+ if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { -+ tchunkptr tp = (tchunkptr)p; -+ assert(segment_holds(sp, (char*)sp)); -+ if (p == m->dv) { -+ m->dv = 0; -+ m->dvsize = 0; -+ } -+ else { -+ unlink_large_chunk(m, tp); -+ } -+ if (CALL_MUNMAP(base, size) == 0) { -+ released += size; -+ m->footprint -= size; -+ /* unlink obsoleted record */ -+ sp = pred; -+ sp->next = next; -+ } -+ else { /* back out if cannot unmap */ -+ insert_large_chunk(m, tp, psize); -+ } -+ } -+ } -+ pred = sp; -+ sp = next; -+ } -+ return released; -+} -+ -+static int sys_trim(mstate m, size_t pad) { -+ size_t released = 0; -+ if (pad < MAX_REQUEST && is_initialized(m)) { -+ pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ -+ -+ if (m->topsize > pad) { -+ /* Shrink top space in granularity-size units, keeping at least one */ -+ size_t unit = mparams.granularity; -+ size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - -+ SIZE_T_ONE) * unit; -+ msegmentptr sp = segment_holding(m, (char*)m->top); -+ -+ if (!is_extern_segment(sp)) { -+ if (is_mmapped_segment(sp)) { -+ if (HAVE_MMAP && -+ sp->size >= extra && -+ !has_segment_link(m, sp)) { /* can't shrink if pinned */ -+ size_t newsize = sp->size - extra; -+ /* Prefer mremap, fall back to munmap */ -+ if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || -+ (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { -+ released = extra; -+ } -+ } -+ } -+ else if (HAVE_MORECORE) { -+ if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ -+ extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; -+ ACQUIRE_MORECORE_LOCK(); -+ { -+ /* Make sure end of memory is where we last set it. */ -+ char* old_br = (char*)(CALL_MORECORE(0)); -+ if (old_br == sp->base + sp->size) { -+ char* rel_br = (char*)(CALL_MORECORE(-extra)); -+ char* new_br = (char*)(CALL_MORECORE(0)); -+ if (rel_br != CMFAIL && new_br < old_br) -+ released = old_br - new_br; -+ } -+ } -+ RELEASE_MORECORE_LOCK(); -+ } -+ } -+ -+ if (released != 0) { -+ sp->size -= released; -+ m->footprint -= released; -+ init_top(m, m->top, m->topsize - released); -+ check_top_chunk(m, m->top); -+ } -+ } -+ -+ /* Unmap any unused mmapped segments */ -+ if (HAVE_MMAP) -+ released += release_unused_segments(m); -+ -+ /* On failure, disable autotrim to avoid repeated failed future calls */ -+ if (released == 0) -+ m->trim_check = MAX_SIZE_T; -+ } -+ -+ return (released != 0)? 1 : 0; -+} -+ -+/* ---------------------------- malloc support --------------------------- */ -+ -+/* allocate a large request from the best fitting chunk in a treebin */ -+static void* tmalloc_large(mstate m, size_t nb) { -+ tchunkptr v = 0; -+ size_t rsize = -nb; /* Unsigned negation */ -+ tchunkptr t; -+ bindex_t idx; -+ compute_tree_index(nb, idx); -+ -+ if ((t = *treebin_at(m, idx)) != 0) { -+ /* Traverse tree for this bin looking for node with size == nb */ -+ size_t sizebits = nb << leftshift_for_tree_index(idx); -+ tchunkptr rst = 0; /* The deepest untaken right subtree */ -+ for (;;) { -+ tchunkptr rt; -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ v = t; -+ if ((rsize = trem) == 0) -+ break; -+ } -+ rt = t->child[1]; -+ t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; -+ if (rt != 0 && rt != t) -+ rst = rt; -+ if (t == 0) { -+ t = rst; /* set t to least subtree holding sizes > nb */ -+ break; -+ } -+ sizebits <<= 1; -+ } -+ } -+ -+ if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ -+ binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; -+ if (leftbits != 0) { -+ bindex_t i; -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ t = *treebin_at(m, i); -+ } -+ } -+ -+ while (t != 0) { /* find smallest of tree or subtree */ -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ t = leftmost_child(t); -+ } -+ -+ /* If dv is a better fit, return 0 so malloc will use it */ -+ if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { -+ if (RTCHECK(ok_address(m, v))) { /* split */ -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ insert_chunk(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } -+ CORRUPTION_ERROR_ACTION(m); -+ } -+ return 0; -+} -+ -+/* allocate a small request from the best fitting chunk in a treebin */ -+static void* tmalloc_small(mstate m, size_t nb) { -+ tchunkptr t, v; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leastbit = least_bit(m->treemap); -+ compute_bit2idx(leastbit, i); -+ -+ v = t = *treebin_at(m, i); -+ rsize = chunksize(t) - nb; -+ -+ while ((t = leftmost_child(t)) != 0) { -+ size_t trem = chunksize(t) - nb; -+ if (trem < rsize) { -+ rsize = trem; -+ v = t; -+ } -+ } -+ -+ if (RTCHECK(ok_address(m, v))) { -+ mchunkptr r = chunk_plus_offset(v, nb); -+ assert(chunksize(v) == rsize + nb); -+ if (RTCHECK(ok_next(v, r))) { -+ unlink_large_chunk(m, v); -+ if (rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(m, v, (rsize + nb)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(m, v, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(m, r, rsize); -+ } -+ return chunk2mem(v); -+ } -+ } -+ -+ CORRUPTION_ERROR_ACTION(m); -+ return 0; -+} -+ -+/* --------------------------- realloc support --------------------------- */ -+ -+static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { -+ if (bytes >= MAX_REQUEST) { -+ MALLOC_FAILURE_ACTION; -+ return 0; -+ } -+ if (!PREACTION(m)) { -+ mchunkptr oldp = mem2chunk(oldmem); -+ size_t oldsize = chunksize(oldp); -+ mchunkptr next = chunk_plus_offset(oldp, oldsize); -+ mchunkptr newp = 0; -+ void* extra = 0; -+ -+ /* Try to either shrink or extend into top. Else malloc-copy-free */ -+ -+ if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && -+ ok_next(oldp, next) && ok_pinuse(next))) { -+ size_t nb = request2size(bytes); -+ if (is_mmapped(oldp)) -+ newp = mmap_resize(m, oldp, nb); -+ else if (oldsize >= nb) { /* already big enough */ -+ size_t rsize = oldsize - nb; -+ newp = oldp; -+ if (rsize >= MIN_CHUNK_SIZE) { -+ mchunkptr remainder = chunk_plus_offset(newp, nb); -+ set_inuse(m, newp, nb); -+ set_inuse(m, remainder, rsize); -+ extra = chunk2mem(remainder); -+ } -+ } -+ else if (next == m->top && oldsize + m->topsize > nb) { -+ /* Expand into top */ -+ size_t newsize = oldsize + m->topsize; -+ size_t newtopsize = newsize - nb; -+ mchunkptr newtop = chunk_plus_offset(oldp, nb); -+ set_inuse(m, oldp, nb); -+ newtop->head = newtopsize |PINUSE_BIT; -+ m->top = newtop; -+ m->topsize = newtopsize; -+ newp = oldp; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(m, oldmem); -+ POSTACTION(m); -+ return 0; -+ } -+ -+ POSTACTION(m); -+ -+ if (newp != 0) { -+ if (extra != 0) { -+ internal_free(m, extra); -+ } -+ check_inuse_chunk(m, newp); -+ return chunk2mem(newp); -+ } -+ else { -+ void* newmem = internal_malloc(m, bytes); -+ if (newmem != 0) { -+ size_t oc = oldsize - overhead_for(oldp); -+ memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); -+ internal_free(m, oldmem); -+ } -+ return newmem; -+ } -+ } -+ return 0; -+} -+ -+/* --------------------------- memalign support -------------------------- */ -+ -+static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { -+ if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ -+ return internal_malloc(m, bytes); -+ if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ -+ alignment = MIN_CHUNK_SIZE; -+ if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ -+ size_t a = MALLOC_ALIGNMENT << 1; -+ while (a < alignment) a <<= 1; -+ alignment = a; -+ } -+ -+ if (bytes >= MAX_REQUEST - alignment) { -+ if (m != 0) { /* Test isn't needed but avoids compiler warning */ -+ MALLOC_FAILURE_ACTION; -+ } -+ } -+ else { -+ size_t nb = request2size(bytes); -+ size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; -+ char* mem = (char*)internal_malloc(m, req); -+ if (mem != 0) { -+ void* leader = 0; -+ void* trailer = 0; -+ mchunkptr p = mem2chunk(mem); -+ -+ if (PREACTION(m)) return 0; -+ if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ -+ /* -+ Find an aligned spot inside chunk. Since we need to give -+ back leading space in a chunk of at least MIN_CHUNK_SIZE, if -+ the first calculation places us at a spot with less than -+ MIN_CHUNK_SIZE leader, we can move to the next aligned spot. -+ We've allocated enough total room so that this is always -+ possible. -+ */ -+ char* br = (char*)mem2chunk((size_t)(((size_t)(mem + -+ alignment - -+ SIZE_T_ONE)) & -+ -alignment)); -+ char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? -+ br : br+alignment; -+ mchunkptr newp = (mchunkptr)pos; -+ size_t leadsize = pos - (char*)(p); -+ size_t newsize = chunksize(p) - leadsize; -+ -+ if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ -+ newp->prev_foot = p->prev_foot + leadsize; -+ newp->head = (newsize|CINUSE_BIT); -+ } -+ else { /* Otherwise, give back leader, use the rest */ -+ set_inuse(m, newp, newsize); -+ set_inuse(m, p, leadsize); -+ leader = chunk2mem(p); -+ } -+ p = newp; -+ } -+ -+ /* Give back spare room at the end */ -+ if (!is_mmapped(p)) { -+ size_t size = chunksize(p); -+ if (size > nb + MIN_CHUNK_SIZE) { -+ size_t remainder_size = size - nb; -+ mchunkptr remainder = chunk_plus_offset(p, nb); -+ set_inuse(m, p, nb); -+ set_inuse(m, remainder, remainder_size); -+ trailer = chunk2mem(remainder); -+ } -+ } -+ -+ assert (chunksize(p) >= nb); -+ assert((((size_t)(chunk2mem(p))) % alignment) == 0); -+ check_inuse_chunk(m, p); -+ POSTACTION(m); -+ if (leader != 0) { -+ internal_free(m, leader); -+ } -+ if (trailer != 0) { -+ internal_free(m, trailer); -+ } -+ return chunk2mem(p); -+ } -+ } -+ return 0; -+} -+ -+/* ------------------------ comalloc/coalloc support --------------------- */ -+ -+static void** ialloc(mstate m, -+ size_t n_elements, -+ size_t* sizes, -+ int opts, -+ void* chunks[]) { -+ /* -+ This provides common support for independent_X routines, handling -+ all of the combinations that can result. -+ -+ The opts arg has: -+ bit 0 set if all elements are same size (using sizes[0]) -+ bit 1 set if elements should be zeroed -+ */ -+ -+ size_t element_size; /* chunksize of each element, if all same */ -+ size_t contents_size; /* total size of elements */ -+ size_t array_size; /* request size of pointer array */ -+ void* mem; /* malloced aggregate space */ -+ mchunkptr p; /* corresponding chunk */ -+ size_t remainder_size; /* remaining bytes while splitting */ -+ void** marray; /* either "chunks" or malloced ptr array */ -+ mchunkptr array_chunk; /* chunk for malloced ptr array */ -+ flag_t was_enabled; /* to disable mmap */ -+ size_t size; -+ size_t i; -+ -+ /* compute array length, if needed */ -+ if (chunks != 0) { -+ if (n_elements == 0) -+ return chunks; /* nothing to do */ -+ marray = chunks; -+ array_size = 0; -+ } -+ else { -+ /* if empty req, must still return chunk representing empty array */ -+ if (n_elements == 0) -+ return (void**)internal_malloc(m, 0); -+ marray = 0; -+ array_size = request2size(n_elements * (sizeof(void*))); -+ } -+ -+ /* compute total element size */ -+ if (opts & 0x1) { /* all-same-size */ -+ element_size = request2size(*sizes); -+ contents_size = n_elements * element_size; -+ } -+ else { /* add up all the sizes */ -+ element_size = 0; -+ contents_size = 0; -+ for (i = 0; i != n_elements; ++i) -+ contents_size += request2size(sizes[i]); -+ } -+ -+ size = contents_size + array_size; -+ -+ /* -+ Allocate the aggregate chunk. First disable direct-mmapping so -+ malloc won't use it, since we would not be able to later -+ free/realloc space internal to a segregated mmap region. -+ */ -+ was_enabled = use_mmap(m); -+ disable_mmap(m); -+ mem = internal_malloc(m, size - CHUNK_OVERHEAD); -+ if (was_enabled) -+ enable_mmap(m); -+ if (mem == 0) -+ return 0; -+ -+ if (PREACTION(m)) return 0; -+ p = mem2chunk(mem); -+ remainder_size = chunksize(p); -+ -+ assert(!is_mmapped(p)); -+ -+ if (opts & 0x2) { /* optionally clear the elements */ -+ memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); -+ } -+ -+ /* If not provided, allocate the pointer array as final part of chunk */ -+ if (marray == 0) { -+ size_t array_chunk_size; -+ array_chunk = chunk_plus_offset(p, contents_size); -+ array_chunk_size = remainder_size - contents_size; -+ marray = (void**) (chunk2mem(array_chunk)); -+ set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); -+ remainder_size = contents_size; -+ } -+ -+ /* split out elements */ -+ for (i = 0; ; ++i) { -+ marray[i] = chunk2mem(p); -+ if (i != n_elements-1) { -+ if (element_size != 0) -+ size = element_size; -+ else -+ size = request2size(sizes[i]); -+ remainder_size -= size; -+ set_size_and_pinuse_of_inuse_chunk(m, p, size); -+ p = chunk_plus_offset(p, size); -+ } -+ else { /* the final element absorbs any overallocation slop */ -+ set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); -+ break; -+ } -+ } -+ -+#if DEBUG -+ if (marray != chunks) { -+ /* final element must have exactly exhausted chunk */ -+ if (element_size != 0) { -+ assert(remainder_size == element_size); -+ } -+ else { -+ assert(remainder_size == request2size(sizes[i])); -+ } -+ check_inuse_chunk(m, mem2chunk(marray)); -+ } -+ for (i = 0; i != n_elements; ++i) -+ check_inuse_chunk(m, mem2chunk(marray[i])); -+ -+#endif /* DEBUG */ -+ -+ POSTACTION(m); -+ return marray; -+} -+ -+ -+/* -------------------------- public routines ---------------------------- */ -+ -+#if !ONLY_MSPACES -+ -+void* dlmalloc(size_t bytes) { -+ /* -+ Basic algorithm: -+ If a small request (< 256 bytes minus per-chunk overhead): -+ 1. If one exists, use a remainderless chunk in associated smallbin. -+ (Remainderless means that there are too few excess bytes to -+ represent as a chunk.) -+ 2. If it is big enough, use the dv chunk, which is normally the -+ chunk adjacent to the one used for the most recent small request. -+ 3. If one exists, split the smallest available chunk in a bin, -+ saving remainder in dv. -+ 4. If it is big enough, use the top chunk. -+ 5. If available, get memory from system and use it -+ Otherwise, for a large request: -+ 1. Find the smallest available binned chunk that fits, and use it -+ if it is better fitting than dv chunk, splitting if necessary. -+ 2. If better fitting than any binned chunk, use the dv chunk. -+ 3. If it is big enough, use the top chunk. -+ 4. If request size >= mmap threshold, try to directly mmap this chunk. -+ 5. If available, get memory from system and use it -+ -+ The ugly goto's here ensure that postaction occurs along all paths. -+ */ -+ -+ if (!PREACTION(gm)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = gm->smallmap >> idx; -+ -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(gm, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(gm, b, p, idx); -+ set_inuse_and_pinuse(gm, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb > gm->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(gm, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(gm, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(gm, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(gm, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ } -+ -+ if (nb <= gm->dvsize) { -+ size_t rsize = gm->dvsize - nb; -+ mchunkptr p = gm->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = gm->dv = chunk_plus_offset(p, nb); -+ gm->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = gm->dvsize; -+ gm->dvsize = 0; -+ gm->dv = 0; -+ set_inuse_and_pinuse(gm, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb < gm->topsize) { /* Split top */ -+ size_t rsize = gm->topsize -= nb; -+ mchunkptr p = gm->top; -+ mchunkptr r = gm->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(gm, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(gm, gm->top); -+ check_malloced_chunk(gm, mem, nb); -+ goto postaction; -+ } -+ -+ mem = sys_alloc(gm, nb); -+ -+ postaction: -+ POSTACTION(gm); -+ return mem; -+ } -+ -+ return 0; -+} -+ -+void dlfree(void* mem) { -+ /* -+ Consolidate freed chunks with preceding or succeeding bordering -+ free chunks, if they exist, and then place in a bin. Intermixed -+ with special cases for top, dv, mmapped chunks, and usage errors. -+ */ -+ -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+#else /* FOOTERS */ -+#define fm gm -+#endif /* FOOTERS */ -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } -+ -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+#if !FOOTERS -+#undef fm -+#endif /* FOOTERS */ -+} -+ -+void* dlcalloc(size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = dlmalloc(req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} -+ -+void* dlrealloc(void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return dlmalloc(bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ dlfree(oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if ! FOOTERS -+ mstate m = gm; -+#else /* FOOTERS */ -+ mstate m = get_mstate_for(mem2chunk(oldmem)); -+ if (!ok_magic(m)) { -+ USAGE_ERROR_ACTION(m, oldmem); -+ return 0; -+ } -+#endif /* FOOTERS */ -+ return internal_realloc(m, oldmem, bytes); -+ } -+} -+ -+void* dlmemalign(size_t alignment, size_t bytes) { -+ return internal_memalign(gm, alignment, bytes); -+} -+ -+void** dlindependent_calloc(size_t n_elements, size_t elem_size, -+ void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ return ialloc(gm, n_elements, &sz, 3, chunks); -+} -+ -+void** dlindependent_comalloc(size_t n_elements, size_t sizes[], -+ void* chunks[]) { -+ return ialloc(gm, n_elements, sizes, 0, chunks); -+} -+ -+void* dlvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, bytes); -+} -+ -+void* dlpvalloc(size_t bytes) { -+ size_t pagesz; -+ init_mparams(); -+ pagesz = mparams.page_size; -+ return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -+} -+ -+int dlmalloc_trim(size_t pad) { -+ int result = 0; -+ if (!PREACTION(gm)) { -+ result = sys_trim(gm, pad); -+ POSTACTION(gm); -+ } -+ return result; -+} -+ -+size_t dlmalloc_footprint(void) { -+ return gm->footprint; -+} -+ -+size_t dlmalloc_max_footprint(void) { -+ return gm->max_footprint; -+} -+ -+#if !NO_MALLINFO -+struct mallinfo dlmallinfo(void) { -+ return internal_mallinfo(gm); -+} -+#endif /* NO_MALLINFO */ -+ -+void dlmalloc_stats() { -+ internal_malloc_stats(gm); -+} -+ -+size_t dlmalloc_usable_size(void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+ if (cinuse(p)) -+ return chunksize(p) - overhead_for(p); -+ } -+ return 0; -+} -+ -+int dlmallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} -+ -+#endif /* !ONLY_MSPACES */ -+ -+/* ----------------------------- user mspaces ---------------------------- */ -+ -+#if MSPACES -+ -+static mstate init_user_mstate(char* tbase, size_t tsize) { -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ mchunkptr mn; -+ mchunkptr msp = align_as_chunk(tbase); -+ mstate m = (mstate)(chunk2mem(msp)); -+ memset(m, 0, msize); -+ INITIAL_LOCK(&m->mutex); -+ msp->head = (msize|PINUSE_BIT|CINUSE_BIT); -+ m->seg.base = m->least_addr = tbase; -+ m->seg.size = m->footprint = m->max_footprint = tsize; -+ m->magic = mparams.magic; -+ m->mflags = mparams.default_mflags; -+ disable_contiguous(m); -+ init_bins(m); -+ mn = next_chunk(mem2chunk(m)); -+ init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); -+ check_top_chunk(m, m->top); -+ return m; -+} -+ -+mspace create_mspace(size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ -+ -+ if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ size_t rs = ((capacity == 0)? mparams.granularity : -+ (capacity + TOP_FOOT_SIZE + msize)); -+ size_t tsize = granularity_align(rs); -+ char* tbase = (char*)(CALL_MMAP(tsize)); -+ if (tbase != CMFAIL) { -+ m = init_user_mstate(tbase, tsize); -+ set_segment_flags(&m->seg, IS_MMAPPED_BIT); -+ set_lock(m, locked); -+ } -+ } -+ return (mspace)m; -+} -+ -+mspace create_mspace_with_base(void* base, size_t capacity, int locked) { -+ mstate m = 0; -+ size_t msize = pad_request(sizeof(struct malloc_state)); -+ init_mparams(); /* Ensure pagesize etc initialized */ -+ -+ if (capacity > msize + TOP_FOOT_SIZE && -+ capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { -+ m = init_user_mstate((char*)base, capacity); -+ set_segment_flags(&m->seg, EXTERN_BIT); -+ set_lock(m, locked); -+ } -+ return (mspace)m; -+} -+ -+size_t destroy_mspace(mspace msp) { -+ size_t freed = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ msegmentptr sp = &ms->seg; -+ while (sp != 0) { -+ char* base = sp->base; -+ size_t size = sp->size; -+ flag_t flag = get_segment_flags(sp); -+ sp = sp->next; -+ if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && -+ CALL_MUNMAP(base, size) == 0) -+ freed += size; -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return freed; -+} -+ -+/* -+ mspace versions of routines are near-clones of the global -+ versions. This is not so nice but better than the alternatives. -+*/ -+ -+ -+void* mspace_malloc(mspace msp, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (!PREACTION(ms)) { -+ void* mem; -+ size_t nb; -+ if (bytes <= MAX_SMALL_REQUEST) { -+ bindex_t idx; -+ binmap_t smallbits; -+ nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); -+ idx = small_index(nb); -+ smallbits = ms->smallmap >> idx; -+ -+ if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ -+ mchunkptr b, p; -+ idx += ~smallbits & 1; /* Uses next bin if idx empty */ -+ b = smallbin_at(ms, idx); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(idx)); -+ unlink_first_small_chunk(ms, b, p, idx); -+ set_inuse_and_pinuse(ms, p, small_index2size(idx)); -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb > ms->dvsize) { -+ if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ -+ mchunkptr b, p, r; -+ size_t rsize; -+ bindex_t i; -+ binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); -+ binmap_t leastbit = least_bit(leftbits); -+ compute_bit2idx(leastbit, i); -+ b = smallbin_at(ms, i); -+ p = b->fd; -+ assert(chunksize(p) == small_index2size(i)); -+ unlink_first_small_chunk(ms, b, p, i); -+ rsize = small_index2size(i) - nb; -+ /* Fit here cannot be remainderless if 4byte sizes */ -+ if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) -+ set_inuse_and_pinuse(ms, p, small_index2size(i)); -+ else { -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ r = chunk_plus_offset(p, nb); -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ replace_dv(ms, r, rsize); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } -+ } -+ else if (bytes >= MAX_REQUEST) -+ nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ -+ else { -+ nb = pad_request(bytes); -+ if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ } -+ -+ if (nb <= ms->dvsize) { -+ size_t rsize = ms->dvsize - nb; -+ mchunkptr p = ms->dv; -+ if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ -+ mchunkptr r = ms->dv = chunk_plus_offset(p, nb); -+ ms->dvsize = rsize; -+ set_size_and_pinuse_of_free_chunk(r, rsize); -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ } -+ else { /* exhaust dv */ -+ size_t dvs = ms->dvsize; -+ ms->dvsize = 0; -+ ms->dv = 0; -+ set_inuse_and_pinuse(ms, p, dvs); -+ } -+ mem = chunk2mem(p); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ else if (nb < ms->topsize) { /* Split top */ -+ size_t rsize = ms->topsize -= nb; -+ mchunkptr p = ms->top; -+ mchunkptr r = ms->top = chunk_plus_offset(p, nb); -+ r->head = rsize | PINUSE_BIT; -+ set_size_and_pinuse_of_inuse_chunk(ms, p, nb); -+ mem = chunk2mem(p); -+ check_top_chunk(ms, ms->top); -+ check_malloced_chunk(ms, mem, nb); -+ goto postaction; -+ } -+ -+ mem = sys_alloc(ms, nb); -+ -+ postaction: -+ POSTACTION(ms); -+ return mem; -+ } -+ -+ return 0; -+} -+ -+void mspace_free(mspace msp, void* mem) { -+ if (mem != 0) { -+ mchunkptr p = mem2chunk(mem); -+#if FOOTERS -+ mstate fm = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate fm = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(fm)) { -+ USAGE_ERROR_ACTION(fm, p); -+ return; -+ } -+ if (!PREACTION(fm)) { -+ check_inuse_chunk(fm, p); -+ if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { -+ size_t psize = chunksize(p); -+ mchunkptr next = chunk_plus_offset(p, psize); -+ if (!pinuse(p)) { -+ size_t prevsize = p->prev_foot; -+ if ((prevsize & IS_MMAPPED_BIT) != 0) { -+ prevsize &= ~IS_MMAPPED_BIT; -+ psize += prevsize + MMAP_FOOT_PAD; -+ if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) -+ fm->footprint -= psize; -+ goto postaction; -+ } -+ else { -+ mchunkptr prev = chunk_minus_offset(p, prevsize); -+ psize += prevsize; -+ p = prev; -+ if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ -+ if (p != fm->dv) { -+ unlink_chunk(fm, p, prevsize); -+ } -+ else if ((next->head & INUSE_BITS) == INUSE_BITS) { -+ fm->dvsize = psize; -+ set_free_with_pinuse(p, psize, next); -+ goto postaction; -+ } -+ } -+ else -+ goto erroraction; -+ } -+ } -+ -+ if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { -+ if (!cinuse(next)) { /* consolidate forward */ -+ if (next == fm->top) { -+ size_t tsize = fm->topsize += psize; -+ fm->top = p; -+ p->head = tsize | PINUSE_BIT; -+ if (p == fm->dv) { -+ fm->dv = 0; -+ fm->dvsize = 0; -+ } -+ if (should_trim(fm, tsize)) -+ sys_trim(fm, 0); -+ goto postaction; -+ } -+ else if (next == fm->dv) { -+ size_t dsize = fm->dvsize += psize; -+ fm->dv = p; -+ set_size_and_pinuse_of_free_chunk(p, dsize); -+ goto postaction; -+ } -+ else { -+ size_t nsize = chunksize(next); -+ psize += nsize; -+ unlink_chunk(fm, next, nsize); -+ set_size_and_pinuse_of_free_chunk(p, psize); -+ if (p == fm->dv) { -+ fm->dvsize = psize; -+ goto postaction; -+ } -+ } -+ } -+ else -+ set_free_with_pinuse(p, psize, next); -+ insert_chunk(fm, p, psize); -+ check_free_chunk(fm, p); -+ goto postaction; -+ } -+ } -+ erroraction: -+ USAGE_ERROR_ACTION(fm, p); -+ postaction: -+ POSTACTION(fm); -+ } -+ } -+} -+ -+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { -+ void* mem; -+ size_t req = 0; -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ if (n_elements != 0) { -+ req = n_elements * elem_size; -+ if (((n_elements | elem_size) & ~(size_t)0xffff) && -+ (req / n_elements != elem_size)) -+ req = MAX_SIZE_T; /* force downstream failure on overflow */ -+ } -+ mem = internal_malloc(ms, req); -+ if (mem != 0 && calloc_must_clear(mem2chunk(mem))) -+ memset(mem, 0, req); -+ return mem; -+} -+ -+void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { -+ if (oldmem == 0) -+ return mspace_malloc(msp, bytes); -+#ifdef REALLOC_ZERO_BYTES_FREES -+ if (bytes == 0) { -+ mspace_free(msp, oldmem); -+ return 0; -+ } -+#endif /* REALLOC_ZERO_BYTES_FREES */ -+ else { -+#if FOOTERS -+ mchunkptr p = mem2chunk(oldmem); -+ mstate ms = get_mstate_for(p); -+#else /* FOOTERS */ -+ mstate ms = (mstate)msp; -+#endif /* FOOTERS */ -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_realloc(ms, oldmem, bytes); -+ } -+} -+ -+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return internal_memalign(ms, alignment, bytes); -+} -+ -+void** mspace_independent_calloc(mspace msp, size_t n_elements, -+ size_t elem_size, void* chunks[]) { -+ size_t sz = elem_size; /* serves as 1-element array */ -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, &sz, 3, chunks); -+} -+ -+void** mspace_independent_comalloc(mspace msp, size_t n_elements, -+ size_t sizes[], void* chunks[]) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ return 0; -+ } -+ return ialloc(ms, n_elements, sizes, 0, chunks); -+} -+ -+int mspace_trim(mspace msp, size_t pad) { -+ int result = 0; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ if (!PREACTION(ms)) { -+ result = sys_trim(ms, pad); -+ POSTACTION(ms); -+ } -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return result; -+} -+ -+void mspace_malloc_stats(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ internal_malloc_stats(ms); -+ } -+ else { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+} -+ -+size_t mspace_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} -+ -+ -+size_t mspace_max_footprint(mspace msp) { -+ size_t result; -+ mstate ms = (mstate)msp; -+ if (ok_magic(ms)) { -+ result = ms->max_footprint; -+ } -+ USAGE_ERROR_ACTION(ms,ms); -+ return result; -+} -+ -+ -+#if !NO_MALLINFO -+struct mallinfo mspace_mallinfo(mspace msp) { -+ mstate ms = (mstate)msp; -+ if (!ok_magic(ms)) { -+ USAGE_ERROR_ACTION(ms,ms); -+ } -+ return internal_mallinfo(ms); -+} -+#endif /* NO_MALLINFO */ -+ -+int mspace_mallopt(int param_number, int value) { -+ return change_mparam(param_number, value); -+} -+ -+#endif /* MSPACES */ -+ -+/* -------------------- Alternative MORECORE functions ------------------- */ -+ -+/* -+ Guidelines for creating a custom version of MORECORE: -+ -+ * For best performance, MORECORE should allocate in multiples of pagesize. -+ * MORECORE may allocate more memory than requested. (Or even less, -+ but this will usually result in a malloc failure.) -+ * MORECORE must not allocate memory when given argument zero, but -+ instead return one past the end address of memory from previous -+ nonzero call. -+ * For best performance, consecutive calls to MORECORE with positive -+ arguments should return increasing addresses, indicating that -+ space has been contiguously extended. -+ * Even though consecutive calls to MORECORE need not return contiguous -+ addresses, it must be OK for malloc'ed chunks to span multiple -+ regions in those cases where they do happen to be contiguous. -+ * MORECORE need not handle negative arguments -- it may instead -+ just return MFAIL when given negative arguments. -+ Negative arguments are always multiples of pagesize. MORECORE -+ must not misinterpret negative args as large positive unsigned -+ args. You can suppress all such calls from even occurring by defining -+ MORECORE_CANNOT_TRIM, -+ -+ As an example alternative MORECORE, here is a custom allocator -+ kindly contributed for pre-OSX macOS. It uses virtually but not -+ necessarily physically contiguous non-paged memory (locked in, -+ present and won't get swapped out). You can use it by uncommenting -+ this section, adding some #includes, and setting up the appropriate -+ defines above: -+ -+ #define MORECORE osMoreCore -+ -+ There is also a shutdown routine that should somehow be called for -+ cleanup upon program exit. -+ -+ #define MAX_POOL_ENTRIES 100 -+ #define MINIMUM_MORECORE_SIZE (64 * 1024U) -+ static int next_os_pool; -+ void *our_os_pools[MAX_POOL_ENTRIES]; -+ -+ void *osMoreCore(int size) -+ { -+ void *ptr = 0; -+ static void *sbrk_top = 0; -+ -+ if (size > 0) -+ { -+ if (size < MINIMUM_MORECORE_SIZE) -+ size = MINIMUM_MORECORE_SIZE; -+ if (CurrentExecutionLevel() == kTaskLevel) -+ ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); -+ if (ptr == 0) -+ { -+ return (void *) MFAIL; -+ } -+ // save ptrs so they can be freed during cleanup -+ our_os_pools[next_os_pool] = ptr; -+ next_os_pool++; -+ ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); -+ sbrk_top = (char *) ptr + size; -+ return ptr; -+ } -+ else if (size < 0) -+ { -+ // we don't currently support shrink behavior -+ return (void *) MFAIL; -+ } -+ else -+ { -+ return sbrk_top; -+ } -+ } -+ -+ // cleanup any allocated memory pools -+ // called as last thing before shutting down driver -+ -+ void osCleanupMem(void) -+ { -+ void **ptr; -+ -+ for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) -+ if (*ptr) -+ { -+ PoolDeallocate(*ptr); -+ *ptr = 0; -+ } -+ } -+ -+*/ -+ -+ -+/* ----------------------------------------------------------------------- -+History: -+ V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) -+ * Add max_footprint functions -+ * Ensure all appropriate literals are size_t -+ * Fix conditional compilation problem for some #define settings -+ * Avoid concatenating segments with the one provided -+ in create_mspace_with_base -+ * Rename some variables to avoid compiler shadowing warnings -+ * Use explicit lock initialization. -+ * Better handling of sbrk interference. -+ * Simplify and fix segment insertion, trimming and mspace_destroy -+ * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x -+ * Thanks especially to Dennis Flanagan for help on these. -+ -+ V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) -+ * Fix memalign brace error. -+ -+ V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) -+ * Fix improper #endif nesting in C++ -+ * Add explicit casts needed for C++ -+ -+ V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) -+ * Use trees for large bins -+ * Support mspaces -+ * Use segments to unify sbrk-based and mmap-based system allocation, -+ removing need for emulation on most platforms without sbrk. -+ * Default safety checks -+ * Optional footer checks. Thanks to William Robertson for the idea. -+ * Internal code refactoring -+ * Incorporate suggestions and platform-specific changes. -+ Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, -+ Aaron Bachmann, Emery Berger, and others. -+ * Speed up non-fastbin processing enough to remove fastbins. -+ * Remove useless cfree() to avoid conflicts with other apps. -+ * Remove internal memcpy, memset. Compilers handle builtins better. -+ * Remove some options that no one ever used and rename others. -+ -+ V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) -+ * Fix malloc_state bitmap array misdeclaration -+ -+ V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) -+ * Allow tuning of FIRST_SORTED_BIN_SIZE -+ * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. -+ * Better detection and support for non-contiguousness of MORECORE. -+ Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger -+ * Bypass most of malloc if no frees. Thanks To Emery Berger. -+ * Fix freeing of old top non-contiguous chunk im sysmalloc. -+ * Raised default trim and map thresholds to 256K. -+ * Fix mmap-related #defines. Thanks to Lubos Lunak. -+ * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. -+ * Branch-free bin calculation -+ * Default trim and mmap thresholds now 256K. -+ -+ V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) -+ * Introduce independent_comalloc and independent_calloc. -+ Thanks to Michael Pachos for motivation and help. -+ * Make optional .h file available -+ * Allow > 2GB requests on 32bit systems. -+ * new WIN32 sbrk, mmap, munmap, lock code from . -+ Thanks also to Andreas Mueller , -+ and Anonymous. -+ * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for -+ helping test this.) -+ * memalign: check alignment arg -+ * realloc: don't try to shift chunks backwards, since this -+ leads to more fragmentation in some programs and doesn't -+ seem to help in any others. -+ * Collect all cases in malloc requiring system memory into sysmalloc -+ * Use mmap as backup to sbrk -+ * Place all internal state in malloc_state -+ * Introduce fastbins (although similar to 2.5.1) -+ * Many minor tunings and cosmetic improvements -+ * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK -+ * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS -+ Thanks to Tony E. Bennett and others. -+ * Include errno.h to support default failure action. -+ -+ V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) -+ * return null for negative arguments -+ * Added Several WIN32 cleanups from Martin C. Fong -+ * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' -+ (e.g. WIN32 platforms) -+ * Cleanup header file inclusion for WIN32 platforms -+ * Cleanup code to avoid Microsoft Visual C++ compiler complaints -+ * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing -+ memory allocation routines -+ * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) -+ * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to -+ usage of 'assert' in non-WIN32 code -+ * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to -+ avoid infinite loop -+ * Always call 'fREe()' rather than 'free()' -+ -+ V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) -+ * Fixed ordering problem with boundary-stamping -+ -+ V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) -+ * Added pvalloc, as recommended by H.J. Liu -+ * Added 64bit pointer support mainly from Wolfram Gloger -+ * Added anonymously donated WIN32 sbrk emulation -+ * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen -+ * malloc_extend_top: fix mask error that caused wastage after -+ foreign sbrks -+ * Add linux mremap support code from HJ Liu -+ -+ V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) -+ * Integrated most documentation with the code. -+ * Add support for mmap, with help from -+ Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Use last_remainder in more cases. -+ * Pack bins using idea from colin@nyx10.cs.du.edu -+ * Use ordered bins instead of best-fit threshold -+ * Eliminate block-local decls to simplify tracing and debugging. -+ * Support another case of realloc via move into top -+ * Fix error occurring when initial sbrk_base not word-aligned. -+ * Rely on page size for units instead of SBRK_UNIT to -+ avoid surprises about sbrk alignment conventions. -+ * Add mallinfo, mallopt. Thanks to Raymond Nijssen -+ (raymond@es.ele.tue.nl) for the suggestion. -+ * Add `pad' argument to malloc_trim and top_pad mallopt parameter. -+ * More precautions for cases where other routines call sbrk, -+ courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). -+ * Added macros etc., allowing use in linux libc from -+ H.J. Lu (hjl@gnu.ai.mit.edu) -+ * Inverted this history list -+ -+ V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) -+ * Re-tuned and fixed to behave more nicely with V2.6.0 changes. -+ * Removed all preallocation code since under current scheme -+ the work required to undo bad preallocations exceeds -+ the work saved in good cases for most test programs. -+ * No longer use return list or unconsolidated bins since -+ no scheme using them consistently outperforms those that don't -+ given above changes. -+ * Use best fit for very large chunks to prevent some worst-cases. -+ * Added some support for debugging -+ -+ V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) -+ * Removed footers when chunks are in use. Thanks to -+ Paul Wilson (wilson@cs.texas.edu) for the suggestion. -+ -+ V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) -+ * Added malloc_trim, with help from Wolfram Gloger -+ (wmglo@Dent.MED.Uni-Muenchen.DE). -+ -+ V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) -+ -+ V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) -+ * realloc: try to expand in both directions -+ * malloc: swap order of clean-bin strategy; -+ * realloc: only conditionally expand backwards -+ * Try not to scavenge used bins -+ * Use bin counts as a guide to preallocation -+ * Occasionally bin return list chunks in first scan -+ * Add a few optimizations from colin@nyx10.cs.du.edu -+ -+ V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) -+ * faster bin computation & slightly different binning -+ * merged all consolidations to one part of malloc proper -+ (eliminating old malloc_find_space & malloc_clean_bin) -+ * Scan 2 returns chunks (not just 1) -+ * Propagate failure in realloc if malloc returns 0 -+ * Add stuff to allow compilation on non-ANSI compilers -+ from kpv@research.att.com -+ -+ V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) -+ * removed potential for odd address access in prev_chunk -+ * removed dependency on getpagesize.h -+ * misc cosmetics and a bit more internal documentation -+ * anticosmetics: mangled names in macros to evade debugger strangeness -+ * tested on sparc, hp-700, dec-mips, rs6000 -+ with gcc & native cc (hp, dec only) allowing -+ Detlefs & Zorn comparison study (in SIGPLAN Notices.) -+ -+ Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) -+ * Based loosely on libg++-1.2X malloc. (It retains some of the overall -+ structure of old version, but most details differ.) -+ -+*/ -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi.h modified/Modules/_ctypes/libffi_ios/include/ffi.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi.h 2015-12-20 18:55:19.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_arm64.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __arm64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef AARCH64 -+#define AARCH64 -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+#if FFI_GO_CLOSURES -+ -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; -+ -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); -+ -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); -+ -+#endif /* FFI_GO_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_armv7.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __arm__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef ARM -+#define ARM -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 0 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 0 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 1 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+#if FFI_GO_CLOSURES -+ -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; -+ -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); -+ -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); -+ -+#endif /* FFI_GO_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 0 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_cfi.h 2015-12-20 18:55:19.000000000 +0800 -@@ -0,0 +1,55 @@ -+/* ----------------------------------------------------------------------- -+ ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc. -+ -+ Conditionally assemble cfi directives. Only necessary for building libffi. -+ ----------------------------------------------------------------------- */ -+ -+#ifndef FFI_CFI_H -+#define FFI_CFI_H -+ -+#ifdef HAVE_AS_CFI_PSEUDO_OP -+ -+# define cfi_startproc .cfi_startproc -+# define cfi_endproc .cfi_endproc -+# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off -+# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg -+# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off -+# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off -+# define cfi_offset(reg, off) .cfi_offset reg, off -+# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off -+# define cfi_register(r1, r2) .cfi_register r1, r2 -+# define cfi_return_column(reg) .cfi_return_column reg -+# define cfi_restore(reg) .cfi_restore reg -+# define cfi_same_value(reg) .cfi_same_value reg -+# define cfi_undefined(reg) .cfi_undefined reg -+# define cfi_remember_state .cfi_remember_state -+# define cfi_restore_state .cfi_restore_state -+# define cfi_window_save .cfi_window_save -+# define cfi_personality(enc, exp) .cfi_personality enc, exp -+# define cfi_lsda(enc, exp) .cfi_lsda enc, exp -+# define cfi_escape(...) .cfi_escape __VA_ARGS__ -+ -+#else -+ -+# define cfi_startproc -+# define cfi_endproc -+# define cfi_def_cfa(reg, off) -+# define cfi_def_cfa_register(reg) -+# define cfi_def_cfa_offset(off) -+# define cfi_adjust_cfa_offset(off) -+# define cfi_offset(reg, off) -+# define cfi_rel_offset(reg, off) -+# define cfi_register(r1, r2) -+# define cfi_return_column(reg) -+# define cfi_restore(reg) -+# define cfi_same_value(reg) -+# define cfi_undefined(reg) -+# define cfi_remember_state -+# define cfi_restore_state -+# define cfi_window_save -+# define cfi_personality(enc, exp) -+# define cfi_lsda(enc, exp) -+# define cfi_escape(...) -+ -+#endif /* HAVE_AS_CFI_PSEUDO_OP */ -+#endif /* FFI_CFI_H */ -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_common.h modified/Modules/_ctypes/libffi_ios/include/ffi_common.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_common.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_common.h 2015-12-20 18:55:19.000000000 +0800 -@@ -0,0 +1,132 @@ -+/* ----------------------------------------------------------------------- -+ ffi_common.h - Copyright (C) 2011, 2012, 2013 Anthony Green -+ Copyright (C) 2007 Free Software Foundation, Inc -+ Copyright (c) 1996 Red Hat, Inc. -+ -+ Common internal definitions and macros. Only necessary for building -+ libffi. -+ ----------------------------------------------------------------------- */ -+ -+#ifndef FFI_COMMON_H -+#define FFI_COMMON_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#include -+ -+/* Do not move this. Some versions of AIX are very picky about where -+ this is positioned. */ -+#ifdef __GNUC__ -+# if HAVE_ALLOCA_H -+# include -+# else -+ /* mingw64 defines this already in malloc.h. */ -+# ifndef alloca -+# define alloca __builtin_alloca -+# endif -+# endif -+# define MAYBE_UNUSED __attribute__((__unused__)) -+#else -+# define MAYBE_UNUSED -+# if HAVE_ALLOCA_H -+# include -+# else -+# ifdef _AIX -+# pragma alloca -+# else -+# ifndef alloca /* predefined by HP cc +Olibcalls */ -+# ifdef _MSC_VER -+# define alloca _alloca -+# else -+char *alloca (); -+# endif -+# endif -+# endif -+# endif -+#endif -+ -+/* Check for the existence of memcpy. */ -+#if STDC_HEADERS -+# include -+#else -+# ifndef HAVE_MEMCPY -+# define memcpy(d, s, n) bcopy ((s), (d), (n)) -+# endif -+#endif -+ -+#if defined(FFI_DEBUG) -+#include -+#endif -+ -+#ifdef FFI_DEBUG -+void ffi_assert(char *expr, char *file, int line); -+void ffi_stop_here(void); -+void ffi_type_test(ffi_type *a, char *file, int line); -+ -+#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) -+#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) -+#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) -+#else -+#define FFI_ASSERT(x) -+#define FFI_ASSERT_AT(x, f, l) -+#define FFI_ASSERT_VALID_TYPE(x) -+#endif -+ -+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) -+#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) -+ -+/* Perform machine dependent cif processing */ -+ffi_status ffi_prep_cif_machdep(ffi_cif *cif); -+ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, -+ unsigned int nfixedargs, unsigned int ntotalargs); -+ -+/* Extended cif, used in callback from assembly routine */ -+typedef struct -+{ -+ ffi_cif *cif; -+ void *rvalue; -+ void **avalue; -+} extended_cif; -+ -+/* Terse sized type definitions. */ -+#if defined(_MSC_VER) || defined(__sgi) || defined(__SUNPRO_C) -+typedef unsigned char UINT8; -+typedef signed char SINT8; -+typedef unsigned short UINT16; -+typedef signed short SINT16; -+typedef unsigned int UINT32; -+typedef signed int SINT32; -+# ifdef _MSC_VER -+typedef unsigned __int64 UINT64; -+typedef signed __int64 SINT64; -+# else -+# include -+typedef uint64_t UINT64; -+typedef int64_t SINT64; -+# endif -+#else -+typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); -+typedef signed int SINT8 __attribute__((__mode__(__QI__))); -+typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); -+typedef signed int SINT16 __attribute__((__mode__(__HI__))); -+typedef unsigned int UINT32 __attribute__((__mode__(__SI__))); -+typedef signed int SINT32 __attribute__((__mode__(__SI__))); -+typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); -+typedef signed int SINT64 __attribute__((__mode__(__DI__))); -+#endif -+ -+typedef float FLOAT32; -+ -+#ifndef __GNUC__ -+#define __builtin_expect(x, expected_value) (x) -+#endif -+#define LIKELY(x) __builtin_expect(!!(x),1) -+#define UNLIKELY(x) __builtin_expect((x)!=0,0) -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_i386.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __i386__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_DARWIN -+#define X86_DARWIN -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+#if FFI_GO_CLOSURES -+ -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; -+ -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); -+ -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); -+ -+#endif /* FFI_GO_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffi_x86_64.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,508 @@ -+#ifdef __x86_64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ libffi 3.99999 - Copyright (c) 2011, 2014 Anthony Green -+ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be -+ included in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+/* ------------------------------------------------------------------- -+ The basic API is described in the README file. -+ -+ The raw API is designed to bypass some of the argument packing -+ and unpacking on architectures for which it can be avoided. -+ -+ The closure API allows interpreted functions to be packaged up -+ inside a C function pointer, so that they can be called as C functions, -+ with no understanding on the client side that they are interpreted. -+ It can also be used in other cases in which it is necessary to package -+ up a user specified parameter and a function pointer as a single -+ function pointer. -+ -+ The closure API must be implemented in order to get its functionality, -+ e.g. for use by gij. Routines are provided to emulate the raw API -+ if the underlying platform doesn't allow faster implementation. -+ -+ More details on the raw and cloure API can be found in: -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00138.html -+ -+ and -+ -+ http://gcc.gnu.org/ml/java/1999-q3/msg00174.html -+ -------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_H -+#define LIBFFI_H -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Specify which architecture libffi is configured for. */ -+#ifndef X86_64 -+#define X86_64 -+#endif -+ -+/* ---- System configuration information --------------------------------- */ -+ -+#include -+ -+#ifndef LIBFFI_ASM -+ -+#if defined(_MSC_VER) && !defined(__clang__) -+#define __attribute__(X) -+#endif -+ -+#include -+#include -+ -+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example). -+ But we can find it either under the correct ANSI name, or under GNU -+ C's internal name. */ -+ -+#define FFI_64_BIT_MAX 9223372036854775807 -+ -+#ifdef LONG_LONG_MAX -+# define FFI_LONG_LONG_MAX LONG_LONG_MAX -+#else -+# ifdef LLONG_MAX -+# define FFI_LONG_LONG_MAX LLONG_MAX -+# ifdef _AIX52 /* or newer has C99 LLONG_MAX */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif /* _AIX52 or newer */ -+# else -+# ifdef __GNUC__ -+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ -+# endif -+# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */ -+# ifndef __PPC64__ -+# if defined (__IBMC__) || defined (__IBMCPP__) -+# define FFI_LONG_LONG_MAX LONGLONG_MAX -+# endif -+# endif /* __PPC64__ */ -+# undef FFI_64_BIT_MAX -+# define FFI_64_BIT_MAX 9223372036854775807LL -+# endif -+# endif -+#endif -+ -+/* The closure code assumes that this works on pointers, i.e. a size_t */ -+/* can hold a pointer. */ -+ -+typedef struct _ffi_type -+{ -+ size_t size; -+ unsigned short alignment; -+ unsigned short type; -+ struct _ffi_type **elements; -+} ffi_type; -+ -+#ifndef LIBFFI_HIDE_BASIC_TYPES -+#if SCHAR_MAX == 127 -+# define ffi_type_uchar ffi_type_uint8 -+# define ffi_type_schar ffi_type_sint8 -+#else -+ #error "char size not supported" -+#endif -+ -+#if SHRT_MAX == 32767 -+# define ffi_type_ushort ffi_type_uint16 -+# define ffi_type_sshort ffi_type_sint16 -+#elif SHRT_MAX == 2147483647 -+# define ffi_type_ushort ffi_type_uint32 -+# define ffi_type_sshort ffi_type_sint32 -+#else -+ #error "short size not supported" -+#endif -+ -+#if INT_MAX == 32767 -+# define ffi_type_uint ffi_type_uint16 -+# define ffi_type_sint ffi_type_sint16 -+#elif INT_MAX == 2147483647 -+# define ffi_type_uint ffi_type_uint32 -+# define ffi_type_sint ffi_type_sint32 -+#elif INT_MAX == 9223372036854775807 -+# define ffi_type_uint ffi_type_uint64 -+# define ffi_type_sint ffi_type_sint64 -+#else -+ #error "int size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX -+ #error "no 64-bit data type supported" -+# endif -+#elif LONG_MAX != FFI_64_BIT_MAX -+ #error "long size not supported" -+#endif -+ -+#if LONG_MAX == 2147483647 -+# define ffi_type_ulong ffi_type_uint32 -+# define ffi_type_slong ffi_type_sint32 -+#elif LONG_MAX == FFI_64_BIT_MAX -+# define ffi_type_ulong ffi_type_uint64 -+# define ffi_type_slong ffi_type_sint64 -+#else -+ #error "long size not supported" -+#endif -+ -+/* Need minimal decorations for DLLs to works on Windows. */ -+/* GCC has autoimport and autoexport. Rely on Libtool to */ -+/* help MSVC export from a DLL, but always declare data */ -+/* to be imported for MSVC clients. This costs an extra */ -+/* indirection for MSVC clients using the static version */ -+/* of the library, but don't worry about that. Besides, */ -+/* as a workaround, they can define FFI_BUILDING if they */ -+/* *know* they are going to link with the static library. */ -+#if defined _MSC_VER && !defined FFI_BUILDING -+#define FFI_EXTERN extern __declspec(dllimport) -+#else -+#define FFI_EXTERN extern -+#endif -+ -+/* These are defined in types.c */ -+FFI_EXTERN ffi_type ffi_type_void; -+FFI_EXTERN ffi_type ffi_type_uint8; -+FFI_EXTERN ffi_type ffi_type_sint8; -+FFI_EXTERN ffi_type ffi_type_uint16; -+FFI_EXTERN ffi_type ffi_type_sint16; -+FFI_EXTERN ffi_type ffi_type_uint32; -+FFI_EXTERN ffi_type ffi_type_sint32; -+FFI_EXTERN ffi_type ffi_type_uint64; -+FFI_EXTERN ffi_type ffi_type_sint64; -+FFI_EXTERN ffi_type ffi_type_float; -+FFI_EXTERN ffi_type ffi_type_double; -+FFI_EXTERN ffi_type ffi_type_pointer; -+ -+#if 1 -+FFI_EXTERN ffi_type ffi_type_longdouble; -+#else -+#define ffi_type_longdouble ffi_type_double -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_EXTERN ffi_type ffi_type_complex_float; -+FFI_EXTERN ffi_type ffi_type_complex_double; -+#if 1 -+FFI_EXTERN ffi_type ffi_type_complex_longdouble; -+#else -+#define ffi_type_complex_longdouble ffi_type_complex_double -+#endif -+#endif -+#endif /* LIBFFI_HIDE_BASIC_TYPES */ -+ -+typedef enum { -+ FFI_OK = 0, -+ FFI_BAD_TYPEDEF, -+ FFI_BAD_ABI -+} ffi_status; -+ -+typedef unsigned FFI_TYPE; -+ -+typedef struct { -+ ffi_abi abi; -+ unsigned nargs; -+ ffi_type **arg_types; -+ ffi_type *rtype; -+ unsigned bytes; -+ unsigned flags; -+#ifdef FFI_EXTRA_CIF_FIELDS -+ FFI_EXTRA_CIF_FIELDS; -+#endif -+} ffi_cif; -+ -+#if 0 -+/* Used to adjust size/alignment of ffi types. */ -+void ffi_prep_types (ffi_abi abi); -+#endif -+ -+/* Used internally, but overridden by some architectures */ -+ffi_status ffi_prep_cif_core(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+/* ---- Definitions for the raw API -------------------------------------- */ -+ -+#ifndef FFI_SIZEOF_ARG -+# if LONG_MAX == 2147483647 -+# define FFI_SIZEOF_ARG 4 -+# elif LONG_MAX == FFI_64_BIT_MAX -+# define FFI_SIZEOF_ARG 8 -+# endif -+#endif -+ -+#ifndef FFI_SIZEOF_JAVA_RAW -+# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG -+#endif -+ -+typedef union { -+ ffi_sarg sint; -+ ffi_arg uint; -+ float flt; -+ char data[FFI_SIZEOF_ARG]; -+ void* ptr; -+} ffi_raw; -+ -+#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 -+/* This is a special case for mips64/n32 ABI (and perhaps others) where -+ sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ -+typedef union { -+ signed int sint; -+ unsigned int uint; -+ float flt; -+ char data[FFI_SIZEOF_JAVA_RAW]; -+ void* ptr; -+} ffi_java_raw; -+#else -+typedef ffi_raw ffi_java_raw; -+#endif -+ -+ -+void ffi_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_raw *avalue); -+ -+void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw); -+void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args); -+size_t ffi_raw_size (ffi_cif *cif); -+ -+/* This is analogous to the raw API, except it uses Java parameter */ -+/* packing, even on 64-bit machines. I.e. on 64-bit machines */ -+/* longs and doubles are followed by an empty 64-bit word. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ ffi_java_raw *avalue); -+ -+void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); -+void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); -+size_t ffi_java_raw_size (ffi_cif *cif); -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#if FFI_CLOSURES -+ -+#ifdef _MSC_VER -+__declspec(align(8)) -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+ void *user_data; -+#ifdef __GNUC__ -+} ffi_closure __attribute__((aligned (8))); -+#else -+} ffi_closure; -+# ifdef __sgi -+# pragma pack 0 -+# endif -+#endif -+ -+void *ffi_closure_alloc (size_t size, void **code); -+void ffi_closure_free (void *); -+ -+ffi_status -+ffi_prep_closure (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure*, -+ ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void*codeloc); -+ -+#ifdef __sgi -+# pragma pack 8 -+#endif -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*); -+ void *user_data; -+ -+} ffi_raw_closure; -+ -+typedef struct { -+#if 0 -+ void *trampoline_table; -+ void *trampoline_table_entry; -+#else -+ char tramp[FFI_TRAMPOLINE_SIZE]; -+#endif -+ -+ ffi_cif *cif; -+ -+#if !FFI_NATIVE_RAW_API -+ -+ /* if this is enabled, then a raw closure has the same layout -+ as a regular closure. We use this to install an intermediate -+ handler to do the transaltion, void** -> ffi_raw*. */ -+ -+ void (*translate_args)(ffi_cif*,void*,void**,void*); -+ void *this_closure; -+ -+#endif -+ -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*); -+ void *user_data; -+ -+} ffi_java_raw_closure; -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data); -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc); -+ -+#endif /* FFI_CLOSURES */ -+ -+#if FFI_GO_CLOSURES -+ -+typedef struct { -+ void *tramp; -+ ffi_cif *cif; -+ void (*fun)(ffi_cif*,void*,void**,void*); -+} ffi_go_closure; -+ -+ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *, -+ void (*fun)(ffi_cif*,void*,void**,void*)); -+ -+void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure); -+ -+#endif /* FFI_GO_CLOSURES */ -+ -+/* ---- Public interface definition -------------------------------------- */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes); -+ -+void ffi_call(ffi_cif *cif, -+ void (*fn)(void), -+ void *rvalue, -+ void **avalue); -+ -+/* Useful for eliminating compiler warnings */ -+#define FFI_FN(f) ((void (*)(void))f) -+ -+/* ---- Definitions shared with assembly code ---------------------------- */ -+ -+#endif -+ -+/* If these change, update src/mips/ffitarget.h. */ -+#define FFI_TYPE_VOID 0 -+#define FFI_TYPE_INT 1 -+#define FFI_TYPE_FLOAT 2 -+#define FFI_TYPE_DOUBLE 3 -+#if 1 -+#define FFI_TYPE_LONGDOUBLE 4 -+#else -+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE -+#endif -+#define FFI_TYPE_UINT8 5 -+#define FFI_TYPE_SINT8 6 -+#define FFI_TYPE_UINT16 7 -+#define FFI_TYPE_SINT16 8 -+#define FFI_TYPE_UINT32 9 -+#define FFI_TYPE_SINT32 10 -+#define FFI_TYPE_UINT64 11 -+#define FFI_TYPE_SINT64 12 -+#define FFI_TYPE_STRUCT 13 -+#define FFI_TYPE_POINTER 14 -+#define FFI_TYPE_COMPLEX 15 -+ -+/* This should always refer to the last type code (for sanity checks) */ -+#define FFI_TYPE_LAST FFI_TYPE_COMPLEX -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig.h modified/Modules/_ctypes/libffi_ios/include/fficonfig.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig.h 2015-12-20 18:55:19.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_arm64.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __arm64__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.99999" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_armv7.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __arm__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+#define FFI_EXEC_TRAMPOLINE_TABLE 1 -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+/* #undef FFI_MMAP_EXEC_WRIT */ -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+/* #undef HAVE_AS_X86_PCREL */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+/* #undef HAVE_LONG_DOUBLE */ -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 8 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.99999" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_i386.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __i386__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+#define HAVE_AS_X86_PCREL 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 4 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.99999" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/fficonfig_x86_64.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,214 @@ -+#ifdef __x86_64__ -+ -+/* fficonfig.h. Generated from fficonfig.h.in by configure. */ -+/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -+ -+/* Define if building universal (internal helper macro) */ -+/* #undef AC_APPLE_UNIVERSAL_BUILD */ -+ -+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP -+ systems. This function is required for `alloca.c' support on those systems. -+ */ -+/* #undef CRAY_STACKSEG_END */ -+ -+/* Define to 1 if using `alloca.c'. */ -+/* #undef C_ALLOCA */ -+ -+/* Define to the flags needed for the .section .eh_frame directive. */ -+#define EH_FRAME_FLAGS "aw" -+ -+/* Define this if you want extra debugging. */ -+/* #undef FFI_DEBUG */ -+ -+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */ -+/* #undef FFI_EXEC_TRAMPOLINE_TABLE */ -+ -+/* Define this if you want to enable pax emulated trampolines */ -+/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */ -+ -+/* Cannot use malloc on this target, so, we revert to alternative means */ -+#define FFI_MMAP_EXEC_WRIT 1 -+ -+/* Define this if you do not want support for the raw API. */ -+/* #undef FFI_NO_RAW_API */ -+ -+/* Define this if you do not want support for aggregate types. */ -+/* #undef FFI_NO_STRUCTS */ -+ -+/* Define to 1 if you have `alloca', as a function or macro. */ -+#define HAVE_ALLOCA 1 -+ -+/* Define to 1 if you have and it should be used (not on Ultrix). -+ */ -+#define HAVE_ALLOCA_H 1 -+ -+/* Define if your assembler supports .cfi_* directives. */ -+#define HAVE_AS_CFI_PSEUDO_OP 1 -+ -+/* Define if your assembler supports .register. */ -+/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -+ -+/* Define if the compiler uses zarch features. */ -+/* #undef HAVE_AS_S390_ZARCH */ -+ -+/* Define if your assembler and linker support unaligned PC relative relocs. -+ */ -+/* #undef HAVE_AS_SPARC_UA_PCREL */ -+ -+/* Define if your assembler supports unwind section type. */ -+/* #undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE */ -+ -+/* Define if your assembler supports PC relative relocs. */ -+#define HAVE_AS_X86_PCREL 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_DLFCN_H 1 -+ -+/* Define if __attribute__((visibility("hidden"))) is supported. */ -+/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_INTTYPES_H 1 -+ -+/* Define if you have the long double type and it is bigger than a double */ -+#define HAVE_LONG_DOUBLE 1 -+ -+/* Define if you support more than one size of the long double type */ -+/* #undef HAVE_LONG_DOUBLE_VARIANT */ -+ -+/* Define to 1 if you have the `memcpy' function. */ -+#define HAVE_MEMCPY 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_MEMORY_H 1 -+ -+/* Define to 1 if you have the `mkostemp' function. */ -+/* #undef HAVE_MKOSTEMP */ -+ -+/* Define to 1 if you have the `mmap' function. */ -+#define HAVE_MMAP 1 -+ -+/* Define if mmap with MAP_ANON(YMOUS) works. */ -+#define HAVE_MMAP_ANON 1 -+ -+/* Define if mmap of /dev/zero works. */ -+/* #undef HAVE_MMAP_DEV_ZERO */ -+ -+/* Define if read-only mmap of a plain file works. */ -+#define HAVE_MMAP_FILE 1 -+ -+/* Define if .eh_frame sections should be read-only. */ -+/* #undef HAVE_RO_EH_FRAME */ -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDINT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STDLIB_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRINGS_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_STRING_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_MMAN_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_STAT_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_SYS_TYPES_H 1 -+ -+/* Define to 1 if you have the header file. */ -+#define HAVE_UNISTD_H 1 -+ -+/* Define to the sub-directory in which libtool stores uninstalled libraries. -+ */ -+#define LT_OBJDIR ".libs/" -+ -+/* Name of package */ -+#define PACKAGE "libffi" -+ -+/* Define to the address where bug reports for this package should be sent. */ -+#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" -+ -+/* Define to the full name of this package. */ -+#define PACKAGE_NAME "libffi" -+ -+/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libffi 3.99999" -+ -+/* Define to the one symbol short name of this package. */ -+#define PACKAGE_TARNAME "libffi" -+ -+/* Define to the home page for this package. */ -+#define PACKAGE_URL "" -+ -+/* Define to the version of this package. */ -+#define PACKAGE_VERSION "3.99999" -+ -+/* The size of `double', as computed by sizeof. */ -+#define SIZEOF_DOUBLE 8 -+ -+/* The size of `long double', as computed by sizeof. */ -+#define SIZEOF_LONG_DOUBLE 16 -+ -+/* The size of `size_t', as computed by sizeof. */ -+#define SIZEOF_SIZE_T 8 -+ -+/* If using the C implementation of alloca, define if you know the -+ direction of stack growth for your system; otherwise it will be -+ automatically deduced at runtime. -+ STACK_DIRECTION > 0 => grows toward higher addresses -+ STACK_DIRECTION < 0 => grows toward lower addresses -+ STACK_DIRECTION = 0 => direction of growth unknown */ -+/* #undef STACK_DIRECTION */ -+ -+/* Define to 1 if you have the ANSI C header files. */ -+#define STDC_HEADERS 1 -+ -+/* Define if symbols are underscored. */ -+#define SYMBOL_UNDERSCORE 1 -+ -+/* Define this if you are using Purify and want to suppress spurious messages. -+ */ -+/* #undef USING_PURIFY */ -+ -+/* Version number of package */ -+#define VERSION "3.99999" -+ -+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -+ significant byte first (like Motorola and SPARC, unlike Intel). */ -+#if defined AC_APPLE_UNIVERSAL_BUILD -+# if defined __BIG_ENDIAN__ -+# define WORDS_BIGENDIAN 1 -+# endif -+#else -+# ifndef WORDS_BIGENDIAN -+/* # undef WORDS_BIGENDIAN */ -+# endif -+#endif -+ -+/* Define to `unsigned int' if does not define. */ -+/* #undef size_t */ -+ -+ -+#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) .hidden name -+#else -+#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) -+#endif -+#else -+#ifdef LIBFFI_ASM -+#define FFI_HIDDEN(name) -+#else -+#define FFI_HIDDEN -+#endif -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget.h modified/Modules/_ctypes/libffi_ios/include/ffitarget.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget.h 2015-12-20 18:55:19.000000000 +0800 -@@ -0,0 +1,24 @@ -+#ifdef __arm64__ -+ -+#include -+ -+ -+#endif -+#ifdef __i386__ -+ -+#include -+ -+ -+#endif -+#ifdef __arm__ -+ -+#include -+ -+ -+#endif -+#ifdef __x86_64__ -+ -+#include -+ -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_arm64.h 2015-12-20 22:05:32.000000000 +0800 -@@ -0,0 +1,85 @@ -+#ifdef __arm64__ -+ -+/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd. -+ -+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: -+ -+The above copyright notice and this permission notice shall be -+included in all copies or substantial portions of the Software. -+ -+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. */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+#ifndef LIBFFI_ASM -+#ifdef __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+typedef unsigned long long ffi_arg; -+typedef signed long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+ -+typedef enum ffi_abi -+ { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+ } ffi_abi; -+#endif -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_NATIVE_RAW_API 0 -+ -+#if defined (FFI_EXEC_TRAMPOLINE_TABLE) && FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#define FFI_TRAMPOLINE_SIZE 16 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET 16 -+#else -+#error "No trampoline table implementation" -+#endif -+ -+#else -+#define FFI_TRAMPOLINE_SIZE 24 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE -+#endif -+ -+/* ---- Internal ---- */ -+ -+#if defined (__APPLE__) -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_EXTRA_CIF_FIELDS unsigned aarch64_nfixedargs -+#else -+/* iOS reserves x18 for the system. Disable Go closures until -+ a new static chain is chosen. */ -+#define FFI_GO_CLOSURES 1 -+#endif -+ -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_armv7.h 2015-12-20 22:05:39.000000000 +0800 -@@ -0,0 +1,87 @@ -+#ifdef __arm__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012 Anthony Green -+ Copyright (c) 2010 CodeSourcery -+ Copyright (c) 1996-2003 Red Hat, Inc. -+ -+ Target configuration macros for ARM. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+#ifndef LIBFFI_ASM -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+ -+typedef enum ffi_abi { -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV, -+ FFI_VFP, -+ FFI_LAST_ABI, -+#ifdef __ARM_PCS_VFP -+ FFI_DEFAULT_ABI = FFI_VFP, -+#else -+ FFI_DEFAULT_ABI = FFI_SYSV, -+#endif -+} ffi_abi; -+#endif -+ -+#define FFI_EXTRA_CIF_FIELDS \ -+ int vfp_used; \ -+ unsigned short vfp_reg_free, vfp_nargs; \ -+ signed char vfp_args[16] \ -+ -+#define FFI_TARGET_SPECIFIC_VARIADIC -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+#define FFI_NATIVE_RAW_API 0 -+ -+#if defined (FFI_EXEC_TRAMPOLINE_TABLE) && FFI_EXEC_TRAMPOLINE_TABLE -+ -+#ifdef __MACH__ -+#define FFI_TRAMPOLINE_SIZE 12 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET 8 -+#else -+#error "No trampoline table implementation" -+#endif -+ -+#else -+#define FFI_TRAMPOLINE_SIZE 12 -+#define FFI_TRAMPOLINE_CLOSURE_OFFSET FFI_TRAMPOLINE_SIZE -+#endif -+ -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_i386.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,144 @@ -+#ifdef __i386__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. -+ -+ Target configuration macros for x86 and x86-64. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+/* ---- System specific configurations ----------------------------------- */ -+ -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY -+ -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif -+ -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif -+ -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifndef _MSC_VER -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+#endif -+ -+/* ---- Generic type definitions ----------------------------------------- */ -+ -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif -+ -+typedef enum ffi_abi { -+#if defined(X86_WIN64) -+ FFI_FIRST_ABI = 0, -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 -+ -+#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+ FFI_FIRST_ABI = 1, -+ FFI_UNIX64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_UNIX64 -+ -+#elif defined(X86_WIN32) -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_STDCALL = 2, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_MS_CDECL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_STDCALL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_MS_CDECL = 8, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif -+} ffi_abi; -+#endif -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+ -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) -+ -+#if defined (X86_64) || defined(X86_WIN64) \ -+ || (defined (__x86_64__) && defined (X86_DARWIN)) -+# define FFI_TRAMPOLINE_SIZE 24 -+# define FFI_NATIVE_RAW_API 0 -+#else -+# define FFI_TRAMPOLINE_SIZE 12 -+# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif -+ -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h ---- orig/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/include/ffitarget_x86_64.h 2015-12-20 18:55:29.000000000 +0800 -@@ -0,0 +1,144 @@ -+#ifdef __x86_64__ -+ -+/* -----------------------------------------------------------------*-C-*- -+ ffitarget.h - Copyright (c) 2012, 2014 Anthony Green -+ Copyright (c) 1996-2003, 2010 Red Hat, Inc. -+ Copyright (C) 2008 Free Software Foundation, Inc. -+ -+ Target configuration macros for x86 and x86-64. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ -+ ----------------------------------------------------------------------- */ -+ -+#ifndef LIBFFI_TARGET_H -+#define LIBFFI_TARGET_H -+ -+#ifndef LIBFFI_H -+#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." -+#endif -+ -+/* ---- System specific configurations ----------------------------------- */ -+ -+/* For code common to all platforms on x86 and x86_64. */ -+#define X86_ANY -+ -+#if defined (X86_64) && defined (__i386__) -+#undef X86_64 -+#define X86 -+#endif -+ -+#ifdef X86_WIN64 -+#define FFI_SIZEOF_ARG 8 -+#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */ -+#endif -+ -+#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+#ifndef _MSC_VER -+#define FFI_TARGET_HAS_COMPLEX_TYPE -+#endif -+ -+/* ---- Generic type definitions ----------------------------------------- */ -+ -+#ifndef LIBFFI_ASM -+#ifdef X86_WIN64 -+#ifdef _MSC_VER -+typedef unsigned __int64 ffi_arg; -+typedef __int64 ffi_sarg; -+#else -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#endif -+#else -+#if defined __x86_64__ && defined __ILP32__ -+#define FFI_SIZEOF_ARG 8 -+#define FFI_SIZEOF_JAVA_RAW 4 -+typedef unsigned long long ffi_arg; -+typedef long long ffi_sarg; -+#else -+typedef unsigned long ffi_arg; -+typedef signed long ffi_sarg; -+#endif -+#endif -+ -+typedef enum ffi_abi { -+#if defined(X86_WIN64) -+ FFI_FIRST_ABI = 0, -+ FFI_WIN64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_WIN64 -+ -+#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) -+ FFI_FIRST_ABI = 1, -+ FFI_UNIX64, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_UNIX64 -+ -+#elif defined(X86_WIN32) -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_STDCALL = 2, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_MS_CDECL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_MS_CDECL -+#else -+ FFI_FIRST_ABI = 0, -+ FFI_SYSV = 1, -+ FFI_THISCALL = 3, -+ FFI_FASTCALL = 4, -+ FFI_STDCALL = 5, -+ FFI_PASCAL = 6, -+ FFI_REGISTER = 7, -+ FFI_MS_CDECL = 8, -+ FFI_LAST_ABI, -+ FFI_DEFAULT_ABI = FFI_SYSV -+#endif -+} ffi_abi; -+#endif -+ -+/* ---- Definitions for closures ----------------------------------------- */ -+ -+#define FFI_CLOSURES 1 -+#define FFI_GO_CLOSURES 1 -+ -+#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) -+#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) -+#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) -+#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4) -+ -+#if defined (X86_64) || defined(X86_WIN64) \ -+ || (defined (__x86_64__) && defined (X86_DARWIN)) -+# define FFI_TRAMPOLINE_SIZE 24 -+# define FFI_NATIVE_RAW_API 0 -+#else -+# define FFI_TRAMPOLINE_SIZE 12 -+# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -+#endif -+ -+#endif -+ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/java_raw_api.c modified/Modules/_ctypes/libffi_ios/java_raw_api.c ---- orig/Modules/_ctypes/libffi_ios/java_raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/java_raw_api.c 2015-12-20 18:49:11.000000000 +0800 -@@ -0,0 +1,374 @@ -+/* ----------------------------------------------------------------------- -+ java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. -+ -+ Cloned from raw_api.c -+ -+ Raw_api.c author: Kresten Krab Thorup -+ Java_raw_api.c author: Hans-J. Boehm -+ -+ $Id $ -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+/* This defines a Java- and 64-bit specific variant of the raw API. */ -+/* It assumes that "raw" argument blocks look like Java stacks on a */ -+/* 64-bit machine. Arguments that can be stored in a single stack */ -+/* stack slots (longs, doubles) occupy 128 bits, but only the first */ -+/* 64 bits are actually used. */ -+ -+#include -+#include -+#include -+ -+#if !defined(NO_JAVA_RAW_API) -+ -+size_t -+ffi_java_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; -+ -+ ffi_type **at = cif->arg_types; -+ -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+ switch((*at) -> type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ result += 2 * FFI_SIZEOF_JAVA_RAW; -+ break; -+ case FFI_TYPE_STRUCT: -+ /* No structure parameters in Java. */ -+ abort(); -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ result += FFI_SIZEOF_JAVA_RAW; -+ } -+ } -+ -+ return result; -+} -+ -+ -+void -+ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; -+ -+#if WORDS_BIGENDIAN -+ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + 3); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + 2); -+ break; -+ -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void *)raw; -+ raw += 2; -+ break; -+#endif -+ -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; -+ -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ -+ default: -+ *args = raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+ } -+ } -+ -+#else /* WORDS_BIGENDIAN */ -+ -+#if !PDP -+ -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ switch((*tp)->type) { -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ *args = (void*) raw; -+ raw += 2; -+ break; -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ default: -+ *args = (void*) raw++; -+ } -+#else /* FFI_SIZEOF_JAVA_RAW != 8 */ -+ *args = (void*) raw; -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ -+ } -+ -+#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ -+ -+#endif /* WORDS_BIGENDIAN */ -+} -+ -+void -+ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; -+ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT8*) (*args); -+#else -+ (raw++)->uint = *(UINT8*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_SINT8: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT8*) (*args); -+#else -+ (raw++)->sint = *(SINT8*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_UINT16: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT16*) (*args); -+#else -+ (raw++)->uint = *(UINT16*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_SINT16: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT16*) (*args); -+#else -+ (raw++)->sint = *(SINT16*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_UINT32: -+#if WORDS_BIGENDIAN -+ *(UINT32*)(raw++) = *(UINT32*) (*args); -+#else -+ (raw++)->uint = *(UINT32*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_SINT32: -+#if WORDS_BIGENDIAN -+ *(SINT32*)(raw++) = *(SINT32*) (*args); -+#else -+ (raw++)->sint = *(SINT32*) (*args); -+#endif -+ break; -+ -+ case FFI_TYPE_FLOAT: -+ (raw++)->flt = *(FLOAT32*) (*args); -+ break; -+ -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_DOUBLE: -+ raw->uint = *(UINT64*) (*args); -+ raw += 2; -+ break; -+#endif -+ -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; -+ -+ default: -+#if FFI_SIZEOF_JAVA_RAW == 8 -+ FFI_ASSERT(0); /* Should have covered all cases */ -+#else -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += -+ ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); -+#endif -+ } -+ } -+} -+ -+#if !FFI_NATIVE_RAW_API -+ -+static void -+ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) -+{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue <<= 32; -+ break; -+ -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+#if FFI_SIZEOF_JAVA_RAW == 4 -+ case FFI_TYPE_POINTER: -+#endif -+ *(SINT64 *)rvalue <<= 32; -+ break; -+ -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ -+ default: -+ break; -+ } -+#endif -+} -+ -+static void -+ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) -+{ -+#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_UINT32: -+ *(UINT64 *)rvalue >>= 32; -+ break; -+ -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_INT: -+ *(SINT64 *)rvalue >>= 32; -+ break; -+ -+ case FFI_TYPE_COMPLEX: -+ /* Not supported yet. */ -+ abort(); -+ -+ default: -+ break; -+ } -+#endif -+} -+ -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ -+ -+void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ ffi_java_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_java_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+ ffi_java_rvalue_to_raw (cif, rvalue); -+} -+ -+#if FFI_CLOSURES /* base system provides closures */ -+ -+static void -+ffi_java_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; -+ -+ ffi_java_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, (ffi_raw*)raw, cl->user_data); -+ ffi_java_raw_to_rvalue (cif, rvalue); -+} -+ -+ffi_status -+ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; -+ -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_java_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } -+ -+ return status; -+} -+ -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ -+ -+ffi_status -+ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); -+} -+ -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ -+#endif /* !NO_JAVA_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/prep_cif.c modified/Modules/_ctypes/libffi_ios/prep_cif.c ---- orig/Modules/_ctypes/libffi_ios/prep_cif.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/prep_cif.c 2015-12-20 18:49:22.000000000 +0800 -@@ -0,0 +1,242 @@ -+/* ----------------------------------------------------------------------- -+ prep_cif.c - Copyright (c) 2011, 2012 Anthony Green -+ Copyright (c) 1996, 1998, 2007 Red Hat, Inc. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#include -+#include -+#include -+ -+/* Round up to FFI_SIZEOF_ARG. */ -+ -+#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG) -+ -+/* Perform machine independent initialization of aggregate type -+ specifications. */ -+ -+static ffi_status initialize_aggregate(ffi_type *arg) -+{ -+ ffi_type **ptr; -+ -+ if (UNLIKELY(arg == NULL || arg->elements == NULL)) -+ return FFI_BAD_TYPEDEF; -+ -+ arg->size = 0; -+ arg->alignment = 0; -+ -+ ptr = &(arg->elements[0]); -+ -+ if (UNLIKELY(ptr == 0)) -+ return FFI_BAD_TYPEDEF; -+ -+ while ((*ptr) != NULL) -+ { -+ if (UNLIKELY(((*ptr)->size == 0) -+ && (initialize_aggregate((*ptr)) != FFI_OK))) -+ return FFI_BAD_TYPEDEF; -+ -+ /* Perform a sanity check on the argument type */ -+ FFI_ASSERT_VALID_TYPE(*ptr); -+ -+ arg->size = ALIGN(arg->size, (*ptr)->alignment); -+ arg->size += (*ptr)->size; -+ -+ arg->alignment = (arg->alignment > (*ptr)->alignment) ? -+ arg->alignment : (*ptr)->alignment; -+ -+ ptr++; -+ } -+ -+ /* Structure size includes tail padding. This is important for -+ structures that fit in one register on ABIs like the PowerPC64 -+ Linux ABI that right justify small structs in a register. -+ It's also needed for nested structure layout, for example -+ struct A { long a; char b; }; struct B { struct A x; char y; }; -+ should find y at an offset of 2*sizeof(long) and result in a -+ total size of 3*sizeof(long). */ -+ arg->size = ALIGN (arg->size, arg->alignment); -+ -+ /* On some targets, the ABI defines that structures have an additional -+ alignment beyond the "natural" one based on their elements. */ -+#ifdef FFI_AGGREGATE_ALIGNMENT -+ if (FFI_AGGREGATE_ALIGNMENT > arg->alignment) -+ arg->alignment = FFI_AGGREGATE_ALIGNMENT; -+#endif -+ -+ if (arg->size == 0) -+ return FFI_BAD_TYPEDEF; -+ else -+ return FFI_OK; -+} -+ -+#ifndef __CRIS__ -+/* The CRIS ABI specifies structure elements to have byte -+ alignment only, so it completely overrides this functions, -+ which assumes "natural" alignment and padding. */ -+ -+/* Perform machine independent ffi_cif preparation, then call -+ machine dependent routine. */ -+ -+/* For non variadic functions isvariadic should be 0 and -+ nfixedargs==ntotalargs. -+ -+ For variadic calls, isvariadic should be 1 and nfixedargs -+ and ntotalargs set as appropriate. nfixedargs must always be >=1 */ -+ -+ -+ffi_status FFI_HIDDEN ffi_prep_cif_core(ffi_cif *cif, ffi_abi abi, -+ unsigned int isvariadic, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ unsigned bytes = 0; -+ unsigned int i; -+ ffi_type **ptr; -+ -+ FFI_ASSERT(cif != NULL); -+ FFI_ASSERT((!isvariadic) || (nfixedargs >= 1)); -+ FFI_ASSERT(nfixedargs <= ntotalargs); -+ -+ if (! (abi > FFI_FIRST_ABI && abi < FFI_LAST_ABI)) -+ return FFI_BAD_ABI; -+ -+ cif->abi = abi; -+ cif->arg_types = atypes; -+ cif->nargs = ntotalargs; -+ cif->rtype = rtype; -+ -+ cif->flags = 0; -+ -+#if HAVE_LONG_DOUBLE_VARIANT -+ ffi_prep_types (abi); -+#endif -+ -+ /* Initialize the return type if necessary */ -+ if ((cif->rtype->size == 0) && (initialize_aggregate(cif->rtype) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; -+ -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if (rtype->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the return type */ -+ FFI_ASSERT_VALID_TYPE(cif->rtype); -+ -+ /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ /* Make space for the return structure pointer */ -+ if (cif->rtype->type == FFI_TYPE_STRUCT -+#ifdef TILE -+ && (cif->rtype->size > 10 * FFI_SIZEOF_ARG) -+#endif -+#ifdef XTENSA -+ && (cif->rtype->size > 16) -+#endif -+#ifdef NIOS2 -+ && (cif->rtype->size > 8) -+#endif -+ ) -+ bytes = STACK_ARG_SIZE(sizeof(void*)); -+#endif -+ -+ for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) -+ { -+ -+ /* Initialize any uninitialized aggregate type definitions */ -+ if (((*ptr)->size == 0) && (initialize_aggregate((*ptr)) != FFI_OK)) -+ return FFI_BAD_TYPEDEF; -+ -+#ifndef FFI_TARGET_HAS_COMPLEX_TYPE -+ if ((*ptr)->type == FFI_TYPE_COMPLEX) -+ abort(); -+#endif -+ /* Perform a sanity check on the argument type, do this -+ check after the initialization. */ -+ FFI_ASSERT_VALID_TYPE(*ptr); -+ -+#if !defined FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION -+ { -+ /* Add any padding if necessary */ -+ if (((*ptr)->alignment - 1) & bytes) -+ bytes = (unsigned)ALIGN(bytes, (*ptr)->alignment); -+ -+#ifdef TILE -+ if (bytes < 10 * FFI_SIZEOF_ARG && -+ bytes + STACK_ARG_SIZE((*ptr)->size) > 10 * FFI_SIZEOF_ARG) -+ { -+ /* An argument is never split between the 10 parameter -+ registers and the stack. */ -+ bytes = 10 * FFI_SIZEOF_ARG; -+ } -+#endif -+#ifdef XTENSA -+ if (bytes <= 6*4 && bytes + STACK_ARG_SIZE((*ptr)->size) > 6*4) -+ bytes = 6*4; -+#endif -+ -+ bytes += STACK_ARG_SIZE((*ptr)->size); -+ } -+#endif -+ } -+ -+ cif->bytes = bytes; -+ -+ /* Perform machine dependent cif processing */ -+#ifdef FFI_TARGET_SPECIFIC_VARIADIC -+ if (isvariadic) -+ return ffi_prep_cif_machdep_var(cif, nfixedargs, ntotalargs); -+#endif -+ -+ return ffi_prep_cif_machdep(cif); -+} -+#endif /* not __CRIS__ */ -+ -+ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, -+ ffi_type *rtype, ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 0, nargs, nargs, rtype, atypes); -+} -+ -+ffi_status ffi_prep_cif_var(ffi_cif *cif, -+ ffi_abi abi, -+ unsigned int nfixedargs, -+ unsigned int ntotalargs, -+ ffi_type *rtype, -+ ffi_type **atypes) -+{ -+ return ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); -+} -+ -+#if FFI_CLOSURES -+ -+ffi_status -+ffi_prep_closure (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data) -+{ -+ return ffi_prep_closure_loc (closure, cif, fun, user_data, closure); -+} -+ -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/raw_api.c modified/Modules/_ctypes/libffi_ios/raw_api.c ---- orig/Modules/_ctypes/libffi_ios/raw_api.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/raw_api.c 2015-12-20 18:49:26.000000000 +0800 -@@ -0,0 +1,267 @@ -+/* ----------------------------------------------------------------------- -+ raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. -+ -+ Author: Kresten Krab Thorup -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+/* This file defines generic functions for use with the raw api. */ -+ -+#include -+#include -+ -+#if !FFI_NO_RAW_API -+ -+size_t -+ffi_raw_size (ffi_cif *cif) -+{ -+ size_t result = 0; -+ int i; -+ -+ ffi_type **at = cif->arg_types; -+ -+ for (i = cif->nargs-1; i >= 0; i--, at++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*at)->type == FFI_TYPE_STRUCT) -+ result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); -+ else -+#endif -+ result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); -+ } -+ -+ return result; -+} -+ -+ -+void -+ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; -+ -+#if WORDS_BIGENDIAN -+ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); -+ break; -+ -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); -+ break; -+#endif -+ -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ *args = (raw++)->ptr; -+ break; -+#endif -+ -+ case FFI_TYPE_COMPLEX: -+ *args = (raw++)->ptr; -+ break; -+ -+ case FFI_TYPE_POINTER: -+ *args = (void*) &(raw++)->ptr; -+ break; -+ -+ default: -+ *args = raw; -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+ -+#else /* WORDS_BIGENDIAN */ -+ -+#if !PDP -+ -+ /* then assume little endian */ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+#if !FFI_NO_STRUCTS -+ if ((*tp)->type == FFI_TYPE_STRUCT) -+ { -+ *args = (raw++)->ptr; -+ } -+ else -+#endif -+ if ((*tp)->type == FFI_TYPE_COMPLEX) -+ { -+ *args = (raw++)->ptr; -+ } -+ else -+ { -+ *args = (void*) raw; -+ raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); -+ } -+ } -+ -+#else -+#error "pdp endian not supported" -+#endif /* ! PDP */ -+ -+#endif /* WORDS_BIGENDIAN */ -+} -+ -+void -+ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) -+{ -+ unsigned i; -+ ffi_type **tp = cif->arg_types; -+ -+ for (i = 0; i < cif->nargs; i++, tp++, args++) -+ { -+ switch ((*tp)->type) -+ { -+ case FFI_TYPE_UINT8: -+ (raw++)->uint = *(UINT8*) (*args); -+ break; -+ -+ case FFI_TYPE_SINT8: -+ (raw++)->sint = *(SINT8*) (*args); -+ break; -+ -+ case FFI_TYPE_UINT16: -+ (raw++)->uint = *(UINT16*) (*args); -+ break; -+ -+ case FFI_TYPE_SINT16: -+ (raw++)->sint = *(SINT16*) (*args); -+ break; -+ -+#if FFI_SIZEOF_ARG >= 4 -+ case FFI_TYPE_UINT32: -+ (raw++)->uint = *(UINT32*) (*args); -+ break; -+ -+ case FFI_TYPE_SINT32: -+ (raw++)->sint = *(SINT32*) (*args); -+ break; -+#endif -+ -+#if !FFI_NO_STRUCTS -+ case FFI_TYPE_STRUCT: -+ (raw++)->ptr = *args; -+ break; -+#endif -+ -+ case FFI_TYPE_COMPLEX: -+ (raw++)->ptr = *args; -+ break; -+ -+ case FFI_TYPE_POINTER: -+ (raw++)->ptr = **(void***) args; -+ break; -+ -+ default: -+ memcpy ((void*) raw->data, (void*)*args, (*tp)->size); -+ raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; -+ } -+ } -+} -+ -+#if !FFI_NATIVE_RAW_API -+ -+ -+/* This is a generic definition of ffi_raw_call, to be used if the -+ * native system does not provide a machine-specific implementation. -+ * Having this, allows code to be written for the raw API, without -+ * the need for system-specific code to handle input in that format; -+ * these following couple of functions will handle the translation forth -+ * and back automatically. */ -+ -+void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) -+{ -+ void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); -+ ffi_raw_to_ptrarray (cif, raw, avalue); -+ ffi_call (cif, fn, rvalue, avalue); -+} -+ -+#if FFI_CLOSURES /* base system provides closures */ -+ -+static void -+ffi_translate_args (ffi_cif *cif, void *rvalue, -+ void **avalue, void *user_data) -+{ -+ ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); -+ ffi_raw_closure *cl = (ffi_raw_closure*)user_data; -+ -+ ffi_ptrarray_to_raw (cif, avalue, raw); -+ (*cl->fun) (cif, rvalue, raw, cl->user_data); -+} -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ ffi_status status; -+ -+ status = ffi_prep_closure_loc ((ffi_closure*) cl, -+ cif, -+ &ffi_translate_args, -+ codeloc, -+ codeloc); -+ if (status == FFI_OK) -+ { -+ cl->fun = fun; -+ cl->user_data = user_data; -+ } -+ -+ return status; -+} -+ -+#endif /* FFI_CLOSURES */ -+#endif /* !FFI_NATIVE_RAW_API */ -+ -+#if FFI_CLOSURES -+ -+/* Again, here is the generic version of ffi_prep_raw_closure, which -+ * will install an intermediate "hub" for translation of arguments from -+ * the pointer-array format, to the raw format */ -+ -+ffi_status -+ffi_prep_raw_closure (ffi_raw_closure* cl, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data) -+{ -+ return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); -+} -+ -+#endif /* FFI_CLOSURES */ -+ -+#endif /* !FFI_NO_RAW_API */ -diff -Nru orig/Modules/_ctypes/libffi_ios/types.c modified/Modules/_ctypes/libffi_ios/types.c ---- orig/Modules/_ctypes/libffi_ios/types.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/types.c 2015-12-20 18:49:29.000000000 +0800 -@@ -0,0 +1,106 @@ -+/* ----------------------------------------------------------------------- -+ types.c - Copyright (c) 1996, 1998 Red Hat, Inc. -+ -+ Predefined ffi_types needed by libffi. -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+/* Hide the basic type definitions from the header file, so that we -+ can redefine them here as "const". */ -+#define LIBFFI_HIDE_BASIC_TYPES -+ -+#include -+#include -+ -+/* Type definitions */ -+ -+#define FFI_TYPEDEF(name, type, id, maybe_const)\ -+struct struct_align_##name { \ -+ char c; \ -+ type x; \ -+}; \ -+maybe_const ffi_type ffi_type_##name = { \ -+ sizeof(type), \ -+ offsetof(struct struct_align_##name, x), \ -+ id, NULL \ -+} -+ -+#define FFI_COMPLEX_TYPEDEF(name, type, maybe_const) \ -+static ffi_type *ffi_elements_complex_##name [2] = { \ -+ (ffi_type *)(&ffi_type_##name), NULL \ -+}; \ -+struct struct_align_complex_##name { \ -+ char c; \ -+ _Complex type x; \ -+}; \ -+maybe_const ffi_type ffi_type_complex_##name = { \ -+ sizeof(_Complex type), \ -+ offsetof(struct struct_align_complex_##name, x), \ -+ FFI_TYPE_COMPLEX, \ -+ (ffi_type **)ffi_elements_complex_##name \ -+} -+ -+/* Size and alignment are fake here. They must not be 0. */ -+const ffi_type ffi_type_void = { -+ 1, 1, FFI_TYPE_VOID, NULL -+}; -+ -+FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8, const); -+FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8, const); -+FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16, const); -+FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16, const); -+FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32, const); -+FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32, const); -+FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64, const); -+FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64, const); -+ -+FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER, const); -+ -+FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT, const); -+FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); -+ -+#if !defined HAVE_LONG_DOUBLE_VARIANT || defined __alpha__ -+#define FFI_LDBL_CONST const -+#else -+#define FFI_LDBL_CONST -+#endif -+ -+#ifdef __alpha__ -+/* Even if we're not configured to default to 128-bit long double, -+ maintain binary compatibility, as -mlong-double-128 can be used -+ at any time. */ -+/* Validate the hard-coded number below. */ -+# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -+#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); -+#endif -+ -+#ifdef FFI_TARGET_HAS_COMPLEX_TYPE -+FFI_COMPLEX_TYPEDEF(float, float, const); -+FFI_COMPLEX_TYPEDEF(double, double, const); -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); -+#endif -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi64_x86_64.c 2015-12-20 18:53:04.000000000 +0800 -@@ -0,0 +1,829 @@ -+#ifdef __x86_64__ -+ -+/* ----------------------------------------------------------------------- -+ ffi64.c - Copyright (c) 2013 The Written Word, Inc. -+ Copyright (c) 2011 Anthony Green -+ Copyright (c) 2008, 2010 Red Hat, Inc. -+ Copyright (c) 2002, 2007 Bo Thorsen -+ -+ x86-64 Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include "internal64.h" -+ -+#ifdef __x86_64__ -+ -+#define MAX_GPR_REGS 6 -+#define MAX_SSE_REGS 8 -+ -+#if defined(__INTEL_COMPILER) -+#include "xmmintrin.h" -+#define UINT128 __m128 -+#else -+#if defined(__SUNPRO_C) -+#include -+#define UINT128 __m128i -+#else -+#define UINT128 __int128_t -+#endif -+#endif -+ -+union big_int_union -+{ -+ UINT32 i32; -+ UINT64 i64; -+ UINT128 i128; -+}; -+ -+struct register_args -+{ -+ /* Registers for argument passing. */ -+ UINT64 gpr[MAX_GPR_REGS]; -+ union big_int_union sse[MAX_SSE_REGS]; -+ UINT64 rax; /* ssecount */ -+ UINT64 r10; /* static chain */ -+}; -+ -+extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void)) FFI_HIDDEN; -+ -+/* All reference to register classes here is identical to the code in -+ gcc/config/i386/i386.c. Do *not* change one without the other. */ -+ -+/* Register class used for passing given 64bit part of the argument. -+ These represent classes as documented by the PS ABI, with the -+ exception of SSESF, SSEDF classes, that are basically SSE class, -+ just gcc will use SF or DFmode move instead of DImode to avoid -+ reformatting penalties. -+ -+ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves -+ whenever possible (upper half does contain padding). */ -+enum x86_64_reg_class -+ { -+ X86_64_NO_CLASS, -+ X86_64_INTEGER_CLASS, -+ X86_64_INTEGERSI_CLASS, -+ X86_64_SSE_CLASS, -+ X86_64_SSESF_CLASS, -+ X86_64_SSEDF_CLASS, -+ X86_64_SSEUP_CLASS, -+ X86_64_X87_CLASS, -+ X86_64_X87UP_CLASS, -+ X86_64_COMPLEX_X87_CLASS, -+ X86_64_MEMORY_CLASS -+ }; -+ -+#define MAX_CLASSES 4 -+ -+#define SSE_CLASS_P(X) ((X) >= X86_64_SSE_CLASS && X <= X86_64_SSEUP_CLASS) -+ -+/* x86-64 register passing implementation. See x86-64 ABI for details. Goal -+ of this code is to classify each 8bytes of incoming argument by the register -+ class and assign registers accordingly. */ -+ -+/* Return the union class of CLASS1 and CLASS2. -+ See the x86-64 PS ABI for details. */ -+ -+static enum x86_64_reg_class -+merge_classes (enum x86_64_reg_class class1, enum x86_64_reg_class class2) -+{ -+ /* Rule #1: If both classes are equal, this is the resulting class. */ -+ if (class1 == class2) -+ return class1; -+ -+ /* Rule #2: If one of the classes is NO_CLASS, the resulting class is -+ the other class. */ -+ if (class1 == X86_64_NO_CLASS) -+ return class2; -+ if (class2 == X86_64_NO_CLASS) -+ return class1; -+ -+ /* Rule #3: If one of the classes is MEMORY, the result is MEMORY. */ -+ if (class1 == X86_64_MEMORY_CLASS || class2 == X86_64_MEMORY_CLASS) -+ return X86_64_MEMORY_CLASS; -+ -+ /* Rule #4: If one of the classes is INTEGER, the result is INTEGER. */ -+ if ((class1 == X86_64_INTEGERSI_CLASS && class2 == X86_64_SSESF_CLASS) -+ || (class2 == X86_64_INTEGERSI_CLASS && class1 == X86_64_SSESF_CLASS)) -+ return X86_64_INTEGERSI_CLASS; -+ if (class1 == X86_64_INTEGER_CLASS || class1 == X86_64_INTEGERSI_CLASS -+ || class2 == X86_64_INTEGER_CLASS || class2 == X86_64_INTEGERSI_CLASS) -+ return X86_64_INTEGER_CLASS; -+ -+ /* Rule #5: If one of the classes is X87, X87UP, or COMPLEX_X87 class, -+ MEMORY is used. */ -+ if (class1 == X86_64_X87_CLASS -+ || class1 == X86_64_X87UP_CLASS -+ || class1 == X86_64_COMPLEX_X87_CLASS -+ || class2 == X86_64_X87_CLASS -+ || class2 == X86_64_X87UP_CLASS -+ || class2 == X86_64_COMPLEX_X87_CLASS) -+ return X86_64_MEMORY_CLASS; -+ -+ /* Rule #6: Otherwise class SSE is used. */ -+ return X86_64_SSE_CLASS; -+} -+ -+/* Classify the argument of type TYPE and mode MODE. -+ CLASSES will be filled by the register class used to pass each word -+ of the operand. The number of words is returned. In case the parameter -+ should be passed in memory, 0 is returned. As a special case for zero -+ sized containers, classes[0] will be NO_CLASS and 1 is returned. -+ -+ See the x86-64 PS ABI for details. -+*/ -+static size_t -+classify_argument (ffi_type *type, enum x86_64_reg_class classes[], -+ size_t byte_offset) -+{ -+ switch (type->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_POINTER: -+ do_integer: -+ { -+ size_t size = byte_offset + type->size; -+ -+ if (size <= 4) -+ { -+ classes[0] = X86_64_INTEGERSI_CLASS; -+ return 1; -+ } -+ else if (size <= 8) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ return 1; -+ } -+ else if (size <= 12) -+ { -+ classes[0] = X86_64_INTEGER_CLASS; -+ classes[1] = X86_64_INTEGERSI_CLASS; -+ return 2; -+ } -+ else if (size <= 16) -+ { -+ classes[0] = classes[1] = X86_64_INTEGER_CLASS; -+ return 2; -+ } -+ else -+ FFI_ASSERT (0); -+ } -+ case FFI_TYPE_FLOAT: -+ if (!(byte_offset % 8)) -+ classes[0] = X86_64_SSESF_CLASS; -+ else -+ classes[0] = X86_64_SSE_CLASS; -+ return 1; -+ case FFI_TYPE_DOUBLE: -+ classes[0] = X86_64_SSEDF_CLASS; -+ return 1; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ classes[0] = X86_64_X87_CLASS; -+ classes[1] = X86_64_X87UP_CLASS; -+ return 2; -+#endif -+ case FFI_TYPE_STRUCT: -+ { -+ const size_t UNITS_PER_WORD = 8; -+ size_t words = (type->size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; -+ ffi_type **ptr; -+ int i; -+ enum x86_64_reg_class subclasses[MAX_CLASSES]; -+ -+ /* If the struct is larger than 32 bytes, pass it on the stack. */ -+ if (type->size > 32) -+ return 0; -+ -+ for (i = 0; i < words; i++) -+ classes[i] = X86_64_NO_CLASS; -+ -+ /* Zero sized arrays or structures are NO_CLASS. We return 0 to -+ signalize memory class, so handle it as special case. */ -+ if (!words) -+ { -+ case FFI_TYPE_VOID: -+ classes[0] = X86_64_NO_CLASS; -+ return 1; -+ } -+ -+ /* Merge the fields of structure. */ -+ for (ptr = type->elements; *ptr != NULL; ptr++) -+ { -+ size_t num; -+ -+ byte_offset = ALIGN (byte_offset, (*ptr)->alignment); -+ -+ num = classify_argument (*ptr, subclasses, byte_offset % 8); -+ if (num == 0) -+ return 0; -+ for (i = 0; i < num; i++) -+ { -+ size_t pos = byte_offset / 8; -+ classes[i + pos] = -+ merge_classes (subclasses[i], classes[i + pos]); -+ } -+ -+ byte_offset += (*ptr)->size; -+ } -+ -+ if (words > 2) -+ { -+ /* When size > 16 bytes, if the first one isn't -+ X86_64_SSE_CLASS or any other ones aren't -+ X86_64_SSEUP_CLASS, everything should be passed in -+ memory. */ -+ if (classes[0] != X86_64_SSE_CLASS) -+ return 0; -+ -+ for (i = 1; i < words; i++) -+ if (classes[i] != X86_64_SSEUP_CLASS) -+ return 0; -+ } -+ -+ /* Final merger cleanup. */ -+ for (i = 0; i < words; i++) -+ { -+ /* If one class is MEMORY, everything should be passed in -+ memory. */ -+ if (classes[i] == X86_64_MEMORY_CLASS) -+ return 0; -+ -+ /* The X86_64_SSEUP_CLASS should be always preceded by -+ X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ -+ if (classes[i] == X86_64_SSEUP_CLASS -+ && classes[i - 1] != X86_64_SSE_CLASS -+ && classes[i - 1] != X86_64_SSEUP_CLASS) -+ { -+ /* The first one should never be X86_64_SSEUP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ classes[i] = X86_64_SSE_CLASS; -+ } -+ -+ /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, -+ everything should be passed in memory. */ -+ if (classes[i] == X86_64_X87UP_CLASS -+ && (classes[i - 1] != X86_64_X87_CLASS)) -+ { -+ /* The first one should never be X86_64_X87UP_CLASS. */ -+ FFI_ASSERT (i != 0); -+ return 0; -+ } -+ } -+ return words; -+ } -+ case FFI_TYPE_COMPLEX: -+ { -+ ffi_type *inner = type->elements[0]; -+ switch (inner->type) -+ { -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ goto do_integer; -+ -+ case FFI_TYPE_FLOAT: -+ classes[0] = X86_64_SSE_CLASS; -+ if (byte_offset % 8) -+ { -+ classes[1] = X86_64_SSESF_CLASS; -+ return 2; -+ } -+ return 1; -+ case FFI_TYPE_DOUBLE: -+ classes[0] = classes[1] = X86_64_SSEDF_CLASS; -+ return 2; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ classes[0] = X86_64_COMPLEX_X87_CLASS; -+ return 1; -+#endif -+ } -+ } -+ } -+ abort(); -+} -+ -+/* Examine the argument and return set number of register required in each -+ class. Return zero iff parameter should be passed in memory, otherwise -+ the number of registers. */ -+ -+static size_t -+examine_argument (ffi_type *type, enum x86_64_reg_class classes[MAX_CLASSES], -+ _Bool in_return, int *pngpr, int *pnsse) -+{ -+ size_t n; -+ int i, ngpr, nsse; -+ -+ n = classify_argument (type, classes, 0); -+ if (n == 0) -+ return 0; -+ -+ ngpr = nsse = 0; -+ for (i = 0; i < n; ++i) -+ switch (classes[i]) -+ { -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ ngpr++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSESF_CLASS: -+ case X86_64_SSEDF_CLASS: -+ nsse++; -+ break; -+ case X86_64_NO_CLASS: -+ case X86_64_SSEUP_CLASS: -+ break; -+ case X86_64_X87_CLASS: -+ case X86_64_X87UP_CLASS: -+ case X86_64_COMPLEX_X87_CLASS: -+ return in_return != 0; -+ default: -+ abort (); -+ } -+ -+ *pngpr = ngpr; -+ *pnsse = nsse; -+ -+ return n; -+} -+ -+/* Perform machine dependent cif processing. */ -+ -+ffi_status -+ffi_prep_cif_machdep (ffi_cif *cif) -+{ -+ int gprcount, ssecount, i, avn, ngpr, nsse, flags; -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t bytes, n, rtype_size; -+ ffi_type *rtype; -+ -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; -+ -+ gprcount = ssecount = 0; -+ -+ rtype = cif->rtype; -+ rtype_size = rtype->size; -+ switch (rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = UNIX64_RET_VOID; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = UNIX64_RET_UINT8; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = UNIX64_RET_SINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = UNIX64_RET_UINT16; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = UNIX64_RET_SINT16; -+ break; -+ case FFI_TYPE_UINT32: -+ flags = UNIX64_RET_UINT32; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ flags = UNIX64_RET_SINT32; -+ break; -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ flags = UNIX64_RET_INT64; -+ break; -+ case FFI_TYPE_POINTER: -+ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = UNIX64_RET_XMM32; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = UNIX64_RET_XMM64; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ flags = UNIX64_RET_X87; -+ break; -+ case FFI_TYPE_STRUCT: -+ n = examine_argument (cif->rtype, classes, 1, &ngpr, &nsse); -+ if (n == 0) -+ { -+ /* The return value is passed in memory. A pointer to that -+ memory is the first argument. Allocate a register for it. */ -+ gprcount++; -+ /* We don't have to do anything in asm for the return. */ -+ flags = UNIX64_RET_VOID | UNIX64_FLAG_RET_IN_MEM; -+ } -+ else -+ { -+ _Bool sse0 = SSE_CLASS_P (classes[0]); -+ -+ if (rtype_size == 4 && sse0) -+ flags = UNIX64_RET_XMM32; -+ else if (rtype_size == 8) -+ flags = sse0 ? UNIX64_RET_XMM64 : UNIX64_RET_INT64; -+ else -+ { -+ _Bool sse1 = n == 2 && SSE_CLASS_P (classes[1]); -+ if (sse0 && sse1) -+ flags = UNIX64_RET_ST_XMM0_XMM1; -+ else if (sse0) -+ flags = UNIX64_RET_ST_XMM0_RAX; -+ else if (sse1) -+ flags = UNIX64_RET_ST_RAX_XMM0; -+ else -+ flags = UNIX64_RET_ST_RAX_RDX; -+ flags |= rtype_size << UNIX64_SIZE_SHIFT; -+ } -+ } -+ break; -+ case FFI_TYPE_COMPLEX: -+ switch (rtype->elements[0]->type) -+ { -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ flags = UNIX64_RET_ST_RAX_RDX | (rtype_size << UNIX64_SIZE_SHIFT); -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = UNIX64_RET_XMM64; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = UNIX64_RET_ST_XMM0_XMM1 | (16 << UNIX64_SIZE_SHIFT); -+ break; -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+ case FFI_TYPE_LONGDOUBLE: -+ flags = UNIX64_RET_X87_2; -+ break; -+#endif -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ -+ /* Go over all arguments and determine the way they should be passed. -+ If it's in a register and there is space for it, let that be so. If -+ not, add it's size to the stack byte count. */ -+ for (bytes = 0, i = 0, avn = cif->nargs; i < avn; i++) -+ { -+ if (examine_argument (cif->arg_types[i], classes, 0, &ngpr, &nsse) == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = cif->arg_types[i]->alignment; -+ -+ if (align < 8) -+ align = 8; -+ -+ bytes = ALIGN (bytes, align); -+ bytes += cif->arg_types[i]->size; -+ } -+ else -+ { -+ gprcount += ngpr; -+ ssecount += nsse; -+ } -+ } -+ if (ssecount) -+ flags |= UNIX64_FLAG_XMM_ARGS; -+ -+ cif->flags = flags; -+ cif->bytes = ALIGN (bytes, 8); -+ -+ return FFI_OK; -+} -+ -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int gprcount, ssecount, ngpr, nsse, i, avn, flags; -+ struct register_args *reg_args; -+ -+ /* Can't call 32-bit mode from 64-bit mode. */ -+ FFI_ASSERT (cif->abi == FFI_UNIX64); -+ -+ /* If the return value is a struct and we don't have a return value -+ address then we need to make one. Otherwise we can ignore it. */ -+ flags = cif->flags; -+ if (rvalue == NULL) -+ { -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ rvalue = alloca (cif->rtype->size); -+ else -+ flags = UNIX64_RET_VOID; -+ } -+ -+ /* Allocate the space for the arguments, plus 4 words of temp space. */ -+ stack = alloca (sizeof (struct register_args) + cif->bytes + 4*8); -+ reg_args = (struct register_args *) stack; -+ argp = stack + sizeof (struct register_args); -+ -+ reg_args->r10 = (uintptr_t) closure; -+ -+ gprcount = ssecount = 0; -+ -+ /* If the return value is passed in memory, add the pointer as the -+ first integer argument. */ -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ reg_args->gpr[gprcount++] = (unsigned long) rvalue; -+ -+ avn = cif->nargs; -+ arg_types = cif->arg_types; -+ -+ for (i = 0; i < avn; ++i) -+ { -+ size_t n, size = arg_types[i]->size; -+ -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = arg_types[i]->alignment; -+ -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; -+ -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ memcpy (argp, avalue[i], size); -+ argp += size; -+ } -+ else -+ { -+ /* The argument is passed entirely in registers. */ -+ char *a = (char *) avalue[i]; -+ int j; -+ -+ for (j = 0; j < n; j++, a += 8, size -= 8) -+ { -+ switch (classes[j]) -+ { -+ case X86_64_NO_CLASS: -+ case X86_64_SSEUP_CLASS: -+ break; -+ case X86_64_INTEGER_CLASS: -+ case X86_64_INTEGERSI_CLASS: -+ /* Sign-extend integer arguments passed in general -+ purpose registers, to cope with the fact that -+ LLVM incorrectly assumes that this will be done -+ (the x86-64 PS ABI does not specify this). */ -+ switch (arg_types[i]->type) -+ { -+ case FFI_TYPE_SINT8: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT8 *) a); -+ break; -+ case FFI_TYPE_SINT16: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT16 *) a); -+ break; -+ case FFI_TYPE_SINT32: -+ reg_args->gpr[gprcount] = (SINT64) *((SINT32 *) a); -+ break; -+ default: -+ reg_args->gpr[gprcount] = 0; -+ memcpy (®_args->gpr[gprcount], a, size); -+ } -+ gprcount++; -+ break; -+ case X86_64_SSE_CLASS: -+ case X86_64_SSEDF_CLASS: -+ reg_args->sse[ssecount++].i64 = *(UINT64 *) a; -+ break; -+ case X86_64_SSESF_CLASS: -+ reg_args->sse[ssecount++].i32 = *(UINT32 *) a; -+ break; -+ default: -+ abort(); -+ } -+ } -+ } -+ } -+ reg_args->rax = ssecount; -+ -+ ffi_call_unix64 (stack, cif->bytes + sizeof (struct register_args), -+ flags, rvalue, fn); -+} -+ -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} -+ -+void -+ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+ -+extern void ffi_closure_unix64(void) FFI_HIDDEN; -+extern void ffi_closure_unix64_sse(void) FFI_HIDDEN; -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *codeloc) -+{ -+ static const unsigned char trampoline[16] = { -+ /* leaq -0x7(%rip),%r10 # 0x0 */ -+ 0x4c, 0x8d, 0x15, 0xf9, 0xff, 0xff, 0xff, -+ /* jmpq *0x3(%rip) # 0x10 */ -+ 0xff, 0x25, 0x03, 0x00, 0x00, 0x00, -+ /* nopl (%rax) */ -+ 0x0f, 0x1f, 0x00 -+ }; -+ void (*dest)(void); -+ char *tramp = closure->tramp; -+ -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; -+ -+ if (cif->flags & UNIX64_FLAG_XMM_ARGS) -+ dest = ffi_closure_unix64_sse; -+ else -+ dest = ffi_closure_unix64; -+ -+ memcpy (tramp, trampoline, sizeof(trampoline)); -+ *(UINT64 *)(tramp + 16) = (uintptr_t)dest; -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; -+} -+ -+int FFI_HIDDEN -+ffi_closure_unix64_inner(ffi_cif *cif, -+ void (*fun)(ffi_cif*, void*, void**, void*), -+ void *user_data, -+ void *rvalue, -+ struct register_args *reg_args, -+ char *argp) -+{ -+ void **avalue; -+ ffi_type **arg_types; -+ long i, avn; -+ int gprcount, ssecount, ngpr, nsse; -+ int flags; -+ -+ avn = cif->nargs; -+ flags = cif->flags; -+ avalue = alloca(avn * sizeof(void *)); -+ gprcount = ssecount = 0; -+ -+ if (flags & UNIX64_FLAG_RET_IN_MEM) -+ { -+ /* On return, %rax will contain the address that was passed -+ by the caller in %rdi. */ -+ void *r = (void *)(uintptr_t)reg_args->gpr[gprcount++]; -+ *(void **)rvalue = r; -+ rvalue = r; -+ flags = (sizeof(void *) == 4 ? UNIX64_RET_UINT32 : UNIX64_RET_INT64); -+ } -+ -+ arg_types = cif->arg_types; -+ for (i = 0; i < avn; ++i) -+ { -+ enum x86_64_reg_class classes[MAX_CLASSES]; -+ size_t n; -+ -+ n = examine_argument (arg_types[i], classes, 0, &ngpr, &nsse); -+ if (n == 0 -+ || gprcount + ngpr > MAX_GPR_REGS -+ || ssecount + nsse > MAX_SSE_REGS) -+ { -+ long align = arg_types[i]->alignment; -+ -+ /* Stack arguments are *always* at least 8 byte aligned. */ -+ if (align < 8) -+ align = 8; -+ -+ /* Pass this argument in memory. */ -+ argp = (void *) ALIGN (argp, align); -+ avalue[i] = argp; -+ argp += arg_types[i]->size; -+ } -+ /* If the argument is in a single register, or two consecutive -+ integer registers, then we can use that address directly. */ -+ else if (n == 1 -+ || (n == 2 && !(SSE_CLASS_P (classes[0]) -+ || SSE_CLASS_P (classes[1])))) -+ { -+ /* The argument is in a single register. */ -+ if (SSE_CLASS_P (classes[0])) -+ { -+ avalue[i] = ®_args->sse[ssecount]; -+ ssecount += n; -+ } -+ else -+ { -+ avalue[i] = ®_args->gpr[gprcount]; -+ gprcount += n; -+ } -+ } -+ /* Otherwise, allocate space to make them consecutive. */ -+ else -+ { -+ char *a = alloca (16); -+ int j; -+ -+ avalue[i] = a; -+ for (j = 0; j < n; j++, a += 8) -+ { -+ if (SSE_CLASS_P (classes[j])) -+ memcpy (a, ®_args->sse[ssecount++], 8); -+ else -+ memcpy (a, ®_args->gpr[gprcount++], 8); -+ } -+ } -+ } -+ -+ /* Invoke the closure. */ -+ fun (cif, rvalue, avalue, user_data); -+ -+ /* Tell assembly how to perform return type promotions. */ -+ return flags; -+} -+ -+extern void ffi_go_closure_unix64(void) FFI_HIDDEN; -+extern void ffi_go_closure_unix64_sse(void) FFI_HIDDEN; -+ -+ffi_status -+ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*, void*, void**, void*)) -+{ -+ if (cif->abi != FFI_UNIX64) -+ return FFI_BAD_ABI; -+ -+ closure->tramp = (cif->flags & UNIX64_FLAG_XMM_ARGS -+ ? ffi_go_closure_unix64_sse -+ : ffi_go_closure_unix64); -+ closure->cif = cif; -+ closure->fun = fun; -+ -+ return FFI_OK; -+} -+ -+#endif /* __x86_64__ */ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c ---- orig/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/ffi_i386.c 2015-12-20 18:53:04.000000000 +0800 -@@ -0,0 +1,734 @@ -+#ifdef __i386__ -+ -+/* ----------------------------------------------------------------------- -+ ffi.c - Copyright (c) 1996, 1998, 1999, 2001, 2007, 2008 Red Hat, Inc. -+ Copyright (c) 2002 Ranjit Mathew -+ Copyright (c) 2002 Bo Thorsen -+ Copyright (c) 2002 Roger Sayle -+ Copyright (C) 2008, 2010 Free Software Foundation, Inc. -+ -+ x86 Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#ifndef __x86_64__ -+#include -+#include -+#include -+#include "internal.h" -+ -+/* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; -+ all further uses in this file will refer to the 80-bit type. */ -+#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE -+# if FFI_TYPE_LONGDOUBLE != 4 -+# error FFI_TYPE_LONGDOUBLE out of date -+# endif -+#else -+# undef FFI_TYPE_LONGDOUBLE -+# define FFI_TYPE_LONGDOUBLE 4 -+#endif -+ -+#if defined(__GNUC__) && !defined(__declspec) -+# define __declspec(x) __attribute__((x)) -+#endif -+ -+/* Perform machine dependent cif processing. */ -+ffi_status FFI_HIDDEN -+ffi_prep_cif_machdep(ffi_cif *cif) -+{ -+ size_t bytes = 0; -+ int i, n, flags, cabi = cif->abi; -+ -+ switch (cabi) -+ { -+ case FFI_SYSV: -+ case FFI_STDCALL: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_MS_CDECL: -+ case FFI_PASCAL: -+ case FFI_REGISTER: -+ break; -+ default: -+ return FFI_BAD_ABI; -+ } -+ -+ switch (cif->rtype->type) -+ { -+ case FFI_TYPE_VOID: -+ flags = X86_RET_VOID; -+ break; -+ case FFI_TYPE_FLOAT: -+ flags = X86_RET_FLOAT; -+ break; -+ case FFI_TYPE_DOUBLE: -+ flags = X86_RET_DOUBLE; -+ break; -+ case FFI_TYPE_LONGDOUBLE: -+ flags = X86_RET_LDOUBLE; -+ break; -+ case FFI_TYPE_UINT8: -+ flags = X86_RET_UINT8; -+ break; -+ case FFI_TYPE_UINT16: -+ flags = X86_RET_UINT16; -+ break; -+ case FFI_TYPE_SINT8: -+ flags = X86_RET_SINT8; -+ break; -+ case FFI_TYPE_SINT16: -+ flags = X86_RET_SINT16; -+ break; -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ flags = X86_RET_INT32; -+ break; -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ flags = X86_RET_INT64; -+ break; -+ case FFI_TYPE_STRUCT: -+#ifndef X86 -+ /* ??? This should be a different ABI rather than an ifdef. */ -+ if (cif->rtype->size == 1) -+ flags = X86_RET_STRUCT_1B; -+ else if (cif->rtype->size == 2) -+ flags = X86_RET_STRUCT_2B; -+ else if (cif->rtype->size == 4) -+ flags = X86_RET_INT32; -+ else if (cif->rtype->size == 8) -+ flags = X86_RET_INT64; -+ else -+#endif -+ { -+ do_struct: -+ switch (cabi) -+ { -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_STDCALL: -+ case FFI_MS_CDECL: -+ flags = X86_RET_STRUCTARG; -+ break; -+ default: -+ flags = X86_RET_STRUCTPOP; -+ break; -+ } -+ /* Allocate space for return value pointer. */ -+ bytes += ALIGN (sizeof(void*), FFI_SIZEOF_ARG); -+ } -+ break; -+ case FFI_TYPE_COMPLEX: -+ switch (cif->rtype->elements[0]->type) -+ { -+ case FFI_TYPE_DOUBLE: -+ case FFI_TYPE_LONGDOUBLE: -+ case FFI_TYPE_SINT64: -+ case FFI_TYPE_UINT64: -+ goto do_struct; -+ case FFI_TYPE_FLOAT: -+ case FFI_TYPE_INT: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ flags = X86_RET_INT64; -+ break; -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT16: -+ flags = X86_RET_INT32; -+ break; -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT8: -+ flags = X86_RET_STRUCT_2B; -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ break; -+ default: -+ return FFI_BAD_TYPEDEF; -+ } -+ cif->flags = flags; -+ -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *t = cif->arg_types[i]; -+ -+ bytes = ALIGN (bytes, t->alignment); -+ bytes += ALIGN (t->size, FFI_SIZEOF_ARG); -+ } -+ cif->bytes = ALIGN (bytes, 16); -+ -+ return FFI_OK; -+} -+ -+static ffi_arg -+extend_basic_type(void *arg, int type) -+{ -+ switch (type) -+ { -+ case FFI_TYPE_SINT8: -+ return *(SINT8 *)arg; -+ case FFI_TYPE_UINT8: -+ return *(UINT8 *)arg; -+ case FFI_TYPE_SINT16: -+ return *(SINT16 *)arg; -+ case FFI_TYPE_UINT16: -+ return *(UINT16 *)arg; -+ -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_POINTER: -+ case FFI_TYPE_FLOAT: -+ return *(UINT32 *)arg; -+ -+ default: -+ abort(); -+ } -+} -+ -+struct call_frame -+{ -+ void *ebp; /* 0 */ -+ void *retaddr; /* 4 */ -+ void (*fn)(void); /* 8 */ -+ int flags; /* 12 */ -+ void *rvalue; /* 16 */ -+ unsigned regs[3]; /* 20-28 */ -+}; -+ -+struct abi_params -+{ -+ int dir; /* parameter growth direction */ -+ int static_chain; /* the static chain register used by gcc */ -+ int nregs; /* number of register parameters */ -+ int regs[3]; -+}; -+ -+static const struct abi_params abi_params[FFI_LAST_ABI] = { -+ [FFI_SYSV] = { 1, R_ECX, 0 }, -+ [FFI_THISCALL] = { 1, R_EAX, 1, { R_ECX } }, -+ [FFI_FASTCALL] = { 1, R_EAX, 2, { R_ECX, R_EDX } }, -+ [FFI_STDCALL] = { 1, R_ECX, 0 }, -+ [FFI_PASCAL] = { -1, R_ECX, 0 }, -+ /* ??? No defined static chain; gcc does not support REGISTER. */ -+ [FFI_REGISTER] = { -1, R_ECX, 3, { R_EAX, R_EDX, R_ECX } }, -+ [FFI_MS_CDECL] = { 1, R_ECX, 0 } -+}; -+ -+extern void ffi_call_i386(struct call_frame *, char *) -+#if HAVE_FASTCALL -+ __declspec(fastcall) -+#endif -+ FFI_HIDDEN; -+ -+static void -+ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ size_t rsize, bytes; -+ struct call_frame *frame; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int flags, cabi, i, n, dir, narg_reg; -+ const struct abi_params *pabi; -+ -+ flags = cif->flags; -+ cabi = cif->abi; -+ pabi = &abi_params[cabi]; -+ dir = pabi->dir; -+ -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ switch (flags) -+ { -+ case X86_RET_FLOAT: -+ case X86_RET_DOUBLE: -+ case X86_RET_LDOUBLE: -+ case X86_RET_STRUCTPOP: -+ case X86_RET_STRUCTARG: -+ /* The float cases need to pop the 387 stack. -+ The struct cases need to pass a valid pointer to the callee. */ -+ rsize = cif->rtype->size; -+ break; -+ default: -+ /* We can pretend that the callee returns nothing. */ -+ flags = X86_RET_VOID; -+ break; -+ } -+ } -+ -+ bytes = cif->bytes; -+ stack = alloca(bytes + sizeof(*frame) + rsize); -+ argp = (dir < 0 ? stack + bytes : stack); -+ frame = (struct call_frame *)(stack + bytes); -+ if (rsize) -+ rvalue = frame + 1; -+ -+ frame->fn = fn; -+ frame->flags = flags; -+ frame->rvalue = rvalue; -+ frame->regs[pabi->static_chain] = (unsigned)closure; -+ -+ narg_reg = 0; -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ /* The pointer is passed as the first argument. */ -+ if (pabi->nregs > 0) -+ { -+ frame->regs[pabi->regs[0]] = (unsigned)rvalue; -+ narg_reg = 1; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ *(void **)argp = rvalue; -+ argp += sizeof(void *); -+ break; -+ } -+ -+ arg_types = cif->arg_types; -+ for (i = 0, n = cif->nargs; i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ void *valp = avalue[i]; -+ size_t z = ty->size; -+ int t = ty->type; -+ -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) -+ { -+ ffi_arg val = extend_basic_type (valp, t); -+ -+ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) -+ frame->regs[pabi->regs[narg_reg++]] = val; -+ else if (dir < 0) -+ { -+ argp -= 4; -+ *(ffi_arg *)argp = val; -+ } -+ else -+ { -+ *(ffi_arg *)argp = val; -+ argp += 4; -+ } -+ } -+ else -+ { -+ size_t za = ALIGN (z, FFI_SIZEOF_ARG); -+ size_t align = FFI_SIZEOF_ARG; -+ -+ /* Alignment rules for arguments are quite complex. Vectors and -+ structures with 16 byte alignment get it. Note that long double -+ on Darwin does have 16 byte alignment, and does not get this -+ alignment if passed directly; a structure with a long double -+ inside, however, would get 16 byte alignment. Since libffi does -+ not support vectors, we need non concern ourselves with other -+ cases. */ -+ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) -+ align = 16; -+ -+ if (dir < 0) -+ { -+ /* ??? These reverse argument ABIs are probably too old -+ to have cared about alignment. Someone should check. */ -+ argp -= za; -+ memcpy (argp, valp, z); -+ } -+ else -+ { -+ argp = (char *)ALIGN (argp, align); -+ memcpy (argp, valp, z); -+ argp += za; -+ } -+ } -+ } -+ FFI_ASSERT (dir > 0 || argp == stack); -+ -+ ffi_call_i386 (frame, stack); -+} -+ -+void -+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, NULL); -+} -+ -+void -+ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue, -+ void **avalue, void *closure) -+{ -+ ffi_call_int (cif, fn, rvalue, avalue, closure); -+} -+ -+/** private members **/ -+ -+void FFI_HIDDEN ffi_closure_i386(void); -+void FFI_HIDDEN ffi_closure_STDCALL(void); -+void FFI_HIDDEN ffi_closure_REGISTER(void); -+ -+struct closure_frame -+{ -+ unsigned rettemp[4]; /* 0 */ -+ unsigned regs[3]; /* 16-24 */ -+ ffi_cif *cif; /* 28 */ -+ void (*fun)(ffi_cif*,void*,void**,void*); /* 32 */ -+ void *user_data; /* 36 */ -+}; -+ -+int FFI_HIDDEN -+#if HAVE_FASTCALL -+__declspec(fastcall) -+#endif -+ffi_closure_inner (struct closure_frame *frame, char *stack) -+{ -+ ffi_cif *cif = frame->cif; -+ int cabi, i, n, flags, dir, narg_reg; -+ const struct abi_params *pabi; -+ ffi_type **arg_types; -+ char *argp; -+ void *rvalue; -+ void **avalue; -+ -+ cabi = cif->abi; -+ flags = cif->flags; -+ narg_reg = 0; -+ rvalue = frame->rettemp; -+ pabi = &abi_params[cabi]; -+ dir = pabi->dir; -+ argp = (dir < 0 ? stack + cif->bytes : stack); -+ -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ if (pabi->nregs > 0) -+ { -+ rvalue = (void *)frame->regs[pabi->regs[0]]; -+ narg_reg = 1; -+ frame->rettemp[0] = (unsigned)rvalue; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ rvalue = *(void **)argp; -+ argp += sizeof(void *); -+ frame->rettemp[0] = (unsigned)rvalue; -+ break; -+ } -+ -+ n = cif->nargs; -+ avalue = alloca(sizeof(void *) * n); -+ -+ arg_types = cif->arg_types; -+ for (i = 0; i < n; ++i) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; -+ int t = ty->type; -+ void *valp; -+ -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT) -+ { -+ if (t != FFI_TYPE_FLOAT && narg_reg < pabi->nregs) -+ valp = &frame->regs[pabi->regs[narg_reg++]]; -+ else if (dir < 0) -+ { -+ argp -= 4; -+ valp = argp; -+ } -+ else -+ { -+ valp = argp; -+ argp += 4; -+ } -+ } -+ else -+ { -+ size_t za = ALIGN (z, FFI_SIZEOF_ARG); -+ size_t align = FFI_SIZEOF_ARG; -+ -+ /* See the comment in ffi_call_int. */ -+ if (t == FFI_TYPE_STRUCT && ty->alignment >= 16) -+ align = 16; -+ -+ if (dir < 0) -+ { -+ /* ??? These reverse argument ABIs are probably too old -+ to have cared about alignment. Someone should check. */ -+ argp -= za; -+ valp = argp; -+ } -+ else -+ { -+ argp = (char *)ALIGN (argp, align); -+ valp = argp; -+ argp += za; -+ } -+ } -+ -+ avalue[i] = valp; -+ } -+ -+ frame->fun (cif, rvalue, avalue, frame->user_data); -+ -+ if (cabi == FFI_STDCALL) -+ return flags + (cif->bytes << X86_RET_POP_SHIFT); -+ else -+ return flags; -+} -+ -+ffi_status -+ffi_prep_closure_loc (ffi_closure* closure, -+ ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ char *tramp = closure->tramp; -+ void (*dest)(void); -+ int op = 0xb8; /* movl imm, %eax */ -+ -+ switch (cif->abi) -+ { -+ case FFI_SYSV: -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ case FFI_MS_CDECL: -+ dest = ffi_closure_i386; -+ break; -+ case FFI_STDCALL: -+ case FFI_PASCAL: -+ dest = ffi_closure_STDCALL; -+ break; -+ case FFI_REGISTER: -+ dest = ffi_closure_REGISTER; -+ op = 0x68; /* pushl imm */ -+ default: -+ return FFI_BAD_ABI; -+ } -+ -+ /* movl or pushl immediate. */ -+ tramp[0] = op; -+ *(void **)(tramp + 1) = codeloc; -+ -+ /* jmp dest */ -+ tramp[5] = 0xe9; -+ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; -+} -+ -+void FFI_HIDDEN ffi_go_closure_EAX(void); -+void FFI_HIDDEN ffi_go_closure_ECX(void); -+void FFI_HIDDEN ffi_go_closure_STDCALL(void); -+ -+ffi_status -+ffi_prep_go_closure (ffi_go_closure* closure, ffi_cif* cif, -+ void (*fun)(ffi_cif*,void*,void**,void*)) -+{ -+ void (*dest)(void); -+ -+ switch (cif->abi) -+ { -+ case FFI_SYSV: -+ case FFI_MS_CDECL: -+ dest = ffi_go_closure_ECX; -+ break; -+ case FFI_THISCALL: -+ case FFI_FASTCALL: -+ dest = ffi_go_closure_EAX; -+ break; -+ case FFI_STDCALL: -+ case FFI_PASCAL: -+ dest = ffi_go_closure_STDCALL; -+ break; -+ case FFI_REGISTER: -+ default: -+ return FFI_BAD_ABI; -+ } -+ -+ closure->tramp = dest; -+ closure->cif = cif; -+ closure->fun = fun; -+ -+ return FFI_OK; -+} -+ -+/* ------- Native raw API support -------------------------------- */ -+ -+#if !FFI_NO_RAW_API -+ -+void FFI_HIDDEN ffi_closure_raw_SYSV(void); -+void FFI_HIDDEN ffi_closure_raw_THISCALL(void); -+ -+ffi_status -+ffi_prep_raw_closure_loc (ffi_raw_closure *closure, -+ ffi_cif *cif, -+ void (*fun)(ffi_cif*,void*,ffi_raw*,void*), -+ void *user_data, -+ void *codeloc) -+{ -+ char *tramp = closure->tramp; -+ void (*dest)(void); -+ int i; -+ -+ /* We currently don't support certain kinds of arguments for raw -+ closures. This should be implemented by a separate assembly -+ language routine, since it would require argument processing, -+ something we don't do now for performance. */ -+ for (i = cif->nargs-1; i >= 0; i--) -+ switch (cif->arg_types[i]->type) -+ { -+ case FFI_TYPE_STRUCT: -+ case FFI_TYPE_LONGDOUBLE: -+ return FFI_BAD_TYPEDEF; -+ } -+ -+ switch (cif->abi) -+ { -+ case FFI_THISCALL: -+ dest = ffi_closure_raw_THISCALL; -+ break; -+ case FFI_SYSV: -+ dest = ffi_closure_raw_SYSV; -+ break; -+ default: -+ return FFI_BAD_ABI; -+ } -+ -+ /* movl imm, %eax. */ -+ tramp[0] = 0xb8; -+ *(void **)(tramp + 1) = codeloc; -+ -+ /* jmp dest */ -+ tramp[5] = 0xe9; -+ *(unsigned *)(tramp + 6) = (unsigned)dest - ((unsigned)codeloc + 10); -+ -+ closure->cif = cif; -+ closure->fun = fun; -+ closure->user_data = user_data; -+ -+ return FFI_OK; -+} -+ -+void -+ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *avalue) -+{ -+ size_t rsize, bytes; -+ struct call_frame *frame; -+ char *stack, *argp; -+ ffi_type **arg_types; -+ int flags, cabi, i, n, narg_reg; -+ const struct abi_params *pabi; -+ -+ flags = cif->flags; -+ cabi = cif->abi; -+ pabi = &abi_params[cabi]; -+ -+ rsize = 0; -+ if (rvalue == NULL) -+ { -+ switch (flags) -+ { -+ case X86_RET_FLOAT: -+ case X86_RET_DOUBLE: -+ case X86_RET_LDOUBLE: -+ case X86_RET_STRUCTPOP: -+ case X86_RET_STRUCTARG: -+ /* The float cases need to pop the 387 stack. -+ The struct cases need to pass a valid pointer to the callee. */ -+ rsize = cif->rtype->size; -+ break; -+ default: -+ /* We can pretend that the callee returns nothing. */ -+ flags = X86_RET_VOID; -+ break; -+ } -+ } -+ -+ bytes = cif->bytes; -+ argp = stack = alloca(bytes + sizeof(*frame) + rsize); -+ frame = (struct call_frame *)(stack + bytes); -+ if (rsize) -+ rvalue = frame + 1; -+ -+ frame->fn = fn; -+ frame->flags = flags; -+ frame->rvalue = rvalue; -+ -+ narg_reg = 0; -+ switch (flags) -+ { -+ case X86_RET_STRUCTARG: -+ /* The pointer is passed as the first argument. */ -+ if (pabi->nregs > 0) -+ { -+ frame->regs[pabi->regs[0]] = (unsigned)rvalue; -+ narg_reg = 1; -+ break; -+ } -+ /* fallthru */ -+ case X86_RET_STRUCTPOP: -+ *(void **)argp = rvalue; -+ argp += sizeof(void *); -+ bytes -= sizeof(void *); -+ break; -+ } -+ -+ arg_types = cif->arg_types; -+ for (i = 0, n = cif->nargs; narg_reg < pabi->nregs && i < n; i++) -+ { -+ ffi_type *ty = arg_types[i]; -+ size_t z = ty->size; -+ int t = ty->type; -+ -+ if (z <= FFI_SIZEOF_ARG && t != FFI_TYPE_STRUCT && t != FFI_TYPE_FLOAT) -+ { -+ ffi_arg val = extend_basic_type (avalue, t); -+ frame->regs[pabi->regs[narg_reg++]] = val; -+ z = FFI_SIZEOF_ARG; -+ } -+ else -+ { -+ memcpy (argp, avalue, z); -+ z = ALIGN (z, FFI_SIZEOF_ARG); -+ argp += z; -+ } -+ avalue += z; -+ bytes -= z; -+ } -+ if (i < n) -+ memcpy (argp, avalue, bytes); -+ -+ ffi_call_i386 (frame, stack); -+} -+#endif /* !FFI_NO_RAW_API */ -+#endif /* !__x86_64__ */ -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal.h modified/Modules/_ctypes/libffi_ios/x86/internal.h ---- orig/Modules/_ctypes/libffi_ios/x86/internal.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal.h 2015-12-20 19:03:47.000000000 +0800 -@@ -0,0 +1,29 @@ -+#define X86_RET_FLOAT 0 -+#define X86_RET_DOUBLE 1 -+#define X86_RET_LDOUBLE 2 -+#define X86_RET_SINT8 3 -+#define X86_RET_SINT16 4 -+#define X86_RET_UINT8 5 -+#define X86_RET_UINT16 6 -+#define X86_RET_INT64 7 -+#define X86_RET_INT32 8 -+#define X86_RET_VOID 9 -+#define X86_RET_STRUCTPOP 10 -+#define X86_RET_STRUCTARG 11 -+#define X86_RET_STRUCT_1B 12 -+#define X86_RET_STRUCT_2B 13 -+#define X86_RET_UNUSED14 14 -+#define X86_RET_UNUSED15 15 -+ -+#define X86_RET_TYPE_MASK 15 -+#define X86_RET_POP_SHIFT 4 -+ -+#define R_EAX 0 -+#define R_EDX 1 -+#define R_ECX 2 -+ -+#ifdef __PCC__ -+# define HAVE_FASTCALL 0 -+#else -+# define HAVE_FASTCALL 1 -+#endif -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/internal64.h modified/Modules/_ctypes/libffi_ios/x86/internal64.h ---- orig/Modules/_ctypes/libffi_ios/x86/internal64.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/internal64.h 2015-12-20 19:03:50.000000000 +0800 -@@ -0,0 +1,22 @@ -+#define UNIX64_RET_VOID 0 -+#define UNIX64_RET_UINT8 1 -+#define UNIX64_RET_UINT16 2 -+#define UNIX64_RET_UINT32 3 -+#define UNIX64_RET_SINT8 4 -+#define UNIX64_RET_SINT16 5 -+#define UNIX64_RET_SINT32 6 -+#define UNIX64_RET_INT64 7 -+#define UNIX64_RET_XMM32 8 -+#define UNIX64_RET_XMM64 9 -+#define UNIX64_RET_X87 10 -+#define UNIX64_RET_X87_2 11 -+#define UNIX64_RET_ST_XMM0_RAX 12 -+#define UNIX64_RET_ST_RAX_XMM0 13 -+#define UNIX64_RET_ST_XMM0_XMM1 14 -+#define UNIX64_RET_ST_RAX_RDX 15 -+ -+#define UNIX64_RET_LAST 15 -+ -+#define UNIX64_FLAG_RET_IN_MEM (1 << 10) -+#define UNIX64_FLAG_XMM_ARGS (1 << 11) -+#define UNIX64_SIZE_SHIFT 12 -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S ---- orig/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/sysv_i386.S 2015-12-20 18:53:04.000000000 +0800 -@@ -0,0 +1,1045 @@ -+#ifdef __i386__ -+ -+/* ----------------------------------------------------------------------- -+ sysv.S - Copyright (c) 2013 The Written Word, Inc. -+ - Copyright (c) 1996,1998,2001-2003,2005,2008,2010 Red Hat, Inc. -+ -+ X86 Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#ifndef __x86_64__ -+ -+#define LIBFFI_ASM -+#include -+#include -+#include "internal.h" -+ -+#define C2(X, Y) X ## Y -+#define C1(X, Y) C2(X, Y) -+#ifdef __USER_LABEL_PREFIX__ -+# define C(X) C1(__USER_LABEL_PREFIX__, X) -+#else -+# define C(X) X -+#endif -+ -+#ifdef X86_DARWIN -+# define L(X) C1(L, X) -+#else -+# define L(X) C1(.L, X) -+#endif -+ -+#ifdef __ELF__ -+# define ENDF(X) .type X,@function; .size X, . - X -+#else -+# define ENDF(X) -+#endif -+ -+/* Handle win32 fastcall name mangling. */ -+#ifdef X86_WIN32 -+# define ffi_call_i386 @ffi_call_i386@8 -+# define ffi_closure_inner @ffi_closure_inner@8 -+#else -+# define ffi_call_i386 C(ffi_call_i386) -+# define ffi_closure_inner C(ffi_closure_inner) -+#endif -+ -+/* This macro allows the safe creation of jump tables without an -+ actual table. The entry points into the table are all 8 bytes. -+ The use of ORG asserts that we're at the correct location. */ -+/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ -+#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) -+# define E(BASE, X) .balign 8 -+#else -+# define E(BASE, X) .balign 8; .org BASE + X * 8 -+#endif -+ -+ .text -+ .balign 16 -+ .globl ffi_call_i386 -+ FFI_HIDDEN(ffi_call_i386) -+ -+/* This is declared as -+ -+ void ffi_call_i386(struct call_frame *frame, char *argp) -+ __attribute__((fastcall)); -+ -+ Thus the arguments are present in -+ -+ ecx: frame -+ edx: argp -+*/ -+ -+ffi_call_i386: -+L(UW0): -+ # cfi_startproc -+#if !HAVE_FASTCALL -+ movl 4(%esp), %ecx -+ movl 8(%esp), %edx -+#endif -+ movl (%esp), %eax /* move the return address */ -+ movl %ebp, (%ecx) /* store %ebp into local frame */ -+ movl %eax, 4(%ecx) /* store retaddr into local frame */ -+ -+ /* New stack frame based off ebp. This is a itty bit of unwind -+ trickery in that the CFA *has* changed. There is no easy way -+ to describe it correctly on entry to the function. Fortunately, -+ it doesn't matter too much since at all points we can correctly -+ unwind back to ffi_call. Note that the location to which we -+ moved the return address is (the new) CFA-4, so from the -+ perspective of the unwind info, it hasn't moved. */ -+ movl %ecx, %ebp -+L(UW1): -+ # cfi_def_cfa(%ebp, 8) -+ # cfi_rel_offset(%ebp, 0) -+ -+ movl %edx, %esp /* set outgoing argument stack */ -+ movl 20+R_EAX*4(%ebp), %eax /* set register arguments */ -+ movl 20+R_EDX*4(%ebp), %edx -+ movl 20+R_ECX*4(%ebp), %ecx -+ -+ call *8(%ebp) -+ -+ movl 12(%ebp), %ecx /* load return type code */ -+ movl %ebx, 8(%ebp) /* preserve %ebx */ -+L(UW2): -+ # cfi_rel_offset(%ebx, 8) -+ -+ andl $X86_RET_TYPE_MASK, %ecx -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc1): -+ leal L(store_table)-L(pc1)(%ebx, %ecx, 8), %ebx -+#else -+ leal L(store_table)(,%ecx, 8), %ebx -+#endif -+ movl 16(%ebp), %ecx /* load result address */ -+ jmp *%ebx -+ -+ .balign 8 -+L(store_table): -+E(L(store_table), X86_RET_FLOAT) -+ fstps (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_DOUBLE) -+ fstpl (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_LDOUBLE) -+ fstpt (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_SINT8) -+ movsbl %al, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_SINT16) -+ movswl %ax, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_UINT8) -+ movzbl %al, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_UINT16) -+ movzwl %ax, %eax -+ mov %eax, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_INT64) -+ movl %edx, 4(%ecx) -+ /* fallthru */ -+E(L(store_table), X86_RET_INT32) -+ movl %eax, (%ecx) -+ /* fallthru */ -+E(L(store_table), X86_RET_VOID) -+L(e1): -+ movl 8(%ebp), %ebx -+ movl %ebp, %esp -+ popl %ebp -+L(UW3): -+ # cfi_remember_state -+ # cfi_def_cfa(%esp, 4) -+ # cfi_restore(%ebx) -+ # cfi_restore(%ebp) -+ ret -+L(UW4): -+ # cfi_restore_state -+ -+E(L(store_table), X86_RET_STRUCTPOP) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCTARG) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCT_1B) -+ movb %al, (%ecx) -+ jmp L(e1) -+E(L(store_table), X86_RET_STRUCT_2B) -+ movw %ax, (%ecx) -+ jmp L(e1) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(store_table), X86_RET_UNUSED14) -+ ud2 -+E(L(store_table), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW5): -+ # cfi_endproc -+ENDF(ffi_call_i386) -+ -+/* The inner helper is declared as -+ -+ void ffi_closure_inner(struct closure_frame *frame, char *argp) -+ __attribute_((fastcall)) -+ -+ Thus the arguments are placed in -+ -+ ecx: frame -+ edx: argp -+*/ -+ -+/* Macros to help setting up the closure_data structure. */ -+ -+#if HAVE_FASTCALL -+# define closure_FS (40 + 4) -+# define closure_CF 0 -+#else -+# define closure_FS (8 + 40 + 12) -+# define closure_CF 8 -+#endif -+ -+#define FFI_CLOSURE_SAVE_REGS \ -+ movl %eax, closure_CF+16+R_EAX*4(%esp); \ -+ movl %edx, closure_CF+16+R_EDX*4(%esp); \ -+ movl %ecx, closure_CF+16+R_ECX*4(%esp) -+ -+#define FFI_CLOSURE_COPY_TRAMP_DATA \ -+ movl FFI_TRAMPOLINE_SIZE(%eax), %edx; /* copy cif */ \ -+ movl FFI_TRAMPOLINE_SIZE+4(%eax), %ecx; /* copy fun */ \ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %eax; /* copy user_data */ \ -+ movl %edx, closure_CF+28(%esp); \ -+ movl %ecx, closure_CF+32(%esp); \ -+ movl %eax, closure_CF+36(%esp) -+ -+#if HAVE_FASTCALL -+# define FFI_CLOSURE_PREP_CALL \ -+ movl %esp, %ecx; /* load closure_data */ \ -+ leal closure_FS+4(%esp), %edx; /* load incoming stack */ -+#else -+# define FFI_CLOSURE_PREP_CALL \ -+ leal closure_CF(%esp), %ecx; /* load closure_data */ \ -+ leal closure_FS+4(%esp), %edx; /* load incoming stack */ \ -+ movl %ecx, (%esp); \ -+ movl %edx, 4(%esp) -+#endif -+ -+#define FFI_CLOSURE_CALL_INNER(UWN) \ -+ call ffi_closure_inner -+ -+#define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ leal L(C1(load_table,N))(, %eax, 8), %edx; \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+ -+#ifdef __PIC__ -+# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+# undef FFI_CLOSURE_MASK_AND_JUMP -+# define FFI_CLOSURE_MASK_AND_JUMP(N, UW) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ call C(__x86.get_pc_thunk.dx); \ -+L(C1(pc,N)): \ -+ leal L(C1(load_table,N))-L(C1(pc,N))(%edx, %eax, 8), %edx; \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+# else -+# define FFI_CLOSURE_CALL_INNER_SAVE_EBX -+# undef FFI_CLOSURE_CALL_INNER -+# define FFI_CLOSURE_CALL_INNER(UWN) \ -+ movl %ebx, 40(%esp); /* save ebx */ \ -+L(C1(UW,UWN)): \ -+ # cfi_rel_offset(%ebx, 40); \ -+ call C(__x86.get_pc_thunk.bx); /* load got register */ \ -+ addl $C(_GLOBAL_OFFSET_TABLE_), %ebx; \ -+ call ffi_closure_inner@PLT -+# undef FFI_CLOSURE_MASK_AND_JUMP -+# define FFI_CLOSURE_MASK_AND_JUMP(N, UWN) \ -+ andl $X86_RET_TYPE_MASK, %eax; \ -+ leal L(C1(load_table,N))@GOTOFF(%ebx, %eax, 8), %edx; \ -+ movl 40(%esp), %ebx; /* restore ebx */ \ -+L(C1(UW,UWN)): \ -+ # cfi_restore(%ebx); \ -+ movl closure_CF(%esp), %eax; /* optimiztic load */ \ -+ jmp *%edx -+# endif /* DARWIN || HIDDEN */ -+#endif /* __PIC__ */ -+ -+ .balign 16 -+ .globl C(ffi_go_closure_EAX) -+ FFI_HIDDEN(C(ffi_go_closure_EAX)) -+C(ffi_go_closure_EAX): -+L(UW6): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW7): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%eax), %edx /* copy cif */ -+ movl 8(%eax), %ecx /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %ecx, closure_CF+32(%esp) -+ movl %eax, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_i386) -+L(UW8): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_EAX)) -+ -+ .balign 16 -+ .globl C(ffi_go_closure_ECX) -+ FFI_HIDDEN(C(ffi_go_closure_ECX)) -+C(ffi_go_closure_ECX): -+L(UW9): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW10): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%ecx), %edx /* copy cif */ -+ movl 8(%ecx), %eax /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %eax, closure_CF+32(%esp) -+ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_i386) -+L(UW11): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_ECX)) -+ -+/* The closure entry points are reached from the ffi_closure trampoline. -+ On entry, %eax contains the address of the ffi_closure. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_i386) -+ FFI_HIDDEN(C(ffi_closure_i386)) -+ -+C(ffi_closure_i386): -+L(UW12): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW13): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ -+ FFI_CLOSURE_SAVE_REGS -+ FFI_CLOSURE_COPY_TRAMP_DATA -+ -+ /* Entry point from preceeding Go closures. */ -+L(do_closure_i386): -+ -+ FFI_CLOSURE_PREP_CALL -+ FFI_CLOSURE_CALL_INNER(14) -+ FFI_CLOSURE_MASK_AND_JUMP(2, 15) -+ -+ .balign 8 -+L(load_table2): -+E(L(load_table2), X86_RET_FLOAT) -+ flds closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_DOUBLE) -+ fldl closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_LDOUBLE) -+ fldt closure_CF(%esp) -+ jmp L(e2) -+E(L(load_table2), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_INT64) -+ movl closure_CF+4(%esp), %edx -+ jmp L(e2) -+E(L(load_table2), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table2), X86_RET_VOID) -+L(e2): -+ addl $closure_FS, %esp -+L(UW16): -+ # cfi_adjust_cfa_offset(-closure_FS) -+ ret -+L(UW17): -+ # cfi_adjust_cfa_offset(closure_FS) -+E(L(load_table2), X86_RET_STRUCTPOP) -+ addl $closure_FS, %esp -+L(UW18): -+ # cfi_adjust_cfa_offset(-closure_FS) -+ ret $4 -+L(UW19): -+ # cfi_adjust_cfa_offset(closure_FS) -+E(L(load_table2), X86_RET_STRUCTARG) -+ jmp L(e2) -+E(L(load_table2), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e2) -+E(L(load_table2), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e2) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table2), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table2), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW20): -+ # cfi_endproc -+ENDF(C(ffi_closure_i386)) -+ -+ .balign 16 -+ .globl C(ffi_go_closure_STDCALL) -+ FFI_HIDDEN(C(ffi_go_closure_STDCALL)) -+C(ffi_go_closure_STDCALL): -+L(UW21): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW22): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl 4(%ecx), %edx /* copy cif */ -+ movl 8(%ecx), %eax /* copy fun */ -+ movl %edx, closure_CF+28(%esp) -+ movl %eax, closure_CF+32(%esp) -+ movl %ecx, closure_CF+36(%esp) /* closure is user_data */ -+ jmp L(do_closure_STDCALL) -+L(UW23): -+ # cfi_endproc -+ENDF(C(ffi_go_closure_STDCALL)) -+ -+/* For REGISTER, we have no available parameter registers, and so we -+ enter here having pushed the closure onto the stack. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_REGISTER) -+ FFI_HIDDEN(C(ffi_closure_REGISTER)) -+C(ffi_closure_REGISTER): -+L(UW24): -+ # cfi_startproc -+ # cfi_def_cfa(%esp, 8) -+ # cfi_offset(%eip, -8) -+ subl $closure_FS-4, %esp -+L(UW25): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ FFI_CLOSURE_SAVE_REGS -+ movl closure_FS-4(%esp), %ecx /* load retaddr */ -+ movl closure_FS(%esp), %eax /* load closure */ -+ movl %ecx, closure_FS(%esp) /* move retaddr */ -+ jmp L(do_closure_REGISTER) -+L(UW26): -+ # cfi_endproc -+ENDF(C(ffi_closure_REGISTER)) -+ -+/* For STDCALL (and others), we need to pop N bytes of arguments off -+ the stack following the closure. The amount needing to be popped -+ is returned to us from ffi_closure_inner. */ -+ -+ .balign 16 -+ .globl C(ffi_closure_STDCALL) -+ FFI_HIDDEN(C(ffi_closure_STDCALL)) -+C(ffi_closure_STDCALL): -+L(UW27): -+ # cfi_startproc -+ subl $closure_FS, %esp -+L(UW28): -+ # cfi_def_cfa_offset(closure_FS + 4) -+ -+ FFI_CLOSURE_SAVE_REGS -+ -+ /* Entry point from ffi_closure_REGISTER. */ -+L(do_closure_REGISTER): -+ -+ FFI_CLOSURE_COPY_TRAMP_DATA -+ -+ /* Entry point from preceeding Go closure. */ -+L(do_closure_STDCALL): -+ -+ FFI_CLOSURE_PREP_CALL -+ FFI_CLOSURE_CALL_INNER(29) -+ -+ movl %eax, %ecx -+ shrl $X86_RET_POP_SHIFT, %ecx /* isolate pop count */ -+ leal closure_FS(%esp, %ecx), %ecx /* compute popped esp */ -+ movl closure_FS(%esp), %edx /* move return address */ -+ movl %edx, (%ecx) -+ -+ /* From this point on, the value of %esp upon return is %ecx+4, -+ and we've copied the return address to %ecx to make return easy. -+ There's no point in representing this in the unwind info, as -+ there is always a window between the mov and the ret which -+ will be wrong from one point of view or another. */ -+ -+ FFI_CLOSURE_MASK_AND_JUMP(3, 30) -+ -+ .balign 8 -+L(load_table3): -+E(L(load_table3), X86_RET_FLOAT) -+ flds closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_DOUBLE) -+ fldl closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_LDOUBLE) -+ fldt closure_CF(%esp) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_SINT8) -+ movsbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_SINT16) -+ movswl %ax, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_UINT8) -+ movzbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_UINT16) -+ movzwl %ax, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_INT64) -+ movl closure_CF+4(%esp), %edx -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_INT32) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_VOID) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCTPOP) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCTARG) -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ movl %ecx, %esp -+ ret -+E(L(load_table3), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ movl %ecx, %esp -+ ret -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table3), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table3), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW31): -+ # cfi_endproc -+ENDF(C(ffi_closure_STDCALL)) -+ -+#if !FFI_NO_RAW_API -+ -+#define raw_closure_S_FS (16+16+12) -+ -+ .balign 16 -+ .globl C(ffi_closure_raw_SYSV) -+ FFI_HIDDEN(C(ffi_closure_raw_SYSV)) -+C(ffi_closure_raw_SYSV): -+L(UW32): -+ # cfi_startproc -+ subl $raw_closure_S_FS, %esp -+L(UW33): -+ # cfi_def_cfa_offset(raw_closure_S_FS + 4) -+ movl %ebx, raw_closure_S_FS-4(%esp) -+L(UW34): -+ # cfi_rel_offset(%ebx, raw_closure_S_FS-4) -+ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ -+ movl %edx, 12(%esp) -+ leal raw_closure_S_FS+4(%esp), %edx /* load raw_args */ -+ movl %edx, 8(%esp) -+ leal 16(%esp), %edx /* load &res */ -+ movl %edx, 4(%esp) -+ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ -+ movl %ebx, (%esp) -+ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ -+ -+ movl 20(%ebx), %eax /* load cif->flags */ -+ andl $X86_RET_TYPE_MASK, %eax -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc4): -+ leal L(load_table4)-L(pc4)(%ebx, %eax, 8), %ecx -+#else -+ leal L(load_table4)(,%eax, 8), %ecx -+#endif -+ movl raw_closure_S_FS-4(%esp), %ebx -+L(UW35): -+ # cfi_restore(%ebx) -+ movl 16(%esp), %eax /* Optimistic load */ -+ jmp *%ecx -+ -+ .balign 8 -+L(load_table4): -+E(L(load_table4), X86_RET_FLOAT) -+ flds 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_DOUBLE) -+ fldl 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_LDOUBLE) -+ fldt 16(%esp) -+ jmp L(e4) -+E(L(load_table4), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_INT64) -+ movl 16+4(%esp), %edx -+ jmp L(e4) -+E(L(load_table4), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table4), X86_RET_VOID) -+L(e4): -+ addl $raw_closure_S_FS, %esp -+L(UW36): -+ # cfi_adjust_cfa_offset(-raw_closure_S_FS) -+ ret -+L(UW37): -+ # cfi_adjust_cfa_offset(raw_closure_S_FS) -+E(L(load_table4), X86_RET_STRUCTPOP) -+ addl $raw_closure_S_FS, %esp -+L(UW38): -+ # cfi_adjust_cfa_offset(-raw_closure_S_FS) -+ ret $4 -+L(UW39): -+ # cfi_adjust_cfa_offset(raw_closure_S_FS) -+E(L(load_table4), X86_RET_STRUCTARG) -+ jmp L(e4) -+E(L(load_table4), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e4) -+E(L(load_table4), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e4) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table4), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table4), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW40): -+ # cfi_endproc -+ENDF(C(ffi_closure_raw_SYSV)) -+ -+#define raw_closure_T_FS (16+16+8) -+ -+ .balign 16 -+ .globl C(ffi_closure_raw_THISCALL) -+ FFI_HIDDEN(C(ffi_closure_raw_THISCALL)) -+C(ffi_closure_raw_THISCALL): -+L(UW41): -+ # cfi_startproc -+ /* Rearrange the stack such that %ecx is the first argument. -+ This means moving the return address. */ -+ popl %edx -+L(UW42): -+ # cfi_def_cfa_offset(0) -+ # cfi_register(%eip, %edx) -+ pushl %ecx -+L(UW43): -+ # cfi_adjust_cfa_offset(4) -+ pushl %edx -+L(UW44): -+ # cfi_adjust_cfa_offset(4) -+ # cfi_rel_offset(%eip, 0) -+ subl $raw_closure_T_FS, %esp -+L(UW45): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+ movl %ebx, raw_closure_T_FS-4(%esp) -+L(UW46): -+ # cfi_rel_offset(%ebx, raw_closure_T_FS-4) -+ -+ movl FFI_TRAMPOLINE_SIZE+8(%eax), %edx /* load cl->user_data */ -+ movl %edx, 12(%esp) -+ leal raw_closure_T_FS+4(%esp), %edx /* load raw_args */ -+ movl %edx, 8(%esp) -+ leal 16(%esp), %edx /* load &res */ -+ movl %edx, 4(%esp) -+ movl FFI_TRAMPOLINE_SIZE(%eax), %ebx /* load cl->cif */ -+ movl %ebx, (%esp) -+ call *FFI_TRAMPOLINE_SIZE+4(%eax) /* call cl->fun */ -+ -+ movl 20(%ebx), %eax /* load cif->flags */ -+ andl $X86_RET_TYPE_MASK, %eax -+#ifdef __PIC__ -+ call C(__x86.get_pc_thunk.bx) -+L(pc5): -+ leal L(load_table5)-L(pc5)(%ebx, %eax, 8), %ecx -+#else -+ leal L(load_table5)(,%eax, 8), %ecx -+#endif -+ movl raw_closure_T_FS-4(%esp), %ebx -+L(UW47): -+ # cfi_restore(%ebx) -+ movl 16(%esp), %eax /* Optimistic load */ -+ jmp *%ecx -+ -+ .balign 8 -+L(load_table5): -+E(L(load_table5), X86_RET_FLOAT) -+ flds 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_DOUBLE) -+ fldl 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_LDOUBLE) -+ fldt 16(%esp) -+ jmp L(e5) -+E(L(load_table5), X86_RET_SINT8) -+ movsbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_SINT16) -+ movswl %ax, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_UINT8) -+ movzbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_UINT16) -+ movzwl %ax, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_INT64) -+ movl 16+4(%esp), %edx -+ jmp L(e5) -+E(L(load_table5), X86_RET_INT32) -+ nop -+ /* fallthru */ -+E(L(load_table5), X86_RET_VOID) -+L(e5): -+ addl $raw_closure_T_FS, %esp -+L(UW48): -+ # cfi_adjust_cfa_offset(-raw_closure_T_FS) -+ /* Remove the extra %ecx argument we pushed. */ -+ ret $4 -+L(UW49): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+E(L(load_table5), X86_RET_STRUCTPOP) -+ addl $raw_closure_T_FS, %esp -+L(UW50): -+ # cfi_adjust_cfa_offset(-raw_closure_T_FS) -+ ret $8 -+L(UW51): -+ # cfi_adjust_cfa_offset(raw_closure_T_FS) -+E(L(load_table5), X86_RET_STRUCTARG) -+ jmp L(e5) -+E(L(load_table5), X86_RET_STRUCT_1B) -+ movzbl %al, %eax -+ jmp L(e5) -+E(L(load_table5), X86_RET_STRUCT_2B) -+ movzwl %ax, %eax -+ jmp L(e5) -+ -+ /* Fill out the table so that bad values are predictable. */ -+E(L(load_table5), X86_RET_UNUSED14) -+ ud2 -+E(L(load_table5), X86_RET_UNUSED15) -+ ud2 -+ -+L(UW52): -+ # cfi_endproc -+ENDF(C(ffi_closure_raw_THISCALL)) -+ -+#endif /* !FFI_NO_RAW_API */ -+ -+#ifdef X86_DARWIN -+# define COMDAT(X) \ -+ .section __TEXT,__textcoal_nt,coalesced,pure_instructions; \ -+ .weak_definition X; \ -+ .private_extern X -+#elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__)) -+# define COMDAT(X) \ -+ .section .text.X,"axG",@progbits,X,comdat; \ -+ .globl X; \ -+ FFI_HIDDEN(X) -+#else -+# define COMDAT(X) -+#endif -+ -+#if defined(__PIC__) -+ COMDAT(C(__x86.get_pc_thunk.bx)) -+C(__x86.get_pc_thunk.bx): -+ movl (%esp), %ebx -+ ret -+ENDF(C(__x86.get_pc_thunk.bx)) -+# if defined X86_DARWIN || defined HAVE_HIDDEN_VISIBILITY_ATTRIBUTE -+ COMDAT(C(__x86.get_pc_thunk.dx)) -+C(__x86.get_pc_thunk.dx): -+ movl (%esp), %edx -+ ret -+ENDF(C(__x86.get_pc_thunk.dx)) -+#endif /* DARWIN || HIDDEN */ -+#endif /* __PIC__ */ -+ -+/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ -+ -+#ifdef __APPLE__ -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EHFrame0: -+#elif defined(X86_WIN32) -+.section .eh_frame,"r" -+#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) -+.section .eh_frame,EH_FRAME_FLAGS,@unwind -+#else -+.section .eh_frame,EH_FRAME_FLAGS,@progbits -+#endif -+ -+#ifdef HAVE_AS_X86_PCREL -+# define PCREL(X) X - . -+#else -+# define PCREL(X) X@rel -+#endif -+ -+/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ -+#define ADV(N, P) .byte 2, L(N)-L(P) -+ -+ .balign 4 -+L(CIE): -+ .set L(set0),L(ECIE)-L(SCIE) -+ .long L(set0) /* CIE Length */ -+L(SCIE): -+ .long 0 /* CIE Identifier Tag */ -+ .byte 1 /* CIE Version */ -+ .ascii "zR\0" /* CIE Augmentation */ -+ .byte 1 /* CIE Code Alignment Factor */ -+ .byte 0x7c /* CIE Data Alignment Factor */ -+ .byte 0x8 /* CIE RA Column */ -+ .byte 1 /* Augmentation size */ -+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */ -+ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */ -+ .balign 4 -+L(ECIE): -+ -+ .set L(set1),L(EFDE1)-L(SFDE1) -+ .long L(set1) /* FDE Length */ -+L(SFDE1): -+ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW0)) /* Initial location */ -+ .long L(UW5)-L(UW0) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW1, UW0) -+ .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */ -+ .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */ -+ ADV(UW2, UW1) -+ .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */ -+ ADV(UW3, UW2) -+ .byte 0xa /* DW_CFA_remember_state */ -+ .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */ -+ .byte 0xc0+3 /* DW_CFA_restore, %ebx */ -+ .byte 0xc0+5 /* DW_CFA_restore, %ebp */ -+ ADV(UW4, UW3) -+ .byte 0xb /* DW_CFA_restore_state */ -+ .balign 4 -+L(EFDE1): -+ -+ .set L(set2),L(EFDE2)-L(SFDE2) -+ .long L(set2) /* FDE Length */ -+L(SFDE2): -+ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW6)) /* Initial location */ -+ .long L(UW8)-L(UW6) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW7, UW6) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE2): -+ -+ .set L(set3),L(EFDE3)-L(SFDE3) -+ .long L(set3) /* FDE Length */ -+L(SFDE3): -+ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW9)) /* Initial location */ -+ .long L(UW11)-L(UW9) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW10, UW9) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE3): -+ -+ .set L(set4),L(EFDE4)-L(SFDE4) -+ .long L(set4) /* FDE Length */ -+L(SFDE4): -+ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW12)) /* Initial location */ -+ .long L(UW20)-L(UW12) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW13, UW12) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX -+ ADV(UW14, UW13) -+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ -+ ADV(UW15, UW14) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW16, UW15) -+#else -+ ADV(UW16, UW13) -+#endif -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW17, UW16) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW18, UW17) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW19, UW18) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE4): -+ -+ .set L(set5),L(EFDE5)-L(SFDE5) -+ .long L(set5) /* FDE Length */ -+L(SFDE5): -+ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW21)) /* Initial location */ -+ .long L(UW23)-L(UW21) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW22, UW21) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE5): -+ -+ .set L(set6),L(EFDE6)-L(SFDE6) -+ .long L(set6) /* FDE Length */ -+L(SFDE6): -+ .long L(SFDE6)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW24)) /* Initial location */ -+ .long L(UW26)-L(UW24) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */ -+ ADV(UW25, UW24) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE6): -+ -+ .set L(set7),L(EFDE7)-L(SFDE7) -+ .long L(set7) /* FDE Length */ -+L(SFDE7): -+ .long L(SFDE7)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW27)) /* Initial location */ -+ .long L(UW31)-L(UW27) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW28, UW27) -+ .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ -+#ifdef FFI_CLOSURE_CALL_INNER_SAVE_EBX -+ ADV(UW29, UW28) -+ .byte 0x80+3, (40-(closure_FS+4))/-4 /* DW_CFA_offset %ebx */ -+ ADV(UW30, UW29) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+#endif -+ .balign 4 -+L(EFDE7): -+ -+#if !FFI_NO_RAW_API -+ .set L(set8),L(EFDE8)-L(SFDE8) -+ .long L(set8) /* FDE Length */ -+L(SFDE8): -+ .long L(SFDE8)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW32)) /* Initial location */ -+ .long L(UW40)-L(UW32) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW33, UW32) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW34, UW33) -+ .byte 0x80+3, 2 /* DW_CFA_offset %ebx 2*-4 */ -+ ADV(UW35, UW34) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW36, UW35) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW37, UW36) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW38, UW37) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW39, UW38) -+ .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE8): -+ -+ .set L(set9),L(EFDE9)-L(SFDE9) -+ .long L(set9) /* FDE Length */ -+L(SFDE9): -+ .long L(SFDE9)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW41)) /* Initial location */ -+ .long L(UW52)-L(UW41) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW42, UW41) -+ .byte 0xe, 0 /* DW_CFA_def_cfa_offset */ -+ .byte 0x9, 8, 2 /* DW_CFA_register %eip, %edx */ -+ ADV(UW43, UW42) -+ .byte 0xe, 4 /* DW_CFA_def_cfa_offset */ -+ ADV(UW44, UW43) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ .byte 0x80+8, 2 /* DW_CFA_offset %eip 2*-4 */ -+ ADV(UW45, UW44) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW46, UW45) -+ .byte 0x80+3, 3 /* DW_CFA_offset %ebx 3*-4 */ -+ ADV(UW47, UW46) -+ .byte 0xc0+3 /* DW_CFA_restore %ebx */ -+ ADV(UW48, UW47) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW49, UW48) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW50, UW49) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ -+ ADV(UW51, UW50) -+ .byte 0xe, raw_closure_T_FS+8 /* DW_CFA_def_cfa_offset */ -+ .balign 4 -+L(EFDE9): -+#endif /* !FFI_NO_RAW_API */ -+ -+#endif /* ifndef __x86_64__ */ -+ -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",@progbits -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S ---- orig/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Modules/_ctypes/libffi_ios/x86/unix64_x86_64.S 2015-12-20 18:53:04.000000000 +0800 -@@ -0,0 +1,551 @@ -+#ifdef __x86_64__ -+ -+/* ----------------------------------------------------------------------- -+ unix64.S - Copyright (c) 2013 The Written Word, Inc. -+ - Copyright (c) 2008 Red Hat, Inc -+ - Copyright (c) 2002 Bo Thorsen -+ -+ x86-64 Foreign Function Interface -+ -+ 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: -+ -+ The above copyright notice and this permission notice shall be included -+ in all copies or substantial portions of the Software. -+ -+ 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. -+ ----------------------------------------------------------------------- */ -+ -+#ifdef __x86_64__ -+#define LIBFFI_ASM -+#include -+#include -+#include "internal64.h" -+ -+ .text -+ -+#define C2(X, Y) X ## Y -+#define C1(X, Y) C2(X, Y) -+#ifdef __USER_LABEL_PREFIX__ -+# define C(X) C1(__USER_LABEL_PREFIX__, X) -+#else -+# define C(X) X -+#endif -+ -+#ifdef __APPLE__ -+# define L(X) C1(L, X) -+#else -+# define L(X) C1(.L, X) -+#endif -+ -+#ifdef __ELF__ -+# define PLT(X) X@PLT -+# define ENDF(X) .type X,@function; .size X, . - X -+#else -+# define PLT(X) X -+# define ENDF(X) -+#endif -+ -+/* This macro allows the safe creation of jump tables without an -+ actual table. The entry points into the table are all 8 bytes. -+ The use of ORG asserts that we're at the correct location. */ -+/* ??? The clang assembler doesn't handle .org with symbolic expressions. */ -+#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__)) -+# define E(BASE, X) .balign 8 -+#else -+# define E(BASE, X) .balign 8; .org BASE + X * 8 -+#endif -+ -+/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags, -+ void *raddr, void (*fnaddr)(void)); -+ -+ Bit o trickiness here -- ARGS+BYTES is the base of the stack frame -+ for this function. This has been allocated by ffi_call. We also -+ deallocate some of the stack that has been alloca'd. */ -+ -+ .balign 8 -+ .globl C(ffi_call_unix64) -+ FFI_HIDDEN(C(ffi_call_unix64)) -+ -+C(ffi_call_unix64): -+L(UW0): -+ movq (%rsp), %r10 /* Load return address. */ -+ leaq (%rdi, %rsi), %rax /* Find local stack base. */ -+ movq %rdx, (%rax) /* Save flags. */ -+ movq %rcx, 8(%rax) /* Save raddr. */ -+ movq %rbp, 16(%rax) /* Save old frame pointer. */ -+ movq %r10, 24(%rax) /* Relocate return address. */ -+ movq %rax, %rbp /* Finalize local stack frame. */ -+ -+ /* New stack frame based off rbp. This is a itty bit of unwind -+ trickery in that the CFA *has* changed. There is no easy way -+ to describe it correctly on entry to the function. Fortunately, -+ it doesn't matter too much since at all points we can correctly -+ unwind back to ffi_call. Note that the location to which we -+ moved the return address is (the new) CFA-8, so from the -+ perspective of the unwind info, it hasn't moved. */ -+L(UW1): -+ /* cfi_def_cfa(%rbp, 32) */ -+ /* cfi_rel_offset(%rbp, 16) */ -+ -+ movq %rdi, %r10 /* Save a copy of the register area. */ -+ movq %r8, %r11 /* Save a copy of the target fn. */ -+ movl %r9d, %eax /* Set number of SSE registers. */ -+ -+ /* Load up all argument registers. */ -+ movq (%r10), %rdi -+ movq 0x08(%r10), %rsi -+ movq 0x10(%r10), %rdx -+ movq 0x18(%r10), %rcx -+ movq 0x20(%r10), %r8 -+ movq 0x28(%r10), %r9 -+ movl 0xb0(%r10), %eax -+ testl %eax, %eax -+ jnz L(load_sse) -+L(ret_from_load_sse): -+ -+ /* Deallocate the reg arg area, except for r10, then load via pop. */ -+ leaq 0xb8(%r10), %rsp -+ popq %r10 -+ -+ /* Call the user function. */ -+ call *%r11 -+ -+ /* Deallocate stack arg area; local stack frame in redzone. */ -+ leaq 24(%rbp), %rsp -+ -+ movq 0(%rbp), %rcx /* Reload flags. */ -+ movq 8(%rbp), %rdi /* Reload raddr. */ -+ movq 16(%rbp), %rbp /* Reload old frame pointer. */ -+L(UW2): -+ /* cfi_remember_state */ -+ /* cfi_def_cfa(%rsp, 8) */ -+ /* cfi_restore(%rbp) */ -+ -+ /* The first byte of the flags contains the FFI_TYPE. */ -+ cmpb $UNIX64_RET_LAST, %cl -+ movzbl %cl, %r10d -+ leaq L(store_table)(%rip), %r11 -+ ja L(sa) -+ leaq (%r11, %r10, 8), %r10 -+ -+ /* Prep for the structure cases: scratch area in redzone. */ -+ leaq -20(%rsp), %rsi -+ jmp *%r10 -+ -+ .balign 8 -+L(store_table): -+E(L(store_table), UNIX64_RET_VOID) -+ ret -+E(L(store_table), UNIX64_RET_UINT8) -+ movzbl %al, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_UINT16) -+ movzwl %ax, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_UINT32) -+ movl %eax, %eax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT8) -+ movsbq %al, %rax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT16) -+ movswq %ax, %rax -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_SINT32) -+ cltq -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_INT64) -+ movq %rax, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_XMM32) -+ movd %xmm0, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_XMM64) -+ movq %xmm0, (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_X87) -+ fstpt (%rdi) -+ ret -+E(L(store_table), UNIX64_RET_X87_2) -+ fstpt (%rdi) -+ fstpt 16(%rdi) -+ ret -+E(L(store_table), UNIX64_RET_ST_XMM0_RAX) -+ movq %rax, 8(%rsi) -+ jmp L(s3) -+E(L(store_table), UNIX64_RET_ST_RAX_XMM0) -+ movq %xmm0, 8(%rsi) -+ jmp L(s2) -+E(L(store_table), UNIX64_RET_ST_XMM0_XMM1) -+ movq %xmm1, 8(%rsi) -+ jmp L(s3) -+E(L(store_table), UNIX64_RET_ST_RAX_RDX) -+ movq %rdx, 8(%rsi) -+L(s2): -+ movq %rax, (%rsi) -+ shrl $UNIX64_SIZE_SHIFT, %ecx -+ rep movsb -+ ret -+ .balign 8 -+L(s3): -+ movq %xmm0, (%rsi) -+ shrl $UNIX64_SIZE_SHIFT, %ecx -+ rep movsb -+ ret -+ -+L(sa): call PLT(C(abort)) -+ -+ /* Many times we can avoid loading any SSE registers at all. -+ It's not worth an indirect jump to load the exact set of -+ SSE registers needed; zero or all is a good compromise. */ -+ .balign 2 -+L(UW3): -+ /* cfi_restore_state */ -+L(load_sse): -+ movdqa 0x30(%r10), %xmm0 -+ movdqa 0x40(%r10), %xmm1 -+ movdqa 0x50(%r10), %xmm2 -+ movdqa 0x60(%r10), %xmm3 -+ movdqa 0x70(%r10), %xmm4 -+ movdqa 0x80(%r10), %xmm5 -+ movdqa 0x90(%r10), %xmm6 -+ movdqa 0xa0(%r10), %xmm7 -+ jmp L(ret_from_load_sse) -+ -+L(UW4): -+ENDF(C(ffi_call_unix64)) -+ -+/* 6 general registers, 8 vector registers, -+ 32 bytes of rvalue, 8 bytes of alignment. */ -+#define ffi_closure_OFS_G 0 -+#define ffi_closure_OFS_V (6*8) -+#define ffi_closure_OFS_RVALUE (ffi_closure_OFS_V + 8*16) -+#define ffi_closure_FS (ffi_closure_OFS_RVALUE + 32 + 8) -+ -+/* The location of rvalue within the red zone after deallocating the frame. */ -+#define ffi_closure_RED_RVALUE (ffi_closure_OFS_RVALUE - ffi_closure_FS) -+ -+ .balign 2 -+ .globl C(ffi_closure_unix64_sse) -+ FFI_HIDDEN(C(ffi_closure_unix64_sse)) -+ -+C(ffi_closure_unix64_sse): -+L(UW5): -+ subq $ffi_closure_FS, %rsp -+L(UW6): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+ -+ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) -+ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) -+ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) -+ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) -+ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) -+ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) -+ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) -+ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) -+ jmp L(sse_entry1) -+ -+L(UW7): -+ENDF(C(ffi_closure_unix64_sse)) -+ -+ .balign 2 -+ .globl C(ffi_closure_unix64) -+ FFI_HIDDEN(C(ffi_closure_unix64)) -+ -+C(ffi_closure_unix64): -+L(UW8): -+ subq $ffi_closure_FS, %rsp -+L(UW9): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+L(sse_entry1): -+ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) -+ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) -+ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) -+ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) -+ movq %r8, ffi_closure_OFS_G+0x20(%rsp) -+ movq %r9, ffi_closure_OFS_G+0x28(%rsp) -+ -+#ifdef __ILP32__ -+ movl FFI_TRAMPOLINE_SIZE(%r10), %edi /* Load cif */ -+ movl FFI_TRAMPOLINE_SIZE+4(%r10), %esi /* Load fun */ -+ movl FFI_TRAMPOLINE_SIZE+8(%r10), %edx /* Load user_data */ -+#else -+ movq FFI_TRAMPOLINE_SIZE(%r10), %rdi /* Load cif */ -+ movq FFI_TRAMPOLINE_SIZE+8(%r10), %rsi /* Load fun */ -+ movq FFI_TRAMPOLINE_SIZE+16(%r10), %rdx /* Load user_data */ -+#endif -+L(do_closure): -+ leaq ffi_closure_OFS_RVALUE(%rsp), %rcx /* Load rvalue */ -+ movq %rsp, %r8 /* Load reg_args */ -+ leaq ffi_closure_FS+8(%rsp), %r9 /* Load argp */ -+ call C(ffi_closure_unix64_inner) -+ -+ /* Deallocate stack frame early; return value is now in redzone. */ -+ addq $ffi_closure_FS, %rsp -+L(UW10): -+ /* cfi_adjust_cfa_offset(-ffi_closure_FS) */ -+ -+ /* The first byte of the return value contains the FFI_TYPE. */ -+ cmpb $UNIX64_RET_LAST, %al -+ movzbl %al, %r10d -+ leaq L(load_table)(%rip), %r11 -+ ja L(la) -+ leaq (%r11, %r10, 8), %r10 -+ leaq ffi_closure_RED_RVALUE(%rsp), %rsi -+ jmp *%r10 -+ -+ .balign 8 -+L(load_table): -+E(L(load_table), UNIX64_RET_VOID) -+ ret -+E(L(load_table), UNIX64_RET_UINT8) -+ movzbl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_UINT16) -+ movzwl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_UINT32) -+ movl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT8) -+ movsbl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT16) -+ movswl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_SINT32) -+ movl (%rsi), %eax -+ ret -+E(L(load_table), UNIX64_RET_INT64) -+ movq (%rsi), %rax -+ ret -+E(L(load_table), UNIX64_RET_XMM32) -+ movd (%rsi), %xmm0 -+ ret -+E(L(load_table), UNIX64_RET_XMM64) -+ movq (%rsi), %xmm0 -+ ret -+E(L(load_table), UNIX64_RET_X87) -+ fldt (%rsi) -+ ret -+E(L(load_table), UNIX64_RET_X87_2) -+ fldt 16(%rsi) -+ fldt (%rsi) -+ ret -+E(L(load_table), UNIX64_RET_ST_XMM0_RAX) -+ movq 8(%rsi), %rax -+ jmp L(l3) -+E(L(load_table), UNIX64_RET_ST_RAX_XMM0) -+ movq 8(%rsi), %xmm0 -+ jmp L(l2) -+E(L(load_table), UNIX64_RET_ST_XMM0_XMM1) -+ movq 8(%rsi), %xmm1 -+ jmp L(l3) -+E(L(load_table), UNIX64_RET_ST_RAX_RDX) -+ movq 8(%rsi), %rdx -+L(l2): -+ movq (%rsi), %rax -+ ret -+ .balign 8 -+L(l3): -+ movq (%rsi), %xmm0 -+ ret -+ -+L(la): call PLT(C(abort)) -+ -+L(UW11): -+ENDF(C(ffi_closure_unix64)) -+ -+ .balign 2 -+ .globl C(ffi_go_closure_unix64_sse) -+ FFI_HIDDEN(C(ffi_go_closure_unix64_sse)) -+ -+C(ffi_go_closure_unix64_sse): -+L(UW12): -+ subq $ffi_closure_FS, %rsp -+L(UW13): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+ -+ movdqa %xmm0, ffi_closure_OFS_V+0x00(%rsp) -+ movdqa %xmm1, ffi_closure_OFS_V+0x10(%rsp) -+ movdqa %xmm2, ffi_closure_OFS_V+0x20(%rsp) -+ movdqa %xmm3, ffi_closure_OFS_V+0x30(%rsp) -+ movdqa %xmm4, ffi_closure_OFS_V+0x40(%rsp) -+ movdqa %xmm5, ffi_closure_OFS_V+0x50(%rsp) -+ movdqa %xmm6, ffi_closure_OFS_V+0x60(%rsp) -+ movdqa %xmm7, ffi_closure_OFS_V+0x70(%rsp) -+ jmp L(sse_entry2) -+ -+L(UW14): -+ENDF(C(ffi_go_closure_unix64_sse)) -+ -+ .balign 2 -+ .globl C(ffi_go_closure_unix64) -+ FFI_HIDDEN(C(ffi_go_closure_unix64)) -+ -+C(ffi_go_closure_unix64): -+L(UW15): -+ subq $ffi_closure_FS, %rsp -+L(UW16): -+ /* cfi_adjust_cfa_offset(ffi_closure_FS) */ -+L(sse_entry2): -+ movq %rdi, ffi_closure_OFS_G+0x00(%rsp) -+ movq %rsi, ffi_closure_OFS_G+0x08(%rsp) -+ movq %rdx, ffi_closure_OFS_G+0x10(%rsp) -+ movq %rcx, ffi_closure_OFS_G+0x18(%rsp) -+ movq %r8, ffi_closure_OFS_G+0x20(%rsp) -+ movq %r9, ffi_closure_OFS_G+0x28(%rsp) -+ -+#ifdef __ILP32__ -+ movl 4(%r10), %edi /* Load cif */ -+ movl 8(%r10), %esi /* Load fun */ -+ movl %r10d, %edx /* Load closure (user_data) */ -+#else -+ movq 8(%r10), %rdi /* Load cif */ -+ movq 16(%r10), %rsi /* Load fun */ -+ movq %r10, %rdx /* Load closure (user_data) */ -+#endif -+ jmp L(do_closure) -+ -+L(UW17): -+ENDF(C(ffi_go_closure_unix64)) -+ -+/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ -+ -+#ifdef __APPLE__ -+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support -+EHFrame0: -+#elif defined(HAVE_AS_X86_64_UNWIND_SECTION_TYPE) -+.section .eh_frame,"a",@unwind -+#else -+.section .eh_frame,"a",@progbits -+#endif -+ -+#ifdef HAVE_AS_X86_PCREL -+# define PCREL(X) X - . -+#else -+# define PCREL(X) X@rel -+#endif -+ -+/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ -+#define ADV(N, P) .byte 2, L(N)-L(P) -+ -+ .balign 8 -+L(CIE): -+ .set L(set0),L(ECIE)-L(SCIE) -+ .long L(set0) /* CIE Length */ -+L(SCIE): -+ .long 0 /* CIE Identifier Tag */ -+ .byte 1 /* CIE Version */ -+ .ascii "zR\0" /* CIE Augmentation */ -+ .byte 1 /* CIE Code Alignment Factor */ -+ .byte 0x78 /* CIE Data Alignment Factor */ -+ .byte 0x10 /* CIE RA Column */ -+ .byte 1 /* Augmentation size */ -+ .byte 0x1b /* FDE Encoding (pcrel sdata4) */ -+ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp offset 8 */ -+ .byte 0x80+16, 1 /* DW_CFA_offset, %rip offset 1*-8 */ -+ .balign 8 -+L(ECIE): -+ -+ .set L(set1),L(EFDE1)-L(SFDE1) -+ .long L(set1) /* FDE Length */ -+L(SFDE1): -+ .long L(SFDE1)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW0)) /* Initial location */ -+ .long L(UW4)-L(UW0) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW1, UW0) -+ .byte 0xc, 6, 32 /* DW_CFA_def_cfa, %rbp 32 */ -+ .byte 0x80+6, 2 /* DW_CFA_offset, %rbp 2*-8 */ -+ ADV(UW2, UW1) -+ .byte 0xa /* DW_CFA_remember_state */ -+ .byte 0xc, 7, 8 /* DW_CFA_def_cfa, %rsp 8 */ -+ .byte 0xc0+6 /* DW_CFA_restore, %rbp */ -+ ADV(UW3, UW2) -+ .byte 0xb /* DW_CFA_restore_state */ -+ .balign 8 -+L(EFDE1): -+ -+ .set L(set2),L(EFDE2)-L(SFDE2) -+ .long L(set2) /* FDE Length */ -+L(SFDE2): -+ .long L(SFDE2)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW5)) /* Initial location */ -+ .long L(UW7)-L(UW5) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW6, UW5) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE2): -+ -+ .set L(set3),L(EFDE3)-L(SFDE3) -+ .long L(set3) /* FDE Length */ -+L(SFDE3): -+ .long L(SFDE3)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW8)) /* Initial location */ -+ .long L(UW11)-L(UW8) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW9, UW8) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ ADV(UW10, UW9) -+ .byte 0xe, 8 /* DW_CFA_def_cfa_offset 8 */ -+L(EFDE3): -+ -+ .set L(set4),L(EFDE4)-L(SFDE4) -+ .long L(set4) /* FDE Length */ -+L(SFDE4): -+ .long L(SFDE4)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW12)) /* Initial location */ -+ .long L(UW14)-L(UW12) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW13, UW12) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE4): -+ -+ .set L(set5),L(EFDE5)-L(SFDE5) -+ .long L(set5) /* FDE Length */ -+L(SFDE5): -+ .long L(SFDE5)-L(CIE) /* FDE CIE offset */ -+ .long PCREL(L(UW15)) /* Initial location */ -+ .long L(UW17)-L(UW15) /* Address range */ -+ .byte 0 /* Augmentation size */ -+ ADV(UW16, UW15) -+ .byte 0xe /* DW_CFA_def_cfa_offset */ -+ .byte ffi_closure_FS + 8, 1 /* uleb128, assuming 128 <= FS < 255 */ -+ .balign 8 -+L(EFDE5): -+#ifdef __APPLE__ -+ .subsections_via_symbols -+#endif -+ -+#endif /* __x86_64__ */ -+#if defined __ELF__ && defined __linux__ -+ .section .note.GNU-stack,"",@progbits -+#endif -+ -+ -+#endif -\ No newline at end of file -diff -Nru orig/Modules/_posixsubprocess.c modified/Modules/_posixsubprocess.c ---- orig/Modules/_posixsubprocess.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/_posixsubprocess.c 2015-12-21 13:03:32.000000000 +0800 -@@ -479,11 +479,15 @@ - saved_errno = 0; - for (i = 0; exec_array[i] != NULL; ++i) { - const char *executable = exec_array[i]; -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ errno = ENOTSUP; -+#else - if (envp) { - execve(executable, argv, envp); - } else { - execv(executable, argv); - } -+#endif - if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { - saved_errno = errno; - } -@@ -646,7 +650,12 @@ - cwd_obj2 = NULL; - } - -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ pid = -1; -+ errno = ENOTSUP; -+#else - pid = fork(); -+#endif - if (pid == 0) { - /* Child process */ - /* -diff -Nru orig/Modules/makesetup modified/Modules/makesetup ---- orig/Modules/makesetup 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/makesetup 2015-06-28 14:39:04.000000000 +0800 -@@ -128,7 +128,7 @@ - - # Output DEFS in reverse order so first definition overrides - case $line in -- *=*) DEFS="$line$NL$DEFS"; continue;; -+ [A-Z]*=*) DEFS="$line$NL$DEFS"; continue;; - 'include '*) DEFS="$line$NL$DEFS"; continue;; - '*noobjects*') - case $noobjects in -@@ -156,9 +156,12 @@ - esac - case $arg in - -framework) libs="$libs $arg"; skip=libs; -- # OSX/OSXS/Darwin framework link cmd -+ # OSX/iOS/Darwin framework - ;; -- -[IDUCfF]*) cpps="$cpps $arg";; -+ -F*) libs="$libs $arg"; skip=libs; -+ # OSX/iOS/Darwin framework directory -+ ;; -+ -[IDUCf]*) cpps="$cpps $arg";; - -Xcompiler) skip=cpps;; - -Xlinker) libs="$libs $arg"; skip=libs;; - -rpath) libs="$libs $arg"; skip=libs;; -@@ -176,6 +179,7 @@ - *.c++) srcs="$srcs $arg";; - *.cxx) srcs="$srcs $arg";; - *.cpp) srcs="$srcs $arg";; -+ *.S) srcs="$srcs $arg";; - \$*) libs="$libs $arg" - cpps="$cpps $arg";; - *.*) echo 1>&2 "bad word $arg in $line" -@@ -205,6 +209,7 @@ - *.C) obj=`basename $src .C`.o; cc='$(CXX)';; - *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; - *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; -+ *.S) obj=`basename $src .S`.o; cc='$(CC)';; # Assembly - *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C - *) continue;; - esac -@@ -266,7 +271,7 @@ - *) sed -e " - 1i$NL/* Generated automatically from $config by makesetup. */ - /MARKER 1/i$NL$EXTDECLS -- -+ - /MARKER 2/i$NL$INITBITS - - " $config >config.c -diff -Nru orig/Modules/mathmodule.c modified/Modules/mathmodule.c ---- orig/Modules/mathmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/mathmodule.c 2015-05-04 13:53:01.000000000 +0800 -@@ -55,6 +55,10 @@ - #include "Python.h" - #include "_math.h" - -+#ifdef __APPLE__ -+# include "TargetConditionals.h" -+#endif /* __APPLE__ */ -+ - /* - sin(pi*x), giving accurate results for all finite x (especially x - integral or close to an integer). This is here for use in the -@@ -1746,6 +1750,16 @@ - return PyFloat_FromDouble(fabs(x)); - if (Py_IS_INFINITY(y)) - return PyFloat_FromDouble(fabs(y)); -+#if TARGET_OS_IPHONE -+ /* hypot(x, +/-NaN) returns NaN. -+ Most libc implementations get this right, but for some reason, -+ the iOS device implementation doesn't. -+ */ -+ if (Py_IS_NAN(x)) -+ return PyFloat_FromDouble(fabs(x)); -+ if (Py_IS_NAN(y)) -+ return PyFloat_FromDouble(fabs(y)); -+#endif - errno = 0; - PyFPE_START_PROTECT("in math_hypot", return 0); - r = hypot(x, y); -diff -Nru orig/Modules/posixmodule.c modified/Modules/posixmodule.c ---- orig/Modules/posixmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/posixmodule.c 2015-12-21 13:03:32.000000000 +0800 -@@ -20,6 +20,8 @@ - # pragma weak statvfs - # pragma weak fstatvfs - -+# include "TargetConditionals.h" -+ - #endif /* __APPLE__ */ - - #define PY_SSIZE_T_CLEAN -@@ -180,6 +182,23 @@ - #endif /* __BORLANDC__ */ - #endif /* ! __WATCOMC__ || __QNX__ */ - -+// iOS *defines* a number of POSIX functions, but you can't use them -+// because iOS isn't a conventional multiprocess environment. -+#if TARGET_OS_IPHONE -+# undef HAVE_EXECV -+# undef HAVE_FORK -+# undef HAVE_FORK1 -+# undef HAVE_FORKPTY -+# undef HAVE_GETGROUPS -+# undef HAVE_SCHED_H -+# undef HAVE_SENDFILE -+# undef HAVE_SETPRIORITY -+# undef HAVE_SPAWNV -+# undef HAVE_WAIT -+# undef HAVE_WAIT3 -+# undef HAVE_WAIT4 -+# undef HAVE_WAITPID -+#endif /* TARGET_OS_IPHONE */ - - /*[clinic input] - module os -@@ -1178,7 +1197,9 @@ - #include - static char **environ; - #elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) -+#if !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) - extern char **environ; -+#endif - #endif /* !_MSC_VER */ - - static PyObject * -@@ -1229,7 +1250,7 @@ - Py_DECREF(k); - Py_DECREF(v); - } --#else -+#elif !defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && !defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) - if (environ == NULL) - return d; - /* This part ignores errors */ -@@ -4444,7 +4465,12 @@ - - command = PyBytes_AsString(command_obj); - Py_BEGIN_ALLOW_THREADS -+#if defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) || defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) -+ sts = -1; -+ errno = ENOTSUP; -+#else - sts = system(command); -+#endif - Py_END_ALLOW_THREADS - Py_DECREF(command_obj); - #endif -diff -Nru orig/Modules/pwdmodule.c modified/Modules/pwdmodule.c ---- orig/Modules/pwdmodule.c 2015-02-03 19:49:04.000000000 +0800 -+++ modified/Modules/pwdmodule.c 2015-05-02 23:37:06.000000000 +0800 -@@ -1,6 +1,10 @@ - - /* UNIX password file access module */ - -+#ifdef __APPLE__ -+# include "TargetConditionals.h" -+#endif /* __APPLE__ */ -+ - #include "Python.h" - #include "posixmodule.h" - -@@ -105,6 +109,21 @@ - return NULL; - } - if ((p = getpwuid(uid)) == NULL) { -+// iPhone has a "user" with UID 501, username "mobile"; but the simulator -+// doesn't reflect this. Generate a simulated response. -+#if TARGET_IPHONE_SIMULATOR -+ if (uid == 501) { -+ struct passwd mp; -+ mp.pw_name = "mobile"; -+ mp.pw_passwd = "/smx7MYTQIi2M"; -+ mp.pw_uid = 501; -+ mp.pw_gid = 501; -+ mp.pw_gecos = "Mobile User"; -+ mp.pw_dir = "/var/mobile"; -+ mp.pw_shell = "/bin/sh"; -+ return mkpwent(&mp); -+ } -+#endif - PyObject *uid_obj = _PyLong_FromUid(uid); - if (uid_obj == NULL) - return NULL; -@@ -136,6 +155,22 @@ - if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1) - goto out; - if ((p = getpwnam(name)) == NULL) { -+// iPhone has a "user" with UID 501, username "mobile"; but the simulator -+// doesn't reflect this. Generate a simulated response. -+#if TARGET_IPHONE_SIMULATOR -+ if (strcmp(name, "mobile") == 0) { -+ struct passwd mp; -+ mp.pw_name = "mobile"; -+ mp.pw_passwd = "/smx7MYTQIi2M"; -+ mp.pw_uid = 501; -+ mp.pw_gid = 501; -+ mp.pw_gecos = "Mobile User"; -+ mp.pw_dir = "/var/mobile"; -+ mp.pw_shell = "/bin/sh"; -+ retval = mkpwent(&mp); -+ goto out; -+ } -+#endif - PyErr_Format(PyExc_KeyError, - "getpwnam(): name not found: %s", name); - goto out; -@@ -176,6 +211,7 @@ - } - #endif - -+ - static PyMethodDef pwd_methods[] = { - {"getpwuid", pwd_getpwuid, METH_VARARGS, pwd_getpwuid__doc__}, - {"getpwnam", pwd_getpwnam, METH_VARARGS, pwd_getpwnam__doc__}, -diff -Nru orig/Objects/bytesobject.c modified/Objects/bytesobject.c ---- orig/Objects/bytesobject.c 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Objects/bytesobject.c 2015-08-03 12:54:33.000000000 +0800 -@@ -199,8 +199,8 @@ - int c = va_arg(count, int); - if (c < 0 || c > 255) { - PyErr_SetString(PyExc_OverflowError, -- "PyBytes_FromFormatV(): %c format " -- "expects an integer in range [0; 255]"); -+ sprintf("PyBytes_FromFormatV(): %%c format " -+ "expects an integer in range [0; 255], got %d", c)); - return NULL; - } - n++; -diff -Nru orig/Python/importlib.h modified/Python/importlib.h ---- orig/Python/importlib.h 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Python/importlib.h 2015-05-02 11:58:42.000000000 +0800 -@@ -2,84 +2,84 @@ - const unsigned char _Py_M__importlib[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,4,0,0,100,0,0,90,0,0, -- 100,163,0,90,1,0,100,4,0,100,5,0,132,0,0,90, -- 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, -- 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, -- 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, -- 6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16, -- 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, -- 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, -- 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, -- 0,100,25,0,100,26,0,132,0,0,90,12,0,100,27,0, -- 100,28,0,132,0,0,90,13,0,101,14,0,101,12,0,106, -- 15,0,131,1,0,90,16,0,71,100,29,0,100,30,0,132, -- 0,0,100,30,0,131,2,0,90,17,0,105,0,0,90,18, -- 0,105,0,0,90,19,0,71,100,31,0,100,32,0,132,0, -- 0,100,32,0,101,20,0,131,3,0,90,21,0,71,100,33, -- 0,100,34,0,132,0,0,100,34,0,131,2,0,90,22,0, -- 71,100,35,0,100,36,0,132,0,0,100,36,0,131,2,0, -- 90,23,0,71,100,37,0,100,38,0,132,0,0,100,38,0, -- 131,2,0,90,24,0,100,39,0,100,40,0,132,0,0,90, -- 25,0,100,41,0,100,42,0,132,0,0,90,26,0,100,43, -- 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, -- 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, -- 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, -- 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, -- 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, -- 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, -- 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, -- 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, -- 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, -- 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, -- 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, -- 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, -- 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, -- 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, -- 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, -- 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, -- 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, -- 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, -- 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, -- 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, -- 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, -- 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, -+ 100,164,0,90,1,0,100,5,0,100,6,0,132,0,0,90, -+ 2,0,100,7,0,100,8,0,132,0,0,90,3,0,100,9, -+ 0,100,10,0,132,0,0,90,4,0,100,11,0,100,12,0, -+ 132,0,0,90,5,0,100,13,0,100,14,0,132,0,0,90, -+ 6,0,100,15,0,100,16,0,132,0,0,90,7,0,100,17, -+ 0,100,18,0,132,0,0,90,8,0,100,19,0,100,20,0, -+ 132,0,0,90,9,0,100,21,0,100,22,0,132,0,0,90, -+ 10,0,100,23,0,100,24,0,100,25,0,132,1,0,90,11, -+ 0,100,26,0,100,27,0,132,0,0,90,12,0,100,28,0, -+ 100,29,0,132,0,0,90,13,0,101,14,0,101,12,0,106, -+ 15,0,131,1,0,90,16,0,71,100,30,0,100,31,0,132, -+ 0,0,100,31,0,131,2,0,90,17,0,105,0,0,90,18, -+ 0,105,0,0,90,19,0,71,100,32,0,100,33,0,132,0, -+ 0,100,33,0,101,20,0,131,3,0,90,21,0,71,100,34, -+ 0,100,35,0,132,0,0,100,35,0,131,2,0,90,22,0, -+ 71,100,36,0,100,37,0,132,0,0,100,37,0,131,2,0, -+ 90,23,0,71,100,38,0,100,39,0,132,0,0,100,39,0, -+ 131,2,0,90,24,0,100,40,0,100,41,0,132,0,0,90, -+ 25,0,100,42,0,100,43,0,132,0,0,90,26,0,100,44, -+ 0,100,45,0,132,0,0,90,27,0,100,46,0,106,28,0, -+ 100,47,0,100,48,0,131,2,0,100,49,0,23,90,29,0, -+ 101,30,0,106,31,0,101,29,0,100,48,0,131,2,0,90, -+ 32,0,100,50,0,90,33,0,100,51,0,103,1,0,90,34, -+ 0,100,52,0,103,1,0,90,35,0,100,53,0,103,1,0, -+ 90,36,0,100,54,0,100,55,0,100,56,0,132,1,0,90, -+ 37,0,100,57,0,100,58,0,132,0,0,90,38,0,100,59, -+ 0,100,60,0,132,0,0,90,39,0,100,61,0,100,62,0, -+ 132,0,0,90,40,0,100,63,0,100,64,0,100,65,0,100, -+ 66,0,132,0,1,90,41,0,100,67,0,100,68,0,132,0, -+ 0,90,42,0,100,69,0,100,70,0,132,0,0,90,43,0, -+ 100,71,0,100,72,0,132,0,0,90,44,0,100,73,0,100, -+ 74,0,132,0,0,90,45,0,100,75,0,100,76,0,132,0, -+ 0,90,46,0,100,54,0,100,54,0,100,54,0,100,77,0, -+ 100,78,0,132,3,0,90,47,0,100,54,0,100,54,0,100, -+ 54,0,100,79,0,100,80,0,132,3,0,90,48,0,100,81, -+ 0,100,81,0,100,82,0,100,83,0,132,2,0,90,49,0, -+ 100,84,0,100,85,0,132,0,0,90,50,0,100,86,0,100, -+ 87,0,132,0,0,90,51,0,71,100,88,0,100,89,0,132, -+ 0,0,100,89,0,131,2,0,90,52,0,71,100,90,0,100, -+ 91,0,132,0,0,100,91,0,131,2,0,90,53,0,100,92, -+ 0,100,54,0,100,93,0,100,54,0,100,94,0,100,95,0, - 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, -- 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, -- 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, -- 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, -- 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,100, -- 53,0,100,103,0,100,104,0,132,1,0,90,60,0,71,100, -- 105,0,100,106,0,132,0,0,100,106,0,131,2,0,90,61, -- 0,71,100,107,0,100,108,0,132,0,0,100,108,0,131,2, -- 0,90,62,0,71,100,109,0,100,110,0,132,0,0,100,110, -- 0,131,2,0,90,63,0,71,100,111,0,100,112,0,132,0, -- 0,100,112,0,131,2,0,90,64,0,71,100,113,0,100,114, -- 0,132,0,0,100,114,0,101,64,0,131,3,0,90,65,0, -- 71,100,115,0,100,116,0,132,0,0,100,116,0,131,2,0, -- 90,66,0,71,100,117,0,100,118,0,132,0,0,100,118,0, -- 101,66,0,101,65,0,131,4,0,90,67,0,71,100,119,0, -- 100,120,0,132,0,0,100,120,0,101,66,0,101,64,0,131, -- 4,0,90,68,0,103,0,0,90,69,0,71,100,121,0,100, -- 122,0,132,0,0,100,122,0,131,2,0,90,70,0,71,100, -- 123,0,100,124,0,132,0,0,100,124,0,131,2,0,90,71, -- 0,71,100,125,0,100,126,0,132,0,0,100,126,0,131,2, -- 0,90,72,0,71,100,127,0,100,128,0,132,0,0,100,128, -- 0,131,2,0,90,73,0,71,100,129,0,100,130,0,132,0, -- 0,100,130,0,131,2,0,90,74,0,71,100,131,0,100,132, -- 0,132,0,0,100,132,0,131,2,0,90,75,0,100,133,0, -- 100,134,0,132,0,0,90,76,0,100,135,0,100,136,0,132, -- 0,0,90,77,0,100,53,0,100,137,0,100,138,0,132,1, -- 0,90,78,0,100,139,0,100,140,0,132,0,0,90,79,0, -- 100,141,0,90,80,0,101,80,0,100,142,0,23,90,81,0, -- 100,143,0,100,144,0,132,0,0,90,82,0,100,145,0,100, -- 146,0,132,0,0,90,83,0,100,53,0,100,80,0,100,147, -- 0,100,148,0,132,2,0,90,84,0,100,149,0,100,150,0, -- 132,0,0,90,85,0,100,151,0,100,152,0,132,0,0,90, -- 86,0,100,153,0,100,154,0,132,0,0,90,87,0,100,53, -- 0,100,53,0,102,0,0,100,80,0,100,155,0,100,156,0, -- 132,4,0,90,88,0,100,157,0,100,158,0,132,0,0,90, -- 89,0,100,159,0,100,160,0,132,0,0,90,90,0,100,161, -- 0,100,162,0,132,0,0,90,91,0,100,53,0,83,41,164, -+ 54,0,100,96,0,100,54,0,100,97,0,101,56,0,100,98, -+ 0,100,99,0,132,1,2,90,57,0,100,54,0,100,54,0, -+ 100,100,0,100,101,0,132,2,0,90,58,0,71,100,102,0, -+ 100,103,0,132,0,0,100,103,0,131,2,0,90,59,0,100, -+ 54,0,100,104,0,100,105,0,132,1,0,90,60,0,71,100, -+ 106,0,100,107,0,132,0,0,100,107,0,131,2,0,90,61, -+ 0,71,100,108,0,100,109,0,132,0,0,100,109,0,131,2, -+ 0,90,62,0,71,100,110,0,100,111,0,132,0,0,100,111, -+ 0,131,2,0,90,63,0,71,100,112,0,100,113,0,132,0, -+ 0,100,113,0,131,2,0,90,64,0,71,100,114,0,100,115, -+ 0,132,0,0,100,115,0,101,64,0,131,3,0,90,65,0, -+ 71,100,116,0,100,117,0,132,0,0,100,117,0,131,2,0, -+ 90,66,0,71,100,118,0,100,119,0,132,0,0,100,119,0, -+ 101,66,0,101,65,0,131,4,0,90,67,0,71,100,120,0, -+ 100,121,0,132,0,0,100,121,0,101,66,0,101,64,0,131, -+ 4,0,90,68,0,103,0,0,90,69,0,71,100,122,0,100, -+ 123,0,132,0,0,100,123,0,131,2,0,90,70,0,71,100, -+ 124,0,100,125,0,132,0,0,100,125,0,131,2,0,90,71, -+ 0,71,100,126,0,100,127,0,132,0,0,100,127,0,131,2, -+ 0,90,72,0,71,100,128,0,100,129,0,132,0,0,100,129, -+ 0,131,2,0,90,73,0,71,100,130,0,100,131,0,132,0, -+ 0,100,131,0,131,2,0,90,74,0,71,100,132,0,100,133, -+ 0,132,0,0,100,133,0,131,2,0,90,75,0,100,134,0, -+ 100,135,0,132,0,0,90,76,0,100,136,0,100,137,0,132, -+ 0,0,90,77,0,100,54,0,100,138,0,100,139,0,132,1, -+ 0,90,78,0,100,140,0,100,141,0,132,0,0,90,79,0, -+ 100,142,0,90,80,0,101,80,0,100,143,0,23,90,81,0, -+ 100,144,0,100,145,0,132,0,0,90,82,0,100,146,0,100, -+ 147,0,132,0,0,90,83,0,100,54,0,100,81,0,100,148, -+ 0,100,149,0,132,2,0,90,84,0,100,150,0,100,151,0, -+ 132,0,0,90,85,0,100,152,0,100,153,0,132,0,0,90, -+ 86,0,100,154,0,100,155,0,132,0,0,90,87,0,100,54, -+ 0,100,54,0,102,0,0,100,81,0,100,156,0,100,157,0, -+ 132,4,0,90,88,0,100,158,0,100,159,0,132,0,0,90, -+ 89,0,100,160,0,100,161,0,132,0,0,90,90,0,100,162, -+ 0,100,163,0,132,0,0,90,91,0,100,54,0,83,41,165, - 97,83,1,0,0,67,111,114,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, - 114,116,46,10,10,84,104,105,115,32,109,111,100,117,108,101, -@@ -102,2102 +102,3127 @@ - 32,112,117,98,108,105,99,45,102,97,99,105,110,103,32,118, - 101,114,115,105,111,110,32,111,102,32,116,104,105,115,32,109, - 111,100,117,108,101,46,10,10,218,3,119,105,110,218,6,99, -- 121,103,119,105,110,218,6,100,97,114,119,105,110,99,0,0, -- 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, -- 0,0,115,49,0,0,0,116,0,0,106,1,0,106,2,0, -- 116,3,0,131,1,0,114,33,0,100,1,0,100,2,0,132, -- 0,0,125,0,0,110,12,0,100,3,0,100,2,0,132,0, -- 0,125,0,0,124,0,0,83,41,4,78,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,2,0,0,0,83,0,0,0, -- 115,13,0,0,0,100,1,0,116,0,0,106,1,0,107,6, -- 0,83,41,2,122,53,84,114,117,101,32,105,102,32,102,105, -- 108,101,110,97,109,101,115,32,109,117,115,116,32,98,101,32, -- 99,104,101,99,107,101,100,32,99,97,115,101,45,105,110,115, -- 101,110,115,105,116,105,118,101,108,121,46,115,12,0,0,0, -- 80,89,84,72,79,78,67,65,83,69,79,75,41,2,218,3, -- 95,111,115,90,7,101,110,118,105,114,111,110,169,0,114,4, -- 0,0,0,114,4,0,0,0,250,29,60,102,114,111,122,101, -- 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, -- 116,115,116,114,97,112,62,218,11,95,114,101,108,97,120,95, -- 99,97,115,101,30,0,0,0,115,2,0,0,0,0,2,122, -- 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, -- 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, -- 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, -- 100,1,0,83,41,2,122,53,84,114,117,101,32,105,102,32, -- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, -- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, -- 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,6,0,0,0,34,0,0,0, -- 115,2,0,0,0,0,2,41,4,218,3,115,121,115,218,8, -- 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, -- 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, -- 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, -- 83,41,1,114,6,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,16,95,109,97,107,101,95,114, -- 101,108,97,120,95,99,97,115,101,28,0,0,0,115,8,0, -- 0,0,0,1,18,1,15,4,12,3,114,11,0,0,0,99, -- 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, -- 67,0,0,0,115,26,0,0,0,116,0,0,124,0,0,131, -- 1,0,100,1,0,64,106,1,0,100,2,0,100,3,0,131, -- 2,0,83,41,4,122,42,67,111,110,118,101,114,116,32,97, -- 32,51,50,45,98,105,116,32,105,110,116,101,103,101,114,32, -- 116,111,32,108,105,116,116,108,101,45,101,110,100,105,97,110, -- 46,108,3,0,0,0,255,127,255,127,3,0,233,4,0,0, -- 0,218,6,108,105,116,116,108,101,41,2,218,3,105,110,116, -- 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,7, -- 95,119,95,108,111,110,103,40,0,0,0,115,2,0,0,0, -- 0,2,114,17,0,0,0,99,1,0,0,0,0,0,0,0, -- 1,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, -- 0,116,0,0,106,1,0,124,0,0,100,1,0,131,2,0, -- 83,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, -- 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, -- 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, -- 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, -- 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, -- 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, -- 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, -- 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, -- 0,0,71,0,0,0,115,26,0,0,0,116,0,0,106,1, -- 0,100,1,0,100,2,0,132,0,0,124,0,0,68,131,1, -- 0,131,1,0,83,41,3,122,31,82,101,112,108,97,99,101, -- 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, -- 46,106,111,105,110,40,41,46,99,1,0,0,0,0,0,0, -- 0,2,0,0,0,4,0,0,0,83,0,0,0,115,37,0, -- 0,0,103,0,0,124,0,0,93,27,0,125,1,0,124,1, -- 0,114,6,0,124,1,0,106,0,0,116,1,0,131,1,0, -- 145,2,0,113,6,0,83,114,4,0,0,0,41,2,218,6, -- 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, -- 97,114,97,116,111,114,115,41,2,218,2,46,48,218,4,112, -- 97,114,116,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,250,10,60,108,105,115,116,99,111,109,112,62,52,0, -- 0,0,115,2,0,0,0,9,1,122,30,95,112,97,116,104, -- 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, -- 108,105,115,116,99,111,109,112,62,41,2,218,8,112,97,116, -- 104,95,115,101,112,218,4,106,111,105,110,41,1,218,10,112, -- 97,116,104,95,112,97,114,116,115,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,10,95,112,97,116,104,95, -- 106,111,105,110,50,0,0,0,115,4,0,0,0,0,2,15, -- 1,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, -- 0,0,0,5,0,0,0,67,0,0,0,115,134,0,0,0, -- 116,0,0,116,1,0,131,1,0,100,1,0,107,2,0,114, -- 52,0,124,0,0,106,2,0,116,3,0,131,1,0,92,3, -- 0,125,1,0,125,2,0,125,3,0,124,1,0,124,3,0, -- 102,2,0,83,120,69,0,116,4,0,124,0,0,131,1,0, -- 68,93,55,0,125,4,0,124,4,0,116,1,0,107,6,0, -- 114,65,0,124,0,0,106,5,0,124,4,0,100,2,0,100, -- 1,0,131,1,1,92,2,0,125,1,0,125,3,0,124,1, -- 0,124,3,0,102,2,0,83,113,65,0,87,100,3,0,124, -- 0,0,102,2,0,83,41,4,122,32,82,101,112,108,97,99, -- 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, -- 104,46,115,112,108,105,116,40,41,46,233,1,0,0,0,90, -- 8,109,97,120,115,112,108,105,116,218,0,41,6,218,3,108, -- 101,110,114,21,0,0,0,218,10,114,112,97,114,116,105,116, -- 105,111,110,114,25,0,0,0,218,8,114,101,118,101,114,115, -- 101,100,218,6,114,115,112,108,105,116,41,5,218,4,112,97, -- 116,104,90,5,102,114,111,110,116,218,1,95,218,4,116,97, -- 105,108,114,16,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,11,95,112,97,116,104,95,115,112, -- 108,105,116,56,0,0,0,115,16,0,0,0,0,2,18,1, -- 24,1,10,1,19,1,12,1,27,1,14,1,114,38,0,0, -- 0,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, -- 0,0,67,0,0,0,115,13,0,0,0,116,0,0,106,1, -- 0,124,0,0,131,1,0,83,41,1,122,126,83,116,97,116, -- 32,116,104,101,32,112,97,116,104,46,10,10,32,32,32,32, -- 77,97,100,101,32,97,32,115,101,112,97,114,97,116,101,32, -- 102,117,110,99,116,105,111,110,32,116,111,32,109,97,107,101, -- 32,105,116,32,101,97,115,105,101,114,32,116,111,32,111,118, -- 101,114,114,105,100,101,32,105,110,32,101,120,112,101,114,105, -- 109,101,110,116,115,10,32,32,32,32,40,101,46,103,46,32, -- 99,97,99,104,101,32,115,116,97,116,32,114,101,115,117,108, -- 116,115,41,46,10,10,32,32,32,32,41,2,114,3,0,0, -- 0,90,4,115,116,97,116,41,1,114,35,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,95, -- 112,97,116,104,95,115,116,97,116,68,0,0,0,115,2,0, -- 0,0,0,7,114,39,0,0,0,99,2,0,0,0,0,0, -- 0,0,3,0,0,0,11,0,0,0,67,0,0,0,115,58, -- 0,0,0,121,16,0,116,0,0,124,0,0,131,1,0,125, -- 2,0,87,110,22,0,4,116,1,0,107,10,0,114,40,0, -- 1,1,1,100,1,0,83,89,110,1,0,88,124,2,0,106, -- 2,0,100,2,0,64,124,1,0,107,2,0,83,41,3,122, -- 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, -- 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, -- 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, -- 101,46,70,105,0,240,0,0,41,3,114,39,0,0,0,218, -- 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100, -- 101,41,3,114,35,0,0,0,218,4,109,111,100,101,90,9, -- 115,116,97,116,95,105,110,102,111,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,18,95,112,97,116,104,95, -- 105,115,95,109,111,100,101,95,116,121,112,101,78,0,0,0, -- 115,10,0,0,0,0,2,3,1,16,1,13,1,9,1,114, -- 43,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, -- 0,124,0,0,100,1,0,131,2,0,83,41,2,122,31,82, -- 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, -- 115,46,112,97,116,104,46,105,115,102,105,108,101,46,105,0, -- 128,0,0,41,1,114,43,0,0,0,41,1,114,35,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,12,95,112,97,116,104,95,105,115,102,105,108,101,87,0, -- 0,0,115,2,0,0,0,0,2,114,44,0,0,0,99,1, -- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, -- 0,0,0,115,34,0,0,0,124,0,0,115,21,0,116,0, -- 0,106,1,0,131,0,0,125,0,0,110,0,0,116,2,0, -- 124,0,0,100,1,0,131,2,0,83,41,2,122,30,82,101, -- 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, -- 46,112,97,116,104,46,105,115,100,105,114,46,105,0,64,0, -- 0,41,3,114,3,0,0,0,218,6,103,101,116,99,119,100, -- 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, -- 116,104,95,105,115,100,105,114,92,0,0,0,115,6,0,0, -- 0,0,2,6,1,15,1,114,46,0,0,0,105,182,1,0, -- 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, -- 0,0,67,0,0,0,115,192,0,0,0,100,1,0,106,0, -- 0,124,0,0,116,1,0,124,0,0,131,1,0,131,2,0, -- 125,3,0,116,2,0,106,3,0,124,3,0,116,2,0,106, -- 4,0,116,2,0,106,5,0,66,116,2,0,106,6,0,66, -- 124,2,0,100,2,0,64,131,3,0,125,4,0,121,60,0, -- 116,7,0,106,8,0,124,4,0,100,3,0,131,2,0,143, -- 20,0,125,5,0,124,5,0,106,9,0,124,1,0,131,1, -- 0,1,87,100,4,0,81,88,116,2,0,106,10,0,124,3, -- 0,124,0,0,131,2,0,1,87,110,59,0,4,116,11,0, -- 107,10,0,114,187,0,1,1,1,121,17,0,116,2,0,106, -- 12,0,124,3,0,131,1,0,1,87,110,18,0,4,116,11, -- 0,107,10,0,114,179,0,1,1,1,89,110,1,0,88,130, -- 0,0,89,110,1,0,88,100,4,0,83,41,5,122,162,66, -- 101,115,116,45,101,102,102,111,114,116,32,102,117,110,99,116, -- 105,111,110,32,116,111,32,119,114,105,116,101,32,100,97,116, -- 97,32,116,111,32,97,32,112,97,116,104,32,97,116,111,109, -- 105,99,97,108,108,121,46,10,32,32,32,32,66,101,32,112, -- 114,101,112,97,114,101,100,32,116,111,32,104,97,110,100,108, -- 101,32,97,32,70,105,108,101,69,120,105,115,116,115,69,114, -- 114,111,114,32,105,102,32,99,111,110,99,117,114,114,101,110, -- 116,32,119,114,105,116,105,110,103,32,111,102,32,116,104,101, -- 10,32,32,32,32,116,101,109,112,111,114,97,114,121,32,102, -- 105,108,101,32,105,115,32,97,116,116,101,109,112,116,101,100, -- 46,122,5,123,125,46,123,125,105,182,1,0,0,90,2,119, -- 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, -- 114,3,0,0,0,90,4,111,112,101,110,90,6,79,95,69, -- 88,67,76,90,7,79,95,67,82,69,65,84,90,8,79,95, -- 87,82,79,78,76,89,218,3,95,105,111,218,6,70,105,108, -- 101,73,79,218,5,119,114,105,116,101,218,7,114,101,112,108, -- 97,99,101,114,40,0,0,0,90,6,117,110,108,105,110,107, -- 41,6,114,35,0,0,0,218,4,100,97,116,97,114,42,0, -- 0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,100, -- 218,4,102,105,108,101,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,13,95,119,114,105,116,101,95,97,116, -- 111,109,105,99,99,0,0,0,115,26,0,0,0,0,5,24, -- 1,9,1,33,1,3,3,21,1,19,1,20,1,13,1,3, -- 1,17,1,13,1,5,1,114,55,0,0,0,99,2,0,0, -- 0,0,0,0,0,3,0,0,0,7,0,0,0,67,0,0, -- 0,115,95,0,0,0,120,69,0,100,1,0,100,2,0,100, -- 3,0,100,4,0,103,4,0,68,93,49,0,125,2,0,116, -- 0,0,124,1,0,124,2,0,131,2,0,114,19,0,116,1, -- 0,124,0,0,124,2,0,116,2,0,124,1,0,124,2,0, -- 131,2,0,131,3,0,1,113,19,0,113,19,0,87,124,0, -- 0,106,3,0,106,4,0,124,1,0,106,3,0,131,1,0, -- 1,100,5,0,83,41,6,122,47,83,105,109,112,108,101,32, -- 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, -- 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, -- 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, -- 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, -- 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, -- 100,111,99,95,95,78,41,5,218,7,104,97,115,97,116,116, -- 114,218,7,115,101,116,97,116,116,114,218,7,103,101,116,97, -- 116,116,114,218,8,95,95,100,105,99,116,95,95,218,6,117, -- 112,100,97,116,101,41,3,90,3,110,101,119,90,3,111,108, -- 100,114,52,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,5,95,119,114,97,112,121,0,0,0, -- 115,8,0,0,0,0,2,25,1,15,1,32,1,114,65,0, -- 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,116,0,0,116, -- 1,0,131,1,0,124,0,0,131,1,0,83,41,1,78,41, -- 2,218,4,116,121,112,101,114,7,0,0,0,41,1,218,4, -- 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,11,95,110,101,119,95,109,111,100,117,108,101, -- 129,0,0,0,115,2,0,0,0,0,1,114,68,0,0,0, -+ 121,103,119,105,110,218,6,100,97,114,119,105,110,218,3,105, -+ 111,115,99,0,0,0,0,0,0,0,0,1,0,0,0,2, -+ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, -+ 1,0,106,2,0,116,3,0,131,1,0,114,33,0,100,1, -+ 0,100,2,0,132,0,0,125,0,0,110,12,0,100,3,0, -+ 100,2,0,132,0,0,125,0,0,124,0,0,83,41,4,78, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,58,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -- 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -- 100,8,0,83,41,9,218,13,95,77,97,110,97,103,101,82, -- 101,108,111,97,100,122,63,77,97,110,97,103,101,115,32,116, -- 104,101,32,112,111,115,115,105,98,108,101,32,99,108,101,97, -- 110,45,117,112,32,111,102,32,115,121,115,46,109,111,100,117, -- 108,101,115,32,102,111,114,32,108,111,97,100,95,109,111,100, -- 117,108,101,40,41,46,99,2,0,0,0,0,0,0,0,2, -+ 0,83,0,0,0,115,13,0,0,0,100,1,0,116,0,0, -+ 106,1,0,107,6,0,83,41,2,122,53,84,114,117,101,32, -+ 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, -+ 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, -+ 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, -+ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, -+ 75,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, -+ 110,169,0,114,5,0,0,0,114,5,0,0,0,250,29,60, -+ 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, -+ 46,95,98,111,111,116,115,116,114,97,112,62,218,11,95,114, -+ 101,108,97,120,95,99,97,115,101,30,0,0,0,115,2,0, -+ 0,0,0,2,122,37,95,109,97,107,101,95,114,101,108,97, -+ 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, -+ 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,1,0,0,0,83,0,0,0, -+ 115,4,0,0,0,100,1,0,83,41,2,122,53,84,114,117, -+ 101,32,105,102,32,102,105,108,101,110,97,109,101,115,32,109, -+ 117,115,116,32,98,101,32,99,104,101,99,107,101,100,32,99, -+ 97,115,101,45,105,110,115,101,110,115,105,116,105,118,101,108, -+ 121,46,70,114,5,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,7,0,0, -+ 0,34,0,0,0,115,2,0,0,0,0,2,41,4,218,3, -+ 115,121,115,218,8,112,108,97,116,102,111,114,109,218,10,115, -+ 116,97,114,116,115,119,105,116,104,218,27,95,67,65,83,69, -+ 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, -+ 84,70,79,82,77,83,41,1,114,7,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,16,95,109, -+ 97,107,101,95,114,101,108,97,120,95,99,97,115,101,28,0, -+ 0,0,115,8,0,0,0,0,1,18,1,15,4,12,3,114, -+ 12,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, -+ 0,3,0,0,0,67,0,0,0,115,26,0,0,0,116,0, -+ 0,124,0,0,131,1,0,100,1,0,64,106,1,0,100,2, -+ 0,100,3,0,131,2,0,83,41,4,122,42,67,111,110,118, -+ 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, -+ 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, -+ 110,100,105,97,110,46,108,3,0,0,0,255,127,255,127,3, -+ 0,233,4,0,0,0,218,6,108,105,116,116,108,101,41,2, -+ 218,3,105,110,116,218,8,116,111,95,98,121,116,101,115,41, -+ 1,218,1,120,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,7,95,119,95,108,111,110,103,40,0,0,0, -+ 115,2,0,0,0,0,2,114,18,0,0,0,99,1,0,0, -+ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, -+ 0,115,16,0,0,0,116,0,0,106,1,0,124,0,0,100, -+ 1,0,131,2,0,83,41,2,122,47,67,111,110,118,101,114, -+ 116,32,52,32,98,121,116,101,115,32,105,110,32,108,105,116, -+ 116,108,101,45,101,110,100,105,97,110,32,116,111,32,97,110, -+ 32,105,110,116,101,103,101,114,46,114,14,0,0,0,41,2, -+ 114,15,0,0,0,218,10,102,114,111,109,95,98,121,116,101, -+ 115,41,1,90,9,105,110,116,95,98,121,116,101,115,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,7,95, -+ 114,95,108,111,110,103,45,0,0,0,115,2,0,0,0,0, -+ 2,114,20,0,0,0,99,0,0,0,0,0,0,0,0,1, -+ 0,0,0,3,0,0,0,71,0,0,0,115,26,0,0,0, -+ 116,0,0,106,1,0,100,1,0,100,2,0,132,0,0,124, -+ 0,0,68,131,1,0,131,1,0,83,41,3,122,31,82,101, -+ 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, -+ 46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,0, -+ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, -+ 0,0,115,37,0,0,0,103,0,0,124,0,0,93,27,0, -+ 125,1,0,124,1,0,114,6,0,124,1,0,106,0,0,116, -+ 1,0,131,1,0,145,2,0,113,6,0,83,114,5,0,0, -+ 0,41,2,218,6,114,115,116,114,105,112,218,15,112,97,116, -+ 104,95,115,101,112,97,114,97,116,111,114,115,41,2,218,2, -+ 46,48,218,4,112,97,114,116,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,250,10,60,108,105,115,116,99,111, -+ 109,112,62,52,0,0,0,115,2,0,0,0,9,1,122,30, -+ 95,112,97,116,104,95,106,111,105,110,46,60,108,111,99,97, -+ 108,115,62,46,60,108,105,115,116,99,111,109,112,62,41,2, -+ 218,8,112,97,116,104,95,115,101,112,218,4,106,111,105,110, -+ 41,1,218,10,112,97,116,104,95,112,97,114,116,115,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, -+ 112,97,116,104,95,106,111,105,110,50,0,0,0,115,4,0, -+ 0,0,0,2,15,1,114,29,0,0,0,99,1,0,0,0, -+ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, -+ 115,134,0,0,0,116,0,0,116,1,0,131,1,0,100,1, -+ 0,107,2,0,114,52,0,124,0,0,106,2,0,116,3,0, -+ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, -+ 1,0,124,3,0,102,2,0,83,120,69,0,116,4,0,124, -+ 0,0,131,1,0,68,93,55,0,125,4,0,124,4,0,116, -+ 1,0,107,6,0,114,65,0,124,0,0,106,5,0,124,4, -+ 0,100,2,0,100,1,0,131,1,1,92,2,0,125,1,0, -+ 125,3,0,124,1,0,124,3,0,102,2,0,83,113,65,0, -+ 87,100,3,0,124,0,0,102,2,0,83,41,4,122,32,82, -+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, -+ 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, -+ 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, -+ 41,6,218,3,108,101,110,114,22,0,0,0,218,10,114,112, -+ 97,114,116,105,116,105,111,110,114,26,0,0,0,218,8,114, -+ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, -+ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, -+ 95,218,4,116,97,105,108,114,17,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,11,95,112,97, -+ 116,104,95,115,112,108,105,116,56,0,0,0,115,16,0,0, -+ 0,0,2,18,1,24,1,10,1,19,1,12,1,27,1,14, -+ 1,114,39,0,0,0,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, -- 124,1,0,124,0,0,95,0,0,100,0,0,83,41,1,78, -- 41,1,218,5,95,110,97,109,101,41,2,218,4,115,101,108, -- 102,114,67,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,8,95,95,105,110,105,116,95,95,141, -- 0,0,0,115,2,0,0,0,0,1,122,22,95,77,97,110, -- 97,103,101,82,101,108,111,97,100,46,95,95,105,110,105,116, -- 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,25,0,0,0,124,0,0,106, -- 0,0,116,1,0,106,2,0,107,6,0,124,0,0,95,3, -- 0,100,0,0,83,41,1,78,41,4,114,70,0,0,0,114, -- 7,0,0,0,218,7,109,111,100,117,108,101,115,218,10,95, -- 105,115,95,114,101,108,111,97,100,41,1,114,71,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 9,95,95,101,110,116,101,114,95,95,144,0,0,0,115,2, -- 0,0,0,0,1,122,23,95,77,97,110,97,103,101,82,101, -- 108,111,97,100,46,95,95,101,110,116,101,114,95,95,99,1, -- 0,0,0,0,0,0,0,2,0,0,0,12,0,0,0,71, -- 0,0,0,115,80,0,0,0,116,0,0,100,1,0,100,2, -- 0,132,0,0,124,1,0,68,131,1,0,131,1,0,114,76, -- 0,124,0,0,106,1,0,12,114,76,0,121,17,0,116,2, -- 0,106,3,0,124,0,0,106,4,0,61,87,113,76,0,4, -- 116,5,0,107,10,0,114,72,0,1,1,1,89,113,76,0, -- 88,110,0,0,100,0,0,83,41,3,78,99,1,0,0,0, -- 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, -- 115,27,0,0,0,124,0,0,93,17,0,125,1,0,124,1, -- 0,100,0,0,107,9,0,86,1,113,3,0,100,0,0,83, -- 41,1,78,114,4,0,0,0,41,2,114,22,0,0,0,218, -- 3,97,114,103,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,250,9,60,103,101,110,101,120,112,114,62,148,0, -- 0,0,115,2,0,0,0,6,0,122,41,95,77,97,110,97, -- 103,101,82,101,108,111,97,100,46,95,95,101,120,105,116,95, -- 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, -- 120,112,114,62,41,6,218,3,97,110,121,114,74,0,0,0, -- 114,7,0,0,0,114,73,0,0,0,114,70,0,0,0,218, -- 8,75,101,121,69,114,114,111,114,41,2,114,71,0,0,0, -- 218,4,97,114,103,115,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,8,95,95,101,120,105,116,95,95,147, -- 0,0,0,115,10,0,0,0,0,1,35,1,3,1,17,1, -- 13,1,122,22,95,77,97,110,97,103,101,82,101,108,111,97, -- 100,46,95,95,101,120,105,116,95,95,78,41,7,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,114,72,0,0,0,114,75,0,0,0,114,81,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,69,0,0,0,137,0,0,0,115,8,0, -- 0,0,12,2,6,2,12,3,12,3,114,69,0,0,0,99, -- 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -- 64,0,0,0,115,16,0,0,0,101,0,0,90,1,0,100, -- 0,0,90,2,0,100,1,0,83,41,2,218,14,95,68,101, -- 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,57, -- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,82,0,0,0,162,0,0,0,115,2,0,0,0,12, -- 1,114,82,0,0,0,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,2,0,0,0,64,0,0,0,115,82,0,0,0, -- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, -- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, -- 132,0,0,90,6,0,100,8,0,100,9,0,132,0,0,90, -- 7,0,100,10,0,100,11,0,132,0,0,90,8,0,100,12, -- 0,83,41,13,218,11,95,77,111,100,117,108,101,76,111,99, -- 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, -- 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, -- 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, -- 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, -- 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, -- 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, -- 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, -- 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, -- 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, -- 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, -- 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -- 0,115,70,0,0,0,116,0,0,106,1,0,131,0,0,124, -- 0,0,95,2,0,116,0,0,106,1,0,131,0,0,124,0, -- 0,95,3,0,124,1,0,124,0,0,95,4,0,100,0,0, -- 124,0,0,95,5,0,100,1,0,124,0,0,95,6,0,100, -- 1,0,124,0,0,95,7,0,100,0,0,83,41,2,78,233, -- 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, -- 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, -- 108,111,99,107,218,6,119,97,107,101,117,112,114,67,0,0, -- 0,218,5,111,119,110,101,114,218,5,99,111,117,110,116,218, -- 7,119,97,105,116,101,114,115,41,2,114,71,0,0,0,114, -- 67,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,172,0,0,0,115,12,0,0, -- 0,0,1,15,1,15,1,9,1,9,1,9,1,122,20,95, -- 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, -- 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, -- 2,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, -- 106,1,0,131,0,0,125,1,0,124,0,0,106,2,0,125, -- 2,0,120,59,0,116,3,0,106,4,0,124,2,0,131,1, -- 0,125,3,0,124,3,0,100,0,0,107,8,0,114,55,0, -- 100,1,0,83,124,3,0,106,2,0,125,2,0,124,2,0, -- 124,1,0,107,2,0,114,24,0,100,2,0,83,113,24,0, -- 100,0,0,83,41,3,78,70,84,41,5,114,85,0,0,0, -- 218,9,103,101,116,95,105,100,101,110,116,114,88,0,0,0, -- 218,12,95,98,108,111,99,107,105,110,103,95,111,110,218,3, -- 103,101,116,41,4,114,71,0,0,0,218,2,109,101,218,3, -- 116,105,100,114,86,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,12,104,97,115,95,100,101,97, -- 100,108,111,99,107,180,0,0,0,115,18,0,0,0,0,2, -- 12,1,9,1,3,1,15,1,12,1,4,1,9,1,12,1, -- 122,24,95,77,111,100,117,108,101,76,111,99,107,46,104,97, -- 115,95,100,101,97,100,108,111,99,107,99,1,0,0,0,0, -- 0,0,0,2,0,0,0,17,0,0,0,67,0,0,0,115, -- 214,0,0,0,116,0,0,106,1,0,131,0,0,125,1,0, -- 124,0,0,116,2,0,124,1,0,60,122,177,0,120,170,0, -- 124,0,0,106,3,0,143,130,0,1,124,0,0,106,4,0, -- 100,1,0,107,2,0,115,68,0,124,0,0,106,5,0,124, -- 1,0,107,2,0,114,96,0,124,1,0,124,0,0,95,5, -- 0,124,0,0,4,106,4,0,100,2,0,55,2,95,4,0, -- 100,3,0,83,124,0,0,106,6,0,131,0,0,114,127,0, -- 116,7,0,100,4,0,124,0,0,22,131,1,0,130,1,0, -- 110,0,0,124,0,0,106,8,0,106,9,0,100,5,0,131, -- 1,0,114,163,0,124,0,0,4,106,10,0,100,2,0,55, -- 2,95,10,0,110,0,0,87,100,6,0,81,88,124,0,0, -- 106,8,0,106,9,0,131,0,0,1,124,0,0,106,8,0, -- 106,11,0,131,0,0,1,113,28,0,87,100,6,0,116,2, -- 0,124,1,0,61,88,100,6,0,83,41,7,122,185,10,32, -- 32,32,32,32,32,32,32,65,99,113,117,105,114,101,32,116, -- 104,101,32,109,111,100,117,108,101,32,108,111,99,107,46,32, -- 32,73,102,32,97,32,112,111,116,101,110,116,105,97,108,32, -- 100,101,97,100,108,111,99,107,32,105,115,32,100,101,116,101, -- 99,116,101,100,44,10,32,32,32,32,32,32,32,32,97,32, -- 95,68,101,97,100,108,111,99,107,69,114,114,111,114,32,105, -- 115,32,114,97,105,115,101,100,46,10,32,32,32,32,32,32, -- 32,32,79,116,104,101,114,119,105,115,101,44,32,116,104,101, -- 32,108,111,99,107,32,105,115,32,97,108,119,97,121,115,32, -- 97,99,113,117,105,114,101,100,32,97,110,100,32,84,114,117, -- 101,32,105,115,32,114,101,116,117,114,110,101,100,46,10,32, -- 32,32,32,32,32,32,32,114,84,0,0,0,114,29,0,0, -- 0,84,122,23,100,101,97,100,108,111,99,107,32,100,101,116, -- 101,99,116,101,100,32,98,121,32,37,114,70,78,41,12,114, -- 85,0,0,0,114,91,0,0,0,114,92,0,0,0,114,86, -- 0,0,0,114,89,0,0,0,114,88,0,0,0,114,96,0, -- 0,0,114,82,0,0,0,114,87,0,0,0,218,7,97,99, -- 113,117,105,114,101,114,90,0,0,0,218,7,114,101,108,101, -- 97,115,101,41,2,114,71,0,0,0,114,95,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,97, -- 0,0,0,192,0,0,0,115,32,0,0,0,0,6,12,1, -- 10,1,3,1,3,1,10,1,30,1,9,1,15,1,4,1, -- 12,1,19,1,18,1,24,2,13,1,20,2,122,19,95,77, -- 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, -- 101,99,1,0,0,0,0,0,0,0,2,0,0,0,10,0, -- 0,0,67,0,0,0,115,165,0,0,0,116,0,0,106,1, -- 0,131,0,0,125,1,0,124,0,0,106,2,0,143,138,0, -- 1,124,0,0,106,3,0,124,1,0,107,3,0,114,52,0, -- 116,4,0,100,1,0,131,1,0,130,1,0,110,0,0,124, -- 0,0,106,5,0,100,2,0,107,4,0,115,73,0,116,6, -- 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, -- 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, -- 155,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, -- 0,114,155,0,124,0,0,4,106,7,0,100,3,0,56,2, -- 95,7,0,124,0,0,106,8,0,106,9,0,131,0,0,1, -- 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, -- 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, -- 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, -- 108,111,99,107,114,84,0,0,0,114,29,0,0,0,41,10, -- 114,85,0,0,0,114,91,0,0,0,114,86,0,0,0,114, -- 88,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, -- 111,114,114,89,0,0,0,218,14,65,115,115,101,114,116,105, -- 111,110,69,114,114,111,114,114,90,0,0,0,114,87,0,0, -- 0,114,98,0,0,0,41,2,114,71,0,0,0,114,95,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,98,0,0,0,217,0,0,0,115,22,0,0,0,0, -- 1,12,1,10,1,15,1,15,1,21,1,15,1,15,1,9, -- 1,9,1,15,1,122,19,95,77,111,100,117,108,101,76,111, -- 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, -- 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, -- 25,0,0,0,100,1,0,106,0,0,124,0,0,106,1,0, -- 116,2,0,124,0,0,131,1,0,131,2,0,83,41,2,78, -- 122,23,95,77,111,100,117,108,101,76,111,99,107,40,123,33, -- 114,125,41,32,97,116,32,123,125,41,3,114,47,0,0,0, -- 114,67,0,0,0,114,48,0,0,0,41,1,114,71,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,8,95,95,114,101,112,114,95,95,230,0,0,0,115,2, -- 0,0,0,0,1,122,20,95,77,111,100,117,108,101,76,111, -- 99,107,46,95,95,114,101,112,114,95,95,78,41,9,114,57, -- 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, -- 0,0,114,72,0,0,0,114,96,0,0,0,114,97,0,0, -- 0,114,98,0,0,0,114,101,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 83,0,0,0,166,0,0,0,115,12,0,0,0,12,4,6, -- 2,12,8,12,12,12,25,12,13,114,83,0,0,0,99,0, -- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, -- 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, -- 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, -- 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, -- 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, -- 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, -- 218,16,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -- 99,107,122,86,65,32,115,105,109,112,108,101,32,95,77,111, -- 100,117,108,101,76,111,99,107,32,101,113,117,105,118,97,108, -- 101,110,116,32,102,111,114,32,80,121,116,104,111,110,32,98, -- 117,105,108,100,115,32,119,105,116,104,111,117,116,10,32,32, -- 32,32,109,117,108,116,105,45,116,104,114,101,97,100,105,110, -- 103,32,115,117,112,112,111,114,116,46,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, -- 22,0,0,0,124,1,0,124,0,0,95,0,0,100,1,0, -- 124,0,0,95,1,0,100,0,0,83,41,2,78,114,84,0, -- 0,0,41,2,114,67,0,0,0,114,89,0,0,0,41,2, -- 114,71,0,0,0,114,67,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,72,0,0,0,238,0, -- 0,0,115,4,0,0,0,0,1,9,1,122,25,95,68,117, -- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, -- 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1, -- 0,0,0,3,0,0,0,67,0,0,0,115,19,0,0,0, -- 124,0,0,4,106,0,0,100,1,0,55,2,95,0,0,100, -- 2,0,83,41,3,78,114,29,0,0,0,84,41,1,114,89, -- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,97,0,0,0,242,0, -- 0,0,115,4,0,0,0,0,1,15,1,122,24,95,68,117, -- 109,109,121,77,111,100,117,108,101,76,111,99,107,46,97,99, -- 113,117,105,114,101,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,3,0,0,0,67,0,0,0,115,49,0,0,0,124, -- 0,0,106,0,0,100,1,0,107,2,0,114,30,0,116,1, -- 0,100,2,0,131,1,0,130,1,0,110,0,0,124,0,0, -- 4,106,0,0,100,3,0,56,2,95,0,0,100,0,0,83, -- 41,4,78,114,84,0,0,0,122,31,99,97,110,110,111,116, -+ 116,0,0,106,1,0,124,0,0,131,1,0,83,41,1,122, -+ 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, -+ 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, -+ 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, -+ 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, -+ 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, -+ 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, -+ 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, -+ 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,41, -+ 2,114,4,0,0,0,90,4,115,116,97,116,41,1,114,36, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,10,95,112,97,116,104,95,115,116,97,116,68,0, -+ 0,0,115,2,0,0,0,0,7,114,40,0,0,0,99,2, -+ 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,67, -+ 0,0,0,115,58,0,0,0,121,16,0,116,0,0,124,0, -+ 0,131,1,0,125,2,0,87,110,22,0,4,116,1,0,107, -+ 10,0,114,40,0,1,1,1,100,1,0,83,89,110,1,0, -+ 88,124,2,0,106,2,0,100,2,0,64,124,1,0,107,2, -+ 0,83,41,3,122,49,84,101,115,116,32,119,104,101,116,104, -+ 101,114,32,116,104,101,32,112,97,116,104,32,105,115,32,116, -+ 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, -+ 101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,114, -+ 40,0,0,0,218,7,79,83,69,114,114,111,114,218,7,115, -+ 116,95,109,111,100,101,41,3,114,36,0,0,0,218,4,109, -+ 111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,18,95, -+ 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, -+ 101,78,0,0,0,115,10,0,0,0,0,2,3,1,16,1, -+ 13,1,9,1,114,44,0,0,0,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,13, -+ 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,83, -+ 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, -+ 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, -+ 108,101,46,105,0,128,0,0,41,1,114,44,0,0,0,41, -+ 1,114,36,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102, -+ 105,108,101,87,0,0,0,115,2,0,0,0,0,2,114,45, -+ 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, -+ 3,0,0,0,67,0,0,0,115,34,0,0,0,124,0,0, -+ 115,21,0,116,0,0,106,1,0,131,0,0,125,0,0,110, -+ 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, -+ 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, -+ 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, -+ 46,105,0,64,0,0,41,3,114,4,0,0,0,218,6,103, -+ 101,116,99,119,100,114,44,0,0,0,41,1,114,36,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,11,95,112,97,116,104,95,105,115,100,105,114,92,0,0, -+ 0,115,6,0,0,0,0,2,6,1,15,1,114,47,0,0, -+ 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, -+ 0,0,0,17,0,0,0,67,0,0,0,115,192,0,0,0, -+ 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, -+ 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, -+ 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, -+ 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, -+ 4,0,121,60,0,116,7,0,106,8,0,124,4,0,100,3, -+ 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, -+ 124,1,0,131,1,0,1,87,100,4,0,81,88,116,2,0, -+ 106,10,0,124,3,0,124,0,0,131,2,0,1,87,110,59, -+ 0,4,116,11,0,107,10,0,114,187,0,1,1,1,121,17, -+ 0,116,2,0,106,12,0,124,3,0,131,1,0,1,87,110, -+ 18,0,4,116,11,0,107,10,0,114,179,0,1,1,1,89, -+ 110,1,0,88,130,0,0,89,110,1,0,88,100,4,0,83, -+ 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, -+ 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, -+ 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, -+ 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, -+ 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, -+ 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, -+ 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, -+ 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, -+ 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, -+ 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, -+ 109,112,116,101,100,46,122,5,123,125,46,123,125,105,182,1, -+ 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, -+ 116,218,2,105,100,114,4,0,0,0,90,4,111,112,101,110, -+ 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, -+ 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, -+ 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, -+ 7,114,101,112,108,97,99,101,114,41,0,0,0,90,6,117, -+ 110,108,105,110,107,41,6,114,36,0,0,0,218,4,100,97, -+ 116,97,114,43,0,0,0,90,8,112,97,116,104,95,116,109, -+ 112,90,2,102,100,218,4,102,105,108,101,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,13,95,119,114,105, -+ 116,101,95,97,116,111,109,105,99,99,0,0,0,115,26,0, -+ 0,0,0,5,24,1,9,1,33,1,3,3,21,1,19,1, -+ 20,1,13,1,3,1,17,1,13,1,5,1,114,56,0,0, -+ 0,99,2,0,0,0,0,0,0,0,3,0,0,0,7,0, -+ 0,0,67,0,0,0,115,95,0,0,0,120,69,0,100,1, -+ 0,100,2,0,100,3,0,100,4,0,103,4,0,68,93,49, -+ 0,125,2,0,116,0,0,124,1,0,124,2,0,131,2,0, -+ 114,19,0,116,1,0,124,0,0,124,2,0,116,2,0,124, -+ 1,0,124,2,0,131,2,0,131,3,0,1,113,19,0,113, -+ 19,0,87,124,0,0,106,3,0,106,4,0,124,1,0,106, -+ 3,0,131,1,0,1,100,5,0,83,41,6,122,47,83,105, -+ 109,112,108,101,32,115,117,98,115,116,105,116,117,116,101,32, -+ 102,111,114,32,102,117,110,99,116,111,111,108,115,46,117,112, -+ 100,97,116,101,95,119,114,97,112,112,101,114,46,218,10,95, -+ 95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,109, -+ 101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,95, -+ 95,218,7,95,95,100,111,99,95,95,78,41,5,218,7,104, -+ 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, -+ 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, -+ 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, -+ 119,90,3,111,108,100,114,53,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,5,95,119,114,97, -+ 112,121,0,0,0,115,8,0,0,0,0,2,25,1,15,1, -+ 32,1,114,66,0,0,0,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -+ 0,116,0,0,116,1,0,131,1,0,124,0,0,131,1,0, -+ 83,41,1,78,41,2,218,4,116,121,112,101,114,8,0,0, -+ 0,41,1,218,4,110,97,109,101,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,11,95,110,101,119,95,109, -+ 111,100,117,108,101,129,0,0,0,115,2,0,0,0,0,1, -+ 114,69,0,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,58,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, -+ 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,132, -+ 0,0,90,6,0,100,8,0,83,41,9,218,13,95,77,97, -+ 110,97,103,101,82,101,108,111,97,100,122,63,77,97,110,97, -+ 103,101,115,32,116,104,101,32,112,111,115,115,105,98,108,101, -+ 32,99,108,101,97,110,45,117,112,32,111,102,32,115,121,115, -+ 46,109,111,100,117,108,101,115,32,102,111,114,32,108,111,97, -+ 100,95,109,111,100,117,108,101,40,41,46,99,2,0,0,0, -+ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -+ 115,13,0,0,0,124,1,0,124,0,0,95,0,0,100,0, -+ 0,83,41,1,78,41,1,218,5,95,110,97,109,101,41,2, -+ 218,4,115,101,108,102,114,68,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,105,110, -+ 105,116,95,95,141,0,0,0,115,2,0,0,0,0,1,122, -+ 22,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, -+ 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,25,0,0, -+ 0,124,0,0,106,0,0,116,1,0,106,2,0,107,6,0, -+ 124,0,0,95,3,0,100,0,0,83,41,1,78,41,4,114, -+ 71,0,0,0,114,8,0,0,0,218,7,109,111,100,117,108, -+ 101,115,218,10,95,105,115,95,114,101,108,111,97,100,41,1, -+ 114,72,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,9,95,95,101,110,116,101,114,95,95,144, -+ 0,0,0,115,2,0,0,0,0,1,122,23,95,77,97,110, -+ 97,103,101,82,101,108,111,97,100,46,95,95,101,110,116,101, -+ 114,95,95,99,1,0,0,0,0,0,0,0,2,0,0,0, -+ 11,0,0,0,71,0,0,0,115,80,0,0,0,116,0,0, -+ 100,1,0,100,2,0,132,0,0,124,1,0,68,131,1,0, -+ 131,1,0,114,76,0,124,0,0,106,1,0,12,114,76,0, -+ 121,17,0,116,2,0,106,3,0,124,0,0,106,4,0,61, -+ 87,113,76,0,4,116,5,0,107,10,0,114,72,0,1,1, -+ 1,89,113,76,0,88,110,0,0,100,0,0,83,41,3,78, -+ 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, -+ 0,115,0,0,0,115,27,0,0,0,124,0,0,93,17,0, -+ 125,1,0,124,1,0,100,0,0,107,9,0,86,1,113,3, -+ 0,100,0,0,83,41,1,78,114,5,0,0,0,41,2,114, -+ 23,0,0,0,218,3,97,114,103,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,250,9,60,103,101,110,101,120, -+ 112,114,62,148,0,0,0,115,2,0,0,0,6,0,122,41, -+ 95,77,97,110,97,103,101,82,101,108,111,97,100,46,95,95, -+ 101,120,105,116,95,95,46,60,108,111,99,97,108,115,62,46, -+ 60,103,101,110,101,120,112,114,62,41,6,218,3,97,110,121, -+ 114,75,0,0,0,114,8,0,0,0,114,74,0,0,0,114, -+ 71,0,0,0,218,8,75,101,121,69,114,114,111,114,41,2, -+ 114,72,0,0,0,218,4,97,114,103,115,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,8,95,95,101,120, -+ 105,116,95,95,147,0,0,0,115,10,0,0,0,0,1,35, -+ 1,3,1,17,1,13,1,122,22,95,77,97,110,97,103,101, -+ 82,101,108,111,97,100,46,95,95,101,120,105,116,95,95,78, -+ 41,7,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,114,73,0,0,0,114,76,0,0,0, -+ 114,82,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,70,0,0,0,137,0, -+ 0,0,115,8,0,0,0,12,2,6,2,12,3,12,3,114, -+ 70,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -+ 0,1,0,0,0,64,0,0,0,115,16,0,0,0,101,0, -+ 0,90,1,0,100,0,0,90,2,0,100,1,0,83,41,2, -+ 218,14,95,68,101,97,100,108,111,99,107,69,114,114,111,114, -+ 78,41,3,114,58,0,0,0,114,57,0,0,0,114,59,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,83,0,0,0,162,0,0,0,115, -+ 2,0,0,0,12,1,114,83,0,0,0,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, -+ 115,82,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -+ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -+ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -+ 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, -+ 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, -+ 90,8,0,100,12,0,83,41,13,218,11,95,77,111,100,117, -+ 108,101,76,111,99,107,122,169,65,32,114,101,99,117,114,115, -+ 105,118,101,32,108,111,99,107,32,105,109,112,108,101,109,101, -+ 110,116,97,116,105,111,110,32,119,104,105,99,104,32,105,115, -+ 32,97,98,108,101,32,116,111,32,100,101,116,101,99,116,32, -+ 100,101,97,100,108,111,99,107,115,10,32,32,32,32,40,101, -+ 46,103,46,32,116,104,114,101,97,100,32,49,32,116,114,121, -+ 105,110,103,32,116,111,32,116,97,107,101,32,108,111,99,107, -+ 115,32,65,32,116,104,101,110,32,66,44,32,97,110,100,32, -+ 116,104,114,101,97,100,32,50,32,116,114,121,105,110,103,32, -+ 116,111,10,32,32,32,32,116,97,107,101,32,108,111,99,107, -+ 115,32,66,32,116,104,101,110,32,65,41,46,10,32,32,32, -+ 32,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,70,0,0,0,116,0,0,106,1, -+ 0,131,0,0,124,0,0,95,2,0,116,0,0,106,1,0, -+ 131,0,0,124,0,0,95,3,0,124,1,0,124,0,0,95, -+ 4,0,100,0,0,124,0,0,95,5,0,100,1,0,124,0, -+ 0,95,6,0,100,1,0,124,0,0,95,7,0,100,0,0, -+ 83,41,2,78,233,0,0,0,0,41,8,218,7,95,116,104, -+ 114,101,97,100,90,13,97,108,108,111,99,97,116,101,95,108, -+ 111,99,107,218,4,108,111,99,107,218,6,119,97,107,101,117, -+ 112,114,68,0,0,0,218,5,111,119,110,101,114,218,5,99, -+ 111,117,110,116,218,7,119,97,105,116,101,114,115,41,2,114, -+ 72,0,0,0,114,68,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,172,0,0, -+ 0,115,12,0,0,0,0,1,15,1,15,1,9,1,9,1, -+ 9,1,122,20,95,77,111,100,117,108,101,76,111,99,107,46, -+ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, -+ 0,4,0,0,0,2,0,0,0,67,0,0,0,115,87,0, -+ 0,0,116,0,0,106,1,0,131,0,0,125,1,0,124,0, -+ 0,106,2,0,125,2,0,120,59,0,116,3,0,106,4,0, -+ 124,2,0,131,1,0,125,3,0,124,3,0,100,0,0,107, -+ 8,0,114,55,0,100,1,0,83,124,3,0,106,2,0,125, -+ 2,0,124,2,0,124,1,0,107,2,0,114,24,0,100,2, -+ 0,83,113,24,0,100,0,0,83,41,3,78,70,84,41,5, -+ 114,86,0,0,0,218,9,103,101,116,95,105,100,101,110,116, -+ 114,89,0,0,0,218,12,95,98,108,111,99,107,105,110,103, -+ 95,111,110,218,3,103,101,116,41,4,114,72,0,0,0,218, -+ 2,109,101,218,3,116,105,100,114,87,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,12,104,97, -+ 115,95,100,101,97,100,108,111,99,107,180,0,0,0,115,18, -+ 0,0,0,0,2,12,1,9,1,3,1,15,1,12,1,4, -+ 1,9,1,12,1,122,24,95,77,111,100,117,108,101,76,111, -+ 99,107,46,104,97,115,95,100,101,97,100,108,111,99,107,99, -+ 1,0,0,0,0,0,0,0,2,0,0,0,16,0,0,0, -+ 67,0,0,0,115,214,0,0,0,116,0,0,106,1,0,131, -+ 0,0,125,1,0,124,0,0,116,2,0,124,1,0,60,122, -+ 177,0,120,170,0,124,0,0,106,3,0,143,130,0,1,124, -+ 0,0,106,4,0,100,1,0,107,2,0,115,68,0,124,0, -+ 0,106,5,0,124,1,0,107,2,0,114,96,0,124,1,0, -+ 124,0,0,95,5,0,124,0,0,4,106,4,0,100,2,0, -+ 55,2,95,4,0,100,3,0,83,124,0,0,106,6,0,131, -+ 0,0,114,127,0,116,7,0,100,4,0,124,0,0,22,131, -+ 1,0,130,1,0,110,0,0,124,0,0,106,8,0,106,9, -+ 0,100,5,0,131,1,0,114,163,0,124,0,0,4,106,10, -+ 0,100,2,0,55,2,95,10,0,110,0,0,87,100,6,0, -+ 81,88,124,0,0,106,8,0,106,9,0,131,0,0,1,124, -+ 0,0,106,8,0,106,11,0,131,0,0,1,113,28,0,87, -+ 100,6,0,116,2,0,124,1,0,61,88,100,6,0,83,41, -+ 7,122,185,10,32,32,32,32,32,32,32,32,65,99,113,117, -+ 105,114,101,32,116,104,101,32,109,111,100,117,108,101,32,108, -+ 111,99,107,46,32,32,73,102,32,97,32,112,111,116,101,110, -+ 116,105,97,108,32,100,101,97,100,108,111,99,107,32,105,115, -+ 32,100,101,116,101,99,116,101,100,44,10,32,32,32,32,32, -+ 32,32,32,97,32,95,68,101,97,100,108,111,99,107,69,114, -+ 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,32, -+ 32,32,32,32,32,32,32,79,116,104,101,114,119,105,115,101, -+ 44,32,116,104,101,32,108,111,99,107,32,105,115,32,97,108, -+ 119,97,121,115,32,97,99,113,117,105,114,101,100,32,97,110, -+ 100,32,84,114,117,101,32,105,115,32,114,101,116,117,114,110, -+ 101,100,46,10,32,32,32,32,32,32,32,32,114,85,0,0, -+ 0,114,30,0,0,0,84,122,23,100,101,97,100,108,111,99, -+ 107,32,100,101,116,101,99,116,101,100,32,98,121,32,37,114, -+ 70,78,41,12,114,86,0,0,0,114,92,0,0,0,114,93, -+ 0,0,0,114,87,0,0,0,114,90,0,0,0,114,89,0, -+ 0,0,114,97,0,0,0,114,83,0,0,0,114,88,0,0, -+ 0,218,7,97,99,113,117,105,114,101,114,91,0,0,0,218, -+ 7,114,101,108,101,97,115,101,41,2,114,72,0,0,0,114, -+ 96,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,98,0,0,0,192,0,0,0,115,32,0,0, -+ 0,0,6,12,1,10,1,3,1,3,1,10,1,30,1,9, -+ 1,15,1,4,1,12,1,19,1,18,1,24,2,13,1,20, -+ 2,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97, -+ 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,10,0,0,0,67,0,0,0,115,165,0,0,0, -+ 116,0,0,106,1,0,131,0,0,125,1,0,124,0,0,106, -+ 2,0,143,138,0,1,124,0,0,106,3,0,124,1,0,107, -+ 3,0,114,52,0,116,4,0,100,1,0,131,1,0,130,1, -+ 0,110,0,0,124,0,0,106,5,0,100,2,0,107,4,0, -+ 115,73,0,116,6,0,130,1,0,124,0,0,4,106,5,0, -+ 100,3,0,56,2,95,5,0,124,0,0,106,5,0,100,2, -+ 0,107,2,0,114,155,0,100,0,0,124,0,0,95,3,0, -+ 124,0,0,106,7,0,114,155,0,124,0,0,4,106,7,0, -+ 100,3,0,56,2,95,7,0,124,0,0,106,8,0,106,9, -+ 0,131,0,0,1,113,155,0,110,0,0,87,100,0,0,81, -+ 88,100,0,0,83,41,4,78,122,31,99,97,110,110,111,116, - 32,114,101,108,101,97,115,101,32,117,110,45,97,99,113,117, -- 105,114,101,100,32,108,111,99,107,114,29,0,0,0,41,2, -- 114,89,0,0,0,114,99,0,0,0,41,1,114,71,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,98,0,0,0,246,0,0,0,115,6,0,0,0,0,1, -- 15,1,15,1,122,24,95,68,117,109,109,121,77,111,100,117, -- 108,101,76,111,99,107,46,114,101,108,101,97,115,101,99,1, -- 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, -- 0,0,0,115,25,0,0,0,100,1,0,106,0,0,124,0, -- 0,106,1,0,116,2,0,124,0,0,131,1,0,131,2,0, -- 83,41,2,78,122,28,95,68,117,109,109,121,77,111,100,117, -- 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, -- 123,125,41,3,114,47,0,0,0,114,67,0,0,0,114,48, -- 0,0,0,41,1,114,71,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,101,0,0,0,251,0, -- 0,0,115,2,0,0,0,0,1,122,25,95,68,117,109,109, -- 121,77,111,100,117,108,101,76,111,99,107,46,95,95,114,101, -- 112,114,95,95,78,41,8,114,57,0,0,0,114,56,0,0, -- 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, -- 114,97,0,0,0,114,98,0,0,0,114,101,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,102,0,0,0,234,0,0,0,115,10,0,0, -- 0,12,2,6,2,12,4,12,4,12,5,114,102,0,0,0, -- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,52,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, -- 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, -- 0,100,6,0,132,0,0,90,5,0,100,7,0,83,41,8, -- 218,18,95,77,111,100,117,108,101,76,111,99,107,77,97,110, -- 97,103,101,114,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1, -- 0,124,0,0,95,0,0,100,0,0,124,0,0,95,1,0, -- 100,0,0,83,41,1,78,41,2,114,70,0,0,0,218,5, -- 95,108,111,99,107,41,2,114,71,0,0,0,114,67,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,72,0,0,0,1,1,0,0,115,4,0,0,0,0,1, -- 9,1,122,27,95,77,111,100,117,108,101,76,111,99,107,77, -- 97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,99, -- 1,0,0,0,0,0,0,0,1,0,0,0,10,0,0,0, -- 67,0,0,0,115,53,0,0,0,122,22,0,116,0,0,124, -- 0,0,106,1,0,131,1,0,124,0,0,95,2,0,87,100, -- 0,0,116,3,0,106,4,0,131,0,0,1,88,124,0,0, -- 106,2,0,106,5,0,131,0,0,1,100,0,0,83,41,1, -- 78,41,6,218,16,95,103,101,116,95,109,111,100,117,108,101, -- 95,108,111,99,107,114,70,0,0,0,114,104,0,0,0,218, -- 4,95,105,109,112,218,12,114,101,108,101,97,115,101,95,108, -- 111,99,107,114,97,0,0,0,41,1,114,71,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,75, -- 0,0,0,5,1,0,0,115,8,0,0,0,0,1,3,1, -- 22,2,11,1,122,28,95,77,111,100,117,108,101,76,111,99, -- 107,77,97,110,97,103,101,114,46,95,95,101,110,116,101,114, -- 95,95,99,1,0,0,0,0,0,0,0,3,0,0,0,1, -- 0,0,0,79,0,0,0,115,17,0,0,0,124,0,0,106, -- 0,0,106,1,0,131,0,0,1,100,0,0,83,41,1,78, -- 41,2,114,104,0,0,0,114,98,0,0,0,41,3,114,71, -- 0,0,0,114,80,0,0,0,218,6,107,119,97,114,103,115, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 81,0,0,0,12,1,0,0,115,2,0,0,0,0,1,122, -- 27,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, -- 103,101,114,46,95,95,101,120,105,116,95,95,78,41,6,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, -- 0,0,0,114,75,0,0,0,114,81,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,103,0,0,0,255,0,0,0,115,6,0,0,0,12, -- 2,12,4,12,7,114,103,0,0,0,99,1,0,0,0,0, -- 0,0,0,3,0,0,0,11,0,0,0,3,0,0,0,115, -- 142,0,0,0,100,1,0,125,1,0,121,17,0,116,0,0, -- 136,0,0,25,131,0,0,125,1,0,87,110,18,0,4,116, -- 1,0,107,10,0,114,43,0,1,1,1,89,110,1,0,88, -- 124,1,0,100,1,0,107,8,0,114,138,0,116,2,0,100, -- 1,0,107,8,0,114,83,0,116,3,0,136,0,0,131,1, -- 0,125,1,0,110,12,0,116,4,0,136,0,0,131,1,0, -- 125,1,0,135,0,0,102,1,0,100,2,0,100,3,0,134, -- 0,0,125,2,0,116,5,0,106,6,0,124,1,0,124,2, -- 0,131,2,0,116,0,0,136,0,0,60,110,0,0,124,1, -- 0,83,41,4,122,109,71,101,116,32,111,114,32,99,114,101, -- 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, -+ 105,114,101,100,32,108,111,99,107,114,85,0,0,0,114,30, -+ 0,0,0,41,10,114,86,0,0,0,114,92,0,0,0,114, -+ 87,0,0,0,114,89,0,0,0,218,12,82,117,110,116,105, -+ 109,101,69,114,114,111,114,114,90,0,0,0,218,14,65,115, -+ 115,101,114,116,105,111,110,69,114,114,111,114,114,91,0,0, -+ 0,114,88,0,0,0,114,99,0,0,0,41,2,114,72,0, -+ 0,0,114,96,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,99,0,0,0,217,0,0,0,115, -+ 22,0,0,0,0,1,12,1,10,1,15,1,15,1,21,1, -+ 15,1,15,1,9,1,9,1,15,1,122,19,95,77,111,100, -+ 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, -+ 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, -+ 67,0,0,0,115,25,0,0,0,100,1,0,106,0,0,124, -+ 0,0,106,1,0,116,2,0,124,0,0,131,1,0,131,2, -+ 0,83,41,2,78,122,23,95,77,111,100,117,108,101,76,111, -+ 99,107,40,123,33,114,125,41,32,97,116,32,123,125,41,3, -+ 114,48,0,0,0,114,68,0,0,0,114,49,0,0,0,41, -+ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,8,95,95,114,101,112,114,95,95,230, -+ 0,0,0,115,2,0,0,0,0,1,122,20,95,77,111,100, -+ 117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,95, -+ 78,41,9,114,58,0,0,0,114,57,0,0,0,114,59,0, -+ 0,0,114,60,0,0,0,114,73,0,0,0,114,97,0,0, -+ 0,114,98,0,0,0,114,99,0,0,0,114,102,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,84,0,0,0,166,0,0,0,115,12,0, -+ 0,0,12,4,6,2,12,8,12,12,12,25,12,13,114,84, -+ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -+ 2,0,0,0,64,0,0,0,115,70,0,0,0,101,0,0, -+ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, -+ 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, -+ 0,132,0,0,90,5,0,100,6,0,100,7,0,132,0,0, -+ 90,6,0,100,8,0,100,9,0,132,0,0,90,7,0,100, -+ 10,0,83,41,11,218,16,95,68,117,109,109,121,77,111,100, -+ 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, -+ 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, -+ 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, -+ 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, -+ 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, -+ 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,22,0,0,0,124,1,0,124,0,0,95, -+ 0,0,100,1,0,124,0,0,95,1,0,100,0,0,83,41, -+ 2,78,114,85,0,0,0,41,2,114,68,0,0,0,114,90, -+ 0,0,0,41,2,114,72,0,0,0,114,68,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,73, -+ 0,0,0,238,0,0,0,115,4,0,0,0,0,1,9,1, -+ 122,25,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -+ 99,107,46,95,95,105,110,105,116,95,95,99,1,0,0,0, -+ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, -+ 115,19,0,0,0,124,0,0,4,106,0,0,100,1,0,55, -+ 2,95,0,0,100,2,0,83,41,3,78,114,30,0,0,0, -+ 84,41,1,114,90,0,0,0,41,1,114,72,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,98, -+ 0,0,0,242,0,0,0,115,4,0,0,0,0,1,15,1, -+ 122,24,95,68,117,109,109,121,77,111,100,117,108,101,76,111, -+ 99,107,46,97,99,113,117,105,114,101,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, -+ 49,0,0,0,124,0,0,106,0,0,100,1,0,107,2,0, -+ 114,30,0,116,1,0,100,2,0,131,1,0,130,1,0,110, -+ 0,0,124,0,0,4,106,0,0,100,3,0,56,2,95,0, -+ 0,100,0,0,83,41,4,78,114,85,0,0,0,122,31,99, -+ 97,110,110,111,116,32,114,101,108,101,97,115,101,32,117,110, -+ 45,97,99,113,117,105,114,101,100,32,108,111,99,107,114,30, -+ 0,0,0,41,2,114,90,0,0,0,114,100,0,0,0,41, -+ 1,114,72,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,99,0,0,0,246,0,0,0,115,6, -+ 0,0,0,0,1,15,1,15,1,122,24,95,68,117,109,109, -+ 121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101, -+ 97,115,101,99,1,0,0,0,0,0,0,0,1,0,0,0, -+ 4,0,0,0,67,0,0,0,115,25,0,0,0,100,1,0, -+ 106,0,0,124,0,0,106,1,0,116,2,0,124,0,0,131, -+ 1,0,131,2,0,83,41,2,78,122,28,95,68,117,109,109, -+ 121,77,111,100,117,108,101,76,111,99,107,40,123,33,114,125, -+ 41,32,97,116,32,123,125,41,3,114,48,0,0,0,114,68, -+ 0,0,0,114,49,0,0,0,41,1,114,72,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,102, -+ 0,0,0,251,0,0,0,115,2,0,0,0,0,1,122,25, -+ 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, -+ 46,95,95,114,101,112,114,95,95,78,41,8,114,58,0,0, -+ 0,114,57,0,0,0,114,59,0,0,0,114,60,0,0,0, -+ 114,73,0,0,0,114,98,0,0,0,114,99,0,0,0,114, -+ 102,0,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,103,0,0,0,234,0,0, -+ 0,115,10,0,0,0,12,2,6,2,12,4,12,4,12,5, -+ 114,103,0,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,100,2, -+ 0,132,0,0,90,3,0,100,3,0,100,4,0,132,0,0, -+ 90,4,0,100,5,0,100,6,0,132,0,0,90,5,0,100, -+ 7,0,83,41,8,218,18,95,77,111,100,117,108,101,76,111, -+ 99,107,77,97,110,97,103,101,114,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,22, -+ 0,0,0,124,1,0,124,0,0,95,0,0,100,0,0,124, -+ 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,71, -+ 0,0,0,218,5,95,108,111,99,107,41,2,114,72,0,0, -+ 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,73,0,0,0,1,1,0,0,115,4, -+ 0,0,0,0,1,9,1,122,27,95,77,111,100,117,108,101, -+ 76,111,99,107,77,97,110,97,103,101,114,46,95,95,105,110, -+ 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, -+ 0,10,0,0,0,67,0,0,0,115,53,0,0,0,122,22, -+ 0,116,0,0,124,0,0,106,1,0,131,1,0,124,0,0, -+ 95,2,0,87,100,0,0,116,3,0,106,4,0,131,0,0, -+ 1,88,124,0,0,106,2,0,106,5,0,131,0,0,1,100, -+ 0,0,83,41,1,78,41,6,218,16,95,103,101,116,95,109, -+ 111,100,117,108,101,95,108,111,99,107,114,71,0,0,0,114, -+ 105,0,0,0,218,4,95,105,109,112,218,12,114,101,108,101, -+ 97,115,101,95,108,111,99,107,114,98,0,0,0,41,1,114, -+ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,76,0,0,0,5,1,0,0,115,8,0,0, -+ 0,0,1,3,1,22,2,11,1,122,28,95,77,111,100,117, -+ 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, -+ 101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0, -+ 3,0,0,0,1,0,0,0,79,0,0,0,115,17,0,0, -+ 0,124,0,0,106,0,0,106,1,0,131,0,0,1,100,0, -+ 0,83,41,1,78,41,2,114,105,0,0,0,114,99,0,0, -+ 0,41,3,114,72,0,0,0,114,81,0,0,0,218,6,107, -+ 119,97,114,103,115,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,82,0,0,0,12,1,0,0,115,2,0, -+ 0,0,0,1,122,27,95,77,111,100,117,108,101,76,111,99, -+ 107,77,97,110,97,103,101,114,46,95,95,101,120,105,116,95, -+ 95,78,41,6,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,73,0,0,0,114,76,0,0,0,114,82,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,104,0,0,0,255,0,0,0,115, -+ 6,0,0,0,12,2,12,4,12,7,114,104,0,0,0,99, -+ 1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, -+ 3,0,0,0,115,142,0,0,0,100,1,0,125,1,0,121, -+ 17,0,116,0,0,136,0,0,25,131,0,0,125,1,0,87, -+ 110,18,0,4,116,1,0,107,10,0,114,43,0,1,1,1, -+ 89,110,1,0,88,124,1,0,100,1,0,107,8,0,114,138, -+ 0,116,2,0,100,1,0,107,8,0,114,83,0,116,3,0, -+ 136,0,0,131,1,0,125,1,0,110,12,0,116,4,0,136, -+ 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,2, -+ 0,100,3,0,134,0,0,125,2,0,116,5,0,106,6,0, -+ 124,1,0,124,2,0,131,2,0,116,0,0,136,0,0,60, -+ 110,0,0,124,1,0,83,41,4,122,109,71,101,116,32,111, -+ 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, -+ 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, -+ 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, -+ 46,10,10,32,32,32,32,83,104,111,117,108,100,32,111,110, -+ 108,121,32,98,101,32,99,97,108,108,101,100,32,119,105,116, -+ 104,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, -+ 107,32,116,97,107,101,110,46,78,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,2,0,0,0,19,0,0,0,115,11, -+ 0,0,0,116,0,0,136,0,0,61,100,0,0,83,41,1, -+ 78,41,1,218,13,95,109,111,100,117,108,101,95,108,111,99, -+ 107,115,41,1,114,37,0,0,0,41,1,114,68,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,2,99,98,32,1, -+ 0,0,115,2,0,0,0,0,1,122,28,95,103,101,116,95, -+ 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99, -+ 97,108,115,62,46,99,98,41,7,114,110,0,0,0,114,80, -+ 0,0,0,114,86,0,0,0,114,103,0,0,0,114,84,0, -+ 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, -+ 102,41,3,114,68,0,0,0,114,87,0,0,0,114,111,0, -+ 0,0,114,5,0,0,0,41,1,114,68,0,0,0,114,6, -+ 0,0,0,114,106,0,0,0,18,1,0,0,115,24,0,0, -+ 0,0,4,6,1,3,1,17,1,13,1,5,1,12,1,12, -+ 1,15,2,12,1,18,2,25,1,114,106,0,0,0,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, -+ 0,0,0,115,71,0,0,0,116,0,0,124,0,0,131,1, -+ 0,125,1,0,116,1,0,106,2,0,131,0,0,1,121,14, -+ 0,124,1,0,106,3,0,131,0,0,1,87,110,18,0,4, -+ 116,4,0,107,10,0,114,56,0,1,1,1,89,110,11,0, -+ 88,124,1,0,106,5,0,131,0,0,1,100,1,0,83,41, -+ 2,97,21,1,0,0,82,101,108,101,97,115,101,32,116,104, -+ 101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,32, -+ 108,111,99,107,44,32,97,110,100,32,97,99,113,117,105,114, -+ 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,32, -+ 116,104,101,10,32,32,32,32,109,111,100,117,108,101,32,108, - 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, -- 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, -- 32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101, -- 32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101, -- 32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107, -- 101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,2,0,0,0,19,0,0,0,115,11,0,0,0,116,0, -- 0,136,0,0,61,100,0,0,83,41,1,78,41,1,218,13, -- 95,109,111,100,117,108,101,95,108,111,99,107,115,41,1,114, -- 36,0,0,0,41,1,114,67,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,2,99,98,32,1,0,0,115,2,0, -- 0,0,0,1,122,28,95,103,101,116,95,109,111,100,117,108, -- 101,95,108,111,99,107,46,60,108,111,99,97,108,115,62,46, -- 99,98,41,7,114,109,0,0,0,114,79,0,0,0,114,85, -- 0,0,0,114,102,0,0,0,114,83,0,0,0,218,8,95, -- 119,101,97,107,114,101,102,90,3,114,101,102,41,3,114,67, -- 0,0,0,114,86,0,0,0,114,110,0,0,0,114,4,0, -- 0,0,41,1,114,67,0,0,0,114,5,0,0,0,114,105, -- 0,0,0,18,1,0,0,115,24,0,0,0,0,4,6,1, -- 3,1,17,1,13,1,5,1,12,1,12,1,15,2,12,1, -- 18,2,25,1,114,105,0,0,0,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,71, -- 0,0,0,116,0,0,124,0,0,131,1,0,125,1,0,116, -- 1,0,106,2,0,131,0,0,1,121,14,0,124,1,0,106, -- 3,0,131,0,0,1,87,110,18,0,4,116,4,0,107,10, -- 0,114,56,0,1,1,1,89,110,11,0,88,124,1,0,106, -- 5,0,131,0,0,1,100,1,0,83,41,2,97,21,1,0, -- 0,82,101,108,101,97,115,101,32,116,104,101,32,103,108,111, -- 98,97,108,32,105,109,112,111,114,116,32,108,111,99,107,44, -- 32,97,110,100,32,97,99,113,117,105,114,101,115,32,116,104, -- 101,110,32,114,101,108,101,97,115,101,32,116,104,101,10,32, -- 32,32,32,109,111,100,117,108,101,32,108,111,99,107,32,102, -- 111,114,32,97,32,103,105,118,101,110,32,109,111,100,117,108, -- 101,32,110,97,109,101,46,10,32,32,32,32,84,104,105,115, -- 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, -- 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, -- 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, -- 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, -- 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, -- 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, -- 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, -- 10,32,32,32,32,83,104,111,117,108,100,32,111,110,108,121, -- 32,98,101,32,99,97,108,108,101,100,32,119,105,116,104,32, -- 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,32, -- 116,97,107,101,110,46,78,41,6,114,105,0,0,0,114,106, -- 0,0,0,114,107,0,0,0,114,97,0,0,0,114,82,0, -- 0,0,114,98,0,0,0,41,2,114,67,0,0,0,114,86, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,19,95,108,111,99,107,95,117,110,108,111,99,107, -- 95,109,111,100,117,108,101,37,1,0,0,115,14,0,0,0, -- 0,7,12,1,10,1,3,1,14,1,13,3,5,2,114,112, -- 0,0,0,99,1,0,0,0,0,0,0,0,3,0,0,0, -- 3,0,0,0,79,0,0,0,115,13,0,0,0,124,0,0, -- 124,1,0,124,2,0,142,0,0,83,41,1,97,46,1,0, -- 0,114,101,109,111,118,101,95,105,109,112,111,114,116,108,105, -- 98,95,102,114,97,109,101,115,32,105,110,32,105,109,112,111, -- 114,116,46,99,32,119,105,108,108,32,97,108,119,97,121,115, -- 32,114,101,109,111,118,101,32,115,101,113,117,101,110,99,101, -- 115,10,32,32,32,32,111,102,32,105,109,112,111,114,116,108, -- 105,98,32,102,114,97,109,101,115,32,116,104,97,116,32,101, -- 110,100,32,119,105,116,104,32,97,32,99,97,108,108,32,116, -- 111,32,116,104,105,115,32,102,117,110,99,116,105,111,110,10, -- 10,32,32,32,32,85,115,101,32,105,116,32,105,110,115,116, -- 101,97,100,32,111,102,32,97,32,110,111,114,109,97,108,32, -- 99,97,108,108,32,105,110,32,112,108,97,99,101,115,32,119, -- 104,101,114,101,32,105,110,99,108,117,100,105,110,103,32,116, -- 104,101,32,105,109,112,111,114,116,108,105,98,10,32,32,32, -- 32,102,114,97,109,101,115,32,105,110,116,114,111,100,117,99, -- 101,115,32,117,110,119,97,110,116,101,100,32,110,111,105,115, -- 101,32,105,110,116,111,32,116,104,101,32,116,114,97,99,101, -- 98,97,99,107,32,40,101,46,103,46,32,119,104,101,110,32, -- 101,120,101,99,117,116,105,110,103,10,32,32,32,32,109,111, -- 100,117,108,101,32,99,111,100,101,41,10,32,32,32,32,114, -- 4,0,0,0,41,3,218,1,102,114,80,0,0,0,90,4, -- 107,119,100,115,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, -- 102,114,97,109,101,115,95,114,101,109,111,118,101,100,57,1, -- 0,0,115,2,0,0,0,0,8,114,114,0,0,0,105,238, -- 12,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, -- 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, -- 95,122,3,46,112,121,122,4,46,112,121,99,122,4,46,112, -- 121,111,78,99,2,0,0,0,0,0,0,0,11,0,0,0, -- 6,0,0,0,67,0,0,0,115,180,0,0,0,124,1,0, -- 100,1,0,107,8,0,114,25,0,116,0,0,106,1,0,106, -- 2,0,12,110,3,0,124,1,0,125,2,0,124,2,0,114, -- 46,0,116,3,0,125,3,0,110,6,0,116,4,0,125,3, -- 0,116,5,0,124,0,0,131,1,0,92,2,0,125,4,0, -- 125,5,0,124,5,0,106,6,0,100,2,0,131,1,0,92, -- 3,0,125,6,0,125,7,0,125,8,0,116,0,0,106,7, -- 0,106,8,0,125,9,0,124,9,0,100,1,0,107,8,0, -- 114,133,0,116,9,0,100,3,0,131,1,0,130,1,0,110, -- 0,0,100,4,0,106,10,0,124,6,0,124,7,0,124,9, -- 0,124,3,0,100,5,0,25,103,4,0,131,1,0,125,10, -- 0,116,11,0,124,4,0,116,12,0,124,10,0,131,3,0, -- 83,41,6,97,244,1,0,0,71,105,118,101,110,32,116,104, -- 101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,32, -- 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, -- 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, -- 99,47,46,112,121,111,32,102,105,108,101,46,10,10,32,32, -- 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, -- 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, -- 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, -- 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, -- 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, -- 112,121,99,47,46,112,121,111,32,102,105,108,101,32,99,97, -- 108,99,117,108,97,116,101,100,32,97,115,32,105,102,32,116, -- 104,101,32,46,112,121,32,102,105,108,101,32,119,101,114,101, -- 32,105,109,112,111,114,116,101,100,46,32,32,84,104,101,32, -- 101,120,116,101,110,115,105,111,110,10,32,32,32,32,119,105, -- 108,108,32,98,101,32,46,112,121,99,32,117,110,108,101,115, -- 115,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, -- 109,105,122,101,32,105,115,32,110,111,110,45,122,101,114,111, -- 44,32,116,104,101,110,32,105,116,32,119,105,108,108,32,98, -- 101,32,46,112,121,111,46,10,10,32,32,32,32,73,102,32, -- 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105, -- 115,32,110,111,116,32,78,111,110,101,44,32,116,104,101,110, -- 32,105,116,32,109,117,115,116,32,98,101,32,97,32,98,111, -- 111,108,101,97,110,32,97,110,100,32,105,115,32,117,115,101, -- 100,32,105,110,10,32,32,32,32,112,108,97,99,101,32,111, -- 102,32,115,121,115,46,102,108,97,103,115,46,111,112,116,105, -- 109,105,122,101,46,10,10,32,32,32,32,73,102,32,115,121, -- 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -- 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, -- 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, -- 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, -- 97,105,115,101,100,46,10,10,32,32,32,32,78,218,1,46, -- 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, -- 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, -- 115,32,78,111,110,101,114,30,0,0,0,114,84,0,0,0, -- 41,13,114,7,0,0,0,218,5,102,108,97,103,115,218,8, -- 111,112,116,105,109,105,122,101,218,23,68,69,66,85,71,95, -- 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, -- 83,218,27,79,80,84,73,77,73,90,69,68,95,66,89,84, -- 69,67,79,68,69,95,83,85,70,70,73,88,69,83,114,38, -- 0,0,0,218,9,112,97,114,116,105,116,105,111,110,218,14, -- 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, -- 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, -- 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,26, -- 0,0,0,114,28,0,0,0,218,8,95,80,89,67,65,67, -- 72,69,41,11,114,35,0,0,0,90,14,100,101,98,117,103, -- 95,111,118,101,114,114,105,100,101,218,5,100,101,98,117,103, -- 218,8,115,117,102,102,105,120,101,115,218,4,104,101,97,100, -- 114,37,0,0,0,218,13,98,97,115,101,95,102,105,108,101, -- 110,97,109,101,218,3,115,101,112,114,36,0,0,0,90,3, -- 116,97,103,218,8,102,105,108,101,110,97,109,101,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,17,99,97, -- 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,181, -- 1,0,0,115,22,0,0,0,0,13,31,1,6,1,9,2, -- 6,1,18,1,24,1,12,1,12,1,15,1,31,1,114,132, -+ 109,111,100,117,108,101,32,110,97,109,101,46,10,32,32,32, -+ 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111, -+ 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101, -+ 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105, -+ 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116, -+ 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32, -+ 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101, -+ 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114, -+ 101,97,100,46,10,10,32,32,32,32,83,104,111,117,108,100, -+ 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, -+ 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, -+ 108,111,99,107,32,116,97,107,101,110,46,78,41,6,114,106, -+ 0,0,0,114,107,0,0,0,114,108,0,0,0,114,98,0, -+ 0,0,114,83,0,0,0,114,99,0,0,0,41,2,114,68, -+ 0,0,0,114,87,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,19,95,108,111,99,107,95,117, -+ 110,108,111,99,107,95,109,111,100,117,108,101,37,1,0,0, -+ 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, -+ 3,5,2,114,113,0,0,0,99,1,0,0,0,0,0,0, -+ 0,3,0,0,0,3,0,0,0,79,0,0,0,115,13,0, -+ 0,0,124,0,0,124,1,0,124,2,0,142,0,0,83,41, -+ 1,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, -+ 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, -+ 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, -+ 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, -+ 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, -+ 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, -+ 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, -+ 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, -+ 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, -+ 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, -+ 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, -+ 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, -+ 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, -+ 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, -+ 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, -+ 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, -+ 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, -+ 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, -+ 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, -+ 32,32,32,32,114,5,0,0,0,41,3,218,1,102,114,81, -+ 0,0,0,90,4,107,119,100,115,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,25,95,99,97,108,108,95, -+ 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, -+ 118,101,100,57,1,0,0,115,2,0,0,0,0,8,114,115, -+ 0,0,0,105,238,12,0,0,233,2,0,0,0,114,14,0, -+ 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, -+ 97,99,104,101,95,95,122,3,46,112,121,122,4,46,112,121, -+ 99,122,4,46,112,121,111,78,99,2,0,0,0,0,0,0, -+ 0,11,0,0,0,6,0,0,0,67,0,0,0,115,180,0, -+ 0,0,124,1,0,100,1,0,107,8,0,114,25,0,116,0, -+ 0,106,1,0,106,2,0,12,110,3,0,124,1,0,125,2, -+ 0,124,2,0,114,46,0,116,3,0,125,3,0,110,6,0, -+ 116,4,0,125,3,0,116,5,0,124,0,0,131,1,0,92, -+ 2,0,125,4,0,125,5,0,124,5,0,106,6,0,100,2, -+ 0,131,1,0,92,3,0,125,6,0,125,7,0,125,8,0, -+ 116,0,0,106,7,0,106,8,0,125,9,0,124,9,0,100, -+ 1,0,107,8,0,114,133,0,116,9,0,100,3,0,131,1, -+ 0,130,1,0,110,0,0,100,4,0,106,10,0,124,6,0, -+ 124,7,0,124,9,0,124,3,0,100,5,0,25,103,4,0, -+ 131,1,0,125,10,0,116,11,0,124,4,0,116,12,0,124, -+ 10,0,131,3,0,83,41,6,97,244,1,0,0,71,105,118, -+ 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, -+ 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, -+ 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, -+ 115,32,46,112,121,99,47,46,112,121,111,32,102,105,108,101, -+ 46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,102, -+ 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, -+ 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, -+ 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, -+ 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,10, -+ 32,32,32,32,46,112,121,99,47,46,112,121,111,32,102,105, -+ 108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115, -+ 32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101, -+ 32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,32, -+ 32,84,104,101,32,101,120,116,101,110,115,105,111,110,10,32, -+ 32,32,32,119,105,108,108,32,98,101,32,46,112,121,99,32, -+ 117,110,108,101,115,115,32,115,121,115,46,102,108,97,103,115, -+ 46,111,112,116,105,109,105,122,101,32,105,115,32,110,111,110, -+ 45,122,101,114,111,44,32,116,104,101,110,32,105,116,32,119, -+ 105,108,108,32,98,101,32,46,112,121,111,46,10,10,32,32, -+ 32,32,73,102,32,100,101,98,117,103,95,111,118,101,114,114, -+ 105,100,101,32,105,115,32,110,111,116,32,78,111,110,101,44, -+ 32,116,104,101,110,32,105,116,32,109,117,115,116,32,98,101, -+ 32,97,32,98,111,111,108,101,97,110,32,97,110,100,32,105, -+ 115,32,117,115,101,100,32,105,110,10,32,32,32,32,112,108, -+ 97,99,101,32,111,102,32,115,121,115,46,102,108,97,103,115, -+ 46,111,112,116,105,109,105,122,101,46,10,10,32,32,32,32, -+ 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, -+ 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, -+ 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, -+ 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, -+ 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, -+ 32,78,218,1,46,122,36,115,121,115,46,105,109,112,108,101, -+ 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, -+ 116,97,103,32,105,115,32,78,111,110,101,114,31,0,0,0, -+ 114,85,0,0,0,41,13,114,8,0,0,0,218,5,102,108, -+ 97,103,115,218,8,111,112,116,105,109,105,122,101,218,23,68, -+ 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, -+ 70,70,73,88,69,83,218,27,79,80,84,73,77,73,90,69, -+ 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, -+ 88,69,83,114,39,0,0,0,218,9,112,97,114,116,105,116, -+ 105,111,110,218,14,105,109,112,108,101,109,101,110,116,97,116, -+ 105,111,110,218,9,99,97,99,104,101,95,116,97,103,218,19, -+ 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, -+ 114,111,114,114,27,0,0,0,114,29,0,0,0,218,8,95, -+ 80,89,67,65,67,72,69,41,11,114,36,0,0,0,90,14, -+ 100,101,98,117,103,95,111,118,101,114,114,105,100,101,218,5, -+ 100,101,98,117,103,218,8,115,117,102,102,105,120,101,115,218, -+ 4,104,101,97,100,114,38,0,0,0,218,13,98,97,115,101, -+ 95,102,105,108,101,110,97,109,101,218,3,115,101,112,114,37, -+ 0,0,0,90,3,116,97,103,218,8,102,105,108,101,110,97, -+ 109,101,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, -+ 117,114,99,101,181,1,0,0,115,22,0,0,0,0,13,31, -+ 1,6,1,9,2,6,1,18,1,24,1,12,1,12,1,15, -+ 1,31,1,114,133,0,0,0,99,1,0,0,0,0,0,0, -+ 0,5,0,0,0,5,0,0,0,67,0,0,0,115,193,0, -+ 0,0,116,0,0,106,1,0,106,2,0,100,1,0,107,8, -+ 0,114,33,0,116,3,0,100,2,0,131,1,0,130,1,0, -+ 110,0,0,116,4,0,124,0,0,131,1,0,92,2,0,125, -+ 1,0,125,2,0,116,4,0,124,1,0,131,1,0,92,2, -+ 0,125,1,0,125,3,0,124,3,0,116,5,0,107,3,0, -+ 114,108,0,116,6,0,100,3,0,106,7,0,116,5,0,124, -+ 0,0,131,2,0,131,1,0,130,1,0,110,0,0,124,2, -+ 0,106,8,0,100,4,0,131,1,0,100,5,0,107,3,0, -+ 114,153,0,116,6,0,100,6,0,106,7,0,124,2,0,131, -+ 1,0,131,1,0,130,1,0,110,0,0,124,2,0,106,9, -+ 0,100,4,0,131,1,0,100,7,0,25,125,4,0,116,10, -+ 0,124,1,0,124,4,0,116,11,0,100,7,0,25,23,131, -+ 2,0,83,41,8,97,121,1,0,0,71,105,118,101,110,32, -+ 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, -+ 121,99,46,47,46,112,121,111,32,102,105,108,101,44,32,114, -+ 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, -+ 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10, -+ 10,32,32,32,32,84,104,101,32,46,112,121,99,47,46,112, -+ 121,111,32,102,105,108,101,32,100,111,101,115,32,110,111,116, -+ 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, -+ 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, -+ 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, -+ 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, -+ 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, -+ 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, -+ 32,46,112,121,99,47,46,112,121,111,32,102,105,108,101,46, -+ 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, -+ 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, -+ 111,32,80,69,80,32,51,49,52,55,32,102,111,114,109,97, -+ 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, -+ 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, -+ 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, -+ 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, -+ 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, -+ 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, -+ 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, -+ 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, -+ 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, -+ 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, -+ 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, -+ 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, -+ 125,114,117,0,0,0,114,116,0,0,0,122,28,101,120,112, -+ 101,99,116,101,100,32,111,110,108,121,32,50,32,100,111,116, -+ 115,32,105,110,32,123,33,114,125,114,85,0,0,0,41,12, -+ 114,8,0,0,0,114,123,0,0,0,114,124,0,0,0,114, -+ 125,0,0,0,114,39,0,0,0,114,126,0,0,0,218,10, -+ 86,97,108,117,101,69,114,114,111,114,114,48,0,0,0,114, -+ 90,0,0,0,114,122,0,0,0,114,29,0,0,0,218,15, -+ 83,79,85,82,67,69,95,83,85,70,70,73,88,69,83,41, -+ 5,114,36,0,0,0,114,129,0,0,0,90,16,112,121,99, -+ 97,99,104,101,95,102,105,108,101,110,97,109,101,90,7,112, -+ 121,99,97,99,104,101,114,130,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,17,115,111,117,114, -+ 99,101,95,102,114,111,109,95,99,97,99,104,101,208,1,0, -+ 0,115,24,0,0,0,0,9,18,1,15,1,18,1,18,1, -+ 12,1,3,1,24,1,21,1,3,1,21,1,19,1,114,136, - 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, -- 5,0,0,0,67,0,0,0,115,193,0,0,0,116,0,0, -- 106,1,0,106,2,0,100,1,0,107,8,0,114,33,0,116, -- 3,0,100,2,0,131,1,0,130,1,0,110,0,0,116,4, -- 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, -- 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, -- 3,0,124,3,0,116,5,0,107,3,0,114,108,0,116,6, -- 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, -- 131,1,0,130,1,0,110,0,0,124,2,0,106,8,0,100, -- 4,0,131,1,0,100,5,0,107,3,0,114,153,0,116,6, -- 0,100,6,0,106,7,0,124,2,0,131,1,0,131,1,0, -- 130,1,0,110,0,0,124,2,0,106,9,0,100,4,0,131, -- 1,0,100,7,0,25,125,4,0,116,10,0,124,1,0,124, -- 4,0,116,11,0,100,7,0,25,23,131,2,0,83,41,8, -- 97,121,1,0,0,71,105,118,101,110,32,116,104,101,32,112, -- 97,116,104,32,116,111,32,97,32,46,112,121,99,46,47,46, -- 112,121,111,32,102,105,108,101,44,32,114,101,116,117,114,110, -- 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, -- 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, -- 84,104,101,32,46,112,121,99,47,46,112,121,111,32,102,105, -- 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, -- 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, -- 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, -- 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, -- 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, -- 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, -- 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, -- 47,46,112,121,111,32,102,105,108,101,46,32,32,73,102,32, -- 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, -- 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, -- 32,51,49,52,55,32,102,111,114,109,97,116,44,32,86,97, -- 108,117,101,69,114,114,111,114,32,119,105,108,108,32,98,101, -- 32,114,97,105,115,101,100,46,32,73,102,10,32,32,32,32, -- 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, -- 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, -- 78,111,110,101,32,116,104,101,110,32,78,111,116,73,109,112, -- 108,101,109,101,110,116,101,100,69,114,114,111,114,32,105,115, -- 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,122, -- 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, -- 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, -- 32,78,111,110,101,122,37,123,125,32,110,111,116,32,98,111, -- 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, -- 116,111,114,121,32,105,110,32,123,33,114,125,114,116,0,0, -- 0,114,115,0,0,0,122,28,101,120,112,101,99,116,101,100, -- 32,111,110,108,121,32,50,32,100,111,116,115,32,105,110,32, -- 123,33,114,125,114,84,0,0,0,41,12,114,7,0,0,0, -- 114,122,0,0,0,114,123,0,0,0,114,124,0,0,0,114, -- 38,0,0,0,114,125,0,0,0,218,10,86,97,108,117,101, -- 69,114,114,111,114,114,47,0,0,0,114,89,0,0,0,114, -- 121,0,0,0,114,28,0,0,0,218,15,83,79,85,82,67, -- 69,95,83,85,70,70,73,88,69,83,41,5,114,35,0,0, -- 0,114,128,0,0,0,90,16,112,121,99,97,99,104,101,95, -- 102,105,108,101,110,97,109,101,90,7,112,121,99,97,99,104, -- 101,114,129,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,17,115,111,117,114,99,101,95,102,114, -- 111,109,95,99,97,99,104,101,208,1,0,0,115,24,0,0, -- 0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24, -- 1,21,1,3,1,21,1,19,1,114,135,0,0,0,99,1, -- 0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67, -- 0,0,0,115,164,0,0,0,116,0,0,124,0,0,131,1, -- 0,100,1,0,107,2,0,114,22,0,100,2,0,83,124,0, -- 0,106,1,0,100,3,0,131,1,0,92,3,0,125,1,0, -- 125,2,0,125,3,0,124,1,0,12,115,81,0,124,3,0, -- 106,2,0,131,0,0,100,7,0,100,8,0,133,2,0,25, -- 100,6,0,107,3,0,114,85,0,124,0,0,83,121,16,0, -- 116,3,0,124,0,0,131,1,0,125,4,0,87,110,40,0, -- 4,116,4,0,116,5,0,102,2,0,107,10,0,114,143,0, -- 1,1,1,124,0,0,100,2,0,100,9,0,133,2,0,25, -- 125,4,0,89,110,1,0,88,116,6,0,124,4,0,131,1, -- 0,114,160,0,124,4,0,83,124,0,0,83,41,10,122,188, -- 67,111,110,118,101,114,116,32,97,32,98,121,116,101,99,111, -- 100,101,32,102,105,108,101,32,112,97,116,104,32,116,111,32, -- 97,32,115,111,117,114,99,101,32,112,97,116,104,32,40,105, -- 102,32,112,111,115,115,105,98,108,101,41,46,10,10,32,32, -- 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, -- 101,120,105,115,116,115,32,112,117,114,101,108,121,32,102,111, -- 114,32,98,97,99,107,119,97,114,100,115,45,99,111,109,112, -- 97,116,105,98,105,108,105,116,121,32,102,111,114,10,32,32, -- 32,32,80,121,73,109,112,111,114,116,95,69,120,101,99,67, -- 111,100,101,77,111,100,117,108,101,87,105,116,104,70,105,108, -- 101,110,97,109,101,115,40,41,32,105,110,32,116,104,101,32, -- 67,32,65,80,73,46,10,10,32,32,32,32,114,84,0,0, -- 0,78,114,116,0,0,0,233,3,0,0,0,114,29,0,0, -- 0,90,2,112,121,233,253,255,255,255,233,255,255,255,255,114, -- 138,0,0,0,41,7,114,31,0,0,0,114,32,0,0,0, -- 218,5,108,111,119,101,114,114,135,0,0,0,114,124,0,0, -- 0,114,133,0,0,0,114,44,0,0,0,41,5,218,13,98, -- 121,116,101,99,111,100,101,95,112,97,116,104,90,4,114,101, -- 115,116,114,36,0,0,0,90,9,101,120,116,101,110,115,105, -- 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15, -- 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,231, -- 1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1, -- 35,1,4,1,3,1,16,1,19,1,21,1,114,142,0,0, -- 0,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, -- 0,0,67,0,0,0,115,60,0,0,0,121,19,0,116,0, -- 0,124,0,0,131,1,0,106,1,0,125,1,0,87,110,24, -- 0,4,116,2,0,107,10,0,114,45,0,1,1,1,100,1, -- 0,125,1,0,89,110,1,0,88,124,1,0,100,2,0,79, -- 125,1,0,124,1,0,83,41,3,122,51,67,97,108,99,117, -- 108,97,116,101,32,116,104,101,32,109,111,100,101,32,112,101, -- 114,109,105,115,115,105,111,110,115,32,102,111,114,32,97,32, -- 98,121,116,101,99,111,100,101,32,102,105,108,101,46,105,182, -- 1,0,0,233,128,0,0,0,41,3,114,39,0,0,0,114, -- 41,0,0,0,114,40,0,0,0,41,2,114,35,0,0,0, -- 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, -- 250,1,0,0,115,12,0,0,0,0,2,3,1,19,1,13, -- 1,11,3,10,1,114,144,0,0,0,218,9,118,101,114,98, -- 111,115,105,116,121,114,29,0,0,0,99,1,0,0,0,1, -- 0,0,0,3,0,0,0,4,0,0,0,71,0,0,0,115, -- 81,0,0,0,116,0,0,106,1,0,106,2,0,124,1,0, -- 107,5,0,114,77,0,124,0,0,106,3,0,100,6,0,131, -- 1,0,115,46,0,100,3,0,124,0,0,23,125,0,0,110, -- 0,0,116,4,0,124,0,0,106,5,0,124,2,0,140,0, -- 0,100,4,0,116,0,0,106,6,0,131,1,1,1,110,0, -- 0,100,5,0,83,41,7,122,61,80,114,105,110,116,32,116, -- 104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,116, -- 100,101,114,114,32,105,102,32,45,118,47,80,89,84,72,79, -- 78,86,69,82,66,79,83,69,32,105,115,32,116,117,114,110, -- 101,100,32,111,110,46,250,1,35,250,7,105,109,112,111,114, -- 116,32,122,2,35,32,114,54,0,0,0,78,41,2,114,146, -- 0,0,0,114,147,0,0,0,41,7,114,7,0,0,0,114, -- 117,0,0,0,218,7,118,101,114,98,111,115,101,114,9,0, -- 0,0,218,5,112,114,105,110,116,114,47,0,0,0,218,6, -- 115,116,100,101,114,114,41,3,218,7,109,101,115,115,97,103, -- 101,114,145,0,0,0,114,80,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,16,95,118,101,114, -- 98,111,115,101,95,109,101,115,115,97,103,101,6,2,0,0, -- 115,8,0,0,0,0,2,18,1,15,1,13,1,114,152,0, -- 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,4, -- 0,0,0,3,0,0,0,115,38,0,0,0,100,1,0,135, -- 0,0,102,1,0,100,2,0,100,3,0,134,1,0,125,1, -- 0,116,0,0,124,1,0,136,0,0,131,2,0,1,124,1, -- 0,83,41,4,122,252,68,101,99,111,114,97,116,111,114,32, -- 116,111,32,118,101,114,105,102,121,32,116,104,97,116,32,116, -- 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, -- 114,101,113,117,101,115,116,101,100,32,109,97,116,99,104,101, -- 115,32,116,104,101,32,111,110,101,32,116,104,101,10,32,32, -- 32,32,108,111,97,100,101,114,32,99,97,110,32,104,97,110, -- 100,108,101,46,10,10,32,32,32,32,84,104,101,32,102,105, -- 114,115,116,32,97,114,103,117,109,101,110,116,32,40,115,101, -- 108,102,41,32,109,117,115,116,32,100,101,102,105,110,101,32, -- 95,110,97,109,101,32,119,104,105,99,104,32,116,104,101,32, -- 115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32, -- 105,115,10,32,32,32,32,99,111,109,112,97,114,101,100,32, -- 97,103,97,105,110,115,116,46,32,73,102,32,116,104,101,32, -- 99,111,109,112,97,114,105,115,111,110,32,102,97,105,108,115, -- 32,116,104,101,110,32,73,109,112,111,114,116,69,114,114,111, -- 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, -- 32,32,78,99,2,0,0,0,0,0,0,0,4,0,0,0, -- 5,0,0,0,31,0,0,0,115,83,0,0,0,124,1,0, -- 100,0,0,107,8,0,114,24,0,124,0,0,106,0,0,125, -- 1,0,110,40,0,124,0,0,106,0,0,124,1,0,107,3, -- 0,114,64,0,116,1,0,100,1,0,124,1,0,22,100,2, -- 0,124,1,0,131,1,1,130,1,0,110,0,0,136,0,0, -- 124,0,0,124,1,0,124,2,0,124,3,0,142,2,0,83, -- 41,3,78,122,23,108,111,97,100,101,114,32,99,97,110,110, -- 111,116,32,104,97,110,100,108,101,32,37,115,114,67,0,0, -- 0,41,2,114,67,0,0,0,218,11,73,109,112,111,114,116, -- 69,114,114,111,114,41,4,114,71,0,0,0,114,67,0,0, -- 0,114,80,0,0,0,114,108,0,0,0,41,1,218,6,109, -- 101,116,104,111,100,114,4,0,0,0,114,5,0,0,0,218, -- 19,95,99,104,101,99,107,95,110,97,109,101,95,119,114,97, -- 112,112,101,114,22,2,0,0,115,10,0,0,0,0,1,12, -- 1,12,1,15,1,25,1,122,40,95,99,104,101,99,107,95, -- 110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,99, -- 104,101,99,107,95,110,97,109,101,95,119,114,97,112,112,101, -- 114,41,1,114,65,0,0,0,41,2,114,154,0,0,0,114, -- 155,0,0,0,114,4,0,0,0,41,1,114,154,0,0,0, -- 114,5,0,0,0,218,11,95,99,104,101,99,107,95,110,97, -- 109,101,14,2,0,0,115,6,0,0,0,0,8,21,6,13, -- 1,114,156,0,0,0,99,1,0,0,0,0,0,0,0,2, -- 0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0, -- 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125, -- 1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124, -- 1,0,83,41,3,122,49,68,101,99,111,114,97,116,111,114, -- 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, -- 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, -- 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, -- 0,2,0,0,0,4,0,0,0,19,0,0,0,115,58,0, -- 0,0,124,1,0,116,0,0,106,1,0,107,7,0,114,45, -- 0,116,2,0,100,1,0,106,3,0,124,1,0,131,1,0, -- 100,2,0,124,1,0,131,1,1,130,1,0,110,0,0,136, -- 0,0,124,0,0,124,1,0,131,2,0,83,41,3,78,122, -- 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, -- 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,67, -- 0,0,0,41,4,114,7,0,0,0,218,20,98,117,105,108, -- 116,105,110,95,109,111,100,117,108,101,95,110,97,109,101,115, -- 114,153,0,0,0,114,47,0,0,0,41,2,114,71,0,0, -- 0,218,8,102,117,108,108,110,97,109,101,41,1,218,3,102, -- 120,110,114,4,0,0,0,114,5,0,0,0,218,25,95,114, -- 101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,95, -- 119,114,97,112,112,101,114,34,2,0,0,115,8,0,0,0, -- 0,1,15,1,18,1,12,1,122,52,95,114,101,113,117,105, -- 114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99, -- 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98, -- 117,105,108,116,105,110,95,119,114,97,112,112,101,114,41,1, -- 114,65,0,0,0,41,2,114,159,0,0,0,114,160,0,0, -- 0,114,4,0,0,0,41,1,114,159,0,0,0,114,5,0, -- 0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,117, -- 105,108,116,105,110,32,2,0,0,115,6,0,0,0,0,2, -- 18,5,13,1,114,161,0,0,0,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35, -- 0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, -- 0,0,125,1,0,116,0,0,124,1,0,136,0,0,131,2, -- 0,1,124,1,0,83,41,3,122,47,68,101,99,111,114,97, -- 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, -- 101,32,110,97,109,101,100,32,109,111,100,117,108,101,32,105, -- 115,32,102,114,111,122,101,110,46,99,2,0,0,0,0,0, -- 0,0,2,0,0,0,4,0,0,0,19,0,0,0,115,58, -- 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,115, -- 45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,1, -- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, -- 136,0,0,124,0,0,124,1,0,131,2,0,83,41,3,78, -- 122,27,123,33,114,125,32,105,115,32,110,111,116,32,97,32, -- 102,114,111,122,101,110,32,109,111,100,117,108,101,114,67,0, -- 0,0,41,4,114,106,0,0,0,218,9,105,115,95,102,114, -- 111,122,101,110,114,153,0,0,0,114,47,0,0,0,41,2, -- 114,71,0,0,0,114,158,0,0,0,41,1,114,159,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,24,95,114,101, -- 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, -- 97,112,112,101,114,45,2,0,0,115,8,0,0,0,0,1, -- 15,1,18,1,12,1,122,50,95,114,101,113,117,105,114,101, -- 115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,115, -- 62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,122, -- 101,110,95,119,114,97,112,112,101,114,41,1,114,65,0,0, -- 0,41,2,114,159,0,0,0,114,163,0,0,0,114,4,0, -- 0,0,41,1,114,159,0,0,0,114,5,0,0,0,218,16, -- 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, -- 43,2,0,0,115,6,0,0,0,0,2,18,5,13,1,114, -- 164,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, -- 0,5,0,0,0,67,0,0,0,115,87,0,0,0,124,0, -- 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, -- 125,3,0,124,2,0,100,1,0,107,8,0,114,83,0,116, -- 1,0,124,3,0,131,1,0,114,83,0,100,2,0,125,4, -- 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, -- 100,3,0,25,131,1,0,116,5,0,131,2,0,1,110,0, -- 0,124,2,0,83,41,4,122,155,84,114,121,32,116,111,32, -- 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, -- 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, -- 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, -- 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, -- 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, -- 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, -- 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, -- 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, -- 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, -- 32,32,32,32,78,122,44,78,111,116,32,105,109,112,111,114, -- 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, -- 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, -- 116,95,95,114,84,0,0,0,41,6,218,11,102,105,110,100, -- 95,108,111,97,100,101,114,114,31,0,0,0,218,9,95,119, -- 97,114,110,105,110,103,115,218,4,119,97,114,110,114,47,0, -- 0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,110, -- 103,41,5,114,71,0,0,0,114,158,0,0,0,218,6,108, -- 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, -- 3,109,115,103,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, -- 101,95,115,104,105,109,54,2,0,0,115,10,0,0,0,0, -- 10,21,1,24,1,6,1,32,1,114,172,0,0,0,99,2, -- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, -- 0,0,0,115,93,0,0,0,116,0,0,124,1,0,124,0, -- 0,131,2,0,125,2,0,116,1,0,124,2,0,131,1,0, -- 125,3,0,124,1,0,116,2,0,106,3,0,107,6,0,114, -- 79,0,116,2,0,106,3,0,124,1,0,25,125,4,0,124, -- 3,0,106,4,0,124,4,0,131,1,0,1,116,2,0,106, -- 3,0,124,1,0,25,83,124,3,0,106,5,0,131,0,0, -- 83,100,1,0,83,41,2,122,128,76,111,97,100,32,116,104, -- 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, -- 108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117, -- 108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105, -- 116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, -- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, -- 100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101, -- 120,101,99,95,109,111,100,117,108,101,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,78,41,6,218,16,115,112, -- 101,99,95,102,114,111,109,95,108,111,97,100,101,114,218,12, -- 95,83,112,101,99,77,101,116,104,111,100,115,114,7,0,0, -- 0,114,73,0,0,0,218,4,101,120,101,99,218,4,108,111, -- 97,100,41,5,114,71,0,0,0,114,158,0,0,0,218,4, -- 115,112,101,99,218,7,109,101,116,104,111,100,115,218,6,109, -- 111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, -- 108,101,95,115,104,105,109,71,2,0,0,115,14,0,0,0, -- 0,6,15,1,12,1,15,1,13,1,13,1,11,2,114,180, -- 0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,0, -- 19,0,0,0,67,0,0,0,115,243,1,0,0,105,0,0, -- 125,4,0,124,2,0,100,1,0,107,9,0,114,31,0,124, -- 2,0,124,4,0,100,2,0,60,110,6,0,100,3,0,125, -- 2,0,124,3,0,100,1,0,107,9,0,114,62,0,124,3, -- 0,124,4,0,100,4,0,60,110,0,0,124,0,0,100,1, -- 0,100,5,0,133,2,0,25,125,5,0,124,0,0,100,5, -- 0,100,6,0,133,2,0,25,125,6,0,124,0,0,100,6, -- 0,100,7,0,133,2,0,25,125,7,0,124,5,0,116,0, -- 0,107,3,0,114,168,0,100,8,0,106,1,0,124,2,0, -- 124,5,0,131,2,0,125,8,0,116,2,0,124,8,0,131, -- 1,0,1,116,3,0,124,8,0,124,4,0,141,1,0,130, -- 1,0,110,116,0,116,4,0,124,6,0,131,1,0,100,5, -- 0,107,3,0,114,226,0,100,9,0,106,1,0,124,2,0, -- 131,1,0,125,8,0,116,2,0,124,8,0,131,1,0,1, -- 116,5,0,124,8,0,131,1,0,130,1,0,110,58,0,116, -- 4,0,124,7,0,131,1,0,100,5,0,107,3,0,114,28, -- 1,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, -- 116,2,0,124,8,0,131,1,0,1,116,5,0,124,8,0, -- 131,1,0,130,1,0,110,0,0,124,1,0,100,1,0,107, -- 9,0,114,229,1,121,20,0,116,6,0,124,1,0,100,11, -- 0,25,131,1,0,125,9,0,87,110,18,0,4,116,7,0, -- 107,10,0,114,80,1,1,1,1,89,110,62,0,88,116,8, -- 0,124,6,0,131,1,0,124,9,0,107,3,0,114,142,1, -- 100,12,0,106,1,0,124,2,0,131,1,0,125,8,0,116, -- 2,0,124,8,0,131,1,0,1,116,3,0,124,8,0,124, -- 4,0,141,1,0,130,1,0,110,0,0,121,18,0,124,1, -- 0,100,13,0,25,100,14,0,64,125,10,0,87,110,18,0, -- 4,116,7,0,107,10,0,114,180,1,1,1,1,89,113,229, -- 1,88,116,8,0,124,7,0,131,1,0,124,10,0,107,3, -- 0,114,229,1,116,3,0,100,12,0,106,1,0,124,2,0, -- 131,1,0,124,4,0,141,1,0,130,1,0,113,229,1,110, -- 0,0,124,0,0,100,7,0,100,1,0,133,2,0,25,83, -- 41,15,97,122,1,0,0,86,97,108,105,100,97,116,101,32, -- 116,104,101,32,104,101,97,100,101,114,32,111,102,32,116,104, -- 101,32,112,97,115,115,101,100,45,105,110,32,98,121,116,101, -- 99,111,100,101,32,97,103,97,105,110,115,116,32,115,111,117, -- 114,99,101,95,115,116,97,116,115,32,40,105,102,10,32,32, -- 32,32,103,105,118,101,110,41,32,97,110,100,32,114,101,116, -- 117,114,110,105,110,103,32,116,104,101,32,98,121,116,101,99, -- 111,100,101,32,116,104,97,116,32,99,97,110,32,98,101,32, -- 99,111,109,112,105,108,101,100,32,98,121,32,99,111,109,112, -- 105,108,101,40,41,46,10,10,32,32,32,32,65,108,108,32, -- 111,116,104,101,114,32,97,114,103,117,109,101,110,116,115,32, -- 97,114,101,32,117,115,101,100,32,116,111,32,101,110,104,97, -- 110,99,101,32,101,114,114,111,114,32,114,101,112,111,114,116, -- 105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,116, -- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, -- 119,104,101,110,32,116,104,101,32,109,97,103,105,99,32,110, -- 117,109,98,101,114,32,105,115,32,105,110,99,111,114,114,101, -- 99,116,32,111,114,32,116,104,101,32,98,121,116,101,99,111, -- 100,101,32,105,115,10,32,32,32,32,102,111,117,110,100,32, -- 116,111,32,98,101,32,115,116,97,108,101,46,32,69,79,70, -- 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, -- 119,104,101,110,32,116,104,101,32,100,97,116,97,32,105,115, -- 32,102,111,117,110,100,32,116,111,32,98,101,10,32,32,32, -- 32,116,114,117,110,99,97,116,101,100,46,10,10,32,32,32, -- 32,78,114,67,0,0,0,122,10,60,98,121,116,101,99,111, -- 100,101,62,114,35,0,0,0,114,12,0,0,0,233,8,0, -- 0,0,233,12,0,0,0,122,30,98,97,100,32,109,97,103, -- 105,99,32,110,117,109,98,101,114,32,105,110,32,123,33,114, -- 125,58,32,123,33,114,125,122,43,114,101,97,99,104,101,100, -- 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, -- 110,103,32,116,105,109,101,115,116,97,109,112,32,105,110,32, -- 123,33,114,125,122,48,114,101,97,99,104,101,100,32,69,79, -- 70,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32, -- 115,105,122,101,32,111,102,32,115,111,117,114,99,101,32,105, -- 110,32,123,33,114,125,218,5,109,116,105,109,101,122,26,98, -- 121,116,101,99,111,100,101,32,105,115,32,115,116,97,108,101, -- 32,102,111,114,32,123,33,114,125,218,4,115,105,122,101,108, -- 3,0,0,0,255,127,255,127,3,0,41,9,218,12,77,65, -- 71,73,67,95,78,85,77,66,69,82,114,47,0,0,0,114, -- 152,0,0,0,114,153,0,0,0,114,31,0,0,0,218,8, -- 69,79,70,69,114,114,111,114,114,14,0,0,0,114,79,0, -- 0,0,114,19,0,0,0,41,11,114,53,0,0,0,218,12, -- 115,111,117,114,99,101,95,115,116,97,116,115,114,67,0,0, -- 0,114,35,0,0,0,90,11,101,120,99,95,100,101,116,97, -- 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, -- 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, -- 105,122,101,114,151,0,0,0,218,12,115,111,117,114,99,101, -- 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, -- 105,122,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, -- 116,101,99,111,100,101,95,104,101,97,100,101,114,87,2,0, -- 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, -- 12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1, -- 18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1, -- 15,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, -- 10,1,18,1,3,1,18,1,13,1,5,2,18,1,15,1, -- 15,1,114,190,0,0,0,99,4,0,0,0,0,0,0,0, -- 5,0,0,0,6,0,0,0,67,0,0,0,115,115,0,0, -- 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, -- 116,2,0,124,4,0,116,3,0,131,2,0,114,78,0,116, -- 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, -- 2,0,107,9,0,114,74,0,116,5,0,106,6,0,124,4, -- 0,124,3,0,131,2,0,1,110,0,0,124,4,0,83,116, -- 7,0,100,3,0,106,8,0,124,2,0,131,1,0,100,4, -- 0,124,1,0,100,5,0,124,2,0,131,1,2,130,1,0, -- 100,2,0,83,41,6,122,60,67,111,109,112,105,108,101,32, -- 98,121,116,101,99,111,100,101,32,97,115,32,114,101,116,117, -- 114,110,101,100,32,98,121,32,95,118,97,108,105,100,97,116, -- 101,95,98,121,116,101,99,111,100,101,95,104,101,97,100,101, -- 114,40,41,46,122,21,99,111,100,101,32,111,98,106,101,99, -- 116,32,102,114,111,109,32,123,33,114,125,78,122,23,78,111, -- 110,45,99,111,100,101,32,111,98,106,101,99,116,32,105,110, -- 32,123,33,114,125,114,67,0,0,0,114,35,0,0,0,41, -- 9,218,7,109,97,114,115,104,97,108,90,5,108,111,97,100, -- 115,218,10,105,115,105,110,115,116,97,110,99,101,218,10,95, -- 99,111,100,101,95,116,121,112,101,114,152,0,0,0,114,106, -- 0,0,0,90,16,95,102,105,120,95,99,111,95,102,105,108, -- 101,110,97,109,101,114,153,0,0,0,114,47,0,0,0,41, -- 5,114,53,0,0,0,114,67,0,0,0,114,140,0,0,0, -- 114,141,0,0,0,218,4,99,111,100,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,109, -- 112,105,108,101,95,98,121,116,101,99,111,100,101,142,2,0, -- 0,115,16,0,0,0,0,2,15,1,15,1,13,1,12,1, -- 19,1,4,2,18,1,114,195,0,0,0,114,84,0,0,0, -- 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, -- 0,67,0,0,0,115,76,0,0,0,116,0,0,116,1,0, -- 131,1,0,125,3,0,124,3,0,106,2,0,116,3,0,124, -- 1,0,131,1,0,131,1,0,1,124,3,0,106,2,0,116, -- 3,0,124,2,0,131,1,0,131,1,0,1,124,3,0,106, -- 2,0,116,4,0,106,5,0,124,0,0,131,1,0,131,1, -- 0,1,124,3,0,83,41,1,122,80,67,111,109,112,105,108, -- 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,32, -- 105,110,116,111,32,98,121,116,101,99,111,100,101,32,102,111, -- 114,32,119,114,105,116,105,110,103,32,111,117,116,32,116,111, -- 32,97,32,98,121,116,101,45,99,111,109,112,105,108,101,100, -- 10,32,32,32,32,102,105,108,101,46,41,6,218,9,98,121, -- 116,101,97,114,114,97,121,114,185,0,0,0,218,6,101,120, -- 116,101,110,100,114,17,0,0,0,114,191,0,0,0,90,5, -- 100,117,109,112,115,41,4,114,194,0,0,0,114,183,0,0, -- 0,114,189,0,0,0,114,53,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,100, -- 101,95,116,111,95,98,121,116,101,99,111,100,101,154,2,0, -- 0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,1, -- 114,198,0,0,0,99,1,0,0,0,0,0,0,0,5,0, -- 0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,100, -- 1,0,100,2,0,108,0,0,125,1,0,116,1,0,106,2, -- 0,124,0,0,131,1,0,106,3,0,125,2,0,124,1,0, -- 106,4,0,124,2,0,131,1,0,125,3,0,116,1,0,106, -- 5,0,100,2,0,100,3,0,131,2,0,125,4,0,124,4, -- 0,106,6,0,124,0,0,106,6,0,124,3,0,100,1,0, -- 25,131,1,0,131,1,0,83,41,4,122,121,68,101,99,111, -- 100,101,32,98,121,116,101,115,32,114,101,112,114,101,115,101, -- 110,116,105,110,103,32,115,111,117,114,99,101,32,99,111,100, -- 101,32,97,110,100,32,114,101,116,117,114,110,32,116,104,101, -- 32,115,116,114,105,110,103,46,10,10,32,32,32,32,85,110, -- 105,118,101,114,115,97,108,32,110,101,119,108,105,110,101,32, -- 115,117,112,112,111,114,116,32,105,115,32,117,115,101,100,32, -- 105,110,32,116,104,101,32,100,101,99,111,100,105,110,103,46, -- 10,32,32,32,32,114,84,0,0,0,78,84,41,7,218,8, -- 116,111,107,101,110,105,122,101,114,49,0,0,0,90,7,66, -- 121,116,101,115,73,79,90,8,114,101,97,100,108,105,110,101, -- 90,15,100,101,116,101,99,116,95,101,110,99,111,100,105,110, -- 103,90,25,73,110,99,114,101,109,101,110,116,97,108,78,101, -- 119,108,105,110,101,68,101,99,111,100,101,114,218,6,100,101, -- 99,111,100,101,41,5,218,12,115,111,117,114,99,101,95,98, -- 121,116,101,115,114,199,0,0,0,90,21,115,111,117,114,99, -- 101,95,98,121,116,101,115,95,114,101,97,100,108,105,110,101, -- 218,8,101,110,99,111,100,105,110,103,90,15,110,101,119,108, -- 105,110,101,95,100,101,99,111,100,101,114,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,111, -- 100,101,95,115,111,117,114,99,101,164,2,0,0,115,10,0, -- 0,0,0,5,12,1,18,1,15,1,18,1,114,203,0,0, -- 0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,0, -- 0,0,67,0,0,0,115,15,1,0,0,116,0,0,124,0, -- 0,100,1,0,100,0,0,131,3,0,125,1,0,116,1,0, -- 124,1,0,100,2,0,131,2,0,114,74,0,121,17,0,124, -- 1,0,106,2,0,124,0,0,131,1,0,83,87,113,74,0, -- 4,116,3,0,107,10,0,114,70,0,1,1,1,89,113,74, -- 0,88,110,0,0,121,13,0,124,0,0,106,4,0,125,2, -- 0,87,110,18,0,4,116,5,0,107,10,0,114,107,0,1, -- 1,1,89,110,29,0,88,124,2,0,100,0,0,107,9,0, -- 114,136,0,116,6,0,124,2,0,131,1,0,106,2,0,131, -- 0,0,83,121,13,0,124,0,0,106,7,0,125,3,0,87, -- 110,24,0,4,116,5,0,107,10,0,114,175,0,1,1,1, -- 100,3,0,125,3,0,89,110,1,0,88,121,13,0,124,0, -- 0,106,8,0,125,4,0,87,110,59,0,4,116,5,0,107, -- 10,0,114,250,0,1,1,1,124,1,0,100,0,0,107,8, -- 0,114,230,0,100,4,0,106,9,0,124,3,0,131,1,0, -- 83,100,5,0,106,9,0,124,3,0,124,1,0,131,2,0, -- 83,89,110,17,0,88,100,6,0,106,9,0,124,3,0,124, -- 4,0,131,2,0,83,100,0,0,83,41,7,78,218,10,95, -- 95,108,111,97,100,101,114,95,95,218,11,109,111,100,117,108, -- 101,95,114,101,112,114,250,1,63,122,13,60,109,111,100,117, -- 108,101,32,123,33,114,125,62,122,20,60,109,111,100,117,108, -- 101,32,123,33,114,125,32,40,123,33,114,125,41,62,122,23, -- 60,109,111,100,117,108,101,32,123,33,114,125,32,102,114,111, -- 109,32,123,33,114,125,62,41,10,114,62,0,0,0,114,60, -- 0,0,0,114,205,0,0,0,218,9,69,120,99,101,112,116, -- 105,111,110,218,8,95,95,115,112,101,99,95,95,218,14,65, -- 116,116,114,105,98,117,116,101,69,114,114,111,114,114,174,0, -- 0,0,114,57,0,0,0,218,8,95,95,102,105,108,101,95, -- 95,114,47,0,0,0,41,5,114,179,0,0,0,114,169,0, -- 0,0,114,177,0,0,0,114,67,0,0,0,114,131,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,12,95,109,111,100,117,108,101,95,114,101,112,114,178,2, -- 0,0,115,46,0,0,0,0,2,18,1,15,4,3,1,17, -- 1,13,1,8,1,3,1,13,1,13,1,5,2,12,1,16, -- 4,3,1,13,1,13,1,11,1,3,1,13,1,13,1,12, -- 1,13,2,21,2,114,211,0,0,0,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, -- 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, -- 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, -- 0,90,5,0,100,7,0,83,41,8,218,17,95,105,110,115, -- 116,97,108,108,101,100,95,115,97,102,101,108,121,99,2,0, -- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, -- 0,0,115,25,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,1,0,106,1,0,124,0,0,95,2,0,100,0,0,83, -- 41,1,78,41,3,218,7,95,109,111,100,117,108,101,114,208, -- 0,0,0,218,5,95,115,112,101,99,41,2,114,71,0,0, -- 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,72,0,0,0,216,2,0,0,115,4, -- 0,0,0,0,1,9,1,122,26,95,105,110,115,116,97,108, -- 108,101,100,95,115,97,102,101,108,121,46,95,95,105,110,105, -- 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, -- 3,0,0,0,67,0,0,0,115,38,0,0,0,100,1,0, -- 124,0,0,106,0,0,95,1,0,124,0,0,106,2,0,116, -- 3,0,106,4,0,124,0,0,106,0,0,106,5,0,60,100, -- 0,0,83,41,2,78,84,41,6,114,214,0,0,0,218,13, -- 95,105,110,105,116,105,97,108,105,122,105,110,103,114,213,0, -- 0,0,114,7,0,0,0,114,73,0,0,0,114,67,0,0, -- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,75,0,0,0,220,2,0,0, -- 115,4,0,0,0,0,4,12,1,122,27,95,105,110,115,116, -+ 12,0,0,0,67,0,0,0,115,164,0,0,0,116,0,0, -+ 124,0,0,131,1,0,100,1,0,107,2,0,114,22,0,100, -+ 2,0,83,124,0,0,106,1,0,100,3,0,131,1,0,92, -+ 3,0,125,1,0,125,2,0,125,3,0,124,1,0,12,115, -+ 81,0,124,3,0,106,2,0,131,0,0,100,7,0,100,8, -+ 0,133,2,0,25,100,6,0,107,3,0,114,85,0,124,0, -+ 0,83,121,16,0,116,3,0,124,0,0,131,1,0,125,4, -+ 0,87,110,40,0,4,116,4,0,116,5,0,102,2,0,107, -+ 10,0,114,143,0,1,1,1,124,0,0,100,2,0,100,9, -+ 0,133,2,0,25,125,4,0,89,110,1,0,88,116,6,0, -+ 124,4,0,131,1,0,114,160,0,124,4,0,83,124,0,0, -+ 83,41,10,122,188,67,111,110,118,101,114,116,32,97,32,98, -+ 121,116,101,99,111,100,101,32,102,105,108,101,32,112,97,116, -+ 104,32,116,111,32,97,32,115,111,117,114,99,101,32,112,97, -+ 116,104,32,40,105,102,32,112,111,115,115,105,98,108,101,41, -+ 46,10,10,32,32,32,32,84,104,105,115,32,102,117,110,99, -+ 116,105,111,110,32,101,120,105,115,116,115,32,112,117,114,101, -+ 108,121,32,102,111,114,32,98,97,99,107,119,97,114,100,115, -+ 45,99,111,109,112,97,116,105,98,105,108,105,116,121,32,102, -+ 111,114,10,32,32,32,32,80,121,73,109,112,111,114,116,95, -+ 69,120,101,99,67,111,100,101,77,111,100,117,108,101,87,105, -+ 116,104,70,105,108,101,110,97,109,101,115,40,41,32,105,110, -+ 32,116,104,101,32,67,32,65,80,73,46,10,10,32,32,32, -+ 32,114,85,0,0,0,78,114,117,0,0,0,233,3,0,0, -+ 0,114,30,0,0,0,90,2,112,121,233,253,255,255,255,233, -+ 255,255,255,255,114,139,0,0,0,41,7,114,32,0,0,0, -+ 114,33,0,0,0,218,5,108,111,119,101,114,114,136,0,0, -+ 0,114,125,0,0,0,114,134,0,0,0,114,45,0,0,0, -+ 41,5,218,13,98,121,116,101,99,111,100,101,95,112,97,116, -+ 104,90,4,114,101,115,116,114,37,0,0,0,90,9,101,120, -+ 116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95, -+ 112,97,116,104,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,15,95,103,101,116,95,115,111,117,114,99,101, -+ 102,105,108,101,231,1,0,0,115,20,0,0,0,0,7,18, -+ 1,4,1,24,1,35,1,4,1,3,1,16,1,19,1,21, -+ 1,114,143,0,0,0,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,0, -+ 121,19,0,116,0,0,124,0,0,131,1,0,106,1,0,125, -+ 1,0,87,110,24,0,4,116,2,0,107,10,0,114,45,0, -+ 1,1,1,100,1,0,125,1,0,89,110,1,0,88,124,1, -+ 0,100,2,0,79,125,1,0,124,1,0,83,41,3,122,51, -+ 67,97,108,99,117,108,97,116,101,32,116,104,101,32,109,111, -+ 100,101,32,112,101,114,109,105,115,115,105,111,110,115,32,102, -+ 111,114,32,97,32,98,121,116,101,99,111,100,101,32,102,105, -+ 108,101,46,105,182,1,0,0,233,128,0,0,0,41,3,114, -+ 40,0,0,0,114,42,0,0,0,114,41,0,0,0,41,2, -+ 114,36,0,0,0,114,43,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,10,95,99,97,108,99, -+ 95,109,111,100,101,250,1,0,0,115,12,0,0,0,0,2, -+ 3,1,19,1,13,1,11,3,10,1,114,145,0,0,0,218, -+ 9,118,101,114,98,111,115,105,116,121,114,30,0,0,0,99, -+ 1,0,0,0,1,0,0,0,3,0,0,0,4,0,0,0, -+ 71,0,0,0,115,81,0,0,0,116,0,0,106,1,0,106, -+ 2,0,124,1,0,107,5,0,114,77,0,124,0,0,106,3, -+ 0,100,6,0,131,1,0,115,46,0,100,3,0,124,0,0, -+ 23,125,0,0,110,0,0,116,4,0,124,0,0,106,5,0, -+ 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, -+ 1,1,1,110,0,0,100,5,0,83,41,7,122,61,80,114, -+ 105,110,116,32,116,104,101,32,109,101,115,115,97,103,101,32, -+ 116,111,32,115,116,100,101,114,114,32,105,102,32,45,118,47, -+ 80,89,84,72,79,78,86,69,82,66,79,83,69,32,105,115, -+ 32,116,117,114,110,101,100,32,111,110,46,250,1,35,250,7, -+ 105,109,112,111,114,116,32,122,2,35,32,114,55,0,0,0, -+ 78,41,2,114,147,0,0,0,114,148,0,0,0,41,7,114, -+ 8,0,0,0,114,118,0,0,0,218,7,118,101,114,98,111, -+ 115,101,114,10,0,0,0,218,5,112,114,105,110,116,114,48, -+ 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, -+ 101,115,115,97,103,101,114,146,0,0,0,114,81,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, -+ 101,6,2,0,0,115,8,0,0,0,0,2,18,1,15,1, -+ 13,1,114,153,0,0,0,99,1,0,0,0,0,0,0,0, -+ 2,0,0,0,4,0,0,0,3,0,0,0,115,38,0,0, -+ 0,100,1,0,135,0,0,102,1,0,100,2,0,100,3,0, -+ 134,1,0,125,1,0,116,0,0,124,1,0,136,0,0,131, -+ 2,0,1,124,1,0,83,41,4,122,252,68,101,99,111,114, -+ 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, -+ 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, -+ 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, -+ 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, -+ 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, -+ 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, -+ 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, -+ 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, -+ 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, -+ 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, -+ 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, -+ 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, -+ 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, -+ 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, -+ 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, -+ 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, -+ 0,4,0,0,0,5,0,0,0,31,0,0,0,115,83,0, -+ 0,0,124,1,0,100,0,0,107,8,0,114,24,0,124,0, -+ 0,106,0,0,125,1,0,110,40,0,124,0,0,106,0,0, -+ 124,1,0,107,3,0,114,64,0,116,1,0,100,1,0,124, -+ 1,0,22,100,2,0,124,1,0,131,1,1,130,1,0,110, -+ 0,0,136,0,0,124,0,0,124,1,0,124,2,0,124,3, -+ 0,142,2,0,83,41,3,78,122,23,108,111,97,100,101,114, -+ 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,37, -+ 115,114,68,0,0,0,41,2,114,68,0,0,0,218,11,73, -+ 109,112,111,114,116,69,114,114,111,114,41,4,114,72,0,0, -+ 0,114,68,0,0,0,114,81,0,0,0,114,109,0,0,0, -+ 41,1,218,6,109,101,116,104,111,100,114,5,0,0,0,114, -+ 6,0,0,0,218,19,95,99,104,101,99,107,95,110,97,109, -+ 101,95,119,114,97,112,112,101,114,22,2,0,0,115,10,0, -+ 0,0,0,1,12,1,12,1,15,1,25,1,122,40,95,99, -+ 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, -+ 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, -+ 114,97,112,112,101,114,41,1,114,66,0,0,0,41,2,114, -+ 155,0,0,0,114,156,0,0,0,114,5,0,0,0,41,1, -+ 114,155,0,0,0,114,6,0,0,0,218,11,95,99,104,101, -+ 99,107,95,110,97,109,101,14,2,0,0,115,6,0,0,0, -+ 0,8,21,6,13,1,114,157,0,0,0,99,1,0,0,0, -+ 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0, -+ 115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,2, -+ 0,134,0,0,125,1,0,116,0,0,124,1,0,136,0,0, -+ 131,2,0,1,124,1,0,83,41,3,122,49,68,101,99,111, -+ 114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,32, -+ 116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,101, -+ 32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,19,0, -+ 0,0,115,58,0,0,0,124,1,0,116,0,0,106,1,0, -+ 107,7,0,114,45,0,116,2,0,100,1,0,106,3,0,124, -+ 1,0,131,1,0,100,2,0,124,1,0,131,1,1,130,1, -+ 0,110,0,0,136,0,0,124,0,0,124,1,0,131,2,0, -+ 83,41,3,78,122,29,123,33,114,125,32,105,115,32,110,111, -+ 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, -+ 117,108,101,114,68,0,0,0,41,4,114,8,0,0,0,218, -+ 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, -+ 110,97,109,101,115,114,154,0,0,0,114,48,0,0,0,41, -+ 2,114,72,0,0,0,218,8,102,117,108,108,110,97,109,101, -+ 41,1,218,3,102,120,110,114,5,0,0,0,114,6,0,0, -+ 0,218,25,95,114,101,113,117,105,114,101,115,95,98,117,105, -+ 108,116,105,110,95,119,114,97,112,112,101,114,34,2,0,0, -+ 115,8,0,0,0,0,1,15,1,18,1,12,1,122,52,95, -+ 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, -+ 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, -+ 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, -+ 112,101,114,41,1,114,66,0,0,0,41,2,114,160,0,0, -+ 0,114,161,0,0,0,114,5,0,0,0,41,1,114,160,0, -+ 0,0,114,6,0,0,0,218,17,95,114,101,113,117,105,114, -+ 101,115,95,98,117,105,108,116,105,110,32,2,0,0,115,6, -+ 0,0,0,0,2,18,5,13,1,114,162,0,0,0,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, -+ 0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,1, -+ 0,100,2,0,134,0,0,125,1,0,116,0,0,124,1,0, -+ 136,0,0,131,2,0,1,124,1,0,83,41,3,122,47,68, -+ 101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105, -+ 102,121,32,116,104,101,32,110,97,109,101,100,32,109,111,100, -+ 117,108,101,32,105,115,32,102,114,111,122,101,110,46,99,2, -+ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,19, -+ 0,0,0,115,58,0,0,0,116,0,0,106,1,0,124,1, -+ 0,131,1,0,115,45,0,116,2,0,100,1,0,106,3,0, -+ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, -+ 1,0,110,0,0,136,0,0,124,0,0,124,1,0,131,2, -+ 0,83,41,3,78,122,27,123,33,114,125,32,105,115,32,110, -+ 111,116,32,97,32,102,114,111,122,101,110,32,109,111,100,117, -+ 108,101,114,68,0,0,0,41,4,114,107,0,0,0,218,9, -+ 105,115,95,102,114,111,122,101,110,114,154,0,0,0,114,48, -+ 0,0,0,41,2,114,72,0,0,0,114,159,0,0,0,41, -+ 1,114,160,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,24,95,114,101,113,117,105,114,101,115,95,102,114,111,122, -+ 101,110,95,119,114,97,112,112,101,114,45,2,0,0,115,8, -+ 0,0,0,0,1,15,1,18,1,12,1,122,50,95,114,101, -+ 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, -+ 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, -+ 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,41, -+ 1,114,66,0,0,0,41,2,114,160,0,0,0,114,164,0, -+ 0,0,114,5,0,0,0,41,1,114,160,0,0,0,114,6, -+ 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, -+ 114,111,122,101,110,43,2,0,0,115,6,0,0,0,0,2, -+ 18,5,13,1,114,165,0,0,0,99,2,0,0,0,0,0, -+ 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,87, -+ 0,0,0,124,0,0,106,0,0,124,1,0,131,1,0,92, -+ 2,0,125,2,0,125,3,0,124,2,0,100,1,0,107,8, -+ 0,114,83,0,116,1,0,124,3,0,131,1,0,114,83,0, -+ 100,2,0,125,4,0,116,2,0,106,3,0,124,4,0,106, -+ 4,0,124,3,0,100,3,0,25,131,1,0,116,5,0,131, -+ 2,0,1,110,0,0,124,2,0,83,41,4,122,155,84,114, -+ 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100, -+ 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105, -+ 102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100, -+ 101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32, -+ 32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101, -+ 114,40,41,46,10,10,32,32,32,32,84,104,105,115,32,109, -+ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, -+ 116,101,100,32,105,110,32,102,97,118,111,114,32,111,102,32, -+ 102,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, -+ 40,41,46,10,10,32,32,32,32,78,122,44,78,111,116,32, -+ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116, -+ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32, -+ 95,95,105,110,105,116,95,95,114,85,0,0,0,41,6,218, -+ 11,102,105,110,100,95,108,111,97,100,101,114,114,32,0,0, -+ 0,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, -+ 114,110,114,48,0,0,0,218,13,73,109,112,111,114,116,87, -+ 97,114,110,105,110,103,41,5,114,72,0,0,0,114,159,0, -+ 0,0,218,6,108,111,97,100,101,114,218,8,112,111,114,116, -+ 105,111,110,115,218,3,109,115,103,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, -+ 109,111,100,117,108,101,95,115,104,105,109,54,2,0,0,115, -+ 10,0,0,0,0,10,21,1,24,1,6,1,32,1,114,173, -+ 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, -+ 3,0,0,0,67,0,0,0,115,93,0,0,0,116,0,0, -+ 124,1,0,124,0,0,131,2,0,125,2,0,116,1,0,124, -+ 2,0,131,1,0,125,3,0,124,1,0,116,2,0,106,3, -+ 0,107,6,0,114,79,0,116,2,0,106,3,0,124,1,0, -+ 25,125,4,0,124,3,0,106,4,0,124,4,0,131,1,0, -+ 1,116,2,0,106,3,0,124,1,0,25,83,124,3,0,106, -+ 5,0,131,0,0,83,100,1,0,83,41,2,122,128,76,111, -+ 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, -+ 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, -+ 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, -+ 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, -+ 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, -+ 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, -+ 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41, -+ 6,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, -+ 100,101,114,218,12,95,83,112,101,99,77,101,116,104,111,100, -+ 115,114,8,0,0,0,114,74,0,0,0,218,4,101,120,101, -+ 99,218,4,108,111,97,100,41,5,114,72,0,0,0,114,159, -+ 0,0,0,218,4,115,112,101,99,218,7,109,101,116,104,111, -+ 100,115,218,6,109,111,100,117,108,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,108,111,97,100, -+ 95,109,111,100,117,108,101,95,115,104,105,109,71,2,0,0, -+ 115,14,0,0,0,0,6,15,1,12,1,15,1,13,1,13, -+ 1,11,2,114,181,0,0,0,99,4,0,0,0,0,0,0, -+ 0,11,0,0,0,19,0,0,0,67,0,0,0,115,243,1, -+ 0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,9, -+ 0,114,31,0,124,2,0,124,4,0,100,2,0,60,110,6, -+ 0,100,3,0,125,2,0,124,3,0,100,1,0,107,9,0, -+ 114,62,0,124,3,0,124,4,0,100,4,0,60,110,0,0, -+ 124,0,0,100,1,0,100,5,0,133,2,0,25,125,5,0, -+ 124,0,0,100,5,0,100,6,0,133,2,0,25,125,6,0, -+ 124,0,0,100,6,0,100,7,0,133,2,0,25,125,7,0, -+ 124,5,0,116,0,0,107,3,0,114,168,0,100,8,0,106, -+ 1,0,124,2,0,124,5,0,131,2,0,125,8,0,116,2, -+ 0,124,8,0,131,1,0,1,116,3,0,124,8,0,124,4, -+ 0,141,1,0,130,1,0,110,116,0,116,4,0,124,6,0, -+ 131,1,0,100,5,0,107,3,0,114,226,0,100,9,0,106, -+ 1,0,124,2,0,131,1,0,125,8,0,116,2,0,124,8, -+ 0,131,1,0,1,116,5,0,124,8,0,131,1,0,130,1, -+ 0,110,58,0,116,4,0,124,7,0,131,1,0,100,5,0, -+ 107,3,0,114,28,1,100,10,0,106,1,0,124,2,0,131, -+ 1,0,125,8,0,116,2,0,124,8,0,131,1,0,1,116, -+ 5,0,124,8,0,131,1,0,130,1,0,110,0,0,124,1, -+ 0,100,1,0,107,9,0,114,229,1,121,20,0,116,6,0, -+ 124,1,0,100,11,0,25,131,1,0,125,9,0,87,110,18, -+ 0,4,116,7,0,107,10,0,114,80,1,1,1,1,89,110, -+ 62,0,88,116,8,0,124,6,0,131,1,0,124,9,0,107, -+ 3,0,114,142,1,100,12,0,106,1,0,124,2,0,131,1, -+ 0,125,8,0,116,2,0,124,8,0,131,1,0,1,116,3, -+ 0,124,8,0,124,4,0,141,1,0,130,1,0,110,0,0, -+ 121,18,0,124,1,0,100,13,0,25,100,14,0,64,125,10, -+ 0,87,110,18,0,4,116,7,0,107,10,0,114,180,1,1, -+ 1,1,89,113,229,1,88,116,8,0,124,7,0,131,1,0, -+ 124,10,0,107,3,0,114,229,1,116,3,0,100,12,0,106, -+ 1,0,124,2,0,131,1,0,124,4,0,141,1,0,130,1, -+ 0,113,229,1,110,0,0,124,0,0,100,7,0,100,1,0, -+ 133,2,0,25,83,41,15,97,122,1,0,0,86,97,108,105, -+ 100,97,116,101,32,116,104,101,32,104,101,97,100,101,114,32, -+ 111,102,32,116,104,101,32,112,97,115,115,101,100,45,105,110, -+ 32,98,121,116,101,99,111,100,101,32,97,103,97,105,110,115, -+ 116,32,115,111,117,114,99,101,95,115,116,97,116,115,32,40, -+ 105,102,10,32,32,32,32,103,105,118,101,110,41,32,97,110, -+ 100,32,114,101,116,117,114,110,105,110,103,32,116,104,101,32, -+ 98,121,116,101,99,111,100,101,32,116,104,97,116,32,99,97, -+ 110,32,98,101,32,99,111,109,112,105,108,101,100,32,98,121, -+ 32,99,111,109,112,105,108,101,40,41,46,10,10,32,32,32, -+ 32,65,108,108,32,111,116,104,101,114,32,97,114,103,117,109, -+ 101,110,116,115,32,97,114,101,32,117,115,101,100,32,116,111, -+ 32,101,110,104,97,110,99,101,32,101,114,114,111,114,32,114, -+ 101,112,111,114,116,105,110,103,46,10,10,32,32,32,32,73, -+ 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, -+ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97, -+ 103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110, -+ 99,111,114,114,101,99,116,32,111,114,32,116,104,101,32,98, -+ 121,116,101,99,111,100,101,32,105,115,10,32,32,32,32,102, -+ 111,117,110,100,32,116,111,32,98,101,32,115,116,97,108,101, -+ 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, -+ 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, -+ 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, -+ 101,10,32,32,32,32,116,114,117,110,99,97,116,101,100,46, -+ 10,10,32,32,32,32,78,114,68,0,0,0,122,10,60,98, -+ 121,116,101,99,111,100,101,62,114,36,0,0,0,114,13,0, -+ 0,0,233,8,0,0,0,233,12,0,0,0,122,30,98,97, -+ 100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105, -+ 110,32,123,33,114,125,58,32,123,33,114,125,122,43,114,101, -+ 97,99,104,101,100,32,69,79,70,32,119,104,105,108,101,32, -+ 114,101,97,100,105,110,103,32,116,105,109,101,115,116,97,109, -+ 112,32,105,110,32,123,33,114,125,122,48,114,101,97,99,104, -+ 101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97, -+ 100,105,110,103,32,115,105,122,101,32,111,102,32,115,111,117, -+ 114,99,101,32,105,110,32,123,33,114,125,218,5,109,116,105, -+ 109,101,122,26,98,121,116,101,99,111,100,101,32,105,115,32, -+ 115,116,97,108,101,32,102,111,114,32,123,33,114,125,218,4, -+ 115,105,122,101,108,3,0,0,0,255,127,255,127,3,0,41, -+ 9,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, -+ 48,0,0,0,114,153,0,0,0,114,154,0,0,0,114,32, -+ 0,0,0,218,8,69,79,70,69,114,114,111,114,114,15,0, -+ 0,0,114,80,0,0,0,114,20,0,0,0,41,11,114,54, -+ 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, -+ 115,114,68,0,0,0,114,36,0,0,0,90,11,101,120,99, -+ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90, -+ 13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8, -+ 114,97,119,95,115,105,122,101,114,152,0,0,0,218,12,115, -+ 111,117,114,99,101,95,109,116,105,109,101,218,11,115,111,117, -+ 114,99,101,95,115,105,122,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,25,95,118,97,108,105,100,97, -+ 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, -+ 101,114,87,2,0,0,115,76,0,0,0,0,11,6,1,12, -+ 1,13,3,6,1,12,1,13,1,16,1,16,1,16,1,12, -+ 1,18,1,10,1,18,1,18,1,15,1,10,1,15,1,18, -+ 1,15,1,10,1,15,1,12,1,3,1,20,1,13,1,5, -+ 2,18,1,15,1,10,1,18,1,3,1,18,1,13,1,5, -+ 2,18,1,15,1,15,1,114,191,0,0,0,99,4,0,0, -+ 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, -+ 0,115,115,0,0,0,116,0,0,106,1,0,124,0,0,131, -+ 1,0,125,4,0,116,2,0,124,4,0,116,3,0,131,2, -+ 0,114,78,0,116,4,0,100,1,0,124,2,0,131,2,0, -+ 1,124,3,0,100,2,0,107,9,0,114,74,0,116,5,0, -+ 106,6,0,124,4,0,124,3,0,131,2,0,1,110,0,0, -+ 124,4,0,83,116,7,0,100,3,0,106,8,0,124,2,0, -+ 131,1,0,100,4,0,124,1,0,100,5,0,124,2,0,131, -+ 1,2,130,1,0,100,2,0,83,41,6,122,60,67,111,109, -+ 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, -+ 32,114,101,116,117,114,110,101,100,32,98,121,32,95,118,97, -+ 108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,95, -+ 104,101,97,100,101,114,40,41,46,122,21,99,111,100,101,32, -+ 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, -+ 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, -+ 99,116,32,105,110,32,123,33,114,125,114,68,0,0,0,114, -+ 36,0,0,0,41,9,218,7,109,97,114,115,104,97,108,90, -+ 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, -+ 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,153, -+ 0,0,0,114,107,0,0,0,90,16,95,102,105,120,95,99, -+ 111,95,102,105,108,101,110,97,109,101,114,154,0,0,0,114, -+ 48,0,0,0,41,5,114,54,0,0,0,114,68,0,0,0, -+ 114,141,0,0,0,114,142,0,0,0,218,4,99,111,100,101, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, -+ 100,101,142,2,0,0,115,16,0,0,0,0,2,15,1,15, -+ 1,13,1,12,1,19,1,4,2,18,1,114,196,0,0,0, -+ 114,85,0,0,0,99,3,0,0,0,0,0,0,0,4,0, -+ 0,0,3,0,0,0,67,0,0,0,115,76,0,0,0,116, -+ 0,0,116,1,0,131,1,0,125,3,0,124,3,0,106,2, -+ 0,116,3,0,124,1,0,131,1,0,131,1,0,1,124,3, -+ 0,106,2,0,116,3,0,124,2,0,131,1,0,131,1,0, -+ 1,124,3,0,106,2,0,116,4,0,106,5,0,124,0,0, -+ 131,1,0,131,1,0,1,124,3,0,83,41,1,122,80,67, -+ 111,109,112,105,108,101,32,97,32,99,111,100,101,32,111,98, -+ 106,101,99,116,32,105,110,116,111,32,98,121,116,101,99,111, -+ 100,101,32,102,111,114,32,119,114,105,116,105,110,103,32,111, -+ 117,116,32,116,111,32,97,32,98,121,116,101,45,99,111,109, -+ 112,105,108,101,100,10,32,32,32,32,102,105,108,101,46,41, -+ 6,218,9,98,121,116,101,97,114,114,97,121,114,186,0,0, -+ 0,218,6,101,120,116,101,110,100,114,18,0,0,0,114,192, -+ 0,0,0,90,5,100,117,109,112,115,41,4,114,195,0,0, -+ 0,114,184,0,0,0,114,190,0,0,0,114,54,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 17,95,99,111,100,101,95,116,111,95,98,121,116,101,99,111, -+ 100,101,154,2,0,0,115,10,0,0,0,0,3,12,1,19, -+ 1,19,1,22,1,114,199,0,0,0,99,1,0,0,0,0, -+ 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, -+ 89,0,0,0,100,1,0,100,2,0,108,0,0,125,1,0, -+ 116,1,0,106,2,0,124,0,0,131,1,0,106,3,0,125, -+ 2,0,124,1,0,106,4,0,124,2,0,131,1,0,125,3, -+ 0,116,1,0,106,5,0,100,2,0,100,3,0,131,2,0, -+ 125,4,0,124,4,0,106,6,0,124,0,0,106,6,0,124, -+ 3,0,100,1,0,25,131,1,0,131,1,0,83,41,4,122, -+ 121,68,101,99,111,100,101,32,98,121,116,101,115,32,114,101, -+ 112,114,101,115,101,110,116,105,110,103,32,115,111,117,114,99, -+ 101,32,99,111,100,101,32,97,110,100,32,114,101,116,117,114, -+ 110,32,116,104,101,32,115,116,114,105,110,103,46,10,10,32, -+ 32,32,32,85,110,105,118,101,114,115,97,108,32,110,101,119, -+ 108,105,110,101,32,115,117,112,112,111,114,116,32,105,115,32, -+ 117,115,101,100,32,105,110,32,116,104,101,32,100,101,99,111, -+ 100,105,110,103,46,10,32,32,32,32,114,85,0,0,0,78, -+ 84,41,7,218,8,116,111,107,101,110,105,122,101,114,50,0, -+ 0,0,90,7,66,121,116,101,115,73,79,90,8,114,101,97, -+ 100,108,105,110,101,90,15,100,101,116,101,99,116,95,101,110, -+ 99,111,100,105,110,103,90,25,73,110,99,114,101,109,101,110, -+ 116,97,108,78,101,119,108,105,110,101,68,101,99,111,100,101, -+ 114,218,6,100,101,99,111,100,101,41,5,218,12,115,111,117, -+ 114,99,101,95,98,121,116,101,115,114,200,0,0,0,90,21, -+ 115,111,117,114,99,101,95,98,121,116,101,115,95,114,101,97, -+ 100,108,105,110,101,218,8,101,110,99,111,100,105,110,103,90, -+ 15,110,101,119,108,105,110,101,95,100,101,99,111,100,101,114, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 13,100,101,99,111,100,101,95,115,111,117,114,99,101,164,2, -+ 0,0,115,10,0,0,0,0,5,12,1,18,1,15,1,18, -+ 1,114,204,0,0,0,99,1,0,0,0,0,0,0,0,5, -+ 0,0,0,35,0,0,0,67,0,0,0,115,15,1,0,0, -+ 116,0,0,124,0,0,100,1,0,100,0,0,131,3,0,125, -+ 1,0,116,1,0,124,1,0,100,2,0,131,2,0,114,74, -+ 0,121,17,0,124,1,0,106,2,0,124,0,0,131,1,0, -+ 83,87,113,74,0,4,116,3,0,107,10,0,114,70,0,1, -+ 1,1,89,113,74,0,88,110,0,0,121,13,0,124,0,0, -+ 106,4,0,125,2,0,87,110,18,0,4,116,5,0,107,10, -+ 0,114,107,0,1,1,1,89,110,29,0,88,124,2,0,100, -+ 0,0,107,9,0,114,136,0,116,6,0,124,2,0,131,1, -+ 0,106,2,0,131,0,0,83,121,13,0,124,0,0,106,7, -+ 0,125,3,0,87,110,24,0,4,116,5,0,107,10,0,114, -+ 175,0,1,1,1,100,3,0,125,3,0,89,110,1,0,88, -+ 121,13,0,124,0,0,106,8,0,125,4,0,87,110,59,0, -+ 4,116,5,0,107,10,0,114,250,0,1,1,1,124,1,0, -+ 100,0,0,107,8,0,114,230,0,100,4,0,106,9,0,124, -+ 3,0,131,1,0,83,100,5,0,106,9,0,124,3,0,124, -+ 1,0,131,2,0,83,89,110,17,0,88,100,6,0,106,9, -+ 0,124,3,0,124,4,0,131,2,0,83,100,0,0,83,41, -+ 7,78,218,10,95,95,108,111,97,100,101,114,95,95,218,11, -+ 109,111,100,117,108,101,95,114,101,112,114,250,1,63,122,13, -+ 60,109,111,100,117,108,101,32,123,33,114,125,62,122,20,60, -+ 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114, -+ 125,41,62,122,23,60,109,111,100,117,108,101,32,123,33,114, -+ 125,32,102,114,111,109,32,123,33,114,125,62,41,10,114,63, -+ 0,0,0,114,61,0,0,0,114,206,0,0,0,218,9,69, -+ 120,99,101,112,116,105,111,110,218,8,95,95,115,112,101,99, -+ 95,95,218,14,65,116,116,114,105,98,117,116,101,69,114,114, -+ 111,114,114,175,0,0,0,114,58,0,0,0,218,8,95,95, -+ 102,105,108,101,95,95,114,48,0,0,0,41,5,114,180,0, -+ 0,0,114,170,0,0,0,114,178,0,0,0,114,68,0,0, -+ 0,114,132,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,12,95,109,111,100,117,108,101,95,114, -+ 101,112,114,178,2,0,0,115,46,0,0,0,0,2,18,1, -+ 15,4,3,1,17,1,13,1,8,1,3,1,13,1,13,1, -+ 5,2,12,1,16,4,3,1,13,1,13,1,11,1,3,1, -+ 13,1,13,1,12,1,13,2,21,2,114,212,0,0,0,99, -+ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, -+ 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, -+ 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, -+ 100,6,0,132,0,0,90,5,0,100,7,0,83,41,8,218, -+ 17,95,105,110,115,116,97,108,108,101,100,95,115,97,102,101, -+ 108,121,99,2,0,0,0,0,0,0,0,2,0,0,0,2, -+ 0,0,0,67,0,0,0,115,25,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,1,0,106,1,0,124,0,0,95,2, -+ 0,100,0,0,83,41,1,78,41,3,218,7,95,109,111,100, -+ 117,108,101,114,209,0,0,0,218,5,95,115,112,101,99,41, -+ 2,114,72,0,0,0,114,180,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,73,0,0,0,216, -+ 2,0,0,115,4,0,0,0,0,1,9,1,122,26,95,105, -+ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, -+ 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, -+ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,38,0, -+ 0,0,100,1,0,124,0,0,106,0,0,95,1,0,124,0, -+ 0,106,2,0,116,3,0,106,4,0,124,0,0,106,0,0, -+ 106,5,0,60,100,0,0,83,41,2,78,84,41,6,114,215, -+ 0,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, -+ 110,103,114,214,0,0,0,114,8,0,0,0,114,74,0,0, -+ 0,114,68,0,0,0,41,1,114,72,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,76,0,0, -+ 0,220,2,0,0,115,4,0,0,0,0,4,12,1,122,27, -+ 95,105,110,115,116,97,108,108,101,100,95,115,97,102,101,108, -+ 121,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, -+ 0,0,0,0,3,0,0,0,17,0,0,0,71,0,0,0, -+ 115,121,0,0,0,122,101,0,124,0,0,106,0,0,125,2, -+ 0,116,1,0,100,1,0,100,2,0,132,0,0,124,1,0, -+ 68,131,1,0,131,1,0,114,78,0,121,17,0,116,2,0, -+ 106,3,0,124,2,0,106,4,0,61,87,113,100,0,4,116, -+ 5,0,107,10,0,114,74,0,1,1,1,89,113,100,0,88, -+ 110,22,0,116,6,0,100,3,0,124,2,0,106,4,0,124, -+ 2,0,106,7,0,131,3,0,1,87,100,0,0,100,4,0, -+ 124,0,0,106,0,0,95,8,0,88,100,0,0,83,41,5, -+ 78,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, -+ 0,0,115,0,0,0,115,27,0,0,0,124,0,0,93,17, -+ 0,125,1,0,124,1,0,100,0,0,107,9,0,86,1,113, -+ 3,0,100,0,0,83,41,1,78,114,5,0,0,0,41,2, -+ 114,23,0,0,0,114,77,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,78,0,0,0,230,2, -+ 0,0,115,2,0,0,0,6,0,122,45,95,105,110,115,116, - 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, -- 110,116,101,114,95,95,99,1,0,0,0,0,0,0,0,3, -- 0,0,0,17,0,0,0,71,0,0,0,115,121,0,0,0, -- 122,101,0,124,0,0,106,0,0,125,2,0,116,1,0,100, -- 1,0,100,2,0,132,0,0,124,1,0,68,131,1,0,131, -- 1,0,114,78,0,121,17,0,116,2,0,106,3,0,124,2, -- 0,106,4,0,61,87,113,100,0,4,116,5,0,107,10,0, -- 114,74,0,1,1,1,89,113,100,0,88,110,22,0,116,6, -- 0,100,3,0,124,2,0,106,4,0,124,2,0,106,7,0, -- 131,3,0,1,87,100,0,0,100,4,0,124,0,0,106,0, -- 0,95,8,0,88,100,0,0,83,41,5,78,99,1,0,0, -- 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, -- 0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124, -- 1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,0, -- 83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0, -- 114,76,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,77,0,0,0,230,2,0,0,115,2,0, -- 0,0,6,0,122,45,95,105,110,115,116,97,108,108,101,100, -- 95,115,97,102,101,108,121,46,95,95,101,120,105,116,95,95, -- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, -- 112,114,62,122,18,105,109,112,111,114,116,32,123,33,114,125, -- 32,35,32,123,33,114,125,70,41,9,114,214,0,0,0,114, -- 78,0,0,0,114,7,0,0,0,114,73,0,0,0,114,67, -- 0,0,0,114,79,0,0,0,114,152,0,0,0,114,169,0, -- 0,0,114,215,0,0,0,41,3,114,71,0,0,0,114,80, -- 0,0,0,114,177,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,81,0,0,0,227,2,0,0, -- 115,18,0,0,0,0,1,3,1,9,1,25,1,3,1,17, -- 1,13,1,8,2,26,2,122,26,95,105,110,115,116,97,108, -- 108,101,100,95,115,97,102,101,108,121,46,95,95,101,120,105, -- 116,95,95,78,41,6,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,72,0,0,0,114,75,0,0,0,114, -- 81,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,212,0,0,0,214,2,0, -- 0,115,6,0,0,0,12,2,12,4,12,7,114,212,0,0, -- 0,99,0,0,0,0,0,0,0,0,0,0,0,0,8,0, -- 0,0,64,0,0,0,115,172,0,0,0,101,0,0,90,1, -- 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, -- 100,3,0,100,4,0,100,3,0,100,5,0,100,3,0,100, -- 6,0,100,7,0,132,0,3,90,4,0,100,8,0,100,9, -- 0,132,0,0,90,5,0,100,10,0,100,11,0,132,0,0, -- 90,6,0,101,7,0,100,12,0,100,13,0,132,0,0,131, -- 1,0,90,8,0,101,8,0,106,9,0,100,14,0,100,13, -- 0,132,0,0,131,1,0,90,8,0,101,7,0,100,15,0, -- 100,16,0,132,0,0,131,1,0,90,10,0,101,7,0,100, -- 17,0,100,18,0,132,0,0,131,1,0,90,11,0,101,11, -- 0,106,9,0,100,19,0,100,18,0,132,0,0,131,1,0, -- 90,11,0,100,3,0,83,41,20,218,10,77,111,100,117,108, -- 101,83,112,101,99,97,208,5,0,0,84,104,101,32,115,112, -- 101,99,105,102,105,99,97,116,105,111,110,32,102,111,114,32, -- 97,32,109,111,100,117,108,101,44,32,117,115,101,100,32,102, -- 111,114,32,108,111,97,100,105,110,103,46,10,10,32,32,32, -- 32,65,32,109,111,100,117,108,101,39,115,32,115,112,101,99, -- 32,105,115,32,116,104,101,32,115,111,117,114,99,101,32,102, -- 111,114,32,105,110,102,111,114,109,97,116,105,111,110,32,97, -- 98,111,117,116,32,116,104,101,32,109,111,100,117,108,101,46, -- 32,32,70,111,114,10,32,32,32,32,100,97,116,97,32,97, -- 115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,116, -- 104,101,32,109,111,100,117,108,101,44,32,105,110,99,108,117, -- 100,105,110,103,32,115,111,117,114,99,101,44,32,117,115,101, -- 32,116,104,101,32,115,112,101,99,39,115,10,32,32,32,32, -- 108,111,97,100,101,114,46,10,10,32,32,32,32,96,110,97, -- 109,101,96,32,105,115,32,116,104,101,32,97,98,115,111,108, -- 117,116,101,32,110,97,109,101,32,111,102,32,116,104,101,32, -- 109,111,100,117,108,101,46,32,32,96,108,111,97,100,101,114, -- 96,32,105,115,32,116,104,101,32,108,111,97,100,101,114,10, -- 32,32,32,32,116,111,32,117,115,101,32,119,104,101,110,32, -- 108,111,97,100,105,110,103,32,116,104,101,32,109,111,100,117, -- 108,101,46,32,32,96,112,97,114,101,110,116,96,32,105,115, -- 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, -- 10,32,32,32,32,112,97,99,107,97,103,101,32,116,104,101, -- 32,109,111,100,117,108,101,32,105,115,32,105,110,46,32,32, -- 84,104,101,32,112,97,114,101,110,116,32,105,115,32,100,101, -- 114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,110, -- 97,109,101,46,10,10,32,32,32,32,96,105,115,95,112,97, -- 99,107,97,103,101,96,32,100,101,116,101,114,109,105,110,101, -- 115,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32, -- 105,115,32,99,111,110,115,105,100,101,114,101,100,32,97,32, -- 112,97,99,107,97,103,101,32,111,114,10,32,32,32,32,110, -- 111,116,46,32,32,79,110,32,109,111,100,117,108,101,115,32, -- 116,104,105,115,32,105,115,32,114,101,102,108,101,99,116,101, -- 100,32,98,121,32,116,104,101,32,96,95,95,112,97,116,104, -- 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, -- 32,32,32,32,96,111,114,105,103,105,110,96,32,105,115,32, -- 116,104,101,32,115,112,101,99,105,102,105,99,32,108,111,99, -- 97,116,105,111,110,32,117,115,101,100,32,98,121,32,116,104, -- 101,32,108,111,97,100,101,114,32,102,114,111,109,32,119,104, -- 105,99,104,32,116,111,10,32,32,32,32,108,111,97,100,32, -- 116,104,101,32,109,111,100,117,108,101,44,32,105,102,32,116, -- 104,97,116,32,105,110,102,111,114,109,97,116,105,111,110,32, -- 105,115,32,97,118,97,105,108,97,98,108,101,46,32,32,87, -- 104,101,110,32,102,105,108,101,110,97,109,101,32,105,115,10, -- 32,32,32,32,115,101,116,44,32,111,114,105,103,105,110,32, -- 119,105,108,108,32,109,97,116,99,104,46,10,10,32,32,32, -- 32,96,104,97,115,95,108,111,99,97,116,105,111,110,96,32, -- 105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,97, -- 32,115,112,101,99,39,115,32,34,111,114,105,103,105,110,34, -- 32,114,101,102,108,101,99,116,115,32,97,32,108,111,99,97, -- 116,105,111,110,46,10,32,32,32,32,87,104,101,110,32,116, -- 104,105,115,32,105,115,32,84,114,117,101,44,32,96,95,95, -- 102,105,108,101,95,95,96,32,97,116,116,114,105,98,117,116, -- 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, -- 105,115,32,115,101,116,46,10,10,32,32,32,32,96,99,97, -- 99,104,101,100,96,32,105,115,32,116,104,101,32,108,111,99, -- 97,116,105,111,110,32,111,102,32,116,104,101,32,99,97,99, -- 104,101,100,32,98,121,116,101,99,111,100,101,32,102,105,108, -- 101,44,32,105,102,32,97,110,121,46,32,32,73,116,10,32, -- 32,32,32,99,111,114,114,101,115,112,111,110,100,115,32,116, -- 111,32,116,104,101,32,96,95,95,99,97,99,104,101,100,95, -- 95,96,32,97,116,116,114,105,98,117,116,101,46,10,10,32, -- 32,32,32,96,115,117,98,109,111,100,117,108,101,95,115,101, -- 97,114,99,104,95,108,111,99,97,116,105,111,110,115,96,32, -- 105,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32, -- 111,102,32,112,97,116,104,32,101,110,116,114,105,101,115,32, -- 116,111,10,32,32,32,32,115,101,97,114,99,104,32,119,104, -- 101,110,32,105,109,112,111,114,116,105,110,103,32,115,117,98, -- 109,111,100,117,108,101,115,46,32,32,73,102,32,115,101,116, -- 44,32,105,115,95,112,97,99,107,97,103,101,32,115,104,111, -- 117,108,100,32,98,101,10,32,32,32,32,84,114,117,101,45, -- 45,97,110,100,32,70,97,108,115,101,32,111,116,104,101,114, -- 119,105,115,101,46,10,10,32,32,32,32,80,97,99,107,97, -- 103,101,115,32,97,114,101,32,115,105,109,112,108,121,32,109, -- 111,100,117,108,101,115,32,116,104,97,116,32,40,109,97,121, -- 41,32,104,97,118,101,32,115,117,98,109,111,100,117,108,101, -- 115,46,32,32,73,102,32,97,32,115,112,101,99,10,32,32, -- 32,32,104,97,115,32,97,32,110,111,110,45,78,111,110,101, -- 32,118,97,108,117,101,32,105,110,32,96,115,117,98,109,111, -- 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, -- 116,105,111,110,115,96,44,32,116,104,101,32,105,109,112,111, -- 114,116,10,32,32,32,32,115,121,115,116,101,109,32,119,105, -- 108,108,32,99,111,110,115,105,100,101,114,32,109,111,100,117, -- 108,101,115,32,108,111,97,100,101,100,32,102,114,111,109,32, -- 116,104,101,32,115,112,101,99,32,97,115,32,112,97,99,107, -- 97,103,101,115,46,10,10,32,32,32,32,79,110,108,121,32, -- 102,105,110,100,101,114,115,32,40,115,101,101,32,105,109,112, -- 111,114,116,108,105,98,46,97,98,99,46,77,101,116,97,80, -- 97,116,104,70,105,110,100,101,114,32,97,110,100,10,32,32, -- 32,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, -- 80,97,116,104,69,110,116,114,121,70,105,110,100,101,114,41, -- 32,115,104,111,117,108,100,32,109,111,100,105,102,121,32,77, -- 111,100,117,108,101,83,112,101,99,32,105,110,115,116,97,110, -- 99,101,115,46,10,10,32,32,32,32,218,6,111,114,105,103, -- 105,110,78,218,12,108,111,97,100,101,114,95,115,116,97,116, -- 101,218,10,105,115,95,112,97,99,107,97,103,101,99,3,0, -- 0,0,3,0,0,0,6,0,0,0,2,0,0,0,67,0, -- 0,0,115,79,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,2,0,124,0,0,95,1,0,124,3,0,124,0,0,95, -- 2,0,124,4,0,124,0,0,95,3,0,124,5,0,114,48, -- 0,103,0,0,110,3,0,100,0,0,124,0,0,95,4,0, -- 100,1,0,124,0,0,95,5,0,100,0,0,124,0,0,95, -- 6,0,100,0,0,83,41,2,78,70,41,7,114,67,0,0, -- 0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0, -- 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, -- 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, -- 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, -- 99,104,101,100,41,6,114,71,0,0,0,114,67,0,0,0, -- 114,169,0,0,0,114,217,0,0,0,114,218,0,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,22,3,0,0,115,14,0,0, -- 0,0,2,9,1,9,1,9,1,9,1,21,3,9,1,122, -- 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, -- 105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,0, -- 0,4,0,0,0,67,0,0,0,115,153,0,0,0,100,1, -- 0,106,0,0,124,0,0,106,1,0,131,1,0,100,2,0, -- 106,0,0,124,0,0,106,2,0,131,1,0,103,2,0,125, -- 1,0,124,0,0,106,3,0,100,0,0,107,9,0,114,79, -- 0,124,1,0,106,4,0,100,3,0,106,0,0,124,0,0, -- 106,3,0,131,1,0,131,1,0,1,110,0,0,124,0,0, -- 106,5,0,100,0,0,107,9,0,114,122,0,124,1,0,106, -- 4,0,100,4,0,106,0,0,124,0,0,106,5,0,131,1, -- 0,131,1,0,1,110,0,0,100,5,0,106,0,0,124,0, -- 0,106,6,0,106,7,0,100,6,0,106,8,0,124,1,0, -- 131,1,0,131,2,0,83,41,7,78,122,9,110,97,109,101, -- 61,123,33,114,125,122,11,108,111,97,100,101,114,61,123,33, -- 114,125,122,11,111,114,105,103,105,110,61,123,33,114,125,122, -- 29,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -- 104,95,108,111,99,97,116,105,111,110,115,61,123,125,122,6, -- 123,125,40,123,125,41,122,2,44,32,41,9,114,47,0,0, -- 0,114,67,0,0,0,114,169,0,0,0,114,217,0,0,0, -- 218,6,97,112,112,101,110,100,114,220,0,0,0,218,9,95, -- 95,99,108,97,115,115,95,95,114,57,0,0,0,114,26,0, -- 0,0,41,2,114,71,0,0,0,114,80,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,101,0, -- 0,0,34,3,0,0,115,16,0,0,0,0,1,15,1,21, -- 1,15,1,28,1,15,1,6,1,22,1,122,19,77,111,100, -- 117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95, -- 99,2,0,0,0,0,0,0,0,3,0,0,0,13,0,0, -- 0,67,0,0,0,115,145,0,0,0,124,0,0,106,0,0, -- 125,2,0,121,107,0,124,0,0,106,1,0,124,1,0,106, -- 1,0,107,2,0,111,114,0,124,0,0,106,2,0,124,1, -- 0,106,2,0,107,2,0,111,114,0,124,0,0,106,3,0, -- 124,1,0,106,3,0,107,2,0,111,114,0,124,2,0,124, -- 1,0,106,0,0,107,2,0,111,114,0,124,0,0,106,4, -- 0,124,1,0,106,4,0,107,2,0,111,114,0,124,0,0, -- 106,5,0,124,1,0,106,5,0,107,2,0,83,87,110,22, -- 0,4,116,6,0,107,10,0,114,140,0,1,1,1,100,1, -- 0,83,89,110,1,0,88,100,0,0,83,41,2,78,70,41, -- 7,114,220,0,0,0,114,67,0,0,0,114,169,0,0,0, -- 114,217,0,0,0,218,6,99,97,99,104,101,100,218,12,104, -- 97,115,95,108,111,99,97,116,105,111,110,114,209,0,0,0, -- 41,3,114,71,0,0,0,218,5,111,116,104,101,114,218,4, -- 115,109,115,108,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,6,95,95,101,113,95,95,44,3,0,0,115, -- 20,0,0,0,0,1,9,1,3,1,18,1,18,1,18,1, -- 15,1,18,1,20,1,13,1,122,17,77,111,100,117,108,101, -- 83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,0, -- 0,0,0,0,2,0,0,0,12,0,0,0,67,0,0,0, -- 115,158,0,0,0,124,0,0,106,0,0,100,0,0,107,8, -- 0,114,151,0,124,0,0,106,1,0,100,0,0,107,9,0, -- 114,151,0,124,0,0,106,2,0,114,151,0,124,0,0,106, -- 1,0,125,1,0,124,1,0,106,3,0,116,4,0,116,5, -- 0,131,1,0,131,1,0,114,112,0,121,19,0,116,6,0, -- 124,1,0,131,1,0,124,0,0,95,0,0,87,113,145,0, -- 4,116,7,0,107,10,0,114,108,0,1,1,1,89,113,145, -- 0,88,113,148,0,124,1,0,106,3,0,116,4,0,116,8, -- 0,131,1,0,131,1,0,114,148,0,124,1,0,124,0,0, -- 95,0,0,113,148,0,113,151,0,110,0,0,124,0,0,106, -- 0,0,83,41,1,78,41,9,114,222,0,0,0,114,217,0, -- 0,0,114,221,0,0,0,218,8,101,110,100,115,119,105,116, -- 104,218,5,116,117,112,108,101,114,134,0,0,0,114,132,0, -- 0,0,114,124,0,0,0,218,17,66,89,84,69,67,79,68, -- 69,95,83,85,70,70,73,88,69,83,41,2,114,71,0,0, -- 0,114,131,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,225,0,0,0,56,3,0,0,115,22, -- 0,0,0,0,2,15,1,24,1,9,1,21,1,3,1,19, -- 1,13,1,8,1,21,1,18,1,122,17,77,111,100,117,108, -- 101,83,112,101,99,46,99,97,99,104,101,100,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -- 0,115,13,0,0,0,124,1,0,124,0,0,95,0,0,100, -- 0,0,83,41,1,78,41,1,114,222,0,0,0,41,2,114, -- 71,0,0,0,114,225,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,225,0,0,0,70,3,0, -- 0,115,2,0,0,0,0,2,99,1,0,0,0,0,0,0, -- 0,1,0,0,0,2,0,0,0,67,0,0,0,115,46,0, -- 0,0,124,0,0,106,0,0,100,1,0,107,8,0,114,35, -- 0,124,0,0,106,1,0,106,2,0,100,2,0,131,1,0, -- 100,3,0,25,83,124,0,0,106,1,0,83,100,1,0,83, -- 41,4,122,32,84,104,101,32,110,97,109,101,32,111,102,32, -- 116,104,101,32,109,111,100,117,108,101,39,115,32,112,97,114, -- 101,110,116,46,78,114,116,0,0,0,114,84,0,0,0,41, -- 3,114,220,0,0,0,114,67,0,0,0,114,32,0,0,0, -- 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,6,112,97,114,101,110,116,74,3, -- 0,0,115,6,0,0,0,0,3,15,1,20,2,122,17,77, -- 111,100,117,108,101,83,112,101,99,46,112,97,114,101,110,116, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0, -- 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, -- 83,41,1,78,41,1,114,221,0,0,0,41,1,114,71,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,226,0,0,0,82,3,0,0,115,2,0,0,0,0, -- 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97, -- 115,95,108,111,99,97,116,105,111,110,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, -- 19,0,0,0,116,0,0,124,1,0,131,1,0,124,0,0, -- 95,1,0,100,0,0,83,41,1,78,41,2,218,4,98,111, -- 111,108,114,221,0,0,0,41,2,114,71,0,0,0,218,5, -- 118,97,108,117,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,226,0,0,0,86,3,0,0,115,2,0, -- 0,0,0,2,41,12,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, -- 101,0,0,0,114,229,0,0,0,218,8,112,114,111,112,101, -- 114,116,121,114,225,0,0,0,218,6,115,101,116,116,101,114, -- 114,233,0,0,0,114,226,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,216, -- 0,0,0,241,2,0,0,115,20,0,0,0,12,35,6,2, -- 15,1,15,11,12,10,12,12,18,14,21,4,18,8,18,4, -- 114,216,0,0,0,114,217,0,0,0,114,219,0,0,0,99, -- 2,0,0,0,2,0,0,0,5,0,0,0,15,0,0,0, -- 67,0,0,0,115,193,0,0,0,116,0,0,124,1,0,100, -- 1,0,131,2,0,114,83,0,124,3,0,100,2,0,107,8, -- 0,114,43,0,116,1,0,124,0,0,100,3,0,124,1,0, -- 131,1,1,83,124,3,0,114,55,0,103,0,0,110,3,0, -- 100,2,0,125,4,0,116,1,0,124,0,0,100,3,0,124, -- 1,0,100,4,0,124,4,0,131,1,2,83,124,3,0,100, -- 2,0,107,8,0,114,168,0,116,0,0,124,1,0,100,5, -- 0,131,2,0,114,159,0,121,19,0,124,1,0,106,2,0, -- 124,0,0,131,1,0,125,3,0,87,113,165,0,4,116,3, -- 0,107,10,0,114,155,0,1,1,1,100,2,0,125,3,0, -- 89,113,165,0,88,113,168,0,100,6,0,125,3,0,110,0, -- 0,116,4,0,124,0,0,124,1,0,100,7,0,124,2,0, -- 100,5,0,124,3,0,131,2,2,83,41,8,122,53,82,101, -- 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112, -- 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105, -- 111,117,115,32,108,111,97,100,101,114,32,109,101,116,104,111, -- 100,115,46,218,12,103,101,116,95,102,105,108,101,110,97,109, -- 101,78,114,169,0,0,0,114,220,0,0,0,114,219,0,0, -- 0,70,114,217,0,0,0,41,5,114,60,0,0,0,218,23, -- 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, -- 111,99,97,116,105,111,110,114,219,0,0,0,114,153,0,0, -- 0,114,216,0,0,0,41,5,114,67,0,0,0,114,169,0, -- 0,0,114,217,0,0,0,114,219,0,0,0,90,6,115,101, -- 97,114,99,104,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,173,0,0,0,91,3,0,0,115,28,0,0, -- 0,0,2,15,1,12,1,16,1,18,1,15,1,7,2,12, -- 1,15,1,3,1,19,1,13,1,14,3,9,2,114,173,0, -- 0,0,114,169,0,0,0,114,220,0,0,0,99,2,0,0, -- 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, -- 0,115,110,1,0,0,124,1,0,100,1,0,107,8,0,114, -- 79,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, -- 0,131,2,0,114,79,0,121,19,0,124,2,0,106,1,0, -- 124,0,0,131,1,0,125,1,0,87,113,76,0,4,116,2, -- 0,107,10,0,114,72,0,1,1,1,89,113,76,0,88,113, -- 79,0,110,0,0,116,3,0,124,0,0,124,2,0,100,4, -- 0,124,1,0,131,2,1,125,4,0,100,5,0,124,4,0, -- 95,4,0,124,2,0,100,1,0,107,8,0,114,203,0,120, -- 79,0,116,5,0,131,0,0,68,93,61,0,92,2,0,125, -- 5,0,125,6,0,124,1,0,106,6,0,116,7,0,124,6, -- 0,131,1,0,131,1,0,114,131,0,124,5,0,124,0,0, -- 124,1,0,131,2,0,125,2,0,124,2,0,124,4,0,95, -- 8,0,80,113,131,0,113,131,0,87,100,1,0,83,110,0, -- 0,124,3,0,116,9,0,107,8,0,114,38,1,116,0,0, -- 124,2,0,100,6,0,131,2,0,114,47,1,121,19,0,124, -- 2,0,106,10,0,124,0,0,131,1,0,125,7,0,87,110, -- 18,0,4,116,2,0,107,10,0,114,13,1,1,1,1,89, -- 113,35,1,88,124,7,0,114,35,1,103,0,0,124,4,0, -- 95,11,0,113,35,1,113,47,1,110,9,0,124,3,0,124, -- 4,0,95,11,0,124,4,0,106,11,0,103,0,0,107,2, -- 0,114,106,1,124,1,0,114,106,1,116,12,0,124,1,0, -- 131,1,0,100,7,0,25,125,8,0,124,4,0,106,11,0, -- 106,13,0,124,8,0,131,1,0,1,113,106,1,110,0,0, -- 124,4,0,83,41,8,97,61,1,0,0,82,101,116,117,114, -- 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, -- 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, -- 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, -- 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, -- 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, -- 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, -- 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -- 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, -- 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, -- 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, -- 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, -- 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, -- 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, -- 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, -- 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, -- 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, -- 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, -- 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, -- 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, -- 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, -- 111,119,110,62,114,238,0,0,0,114,217,0,0,0,84,114, -- 219,0,0,0,114,84,0,0,0,41,14,114,60,0,0,0, -- 114,238,0,0,0,114,153,0,0,0,114,216,0,0,0,114, -- 221,0,0,0,218,27,95,103,101,116,95,115,117,112,112,111, -- 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114, -- 115,114,230,0,0,0,114,231,0,0,0,114,169,0,0,0, -- 218,9,95,80,79,80,85,76,65,84,69,114,219,0,0,0, -- 114,220,0,0,0,114,38,0,0,0,114,223,0,0,0,41, -- 9,114,67,0,0,0,218,8,108,111,99,97,116,105,111,110, -- 114,169,0,0,0,114,220,0,0,0,114,177,0,0,0,218, -- 12,108,111,97,100,101,114,95,99,108,97,115,115,114,127,0, -- 0,0,114,219,0,0,0,90,7,100,105,114,110,97,109,101, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 239,0,0,0,116,3,0,0,115,60,0,0,0,0,12,12, -- 4,6,1,15,2,3,1,19,1,13,1,11,8,21,1,9, -- 3,12,1,22,1,21,1,15,1,9,1,8,2,7,3,12, -- 2,15,1,3,1,19,1,13,1,5,2,6,1,18,2,9, -- 1,15,1,6,1,16,1,22,2,114,239,0,0,0,99,3, -- 0,0,0,0,0,0,0,8,0,0,0,53,0,0,0,67, -- 0,0,0,115,124,1,0,0,121,13,0,124,0,0,106,0, -- 0,125,3,0,87,110,18,0,4,116,1,0,107,10,0,114, -- 33,0,1,1,1,89,110,17,0,88,124,3,0,100,0,0, -- 107,9,0,114,50,0,124,3,0,83,124,0,0,106,2,0, -- 125,4,0,124,1,0,100,0,0,107,8,0,114,108,0,121, -- 13,0,124,0,0,106,3,0,125,1,0,87,113,108,0,4, -- 116,1,0,107,10,0,114,104,0,1,1,1,89,113,108,0, -- 88,110,0,0,121,13,0,124,0,0,106,4,0,125,5,0, -- 87,110,24,0,4,116,1,0,107,10,0,114,147,0,1,1, -- 1,100,0,0,125,5,0,89,110,1,0,88,124,2,0,100, -- 0,0,107,8,0,114,224,0,124,5,0,100,0,0,107,8, -- 0,114,215,0,121,13,0,124,1,0,106,5,0,125,2,0, -- 87,113,221,0,4,116,1,0,107,10,0,114,211,0,1,1, -- 1,100,0,0,125,2,0,89,113,221,0,88,113,224,0,124, -- 5,0,125,2,0,110,0,0,121,13,0,124,0,0,106,6, -- 0,125,6,0,87,110,24,0,4,116,1,0,107,10,0,114, -- 7,1,1,1,1,100,0,0,125,6,0,89,110,1,0,88, -- 121,19,0,116,7,0,124,0,0,106,8,0,131,1,0,125, -- 7,0,87,110,24,0,4,116,1,0,107,10,0,114,53,1, -- 1,1,1,100,0,0,125,7,0,89,110,1,0,88,116,9, -- 0,124,4,0,124,1,0,100,1,0,124,2,0,131,2,1, -- 125,3,0,124,5,0,100,0,0,107,8,0,114,93,1,100, -- 2,0,110,3,0,100,3,0,124,3,0,95,10,0,124,6, -- 0,124,3,0,95,11,0,124,7,0,124,3,0,95,12,0, -- 124,3,0,83,41,4,78,114,217,0,0,0,70,84,41,13, -- 114,208,0,0,0,114,209,0,0,0,114,57,0,0,0,114, -- 204,0,0,0,114,210,0,0,0,90,7,95,79,82,73,71, -- 73,78,218,10,95,95,99,97,99,104,101,100,95,95,218,4, -- 108,105,115,116,218,8,95,95,112,97,116,104,95,95,114,216, -- 0,0,0,114,221,0,0,0,114,225,0,0,0,114,220,0, -- 0,0,41,8,114,179,0,0,0,114,169,0,0,0,114,217, -- 0,0,0,114,177,0,0,0,114,67,0,0,0,114,242,0, -- 0,0,114,225,0,0,0,114,220,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,17,95,115,112, -- 101,99,95,102,114,111,109,95,109,111,100,117,108,101,180,3, -- 0,0,115,72,0,0,0,0,2,3,1,13,1,13,1,5, -- 2,12,1,4,2,9,1,12,1,3,1,13,1,13,2,8, -- 1,3,1,13,1,13,1,11,1,12,1,12,1,3,1,13, -- 1,13,1,14,2,9,1,3,1,13,1,13,1,11,1,3, -- 1,19,1,13,1,11,2,21,1,27,1,9,1,9,1,114, -- 247,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,6,0,0,0,64,0,0,0,115,142,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, -- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, -- 5,0,132,0,0,90,5,0,100,6,0,100,7,0,100,8, -- 0,100,9,0,100,10,0,100,11,0,132,0,2,90,6,0, -- 100,12,0,100,13,0,132,0,0,90,7,0,100,14,0,100, -- 15,0,132,0,0,90,8,0,100,16,0,100,17,0,132,0, -- 0,90,9,0,100,18,0,100,19,0,132,0,0,90,10,0, -- 100,20,0,100,21,0,132,0,0,90,11,0,100,22,0,100, -- 23,0,132,0,0,90,12,0,100,24,0,83,41,25,114,174, -- 0,0,0,122,77,67,111,110,118,101,110,105,101,110,99,101, -- 32,119,114,97,112,112,101,114,32,97,114,111,117,110,100,32, -- 115,112,101,99,32,111,98,106,101,99,116,115,32,116,111,32, -- 112,114,111,118,105,100,101,32,115,112,101,99,45,115,112,101, -- 99,105,102,105,99,10,32,32,32,32,109,101,116,104,111,100, -- 115,46,99,2,0,0,0,0,0,0,0,2,0,0,0,2, -- 0,0,0,67,0,0,0,115,13,0,0,0,124,1,0,124, -- 0,0,95,0,0,100,0,0,83,41,1,78,41,1,114,177, -- 0,0,0,41,2,114,71,0,0,0,114,177,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, -- 0,0,0,232,3,0,0,115,2,0,0,0,0,1,122,21, -- 95,83,112,101,99,77,101,116,104,111,100,115,46,95,95,105, -- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,3,0, -- 0,0,3,0,0,0,67,0,0,0,115,158,0,0,0,124, -- 0,0,106,0,0,125,1,0,124,1,0,106,1,0,100,1, -- 0,107,8,0,114,30,0,100,2,0,110,6,0,124,1,0, -- 106,1,0,125,2,0,124,1,0,106,2,0,100,1,0,107, -- 8,0,114,104,0,124,1,0,106,3,0,100,1,0,107,8, -- 0,114,82,0,100,3,0,106,4,0,124,2,0,131,1,0, -- 83,100,4,0,106,4,0,124,2,0,124,1,0,106,3,0, -- 131,2,0,83,110,50,0,124,1,0,106,5,0,114,132,0, -- 100,5,0,106,4,0,124,2,0,124,1,0,106,2,0,131, -- 2,0,83,100,6,0,106,4,0,124,1,0,106,1,0,124, -- 1,0,106,2,0,131,2,0,83,100,1,0,83,41,7,122, -- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114, -- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32, -- 109,111,100,117,108,101,46,78,114,206,0,0,0,122,13,60, -- 109,111,100,117,108,101,32,123,33,114,125,62,122,20,60,109, -- 111,100,117,108,101,32,123,33,114,125,32,40,123,33,114,125, -- 41,62,122,23,60,109,111,100,117,108,101,32,123,33,114,125, -- 32,102,114,111,109,32,123,33,114,125,62,122,18,60,109,111, -- 100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,41, -- 6,114,177,0,0,0,114,67,0,0,0,114,217,0,0,0, -- 114,169,0,0,0,114,47,0,0,0,114,226,0,0,0,41, -- 3,114,71,0,0,0,114,177,0,0,0,114,67,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 205,0,0,0,235,3,0,0,115,18,0,0,0,0,3,9, -- 1,30,1,15,1,15,1,13,2,22,2,9,1,19,2,122, -- 24,95,83,112,101,99,77,101,116,104,111,100,115,46,109,111, -- 100,117,108,101,95,114,101,112,114,218,9,95,111,118,101,114, -- 114,105,100,101,70,218,11,95,102,111,114,99,101,95,110,97, -- 109,101,84,99,2,0,0,0,2,0,0,0,6,0,0,0, -- 66,0,0,0,67,0,0,0,115,75,2,0,0,124,0,0, -- 106,0,0,125,4,0,124,2,0,115,45,0,124,3,0,115, -- 45,0,116,1,0,124,1,0,100,1,0,100,2,0,131,3, -- 0,100,2,0,107,8,0,114,85,0,121,16,0,124,4,0, -- 106,2,0,124,1,0,95,3,0,87,113,85,0,4,116,4, -- 0,107,10,0,114,81,0,1,1,1,89,113,85,0,88,110, -- 0,0,124,2,0,115,115,0,116,1,0,124,1,0,100,3, -- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,221,0, -- 124,4,0,106,5,0,125,5,0,124,5,0,100,2,0,107, -- 8,0,114,184,0,124,4,0,106,6,0,100,2,0,107,9, -- 0,114,184,0,116,7,0,106,8,0,116,7,0,131,1,0, -- 125,5,0,124,4,0,106,6,0,124,5,0,95,9,0,113, -- 184,0,110,0,0,121,13,0,124,5,0,124,1,0,95,10, -- 0,87,113,221,0,4,116,4,0,107,10,0,114,217,0,1, -- 1,1,89,113,221,0,88,110,0,0,124,2,0,115,251,0, -- 116,1,0,124,1,0,100,4,0,100,2,0,131,3,0,100, -- 2,0,107,8,0,114,35,1,121,16,0,124,4,0,106,11, -- 0,124,1,0,95,12,0,87,113,35,1,4,116,4,0,107, -- 10,0,114,31,1,1,1,1,89,113,35,1,88,110,0,0, -- 121,13,0,124,4,0,124,1,0,95,13,0,87,110,18,0, -- 4,116,4,0,107,10,0,114,68,1,1,1,1,89,110,1, -- 0,88,124,2,0,115,99,1,116,1,0,124,1,0,100,5, -- 0,100,2,0,131,3,0,100,2,0,107,8,0,114,157,1, -- 124,4,0,106,6,0,100,2,0,107,9,0,114,157,1,121, -- 16,0,124,4,0,106,6,0,124,1,0,95,14,0,87,113, -- 154,1,4,116,4,0,107,10,0,114,150,1,1,1,1,89, -- 113,154,1,88,113,157,1,110,0,0,124,4,0,106,15,0, -- 114,71,2,124,2,0,115,196,1,116,1,0,124,1,0,100, -- 6,0,100,2,0,131,3,0,100,2,0,107,8,0,114,236, -- 1,121,16,0,124,4,0,106,16,0,124,1,0,95,17,0, -- 87,113,236,1,4,116,4,0,107,10,0,114,232,1,1,1, -- 1,89,113,236,1,88,110,0,0,124,2,0,115,10,2,116, -- 1,0,124,1,0,100,7,0,100,2,0,131,3,0,100,2, -- 0,107,8,0,114,71,2,124,4,0,106,18,0,100,2,0, -- 107,9,0,114,68,2,121,16,0,124,4,0,106,18,0,124, -- 1,0,95,19,0,87,113,65,2,4,116,4,0,107,10,0, -- 114,61,2,1,1,1,89,113,65,2,88,113,68,2,113,71, -- 2,110,0,0,100,2,0,83,41,8,97,29,2,0,0,83, -- 101,116,32,116,104,101,32,109,111,100,117,108,101,39,115,32, -- 97,116,116,114,105,98,117,116,101,115,46,10,10,32,32,32, -- 32,32,32,32,32,65,108,108,32,109,105,115,115,105,110,103, -- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, -- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, -- 115,32,119,105,108,108,32,98,101,32,115,101,116,46,32,32, -- 72,101,114,101,10,32,32,32,32,32,32,32,32,105,115,32, -- 104,111,119,32,116,104,101,32,115,112,101,99,32,97,116,116, -- 114,105,98,117,116,101,115,32,109,97,112,32,111,110,116,111, -- 32,116,104,101,32,109,111,100,117,108,101,58,10,10,32,32, -- 32,32,32,32,32,32,115,112,101,99,46,110,97,109,101,32, -- 45,62,32,109,111,100,117,108,101,46,95,95,110,97,109,101, -- 95,95,10,32,32,32,32,32,32,32,32,115,112,101,99,46, -- 108,111,97,100,101,114,32,45,62,32,109,111,100,117,108,101, -- 46,95,95,108,111,97,100,101,114,95,95,10,32,32,32,32, -- 32,32,32,32,115,112,101,99,46,112,97,114,101,110,116,32, -- 45,62,32,109,111,100,117,108,101,46,95,95,112,97,99,107, -- 97,103,101,95,95,10,32,32,32,32,32,32,32,32,115,112, -- 101,99,32,45,62,32,109,111,100,117,108,101,46,95,95,115, -- 112,101,99,95,95,10,10,32,32,32,32,32,32,32,32,79, -- 112,116,105,111,110,97,108,58,10,32,32,32,32,32,32,32, -- 32,115,112,101,99,46,111,114,105,103,105,110,32,45,62,32, -- 109,111,100,117,108,101,46,95,95,102,105,108,101,95,95,32, -- 40,105,102,32,115,112,101,99,46,115,101,116,95,102,105,108, -- 101,97,116,116,114,32,105,115,32,116,114,117,101,41,10,32, -- 32,32,32,32,32,32,32,115,112,101,99,46,99,97,99,104, -- 101,100,32,45,62,32,109,111,100,117,108,101,46,95,95,99, -- 97,99,104,101,100,95,95,32,40,105,102,32,95,95,102,105, -- 108,101,95,95,32,97,108,115,111,32,115,101,116,41,10,32, -- 32,32,32,32,32,32,32,115,112,101,99,46,115,117,98,109, -- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, -- 97,116,105,111,110,115,32,45,62,32,109,111,100,117,108,101, -- 46,95,95,112,97,116,104,95,95,32,40,105,102,32,115,101, -- 116,41,10,10,32,32,32,32,32,32,32,32,114,57,0,0, -- 0,78,114,204,0,0,0,218,11,95,95,112,97,99,107,97, -- 103,101,95,95,114,246,0,0,0,114,210,0,0,0,114,244, -- 0,0,0,41,20,114,177,0,0,0,114,62,0,0,0,114, -- 67,0,0,0,114,57,0,0,0,114,209,0,0,0,114,169, -- 0,0,0,114,220,0,0,0,218,16,95,78,97,109,101,115, -- 112,97,99,101,76,111,97,100,101,114,218,7,95,95,110,101, -- 119,95,95,218,5,95,112,97,116,104,114,204,0,0,0,114, -- 233,0,0,0,114,250,0,0,0,114,208,0,0,0,114,246, -- 0,0,0,114,226,0,0,0,114,217,0,0,0,114,210,0, -- 0,0,114,225,0,0,0,114,244,0,0,0,41,6,114,71, -- 0,0,0,114,179,0,0,0,114,248,0,0,0,114,249,0, -- 0,0,114,177,0,0,0,114,169,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,17,105,110,105, -- 116,95,109,111,100,117,108,101,95,97,116,116,114,115,251,3, -- 0,0,115,88,0,0,0,0,17,9,6,12,1,24,1,3, -- 1,16,1,13,1,8,3,30,1,9,1,12,2,15,1,15, -- 1,18,1,3,1,13,1,13,1,8,3,30,1,3,1,16, -- 1,13,1,8,3,3,1,13,1,13,1,5,3,30,1,15, -- 1,3,1,16,1,13,1,11,2,9,2,30,1,3,1,16, -- 1,13,1,8,3,30,1,15,1,3,1,16,1,13,1,122, -- 30,95,83,112,101,99,77,101,116,104,111,100,115,46,105,110, -- 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, -- 67,0,0,0,115,101,0,0,0,124,0,0,106,0,0,125, -- 1,0,116,1,0,124,1,0,106,2,0,100,1,0,131,2, -- 0,114,48,0,124,1,0,106,2,0,106,3,0,124,1,0, -- 131,1,0,125,2,0,110,6,0,100,2,0,125,2,0,124, -- 2,0,100,2,0,107,8,0,114,84,0,116,4,0,124,1, -- 0,106,5,0,131,1,0,125,2,0,110,0,0,124,0,0, -- 106,6,0,124,2,0,131,1,0,1,124,2,0,83,41,3, -- 122,153,82,101,116,117,114,110,32,97,32,110,101,119,32,109, -- 111,100,117,108,101,32,116,111,32,98,101,32,108,111,97,100, -- 101,100,46,10,10,32,32,32,32,32,32,32,32,84,104,101, -- 32,105,109,112,111,114,116,45,114,101,108,97,116,101,100,32, -- 109,111,100,117,108,101,32,97,116,116,114,105,98,117,116,101, -- 115,32,97,114,101,32,97,108,115,111,32,115,101,116,32,119, -- 105,116,104,32,116,104,101,10,32,32,32,32,32,32,32,32, -- 97,112,112,114,111,112,114,105,97,116,101,32,118,97,108,117, -- 101,115,32,102,114,111,109,32,116,104,101,32,115,112,101,99, -- 46,10,10,32,32,32,32,32,32,32,32,218,13,99,114,101, -- 97,116,101,95,109,111,100,117,108,101,78,41,7,114,177,0, -- 0,0,114,60,0,0,0,114,169,0,0,0,114,255,0,0, -- 0,114,68,0,0,0,114,67,0,0,0,114,254,0,0,0, -- 41,3,114,71,0,0,0,114,177,0,0,0,114,179,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,6,99,114,101,97,116,101,75,4,0,0,115,16,0,0, -- 0,0,7,9,2,18,3,21,2,6,1,12,4,18,1,13, -- 1,122,19,95,83,112,101,99,77,101,116,104,111,100,115,46, -- 99,114,101,97,116,101,99,2,0,0,0,0,0,0,0,2, -- 0,0,0,2,0,0,0,67,0,0,0,115,23,0,0,0, -- 124,0,0,106,0,0,106,1,0,106,2,0,124,1,0,131, -- 1,0,1,100,1,0,83,41,2,122,189,68,111,32,101,118, -- 101,114,121,116,104,105,110,103,32,110,101,99,101,115,115,97, -- 114,121,32,116,111,32,101,120,101,99,117,116,101,32,116,104, -- 101,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, -- 32,32,32,84,104,101,32,110,97,109,101,115,112,97,99,101, -- 32,111,102,32,96,109,111,100,117,108,101,96,32,105,115,32, -- 117,115,101,100,32,97,115,32,116,104,101,32,116,97,114,103, -- 101,116,32,111,102,32,101,120,101,99,117,116,105,111,110,46, -- 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, -- 116,104,111,100,32,117,115,101,115,32,116,104,101,32,108,111, -- 97,100,101,114,39,115,32,96,101,120,101,99,95,109,111,100, -- 117,108,101,40,41,96,32,109,101,116,104,111,100,46,10,10, -- 32,32,32,32,32,32,32,32,78,41,3,114,177,0,0,0, -- 114,169,0,0,0,218,11,101,120,101,99,95,109,111,100,117, -- 108,101,41,2,114,71,0,0,0,114,179,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, -- 101,120,101,99,98,4,0,0,115,2,0,0,0,0,7,122, -- 18,95,83,112,101,99,77,101,116,104,111,100,115,46,95,101, -- 120,101,99,99,2,0,0,0,0,0,0,0,4,0,0,0, -- 11,0,0,0,67,0,0,0,115,17,1,0,0,124,0,0, -- 106,0,0,106,1,0,125,2,0,116,2,0,106,3,0,131, -- 0,0,1,116,4,0,124,2,0,131,1,0,143,226,0,1, -- 116,5,0,106,6,0,106,7,0,124,2,0,131,1,0,124, -- 1,0,107,9,0,114,95,0,100,1,0,106,8,0,124,2, -- 0,131,1,0,125,3,0,116,9,0,124,3,0,100,2,0, -- 124,2,0,131,1,1,130,1,0,110,0,0,124,0,0,106, -- 0,0,106,10,0,100,3,0,107,8,0,114,181,0,124,0, -- 0,106,0,0,106,11,0,100,3,0,107,8,0,114,158,0, -- 116,9,0,100,4,0,100,2,0,124,0,0,106,0,0,106, -- 1,0,131,1,1,130,1,0,110,0,0,124,0,0,106,12, -- 0,124,1,0,100,5,0,100,6,0,131,1,1,1,124,1, -- 0,83,124,0,0,106,12,0,124,1,0,100,5,0,100,6, -- 0,131,1,1,1,116,13,0,124,0,0,106,0,0,106,10, -- 0,100,7,0,131,2,0,115,243,0,124,0,0,106,0,0, -- 106,10,0,106,14,0,124,2,0,131,1,0,1,110,13,0, -- 124,0,0,106,15,0,124,1,0,131,1,0,1,87,100,3, -- 0,81,88,116,5,0,106,6,0,124,2,0,25,83,41,8, -- 122,51,69,120,101,99,117,116,101,32,116,104,101,32,115,112, -- 101,99,32,105,110,32,97,110,32,101,120,105,115,116,105,110, -- 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115, -- 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33, -- 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111, -- 100,117,108,101,115,114,67,0,0,0,78,122,14,109,105,115, -- 115,105,110,103,32,108,111,97,100,101,114,114,248,0,0,0, -- 84,114,1,1,0,0,41,16,114,177,0,0,0,114,67,0, -- 0,0,114,106,0,0,0,218,12,97,99,113,117,105,114,101, -- 95,108,111,99,107,114,103,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,114,93,0,0,0,114,47,0,0,0,114,153, -- 0,0,0,114,169,0,0,0,114,220,0,0,0,114,254,0, -- 0,0,114,60,0,0,0,218,11,108,111,97,100,95,109,111, -- 100,117,108,101,114,2,1,0,0,41,4,114,71,0,0,0, -- 114,179,0,0,0,114,67,0,0,0,114,171,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,175, -- 0,0,0,108,4,0,0,115,32,0,0,0,0,2,12,1, -- 10,1,13,1,24,1,15,1,21,1,18,1,18,1,27,2, -- 19,1,4,1,19,1,21,4,22,2,19,1,122,17,95,83, -- 112,101,99,77,101,116,104,111,100,115,46,101,120,101,99,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,27,0,0,0, -- 67,0,0,0,115,24,1,0,0,124,0,0,106,0,0,125, -- 1,0,124,1,0,106,1,0,106,2,0,124,1,0,106,3, -- 0,131,1,0,1,116,4,0,106,5,0,124,1,0,106,3, -- 0,25,125,2,0,116,6,0,124,2,0,100,1,0,100,0, -- 0,131,3,0,100,0,0,107,8,0,114,108,0,121,16,0, -- 124,1,0,106,1,0,124,2,0,95,7,0,87,113,108,0, -- 4,116,8,0,107,10,0,114,104,0,1,1,1,89,113,108, -- 0,88,110,0,0,116,6,0,124,2,0,100,2,0,100,0, -- 0,131,3,0,100,0,0,107,8,0,114,215,0,121,59,0, -- 124,2,0,106,9,0,124,2,0,95,10,0,116,11,0,124, -- 2,0,100,3,0,131,2,0,115,190,0,124,1,0,106,3, -- 0,106,12,0,100,4,0,131,1,0,100,5,0,25,124,2, -- 0,95,10,0,110,0,0,87,113,215,0,4,116,8,0,107, -- 10,0,114,211,0,1,1,1,89,113,215,0,88,110,0,0, -- 116,6,0,124,2,0,100,6,0,100,0,0,131,3,0,100, -- 0,0,107,8,0,114,20,1,121,13,0,124,1,0,124,2, -- 0,95,13,0,87,113,20,1,4,116,8,0,107,10,0,114, -- 16,1,1,1,1,89,113,20,1,88,110,0,0,124,2,0, -- 83,41,7,78,114,204,0,0,0,114,250,0,0,0,114,246, -- 0,0,0,114,116,0,0,0,114,84,0,0,0,114,208,0, -- 0,0,41,14,114,177,0,0,0,114,169,0,0,0,114,4, -- 1,0,0,114,67,0,0,0,114,7,0,0,0,114,73,0, -- 0,0,114,62,0,0,0,114,204,0,0,0,114,209,0,0, -- 0,114,57,0,0,0,114,250,0,0,0,114,60,0,0,0, -- 114,32,0,0,0,114,208,0,0,0,41,3,114,71,0,0, -- 0,114,177,0,0,0,114,179,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,218,25,95,108,111,97, -- 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, -- 116,105,98,108,101,132,4,0,0,115,42,0,0,0,0,4, -- 9,1,19,2,16,1,24,1,3,1,16,1,13,1,8,1, -- 24,1,3,4,12,1,15,1,32,1,13,1,8,1,24,1, -- 3,1,13,1,13,1,8,1,122,38,95,83,112,101,99,77, -- 101,116,104,111,100,115,46,95,108,111,97,100,95,98,97,99, -- 107,119,97,114,100,95,99,111,109,112,97,116,105,98,108,101, -+ 120,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, -+ 103,101,110,101,120,112,114,62,122,18,105,109,112,111,114,116, -+ 32,123,33,114,125,32,35,32,123,33,114,125,70,41,9,114, -+ 215,0,0,0,114,79,0,0,0,114,8,0,0,0,114,74, -+ 0,0,0,114,68,0,0,0,114,80,0,0,0,114,153,0, -+ 0,0,114,170,0,0,0,114,216,0,0,0,41,3,114,72, -+ 0,0,0,114,81,0,0,0,114,178,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,82,0,0, -+ 0,227,2,0,0,115,18,0,0,0,0,1,3,1,9,1, -+ 25,1,3,1,17,1,13,1,8,2,26,2,122,26,95,105, -+ 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,46, -+ 95,95,101,120,105,116,95,95,78,41,6,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,73,0,0,0,114, -+ 76,0,0,0,114,82,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,213,0, -+ 0,0,214,2,0,0,115,6,0,0,0,12,2,12,4,12, -+ 7,114,213,0,0,0,99,0,0,0,0,0,0,0,0,0, -+ 0,0,0,8,0,0,0,64,0,0,0,115,172,0,0,0, -+ 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -+ 3,0,100,2,0,100,3,0,100,4,0,100,3,0,100,5, -+ 0,100,3,0,100,6,0,100,7,0,132,0,3,90,4,0, -+ 100,8,0,100,9,0,132,0,0,90,5,0,100,10,0,100, -+ 11,0,132,0,0,90,6,0,101,7,0,100,12,0,100,13, -+ 0,132,0,0,131,1,0,90,8,0,101,8,0,106,9,0, -+ 100,14,0,100,13,0,132,0,0,131,1,0,90,8,0,101, -+ 7,0,100,15,0,100,16,0,132,0,0,131,1,0,90,10, -+ 0,101,7,0,100,17,0,100,18,0,132,0,0,131,1,0, -+ 90,11,0,101,11,0,106,9,0,100,19,0,100,18,0,132, -+ 0,0,131,1,0,90,11,0,100,3,0,83,41,20,218,10, -+ 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, -+ 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, -+ 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, -+ 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, -+ 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, -+ 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, -+ 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, -+ 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, -+ 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, -+ 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, -+ 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, -+ 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, -+ 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, -+ 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, -+ 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, -+ 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, -+ 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, -+ 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, -+ 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, -+ 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, -+ 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, -+ 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, -+ 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, -+ 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, -+ 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, -+ 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, -+ 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, -+ 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, -+ 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, -+ 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, -+ 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, -+ 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, -+ 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, -+ 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, -+ 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, -+ 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, -+ 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, -+ 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, -+ 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, -+ 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, -+ 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, -+ 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, -+ 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, -+ 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, -+ 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, -+ 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, -+ 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, -+ 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, -+ 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, -+ 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, -+ 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, -+ 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, -+ 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, -+ 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, -+ 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, -+ 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, -+ 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, -+ 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, -+ 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, -+ 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, -+ 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, -+ 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, -+ 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, -+ 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, -+ 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, -+ 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, -+ 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, -+ 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, -+ 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, -+ 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, -+ 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, -+ 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, -+ 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, -+ 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, -+ 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, -+ 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, -+ 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, -+ 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, -+ 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, -+ 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, -+ 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, -+ 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, -+ 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, -+ 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, -+ 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, -+ 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, -+ 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, -+ 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, -+ 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, -+ 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, -+ 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, -+ 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, -+ 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, -+ 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,218, -+ 6,111,114,105,103,105,110,78,218,12,108,111,97,100,101,114, -+ 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97, -+ 103,101,99,3,0,0,0,3,0,0,0,6,0,0,0,2, -+ 0,0,0,67,0,0,0,115,79,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,124,3, -+ 0,124,0,0,95,2,0,124,4,0,124,0,0,95,3,0, -+ 124,5,0,114,48,0,103,0,0,110,3,0,100,0,0,124, -+ 0,0,95,4,0,100,1,0,124,0,0,95,5,0,100,0, -+ 0,124,0,0,95,6,0,100,0,0,83,41,2,78,70,41, -+ 7,114,68,0,0,0,114,170,0,0,0,114,218,0,0,0, -+ 114,219,0,0,0,218,26,115,117,98,109,111,100,117,108,101, -+ 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, -+ 115,218,13,95,115,101,116,95,102,105,108,101,97,116,116,114, -+ 218,7,95,99,97,99,104,101,100,41,6,114,72,0,0,0, -+ 114,68,0,0,0,114,170,0,0,0,114,218,0,0,0,114, -+ 219,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,22,3,0, -+ 0,115,14,0,0,0,0,2,9,1,9,1,9,1,9,1, -+ 21,3,9,1,122,19,77,111,100,117,108,101,83,112,101,99, -+ 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, -+ 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,153, -+ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, -+ 1,0,100,2,0,106,0,0,124,0,0,106,2,0,131,1, -+ 0,103,2,0,125,1,0,124,0,0,106,3,0,100,0,0, -+ 107,9,0,114,79,0,124,1,0,106,4,0,100,3,0,106, -+ 0,0,124,0,0,106,3,0,131,1,0,131,1,0,1,110, -+ 0,0,124,0,0,106,5,0,100,0,0,107,9,0,114,122, -+ 0,124,1,0,106,4,0,100,4,0,106,0,0,124,0,0, -+ 106,5,0,131,1,0,131,1,0,1,110,0,0,100,5,0, -+ 106,0,0,124,0,0,106,6,0,106,7,0,100,6,0,106, -+ 8,0,124,1,0,131,1,0,131,2,0,83,41,7,78,122, -+ 9,110,97,109,101,61,123,33,114,125,122,11,108,111,97,100, -+ 101,114,61,123,33,114,125,122,11,111,114,105,103,105,110,61, -+ 123,33,114,125,122,29,115,117,98,109,111,100,117,108,101,95, -+ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, -+ 61,123,125,122,6,123,125,40,123,125,41,122,2,44,32,41, -+ 9,114,48,0,0,0,114,68,0,0,0,114,170,0,0,0, -+ 114,218,0,0,0,218,6,97,112,112,101,110,100,114,221,0, -+ 0,0,218,9,95,95,99,108,97,115,115,95,95,114,58,0, -+ 0,0,114,27,0,0,0,41,2,114,72,0,0,0,114,81, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,102,0,0,0,34,3,0,0,115,16,0,0,0, -+ 0,1,15,1,21,1,15,1,28,1,15,1,6,1,22,1, -+ 122,19,77,111,100,117,108,101,83,112,101,99,46,95,95,114, -+ 101,112,114,95,95,99,2,0,0,0,0,0,0,0,3,0, -+ 0,0,11,0,0,0,67,0,0,0,115,145,0,0,0,124, -+ 0,0,106,0,0,125,2,0,121,107,0,124,0,0,106,1, -+ 0,124,1,0,106,1,0,107,2,0,111,114,0,124,0,0, -+ 106,2,0,124,1,0,106,2,0,107,2,0,111,114,0,124, -+ 0,0,106,3,0,124,1,0,106,3,0,107,2,0,111,114, -+ 0,124,2,0,124,1,0,106,0,0,107,2,0,111,114,0, -+ 124,0,0,106,4,0,124,1,0,106,4,0,107,2,0,111, -+ 114,0,124,0,0,106,5,0,124,1,0,106,5,0,107,2, -+ 0,83,87,110,22,0,4,116,6,0,107,10,0,114,140,0, -+ 1,1,1,100,1,0,83,89,110,1,0,88,100,0,0,83, -+ 41,2,78,70,41,7,114,221,0,0,0,114,68,0,0,0, -+ 114,170,0,0,0,114,218,0,0,0,218,6,99,97,99,104, -+ 101,100,218,12,104,97,115,95,108,111,99,97,116,105,111,110, -+ 114,210,0,0,0,41,3,114,72,0,0,0,218,5,111,116, -+ 104,101,114,218,4,115,109,115,108,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,6,95,95,101,113,95,95, -+ 44,3,0,0,115,20,0,0,0,0,1,9,1,3,1,18, -+ 1,18,1,18,1,15,1,18,1,20,1,13,1,122,17,77, -+ 111,100,117,108,101,83,112,101,99,46,95,95,101,113,95,95, - 99,1,0,0,0,0,0,0,0,2,0,0,0,11,0,0, -- 0,67,0,0,0,115,179,0,0,0,124,0,0,106,0,0, -- 106,1,0,100,0,0,107,9,0,114,52,0,116,2,0,124, -- 0,0,106,0,0,106,1,0,100,1,0,131,2,0,115,52, -- 0,124,0,0,106,3,0,131,0,0,83,110,0,0,124,0, -- 0,106,4,0,131,0,0,125,1,0,116,5,0,124,1,0, -- 131,1,0,143,84,0,1,124,0,0,106,0,0,106,1,0, -- 100,0,0,107,8,0,114,143,0,124,0,0,106,0,0,106, -- 6,0,100,0,0,107,8,0,114,156,0,116,7,0,100,2, -- 0,100,3,0,124,0,0,106,0,0,106,8,0,131,1,1, -- 130,1,0,113,156,0,110,13,0,124,0,0,106,9,0,124, -- 1,0,131,1,0,1,87,100,0,0,81,88,116,10,0,106, -- 11,0,124,0,0,106,0,0,106,8,0,25,83,41,4,78, -- 114,1,1,0,0,122,14,109,105,115,115,105,110,103,32,108, -- 111,97,100,101,114,114,67,0,0,0,41,12,114,177,0,0, -- 0,114,169,0,0,0,114,60,0,0,0,114,5,1,0,0, -- 114,0,1,0,0,114,212,0,0,0,114,220,0,0,0,114, -- 153,0,0,0,114,67,0,0,0,114,2,1,0,0,114,7, -- 0,0,0,114,73,0,0,0,41,2,114,71,0,0,0,114, -- 179,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,99, -- 107,101,100,162,4,0,0,115,20,0,0,0,0,2,18,2, -- 21,1,13,2,12,1,13,1,18,1,18,1,30,3,19,5, -- 122,27,95,83,112,101,99,77,101,116,104,111,100,115,46,95, -- 108,111,97,100,95,117,110,108,111,99,107,101,100,99,1,0, -- 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, -- 0,0,115,49,0,0,0,116,0,0,106,1,0,131,0,0, -- 1,116,2,0,124,0,0,106,3,0,106,4,0,131,1,0, -- 143,15,0,1,124,0,0,106,5,0,131,0,0,83,87,100, -- 1,0,81,88,100,1,0,83,41,2,122,207,82,101,116,117, -- 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, -- 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, -- 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, -- 100,101,114,46,10,10,32,32,32,32,32,32,32,32,84,104, -- 101,32,109,111,100,117,108,101,32,105,115,32,110,111,116,32, -- 97,100,100,101,100,32,116,111,32,105,116,115,32,112,97,114, -- 101,110,116,46,10,10,32,32,32,32,32,32,32,32,73,102, -- 32,97,32,109,111,100,117,108,101,32,105,115,32,97,108,114, -- 101,97,100,121,32,105,110,32,115,121,115,46,109,111,100,117, -- 108,101,115,44,32,116,104,97,116,32,101,120,105,115,116,105, -- 110,103,32,109,111,100,117,108,101,32,103,101,116,115,10,32, -- 32,32,32,32,32,32,32,99,108,111,98,98,101,114,101,100, -- 46,10,10,32,32,32,32,32,32,32,32,78,41,6,114,106, -- 0,0,0,114,3,1,0,0,114,103,0,0,0,114,177,0, -- 0,0,114,67,0,0,0,114,6,1,0,0,41,1,114,71, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,176,0,0,0,185,4,0,0,115,6,0,0,0, -- 0,9,10,1,19,1,122,17,95,83,112,101,99,77,101,116, -- 104,111,100,115,46,108,111,97,100,78,41,13,114,57,0,0, -- 0,114,56,0,0,0,114,58,0,0,0,114,59,0,0,0, -- 114,72,0,0,0,114,205,0,0,0,114,254,0,0,0,114, -- 0,1,0,0,114,2,1,0,0,114,175,0,0,0,114,5, -- 1,0,0,114,6,1,0,0,114,176,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,174,0,0,0,225,3,0,0,115,20,0,0,0,12, -- 3,6,4,12,3,12,16,24,80,12,23,12,10,12,24,12, -- 30,12,23,114,174,0,0,0,99,4,0,0,0,0,0,0, -- 0,6,0,0,0,11,0,0,0,67,0,0,0,115,201,0, -- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,4, -- 0,124,0,0,106,0,0,100,2,0,131,1,0,125,5,0, -- 124,4,0,115,102,0,124,5,0,114,54,0,124,5,0,106, -- 1,0,125,4,0,113,102,0,124,2,0,124,3,0,107,2, -- 0,114,84,0,116,2,0,124,1,0,124,2,0,131,2,0, -- 125,4,0,113,102,0,116,3,0,124,1,0,124,2,0,131, -- 2,0,125,4,0,110,0,0,124,5,0,115,132,0,116,4, -- 0,124,1,0,124,2,0,100,3,0,124,4,0,131,2,1, -- 125,5,0,110,0,0,121,44,0,124,5,0,124,0,0,100, -- 2,0,60,124,4,0,124,0,0,100,1,0,60,124,2,0, -- 124,0,0,100,4,0,60,124,3,0,124,0,0,100,5,0, -- 60,87,110,18,0,4,116,5,0,107,10,0,114,196,0,1, -- 1,1,89,110,1,0,88,100,0,0,83,41,6,78,114,204, -- 0,0,0,114,208,0,0,0,114,169,0,0,0,114,210,0, -- 0,0,114,244,0,0,0,41,6,114,93,0,0,0,114,169, -- 0,0,0,218,20,83,111,117,114,99,101,108,101,115,115,70, -- 105,108,101,76,111,97,100,101,114,218,16,83,111,117,114,99, -- 101,70,105,108,101,76,111,97,100,101,114,114,239,0,0,0, -- 114,207,0,0,0,41,6,90,2,110,115,114,67,0,0,0, -- 90,8,112,97,116,104,110,97,109,101,90,9,99,112,97,116, -- 104,110,97,109,101,114,169,0,0,0,114,177,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,14, -- 95,102,105,120,95,117,112,95,109,111,100,117,108,101,199,4, -- 0,0,115,34,0,0,0,0,2,15,1,15,1,6,1,6, -- 1,12,1,12,1,18,2,18,1,6,1,24,1,3,1,10, -- 1,10,1,10,1,14,1,13,2,114,9,1,0,0,99,0, -- 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,64, -- 0,0,0,115,181,0,0,0,101,0,0,90,1,0,100,0, -- 0,90,2,0,100,1,0,90,3,0,101,4,0,100,2,0, -- 100,3,0,132,0,0,131,1,0,90,5,0,101,6,0,100, -- 4,0,100,4,0,100,5,0,100,6,0,132,2,0,131,1, -- 0,90,7,0,101,6,0,100,4,0,100,7,0,100,8,0, -- 132,1,0,131,1,0,90,8,0,101,6,0,101,9,0,100, -- 9,0,100,10,0,132,0,0,131,1,0,131,1,0,90,10, -- 0,101,6,0,101,9,0,100,11,0,100,12,0,132,0,0, -- 131,1,0,131,1,0,90,11,0,101,6,0,101,9,0,100, -- 13,0,100,14,0,132,0,0,131,1,0,131,1,0,90,12, -- 0,101,6,0,101,9,0,100,15,0,100,16,0,132,0,0, -- 131,1,0,131,1,0,90,13,0,100,4,0,83,41,17,218, -- 15,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 122,144,77,101,116,97,32,112,97,116,104,32,105,109,112,111, -- 114,116,32,102,111,114,32,98,117,105,108,116,45,105,110,32, -- 109,111,100,117,108,101,115,46,10,10,32,32,32,32,65,108, -- 108,32,109,101,116,104,111,100,115,32,97,114,101,32,101,105, -- 116,104,101,114,32,99,108,97,115,115,32,111,114,32,115,116, -- 97,116,105,99,32,109,101,116,104,111,100,115,32,116,111,32, -- 97,118,111,105,100,32,116,104,101,32,110,101,101,100,32,116, -- 111,10,32,32,32,32,105,110,115,116,97,110,116,105,97,116, -- 101,32,116,104,101,32,99,108,97,115,115,46,10,10,32,32, -- 32,32,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, -- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,122,115, -- 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, -- 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, -- 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, -- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -- 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, -- 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, -- 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, -- 32,32,32,122,24,60,109,111,100,117,108,101,32,123,33,114, -- 125,32,40,98,117,105,108,116,45,105,110,41,62,41,2,114, -- 47,0,0,0,114,57,0,0,0,41,1,114,179,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 205,0,0,0,233,4,0,0,115,2,0,0,0,0,7,122, -- 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,0, -- 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0, -- 0,0,115,58,0,0,0,124,2,0,100,0,0,107,9,0, -- 114,16,0,100,0,0,83,116,0,0,106,1,0,124,1,0, -- 131,1,0,114,50,0,116,2,0,124,1,0,124,0,0,100, -- 1,0,100,2,0,131,2,1,83,100,0,0,83,100,0,0, -- 83,41,3,78,114,217,0,0,0,122,8,98,117,105,108,116, -- 45,105,110,41,3,114,106,0,0,0,90,10,105,115,95,98, -- 117,105,108,116,105,110,114,173,0,0,0,41,4,218,3,99, -- 108,115,114,158,0,0,0,114,35,0,0,0,218,6,116,97, -- 114,103,101,116,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,242,4, -- 0,0,115,10,0,0,0,0,2,12,1,4,1,15,1,19, -- 2,122,25,66,117,105,108,116,105,110,73,109,112,111,114,116, -- 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, -- 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, -- 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, -- 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,9, -- 0,114,37,0,124,3,0,106,1,0,83,100,1,0,83,41, -- 2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, -- 116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,32, -- 105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,101, -- 100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,99, -- 104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, -- 97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,32, -- 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, -- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, -- 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, -- 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -- 32,32,78,41,2,114,13,1,0,0,114,169,0,0,0,41, -- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108, -- 101,251,4,0,0,115,4,0,0,0,0,9,18,1,122,27, -- 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, -- 102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,3,0,0,0,10,0,0,0,67,0,0,0, -- 115,59,0,0,0,116,0,0,124,1,0,131,1,0,143,23, -- 0,1,116,1,0,116,2,0,106,3,0,124,1,0,131,2, -- 0,125,2,0,87,100,1,0,81,88,124,0,0,124,2,0, -- 95,4,0,100,2,0,124,2,0,95,5,0,124,2,0,83, -- 41,3,122,23,76,111,97,100,32,97,32,98,117,105,108,116, -- 45,105,110,32,109,111,100,117,108,101,46,78,114,30,0,0, -- 0,41,6,114,69,0,0,0,114,114,0,0,0,114,106,0, -- 0,0,90,12,105,110,105,116,95,98,117,105,108,116,105,110, -- 114,204,0,0,0,114,250,0,0,0,41,3,114,11,1,0, -- 0,114,158,0,0,0,114,179,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,7, -- 5,0,0,115,10,0,0,0,0,6,13,1,24,1,9,1, -- 9,1,122,27,66,117,105,108,116,105,110,73,109,112,111,114, -- 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, -+ 0,67,0,0,0,115,158,0,0,0,124,0,0,106,0,0, -+ 100,0,0,107,8,0,114,151,0,124,0,0,106,1,0,100, -+ 0,0,107,9,0,114,151,0,124,0,0,106,2,0,114,151, -+ 0,124,0,0,106,1,0,125,1,0,124,1,0,106,3,0, -+ 116,4,0,116,5,0,131,1,0,131,1,0,114,112,0,121, -+ 19,0,116,6,0,124,1,0,131,1,0,124,0,0,95,0, -+ 0,87,113,145,0,4,116,7,0,107,10,0,114,108,0,1, -+ 1,1,89,113,145,0,88,113,148,0,124,1,0,106,3,0, -+ 116,4,0,116,8,0,131,1,0,131,1,0,114,148,0,124, -+ 1,0,124,0,0,95,0,0,113,148,0,113,151,0,110,0, -+ 0,124,0,0,106,0,0,83,41,1,78,41,9,114,223,0, -+ 0,0,114,218,0,0,0,114,222,0,0,0,218,8,101,110, -+ 100,115,119,105,116,104,218,5,116,117,112,108,101,114,135,0, -+ 0,0,114,133,0,0,0,114,125,0,0,0,218,17,66,89, -+ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,41, -+ 2,114,72,0,0,0,114,132,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,226,0,0,0,56, -+ 3,0,0,115,22,0,0,0,0,2,15,1,24,1,9,1, -+ 21,1,3,1,19,1,13,1,8,1,21,1,18,1,122,17, -+ 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101, -+ 100,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,13,0,0,0,124,1,0,124,0, -+ 0,95,0,0,100,0,0,83,41,1,78,41,1,114,223,0, -+ 0,0,41,2,114,72,0,0,0,114,226,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,226,0, -+ 0,0,70,3,0,0,115,2,0,0,0,0,2,99,1,0, -+ 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, -+ 0,0,115,46,0,0,0,124,0,0,106,0,0,100,1,0, -+ 107,8,0,114,35,0,124,0,0,106,1,0,106,2,0,100, -+ 2,0,131,1,0,100,3,0,25,83,124,0,0,106,1,0, -+ 83,100,1,0,83,41,4,122,32,84,104,101,32,110,97,109, -+ 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,39, -+ 115,32,112,97,114,101,110,116,46,78,114,117,0,0,0,114, -+ 85,0,0,0,41,3,114,221,0,0,0,114,68,0,0,0, -+ 114,33,0,0,0,41,1,114,72,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,6,112,97,114, -+ 101,110,116,74,3,0,0,115,6,0,0,0,0,3,15,1, -+ 20,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112, -+ 97,114,101,110,116,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,1,0,0,0,67,0,0,0,115,7,0,0,0,124, -+ 0,0,106,0,0,83,41,1,78,41,1,114,222,0,0,0, -+ 41,1,114,72,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,227,0,0,0,82,3,0,0,115, -+ 2,0,0,0,0,2,122,23,77,111,100,117,108,101,83,112, -+ 101,99,46,104,97,115,95,108,111,99,97,116,105,111,110,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,19,0,0,0,116,0,0,124,1,0,131, -+ 1,0,124,0,0,95,1,0,100,0,0,83,41,1,78,41, -+ 2,218,4,98,111,111,108,114,222,0,0,0,41,2,114,72, -+ 0,0,0,218,5,118,97,108,117,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,227,0,0,0,86,3, -+ 0,0,115,2,0,0,0,0,2,41,12,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, -+ 73,0,0,0,114,102,0,0,0,114,230,0,0,0,218,8, -+ 112,114,111,112,101,114,116,121,114,226,0,0,0,218,6,115, -+ 101,116,116,101,114,114,234,0,0,0,114,227,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,217,0,0,0,241,2,0,0,115,20,0,0, -+ 0,12,35,6,2,15,1,15,11,12,10,12,12,18,14,21, -+ 4,18,8,18,4,114,217,0,0,0,114,218,0,0,0,114, -+ 220,0,0,0,99,2,0,0,0,2,0,0,0,5,0,0, -+ 0,15,0,0,0,67,0,0,0,115,193,0,0,0,116,0, -+ 0,124,1,0,100,1,0,131,2,0,114,83,0,124,3,0, -+ 100,2,0,107,8,0,114,43,0,116,1,0,124,0,0,100, -+ 3,0,124,1,0,131,1,1,83,124,3,0,114,55,0,103, -+ 0,0,110,3,0,100,2,0,125,4,0,116,1,0,124,0, -+ 0,100,3,0,124,1,0,100,4,0,124,4,0,131,1,2, -+ 83,124,3,0,100,2,0,107,8,0,114,168,0,116,0,0, -+ 124,1,0,100,5,0,131,2,0,114,159,0,121,19,0,124, -+ 1,0,106,2,0,124,0,0,131,1,0,125,3,0,87,113, -+ 165,0,4,116,3,0,107,10,0,114,155,0,1,1,1,100, -+ 2,0,125,3,0,89,113,165,0,88,113,168,0,100,6,0, -+ 125,3,0,110,0,0,116,4,0,124,0,0,124,1,0,100, -+ 7,0,124,2,0,100,5,0,124,3,0,131,2,2,83,41, -+ 8,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, -+ 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, -+ 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, -+ 109,101,116,104,111,100,115,46,218,12,103,101,116,95,102,105, -+ 108,101,110,97,109,101,78,114,170,0,0,0,114,221,0,0, -+ 0,114,220,0,0,0,70,114,218,0,0,0,41,5,114,61, -+ 0,0,0,218,23,115,112,101,99,95,102,114,111,109,95,102, -+ 105,108,101,95,108,111,99,97,116,105,111,110,114,220,0,0, -+ 0,114,154,0,0,0,114,217,0,0,0,41,5,114,68,0, -+ 0,0,114,170,0,0,0,114,218,0,0,0,114,220,0,0, -+ 0,90,6,115,101,97,114,99,104,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,174,0,0,0,91,3,0, -+ 0,115,28,0,0,0,0,2,15,1,12,1,16,1,18,1, -+ 15,1,7,2,12,1,15,1,3,1,19,1,13,1,14,3, -+ 9,2,114,174,0,0,0,114,170,0,0,0,114,221,0,0, -+ 0,99,2,0,0,0,2,0,0,0,9,0,0,0,19,0, -+ 0,0,67,0,0,0,115,110,1,0,0,124,1,0,100,1, -+ 0,107,8,0,114,79,0,100,2,0,125,1,0,116,0,0, -+ 124,2,0,100,3,0,131,2,0,114,79,0,121,19,0,124, -+ 2,0,106,1,0,124,0,0,131,1,0,125,1,0,87,113, -+ 76,0,4,116,2,0,107,10,0,114,72,0,1,1,1,89, -+ 113,76,0,88,113,79,0,110,0,0,116,3,0,124,0,0, -+ 124,2,0,100,4,0,124,1,0,131,2,1,125,4,0,100, -+ 5,0,124,4,0,95,4,0,124,2,0,100,1,0,107,8, -+ 0,114,203,0,120,79,0,116,5,0,131,0,0,68,93,61, -+ 0,92,2,0,125,5,0,125,6,0,124,1,0,106,6,0, -+ 116,7,0,124,6,0,131,1,0,131,1,0,114,131,0,124, -+ 5,0,124,0,0,124,1,0,131,2,0,125,2,0,124,2, -+ 0,124,4,0,95,8,0,80,113,131,0,113,131,0,87,100, -+ 1,0,83,110,0,0,124,3,0,116,9,0,107,8,0,114, -+ 38,1,116,0,0,124,2,0,100,6,0,131,2,0,114,47, -+ 1,121,19,0,124,2,0,106,10,0,124,0,0,131,1,0, -+ 125,7,0,87,110,18,0,4,116,2,0,107,10,0,114,13, -+ 1,1,1,1,89,113,35,1,88,124,7,0,114,35,1,103, -+ 0,0,124,4,0,95,11,0,113,35,1,113,47,1,110,9, -+ 0,124,3,0,124,4,0,95,11,0,124,4,0,106,11,0, -+ 103,0,0,107,2,0,114,106,1,124,1,0,114,106,1,116, -+ 12,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, -+ 4,0,106,11,0,106,13,0,124,8,0,131,1,0,1,113, -+ 106,1,110,0,0,124,4,0,83,41,8,97,61,1,0,0, -+ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, -+ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, -+ 102,105,108,101,32,108,111,99,97,116,105,111,110,46,10,10, -+ 32,32,32,32,84,111,32,105,110,100,105,99,97,116,101,32, -+ 116,104,97,116,32,116,104,101,32,109,111,100,117,108,101,32, -+ 105,115,32,97,32,112,97,99,107,97,103,101,44,32,115,101, -+ 116,10,32,32,32,32,115,117,98,109,111,100,117,108,101,95, -+ 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, -+ 32,116,111,32,97,32,108,105,115,116,32,111,102,32,100,105, -+ 114,101,99,116,111,114,121,32,112,97,116,104,115,46,32,32, -+ 65,110,10,32,32,32,32,101,109,112,116,121,32,108,105,115, -+ 116,32,105,115,32,115,117,102,102,105,99,105,101,110,116,44, -+ 32,116,104,111,117,103,104,32,105,116,115,32,110,111,116,32, -+ 111,116,104,101,114,119,105,115,101,32,117,115,101,102,117,108, -+ 32,116,111,32,116,104,101,10,32,32,32,32,105,109,112,111, -+ 114,116,32,115,121,115,116,101,109,46,10,10,32,32,32,32, -+ 84,104,101,32,108,111,97,100,101,114,32,109,117,115,116,32, -+ 116,97,107,101,32,97,32,115,112,101,99,32,97,115,32,105, -+ 116,115,32,111,110,108,121,32,95,95,105,110,105,116,95,95, -+ 40,41,32,97,114,103,46,10,10,32,32,32,32,78,122,9, -+ 60,117,110,107,110,111,119,110,62,114,239,0,0,0,114,218, -+ 0,0,0,84,114,220,0,0,0,114,85,0,0,0,41,14, -+ 114,61,0,0,0,114,239,0,0,0,114,154,0,0,0,114, -+ 217,0,0,0,114,222,0,0,0,218,27,95,103,101,116,95, -+ 115,117,112,112,111,114,116,101,100,95,102,105,108,101,95,108, -+ 111,97,100,101,114,115,114,231,0,0,0,114,232,0,0,0, -+ 114,170,0,0,0,218,9,95,80,79,80,85,76,65,84,69, -+ 114,220,0,0,0,114,221,0,0,0,114,39,0,0,0,114, -+ 224,0,0,0,41,9,114,68,0,0,0,218,8,108,111,99, -+ 97,116,105,111,110,114,170,0,0,0,114,221,0,0,0,114, -+ 178,0,0,0,218,12,108,111,97,100,101,114,95,99,108,97, -+ 115,115,114,128,0,0,0,114,220,0,0,0,90,7,100,105, -+ 114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,240,0,0,0,116,3,0,0,115,60,0, -+ 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, -+ 11,8,21,1,9,3,12,1,22,1,21,1,15,1,9,1, -+ 8,2,7,3,12,2,15,1,3,1,19,1,13,1,5,2, -+ 6,1,18,2,9,1,15,1,6,1,16,1,22,2,114,240, -+ 0,0,0,99,3,0,0,0,0,0,0,0,8,0,0,0, -+ 53,0,0,0,67,0,0,0,115,124,1,0,0,121,13,0, -+ 124,0,0,106,0,0,125,3,0,87,110,18,0,4,116,1, -+ 0,107,10,0,114,33,0,1,1,1,89,110,17,0,88,124, -+ 3,0,100,0,0,107,9,0,114,50,0,124,3,0,83,124, -+ 0,0,106,2,0,125,4,0,124,1,0,100,0,0,107,8, -+ 0,114,108,0,121,13,0,124,0,0,106,3,0,125,1,0, -+ 87,113,108,0,4,116,1,0,107,10,0,114,104,0,1,1, -+ 1,89,113,108,0,88,110,0,0,121,13,0,124,0,0,106, -+ 4,0,125,5,0,87,110,24,0,4,116,1,0,107,10,0, -+ 114,147,0,1,1,1,100,0,0,125,5,0,89,110,1,0, -+ 88,124,2,0,100,0,0,107,8,0,114,224,0,124,5,0, -+ 100,0,0,107,8,0,114,215,0,121,13,0,124,1,0,106, -+ 5,0,125,2,0,87,113,221,0,4,116,1,0,107,10,0, -+ 114,211,0,1,1,1,100,0,0,125,2,0,89,113,221,0, -+ 88,113,224,0,124,5,0,125,2,0,110,0,0,121,13,0, -+ 124,0,0,106,6,0,125,6,0,87,110,24,0,4,116,1, -+ 0,107,10,0,114,7,1,1,1,1,100,0,0,125,6,0, -+ 89,110,1,0,88,121,19,0,116,7,0,124,0,0,106,8, -+ 0,131,1,0,125,7,0,87,110,24,0,4,116,1,0,107, -+ 10,0,114,53,1,1,1,1,100,0,0,125,7,0,89,110, -+ 1,0,88,116,9,0,124,4,0,124,1,0,100,1,0,124, -+ 2,0,131,2,1,125,3,0,124,5,0,100,0,0,107,8, -+ 0,114,93,1,100,2,0,110,3,0,100,3,0,124,3,0, -+ 95,10,0,124,6,0,124,3,0,95,11,0,124,7,0,124, -+ 3,0,95,12,0,124,3,0,83,41,4,78,114,218,0,0, -+ 0,70,84,41,13,114,209,0,0,0,114,210,0,0,0,114, -+ 58,0,0,0,114,205,0,0,0,114,211,0,0,0,90,7, -+ 95,79,82,73,71,73,78,218,10,95,95,99,97,99,104,101, -+ 100,95,95,218,4,108,105,115,116,218,8,95,95,112,97,116, -+ 104,95,95,114,217,0,0,0,114,222,0,0,0,114,226,0, -+ 0,0,114,221,0,0,0,41,8,114,180,0,0,0,114,170, -+ 0,0,0,114,218,0,0,0,114,178,0,0,0,114,68,0, -+ 0,0,114,243,0,0,0,114,226,0,0,0,114,221,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,17,95,115,112,101,99,95,102,114,111,109,95,109,111,100, -+ 117,108,101,180,3,0,0,115,72,0,0,0,0,2,3,1, -+ 13,1,13,1,5,2,12,1,4,2,9,1,12,1,3,1, -+ 13,1,13,2,8,1,3,1,13,1,13,1,11,1,12,1, -+ 12,1,3,1,13,1,13,1,14,2,9,1,3,1,13,1, -+ 13,1,11,1,3,1,19,1,13,1,11,2,21,1,27,1, -+ 9,1,9,1,114,248,0,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,6,0,0,0,64,0,0,0,115,142, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, -+ 0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0, -+ 100,7,0,100,8,0,100,9,0,100,10,0,100,11,0,132, -+ 0,2,90,6,0,100,12,0,100,13,0,132,0,0,90,7, -+ 0,100,14,0,100,15,0,132,0,0,90,8,0,100,16,0, -+ 100,17,0,132,0,0,90,9,0,100,18,0,100,19,0,132, -+ 0,0,90,10,0,100,20,0,100,21,0,132,0,0,90,11, -+ 0,100,22,0,100,23,0,132,0,0,90,12,0,100,24,0, -+ 83,41,25,114,175,0,0,0,122,77,67,111,110,118,101,110, -+ 105,101,110,99,101,32,119,114,97,112,112,101,114,32,97,114, -+ 111,117,110,100,32,115,112,101,99,32,111,98,106,101,99,116, -+ 115,32,116,111,32,112,114,111,118,105,100,101,32,115,112,101, -+ 99,45,115,112,101,99,105,102,105,99,10,32,32,32,32,109, -+ 101,116,104,111,100,115,46,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, -+ 0,124,1,0,124,0,0,95,0,0,100,0,0,83,41,1, -+ 78,41,1,114,178,0,0,0,41,2,114,72,0,0,0,114, -+ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,73,0,0,0,232,3,0,0,115,2,0,0, -+ 0,0,1,122,21,95,83,112,101,99,77,101,116,104,111,100, -+ 115,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, -+ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, -+ 158,0,0,0,124,0,0,106,0,0,125,1,0,124,1,0, -+ 106,1,0,100,1,0,107,8,0,114,30,0,100,2,0,110, -+ 6,0,124,1,0,106,1,0,125,2,0,124,1,0,106,2, -+ 0,100,1,0,107,8,0,114,104,0,124,1,0,106,3,0, -+ 100,1,0,107,8,0,114,82,0,100,3,0,106,4,0,124, -+ 2,0,131,1,0,83,100,4,0,106,4,0,124,2,0,124, -+ 1,0,106,3,0,131,2,0,83,110,50,0,124,1,0,106, -+ 5,0,114,132,0,100,5,0,106,4,0,124,2,0,124,1, -+ 0,106,2,0,131,2,0,83,100,6,0,106,4,0,124,1, -+ 0,106,1,0,124,1,0,106,2,0,131,2,0,83,100,1, -+ 0,83,41,7,122,38,82,101,116,117,114,110,32,116,104,101, -+ 32,114,101,112,114,32,116,111,32,117,115,101,32,102,111,114, -+ 32,116,104,101,32,109,111,100,117,108,101,46,78,114,207,0, -+ 0,0,122,13,60,109,111,100,117,108,101,32,123,33,114,125, -+ 62,122,20,60,109,111,100,117,108,101,32,123,33,114,125,32, -+ 40,123,33,114,125,41,62,122,23,60,109,111,100,117,108,101, -+ 32,123,33,114,125,32,102,114,111,109,32,123,33,114,125,62, -+ 122,18,60,109,111,100,117,108,101,32,123,33,114,125,32,40, -+ 123,125,41,62,41,6,114,178,0,0,0,114,68,0,0,0, -+ 114,218,0,0,0,114,170,0,0,0,114,48,0,0,0,114, -+ 227,0,0,0,41,3,114,72,0,0,0,114,178,0,0,0, -+ 114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,206,0,0,0,235,3,0,0,115,18,0, -+ 0,0,0,3,9,1,30,1,15,1,15,1,13,2,22,2, -+ 9,1,19,2,122,24,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,109,111,100,117,108,101,95,114,101,112,114,218,9, -+ 95,111,118,101,114,114,105,100,101,70,218,11,95,102,111,114, -+ 99,101,95,110,97,109,101,84,99,2,0,0,0,2,0,0, -+ 0,6,0,0,0,59,0,0,0,67,0,0,0,115,75,2, -+ 0,0,124,0,0,106,0,0,125,4,0,124,2,0,115,45, -+ 0,124,3,0,115,45,0,116,1,0,124,1,0,100,1,0, -+ 100,2,0,131,3,0,100,2,0,107,8,0,114,85,0,121, -+ 16,0,124,4,0,106,2,0,124,1,0,95,3,0,87,113, -+ 85,0,4,116,4,0,107,10,0,114,81,0,1,1,1,89, -+ 113,85,0,88,110,0,0,124,2,0,115,115,0,116,1,0, -+ 124,1,0,100,3,0,100,2,0,131,3,0,100,2,0,107, -+ 8,0,114,221,0,124,4,0,106,5,0,125,5,0,124,5, -+ 0,100,2,0,107,8,0,114,184,0,124,4,0,106,6,0, -+ 100,2,0,107,9,0,114,184,0,116,7,0,106,8,0,116, -+ 7,0,131,1,0,125,5,0,124,4,0,106,6,0,124,5, -+ 0,95,9,0,113,184,0,110,0,0,121,13,0,124,5,0, -+ 124,1,0,95,10,0,87,113,221,0,4,116,4,0,107,10, -+ 0,114,217,0,1,1,1,89,113,221,0,88,110,0,0,124, -+ 2,0,115,251,0,116,1,0,124,1,0,100,4,0,100,2, -+ 0,131,3,0,100,2,0,107,8,0,114,35,1,121,16,0, -+ 124,4,0,106,11,0,124,1,0,95,12,0,87,113,35,1, -+ 4,116,4,0,107,10,0,114,31,1,1,1,1,89,113,35, -+ 1,88,110,0,0,121,13,0,124,4,0,124,1,0,95,13, -+ 0,87,110,18,0,4,116,4,0,107,10,0,114,68,1,1, -+ 1,1,89,110,1,0,88,124,2,0,115,99,1,116,1,0, -+ 124,1,0,100,5,0,100,2,0,131,3,0,100,2,0,107, -+ 8,0,114,157,1,124,4,0,106,6,0,100,2,0,107,9, -+ 0,114,157,1,121,16,0,124,4,0,106,6,0,124,1,0, -+ 95,14,0,87,113,154,1,4,116,4,0,107,10,0,114,150, -+ 1,1,1,1,89,113,154,1,88,113,157,1,110,0,0,124, -+ 4,0,106,15,0,114,71,2,124,2,0,115,196,1,116,1, -+ 0,124,1,0,100,6,0,100,2,0,131,3,0,100,2,0, -+ 107,8,0,114,236,1,121,16,0,124,4,0,106,16,0,124, -+ 1,0,95,17,0,87,113,236,1,4,116,4,0,107,10,0, -+ 114,232,1,1,1,1,89,113,236,1,88,110,0,0,124,2, -+ 0,115,10,2,116,1,0,124,1,0,100,7,0,100,2,0, -+ 131,3,0,100,2,0,107,8,0,114,71,2,124,4,0,106, -+ 18,0,100,2,0,107,9,0,114,68,2,121,16,0,124,4, -+ 0,106,18,0,124,1,0,95,19,0,87,113,65,2,4,116, -+ 4,0,107,10,0,114,61,2,1,1,1,89,113,65,2,88, -+ 113,68,2,113,71,2,110,0,0,100,2,0,83,41,8,97, -+ 29,2,0,0,83,101,116,32,116,104,101,32,109,111,100,117, -+ 108,101,39,115,32,97,116,116,114,105,98,117,116,101,115,46, -+ 10,10,32,32,32,32,32,32,32,32,65,108,108,32,109,105, -+ 115,115,105,110,103,32,105,109,112,111,114,116,45,114,101,108, -+ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, -+ 105,98,117,116,101,115,32,119,105,108,108,32,98,101,32,115, -+ 101,116,46,32,32,72,101,114,101,10,32,32,32,32,32,32, -+ 32,32,105,115,32,104,111,119,32,116,104,101,32,115,112,101, -+ 99,32,97,116,116,114,105,98,117,116,101,115,32,109,97,112, -+ 32,111,110,116,111,32,116,104,101,32,109,111,100,117,108,101, -+ 58,10,10,32,32,32,32,32,32,32,32,115,112,101,99,46, -+ 110,97,109,101,32,45,62,32,109,111,100,117,108,101,46,95, -+ 95,110,97,109,101,95,95,10,32,32,32,32,32,32,32,32, -+ 115,112,101,99,46,108,111,97,100,101,114,32,45,62,32,109, -+ 111,100,117,108,101,46,95,95,108,111,97,100,101,114,95,95, -+ 10,32,32,32,32,32,32,32,32,115,112,101,99,46,112,97, -+ 114,101,110,116,32,45,62,32,109,111,100,117,108,101,46,95, -+ 95,112,97,99,107,97,103,101,95,95,10,32,32,32,32,32, -+ 32,32,32,115,112,101,99,32,45,62,32,109,111,100,117,108, -+ 101,46,95,95,115,112,101,99,95,95,10,10,32,32,32,32, -+ 32,32,32,32,79,112,116,105,111,110,97,108,58,10,32,32, -+ 32,32,32,32,32,32,115,112,101,99,46,111,114,105,103,105, -+ 110,32,45,62,32,109,111,100,117,108,101,46,95,95,102,105, -+ 108,101,95,95,32,40,105,102,32,115,112,101,99,46,115,101, -+ 116,95,102,105,108,101,97,116,116,114,32,105,115,32,116,114, -+ 117,101,41,10,32,32,32,32,32,32,32,32,115,112,101,99, -+ 46,99,97,99,104,101,100,32,45,62,32,109,111,100,117,108, -+ 101,46,95,95,99,97,99,104,101,100,95,95,32,40,105,102, -+ 32,95,95,102,105,108,101,95,95,32,97,108,115,111,32,115, -+ 101,116,41,10,32,32,32,32,32,32,32,32,115,112,101,99, -+ 46,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, -+ 104,95,108,111,99,97,116,105,111,110,115,32,45,62,32,109, -+ 111,100,117,108,101,46,95,95,112,97,116,104,95,95,32,40, -+ 105,102,32,115,101,116,41,10,10,32,32,32,32,32,32,32, -+ 32,114,58,0,0,0,78,114,205,0,0,0,218,11,95,95, -+ 112,97,99,107,97,103,101,95,95,114,247,0,0,0,114,211, -+ 0,0,0,114,245,0,0,0,41,20,114,178,0,0,0,114, -+ 63,0,0,0,114,68,0,0,0,114,58,0,0,0,114,210, -+ 0,0,0,114,170,0,0,0,114,221,0,0,0,218,16,95, -+ 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,218, -+ 7,95,95,110,101,119,95,95,218,5,95,112,97,116,104,114, -+ 205,0,0,0,114,234,0,0,0,114,251,0,0,0,114,209, -+ 0,0,0,114,247,0,0,0,114,227,0,0,0,114,218,0, -+ 0,0,114,211,0,0,0,114,226,0,0,0,114,245,0,0, -+ 0,41,6,114,72,0,0,0,114,180,0,0,0,114,249,0, -+ 0,0,114,250,0,0,0,114,178,0,0,0,114,170,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,17,105,110,105,116,95,109,111,100,117,108,101,95,97,116, -+ 116,114,115,251,3,0,0,115,88,0,0,0,0,17,9,6, -+ 12,1,24,1,3,1,16,1,13,1,8,3,30,1,9,1, -+ 12,2,15,1,15,1,18,1,3,1,13,1,13,1,8,3, -+ 30,1,3,1,16,1,13,1,8,3,3,1,13,1,13,1, -+ 5,3,30,1,15,1,3,1,16,1,13,1,11,2,9,2, -+ 30,1,3,1,16,1,13,1,8,3,30,1,15,1,3,1, -+ 16,1,13,1,122,30,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,105,110,105,116,95,109,111,100,117,108,101,95,97, -+ 116,116,114,115,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,3,0,0,0,67,0,0,0,115,101,0,0,0,124,0, -+ 0,106,0,0,125,1,0,116,1,0,124,1,0,106,2,0, -+ 100,1,0,131,2,0,114,48,0,124,1,0,106,2,0,106, -+ 3,0,124,1,0,131,1,0,125,2,0,110,6,0,100,2, -+ 0,125,2,0,124,2,0,100,2,0,107,8,0,114,84,0, -+ 116,4,0,124,1,0,106,5,0,131,1,0,125,2,0,110, -+ 0,0,124,0,0,106,6,0,124,2,0,131,1,0,1,124, -+ 2,0,83,41,3,122,153,82,101,116,117,114,110,32,97,32, -+ 110,101,119,32,109,111,100,117,108,101,32,116,111,32,98,101, -+ 32,108,111,97,100,101,100,46,10,10,32,32,32,32,32,32, -+ 32,32,84,104,101,32,105,109,112,111,114,116,45,114,101,108, -+ 97,116,101,100,32,109,111,100,117,108,101,32,97,116,116,114, -+ 105,98,117,116,101,115,32,97,114,101,32,97,108,115,111,32, -+ 115,101,116,32,119,105,116,104,32,116,104,101,10,32,32,32, -+ 32,32,32,32,32,97,112,112,114,111,112,114,105,97,116,101, -+ 32,118,97,108,117,101,115,32,102,114,111,109,32,116,104,101, -+ 32,115,112,101,99,46,10,10,32,32,32,32,32,32,32,32, -+ 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,78, -+ 41,7,114,178,0,0,0,114,61,0,0,0,114,170,0,0, -+ 0,114,0,1,0,0,114,69,0,0,0,114,68,0,0,0, -+ 114,255,0,0,0,41,3,114,72,0,0,0,114,178,0,0, -+ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,6,99,114,101,97,116,101,75,4,0, -+ 0,115,16,0,0,0,0,7,9,2,18,3,21,2,6,1, -+ 12,4,18,1,13,1,122,19,95,83,112,101,99,77,101,116, -+ 104,111,100,115,46,99,114,101,97,116,101,99,2,0,0,0, -+ 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -+ 115,23,0,0,0,124,0,0,106,0,0,106,1,0,106,2, -+ 0,124,1,0,131,1,0,1,100,1,0,83,41,2,122,189, -+ 68,111,32,101,118,101,114,121,116,104,105,110,103,32,110,101, -+ 99,101,115,115,97,114,121,32,116,111,32,101,120,101,99,117, -+ 116,101,32,116,104,101,32,109,111,100,117,108,101,46,10,10, -+ 32,32,32,32,32,32,32,32,84,104,101,32,110,97,109,101, -+ 115,112,97,99,101,32,111,102,32,96,109,111,100,117,108,101, -+ 96,32,105,115,32,117,115,101,100,32,97,115,32,116,104,101, -+ 32,116,97,114,103,101,116,32,111,102,32,101,120,101,99,117, -+ 116,105,111,110,46,10,32,32,32,32,32,32,32,32,84,104, -+ 105,115,32,109,101,116,104,111,100,32,117,115,101,115,32,116, -+ 104,101,32,108,111,97,100,101,114,39,115,32,96,101,120,101, -+ 99,95,109,111,100,117,108,101,40,41,96,32,109,101,116,104, -+ 111,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, -+ 114,178,0,0,0,114,170,0,0,0,218,11,101,120,101,99, -+ 95,109,111,100,117,108,101,41,2,114,72,0,0,0,114,180, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,5,95,101,120,101,99,98,4,0,0,115,2,0, -+ 0,0,0,7,122,18,95,83,112,101,99,77,101,116,104,111, -+ 100,115,46,95,101,120,101,99,99,2,0,0,0,0,0,0, -+ 0,4,0,0,0,11,0,0,0,67,0,0,0,115,17,1, -+ 0,0,124,0,0,106,0,0,106,1,0,125,2,0,116,2, -+ 0,106,3,0,131,0,0,1,116,4,0,124,2,0,131,1, -+ 0,143,226,0,1,116,5,0,106,6,0,106,7,0,124,2, -+ 0,131,1,0,124,1,0,107,9,0,114,95,0,100,1,0, -+ 106,8,0,124,2,0,131,1,0,125,3,0,116,9,0,124, -+ 3,0,100,2,0,124,2,0,131,1,1,130,1,0,110,0, -+ 0,124,0,0,106,0,0,106,10,0,100,3,0,107,8,0, -+ 114,181,0,124,0,0,106,0,0,106,11,0,100,3,0,107, -+ 8,0,114,158,0,116,9,0,100,4,0,100,2,0,124,0, -+ 0,106,0,0,106,1,0,131,1,1,130,1,0,110,0,0, -+ 124,0,0,106,12,0,124,1,0,100,5,0,100,6,0,131, -+ 1,1,1,124,1,0,83,124,0,0,106,12,0,124,1,0, -+ 100,5,0,100,6,0,131,1,1,1,116,13,0,124,0,0, -+ 106,0,0,106,10,0,100,7,0,131,2,0,115,243,0,124, -+ 0,0,106,0,0,106,10,0,106,14,0,124,2,0,131,1, -+ 0,1,110,13,0,124,0,0,106,15,0,124,1,0,131,1, -+ 0,1,87,100,3,0,81,88,116,5,0,106,6,0,124,2, -+ 0,25,83,41,8,122,51,69,120,101,99,117,116,101,32,116, -+ 104,101,32,115,112,101,99,32,105,110,32,97,110,32,101,120, -+ 105,115,116,105,110,103,32,109,111,100,117,108,101,39,115,32, -+ 110,97,109,101,115,112,97,99,101,46,122,30,109,111,100,117, -+ 108,101,32,123,33,114,125,32,110,111,116,32,105,110,32,115, -+ 121,115,46,109,111,100,117,108,101,115,114,68,0,0,0,78, -+ 122,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, -+ 114,249,0,0,0,84,114,2,1,0,0,41,16,114,178,0, -+ 0,0,114,68,0,0,0,114,107,0,0,0,218,12,97,99, -+ 113,117,105,114,101,95,108,111,99,107,114,104,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,114,94,0,0,0,114,48, -+ 0,0,0,114,154,0,0,0,114,170,0,0,0,114,221,0, -+ 0,0,114,255,0,0,0,114,61,0,0,0,218,11,108,111, -+ 97,100,95,109,111,100,117,108,101,114,3,1,0,0,41,4, -+ 114,72,0,0,0,114,180,0,0,0,114,68,0,0,0,114, -+ 172,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,176,0,0,0,108,4,0,0,115,32,0,0, -+ 0,0,2,12,1,10,1,13,1,24,1,15,1,21,1,18, -+ 1,18,1,27,2,19,1,4,1,19,1,21,4,22,2,19, -+ 1,122,17,95,83,112,101,99,77,101,116,104,111,100,115,46, -+ 101,120,101,99,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,27,0,0,0,67,0,0,0,115,24,1,0,0,124,0, -+ 0,106,0,0,125,1,0,124,1,0,106,1,0,106,2,0, -+ 124,1,0,106,3,0,131,1,0,1,116,4,0,106,5,0, -+ 124,1,0,106,3,0,25,125,2,0,116,6,0,124,2,0, -+ 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, -+ 108,0,121,16,0,124,1,0,106,1,0,124,2,0,95,7, -+ 0,87,113,108,0,4,116,8,0,107,10,0,114,104,0,1, -+ 1,1,89,113,108,0,88,110,0,0,116,6,0,124,2,0, -+ 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, -+ 215,0,121,59,0,124,2,0,106,9,0,124,2,0,95,10, -+ 0,116,11,0,124,2,0,100,3,0,131,2,0,115,190,0, -+ 124,1,0,106,3,0,106,12,0,100,4,0,131,1,0,100, -+ 5,0,25,124,2,0,95,10,0,110,0,0,87,113,215,0, -+ 4,116,8,0,107,10,0,114,211,0,1,1,1,89,113,215, -+ 0,88,110,0,0,116,6,0,124,2,0,100,6,0,100,0, -+ 0,131,3,0,100,0,0,107,8,0,114,20,1,121,13,0, -+ 124,1,0,124,2,0,95,13,0,87,113,20,1,4,116,8, -+ 0,107,10,0,114,16,1,1,1,1,89,113,20,1,88,110, -+ 0,0,124,2,0,83,41,7,78,114,205,0,0,0,114,251, -+ 0,0,0,114,247,0,0,0,114,117,0,0,0,114,85,0, -+ 0,0,114,209,0,0,0,41,14,114,178,0,0,0,114,170, -+ 0,0,0,114,5,1,0,0,114,68,0,0,0,114,8,0, -+ 0,0,114,74,0,0,0,114,63,0,0,0,114,205,0,0, -+ 0,114,210,0,0,0,114,58,0,0,0,114,251,0,0,0, -+ 114,61,0,0,0,114,33,0,0,0,114,209,0,0,0,41, -+ 3,114,72,0,0,0,114,178,0,0,0,114,180,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,218, -+ 25,95,108,111,97,100,95,98,97,99,107,119,97,114,100,95, -+ 99,111,109,112,97,116,105,98,108,101,132,4,0,0,115,42, -+ 0,0,0,0,4,9,1,19,2,16,1,24,1,3,1,16, -+ 1,13,1,8,1,24,1,3,4,12,1,15,1,32,1,13, -+ 1,8,1,24,1,3,1,13,1,13,1,8,1,122,38,95, -+ 83,112,101,99,77,101,116,104,111,100,115,46,95,108,111,97, -+ 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, -+ 116,105,98,108,101,99,1,0,0,0,0,0,0,0,2,0, -+ 0,0,11,0,0,0,67,0,0,0,115,179,0,0,0,124, -+ 0,0,106,0,0,106,1,0,100,0,0,107,9,0,114,52, -+ 0,116,2,0,124,0,0,106,0,0,106,1,0,100,1,0, -+ 131,2,0,115,52,0,124,0,0,106,3,0,131,0,0,83, -+ 110,0,0,124,0,0,106,4,0,131,0,0,125,1,0,116, -+ 5,0,124,1,0,131,1,0,143,84,0,1,124,0,0,106, -+ 0,0,106,1,0,100,0,0,107,8,0,114,143,0,124,0, -+ 0,106,0,0,106,6,0,100,0,0,107,8,0,114,156,0, -+ 116,7,0,100,2,0,100,3,0,124,0,0,106,0,0,106, -+ 8,0,131,1,1,130,1,0,113,156,0,110,13,0,124,0, -+ 0,106,9,0,124,1,0,131,1,0,1,87,100,0,0,81, -+ 88,116,10,0,106,11,0,124,0,0,106,0,0,106,8,0, -+ 25,83,41,4,78,114,2,1,0,0,122,14,109,105,115,115, -+ 105,110,103,32,108,111,97,100,101,114,114,68,0,0,0,41, -+ 12,114,178,0,0,0,114,170,0,0,0,114,61,0,0,0, -+ 114,6,1,0,0,114,1,1,0,0,114,213,0,0,0,114, -+ 221,0,0,0,114,154,0,0,0,114,68,0,0,0,114,3, -+ 1,0,0,114,8,0,0,0,114,74,0,0,0,41,2,114, -+ 72,0,0,0,114,180,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,14,95,108,111,97,100,95, -+ 117,110,108,111,99,107,101,100,162,4,0,0,115,20,0,0, -+ 0,0,2,18,2,21,1,13,2,12,1,13,1,18,1,18, -+ 1,30,3,19,5,122,27,95,83,112,101,99,77,101,116,104, -+ 111,100,115,46,95,108,111,97,100,95,117,110,108,111,99,107, -+ 101,100,99,1,0,0,0,0,0,0,0,1,0,0,0,8, -+ 0,0,0,67,0,0,0,115,49,0,0,0,116,0,0,106, -+ 1,0,131,0,0,1,116,2,0,124,0,0,106,3,0,106, -+ 4,0,131,1,0,143,15,0,1,124,0,0,106,5,0,131, -+ 0,0,83,87,100,1,0,81,88,100,1,0,83,41,2,122, -+ 207,82,101,116,117,114,110,32,97,32,110,101,119,32,109,111, -+ 100,117,108,101,32,111,98,106,101,99,116,44,32,108,111,97, -+ 100,101,100,32,98,121,32,116,104,101,32,115,112,101,99,39, -+ 115,32,108,111,97,100,101,114,46,10,10,32,32,32,32,32, -+ 32,32,32,84,104,101,32,109,111,100,117,108,101,32,105,115, -+ 32,110,111,116,32,97,100,100,101,100,32,116,111,32,105,116, -+ 115,32,112,97,114,101,110,116,46,10,10,32,32,32,32,32, -+ 32,32,32,73,102,32,97,32,109,111,100,117,108,101,32,105, -+ 115,32,97,108,114,101,97,100,121,32,105,110,32,115,121,115, -+ 46,109,111,100,117,108,101,115,44,32,116,104,97,116,32,101, -+ 120,105,115,116,105,110,103,32,109,111,100,117,108,101,32,103, -+ 101,116,115,10,32,32,32,32,32,32,32,32,99,108,111,98, -+ 98,101,114,101,100,46,10,10,32,32,32,32,32,32,32,32, -+ 78,41,6,114,107,0,0,0,114,4,1,0,0,114,104,0, -+ 0,0,114,178,0,0,0,114,68,0,0,0,114,7,1,0, -+ 0,41,1,114,72,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,177,0,0,0,185,4,0,0, -+ 115,6,0,0,0,0,9,10,1,19,1,122,17,95,83,112, -+ 101,99,77,101,116,104,111,100,115,46,108,111,97,100,78,41, -+ 13,114,58,0,0,0,114,57,0,0,0,114,59,0,0,0, -+ 114,60,0,0,0,114,73,0,0,0,114,206,0,0,0,114, -+ 255,0,0,0,114,1,1,0,0,114,3,1,0,0,114,176, -+ 0,0,0,114,6,1,0,0,114,7,1,0,0,114,177,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,175,0,0,0,225,3,0,0,115, -+ 20,0,0,0,12,3,6,4,12,3,12,16,24,80,12,23, -+ 12,10,12,24,12,30,12,23,114,175,0,0,0,99,4,0, -+ 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, -+ 0,0,115,201,0,0,0,124,0,0,106,0,0,100,1,0, -+ 131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,131, -+ 1,0,125,5,0,124,4,0,115,102,0,124,5,0,114,54, -+ 0,124,5,0,106,1,0,125,4,0,113,102,0,124,2,0, -+ 124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,124, -+ 2,0,131,2,0,125,4,0,113,102,0,116,3,0,124,1, -+ 0,124,2,0,131,2,0,125,4,0,110,0,0,124,5,0, -+ 115,132,0,116,4,0,124,1,0,124,2,0,100,3,0,124, -+ 4,0,131,2,1,125,5,0,110,0,0,121,44,0,124,5, -+ 0,124,0,0,100,2,0,60,124,4,0,124,0,0,100,1, -+ 0,60,124,2,0,124,0,0,100,4,0,60,124,3,0,124, -+ 0,0,100,5,0,60,87,110,18,0,4,116,5,0,107,10, -+ 0,114,196,0,1,1,1,89,110,1,0,88,100,0,0,83, -+ 41,6,78,114,205,0,0,0,114,209,0,0,0,114,170,0, -+ 0,0,114,211,0,0,0,114,245,0,0,0,41,6,114,94, -+ 0,0,0,114,170,0,0,0,218,20,83,111,117,114,99,101, -+ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,218,16, -+ 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, -+ 114,240,0,0,0,114,208,0,0,0,41,6,90,2,110,115, -+ 114,68,0,0,0,90,8,112,97,116,104,110,97,109,101,90, -+ 9,99,112,97,116,104,110,97,109,101,114,170,0,0,0,114, -+ 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,14,95,102,105,120,95,117,112,95,109,111,100, -+ 117,108,101,199,4,0,0,115,34,0,0,0,0,2,15,1, -+ 15,1,6,1,6,1,12,1,12,1,18,2,18,1,6,1, -+ 24,1,3,1,10,1,10,1,10,1,14,1,13,2,114,10, -+ 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -+ 5,0,0,0,64,0,0,0,115,181,0,0,0,101,0,0, -+ 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,101, -+ 4,0,100,2,0,100,3,0,132,0,0,131,1,0,90,5, -+ 0,101,6,0,100,4,0,100,4,0,100,5,0,100,6,0, -+ 132,2,0,131,1,0,90,7,0,101,6,0,100,4,0,100, -+ 7,0,100,8,0,132,1,0,131,1,0,90,8,0,101,6, -+ 0,101,9,0,100,9,0,100,10,0,132,0,0,131,1,0, -+ 131,1,0,90,10,0,101,6,0,101,9,0,100,11,0,100, -+ 12,0,132,0,0,131,1,0,131,1,0,90,11,0,101,6, -+ 0,101,9,0,100,13,0,100,14,0,132,0,0,131,1,0, -+ 131,1,0,90,12,0,101,6,0,101,9,0,100,15,0,100, -+ 16,0,132,0,0,131,1,0,131,1,0,90,13,0,100,4, -+ 0,83,41,17,218,15,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,122,144,77,101,116,97,32,112,97,116,104, -+ 32,105,109,112,111,114,116,32,102,111,114,32,98,117,105,108, -+ 116,45,105,110,32,109,111,100,117,108,101,115,46,10,10,32, -+ 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, -+ 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, -+ 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, -+ 115,32,116,111,32,97,118,111,105,100,32,116,104,101,32,110, -+ 101,101,100,32,116,111,10,32,32,32,32,105,110,115,116,97, -+ 110,116,105,97,116,101,32,116,104,101,32,99,108,97,115,115, -+ 46,10,10,32,32,32,32,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -+ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, -+ 83,41,2,122,115,82,101,116,117,114,110,32,114,101,112,114, -+ 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, -+ 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, -+ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, -+ 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, -+ 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, -+ 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, -+ 32,32,32,32,32,32,32,32,122,24,60,109,111,100,117,108, -+ 101,32,123,33,114,125,32,40,98,117,105,108,116,45,105,110, -+ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, -+ 114,180,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,206,0,0,0,233,4,0,0,115,2,0, -+ 0,0,0,7,122,27,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, -+ 114,78,99,4,0,0,0,0,0,0,0,4,0,0,0,5, -+ 0,0,0,67,0,0,0,115,58,0,0,0,124,2,0,100, -+ 0,0,107,9,0,114,16,0,100,0,0,83,116,0,0,106, -+ 1,0,124,1,0,131,1,0,114,50,0,116,2,0,124,1, -+ 0,124,0,0,100,1,0,100,2,0,131,2,1,83,100,0, -+ 0,83,100,0,0,83,41,3,78,114,218,0,0,0,122,8, -+ 98,117,105,108,116,45,105,110,41,3,114,107,0,0,0,90, -+ 10,105,115,95,98,117,105,108,116,105,110,114,174,0,0,0, -+ 41,4,218,3,99,108,115,114,159,0,0,0,114,36,0,0, -+ 0,218,6,116,97,114,103,101,116,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,9,102,105,110,100,95,115, -+ 112,101,99,242,4,0,0,115,10,0,0,0,0,2,12,1, -+ 4,1,15,1,19,2,122,25,66,117,105,108,116,105,110,73, -+ 109,112,111,114,116,101,114,46,102,105,110,100,95,115,112,101, -+ 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, -+ 0,0,67,0,0,0,115,41,0,0,0,124,0,0,106,0, -+ 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, -+ 100,1,0,107,9,0,114,37,0,124,3,0,106,1,0,83, -+ 100,1,0,83,41,2,122,175,70,105,110,100,32,116,104,101, -+ 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, -+ 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, -+ 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, -+ 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, -+ 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, -+ 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, -+ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, -+ 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, -+ 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, -+ 32,32,32,32,32,32,32,78,41,2,114,14,1,0,0,114, -+ 170,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,178,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,11,102,105,110,100,95, -+ 109,111,100,117,108,101,251,4,0,0,115,4,0,0,0,0, -+ 9,18,1,122,27,66,117,105,108,116,105,110,73,109,112,111, -+ 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,3,0,0,0,10,0,0, -+ 0,67,0,0,0,115,59,0,0,0,116,0,0,124,1,0, -+ 131,1,0,143,23,0,1,116,1,0,116,2,0,106,3,0, -+ 124,1,0,131,2,0,125,2,0,87,100,1,0,81,88,124, -+ 0,0,124,2,0,95,4,0,100,2,0,124,2,0,95,5, -+ 0,124,2,0,83,41,3,122,23,76,111,97,100,32,97,32, -+ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,46, -+ 78,114,31,0,0,0,41,6,114,70,0,0,0,114,115,0, -+ 0,0,114,107,0,0,0,90,12,105,110,105,116,95,98,117, -+ 105,108,116,105,110,114,205,0,0,0,114,251,0,0,0,41, -+ 3,114,12,1,0,0,114,159,0,0,0,114,180,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 5,1,0,0,7,5,0,0,115,10,0,0,0,0,6,13, -+ 1,24,1,9,1,9,1,122,27,66,117,105,108,116,105,110, -+ 73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,111, -+ 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -+ 0,83,41,2,122,57,82,101,116,117,114,110,32,78,111,110, -+ 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111, -+ 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118, -+ 101,32,99,111,100,101,32,111,98,106,101,99,116,115,46,78, -+ 114,5,0,0,0,41,2,114,12,1,0,0,114,159,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 218,8,103,101,116,95,99,111,100,101,19,5,0,0,115,2, -+ 0,0,0,0,4,122,24,66,117,105,108,116,105,110,73,109, -+ 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, - 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, -- 57,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, -+ 56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, -- 32,100,111,32,110,111,116,32,104,97,118,101,32,99,111,100, -- 101,32,111,98,106,101,99,116,115,46,78,114,4,0,0,0, -- 41,2,114,11,1,0,0,114,158,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,218,8,103,101,116, -- 95,99,111,100,101,19,5,0,0,115,2,0,0,0,0,4, -- 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, -- 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, -- 4,0,0,0,100,1,0,83,41,2,122,56,82,101,116,117, -- 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, -- 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, -- 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, -- 111,100,101,46,78,114,4,0,0,0,41,2,114,11,1,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, -- 101,25,5,0,0,115,2,0,0,0,0,4,122,26,66,117, -- 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, -- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, -+ 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, -+ 114,99,101,32,99,111,100,101,46,78,114,5,0,0,0,41, -+ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,218,10,103,101,116,95, -+ 115,111,117,114,99,101,25,5,0,0,115,2,0,0,0,0, -+ 4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, -+ 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, -+ 0,0,115,4,0,0,0,100,1,0,83,41,2,122,52,82, -+ 101,116,117,114,110,32,70,97,108,115,101,32,97,115,32,98, -+ 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, -+ 97,114,101,32,110,101,118,101,114,32,112,97,99,107,97,103, -+ 101,115,46,70,114,5,0,0,0,41,2,114,12,1,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,220,0,0,0,31,5,0,0,115,2,0, -+ 0,0,0,4,122,26,66,117,105,108,116,105,110,73,109,112, -+ 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, -+ 41,14,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,218,12,115,116,97,116,105,99,109,101, -+ 116,104,111,100,114,206,0,0,0,218,11,99,108,97,115,115, -+ 109,101,116,104,111,100,114,14,1,0,0,114,15,1,0,0, -+ 114,162,0,0,0,114,5,1,0,0,114,16,1,0,0,114, -+ 17,1,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,11,1, -+ 0,0,224,4,0,0,115,28,0,0,0,12,7,6,2,18, -+ 9,3,1,21,8,3,1,18,11,3,1,21,11,3,1,21, -+ 5,3,1,21,5,3,1,114,11,1,0,0,99,0,0,0, -+ 0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,0, -+ 0,115,193,0,0,0,101,0,0,90,1,0,100,0,0,90, -+ 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, -+ 0,132,0,0,131,1,0,90,5,0,101,6,0,100,4,0, -+ 100,4,0,100,5,0,100,6,0,132,2,0,131,1,0,90, -+ 7,0,101,6,0,100,4,0,100,7,0,100,8,0,132,1, -+ 0,131,1,0,90,8,0,101,4,0,100,9,0,100,10,0, -+ 132,0,0,131,1,0,90,9,0,101,6,0,100,11,0,100, -+ 12,0,132,0,0,131,1,0,90,10,0,101,6,0,101,11, -+ 0,100,13,0,100,14,0,132,0,0,131,1,0,131,1,0, -+ 90,12,0,101,6,0,101,11,0,100,15,0,100,16,0,132, -+ 0,0,131,1,0,131,1,0,90,13,0,101,6,0,101,11, -+ 0,100,17,0,100,18,0,132,0,0,131,1,0,131,1,0, -+ 90,14,0,100,4,0,83,41,19,218,14,70,114,111,122,101, -+ 110,73,109,112,111,114,116,101,114,122,142,77,101,116,97,32, -+ 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, -+ 102,114,111,122,101,110,32,109,111,100,117,108,101,115,46,10, -+ 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, -+ 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, -+ 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, -+ 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, -+ 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, -+ 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, -+ 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, -+ 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, -+ 1,0,83,41,2,122,115,82,101,116,117,114,110,32,114,101, -+ 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, -+ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, -+ 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, -+ 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, -+ 10,10,32,32,32,32,32,32,32,32,122,22,60,109,111,100, -+ 117,108,101,32,123,33,114,125,32,40,102,114,111,122,101,110, -+ 41,62,41,2,114,48,0,0,0,114,58,0,0,0,41,1, -+ 218,1,109,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,206,0,0,0,47,5,0,0,115,2,0,0,0, -+ 0,7,122,26,70,114,111,122,101,110,73,109,112,111,114,116, -+ 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, -+ 4,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, -+ 67,0,0,0,115,42,0,0,0,116,0,0,106,1,0,124, -+ 1,0,131,1,0,114,34,0,116,2,0,124,1,0,124,0, -+ 0,100,1,0,100,2,0,131,2,1,83,100,0,0,83,100, -+ 0,0,83,41,3,78,114,218,0,0,0,90,6,102,114,111, -+ 122,101,110,41,3,114,107,0,0,0,114,163,0,0,0,114, -+ 174,0,0,0,41,4,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,13,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,14,1,0,0,56,5, -+ 0,0,115,6,0,0,0,0,2,15,1,19,2,122,24,70, -+ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105, -+ 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, -+ 3,0,0,0,2,0,0,0,67,0,0,0,115,23,0,0, -+ 0,116,0,0,106,1,0,124,1,0,131,1,0,114,19,0, -+ 124,0,0,83,100,1,0,83,41,2,122,93,70,105,110,100, -+ 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -+ 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -+ 10,32,32,32,32,32,32,32,32,78,41,2,114,107,0,0, -+ 0,114,163,0,0,0,41,3,114,12,1,0,0,114,159,0, -+ 0,0,114,36,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,15,1,0,0,63,5,0,0,115, -+ 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, -+ 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, -+ 108,101,99,1,0,0,0,0,0,0,0,3,0,0,0,4, -+ 0,0,0,67,0,0,0,115,95,0,0,0,124,0,0,106, -+ 0,0,106,1,0,125,1,0,116,2,0,106,3,0,124,1, -+ 0,131,1,0,115,57,0,116,4,0,100,1,0,106,5,0, -+ 124,1,0,131,1,0,100,2,0,124,1,0,131,1,1,130, -+ 1,0,110,0,0,116,6,0,116,2,0,106,7,0,124,1, -+ 0,131,2,0,125,2,0,116,8,0,124,2,0,124,0,0, -+ 106,9,0,131,2,0,1,100,0,0,83,41,3,78,122,27, -+ 123,33,114,125,32,105,115,32,110,111,116,32,97,32,102,114, -+ 111,122,101,110,32,109,111,100,117,108,101,114,68,0,0,0, -+ 41,10,114,209,0,0,0,114,68,0,0,0,114,107,0,0, -+ 0,114,163,0,0,0,114,154,0,0,0,114,48,0,0,0, -+ 114,115,0,0,0,218,17,103,101,116,95,102,114,111,122,101, -+ 110,95,111,98,106,101,99,116,114,176,0,0,0,114,64,0, -+ 0,0,41,3,114,180,0,0,0,114,68,0,0,0,114,195, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,2,1,0,0,72,5,0,0,115,12,0,0,0, -+ 0,2,12,1,15,1,18,1,12,1,18,1,122,26,70,114, -+ 111,122,101,110,73,109,112,111,114,116,101,114,46,101,120,101, -+ 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,3,0,0,0,67,0,0,0,115,13,0, -+ 0,0,116,0,0,124,0,0,124,1,0,131,2,0,83,41, -+ 1,122,95,76,111,97,100,32,97,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, -+ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, -+ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, -+ 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, -+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, -+ 32,32,41,1,114,181,0,0,0,41,2,114,12,1,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,5,1,0,0,81,5,0,0,115,2,0, -+ 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, -+ 114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, -+ 0,67,0,0,0,115,13,0,0,0,116,0,0,106,1,0, -+ 124,1,0,131,1,0,83,41,1,122,45,82,101,116,117,114, -+ 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, -+ 116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,46,41,2,114,107,0,0,0,114, -+ 22,1,0,0,41,2,114,12,1,0,0,114,159,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 16,1,0,0,90,5,0,0,115,2,0,0,0,0,4,122, -+ 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, -+ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -- 0,0,100,1,0,83,41,2,122,52,82,101,116,117,114,110, -- 32,70,97,108,115,101,32,97,115,32,98,117,105,108,116,45, -- 105,110,32,109,111,100,117,108,101,115,32,97,114,101,32,110, -- 101,118,101,114,32,112,97,99,107,97,103,101,115,46,70,114, -- 4,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 219,0,0,0,31,5,0,0,115,2,0,0,0,0,4,122, -- 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, -- 46,105,115,95,112,97,99,107,97,103,101,41,14,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114, -- 205,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111, -- 100,114,13,1,0,0,114,14,1,0,0,114,161,0,0,0, -- 114,4,1,0,0,114,15,1,0,0,114,16,1,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,10,1,0,0,224,4,0, -- 0,115,28,0,0,0,12,7,6,2,18,9,3,1,21,8, -- 3,1,18,11,3,1,21,11,3,1,21,5,3,1,21,5, -- 3,1,114,10,1,0,0,99,0,0,0,0,0,0,0,0, -- 0,0,0,0,5,0,0,0,64,0,0,0,115,193,0,0, -+ 0,0,100,1,0,83,41,2,122,54,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, -+ 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, -+ 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 78,114,5,0,0,0,41,2,114,12,1,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,17,1,0,0,96,5,0,0,115,2,0,0,0,0, -+ 4,122,25,70,114,111,122,101,110,73,109,112,111,114,116,101, -+ 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, -+ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, -+ 0,115,13,0,0,0,116,0,0,106,1,0,124,1,0,131, -+ 1,0,83,41,1,122,46,82,101,116,117,114,110,32,84,114, -+ 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, -+ 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, -+ 107,97,103,101,46,41,2,114,107,0,0,0,90,17,105,115, -+ 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,41, -+ 2,114,12,1,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,220,0,0,0,102, -+ 5,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, -+ 101,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, -+ 99,107,97,103,101,41,15,114,58,0,0,0,114,57,0,0, -+ 0,114,59,0,0,0,114,60,0,0,0,114,18,1,0,0, -+ 114,206,0,0,0,114,19,1,0,0,114,14,1,0,0,114, -+ 15,1,0,0,114,2,1,0,0,114,5,1,0,0,114,165, -+ 0,0,0,114,16,1,0,0,114,17,1,0,0,114,220,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,20,1,0,0,38,5,0,0,115, -+ 28,0,0,0,12,7,6,2,18,9,3,1,21,6,3,1, -+ 18,8,18,9,18,9,3,1,21,5,3,1,21,5,3,1, -+ 114,20,1,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,5,0,0,0,64,0,0,0,115,121,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,90,4,0,100,3,0,90,5,0,100,4,0, -+ 90,6,0,101,7,0,100,5,0,100,6,0,132,0,0,131, -+ 1,0,90,8,0,101,7,0,100,7,0,100,8,0,132,0, -+ 0,131,1,0,90,9,0,101,7,0,100,9,0,100,9,0, -+ 100,10,0,100,11,0,132,2,0,131,1,0,90,10,0,101, -+ 7,0,100,9,0,100,12,0,100,13,0,132,1,0,131,1, -+ 0,90,11,0,100,9,0,83,41,14,218,21,87,105,110,100, -+ 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, -+ 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, -+ 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, -+ 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, -+ 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, -+ 46,122,59,83,111,102,116,119,97,114,101,92,80,121,116,104, -+ 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, -+ 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, -+ 108,101,115,92,123,102,117,108,108,110,97,109,101,125,122,65, -+ 83,111,102,116,119,97,114,101,92,80,121,116,104,111,110,92, -+ 80,121,116,104,111,110,67,111,114,101,92,123,115,121,115,95, -+ 118,101,114,115,105,111,110,125,92,77,111,100,117,108,101,115, -+ 92,123,102,117,108,108,110,97,109,101,125,92,68,101,98,117, -+ 103,70,99,2,0,0,0,0,0,0,0,2,0,0,0,11, -+ 0,0,0,67,0,0,0,115,67,0,0,0,121,23,0,116, -+ 0,0,106,1,0,116,0,0,106,2,0,124,1,0,131,2, -+ 0,83,87,110,37,0,4,116,3,0,107,10,0,114,62,0, -+ 1,1,1,116,0,0,106,1,0,116,0,0,106,4,0,124, -+ 1,0,131,2,0,83,89,110,1,0,88,100,0,0,83,41, -+ 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, -+ 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, -+ 82,69,78,84,95,85,83,69,82,114,41,0,0,0,90,18, -+ 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, -+ 78,69,41,2,114,12,1,0,0,218,3,107,101,121,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,14,95, -+ 111,112,101,110,95,114,101,103,105,115,116,114,121,121,5,0, -+ 0,115,8,0,0,0,0,2,3,1,23,1,13,1,122,36, -+ 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -+ 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, -+ 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, -+ 0,16,0,0,0,67,0,0,0,115,142,0,0,0,124,0, -+ 0,106,0,0,114,21,0,124,0,0,106,1,0,125,2,0, -+ 110,9,0,124,0,0,106,2,0,125,2,0,124,2,0,106, -+ 3,0,100,1,0,124,1,0,100,2,0,116,4,0,106,5, -+ 0,100,0,0,100,3,0,133,2,0,25,131,0,2,125,3, -+ 0,121,46,0,124,0,0,106,6,0,124,3,0,131,1,0, -+ 143,25,0,125,4,0,116,7,0,106,8,0,124,4,0,100, -+ 4,0,131,2,0,125,5,0,87,100,0,0,81,88,87,110, -+ 22,0,4,116,9,0,107,10,0,114,137,0,1,1,1,100, -+ 0,0,83,89,110,1,0,88,124,5,0,83,41,5,78,114, -+ 159,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, -+ 110,114,137,0,0,0,114,31,0,0,0,41,10,218,11,68, -+ 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, -+ 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, -+ 82,69,71,73,83,84,82,89,95,75,69,89,114,48,0,0, -+ 0,114,8,0,0,0,218,7,118,101,114,115,105,111,110,114, -+ 26,1,0,0,114,24,1,0,0,90,10,81,117,101,114,121, -+ 86,97,108,117,101,114,41,0,0,0,41,6,114,12,1,0, -+ 0,114,159,0,0,0,90,12,114,101,103,105,115,116,114,121, -+ 95,107,101,121,114,25,1,0,0,90,4,104,107,101,121,218, -+ 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,16,95,115,101,97,114,99, -+ 104,95,114,101,103,105,115,116,114,121,128,5,0,0,115,22, -+ 0,0,0,0,2,9,1,12,2,9,1,15,1,22,1,3, -+ 1,18,1,28,1,13,1,9,1,122,38,87,105,110,100,111, -+ 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, -+ 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, -+ 121,78,99,4,0,0,0,0,0,0,0,8,0,0,0,14, -+ 0,0,0,67,0,0,0,115,155,0,0,0,124,0,0,106, -+ 0,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, -+ 0,107,8,0,114,31,0,100,0,0,83,121,14,0,116,1, -+ 0,124,4,0,131,1,0,1,87,110,22,0,4,116,2,0, -+ 107,10,0,114,69,0,1,1,1,100,0,0,83,89,110,1, -+ 0,88,120,78,0,116,3,0,131,0,0,68,93,67,0,92, -+ 2,0,125,5,0,125,6,0,124,4,0,106,4,0,116,5, -+ 0,124,6,0,131,1,0,131,1,0,114,80,0,116,6,0, -+ 124,1,0,124,5,0,124,1,0,124,4,0,131,2,0,100, -+ 1,0,124,4,0,131,2,1,125,7,0,124,7,0,83,113, -+ 80,0,87,100,0,0,83,41,2,78,114,218,0,0,0,41, -+ 7,114,32,1,0,0,114,40,0,0,0,114,41,0,0,0, -+ 114,241,0,0,0,114,231,0,0,0,114,232,0,0,0,114, -+ 174,0,0,0,41,8,114,12,1,0,0,114,159,0,0,0, -+ 114,36,0,0,0,114,13,1,0,0,114,31,1,0,0,114, -+ 170,0,0,0,114,128,0,0,0,114,178,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,14,1, -+ 0,0,143,5,0,0,115,24,0,0,0,0,2,15,1,12, -+ 1,4,1,3,1,14,1,13,1,9,1,22,1,21,1,21, -+ 1,9,1,122,31,87,105,110,100,111,119,115,82,101,103,105, -+ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, -+ 115,112,101,99,99,3,0,0,0,0,0,0,0,4,0,0, -+ 0,3,0,0,0,67,0,0,0,115,45,0,0,0,124,0, -+ 0,106,0,0,124,1,0,124,2,0,131,2,0,125,3,0, -+ 124,3,0,100,1,0,107,9,0,114,37,0,124,3,0,106, -+ 1,0,83,100,1,0,83,100,1,0,83,41,2,122,108,70, -+ 105,110,100,32,109,111,100,117,108,101,32,110,97,109,101,100, -+ 32,105,110,32,116,104,101,32,114,101,103,105,115,116,114,121, -+ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, -+ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, -+ 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,14, -+ 1,0,0,114,170,0,0,0,41,4,114,12,1,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,178,0,0,0,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,15,1, -+ 0,0,158,5,0,0,115,8,0,0,0,0,7,18,1,12, -+ 1,7,2,122,33,87,105,110,100,111,119,115,82,101,103,105, -+ 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, -+ 109,111,100,117,108,101,41,12,114,58,0,0,0,114,57,0, -+ 0,0,114,59,0,0,0,114,60,0,0,0,114,29,1,0, -+ 0,114,28,1,0,0,114,27,1,0,0,114,19,1,0,0, -+ 114,26,1,0,0,114,32,1,0,0,114,14,1,0,0,114, -+ 15,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,23,1,0,0,109,5,0, -+ 0,115,20,0,0,0,12,2,6,3,6,3,6,2,6,2, -+ 18,7,18,15,3,1,21,14,3,1,114,23,1,0,0,99, -+ 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, -+ 64,0,0,0,115,52,0,0,0,101,0,0,90,1,0,100, -+ 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, -+ 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, -+ 90,5,0,101,6,0,90,7,0,100,6,0,83,41,7,218, -+ 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, -+ 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, -+ 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, -+ 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, -+ 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, -+ 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, -+ 101,114,46,99,2,0,0,0,0,0,0,0,5,0,0,0, -+ 3,0,0,0,67,0,0,0,115,88,0,0,0,116,0,0, -+ 124,0,0,106,1,0,124,1,0,131,1,0,131,1,0,100, -+ 1,0,25,125,2,0,124,2,0,106,2,0,100,2,0,100, -+ 1,0,131,2,0,100,3,0,25,125,3,0,124,1,0,106, -+ 3,0,100,2,0,131,1,0,100,4,0,25,125,4,0,124, -+ 3,0,100,5,0,107,2,0,111,87,0,124,4,0,100,5, -+ 0,107,3,0,83,41,6,122,141,67,111,110,99,114,101,116, -+ 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, -+ 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, -+ 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, -+ 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, -+ 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, -+ 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, -+ 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, -+ 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, -+ 95,46,112,121,39,46,114,30,0,0,0,114,117,0,0,0, -+ 114,85,0,0,0,114,116,0,0,0,114,73,0,0,0,41, -+ 4,114,39,0,0,0,114,239,0,0,0,114,35,0,0,0, -+ 114,33,0,0,0,41,5,114,72,0,0,0,114,159,0,0, -+ 0,114,132,0,0,0,90,13,102,105,108,101,110,97,109,101, -+ 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 220,0,0,0,177,5,0,0,115,8,0,0,0,0,3,25, -+ 1,22,1,19,1,122,24,95,76,111,97,100,101,114,66,97, -+ 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, -+ 2,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, -+ 67,0,0,0,115,80,0,0,0,124,0,0,106,0,0,124, -+ 1,0,106,1,0,131,1,0,125,2,0,124,2,0,100,1, -+ 0,107,8,0,114,57,0,116,2,0,100,2,0,106,3,0, -+ 124,1,0,106,1,0,131,1,0,131,1,0,130,1,0,110, -+ 0,0,116,4,0,116,5,0,124,2,0,124,1,0,106,6, -+ 0,131,3,0,1,100,1,0,83,41,3,122,19,69,120,101, -+ 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, -+ 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, -+ 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, -+ 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, -+ 110,115,32,78,111,110,101,41,7,114,16,1,0,0,114,58, -+ 0,0,0,114,154,0,0,0,114,48,0,0,0,114,115,0, -+ 0,0,114,176,0,0,0,114,64,0,0,0,41,3,114,72, -+ 0,0,0,114,180,0,0,0,114,195,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,2,1,0, -+ 0,185,5,0,0,115,10,0,0,0,0,2,18,1,12,1, -+ 3,1,24,1,122,25,95,76,111,97,100,101,114,66,97,115, -+ 105,99,115,46,101,120,101,99,95,109,111,100,117,108,101,78, -+ 41,8,114,58,0,0,0,114,57,0,0,0,114,59,0,0, -+ 0,114,60,0,0,0,114,220,0,0,0,114,2,1,0,0, -+ 114,181,0,0,0,114,5,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,33, -+ 1,0,0,172,5,0,0,115,8,0,0,0,12,3,6,2, -+ 12,8,12,8,114,33,1,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,106, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,100,2,0,132,0,0,90,3,0,100,3,0,100,4, -+ 0,132,0,0,90,4,0,100,5,0,100,6,0,132,0,0, -+ 90,5,0,100,7,0,100,8,0,132,0,0,90,6,0,100, -+ 9,0,100,10,0,132,0,0,90,7,0,100,11,0,100,18, -+ 0,100,13,0,100,14,0,132,0,1,90,8,0,100,15,0, -+ 100,16,0,132,0,0,90,9,0,100,17,0,83,41,19,218, -+ 12,83,111,117,114,99,101,76,111,97,100,101,114,99,2,0, -+ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, -+ 0,0,115,10,0,0,0,116,0,0,130,1,0,100,1,0, -+ 83,41,2,122,178,79,112,116,105,111,110,97,108,32,109,101, -+ 116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,110, -+ 115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,105, -+ 111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,41, -+ 32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,32, -+ 32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,44, -+ 32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97, -+ 32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82, -+ 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, -+ 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, -+ 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, -+ 32,32,32,32,32,32,32,78,41,1,218,7,73,79,69,114, -+ 114,111,114,41,2,114,72,0,0,0,114,36,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,10, -+ 112,97,116,104,95,109,116,105,109,101,198,5,0,0,115,2, -+ 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, -+ 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, -+ 0,0,0,115,20,0,0,0,105,1,0,124,0,0,106,0, -+ 0,124,1,0,131,1,0,100,1,0,54,83,41,2,97,170, -+ 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, -+ 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, -+ 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, -+ 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,112, -+ 97,116,104,10,32,32,32,32,32,32,32,32,116,111,32,98, -+ 121,32,116,104,101,32,112,97,116,104,32,40,115,116,114,41, -+ 46,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, -+ 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, -+ 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, -+ 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, -+ 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, -+ 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, -+ 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, -+ 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, -+ 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, -+ 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, -+ 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, -+ 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, -+ 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, -+ 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, -+ 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, -+ 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, -+ 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, -+ 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, -+ 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, -+ 108,101,100,46,10,32,32,32,32,32,32,32,32,114,184,0, -+ 0,0,41,1,114,36,1,0,0,41,2,114,72,0,0,0, -+ 114,36,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, -+ 206,5,0,0,115,2,0,0,0,0,11,122,23,83,111,117, -+ 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, -+ 116,97,116,115,99,4,0,0,0,0,0,0,0,4,0,0, -+ 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, -+ 0,106,0,0,124,2,0,124,3,0,131,2,0,83,41,1, -+ 122,228,79,112,116,105,111,110,97,108,32,109,101,116,104,111, -+ 100,32,119,104,105,99,104,32,119,114,105,116,101,115,32,100, -+ 97,116,97,32,40,98,121,116,101,115,41,32,116,111,32,97, -+ 32,102,105,108,101,32,112,97,116,104,32,40,97,32,115,116, -+ 114,41,46,10,10,32,32,32,32,32,32,32,32,73,109,112, -+ 108,101,109,101,110,116,105,110,103,32,116,104,105,115,32,109, -+ 101,116,104,111,100,32,97,108,108,111,119,115,32,102,111,114, -+ 32,116,104,101,32,119,114,105,116,105,110,103,32,111,102,32, -+ 98,121,116,101,99,111,100,101,32,102,105,108,101,115,46,10, -+ 10,32,32,32,32,32,32,32,32,84,104,101,32,115,111,117, -+ 114,99,101,32,112,97,116,104,32,105,115,32,110,101,101,100, -+ 101,100,32,105,110,32,111,114,100,101,114,32,116,111,32,99, -+ 111,114,114,101,99,116,108,121,32,116,114,97,110,115,102,101, -+ 114,32,112,101,114,109,105,115,115,105,111,110,115,10,32,32, -+ 32,32,32,32,32,32,41,1,218,8,115,101,116,95,100,97, -+ 116,97,41,4,114,72,0,0,0,114,142,0,0,0,90,10, -+ 99,97,99,104,101,95,112,97,116,104,114,54,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,15, -+ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,219, -+ 5,0,0,115,2,0,0,0,0,8,122,28,83,111,117,114, -+ 99,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, -+ 98,121,116,101,99,111,100,101,99,3,0,0,0,0,0,0, -+ 0,3,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,150,79,112,116,105,111,110, -+ 97,108,32,109,101,116,104,111,100,32,119,104,105,99,104,32, -+ 119,114,105,116,101,115,32,100,97,116,97,32,40,98,121,116, -+ 101,115,41,32,116,111,32,97,32,102,105,108,101,32,112,97, -+ 116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,32, -+ 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, -+ 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, -+ 108,111,119,115,32,102,111,114,32,116,104,101,32,119,114,105, -+ 116,105,110,103,32,111,102,32,98,121,116,101,99,111,100,101, -+ 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, -+ 78,114,5,0,0,0,41,3,114,72,0,0,0,114,36,0, -+ 0,0,114,54,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,38,1,0,0,229,5,0,0,115, -+ 0,0,0,0,122,21,83,111,117,114,99,101,76,111,97,100, -+ 101,114,46,115,101,116,95,100,97,116,97,99,2,0,0,0, -+ 0,0,0,0,5,0,0,0,16,0,0,0,67,0,0,0, -+ 115,105,0,0,0,124,0,0,106,0,0,124,1,0,131,1, -+ 0,125,2,0,121,19,0,124,0,0,106,1,0,124,2,0, -+ 131,1,0,125,3,0,87,110,58,0,4,116,2,0,107,10, -+ 0,114,94,0,1,125,4,0,1,122,26,0,116,3,0,100, -+ 1,0,100,2,0,124,1,0,131,1,1,124,4,0,130,2, -+ 0,87,89,100,3,0,100,3,0,125,4,0,126,4,0,88, -+ 110,1,0,88,116,4,0,124,3,0,131,1,0,83,41,4, -+ 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, -+ 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, -+ 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, -+ 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, -+ 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, -+ 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, -+ 68,0,0,0,78,41,5,114,239,0,0,0,218,8,103,101, -+ 116,95,100,97,116,97,114,41,0,0,0,114,154,0,0,0, -+ 114,204,0,0,0,41,5,114,72,0,0,0,114,159,0,0, -+ 0,114,36,0,0,0,114,202,0,0,0,218,3,101,120,99, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 17,1,0,0,236,5,0,0,115,14,0,0,0,0,2,15, -+ 1,3,1,19,1,18,1,9,1,31,1,122,23,83,111,117, -+ 114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, -+ 117,114,99,101,218,9,95,111,112,116,105,109,105,122,101,114, -+ 30,0,0,0,99,3,0,0,0,1,0,0,0,4,0,0, -+ 0,9,0,0,0,67,0,0,0,115,31,0,0,0,116,0, -+ 0,116,1,0,124,1,0,124,2,0,100,1,0,100,2,0, -+ 100,3,0,100,4,0,124,3,0,131,4,2,83,41,5,122, -+ 130,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, -+ 32,111,98,106,101,99,116,32,99,111,109,112,105,108,101,100, -+ 32,102,114,111,109,32,115,111,117,114,99,101,46,10,10,32, -+ 32,32,32,32,32,32,32,84,104,101,32,39,100,97,116,97, -+ 39,32,97,114,103,117,109,101,110,116,32,99,97,110,32,98, -+ 101,32,97,110,121,32,111,98,106,101,99,116,32,116,121,112, -+ 101,32,116,104,97,116,32,99,111,109,112,105,108,101,40,41, -+ 32,115,117,112,112,111,114,116,115,46,10,32,32,32,32,32, -+ 32,32,32,114,176,0,0,0,218,12,100,111,110,116,95,105, -+ 110,104,101,114,105,116,84,114,119,0,0,0,41,2,114,115, -+ 0,0,0,218,7,99,111,109,112,105,108,101,41,4,114,72, -+ 0,0,0,114,54,0,0,0,114,36,0,0,0,114,42,1, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,218,14,115,111,117,114,99,101,95,116,111,95,99,111,100, -+ 101,246,5,0,0,115,4,0,0,0,0,5,18,1,122,27, -+ 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, -+ 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, -+ 0,0,0,0,10,0,0,0,43,0,0,0,67,0,0,0, -+ 115,177,1,0,0,124,0,0,106,0,0,124,1,0,131,1, -+ 0,125,2,0,100,1,0,125,3,0,121,16,0,116,1,0, -+ 124,2,0,131,1,0,125,4,0,87,110,24,0,4,116,2, -+ 0,107,10,0,114,63,0,1,1,1,100,1,0,125,4,0, -+ 89,110,202,0,88,121,19,0,124,0,0,106,3,0,124,2, -+ 0,131,1,0,125,5,0,87,110,18,0,4,116,4,0,107, -+ 10,0,114,103,0,1,1,1,89,110,162,0,88,116,5,0, -+ 124,5,0,100,2,0,25,131,1,0,125,3,0,121,19,0, -+ 124,0,0,106,6,0,124,4,0,131,1,0,125,6,0,87, -+ 110,18,0,4,116,7,0,107,10,0,114,159,0,1,1,1, -+ 89,110,106,0,88,121,34,0,116,8,0,124,6,0,100,3, -+ 0,124,5,0,100,4,0,124,1,0,100,5,0,124,4,0, -+ 131,1,3,125,7,0,87,110,24,0,4,116,9,0,116,10, -+ 0,102,2,0,107,10,0,114,220,0,1,1,1,89,110,45, -+ 0,88,116,11,0,100,6,0,124,4,0,124,2,0,131,3, -+ 0,1,116,12,0,124,7,0,100,4,0,124,1,0,100,7, -+ 0,124,4,0,100,8,0,124,2,0,131,1,3,83,124,0, -+ 0,106,6,0,124,2,0,131,1,0,125,8,0,124,0,0, -+ 106,13,0,124,8,0,124,2,0,131,2,0,125,9,0,116, -+ 11,0,100,9,0,124,2,0,131,2,0,1,116,14,0,106, -+ 15,0,12,114,173,1,124,4,0,100,1,0,107,9,0,114, -+ 173,1,124,3,0,100,1,0,107,9,0,114,173,1,116,16, -+ 0,124,9,0,124,3,0,116,17,0,124,8,0,131,1,0, -+ 131,3,0,125,6,0,121,36,0,124,0,0,106,18,0,124, -+ 2,0,124,4,0,124,6,0,131,3,0,1,116,11,0,100, -+ 10,0,124,4,0,131,2,0,1,87,113,173,1,4,116,2, -+ 0,107,10,0,114,169,1,1,1,1,89,113,173,1,88,110, -+ 0,0,124,9,0,83,41,11,122,190,67,111,110,99,114,101, -+ 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, -+ 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, -+ 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, -+ 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, -+ 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, -+ 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, -+ 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, -+ 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, -+ 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, -+ 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, -+ 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, -+ 32,32,32,32,32,32,32,32,78,114,184,0,0,0,114,188, -+ 0,0,0,114,68,0,0,0,114,36,0,0,0,122,13,123, -+ 125,32,109,97,116,99,104,101,115,32,123,125,114,141,0,0, -+ 0,114,142,0,0,0,122,19,99,111,100,101,32,111,98,106, -+ 101,99,116,32,102,114,111,109,32,123,125,122,10,119,114,111, -+ 116,101,32,123,33,114,125,41,19,114,239,0,0,0,114,133, -+ 0,0,0,114,125,0,0,0,114,37,1,0,0,114,35,1, -+ 0,0,114,15,0,0,0,114,40,1,0,0,114,41,0,0, -+ 0,114,191,0,0,0,114,154,0,0,0,114,187,0,0,0, -+ 114,153,0,0,0,114,196,0,0,0,114,45,1,0,0,114, -+ 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, -+ 95,98,121,116,101,99,111,100,101,114,199,0,0,0,114,32, -+ 0,0,0,114,39,1,0,0,41,10,114,72,0,0,0,114, -+ 159,0,0,0,114,142,0,0,0,114,189,0,0,0,114,141, -+ 0,0,0,218,2,115,116,114,54,0,0,0,218,10,98,121, -+ 116,101,115,95,100,97,116,97,114,202,0,0,0,90,11,99, -+ 111,100,101,95,111,98,106,101,99,116,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,16,1,0,0,254,5, -+ 0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,16, -+ 1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,3, -+ 1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,19, -+ 1,5,2,9,1,7,1,15,1,6,1,7,1,15,1,18, -+ 1,13,1,22,1,12,1,9,1,15,1,3,1,19,1,17, -+ 1,13,1,8,1,122,21,83,111,117,114,99,101,76,111,97, -+ 100,101,114,46,103,101,116,95,99,111,100,101,78,114,139,0, -+ 0,0,41,10,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,36,1,0,0,114,37,1,0,0,114,39,1, -+ 0,0,114,38,1,0,0,114,17,1,0,0,114,45,1,0, -+ 0,114,16,1,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,34,1,0,0,196, -+ 5,0,0,115,14,0,0,0,12,2,12,8,12,13,12,10, -+ 12,7,12,10,18,8,114,34,1,0,0,99,0,0,0,0, -+ 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -+ 115,112,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -+ 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -+ 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -+ 6,0,100,7,0,132,0,0,90,6,0,101,7,0,135,0, -+ 0,102,1,0,100,8,0,100,9,0,134,0,0,131,1,0, -+ 90,8,0,101,7,0,100,10,0,100,11,0,132,0,0,131, -+ 1,0,90,9,0,100,12,0,100,13,0,132,0,0,90,10, -+ 0,135,0,0,83,41,14,218,10,70,105,108,101,76,111,97, -+ 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, -+ 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, -+ 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, -+ 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, -+ 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, -+ 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, -+ 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, -+ 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, -+ 0,115,22,0,0,0,124,1,0,124,0,0,95,0,0,124, -+ 2,0,124,0,0,95,1,0,100,1,0,83,41,2,122,75, -+ 67,97,99,104,101,32,116,104,101,32,109,111,100,117,108,101, -+ 32,110,97,109,101,32,97,110,100,32,116,104,101,32,112,97, -+ 116,104,32,116,111,32,116,104,101,32,102,105,108,101,32,102, -+ 111,117,110,100,32,98,121,32,116,104,101,10,32,32,32,32, -+ 32,32,32,32,102,105,110,100,101,114,46,78,41,2,114,68, -+ 0,0,0,114,36,0,0,0,41,3,114,72,0,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,73,0,0,0,55,6,0, -+ 0,115,4,0,0,0,0,3,9,1,122,19,70,105,108,101, -+ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -+ 67,0,0,0,115,34,0,0,0,124,0,0,106,0,0,124, -+ 1,0,106,0,0,107,2,0,111,33,0,124,0,0,106,1, -+ 0,124,1,0,106,1,0,107,2,0,83,41,1,78,41,2, -+ 114,225,0,0,0,114,64,0,0,0,41,2,114,72,0,0, -+ 0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,230,0,0,0,61,6,0,0,115,4, -+ 0,0,0,0,1,18,1,122,17,70,105,108,101,76,111,97, -+ 100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, -+ 26,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, -+ 116,0,0,124,0,0,106,2,0,131,1,0,65,83,41,1, -+ 78,41,3,218,4,104,97,115,104,114,68,0,0,0,114,36, -+ 0,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,8,95,95,104,97,115, -+ 104,95,95,65,6,0,0,115,2,0,0,0,0,1,122,19, -+ 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, -+ 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 3,0,0,0,3,0,0,0,115,22,0,0,0,116,0,0, -+ 116,1,0,124,0,0,131,2,0,106,2,0,124,1,0,131, -+ 1,0,83,41,1,122,100,76,111,97,100,32,97,32,109,111, -+ 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, -+ 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -+ 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, -+ 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, -+ 46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,115, -+ 117,112,101,114,114,49,1,0,0,114,5,1,0,0,41,2, -+ 114,72,0,0,0,114,159,0,0,0,41,1,114,225,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,5,1,0,0, -+ 68,6,0,0,115,2,0,0,0,0,10,122,22,70,105,108, -+ 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, -+ 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, -+ 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, -+ 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, -+ 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, -+ 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, -+ 114,46,41,1,114,36,0,0,0,41,2,114,72,0,0,0, -+ 114,159,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,114,239,0,0,0,80,6,0,0,115,2,0, -+ 0,0,0,3,122,23,70,105,108,101,76,111,97,100,101,114, -+ 46,103,101,116,95,102,105,108,101,110,97,109,101,99,2,0, -+ 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, -+ 0,0,115,41,0,0,0,116,0,0,106,1,0,124,1,0, -+ 100,1,0,131,2,0,143,17,0,125,2,0,124,2,0,106, -+ 2,0,131,0,0,83,87,100,2,0,81,88,100,2,0,83, -+ 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, -+ 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, -+ 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, -+ 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, -+ 100,41,3,114,72,0,0,0,114,36,0,0,0,114,55,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,40,1,0,0,85,6,0,0,115,4,0,0,0,0, -+ 2,21,1,122,19,70,105,108,101,76,111,97,100,101,114,46, -+ 103,101,116,95,100,97,116,97,41,11,114,58,0,0,0,114, -+ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,73, -+ 0,0,0,114,230,0,0,0,114,51,1,0,0,114,157,0, -+ 0,0,114,5,1,0,0,114,239,0,0,0,114,40,1,0, -+ 0,114,5,0,0,0,114,5,0,0,0,41,1,114,225,0, -+ 0,0,114,6,0,0,0,114,49,1,0,0,50,6,0,0, -+ 115,14,0,0,0,12,3,6,2,12,6,12,4,12,3,24, -+ 12,18,5,114,49,1,0,0,99,0,0,0,0,0,0,0, -+ 0,0,0,0,0,4,0,0,0,64,0,0,0,115,64,0, -+ 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, -+ 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, -+ 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100, -+ 7,0,100,8,0,100,9,0,132,0,1,90,6,0,100,10, -+ 0,83,41,11,114,9,1,0,0,122,62,67,111,110,99,114, -+ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, -+ 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, -+ 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, -+ 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,36, -+ 0,0,0,116,0,0,124,1,0,131,1,0,125,2,0,105, -+ 2,0,124,2,0,106,1,0,100,1,0,54,124,2,0,106, -+ 2,0,100,2,0,54,83,41,3,122,33,82,101,116,117,114, -+ 110,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, -+ 111,114,32,116,104,101,32,112,97,116,104,46,114,184,0,0, -+ 0,114,185,0,0,0,41,3,114,40,0,0,0,218,8,115, -+ 116,95,109,116,105,109,101,90,7,115,116,95,115,105,122,101, -+ 41,3,114,72,0,0,0,114,36,0,0,0,114,47,1,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,37,1,0,0,95,6,0,0,115,4,0,0,0,0,2, -+ 12,1,122,27,83,111,117,114,99,101,70,105,108,101,76,111, -+ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, -+ 4,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, -+ 67,0,0,0,115,34,0,0,0,116,0,0,124,1,0,131, -+ 1,0,125,4,0,124,0,0,106,1,0,124,2,0,124,3, -+ 0,100,1,0,124,4,0,131,2,1,83,41,2,78,218,5, -+ 95,109,111,100,101,41,2,114,145,0,0,0,114,38,1,0, -+ 0,41,5,114,72,0,0,0,114,142,0,0,0,114,141,0, -+ 0,0,114,54,0,0,0,114,43,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,39,1,0,0, -+ 100,6,0,0,115,4,0,0,0,0,2,12,1,122,32,83, -+ 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, -+ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,114, -+ 55,1,0,0,105,182,1,0,0,99,3,0,0,0,1,0, -+ 0,0,9,0,0,0,17,0,0,0,67,0,0,0,115,53, -+ 1,0,0,116,0,0,124,1,0,131,1,0,92,2,0,125, -+ 4,0,125,5,0,103,0,0,125,6,0,120,54,0,124,4, -+ 0,114,80,0,116,1,0,124,4,0,131,1,0,12,114,80, -+ 0,116,0,0,124,4,0,131,1,0,92,2,0,125,4,0, -+ 125,7,0,124,6,0,106,2,0,124,7,0,131,1,0,1, -+ 113,27,0,87,120,132,0,116,3,0,124,6,0,131,1,0, -+ 68,93,118,0,125,7,0,116,4,0,124,4,0,124,7,0, -+ 131,2,0,125,4,0,121,17,0,116,5,0,106,6,0,124, -+ 4,0,131,1,0,1,87,113,94,0,4,116,7,0,107,10, -+ 0,114,155,0,1,1,1,119,94,0,89,113,94,0,4,116, -+ 8,0,107,10,0,114,211,0,1,125,8,0,1,122,25,0, -+ 116,9,0,100,1,0,124,4,0,124,8,0,131,3,0,1, -+ 100,2,0,83,87,89,100,2,0,100,2,0,125,8,0,126, -+ 8,0,88,113,94,0,88,113,94,0,87,121,33,0,116,10, -+ 0,124,1,0,124,2,0,124,3,0,131,3,0,1,116,9, -+ 0,100,3,0,124,1,0,131,2,0,1,87,110,53,0,4, -+ 116,8,0,107,10,0,114,48,1,1,125,8,0,1,122,21, -+ 0,116,9,0,100,1,0,124,1,0,124,8,0,131,3,0, -+ 1,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, -+ 110,1,0,88,100,2,0,83,41,4,122,27,87,114,105,116, -+ 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, -+ 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, -+ 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, -+ 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, -+ 33,114,125,41,11,114,39,0,0,0,114,47,0,0,0,114, -+ 224,0,0,0,114,34,0,0,0,114,29,0,0,0,114,4, -+ 0,0,0,90,5,109,107,100,105,114,218,15,70,105,108,101, -+ 69,120,105,115,116,115,69,114,114,111,114,114,41,0,0,0, -+ 114,153,0,0,0,114,56,0,0,0,41,9,114,72,0,0, -+ 0,114,36,0,0,0,114,54,0,0,0,114,55,1,0,0, -+ 114,234,0,0,0,114,132,0,0,0,114,28,0,0,0,114, -+ 24,0,0,0,114,41,1,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,38,1,0,0,105,6,0, -+ 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, -+ 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, -+ 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, -+ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, -+ 101,116,95,100,97,116,97,78,41,7,114,58,0,0,0,114, -+ 57,0,0,0,114,59,0,0,0,114,60,0,0,0,114,37, -+ 1,0,0,114,39,1,0,0,114,38,1,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,9,1,0,0,91,6,0,0,115,8,0,0,0,12, -+ 2,6,2,12,5,12,5,114,9,1,0,0,99,0,0,0, -+ 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, -+ 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, -+ 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, -+ 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, -+ 100,6,0,83,41,7,114,8,1,0,0,122,45,76,111,97, -+ 100,101,114,32,119,104,105,99,104,32,104,97,110,100,108,101, -+ 115,32,115,111,117,114,99,101,108,101,115,115,32,102,105,108, -+ 101,32,105,109,112,111,114,116,115,46,99,2,0,0,0,0, -+ 0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,115, -+ 76,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, -+ 125,2,0,124,0,0,106,1,0,124,2,0,131,1,0,125, -+ 3,0,116,2,0,124,3,0,100,1,0,124,1,0,100,2, -+ 0,124,2,0,131,1,2,125,4,0,116,3,0,124,4,0, -+ 100,1,0,124,1,0,100,3,0,124,2,0,131,1,2,83, -+ 41,4,78,114,68,0,0,0,114,36,0,0,0,114,141,0, -+ 0,0,41,4,114,239,0,0,0,114,40,1,0,0,114,191, -+ 0,0,0,114,196,0,0,0,41,5,114,72,0,0,0,114, -+ 159,0,0,0,114,36,0,0,0,114,54,0,0,0,114,48, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,16,1,0,0,138,6,0,0,115,8,0,0,0, -+ 0,1,15,1,15,1,24,1,122,29,83,111,117,114,99,101, -+ 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,103, -+ 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, -+ 0,100,1,0,83,41,2,122,39,82,101,116,117,114,110,32, -+ 78,111,110,101,32,97,115,32,116,104,101,114,101,32,105,115, -+ 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, -+ 78,114,5,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,17,1,0,0,144,6,0,0,115,2,0,0,0,0, -+ 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, -+ 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, -+ 99,101,78,41,6,114,58,0,0,0,114,57,0,0,0,114, -+ 59,0,0,0,114,60,0,0,0,114,16,1,0,0,114,17, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,8,1,0,0,134,6,0,0, -+ 115,6,0,0,0,12,2,6,2,12,6,114,8,1,0,0, -+ 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, -+ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -+ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -+ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -+ 101,7,0,100,8,0,100,9,0,132,0,0,131,1,0,90, -+ 8,0,100,10,0,100,11,0,132,0,0,90,9,0,100,12, -+ 0,100,13,0,132,0,0,90,10,0,100,14,0,100,15,0, -+ 132,0,0,90,11,0,101,7,0,100,16,0,100,17,0,132, -+ 0,0,131,1,0,90,12,0,100,18,0,83,41,19,218,19, -+ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -+ 100,101,114,122,93,76,111,97,100,101,114,32,102,111,114,32, -+ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, -+ 115,46,10,10,32,32,32,32,84,104,101,32,99,111,110,115, -+ 116,114,117,99,116,111,114,32,105,115,32,100,101,115,105,103, -+ 110,101,100,32,116,111,32,119,111,114,107,32,119,105,116,104, -+ 32,70,105,108,101,70,105,110,100,101,114,46,10,10,32,32, -+ 32,32,99,3,0,0,0,0,0,0,0,3,0,0,0,2, -+ 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, -+ 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,0, -+ 0,83,41,1,78,41,2,114,68,0,0,0,114,36,0,0, -+ 0,41,3,114,72,0,0,0,114,68,0,0,0,114,36,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,73,0,0,0,161,6,0,0,115,4,0,0,0,0, -+ 1,9,1,122,28,69,120,116,101,110,115,105,111,110,70,105, -+ 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, -+ 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, -+ 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, -+ 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, -+ 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, -+ 41,2,114,225,0,0,0,114,64,0,0,0,41,2,114,72, -+ 0,0,0,114,228,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,230,0,0,0,165,6,0,0, -+ 115,4,0,0,0,0,1,18,1,122,26,69,120,116,101,110, -+ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, -+ 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, -+ 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, -+ 0,106,2,0,131,1,0,65,83,41,1,78,41,3,114,50, -+ 1,0,0,114,68,0,0,0,114,36,0,0,0,41,1,114, -+ 72,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,51,1,0,0,169,6,0,0,115,2,0,0, -+ 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, -+ 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, -+ 95,99,2,0,0,0,0,0,0,0,4,0,0,0,11,0, -+ 0,0,67,0,0,0,115,183,0,0,0,116,0,0,124,1, -+ 0,131,1,0,143,29,0,1,116,1,0,116,2,0,106,3, -+ 0,124,1,0,124,0,0,106,4,0,131,3,0,125,2,0, -+ 87,100,1,0,81,88,116,5,0,100,2,0,124,0,0,106, -+ 4,0,131,2,0,1,124,0,0,106,6,0,124,1,0,131, -+ 1,0,125,3,0,124,3,0,114,124,0,116,7,0,124,2, -+ 0,100,3,0,131,2,0,12,114,124,0,116,8,0,124,0, -+ 0,106,4,0,131,1,0,100,4,0,25,103,1,0,124,2, -+ 0,95,9,0,110,0,0,124,0,0,124,2,0,95,10,0, -+ 124,2,0,106,11,0,124,2,0,95,12,0,124,3,0,115, -+ 179,0,124,2,0,106,12,0,106,13,0,100,5,0,131,1, -+ 0,100,4,0,25,124,2,0,95,12,0,110,0,0,124,2, -+ 0,83,41,6,122,25,76,111,97,100,32,97,110,32,101,120, -+ 116,101,110,115,105,111,110,32,109,111,100,117,108,101,46,78, -+ 122,33,101,120,116,101,110,115,105,111,110,32,109,111,100,117, -+ 108,101,32,108,111,97,100,101,100,32,102,114,111,109,32,123, -+ 33,114,125,114,247,0,0,0,114,85,0,0,0,114,117,0, -+ 0,0,41,14,114,70,0,0,0,114,115,0,0,0,114,107, -+ 0,0,0,90,12,108,111,97,100,95,100,121,110,97,109,105, -+ 99,114,36,0,0,0,114,153,0,0,0,114,220,0,0,0, -+ 114,61,0,0,0,114,39,0,0,0,114,247,0,0,0,114, -+ 205,0,0,0,114,58,0,0,0,114,251,0,0,0,114,33, -+ 0,0,0,41,4,114,72,0,0,0,114,159,0,0,0,114, -+ 180,0,0,0,114,220,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,5,1,0,0,172,6,0, -+ 0,115,24,0,0,0,0,5,13,1,9,1,21,1,16,1, -+ 15,1,22,1,28,1,9,1,12,1,6,1,28,1,122,31, -+ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -+ 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, -+ 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, -+ 3,0,0,0,115,48,0,0,0,116,0,0,124,0,0,106, -+ 1,0,131,1,0,100,1,0,25,137,0,0,116,2,0,135, -+ 0,0,102,1,0,100,2,0,100,3,0,134,0,0,116,3, -+ 0,68,131,1,0,131,1,0,83,41,4,122,49,82,101,116, -+ 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, -+ 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, -+ 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,30, -+ 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, -+ 4,0,0,0,51,0,0,0,115,31,0,0,0,124,0,0, -+ 93,21,0,125,1,0,136,0,0,100,0,0,124,1,0,23, -+ 107,2,0,86,1,113,3,0,100,1,0,83,41,2,114,73, -+ 0,0,0,78,114,5,0,0,0,41,2,114,23,0,0,0, -+ 218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101, -+ 95,110,97,109,101,114,5,0,0,0,114,6,0,0,0,114, -+ 78,0,0,0,193,6,0,0,115,2,0,0,0,6,1,122, -+ 49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, -+ 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46, -+ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, -+ 114,62,41,4,114,39,0,0,0,114,36,0,0,0,114,79, -+ 0,0,0,218,18,69,88,84,69,78,83,73,79,78,95,83, -+ 85,70,70,73,88,69,83,41,2,114,72,0,0,0,114,159, -+ 0,0,0,114,5,0,0,0,41,1,114,59,1,0,0,114, -+ 6,0,0,0,114,220,0,0,0,190,6,0,0,115,6,0, -+ 0,0,0,2,19,1,18,1,122,30,69,120,116,101,110,115, -+ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, -+ 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,63,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, -+ 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, -+ 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, -+ 101,32,111,98,106,101,99,116,46,78,114,5,0,0,0,41, -+ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,16,1,0,0,196, -+ 6,0,0,115,2,0,0,0,0,2,122,28,69,120,116,101, -+ 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, -+ 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, -+ 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, -+ 0,0,100,1,0,83,41,2,122,53,82,101,116,117,114,110, -+ 32,78,111,110,101,32,97,115,32,101,120,116,101,110,115,105, -+ 111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,32, -+ 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, -+ 114,5,0,0,0,41,2,114,72,0,0,0,114,159,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,17,1,0,0,200,6,0,0,115,2,0,0,0,0,2, -+ 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, -+ 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -+ 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, -+ 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, -+ 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, -+ 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, -+ 1,114,36,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,239,0,0,0,204,6,0,0,115,2,0,0,0,0, -+ 3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, -+ 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, -+ 97,109,101,78,41,13,114,58,0,0,0,114,57,0,0,0, -+ 114,59,0,0,0,114,60,0,0,0,114,73,0,0,0,114, -+ 230,0,0,0,114,51,1,0,0,114,157,0,0,0,114,5, -+ 1,0,0,114,220,0,0,0,114,16,1,0,0,114,17,1, -+ 0,0,114,239,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,57,1,0,0, -+ 153,6,0,0,115,18,0,0,0,12,6,6,2,12,4,12, -+ 4,12,3,18,18,12,6,12,4,12,4,114,57,1,0,0, -+ 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -+ 0,64,0,0,0,115,130,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -+ 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -+ 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, -+ 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100, -+ 11,0,132,0,0,90,8,0,100,12,0,100,13,0,132,0, -+ 0,90,9,0,100,14,0,100,15,0,132,0,0,90,10,0, -+ 100,16,0,100,17,0,132,0,0,90,11,0,100,18,0,100, -+ 19,0,132,0,0,90,12,0,100,20,0,83,41,21,218,14, -+ 95,78,97,109,101,115,112,97,99,101,80,97,116,104,97,38, -+ 1,0,0,82,101,112,114,101,115,101,110,116,115,32,97,32, -+ 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, -+ 101,39,115,32,112,97,116,104,46,32,32,73,116,32,117,115, -+ 101,115,32,116,104,101,32,109,111,100,117,108,101,32,110,97, -+ 109,101,10,32,32,32,32,116,111,32,102,105,110,100,32,105, -+ 116,115,32,112,97,114,101,110,116,32,109,111,100,117,108,101, -+ 44,32,97,110,100,32,102,114,111,109,32,116,104,101,114,101, -+ 32,105,116,32,108,111,111,107,115,32,117,112,32,116,104,101, -+ 32,112,97,114,101,110,116,39,115,10,32,32,32,32,95,95, -+ 112,97,116,104,95,95,46,32,32,87,104,101,110,32,116,104, -+ 105,115,32,99,104,97,110,103,101,115,44,32,116,104,101,32, -+ 109,111,100,117,108,101,39,115,32,111,119,110,32,112,97,116, -+ 104,32,105,115,32,114,101,99,111,109,112,117,116,101,100,44, -+ 10,32,32,32,32,117,115,105,110,103,32,112,97,116,104,95, -+ 102,105,110,100,101,114,46,32,32,70,111,114,32,116,111,112, -+ 45,108,101,118,101,108,32,109,111,100,117,108,101,115,44,32, -+ 116,104,101,32,112,97,114,101,110,116,32,109,111,100,117,108, -+ 101,39,115,32,112,97,116,104,10,32,32,32,32,105,115,32, -+ 115,121,115,46,112,97,116,104,46,99,4,0,0,0,0,0, -+ 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,52, -+ 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, -+ 0,0,95,1,0,116,2,0,124,0,0,106,3,0,131,0, -+ 0,131,1,0,124,0,0,95,4,0,124,3,0,124,0,0, -+ 95,5,0,100,0,0,83,41,1,78,41,6,114,71,0,0, -+ 0,114,254,0,0,0,114,232,0,0,0,218,16,95,103,101, -+ 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, -+ 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, -+ 218,12,95,112,97,116,104,95,102,105,110,100,101,114,41,4, -+ 114,72,0,0,0,114,68,0,0,0,114,36,0,0,0,218, -+ 11,112,97,116,104,95,102,105,110,100,101,114,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,114,73,0,0,0, -+ 217,6,0,0,115,8,0,0,0,0,1,9,1,9,1,21, -+ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, -+ 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, -+ 53,0,0,0,124,0,0,106,0,0,106,1,0,100,1,0, -+ 131,1,0,92,3,0,125,1,0,125,2,0,125,3,0,124, -+ 2,0,100,2,0,107,2,0,114,43,0,100,6,0,83,124, -+ 1,0,100,5,0,102,2,0,83,41,7,122,62,82,101,116, -+ 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, -+ 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, -+ 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, -+ 45,97,116,116,114,45,110,97,109,101,41,114,117,0,0,0, -+ 114,31,0,0,0,114,8,0,0,0,114,36,0,0,0,114, -+ 247,0,0,0,41,2,122,3,115,121,115,122,4,112,97,116, -+ 104,41,2,114,71,0,0,0,114,33,0,0,0,41,4,114, -+ 72,0,0,0,114,234,0,0,0,218,3,100,111,116,114,95, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,23,95,102,105,110,100,95,112,97,114,101,110,116, -+ 95,112,97,116,104,95,110,97,109,101,115,223,6,0,0,115, -+ 8,0,0,0,0,2,27,1,12,2,4,3,122,38,95,78, -+ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,105, -+ 110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,110, -+ 97,109,101,115,99,1,0,0,0,0,0,0,0,3,0,0, -+ 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, -+ 0,106,0,0,131,0,0,92,2,0,125,1,0,125,2,0, -+ 116,1,0,116,2,0,106,3,0,124,1,0,25,124,2,0, -+ 131,2,0,83,41,1,78,41,4,114,67,1,0,0,114,63, -+ 0,0,0,114,8,0,0,0,114,74,0,0,0,41,3,114, -+ 72,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100, -+ 117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97, -+ 116,116,114,95,110,97,109,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,62,1,0,0,233,6,0,0, -+ 115,4,0,0,0,0,1,18,1,122,31,95,78,97,109,101, -+ 115,112,97,99,101,80,97,116,104,46,95,103,101,116,95,112, -+ 97,114,101,110,116,95,112,97,116,104,99,1,0,0,0,0, -+ 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, -+ 127,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, -+ 131,1,0,125,1,0,124,1,0,124,0,0,106,2,0,107, -+ 3,0,114,120,0,124,0,0,106,3,0,124,0,0,106,4, -+ 0,124,1,0,131,2,0,125,2,0,124,2,0,100,0,0, -+ 107,9,0,114,108,0,124,2,0,106,5,0,100,0,0,107, -+ 8,0,114,108,0,124,2,0,106,6,0,114,108,0,124,2, -+ 0,106,6,0,124,0,0,95,7,0,113,108,0,110,0,0, -+ 124,1,0,124,0,0,95,2,0,110,0,0,124,0,0,106, -+ 7,0,83,41,1,78,41,8,114,232,0,0,0,114,62,1, -+ 0,0,114,63,1,0,0,114,64,1,0,0,114,71,0,0, -+ 0,114,170,0,0,0,114,221,0,0,0,114,254,0,0,0, -+ 41,3,114,72,0,0,0,90,11,112,97,114,101,110,116,95, -+ 112,97,116,104,114,178,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, -+ 99,117,108,97,116,101,237,6,0,0,115,16,0,0,0,0, -+ 2,18,1,15,1,21,3,27,1,9,1,18,1,12,1,122, -+ 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, -+ 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, -+ 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, -+ 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, -+ 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, -+ 114,114,68,1,0,0,41,1,114,72,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,8,95,95, -+ 105,116,101,114,95,95,250,6,0,0,115,2,0,0,0,0, -+ 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, -+ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, -+ 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, -+ 131,1,0,83,41,1,78,41,2,114,32,0,0,0,114,68, -+ 1,0,0,41,1,114,72,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, -+ 95,95,253,6,0,0,115,2,0,0,0,0,1,122,22,95, -+ 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, -+ 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, -+ 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, -+ 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, -+ 116,104,40,123,33,114,125,41,41,2,114,48,0,0,0,114, -+ 254,0,0,0,41,1,114,72,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,102,0,0,0,0, -+ 7,0,0,115,2,0,0,0,0,1,122,23,95,78,97,109, -+ 101,115,112,97,99,101,80,97,116,104,46,95,95,114,101,112, -+ 114,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, -+ 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,0, -+ 124,0,0,106,0,0,131,0,0,107,6,0,83,41,1,78, -+ 41,1,114,68,1,0,0,41,2,114,72,0,0,0,218,4, -+ 105,116,101,109,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, -+ 95,3,7,0,0,115,2,0,0,0,0,1,122,27,95,78, -+ 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, -+ 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, -+ 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,20, -+ 0,0,0,124,0,0,106,0,0,106,1,0,124,1,0,131, -+ 1,0,1,100,0,0,83,41,1,78,41,2,114,254,0,0, -+ 0,114,224,0,0,0,41,2,114,72,0,0,0,114,72,1, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,224,0,0,0,6,7,0,0,115,2,0,0,0,0, -+ 1,122,21,95,78,97,109,101,115,112,97,99,101,80,97,116, -+ 104,46,97,112,112,101,110,100,78,41,13,114,58,0,0,0, -+ 114,57,0,0,0,114,59,0,0,0,114,60,0,0,0,114, -+ 73,0,0,0,114,67,1,0,0,114,62,1,0,0,114,68, -+ 1,0,0,114,70,1,0,0,114,71,1,0,0,114,102,0, -+ 0,0,114,73,1,0,0,114,224,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,61,1,0,0,210,6,0,0,115,20,0,0,0,12,5, -+ 6,2,12,6,12,10,12,4,12,13,12,3,12,3,12,3, -+ 12,3,114,61,1,0,0,99,0,0,0,0,0,0,0,0, -+ 0,0,0,0,3,0,0,0,64,0,0,0,115,106,0,0, - 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, -- 90,3,0,101,4,0,100,2,0,100,3,0,132,0,0,131, -- 1,0,90,5,0,101,6,0,100,4,0,100,4,0,100,5, -- 0,100,6,0,132,2,0,131,1,0,90,7,0,101,6,0, -- 100,4,0,100,7,0,100,8,0,132,1,0,131,1,0,90, -- 8,0,101,4,0,100,9,0,100,10,0,132,0,0,131,1, -- 0,90,9,0,101,6,0,100,11,0,100,12,0,132,0,0, -- 131,1,0,90,10,0,101,6,0,101,11,0,100,13,0,100, -- 14,0,132,0,0,131,1,0,131,1,0,90,12,0,101,6, -- 0,101,11,0,100,15,0,100,16,0,132,0,0,131,1,0, -- 131,1,0,90,13,0,101,6,0,101,11,0,100,17,0,100, -- 18,0,132,0,0,131,1,0,131,1,0,90,14,0,100,4, -- 0,83,41,19,218,14,70,114,111,122,101,110,73,109,112,111, -- 114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,32, -- 105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,101, -- 110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,32, -- 65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,32, -- 101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,32, -- 115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,116, -- 111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,100, -- 32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,105, -- 97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,10, -- 32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,0, -+ 100,2,0,132,0,0,90,3,0,101,4,0,100,3,0,100, -+ 4,0,132,0,0,131,1,0,90,5,0,100,5,0,100,6, -+ 0,132,0,0,90,6,0,100,7,0,100,8,0,132,0,0, -+ 90,7,0,100,9,0,100,10,0,132,0,0,90,8,0,100, -+ 11,0,100,12,0,132,0,0,90,9,0,100,13,0,100,14, -+ 0,132,0,0,90,10,0,100,15,0,83,41,16,114,252,0, -+ 0,0,99,4,0,0,0,0,0,0,0,4,0,0,0,4, -+ 0,0,0,67,0,0,0,115,25,0,0,0,116,0,0,124, -+ 1,0,124,2,0,124,3,0,131,3,0,124,0,0,95,1, -+ 0,100,0,0,83,41,1,78,41,2,114,61,1,0,0,114, -+ 254,0,0,0,41,4,114,72,0,0,0,114,68,0,0,0, -+ 114,36,0,0,0,114,65,1,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,73,0,0,0,12,7, -+ 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, -+ 115,112,97,99,101,76,111,97,100,101,114,46,95,95,105,110, -+ 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,16,0,0,0,100,1, -- 0,106,0,0,124,0,0,106,1,0,131,1,0,83,41,2, -+ 0,106,0,0,124,1,0,106,1,0,131,1,0,83,41,2, - 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, - 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, -@@ -2205,2171 +3230,1147 @@ - 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, - 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, - 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, -- 32,32,32,32,32,122,22,60,109,111,100,117,108,101,32,123, -- 33,114,125,32,40,102,114,111,122,101,110,41,62,41,2,114, -- 47,0,0,0,114,57,0,0,0,41,1,218,1,109,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,205,0, -- 0,0,47,5,0,0,115,2,0,0,0,0,7,122,26,70, -- 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111, -- 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0, -- 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, -- 42,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, -- 114,34,0,116,2,0,124,1,0,124,0,0,100,1,0,100, -- 2,0,131,2,1,83,100,0,0,83,100,0,0,83,41,3, -- 78,114,217,0,0,0,90,6,102,114,111,122,101,110,41,3, -- 114,106,0,0,0,114,162,0,0,0,114,173,0,0,0,41, -- 4,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,12,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,13,1,0,0,56,5,0,0,115,6,0, -- 0,0,0,2,15,1,19,2,122,24,70,114,111,122,101,110, -- 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, -- 101,99,99,3,0,0,0,0,0,0,0,3,0,0,0,2, -- 0,0,0,67,0,0,0,115,23,0,0,0,116,0,0,106, -- 1,0,124,1,0,131,1,0,114,19,0,124,0,0,83,100, -- 1,0,83,41,2,122,93,70,105,110,100,32,97,32,102,114, -- 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, -- 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, -- 32,32,32,32,78,41,2,114,106,0,0,0,114,162,0,0, -- 0,41,3,114,11,1,0,0,114,158,0,0,0,114,35,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,14,1,0,0,63,5,0,0,115,2,0,0,0,0, -- 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, -- 114,46,102,105,110,100,95,109,111,100,117,108,101,99,1,0, -- 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, -- 0,0,115,95,0,0,0,124,0,0,106,0,0,106,1,0, -- 125,1,0,116,2,0,106,3,0,124,1,0,131,1,0,115, -- 57,0,116,4,0,100,1,0,106,5,0,124,1,0,131,1, -- 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, -- 116,6,0,116,2,0,106,7,0,124,1,0,131,2,0,125, -- 2,0,116,8,0,124,2,0,124,0,0,106,9,0,131,2, -- 0,1,100,0,0,83,41,3,78,122,27,123,33,114,125,32, -- 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, -- 109,111,100,117,108,101,114,67,0,0,0,41,10,114,208,0, -- 0,0,114,67,0,0,0,114,106,0,0,0,114,162,0,0, -- 0,114,153,0,0,0,114,47,0,0,0,114,114,0,0,0, -- 218,17,103,101,116,95,102,114,111,122,101,110,95,111,98,106, -- 101,99,116,114,175,0,0,0,114,63,0,0,0,41,3,114, -- 179,0,0,0,114,67,0,0,0,114,194,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, -- 0,0,72,5,0,0,115,12,0,0,0,0,2,12,1,15, -- 1,18,1,12,1,18,1,122,26,70,114,111,122,101,110,73, -- 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, -- 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 3,0,0,0,67,0,0,0,115,13,0,0,0,116,0,0, -- 124,0,0,124,1,0,131,2,0,83,41,1,122,95,76,111, -- 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, -+ 32,32,32,32,32,122,25,60,109,111,100,117,108,101,32,123, -+ 33,114,125,32,40,110,97,109,101,115,112,97,99,101,41,62, -+ 41,2,114,48,0,0,0,114,58,0,0,0,41,2,114,12, -+ 1,0,0,114,180,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,206,0,0,0,15,7,0,0, -+ 115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112, -+ 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, -+ 95,114,101,112,114,99,2,0,0,0,0,0,0,0,2,0, -+ 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, -+ 1,0,83,41,2,78,84,114,5,0,0,0,41,2,114,72, -+ 0,0,0,114,159,0,0,0,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,114,220,0,0,0,24,7,0,0, -+ 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, -+ 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, -+ 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, -+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, -+ 0,83,41,2,78,114,31,0,0,0,114,5,0,0,0,41, -+ 2,114,72,0,0,0,114,159,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,114,17,1,0,0,27, -+ 7,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, -+ 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, -+ 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, -+ 2,0,0,0,6,0,0,0,67,0,0,0,115,22,0,0, -+ 0,116,0,0,100,1,0,100,2,0,100,3,0,100,4,0, -+ 100,5,0,131,3,1,83,41,6,78,114,31,0,0,0,122, -+ 8,60,115,116,114,105,110,103,62,114,176,0,0,0,114,43, -+ 1,0,0,84,41,1,114,44,1,0,0,41,2,114,72,0, -+ 0,0,114,159,0,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,114,16,1,0,0,30,7,0,0,115, -+ 2,0,0,0,0,1,122,25,95,78,97,109,101,115,112,97, -+ 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, -+ 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, -+ 0,0,67,0,0,0,115,4,0,0,0,100,0,0,83,41, -+ 1,78,114,5,0,0,0,41,2,114,72,0,0,0,114,180, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,2,1,0,0,33,7,0,0,115,2,0,0,0, -+ 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, -+ 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, -+ 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, -+ 0,67,0,0,0,115,29,0,0,0,116,0,0,100,1,0, -+ 124,0,0,106,1,0,131,2,0,1,116,2,0,124,0,0, -+ 124,1,0,131,2,0,83,41,2,122,98,76,111,97,100,32, -+ 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, -- 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, -- 180,0,0,0,41,2,114,11,1,0,0,114,158,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 4,1,0,0,81,5,0,0,115,2,0,0,0,0,7,122, -- 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, -- 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, -- 115,13,0,0,0,116,0,0,106,1,0,124,1,0,131,1, -- 0,83,41,1,122,45,82,101,116,117,114,110,32,116,104,101, -- 32,99,111,100,101,32,111,98,106,101,99,116,32,102,111,114, -- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, -- 108,101,46,41,2,114,106,0,0,0,114,21,1,0,0,41, -- 2,114,11,1,0,0,114,158,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,15,1,0,0,90, -- 5,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122, -- 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, -- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,54,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,102,114,111,122,101,110,32,109,111,100,117,108, -- 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, -- 0,41,2,114,11,1,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, -- 0,96,5,0,0,115,2,0,0,0,0,4,122,25,70,114, -- 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, -- 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, -- 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, -- 0,116,0,0,106,1,0,124,1,0,131,1,0,83,41,1, -- 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, -- 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, -- 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, -- 41,2,114,106,0,0,0,90,17,105,115,95,102,114,111,122, -- 101,110,95,112,97,99,107,97,103,101,41,2,114,11,1,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,219,0,0,0,102,5,0,0,115,2, -- 0,0,0,0,4,122,25,70,114,111,122,101,110,73,109,112, -- 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, -- 41,15,114,57,0,0,0,114,56,0,0,0,114,58,0,0, -- 0,114,59,0,0,0,114,17,1,0,0,114,205,0,0,0, -- 114,18,1,0,0,114,13,1,0,0,114,14,1,0,0,114, -- 1,1,0,0,114,4,1,0,0,114,164,0,0,0,114,15, -- 1,0,0,114,16,1,0,0,114,219,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,19,1,0,0,38,5,0,0,115,28,0,0,0,12, -- 7,6,2,18,9,3,1,21,6,3,1,18,8,18,9,18, -- 9,3,1,21,5,3,1,21,5,3,1,114,19,1,0,0, -+ 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, -+ 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, -+ 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, -+ 32,123,33,114,125,41,3,114,153,0,0,0,114,254,0,0, -+ 0,114,181,0,0,0,41,2,114,72,0,0,0,114,159,0, -+ 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, -+ 0,114,5,1,0,0,36,7,0,0,115,4,0,0,0,0, -+ 7,16,1,122,28,95,78,97,109,101,115,112,97,99,101,76, -+ 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, -+ 101,78,41,11,114,58,0,0,0,114,57,0,0,0,114,59, -+ 0,0,0,114,73,0,0,0,114,19,1,0,0,114,206,0, -+ 0,0,114,220,0,0,0,114,17,1,0,0,114,16,1,0, -+ 0,114,2,1,0,0,114,5,1,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 252,0,0,0,11,7,0,0,115,14,0,0,0,12,1,12, -+ 3,18,9,12,3,12,3,12,3,12,3,114,252,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, -- 0,64,0,0,0,115,121,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,90, -- 4,0,100,3,0,90,5,0,100,4,0,90,6,0,101,7, -- 0,100,5,0,100,6,0,132,0,0,131,1,0,90,8,0, -- 101,7,0,100,7,0,100,8,0,132,0,0,131,1,0,90, -- 9,0,101,7,0,100,9,0,100,9,0,100,10,0,100,11, -- 0,132,2,0,131,1,0,90,10,0,101,7,0,100,9,0, -- 100,12,0,100,13,0,132,1,0,131,1,0,90,11,0,100, -- 9,0,83,41,14,218,21,87,105,110,100,111,119,115,82,101, -- 103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101, -- 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, -- 111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97, -- 114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111, -- 119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111, -- 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, -- 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, -- 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, -- 102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119, -- 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, -- 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, -- 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, -- 108,110,97,109,101,125,92,68,101,98,117,103,70,99,2,0, -- 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, -- 0,0,115,67,0,0,0,121,23,0,116,0,0,106,1,0, -- 116,0,0,106,2,0,124,1,0,131,2,0,83,87,110,37, -- 0,4,116,3,0,107,10,0,114,62,0,1,1,1,116,0, -- 0,106,1,0,116,0,0,106,4,0,124,1,0,131,2,0, -- 83,89,110,1,0,88,100,0,0,83,41,1,78,41,5,218, -- 7,95,119,105,110,114,101,103,90,7,79,112,101,110,75,101, -- 121,90,17,72,75,69,89,95,67,85,82,82,69,78,84,95, -- 85,83,69,82,114,40,0,0,0,90,18,72,75,69,89,95, -- 76,79,67,65,76,95,77,65,67,72,73,78,69,41,2,114, -- 11,1,0,0,218,3,107,101,121,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,14,95,111,112,101,110,95, -- 114,101,103,105,115,116,114,121,121,5,0,0,115,8,0,0, -- 0,0,2,3,1,23,1,13,1,122,36,87,105,110,100,111, -- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, -- 46,95,111,112,101,110,95,114,101,103,105,115,116,114,121,99, -- 2,0,0,0,0,0,0,0,6,0,0,0,16,0,0,0, -- 67,0,0,0,115,142,0,0,0,124,0,0,106,0,0,114, -- 21,0,124,0,0,106,1,0,125,2,0,110,9,0,124,0, -- 0,106,2,0,125,2,0,124,2,0,106,3,0,100,1,0, -- 124,1,0,100,2,0,116,4,0,106,5,0,100,0,0,100, -- 3,0,133,2,0,25,131,0,2,125,3,0,121,46,0,124, -- 0,0,106,6,0,124,3,0,131,1,0,143,25,0,125,4, -- 0,116,7,0,106,8,0,124,4,0,100,4,0,131,2,0, -- 125,5,0,87,100,0,0,81,88,87,110,22,0,4,116,9, -- 0,107,10,0,114,137,0,1,1,1,100,0,0,83,89,110, -- 1,0,88,124,5,0,83,41,5,78,114,158,0,0,0,90, -- 11,115,121,115,95,118,101,114,115,105,111,110,114,136,0,0, -- 0,114,30,0,0,0,41,10,218,11,68,69,66,85,71,95, -- 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, -- 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, -- 84,82,89,95,75,69,89,114,47,0,0,0,114,7,0,0, -- 0,218,7,118,101,114,115,105,111,110,114,25,1,0,0,114, -- 23,1,0,0,90,10,81,117,101,114,121,86,97,108,117,101, -- 114,40,0,0,0,41,6,114,11,1,0,0,114,158,0,0, -- 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, -- 24,1,0,0,90,4,104,107,101,121,218,8,102,105,108,101, -- 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, -- 105,115,116,114,121,128,5,0,0,115,22,0,0,0,0,2, -- 9,1,12,2,9,1,15,1,22,1,3,1,18,1,28,1, -- 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, -- 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, -- 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, -- 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, -- 0,0,115,155,0,0,0,124,0,0,106,0,0,124,1,0, -- 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, -- 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, -- 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, -- 0,1,1,1,100,0,0,83,89,110,1,0,88,120,78,0, -- 116,3,0,131,0,0,68,93,67,0,92,2,0,125,5,0, -- 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, -- 1,0,131,1,0,114,80,0,116,6,0,124,1,0,124,5, -- 0,124,1,0,124,4,0,131,2,0,100,1,0,124,4,0, -- 131,2,1,125,7,0,124,7,0,83,113,80,0,87,100,0, -- 0,83,41,2,78,114,217,0,0,0,41,7,114,31,1,0, -- 0,114,39,0,0,0,114,40,0,0,0,114,240,0,0,0, -- 114,230,0,0,0,114,231,0,0,0,114,173,0,0,0,41, -- 8,114,11,1,0,0,114,158,0,0,0,114,35,0,0,0, -- 114,12,1,0,0,114,30,1,0,0,114,169,0,0,0,114, -- 127,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,13,1,0,0,143,5,0, -- 0,115,24,0,0,0,0,2,15,1,12,1,4,1,3,1, -- 14,1,13,1,9,1,22,1,21,1,21,1,9,1,122,31, -- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -- 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, -- 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -- 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, -- 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, -- 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, -- 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, -- 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, -- 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, -- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, -- 32,32,32,32,32,32,78,41,2,114,13,1,0,0,114,169, -- 0,0,0,41,4,114,11,1,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,14,1,0,0,158,5,0, -- 0,115,8,0,0,0,0,7,18,1,12,1,7,2,122,33, -- 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, -- 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, -- 101,41,12,114,57,0,0,0,114,56,0,0,0,114,58,0, -- 0,0,114,59,0,0,0,114,28,1,0,0,114,27,1,0, -- 0,114,26,1,0,0,114,18,1,0,0,114,25,1,0,0, -- 114,31,1,0,0,114,13,1,0,0,114,14,1,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,22,1,0,0,109,5,0,0,115,20,0,0, -- 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, -- 1,21,14,3,1,114,22,1,0,0,99,0,0,0,0,0, -- 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, -- 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, -- 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, -- 4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6, -- 0,90,7,0,100,6,0,83,41,7,218,13,95,76,111,97, -- 100,101,114,66,97,115,105,99,115,122,83,66,97,115,101,32, -- 99,108,97,115,115,32,111,102,32,99,111,109,109,111,110,32, -- 99,111,100,101,32,110,101,101,100,101,100,32,98,121,32,98, -- 111,116,104,32,83,111,117,114,99,101,76,111,97,100,101,114, -- 32,97,110,100,10,32,32,32,32,83,111,117,114,99,101,108, -- 101,115,115,70,105,108,101,76,111,97,100,101,114,46,99,2, -- 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,67, -- 0,0,0,115,88,0,0,0,116,0,0,124,0,0,106,1, -- 0,124,1,0,131,1,0,131,1,0,100,1,0,25,125,2, -- 0,124,2,0,106,2,0,100,2,0,100,1,0,131,2,0, -- 100,3,0,25,125,3,0,124,1,0,106,3,0,100,2,0, -- 131,1,0,100,4,0,25,125,4,0,124,3,0,100,5,0, -- 107,2,0,111,87,0,124,4,0,100,5,0,107,3,0,83, -- 41,6,122,141,67,111,110,99,114,101,116,101,32,105,109,112, -- 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, -- 110,115,112,101,99,116,76,111,97,100,101,114,46,105,115,95, -- 112,97,99,107,97,103,101,32,98,121,32,99,104,101,99,107, -- 105,110,103,32,105,102,10,32,32,32,32,32,32,32,32,116, -- 104,101,32,112,97,116,104,32,114,101,116,117,114,110,101,100, -- 32,98,121,32,103,101,116,95,102,105,108,101,110,97,109,101, -- 32,104,97,115,32,97,32,102,105,108,101,110,97,109,101,32, -- 111,102,32,39,95,95,105,110,105,116,95,95,46,112,121,39, -- 46,114,29,0,0,0,114,116,0,0,0,114,84,0,0,0, -- 114,115,0,0,0,114,72,0,0,0,41,4,114,38,0,0, -- 0,114,238,0,0,0,114,34,0,0,0,114,32,0,0,0, -- 41,5,114,71,0,0,0,114,158,0,0,0,114,131,0,0, -- 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, -- 90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,177, -- 5,0,0,115,8,0,0,0,0,3,25,1,22,1,19,1, -- 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, -- 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, -- 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, -- 80,0,0,0,124,0,0,106,0,0,124,1,0,106,1,0, -- 131,1,0,125,2,0,124,2,0,100,1,0,107,8,0,114, -- 57,0,116,2,0,100,2,0,106,3,0,124,1,0,106,1, -- 0,131,1,0,131,1,0,130,1,0,110,0,0,116,4,0, -- 116,5,0,124,2,0,124,1,0,106,6,0,131,3,0,1, -- 100,1,0,83,41,3,122,19,69,120,101,99,117,116,101,32, -- 116,104,101,32,109,111,100,117,108,101,46,78,122,52,99,97, -- 110,110,111,116,32,108,111,97,100,32,109,111,100,117,108,101, -- 32,123,33,114,125,32,119,104,101,110,32,103,101,116,95,99, -- 111,100,101,40,41,32,114,101,116,117,114,110,115,32,78,111, -- 110,101,41,7,114,15,1,0,0,114,57,0,0,0,114,153, -- 0,0,0,114,47,0,0,0,114,114,0,0,0,114,175,0, -- 0,0,114,63,0,0,0,41,3,114,71,0,0,0,114,179, -- 0,0,0,114,194,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,1,1,0,0,185,5,0,0, -- 115,10,0,0,0,0,2,18,1,12,1,3,1,24,1,122, -- 25,95,76,111,97,100,101,114,66,97,115,105,99,115,46,101, -- 120,101,99,95,109,111,100,117,108,101,78,41,8,114,57,0, -- 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, -- 0,114,219,0,0,0,114,1,1,0,0,114,180,0,0,0, -- 114,4,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,32,1,0,0,172,5, -- 0,0,115,8,0,0,0,12,3,6,2,12,8,12,8,114, -- 32,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, -- 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, -- 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, -- 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, -- 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, -- 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, -- 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, -- 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, -- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, -- 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, -- 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, -- 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, -- 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, -- 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, -- 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, -- 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, -- 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, -- 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, -- 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, -- 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, -- 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, -- 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, -- 114,71,0,0,0,114,35,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,10,112,97,116,104,95, -- 109,116,105,109,101,198,5,0,0,115,2,0,0,0,0,6, -- 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, -- 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,20, -- 0,0,0,105,1,0,124,0,0,106,0,0,124,1,0,131, -- 1,0,100,1,0,54,83,41,2,97,170,1,0,0,79,112, -- 116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,101, -- 116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,97, -- 116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,32, -- 115,112,101,99,105,102,105,101,100,32,112,97,116,104,10,32, -- 32,32,32,32,32,32,32,116,111,32,98,121,32,116,104,101, -- 32,112,97,116,104,32,40,115,116,114,41,46,10,32,32,32, -- 32,32,32,32,32,80,111,115,115,105,98,108,101,32,107,101, -- 121,115,58,10,32,32,32,32,32,32,32,32,45,32,39,109, -- 116,105,109,101,39,32,40,109,97,110,100,97,116,111,114,121, -- 41,32,105,115,32,116,104,101,32,110,117,109,101,114,105,99, -- 32,116,105,109,101,115,116,97,109,112,32,111,102,32,108,97, -- 115,116,32,115,111,117,114,99,101,10,32,32,32,32,32,32, -- 32,32,32,32,99,111,100,101,32,109,111,100,105,102,105,99, -- 97,116,105,111,110,59,10,32,32,32,32,32,32,32,32,45, -- 32,39,115,105,122,101,39,32,40,111,112,116,105,111,110,97, -- 108,41,32,105,115,32,116,104,101,32,115,105,122,101,32,105, -- 110,32,98,121,116,101,115,32,111,102,32,116,104,101,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,10,10,32,32,32, -- 32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,110, -- 103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,108, -- 108,111,119,115,32,116,104,101,32,108,111,97,100,101,114,32, -- 116,111,32,114,101,97,100,32,98,121,116,101,99,111,100,101, -- 32,102,105,108,101,115,46,10,32,32,32,32,32,32,32,32, -- 82,97,105,115,101,115,32,73,79,69,114,114,111,114,32,119, -- 104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,110, -- 110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,10, -- 32,32,32,32,32,32,32,32,114,183,0,0,0,41,1,114, -- 35,1,0,0,41,2,114,71,0,0,0,114,35,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 10,112,97,116,104,95,115,116,97,116,115,206,5,0,0,115, -- 2,0,0,0,0,11,122,23,83,111,117,114,99,101,76,111, -- 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99, -- 4,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, -- 67,0,0,0,115,16,0,0,0,124,0,0,106,0,0,124, -- 2,0,124,3,0,131,2,0,83,41,1,122,228,79,112,116, -- 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, -- 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, -- 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, -- 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, -- 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, -- 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, -- 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, -- 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, -- 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, -- 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, -- 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, -- 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, -- 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, -- 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, -- 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, -- 71,0,0,0,114,141,0,0,0,90,10,99,97,99,104,101, -- 95,112,97,116,104,114,53,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,15,95,99,97,99,104, -- 101,95,98,121,116,101,99,111,100,101,219,5,0,0,115,2, -- 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97, -- 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99, -- 111,100,101,99,3,0,0,0,0,0,0,0,3,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, -- 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, -- 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, -- 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, -- 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, -- 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, -- 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, -- 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, -- 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, -- 115,46,10,32,32,32,32,32,32,32,32,78,114,4,0,0, -- 0,41,3,114,71,0,0,0,114,35,0,0,0,114,53,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,37,1,0,0,229,5,0,0,115,0,0,0,0,122, -- 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, -- 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,5, -- 0,0,0,16,0,0,0,67,0,0,0,115,105,0,0,0, -- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,121, -- 19,0,124,0,0,106,1,0,124,2,0,131,1,0,125,3, -- 0,87,110,58,0,4,116,2,0,107,10,0,114,94,0,1, -- 125,4,0,1,122,26,0,116,3,0,100,1,0,100,2,0, -- 124,1,0,131,1,1,124,4,0,130,2,0,87,89,100,3, -- 0,100,3,0,125,4,0,126,4,0,88,110,1,0,88,116, -- 4,0,124,3,0,131,1,0,83,41,4,122,52,67,111,110, -- 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, -- 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, -- 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, -- 46,122,39,115,111,117,114,99,101,32,110,111,116,32,97,118, -- 97,105,108,97,98,108,101,32,116,104,114,111,117,103,104,32, -- 103,101,116,95,100,97,116,97,40,41,114,67,0,0,0,78, -- 41,5,114,238,0,0,0,218,8,103,101,116,95,100,97,116, -- 97,114,40,0,0,0,114,153,0,0,0,114,203,0,0,0, -- 41,5,114,71,0,0,0,114,158,0,0,0,114,35,0,0, -- 0,114,201,0,0,0,218,3,101,120,99,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,16,1,0,0,236, -- 5,0,0,115,14,0,0,0,0,2,15,1,3,1,19,1, -- 18,1,9,1,31,1,122,23,83,111,117,114,99,101,76,111, -- 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,218, -- 9,95,111,112,116,105,109,105,122,101,114,29,0,0,0,99, -- 3,0,0,0,1,0,0,0,4,0,0,0,9,0,0,0, -- 67,0,0,0,115,31,0,0,0,116,0,0,116,1,0,124, -- 1,0,124,2,0,100,1,0,100,2,0,100,3,0,100,4, -- 0,124,3,0,131,4,2,83,41,5,122,130,82,101,116,117, -- 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, -- 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, -- 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, -- 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, -- 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, -- 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, -- 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, -- 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,175, -- 0,0,0,218,12,100,111,110,116,95,105,110,104,101,114,105, -- 116,84,114,118,0,0,0,41,2,114,114,0,0,0,218,7, -- 99,111,109,112,105,108,101,41,4,114,71,0,0,0,114,53, -- 0,0,0,114,35,0,0,0,114,41,1,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,218,14,115,111, -- 117,114,99,101,95,116,111,95,99,111,100,101,246,5,0,0, -- 115,4,0,0,0,0,5,18,1,122,27,83,111,117,114,99, -- 101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,116, -- 111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,10, -- 0,0,0,45,0,0,0,67,0,0,0,115,177,1,0,0, -- 124,0,0,106,0,0,124,1,0,131,1,0,125,2,0,100, -- 1,0,125,3,0,121,16,0,116,1,0,124,2,0,131,1, -- 0,125,4,0,87,110,24,0,4,116,2,0,107,10,0,114, -- 63,0,1,1,1,100,1,0,125,4,0,89,110,202,0,88, -- 121,19,0,124,0,0,106,3,0,124,2,0,131,1,0,125, -- 5,0,87,110,18,0,4,116,4,0,107,10,0,114,103,0, -- 1,1,1,89,110,162,0,88,116,5,0,124,5,0,100,2, -- 0,25,131,1,0,125,3,0,121,19,0,124,0,0,106,6, -- 0,124,4,0,131,1,0,125,6,0,87,110,18,0,4,116, -- 7,0,107,10,0,114,159,0,1,1,1,89,110,106,0,88, -- 121,34,0,116,8,0,124,6,0,100,3,0,124,5,0,100, -- 4,0,124,1,0,100,5,0,124,4,0,131,1,3,125,7, -- 0,87,110,24,0,4,116,9,0,116,10,0,102,2,0,107, -- 10,0,114,220,0,1,1,1,89,110,45,0,88,116,11,0, -- 100,6,0,124,4,0,124,2,0,131,3,0,1,116,12,0, -- 124,7,0,100,4,0,124,1,0,100,7,0,124,4,0,100, -- 8,0,124,2,0,131,1,3,83,124,0,0,106,6,0,124, -- 2,0,131,1,0,125,8,0,124,0,0,106,13,0,124,8, -- 0,124,2,0,131,2,0,125,9,0,116,11,0,100,9,0, -- 124,2,0,131,2,0,1,116,14,0,106,15,0,12,114,173, -- 1,124,4,0,100,1,0,107,9,0,114,173,1,124,3,0, -- 100,1,0,107,9,0,114,173,1,116,16,0,124,9,0,124, -- 3,0,116,17,0,124,8,0,131,1,0,131,3,0,125,6, -- 0,121,36,0,124,0,0,106,18,0,124,2,0,124,4,0, -- 124,6,0,131,3,0,1,116,11,0,100,10,0,124,4,0, -- 131,2,0,1,87,113,173,1,4,116,2,0,107,10,0,114, -- 169,1,1,1,1,89,113,173,1,88,110,0,0,124,9,0, -- 83,41,11,122,190,67,111,110,99,114,101,116,101,32,105,109, -- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, -- 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, -- 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, -- 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, -- 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, -- 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, -- 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, -- 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, -- 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, -- 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, -- 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, -- 32,32,32,78,114,183,0,0,0,114,187,0,0,0,114,67, -- 0,0,0,114,35,0,0,0,122,13,123,125,32,109,97,116, -- 99,104,101,115,32,123,125,114,140,0,0,0,114,141,0,0, -- 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102, -- 114,111,109,32,123,125,122,10,119,114,111,116,101,32,123,33, -- 114,125,41,19,114,238,0,0,0,114,132,0,0,0,114,124, -- 0,0,0,114,36,1,0,0,114,34,1,0,0,114,14,0, -- 0,0,114,39,1,0,0,114,40,0,0,0,114,190,0,0, -- 0,114,153,0,0,0,114,186,0,0,0,114,152,0,0,0, -- 114,195,0,0,0,114,44,1,0,0,114,7,0,0,0,218, -- 19,100,111,110,116,95,119,114,105,116,101,95,98,121,116,101, -- 99,111,100,101,114,198,0,0,0,114,31,0,0,0,114,38, -- 1,0,0,41,10,114,71,0,0,0,114,158,0,0,0,114, -- 141,0,0,0,114,188,0,0,0,114,140,0,0,0,218,2, -- 115,116,114,53,0,0,0,218,10,98,121,116,101,115,95,100, -- 97,116,97,114,201,0,0,0,90,11,99,111,100,101,95,111, -- 98,106,101,99,116,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,15,1,0,0,254,5,0,0,115,78,0, -- 0,0,0,7,15,1,6,1,3,1,16,1,13,1,11,2, -- 3,1,19,1,13,1,5,2,16,1,3,1,19,1,13,1, -- 5,2,3,1,9,1,12,1,13,1,19,1,5,2,9,1, -- 7,1,15,1,6,1,7,1,15,1,18,1,13,1,22,1, -- 12,1,9,1,15,1,3,1,19,1,17,1,13,1,8,1, -- 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, -- 101,116,95,99,111,100,101,78,114,138,0,0,0,41,10,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,35, -- 1,0,0,114,36,1,0,0,114,38,1,0,0,114,37,1, -- 0,0,114,16,1,0,0,114,44,1,0,0,114,15,1,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,33,1,0,0,196,5,0,0,115,14, -- 0,0,0,12,2,12,8,12,13,12,10,12,7,12,10,18, -- 8,114,33,1,0,0,99,0,0,0,0,0,0,0,0,0, -- 0,0,0,4,0,0,0,0,0,0,0,115,112,0,0,0, -- 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, -- 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, -- 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, -- 132,0,0,90,6,0,101,7,0,135,0,0,102,1,0,100, -- 8,0,100,9,0,134,0,0,131,1,0,90,8,0,101,7, -- 0,100,10,0,100,11,0,132,0,0,131,1,0,90,9,0, -- 100,12,0,100,13,0,132,0,0,90,10,0,135,0,0,83, -- 41,14,218,10,70,105,108,101,76,111,97,100,101,114,122,103, -- 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, -- 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, -- 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, -- 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, -- 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, -- 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, -- 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, -- 3,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, -- 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, -- 95,1,0,100,1,0,83,41,2,122,75,67,97,99,104,101, -- 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, -- 32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111, -- 32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32, -- 98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102, -- 105,110,100,101,114,46,78,41,2,114,67,0,0,0,114,35, -- 0,0,0,41,3,114,71,0,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,72,0,0,0,55,6,0,0,115,4,0,0, -- 0,0,3,9,1,122,19,70,105,108,101,76,111,97,100,101, -- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, -- 34,0,0,0,124,0,0,106,0,0,124,1,0,106,0,0, -- 107,2,0,111,33,0,124,0,0,106,1,0,124,1,0,106, -- 1,0,107,2,0,83,41,1,78,41,2,114,224,0,0,0, -- 114,63,0,0,0,41,2,114,71,0,0,0,114,227,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,229,0,0,0,61,6,0,0,115,4,0,0,0,0,1, -- 18,1,122,17,70,105,108,101,76,111,97,100,101,114,46,95, -- 95,101,113,95,95,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,1,0,116,0,0,124,0, -- 0,106,2,0,131,1,0,65,83,41,1,78,41,3,218,4, -- 104,97,115,104,114,67,0,0,0,114,35,0,0,0,41,1, -- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,8,95,95,104,97,115,104,95,95,65,6, -- 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, -- 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, -- 0,0,0,115,22,0,0,0,116,0,0,116,1,0,124,0, -- 0,131,2,0,106,2,0,124,1,0,131,1,0,83,41,1, -- 122,100,76,111,97,100,32,97,32,109,111,100,117,108,101,32, -- 102,114,111,109,32,97,32,102,105,108,101,46,10,10,32,32, -- 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, -- 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, -- 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, -- 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, -- 32,32,32,32,32,32,41,3,218,5,115,117,112,101,114,114, -- 48,1,0,0,114,4,1,0,0,41,2,114,71,0,0,0, -- 114,158,0,0,0,41,1,114,224,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,4,1,0,0,68,6,0,0,115, -- 2,0,0,0,0,10,122,22,70,105,108,101,76,111,97,100, -- 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, -- 0,0,0,115,7,0,0,0,124,0,0,106,0,0,83,41, -- 1,122,58,82,101,116,117,114,110,32,116,104,101,32,112,97, -- 116,104,32,116,111,32,116,104,101,32,115,111,117,114,99,101, -- 32,102,105,108,101,32,97,115,32,102,111,117,110,100,32,98, -- 121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,114, -- 35,0,0,0,41,2,114,71,0,0,0,114,158,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, -- 238,0,0,0,80,6,0,0,115,2,0,0,0,0,3,122, -- 23,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, -- 102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,0, -- 0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,0, -- 0,0,116,0,0,106,1,0,124,1,0,100,1,0,131,2, -- 0,143,17,0,125,2,0,124,2,0,106,2,0,131,0,0, -- 83,87,100,2,0,81,88,100,2,0,83,41,3,122,39,82, -- 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,102, -- 114,111,109,32,112,97,116,104,32,97,115,32,114,97,119,32, -- 98,121,116,101,115,46,218,1,114,78,41,3,114,49,0,0, -- 0,114,50,0,0,0,90,4,114,101,97,100,41,3,114,71, -- 0,0,0,114,35,0,0,0,114,54,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,39,1,0, -- 0,85,6,0,0,115,4,0,0,0,0,2,21,1,122,19, -- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,100, -- 97,116,97,41,11,114,57,0,0,0,114,56,0,0,0,114, -- 58,0,0,0,114,59,0,0,0,114,72,0,0,0,114,229, -- 0,0,0,114,50,1,0,0,114,156,0,0,0,114,4,1, -- 0,0,114,238,0,0,0,114,39,1,0,0,114,4,0,0, -- 0,114,4,0,0,0,41,1,114,224,0,0,0,114,5,0, -- 0,0,114,48,1,0,0,50,6,0,0,115,14,0,0,0, -- 12,3,6,2,12,6,12,4,12,3,24,12,18,5,114,48, -- 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, -- 4,0,0,0,64,0,0,0,115,64,0,0,0,101,0,0, -- 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, -- 2,0,100,3,0,132,0,0,90,4,0,100,4,0,100,5, -- 0,132,0,0,90,5,0,100,6,0,100,7,0,100,8,0, -- 100,9,0,132,0,1,90,6,0,100,10,0,83,41,11,114, -- 8,1,0,0,122,62,67,111,110,99,114,101,116,101,32,105, -- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, -- 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, -- 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, -- 116,101,109,46,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,3,0,0,0,67,0,0,0,115,36,0,0,0,116,0, -- 0,124,1,0,131,1,0,125,2,0,105,2,0,124,2,0, -- 106,1,0,100,1,0,54,124,2,0,106,2,0,100,2,0, -- 54,83,41,3,122,33,82,101,116,117,114,110,32,116,104,101, -- 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, -- 101,32,112,97,116,104,46,114,183,0,0,0,114,184,0,0, -- 0,41,3,114,39,0,0,0,218,8,115,116,95,109,116,105, -- 109,101,90,7,115,116,95,115,105,122,101,41,3,114,71,0, -- 0,0,114,35,0,0,0,114,46,1,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,36,1,0,0, -- 95,6,0,0,115,4,0,0,0,0,2,12,1,122,27,83, -- 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, -- 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, -- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, -- 34,0,0,0,116,0,0,124,1,0,131,1,0,125,4,0, -- 124,0,0,106,1,0,124,2,0,124,3,0,100,1,0,124, -- 4,0,131,2,1,83,41,2,78,218,5,95,109,111,100,101, -- 41,2,114,144,0,0,0,114,37,1,0,0,41,5,114,71, -- 0,0,0,114,141,0,0,0,114,140,0,0,0,114,53,0, -- 0,0,114,42,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,38,1,0,0,100,6,0,0,115, -- 4,0,0,0,0,2,12,1,122,32,83,111,117,114,99,101, -- 70,105,108,101,76,111,97,100,101,114,46,95,99,97,99,104, -- 101,95,98,121,116,101,99,111,100,101,114,54,1,0,0,105, -- 182,1,0,0,99,3,0,0,0,1,0,0,0,9,0,0, -- 0,18,0,0,0,67,0,0,0,115,53,1,0,0,116,0, -- 0,124,1,0,131,1,0,92,2,0,125,4,0,125,5,0, -- 103,0,0,125,6,0,120,54,0,124,4,0,114,80,0,116, -- 1,0,124,4,0,131,1,0,12,114,80,0,116,0,0,124, -- 4,0,131,1,0,92,2,0,125,4,0,125,7,0,124,6, -- 0,106,2,0,124,7,0,131,1,0,1,113,27,0,87,120, -- 132,0,116,3,0,124,6,0,131,1,0,68,93,118,0,125, -- 7,0,116,4,0,124,4,0,124,7,0,131,2,0,125,4, -- 0,121,17,0,116,5,0,106,6,0,124,4,0,131,1,0, -- 1,87,113,94,0,4,116,7,0,107,10,0,114,155,0,1, -- 1,1,119,94,0,89,113,94,0,4,116,8,0,107,10,0, -- 114,211,0,1,125,8,0,1,122,25,0,116,9,0,100,1, -- 0,124,4,0,124,8,0,131,3,0,1,100,2,0,83,87, -- 89,100,2,0,100,2,0,125,8,0,126,8,0,88,113,94, -- 0,88,113,94,0,87,121,33,0,116,10,0,124,1,0,124, -- 2,0,124,3,0,131,3,0,1,116,9,0,100,3,0,124, -- 1,0,131,2,0,1,87,110,53,0,4,116,8,0,107,10, -- 0,114,48,1,1,125,8,0,1,122,21,0,116,9,0,100, -- 1,0,124,1,0,124,8,0,131,3,0,1,87,89,100,2, -- 0,100,2,0,125,8,0,126,8,0,88,110,1,0,88,100, -- 2,0,83,41,4,122,27,87,114,105,116,101,32,98,121,116, -- 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, -- 101,46,122,27,99,111,117,108,100,32,110,111,116,32,99,114, -- 101,97,116,101,32,123,33,114,125,58,32,123,33,114,125,78, -- 122,12,99,114,101,97,116,101,100,32,123,33,114,125,41,11, -- 114,38,0,0,0,114,46,0,0,0,114,223,0,0,0,114, -- 33,0,0,0,114,28,0,0,0,114,3,0,0,0,90,5, -- 109,107,100,105,114,218,15,70,105,108,101,69,120,105,115,116, -- 115,69,114,114,111,114,114,40,0,0,0,114,152,0,0,0, -- 114,55,0,0,0,41,9,114,71,0,0,0,114,35,0,0, -- 0,114,53,0,0,0,114,54,1,0,0,114,233,0,0,0, -- 114,131,0,0,0,114,27,0,0,0,114,23,0,0,0,114, -- 40,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,37,1,0,0,105,6,0,0,115,38,0,0, -- 0,0,2,18,1,6,2,22,1,18,1,17,2,19,1,15, -- 1,3,1,17,1,13,2,7,1,18,3,16,1,27,1,3, -- 1,16,1,17,1,18,2,122,25,83,111,117,114,99,101,70, -- 105,108,101,76,111,97,100,101,114,46,115,101,116,95,100,97, -- 116,97,78,41,7,114,57,0,0,0,114,56,0,0,0,114, -- 58,0,0,0,114,59,0,0,0,114,36,1,0,0,114,38, -- 1,0,0,114,37,1,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,8,1,0, -- 0,91,6,0,0,115,8,0,0,0,12,2,6,2,12,5, -- 12,5,114,8,1,0,0,99,0,0,0,0,0,0,0,0, -- 0,0,0,0,2,0,0,0,64,0,0,0,115,46,0,0, -- 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, -- 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, -- 4,0,100,5,0,132,0,0,90,5,0,100,6,0,83,41, -- 7,114,7,1,0,0,122,45,76,111,97,100,101,114,32,119, -- 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, -- 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, -- 111,114,116,115,46,99,2,0,0,0,0,0,0,0,5,0, -- 0,0,6,0,0,0,67,0,0,0,115,76,0,0,0,124, -- 0,0,106,0,0,124,1,0,131,1,0,125,2,0,124,0, -- 0,106,1,0,124,2,0,131,1,0,125,3,0,116,2,0, -- 124,3,0,100,1,0,124,1,0,100,2,0,124,2,0,131, -- 1,2,125,4,0,116,3,0,124,4,0,100,1,0,124,1, -- 0,100,3,0,124,2,0,131,1,2,83,41,4,78,114,67, -- 0,0,0,114,35,0,0,0,114,140,0,0,0,41,4,114, -- 238,0,0,0,114,39,1,0,0,114,190,0,0,0,114,195, -- 0,0,0,41,5,114,71,0,0,0,114,158,0,0,0,114, -- 35,0,0,0,114,53,0,0,0,114,47,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,15,1, -- 0,0,138,6,0,0,115,8,0,0,0,0,1,15,1,15, -- 1,24,1,122,29,83,111,117,114,99,101,108,101,115,115,70, -- 105,108,101,76,111,97,100,101,114,46,103,101,116,95,99,111, -- 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, -- 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, -- 41,2,122,39,82,101,116,117,114,110,32,78,111,110,101,32, -- 97,115,32,116,104,101,114,101,32,105,115,32,110,111,32,115, -- 111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, -- 0,144,6,0,0,115,2,0,0,0,0,2,122,31,83,111, -- 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, -- 101,114,46,103,101,116,95,115,111,117,114,99,101,78,41,6, -- 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, -- 59,0,0,0,114,15,1,0,0,114,16,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,7,1,0,0,134,6,0,0,115,6,0,0,0, -- 12,2,6,2,12,6,114,7,1,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, -- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -- 6,0,100,7,0,132,0,0,90,6,0,101,7,0,100,8, -- 0,100,9,0,132,0,0,131,1,0,90,8,0,100,10,0, -- 100,11,0,132,0,0,90,9,0,100,12,0,100,13,0,132, -- 0,0,90,10,0,100,14,0,100,15,0,132,0,0,90,11, -- 0,101,7,0,100,16,0,100,17,0,132,0,0,131,1,0, -- 90,12,0,100,18,0,83,41,19,218,19,69,120,116,101,110, -- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,122,93, -- 76,111,97,100,101,114,32,102,111,114,32,101,120,116,101,110, -- 115,105,111,110,32,109,111,100,117,108,101,115,46,10,10,32, -- 32,32,32,84,104,101,32,99,111,110,115,116,114,117,99,116, -- 111,114,32,105,115,32,100,101,115,105,103,110,101,100,32,116, -- 111,32,119,111,114,107,32,119,105,116,104,32,70,105,108,101, -- 70,105,110,100,101,114,46,10,10,32,32,32,32,99,3,0, -- 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, -- 0,0,115,22,0,0,0,124,1,0,124,0,0,95,0,0, -- 124,2,0,124,0,0,95,1,0,100,0,0,83,41,1,78, -- 41,2,114,67,0,0,0,114,35,0,0,0,41,3,114,71, -- 0,0,0,114,67,0,0,0,114,35,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,72,0,0, -- 0,161,6,0,0,115,4,0,0,0,0,1,9,1,122,28, -- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -- 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, -- 0,115,34,0,0,0,124,0,0,106,0,0,124,1,0,106, -- 0,0,107,2,0,111,33,0,124,0,0,106,1,0,124,1, -- 0,106,1,0,107,2,0,83,41,1,78,41,2,114,224,0, -- 0,0,114,63,0,0,0,41,2,114,71,0,0,0,114,227, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,229,0,0,0,165,6,0,0,115,4,0,0,0, -- 0,1,18,1,122,26,69,120,116,101,110,115,105,111,110,70, -- 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, -- 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, -- 106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131, -- 1,0,65,83,41,1,78,41,3,114,49,1,0,0,114,67, -- 0,0,0,114,35,0,0,0,41,1,114,71,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,50, -- 1,0,0,169,6,0,0,115,2,0,0,0,0,1,122,28, -- 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, -- 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, -- 0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0, -- 0,115,183,0,0,0,116,0,0,124,1,0,131,1,0,143, -- 29,0,1,116,1,0,116,2,0,106,3,0,124,1,0,124, -- 0,0,106,4,0,131,3,0,125,2,0,87,100,1,0,81, -- 88,116,5,0,100,2,0,124,0,0,106,4,0,131,2,0, -- 1,124,0,0,106,6,0,124,1,0,131,1,0,125,3,0, -- 124,3,0,114,124,0,116,7,0,124,2,0,100,3,0,131, -- 2,0,12,114,124,0,116,8,0,124,0,0,106,4,0,131, -- 1,0,100,4,0,25,103,1,0,124,2,0,95,9,0,110, -- 0,0,124,0,0,124,2,0,95,10,0,124,2,0,106,11, -- 0,124,2,0,95,12,0,124,3,0,115,179,0,124,2,0, -- 106,12,0,106,13,0,100,5,0,131,1,0,100,4,0,25, -- 124,2,0,95,12,0,110,0,0,124,2,0,83,41,6,122, -- 25,76,111,97,100,32,97,110,32,101,120,116,101,110,115,105, -- 111,110,32,109,111,100,117,108,101,46,78,122,33,101,120,116, -- 101,110,115,105,111,110,32,109,111,100,117,108,101,32,108,111, -- 97,100,101,100,32,102,114,111,109,32,123,33,114,125,114,246, -- 0,0,0,114,84,0,0,0,114,116,0,0,0,41,14,114, -- 69,0,0,0,114,114,0,0,0,114,106,0,0,0,90,12, -- 108,111,97,100,95,100,121,110,97,109,105,99,114,35,0,0, -- 0,114,152,0,0,0,114,219,0,0,0,114,60,0,0,0, -- 114,38,0,0,0,114,246,0,0,0,114,204,0,0,0,114, -- 57,0,0,0,114,250,0,0,0,114,32,0,0,0,41,4, -- 114,71,0,0,0,114,158,0,0,0,114,179,0,0,0,114, -- 219,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,4,1,0,0,172,6,0,0,115,24,0,0, -- 0,0,5,13,1,9,1,21,1,16,1,15,1,22,1,28, -- 1,9,1,12,1,6,1,28,1,122,31,69,120,116,101,110, -- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,108, -- 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, -- 0,0,0,2,0,0,0,4,0,0,0,3,0,0,0,115, -- 48,0,0,0,116,0,0,124,0,0,106,1,0,131,1,0, -- 100,1,0,25,137,0,0,116,2,0,135,0,0,102,1,0, -- 100,2,0,100,3,0,134,0,0,116,3,0,68,131,1,0, -- 131,1,0,83,41,4,122,49,82,101,116,117,114,110,32,84, -- 114,117,101,32,105,102,32,116,104,101,32,101,120,116,101,110, -- 115,105,111,110,32,109,111,100,117,108,101,32,105,115,32,97, -- 32,112,97,99,107,97,103,101,46,114,29,0,0,0,99,1, -- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, -- 0,0,0,115,31,0,0,0,124,0,0,93,21,0,125,1, -- 0,136,0,0,100,0,0,124,1,0,23,107,2,0,86,1, -- 113,3,0,100,1,0,83,41,2,114,72,0,0,0,78,114, -- 4,0,0,0,41,2,114,22,0,0,0,218,6,115,117,102, -- 102,105,120,41,1,218,9,102,105,108,101,95,110,97,109,101, -- 114,4,0,0,0,114,5,0,0,0,114,77,0,0,0,193, -- 6,0,0,115,2,0,0,0,6,1,122,49,69,120,116,101, -- 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, -- 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, -- 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, -- 38,0,0,0,114,35,0,0,0,114,78,0,0,0,218,18, -- 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, -- 69,83,41,2,114,71,0,0,0,114,158,0,0,0,114,4, -- 0,0,0,41,1,114,58,1,0,0,114,5,0,0,0,114, -- 219,0,0,0,190,6,0,0,115,6,0,0,0,0,2,19, -- 1,18,1,122,30,69,120,116,101,110,115,105,111,110,70,105, -- 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, -- 97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, -- 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, -- 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, -- 101,99,116,46,78,114,4,0,0,0,41,2,114,71,0,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,15,1,0,0,196,6,0,0,115,2, -- 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, -- 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, -- 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, -- 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, -- 83,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, -- 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, -- 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, -- 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, -- 41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,16,1,0,0, -- 200,6,0,0,115,2,0,0,0,0,2,122,30,69,120,116, -- 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, -- 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, -- 115,7,0,0,0,124,0,0,106,0,0,83,41,1,122,58, -- 82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,105, -- 108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,116, -- 104,101,32,102,105,110,100,101,114,46,41,1,114,35,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,238,0,0, -- 0,204,6,0,0,115,2,0,0,0,0,3,122,32,69,120, -- 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, -- 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, -- 13,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, -- 114,59,0,0,0,114,72,0,0,0,114,229,0,0,0,114, -- 50,1,0,0,114,156,0,0,0,114,4,1,0,0,114,219, -- 0,0,0,114,15,1,0,0,114,16,1,0,0,114,238,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,56,1,0,0,153,6,0,0,115, -- 18,0,0,0,12,6,6,2,12,4,12,4,12,3,18,18, -- 12,6,12,4,12,4,114,56,1,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, -- 115,130,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, -- 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, -- 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, -- 0,132,0,0,90,7,0,100,10,0,100,11,0,132,0,0, -- 90,8,0,100,12,0,100,13,0,132,0,0,90,9,0,100, -- 14,0,100,15,0,132,0,0,90,10,0,100,16,0,100,17, -- 0,132,0,0,90,11,0,100,18,0,100,19,0,132,0,0, -- 90,12,0,100,20,0,83,41,21,218,14,95,78,97,109,101, -- 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, -- 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, -- 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, -- 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, -- 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, -- 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, -- 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, -- 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, -- 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, -- 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, -- 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, -- 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, -- 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, -- 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, -- 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, -- 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, -- 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, -- 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, -- 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, -- 97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0, -- 0,2,0,0,0,67,0,0,0,115,52,0,0,0,124,1, -- 0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0, -- 116,2,0,124,0,0,106,3,0,131,0,0,131,1,0,124, -- 0,0,95,4,0,124,3,0,124,0,0,95,5,0,100,0, -- 0,83,41,1,78,41,6,114,70,0,0,0,114,253,0,0, -- 0,114,231,0,0,0,218,16,95,103,101,116,95,112,97,114, -- 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, -- 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, -- 116,104,95,102,105,110,100,101,114,41,4,114,71,0,0,0, -- 114,67,0,0,0,114,35,0,0,0,218,11,112,97,116,104, -- 95,102,105,110,100,101,114,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,114,72,0,0,0,217,6,0,0,115, -- 8,0,0,0,0,1,9,1,9,1,21,1,122,23,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, -- 110,105,116,95,95,99,1,0,0,0,0,0,0,0,4,0, -- 0,0,3,0,0,0,67,0,0,0,115,53,0,0,0,124, -- 0,0,106,0,0,106,1,0,100,1,0,131,1,0,92,3, -- 0,125,1,0,125,2,0,125,3,0,124,2,0,100,2,0, -- 107,2,0,114,43,0,100,6,0,83,124,1,0,100,5,0, -- 102,2,0,83,41,7,122,62,82,101,116,117,114,110,115,32, -- 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, -- 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, -- 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, -- 45,110,97,109,101,41,114,116,0,0,0,114,30,0,0,0, -- 114,7,0,0,0,114,35,0,0,0,114,246,0,0,0,41, -- 2,122,3,115,121,115,122,4,112,97,116,104,41,2,114,70, -- 0,0,0,114,32,0,0,0,41,4,114,71,0,0,0,114, -- 233,0,0,0,218,3,100,111,116,114,94,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,23,95, -- 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, -- 95,110,97,109,101,115,223,6,0,0,115,8,0,0,0,0, -- 2,27,1,12,2,4,3,122,38,95,78,97,109,101,115,112, -- 97,99,101,80,97,116,104,46,95,102,105,110,100,95,112,97, -- 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,99, -- 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, -- 67,0,0,0,115,38,0,0,0,124,0,0,106,0,0,131, -- 0,0,92,2,0,125,1,0,125,2,0,116,1,0,116,2, -- 0,106,3,0,124,1,0,25,124,2,0,131,2,0,83,41, -- 1,78,41,4,114,66,1,0,0,114,62,0,0,0,114,7, -- 0,0,0,114,73,0,0,0,41,3,114,71,0,0,0,90, -- 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, -- 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, -- 97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,61,1,0,0,233,6,0,0,115,4,0,0,0, -- 0,1,18,1,122,31,95,78,97,109,101,115,112,97,99,101, -- 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, -- 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, -- 0,0,3,0,0,0,67,0,0,0,115,127,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,125,1, -- 0,124,1,0,124,0,0,106,2,0,107,3,0,114,120,0, -- 124,0,0,106,3,0,124,0,0,106,4,0,124,1,0,131, -- 2,0,125,2,0,124,2,0,100,0,0,107,9,0,114,108, -- 0,124,2,0,106,5,0,100,0,0,107,8,0,114,108,0, -- 124,2,0,106,6,0,114,108,0,124,2,0,106,6,0,124, -- 0,0,95,7,0,113,108,0,110,0,0,124,1,0,124,0, -- 0,95,2,0,110,0,0,124,0,0,106,7,0,83,41,1, -- 78,41,8,114,231,0,0,0,114,61,1,0,0,114,62,1, -- 0,0,114,63,1,0,0,114,70,0,0,0,114,169,0,0, -- 0,114,220,0,0,0,114,253,0,0,0,41,3,114,71,0, -- 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, -- 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, -- 101,237,6,0,0,115,16,0,0,0,0,2,18,1,15,1, -- 21,3,27,1,9,1,18,1,12,1,122,27,95,78,97,109, -- 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, -- 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, -- 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -- 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, -- 83,41,1,78,41,2,218,4,105,116,101,114,114,67,1,0, -- 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,8,95,95,105,116,101,114,95, -- 95,250,6,0,0,115,2,0,0,0,0,1,122,23,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, -- 116,101,114,95,95,99,1,0,0,0,0,0,0,0,1,0, -- 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,116, -- 0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,41, -- 1,78,41,2,114,31,0,0,0,114,67,1,0,0,41,1, -- 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,7,95,95,108,101,110,95,95,253,6,0, -- 0,115,2,0,0,0,0,1,122,22,95,78,97,109,101,115, -- 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, -- 0,67,0,0,0,115,16,0,0,0,100,1,0,106,0,0, -- 124,0,0,106,1,0,131,1,0,83,41,2,78,122,20,95, -- 78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33, -- 114,125,41,41,2,114,47,0,0,0,114,253,0,0,0,41, -- 1,114,71,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,101,0,0,0,0,7,0,0,115,2, -- 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, -- 101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,2, -- 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, -- 0,0,0,115,16,0,0,0,124,1,0,124,0,0,106,0, -- 0,131,0,0,107,6,0,83,41,1,78,41,1,114,67,1, -- 0,0,41,2,114,71,0,0,0,218,4,105,116,101,109,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,12, -- 95,95,99,111,110,116,97,105,110,115,95,95,3,7,0,0, -- 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, -- 97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105, -- 110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0, -- 0,2,0,0,0,67,0,0,0,115,20,0,0,0,124,0, -- 0,106,0,0,106,1,0,124,1,0,131,1,0,1,100,0, -- 0,83,41,1,78,41,2,114,253,0,0,0,114,223,0,0, -- 0,41,2,114,71,0,0,0,114,71,1,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,223,0,0, -- 0,6,7,0,0,115,2,0,0,0,0,1,122,21,95,78, -- 97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112, -- 101,110,100,78,41,13,114,57,0,0,0,114,56,0,0,0, -- 114,58,0,0,0,114,59,0,0,0,114,72,0,0,0,114, -- 66,1,0,0,114,61,1,0,0,114,67,1,0,0,114,69, -- 1,0,0,114,70,1,0,0,114,101,0,0,0,114,72,1, -- 0,0,114,223,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0, -- 210,6,0,0,115,20,0,0,0,12,5,6,2,12,6,12, -- 10,12,4,12,13,12,3,12,3,12,3,12,3,114,60,1, -- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, -- 0,0,0,64,0,0,0,115,106,0,0,0,101,0,0,90, -- 1,0,100,0,0,90,2,0,100,1,0,100,2,0,132,0, -- 0,90,3,0,101,4,0,100,3,0,100,4,0,132,0,0, -- 131,1,0,90,5,0,100,5,0,100,6,0,132,0,0,90, -- 6,0,100,7,0,100,8,0,132,0,0,90,7,0,100,9, -- 0,100,10,0,132,0,0,90,8,0,100,11,0,100,12,0, -- 132,0,0,90,9,0,100,13,0,100,14,0,132,0,0,90, -- 10,0,100,15,0,83,41,16,114,251,0,0,0,99,4,0, -- 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, -- 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, -- 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, -- 41,1,78,41,2,114,60,1,0,0,114,253,0,0,0,41, -- 4,114,71,0,0,0,114,67,0,0,0,114,35,0,0,0, -- 114,64,1,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,72,0,0,0,12,7,0,0,115,2,0, -- 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, -- 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, -- 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, -- 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, -- 1,0,106,1,0,131,1,0,83,41,2,122,115,82,101,116, -- 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, -- 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, -- 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, -- 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, -- 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, -- 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, -- 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, -- 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, -- 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, -- 0,0,114,57,0,0,0,41,2,114,11,1,0,0,114,179, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,205,0,0,0,15,7,0,0,115,2,0,0,0, -- 0,7,122,28,95,78,97,109,101,115,112,97,99,101,76,111, -- 97,100,101,114,46,109,111,100,117,108,101,95,114,101,112,114, -- 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, -- 0,67,0,0,0,115,4,0,0,0,100,1,0,83,41,2, -- 78,84,114,4,0,0,0,41,2,114,71,0,0,0,114,158, -- 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,114,219,0,0,0,24,7,0,0,115,2,0,0,0, -- 0,1,122,27,95,78,97,109,101,115,112,97,99,101,76,111, -- 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, -- 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, -- 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,78, -- 114,30,0,0,0,114,4,0,0,0,41,2,114,71,0,0, -- 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,114,16,1,0,0,27,7,0,0,115,2, -- 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, -- 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, -- 99,101,99,2,0,0,0,0,0,0,0,2,0,0,0,6, -- 0,0,0,67,0,0,0,115,22,0,0,0,116,0,0,100, -- 1,0,100,2,0,100,3,0,100,4,0,100,5,0,131,3, -- 1,83,41,6,78,114,30,0,0,0,122,8,60,115,116,114, -- 105,110,103,62,114,175,0,0,0,114,42,1,0,0,84,41, -- 1,114,43,1,0,0,41,2,114,71,0,0,0,114,158,0, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,114,15,1,0,0,30,7,0,0,115,2,0,0,0,0, -- 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, -- 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, -- 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, -- 0,115,4,0,0,0,100,0,0,83,41,1,78,114,4,0, -- 0,0,41,2,114,71,0,0,0,114,179,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,1,1, -- 0,0,33,7,0,0,115,2,0,0,0,0,1,122,28,95, -- 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, -- 101,120,101,99,95,109,111,100,117,108,101,99,2,0,0,0, -- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, -- 115,29,0,0,0,116,0,0,100,1,0,124,0,0,106,1, -- 0,131,2,0,1,116,2,0,124,0,0,124,1,0,131,2, -- 0,83,41,2,122,98,76,111,97,100,32,97,32,110,97,109, -- 101,115,112,97,99,101,32,109,111,100,117,108,101,46,10,10, -- 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, -- 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, -- 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, -- 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, -- 32,32,32,32,32,32,32,32,122,38,110,97,109,101,115,112, -- 97,99,101,32,109,111,100,117,108,101,32,108,111,97,100,101, -- 100,32,119,105,116,104,32,112,97,116,104,32,123,33,114,125, -- 41,3,114,152,0,0,0,114,253,0,0,0,114,180,0,0, -- 0,41,2,114,71,0,0,0,114,158,0,0,0,114,4,0, -- 0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0, -- 0,36,7,0,0,115,4,0,0,0,0,7,16,1,122,28, -- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, -- 46,108,111,97,100,95,109,111,100,117,108,101,78,41,11,114, -- 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,72, -- 0,0,0,114,18,1,0,0,114,205,0,0,0,114,219,0, -- 0,0,114,16,1,0,0,114,15,1,0,0,114,1,1,0, -- 0,114,4,1,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,11, -- 7,0,0,115,14,0,0,0,12,1,12,3,18,9,12,3, -- 12,3,12,3,12,3,114,251,0,0,0,99,0,0,0,0, -- 0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0, -- 115,160,0,0,0,101,0,0,90,1,0,100,0,0,90,2, -- 0,100,1,0,90,3,0,101,4,0,100,2,0,100,3,0, -- 132,0,0,131,1,0,90,5,0,101,4,0,100,4,0,100, -- 5,0,132,0,0,131,1,0,90,6,0,101,4,0,100,6, -- 0,100,7,0,132,0,0,131,1,0,90,7,0,101,4,0, -- 100,8,0,100,9,0,132,0,0,131,1,0,90,8,0,101, -- 4,0,100,10,0,100,11,0,100,12,0,132,1,0,131,1, -- 0,90,9,0,101,4,0,100,10,0,100,10,0,100,13,0, -- 100,14,0,132,2,0,131,1,0,90,10,0,101,4,0,100, -- 10,0,100,15,0,100,16,0,132,1,0,131,1,0,90,11, -- 0,100,10,0,83,41,17,218,10,80,97,116,104,70,105,110, -- 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, -- 105,110,100,101,114,32,102,111,114,32,115,121,115,46,112,97, -- 116,104,32,97,110,100,32,112,97,99,107,97,103,101,32,95, -- 95,112,97,116,104,95,95,32,97,116,116,114,105,98,117,116, -- 101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0, -- 4,0,0,0,67,0,0,0,115,58,0,0,0,120,51,0, -- 116,0,0,106,1,0,106,2,0,131,0,0,68,93,34,0, -- 125,1,0,116,3,0,124,1,0,100,1,0,131,2,0,114, -- 16,0,124,1,0,106,4,0,131,0,0,1,113,16,0,113, -- 16,0,87,100,2,0,83,41,3,122,125,67,97,108,108,32, -- 116,104,101,32,105,110,118,97,108,105,100,97,116,101,95,99, -- 97,99,104,101,115,40,41,32,109,101,116,104,111,100,32,111, -- 110,32,97,108,108,32,112,97,116,104,32,101,110,116,114,121, -- 32,102,105,110,100,101,114,115,10,32,32,32,32,32,32,32, -- 32,115,116,111,114,101,100,32,105,110,32,115,121,115,46,112, -+ 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, -+ 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, -+ 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, -+ 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, -+ 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, -+ 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, -+ 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, -+ 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, -+ 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, -+ 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, -+ 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, -+ 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, -+ 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, -+ 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, -+ 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, -+ 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, -+ 0,2,0,0,0,4,0,0,0,67,0,0,0,115,58,0, -+ 0,0,120,51,0,116,0,0,106,1,0,106,2,0,131,0, -+ 0,68,93,34,0,125,1,0,116,3,0,124,1,0,100,1, -+ 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, -+ 1,113,16,0,113,16,0,87,100,2,0,83,41,3,122,125, -+ 67,97,108,108,32,116,104,101,32,105,110,118,97,108,105,100, -+ 97,116,101,95,99,97,99,104,101,115,40,41,32,109,101,116, -+ 104,111,100,32,111,110,32,97,108,108,32,112,97,116,104,32, -+ 101,110,116,114,121,32,102,105,110,100,101,114,115,10,32,32, -+ 32,32,32,32,32,32,115,116,111,114,101,100,32,105,110,32, -+ 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, -+ 114,95,99,97,99,104,101,115,32,40,119,104,101,114,101,32, -+ 105,109,112,108,101,109,101,110,116,101,100,41,46,218,17,105, -+ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, -+ 78,41,5,114,8,0,0,0,218,19,112,97,116,104,95,105, -+ 109,112,111,114,116,101,114,95,99,97,99,104,101,218,6,118, -+ 97,108,117,101,115,114,61,0,0,0,114,75,1,0,0,41, -+ 2,114,12,1,0,0,218,6,102,105,110,100,101,114,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,75,1, -+ 0,0,53,7,0,0,115,6,0,0,0,0,4,22,1,15, -+ 1,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, -+ 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, -+ 2,0,0,0,0,0,0,0,3,0,0,0,12,0,0,0, -+ 67,0,0,0,115,94,0,0,0,116,0,0,106,1,0,115, -+ 28,0,116,2,0,106,3,0,100,1,0,116,4,0,131,2, -+ 0,1,110,0,0,120,59,0,116,0,0,106,1,0,68,93, -+ 44,0,125,2,0,121,14,0,124,2,0,124,1,0,131,1, -+ 0,83,87,113,38,0,4,116,5,0,107,10,0,114,81,0, -+ 1,1,1,119,38,0,89,113,38,0,88,113,38,0,87,100, -+ 2,0,83,100,2,0,83,41,3,122,113,83,101,97,114,99, -+ 104,32,115,101,113,117,101,110,99,101,32,111,102,32,104,111, -+ 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, -+ 32,102,111,114,32,39,112,97,116,104,39,46,10,10,32,32, -+ 32,32,32,32,32,32,73,102,32,39,104,111,111,107,115,39, -+ 32,105,115,32,102,97,108,115,101,32,116,104,101,110,32,117, -+ 115,101,32,115,121,115,46,112,97,116,104,95,104,111,111,107, -+ 115,46,10,10,32,32,32,32,32,32,32,32,122,23,115,121, -+ 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, -+ 101,109,112,116,121,78,41,6,114,8,0,0,0,218,10,112, -+ 97,116,104,95,104,111,111,107,115,114,167,0,0,0,114,168, -+ 0,0,0,114,169,0,0,0,114,154,0,0,0,41,3,114, -+ 12,1,0,0,114,36,0,0,0,90,4,104,111,111,107,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,11, -+ 95,112,97,116,104,95,104,111,111,107,115,61,7,0,0,115, -+ 16,0,0,0,0,7,9,1,19,1,16,1,3,1,14,1, -+ 13,1,12,2,122,22,80,97,116,104,70,105,110,100,101,114, -+ 46,95,112,97,116,104,95,104,111,111,107,115,99,2,0,0, -+ 0,0,0,0,0,3,0,0,0,11,0,0,0,67,0,0, -+ 0,115,97,0,0,0,124,1,0,100,1,0,107,2,0,114, -+ 27,0,116,0,0,106,1,0,131,0,0,125,1,0,110,0, -+ 0,121,17,0,116,2,0,106,3,0,124,1,0,25,125,2, -+ 0,87,110,46,0,4,116,4,0,107,10,0,114,92,0,1, -+ 1,1,124,0,0,106,5,0,124,1,0,131,1,0,125,2, -+ 0,124,2,0,116,2,0,106,3,0,124,1,0,60,89,110, -+ 1,0,88,124,2,0,83,41,2,122,210,71,101,116,32,116, -+ 104,101,32,102,105,110,100,101,114,32,102,111,114,32,116,104, -+ 101,32,112,97,116,104,32,101,110,116,114,121,32,102,114,111, -+ 109,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, -+ 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, -+ 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, -+ 101,110,116,114,121,32,105,115,32,110,111,116,32,105,110,32, -+ 116,104,101,32,99,97,99,104,101,44,32,102,105,110,100,32, -+ 116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32, -+ 102,105,110,100,101,114,10,32,32,32,32,32,32,32,32,97, -+ 110,100,32,99,97,99,104,101,32,105,116,46,32,73,102,32, -+ 110,111,32,102,105,110,100,101,114,32,105,115,32,97,118,97, -+ 105,108,97,98,108,101,44,32,115,116,111,114,101,32,78,111, -+ 110,101,46,10,10,32,32,32,32,32,32,32,32,114,31,0, -+ 0,0,41,6,114,4,0,0,0,114,46,0,0,0,114,8, -+ 0,0,0,114,76,1,0,0,114,80,0,0,0,114,80,1, -+ 0,0,41,3,114,12,1,0,0,114,36,0,0,0,114,78, -+ 1,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, -+ 101,114,95,99,97,99,104,101,78,7,0,0,115,16,0,0, -+ 0,0,8,12,1,15,1,3,1,17,1,13,1,15,1,18, -+ 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, -- 104,101,115,32,40,119,104,101,114,101,32,105,109,112,108,101, -- 109,101,110,116,101,100,41,46,218,17,105,110,118,97,108,105, -- 100,97,116,101,95,99,97,99,104,101,115,78,41,5,114,7, -- 0,0,0,218,19,112,97,116,104,95,105,109,112,111,114,116, -- 101,114,95,99,97,99,104,101,218,6,118,97,108,117,101,115, -- 114,60,0,0,0,114,74,1,0,0,41,2,114,11,1,0, -- 0,218,6,102,105,110,100,101,114,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,74,1,0,0,53,7,0, -- 0,115,6,0,0,0,0,4,22,1,15,1,122,28,80,97, -- 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, -- 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, -- 0,0,0,3,0,0,0,12,0,0,0,67,0,0,0,115, -- 94,0,0,0,116,0,0,106,1,0,115,28,0,116,2,0, -- 106,3,0,100,1,0,116,4,0,131,2,0,1,110,0,0, -- 120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,0, -- 121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,38, -- 0,4,116,5,0,107,10,0,114,81,0,1,1,1,119,38, -- 0,89,113,38,0,88,113,38,0,87,100,2,0,83,100,2, -- 0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,113, -- 117,101,110,99,101,32,111,102,32,104,111,111,107,115,32,102, -- 111,114,32,97,32,102,105,110,100,101,114,32,102,111,114,32, -- 39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,32, -- 32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,102, -- 97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,121, -- 115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,32, -- 32,32,32,32,32,32,32,122,23,115,121,115,46,112,97,116, -- 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, -- 78,41,6,114,7,0,0,0,218,10,112,97,116,104,95,104, -- 111,111,107,115,114,166,0,0,0,114,167,0,0,0,114,168, -- 0,0,0,114,153,0,0,0,41,3,114,11,1,0,0,114, -- 35,0,0,0,90,4,104,111,111,107,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,11,95,112,97,116,104, -- 95,104,111,111,107,115,61,7,0,0,115,16,0,0,0,0, -- 7,9,1,19,1,16,1,3,1,14,1,13,1,12,2,122, -- 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, -- 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, -- 3,0,0,0,11,0,0,0,67,0,0,0,115,97,0,0, -- 0,124,1,0,100,1,0,107,2,0,114,27,0,116,0,0, -- 106,1,0,131,0,0,125,1,0,110,0,0,121,17,0,116, -- 2,0,106,3,0,124,1,0,25,125,2,0,87,110,46,0, -- 4,116,4,0,107,10,0,114,92,0,1,1,1,124,0,0, -- 106,5,0,124,1,0,131,1,0,125,2,0,124,2,0,116, -- 2,0,106,3,0,124,1,0,60,89,110,1,0,88,124,2, -- 0,83,41,2,122,210,71,101,116,32,116,104,101,32,102,105, -- 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, -- 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, -- 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, -- 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, -- 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, -- 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, -- 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, -- 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, -- 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, -- 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, -- 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, -- 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, -- 32,32,32,32,32,32,32,32,114,30,0,0,0,41,6,114, -- 3,0,0,0,114,45,0,0,0,114,7,0,0,0,114,75, -- 1,0,0,114,79,0,0,0,114,79,1,0,0,41,3,114, -- 11,1,0,0,114,35,0,0,0,114,77,1,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,20,95, -- 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, -- 99,104,101,78,7,0,0,115,16,0,0,0,0,8,12,1, -- 15,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, -- 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, -- 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, -- 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, -- 0,0,115,113,0,0,0,116,0,0,124,2,0,100,1,0, -- 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, -- 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, -- 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, -- 125,4,0,124,3,0,100,0,0,107,9,0,114,85,0,116, -- 3,0,124,1,0,124,3,0,131,2,0,83,116,4,0,124, -- 1,0,100,0,0,131,2,0,125,5,0,124,4,0,124,5, -- 0,95,5,0,124,5,0,83,41,2,78,114,165,0,0,0, -- 41,6,114,60,0,0,0,114,165,0,0,0,114,14,1,0, -- 0,114,173,0,0,0,114,216,0,0,0,114,220,0,0,0, -- 41,6,114,11,1,0,0,114,158,0,0,0,114,77,1,0, -- 0,114,169,0,0,0,114,170,0,0,0,114,177,0,0,0, -- 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, -- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, -- 99,95,7,0,0,115,18,0,0,0,0,4,15,1,24,2, -- 15,1,6,1,12,1,13,1,15,1,9,1,122,27,80,97, -- 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, -- 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, -- 0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,115, -- 252,0,0,0,103,0,0,125,4,0,120,239,0,124,2,0, -- 68,93,203,0,125,5,0,116,0,0,124,5,0,116,1,0, -- 116,2,0,102,2,0,131,2,0,115,46,0,113,13,0,110, -- 0,0,124,0,0,106,3,0,124,5,0,131,1,0,125,6, -- 0,124,6,0,100,1,0,107,9,0,114,13,0,116,4,0, -- 124,6,0,100,2,0,131,2,0,114,109,0,124,6,0,106, -- 5,0,124,1,0,124,3,0,131,2,0,125,7,0,110,18, -- 0,124,0,0,106,6,0,124,1,0,124,6,0,131,2,0, -- 125,7,0,124,7,0,100,1,0,107,8,0,114,145,0,113, -- 13,0,110,0,0,124,7,0,106,7,0,100,1,0,107,9, -- 0,114,164,0,124,7,0,83,124,7,0,106,8,0,125,8, -- 0,124,8,0,100,1,0,107,8,0,114,200,0,116,9,0, -- 100,3,0,131,1,0,130,1,0,110,0,0,124,4,0,106, -- 10,0,124,8,0,131,1,0,1,113,13,0,113,13,0,87, -- 116,11,0,124,1,0,100,1,0,131,2,0,125,7,0,124, -- 4,0,124,7,0,95,8,0,124,7,0,83,100,1,0,83, -- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, -- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, -- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, -- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, -- 109,101,46,78,114,13,1,0,0,122,19,115,112,101,99,32, -- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,12, -- 114,192,0,0,0,218,3,115,116,114,218,5,98,121,116,101, -- 115,114,80,1,0,0,114,60,0,0,0,114,13,1,0,0, -- 114,81,1,0,0,114,169,0,0,0,114,220,0,0,0,114, -- 153,0,0,0,114,197,0,0,0,114,216,0,0,0,41,9, -- 114,11,1,0,0,114,158,0,0,0,114,35,0,0,0,114, -- 12,1,0,0,218,14,110,97,109,101,115,112,97,99,101,95, -- 112,97,116,104,90,5,101,110,116,114,121,114,77,1,0,0, -- 114,177,0,0,0,114,170,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,218,9,95,103,101,116,95, -- 115,112,101,99,110,7,0,0,115,40,0,0,0,0,5,6, -- 1,13,1,21,1,6,1,15,1,12,1,15,1,21,2,18, -- 1,12,1,6,1,15,1,4,1,9,1,12,1,15,5,20, -- 2,15,1,9,1,122,20,80,97,116,104,70,105,110,100,101, -- 114,46,95,103,101,116,95,115,112,101,99,99,4,0,0,0, -- 0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,0, -- 115,143,0,0,0,124,2,0,100,1,0,107,8,0,114,24, -- 0,116,0,0,106,1,0,125,2,0,110,0,0,124,0,0, -- 106,2,0,124,1,0,124,2,0,124,3,0,131,3,0,125, -- 4,0,124,4,0,100,1,0,107,8,0,114,61,0,100,1, -- 0,83,124,4,0,106,3,0,100,1,0,107,8,0,114,135, -- 0,124,4,0,106,4,0,125,5,0,124,5,0,114,128,0, -- 100,2,0,124,4,0,95,5,0,116,6,0,124,1,0,124, -- 5,0,124,0,0,106,2,0,131,3,0,124,4,0,95,4, -- 0,124,4,0,83,100,1,0,83,110,4,0,124,4,0,83, -- 100,1,0,83,41,3,122,98,102,105,110,100,32,116,104,101, -- 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, -- 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, -- 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, -- 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, -- 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, -- 116,101,114,95,99,97,99,104,101,46,78,90,9,110,97,109, -- 101,115,112,97,99,101,41,7,114,7,0,0,0,114,35,0, -- 0,0,114,85,1,0,0,114,169,0,0,0,114,220,0,0, -- 0,114,217,0,0,0,114,60,1,0,0,41,6,114,11,1, -- 0,0,114,158,0,0,0,114,35,0,0,0,114,12,1,0, -- 0,114,177,0,0,0,114,84,1,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,13,1,0,0,142, -- 7,0,0,115,26,0,0,0,0,4,12,1,12,1,21,1, -- 12,1,4,1,15,1,9,1,6,3,9,1,24,1,4,2, -- 7,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, -- 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, -- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,41,0, -- 0,0,124,0,0,106,0,0,124,1,0,124,2,0,131,2, -- 0,125,3,0,124,3,0,100,1,0,107,8,0,114,34,0, -- 100,1,0,83,124,3,0,106,1,0,83,41,2,122,170,102, -- 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, -- 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, -- 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, -- 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, -- 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, -- 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, -- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -- 10,32,32,32,32,32,32,32,32,78,41,2,114,13,1,0, -- 0,114,169,0,0,0,41,4,114,11,1,0,0,114,158,0, -- 0,0,114,35,0,0,0,114,177,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,14,1,0,0, -- 164,7,0,0,115,8,0,0,0,0,8,18,1,12,1,4, -- 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, -- 110,100,95,109,111,100,117,108,101,41,12,114,57,0,0,0, -- 114,56,0,0,0,114,58,0,0,0,114,59,0,0,0,114, -- 18,1,0,0,114,74,1,0,0,114,79,1,0,0,114,80, -- 1,0,0,114,81,1,0,0,114,85,1,0,0,114,13,1, -- 0,0,114,14,1,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,73,1,0,0, -- 49,7,0,0,115,22,0,0,0,12,2,6,2,18,8,18, -- 17,18,17,18,15,3,1,18,31,3,1,21,21,3,1,114, -- 73,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, -- 0,3,0,0,0,64,0,0,0,115,133,0,0,0,101,0, -- 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, -- 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, -- 5,0,132,0,0,90,5,0,101,6,0,90,7,0,100,6, -- 0,100,7,0,132,0,0,90,8,0,100,8,0,100,9,0, -- 132,0,0,90,9,0,100,10,0,100,11,0,100,12,0,132, -- 1,0,90,10,0,100,13,0,100,14,0,132,0,0,90,11, -- 0,101,12,0,100,15,0,100,16,0,132,0,0,131,1,0, -- 90,13,0,100,17,0,100,18,0,132,0,0,90,14,0,100, -- 10,0,83,41,19,218,10,70,105,108,101,70,105,110,100,101, -- 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105, -- 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114, -- 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101, -- 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101, -- 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102, -- 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32, -- 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101, -- 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, -- 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97, -- 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32, -- 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99, -- 2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, -- 7,0,0,0,115,122,0,0,0,103,0,0,125,3,0,120, -- 52,0,124,2,0,68,93,44,0,92,2,0,137,0,0,125, -- 4,0,124,3,0,106,0,0,135,0,0,102,1,0,100,1, -- 0,100,2,0,134,0,0,124,4,0,68,131,1,0,131,1, -- 0,1,113,13,0,87,124,3,0,124,0,0,95,1,0,124, -- 1,0,112,79,0,100,3,0,124,0,0,95,2,0,100,6, -- 0,124,0,0,95,3,0,116,4,0,131,0,0,124,0,0, -- 95,5,0,116,4,0,131,0,0,124,0,0,95,6,0,100, -- 5,0,83,41,7,122,154,73,110,105,116,105,97,108,105,122, -- 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, -- 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, -- 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, -- 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, -- 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, -- 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, -- 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, -- 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, -- 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, -- 46,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, -- 0,0,51,0,0,0,115,27,0,0,0,124,0,0,93,17, -- 0,125,1,0,124,1,0,136,0,0,102,2,0,86,1,113, -- 3,0,100,0,0,83,41,1,78,114,4,0,0,0,41,2, -- 114,22,0,0,0,114,57,1,0,0,41,1,114,169,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,77,0,0,0, -- 193,7,0,0,115,2,0,0,0,6,0,122,38,70,105,108, -+ 104,101,99,3,0,0,0,0,0,0,0,6,0,0,0,3, -+ 0,0,0,67,0,0,0,115,113,0,0,0,116,0,0,124, -+ 2,0,100,1,0,131,2,0,114,39,0,124,2,0,106,1, -+ 0,124,1,0,131,1,0,92,2,0,125,3,0,125,4,0, -+ 110,21,0,124,2,0,106,2,0,124,1,0,131,1,0,125, -+ 3,0,103,0,0,125,4,0,124,3,0,100,0,0,107,9, -+ 0,114,85,0,116,3,0,124,1,0,124,3,0,131,2,0, -+ 83,116,4,0,124,1,0,100,0,0,131,2,0,125,5,0, -+ 124,4,0,124,5,0,95,5,0,124,5,0,83,41,2,78, -+ 114,166,0,0,0,41,6,114,61,0,0,0,114,166,0,0, -+ 0,114,15,1,0,0,114,174,0,0,0,114,217,0,0,0, -+ 114,221,0,0,0,41,6,114,12,1,0,0,114,159,0,0, -+ 0,114,78,1,0,0,114,170,0,0,0,114,171,0,0,0, -+ 114,178,0,0,0,114,5,0,0,0,114,5,0,0,0,114, -+ 6,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101, -+ 116,95,115,112,101,99,95,7,0,0,115,18,0,0,0,0, -+ 4,15,1,24,2,15,1,6,1,12,1,13,1,15,1,9, -+ 1,122,27,80,97,116,104,70,105,110,100,101,114,46,95,108, -+ 101,103,97,99,121,95,103,101,116,95,115,112,101,99,78,99, -+ 4,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, -+ 67,0,0,0,115,252,0,0,0,103,0,0,125,4,0,120, -+ 239,0,124,2,0,68,93,203,0,125,5,0,116,0,0,124, -+ 5,0,116,1,0,116,2,0,102,2,0,131,2,0,115,46, -+ 0,113,13,0,110,0,0,124,0,0,106,3,0,124,5,0, -+ 131,1,0,125,6,0,124,6,0,100,1,0,107,9,0,114, -+ 13,0,116,4,0,124,6,0,100,2,0,131,2,0,114,109, -+ 0,124,6,0,106,5,0,124,1,0,124,3,0,131,2,0, -+ 125,7,0,110,18,0,124,0,0,106,6,0,124,1,0,124, -+ 6,0,131,2,0,125,7,0,124,7,0,100,1,0,107,8, -+ 0,114,145,0,113,13,0,110,0,0,124,7,0,106,7,0, -+ 100,1,0,107,9,0,114,164,0,124,7,0,83,124,7,0, -+ 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, -+ 200,0,116,9,0,100,3,0,131,1,0,130,1,0,110,0, -+ 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, -+ 0,113,13,0,87,116,11,0,124,1,0,100,1,0,131,2, -+ 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, -+ 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, -+ 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, -+ 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, -+ 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, -+ 103,101,32,110,97,109,101,46,78,114,14,1,0,0,122,19, -+ 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, -+ 100,101,114,41,12,114,193,0,0,0,218,3,115,116,114,218, -+ 5,98,121,116,101,115,114,81,1,0,0,114,61,0,0,0, -+ 114,14,1,0,0,114,82,1,0,0,114,170,0,0,0,114, -+ 221,0,0,0,114,154,0,0,0,114,198,0,0,0,114,217, -+ 0,0,0,41,9,114,12,1,0,0,114,159,0,0,0,114, -+ 36,0,0,0,114,13,1,0,0,218,14,110,97,109,101,115, -+ 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, -+ 114,78,1,0,0,114,178,0,0,0,114,171,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,218,9, -+ 95,103,101,116,95,115,112,101,99,110,7,0,0,115,40,0, -+ 0,0,0,5,6,1,13,1,21,1,6,1,15,1,12,1, -+ 15,1,21,2,18,1,12,1,6,1,15,1,4,1,9,1, -+ 12,1,15,5,20,2,15,1,9,1,122,20,80,97,116,104, -+ 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, -+ 99,4,0,0,0,0,0,0,0,6,0,0,0,4,0,0, -+ 0,67,0,0,0,115,143,0,0,0,124,2,0,100,1,0, -+ 107,8,0,114,24,0,116,0,0,106,1,0,125,2,0,110, -+ 0,0,124,0,0,106,2,0,124,1,0,124,2,0,124,3, -+ 0,131,3,0,125,4,0,124,4,0,100,1,0,107,8,0, -+ 114,61,0,100,1,0,83,124,4,0,106,3,0,100,1,0, -+ 107,8,0,114,135,0,124,4,0,106,4,0,125,5,0,124, -+ 5,0,114,128,0,100,2,0,124,4,0,95,5,0,116,6, -+ 0,124,1,0,124,5,0,124,0,0,106,2,0,131,3,0, -+ 124,4,0,95,4,0,124,4,0,83,100,1,0,83,110,4, -+ 0,124,4,0,83,100,1,0,83,41,3,122,98,102,105,110, -+ 100,32,116,104,101,32,109,111,100,117,108,101,32,111,110,32, -+ 115,121,115,46,112,97,116,104,32,111,114,32,39,112,97,116, -+ 104,39,32,98,97,115,101,100,32,111,110,32,115,121,115,46, -+ 112,97,116,104,95,104,111,111,107,115,32,97,110,100,10,32, -+ 32,32,32,32,32,32,32,115,121,115,46,112,97,116,104,95, -+ 105,109,112,111,114,116,101,114,95,99,97,99,104,101,46,78, -+ 90,9,110,97,109,101,115,112,97,99,101,41,7,114,8,0, -+ 0,0,114,36,0,0,0,114,86,1,0,0,114,170,0,0, -+ 0,114,221,0,0,0,114,218,0,0,0,114,61,1,0,0, -+ 41,6,114,12,1,0,0,114,159,0,0,0,114,36,0,0, -+ 0,114,13,1,0,0,114,178,0,0,0,114,85,1,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 14,1,0,0,142,7,0,0,115,26,0,0,0,0,4,12, -+ 1,12,1,21,1,12,1,4,1,15,1,9,1,6,3,9, -+ 1,24,1,4,2,7,2,122,20,80,97,116,104,70,105,110, -+ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, -+ 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, -+ 0,0,115,41,0,0,0,124,0,0,106,0,0,124,1,0, -+ 124,2,0,131,2,0,125,3,0,124,3,0,100,1,0,107, -+ 8,0,114,34,0,100,1,0,83,124,3,0,106,1,0,83, -+ 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, -+ 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, -+ 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, -+ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, -+ 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, -+ 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, -+ 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, -+ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, -+ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, -+ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, -+ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, -+ 2,114,14,1,0,0,114,170,0,0,0,41,4,114,12,1, -+ 0,0,114,159,0,0,0,114,36,0,0,0,114,178,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,15,1,0,0,164,7,0,0,115,8,0,0,0,0,8, -+ 18,1,12,1,4,1,122,22,80,97,116,104,70,105,110,100, -+ 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,12, -+ 114,58,0,0,0,114,57,0,0,0,114,59,0,0,0,114, -+ 60,0,0,0,114,19,1,0,0,114,75,1,0,0,114,80, -+ 1,0,0,114,81,1,0,0,114,82,1,0,0,114,86,1, -+ 0,0,114,14,1,0,0,114,15,1,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,74,1,0,0,49,7,0,0,115,22,0,0,0,12,2, -+ 6,2,18,8,18,17,18,17,18,15,3,1,18,31,3,1, -+ 21,21,3,1,114,74,1,0,0,99,0,0,0,0,0,0, -+ 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,133, -+ 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, -+ 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, -+ 0,100,4,0,100,5,0,132,0,0,90,5,0,101,6,0, -+ 90,7,0,100,6,0,100,7,0,132,0,0,90,8,0,100, -+ 8,0,100,9,0,132,0,0,90,9,0,100,10,0,100,11, -+ 0,100,12,0,132,1,0,90,10,0,100,13,0,100,14,0, -+ 132,0,0,90,11,0,101,12,0,100,15,0,100,16,0,132, -+ 0,0,131,1,0,90,13,0,100,17,0,100,18,0,132,0, -+ 0,90,14,0,100,10,0,83,41,19,218,10,70,105,108,101, -+ 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, -+ 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, -+ 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, -+ 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, -+ 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, -+ 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, -+ 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, -+ 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, -+ 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, -+ 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, -+ 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, -+ 32,32,32,32,99,2,0,0,0,0,0,0,0,5,0,0, -+ 0,5,0,0,0,7,0,0,0,115,122,0,0,0,103,0, -+ 0,125,3,0,120,52,0,124,2,0,68,93,44,0,92,2, -+ 0,137,0,0,125,4,0,124,3,0,106,0,0,135,0,0, -+ 102,1,0,100,1,0,100,2,0,134,0,0,124,4,0,68, -+ 131,1,0,131,1,0,1,113,13,0,87,124,3,0,124,0, -+ 0,95,1,0,124,1,0,112,79,0,100,3,0,124,0,0, -+ 95,2,0,100,6,0,124,0,0,95,3,0,116,4,0,131, -+ 0,0,124,0,0,95,5,0,116,4,0,131,0,0,124,0, -+ 0,95,6,0,100,5,0,83,41,7,122,154,73,110,105,116, -+ 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, -+ 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, -+ 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, -+ 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, -+ 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, -+ 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, -+ 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, -+ 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, -+ 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, -+ 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,2, -+ 0,0,0,3,0,0,0,51,0,0,0,115,27,0,0,0, -+ 124,0,0,93,17,0,125,1,0,124,1,0,136,0,0,102, -+ 2,0,86,1,113,3,0,100,0,0,83,41,1,78,114,5, -+ 0,0,0,41,2,114,23,0,0,0,114,58,1,0,0,41, -+ 1,114,170,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,78,0,0,0,193,7,0,0,115,2,0,0,0,6,0, -+ 122,38,70,105,108,101,70,105,110,100,101,114,46,95,95,105, -+ 110,105,116,95,95,46,60,108,111,99,97,108,115,62,46,60, -+ 103,101,110,101,120,112,114,62,114,117,0,0,0,114,30,0, -+ 0,0,78,114,139,0,0,0,41,7,114,198,0,0,0,218, -+ 8,95,108,111,97,100,101,114,115,114,36,0,0,0,218,11, -+ 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, -+ 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, -+ 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, -+ 104,101,41,5,114,72,0,0,0,114,36,0,0,0,218,14, -+ 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, -+ 108,111,97,100,101,114,115,114,128,0,0,0,114,5,0,0, -+ 0,41,1,114,170,0,0,0,114,6,0,0,0,114,73,0, -+ 0,0,187,7,0,0,115,16,0,0,0,0,4,6,1,19, -+ 1,36,1,9,2,15,1,9,1,12,1,122,19,70,105,108, - 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, -- 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, -- 112,114,62,114,116,0,0,0,114,29,0,0,0,78,114,138, -- 0,0,0,41,7,114,197,0,0,0,218,8,95,108,111,97, -- 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, -- 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, -- 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, -- 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, -- 71,0,0,0,114,35,0,0,0,218,14,108,111,97,100,101, -- 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, -- 114,115,114,127,0,0,0,114,4,0,0,0,41,1,114,169, -- 0,0,0,114,5,0,0,0,114,72,0,0,0,187,7,0, -- 0,115,16,0,0,0,0,4,6,1,19,1,36,1,9,2, -- 15,1,9,1,12,1,122,19,70,105,108,101,70,105,110,100, -- 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, -- 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, -- 115,13,0,0,0,100,3,0,124,0,0,95,0,0,100,2, -- 0,83,41,4,122,31,73,110,118,97,108,105,100,97,116,101, -- 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,109, -- 116,105,109,101,46,114,29,0,0,0,78,114,138,0,0,0, -- 41,1,114,88,1,0,0,41,1,114,71,0,0,0,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,114,74,1, -- 0,0,201,7,0,0,115,2,0,0,0,0,2,122,28,70, -- 105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,105, -- 100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,0, -- 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, -- 115,59,0,0,0,124,0,0,106,0,0,124,1,0,131,1, -- 0,125,2,0,124,2,0,100,1,0,107,8,0,114,37,0, -- 100,1,0,103,0,0,102,2,0,83,124,2,0,106,1,0, -- 124,2,0,106,2,0,112,55,0,103,0,0,102,2,0,83, -- 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32, -- 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101, -- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, -- 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112, -- 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107, -- 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101, -- 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108, -- 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41, -- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, -- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, -- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, -- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, -- 10,32,32,32,32,32,32,32,32,78,41,3,114,13,1,0, -- 0,114,169,0,0,0,114,220,0,0,0,41,3,114,71,0, -- 0,0,114,158,0,0,0,114,177,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,165,0,0,0, -- 207,7,0,0,115,8,0,0,0,0,7,15,1,12,1,10, -- 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, -- 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, -- 0,0,7,0,0,0,7,0,0,0,67,0,0,0,115,40, -- 0,0,0,124,1,0,124,2,0,124,3,0,131,2,0,125, -- 6,0,116,0,0,124,2,0,124,3,0,100,1,0,124,6, -- 0,100,2,0,124,4,0,131,2,2,83,41,3,78,114,169, -- 0,0,0,114,220,0,0,0,41,1,114,239,0,0,0,41, -- 7,114,71,0,0,0,114,243,0,0,0,114,158,0,0,0, -- 114,35,0,0,0,114,228,0,0,0,114,12,1,0,0,114, -- 169,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,85,1,0,0,219,7,0,0,115,6,0,0, -- 0,0,1,15,1,18,1,122,20,70,105,108,101,70,105,110, -- 100,101,114,46,95,103,101,116,95,115,112,101,99,78,99,3, -- 0,0,0,0,0,0,0,14,0,0,0,15,0,0,0,67, -- 0,0,0,115,240,1,0,0,100,1,0,125,3,0,124,1, -- 0,106,0,0,100,2,0,131,1,0,100,3,0,25,125,4, -- 0,121,34,0,116,1,0,124,0,0,106,2,0,112,49,0, -- 116,3,0,106,4,0,131,0,0,131,1,0,106,5,0,125, -- 5,0,87,110,24,0,4,116,6,0,107,10,0,114,85,0, -- 1,1,1,100,10,0,125,5,0,89,110,1,0,88,124,5, -- 0,124,0,0,106,7,0,107,3,0,114,123,0,124,0,0, -- 106,8,0,131,0,0,1,124,5,0,124,0,0,95,7,0, -- 110,0,0,116,9,0,131,0,0,114,156,0,124,0,0,106, -- 10,0,125,6,0,124,4,0,106,11,0,131,0,0,125,7, -- 0,110,15,0,124,0,0,106,12,0,125,6,0,124,4,0, -- 125,7,0,124,7,0,124,6,0,107,6,0,114,51,1,116, -- 13,0,124,0,0,106,2,0,124,4,0,131,2,0,125,8, -- 0,120,103,0,124,0,0,106,14,0,68,93,77,0,92,2, -- 0,125,9,0,125,10,0,100,5,0,124,9,0,23,125,11, -- 0,116,13,0,124,8,0,124,11,0,131,2,0,125,12,0, -- 116,15,0,124,12,0,131,1,0,114,211,0,124,0,0,106, -- 16,0,124,10,0,124,1,0,124,12,0,124,8,0,103,1, -- 0,124,2,0,131,5,0,83,113,211,0,87,116,17,0,124, -- 8,0,131,1,0,125,3,0,110,0,0,120,126,0,124,0, -- 0,106,14,0,68,93,115,0,92,2,0,125,9,0,125,10, -- 0,116,13,0,124,0,0,106,2,0,124,4,0,124,9,0, -- 23,131,2,0,125,12,0,116,18,0,100,6,0,106,19,0, -- 124,12,0,131,1,0,100,7,0,100,3,0,131,1,1,1, -- 124,7,0,124,9,0,23,124,6,0,107,6,0,114,61,1, -- 116,15,0,124,12,0,131,1,0,114,176,1,124,0,0,106, -- 16,0,124,10,0,124,1,0,124,12,0,100,8,0,124,2, -- 0,131,5,0,83,113,61,1,113,61,1,87,124,3,0,114, -- 236,1,116,18,0,100,9,0,106,19,0,124,8,0,131,1, -- 0,131,1,0,1,116,20,0,124,1,0,100,8,0,131,2, -- 0,125,13,0,124,8,0,103,1,0,124,13,0,95,21,0, -- 124,13,0,83,100,8,0,83,41,11,122,125,84,114,121,32, -- 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, -- 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, -- 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, -- 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, -- 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, -- 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, -- 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, -- 111,114,116,105,111,110,115,41,46,70,114,116,0,0,0,114, -- 115,0,0,0,114,29,0,0,0,114,72,0,0,0,122,9, -- 116,114,121,105,110,103,32,123,125,114,145,0,0,0,78,122, -- 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, -- 97,99,101,32,102,111,114,32,123,125,114,138,0,0,0,41, -- 22,114,32,0,0,0,114,39,0,0,0,114,35,0,0,0, -- 114,3,0,0,0,114,45,0,0,0,114,53,1,0,0,114, -- 40,0,0,0,114,88,1,0,0,218,11,95,102,105,108,108, -- 95,99,97,99,104,101,114,6,0,0,0,114,91,1,0,0, -- 114,139,0,0,0,114,90,1,0,0,114,28,0,0,0,114, -- 87,1,0,0,114,44,0,0,0,114,85,1,0,0,114,46, -- 0,0,0,114,152,0,0,0,114,47,0,0,0,114,216,0, -- 0,0,114,220,0,0,0,41,14,114,71,0,0,0,114,158, -- 0,0,0,114,12,1,0,0,90,12,105,115,95,110,97,109, -- 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, -- 117,108,101,114,183,0,0,0,90,5,99,97,99,104,101,90, -- 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, -- 97,115,101,95,112,97,116,104,114,57,1,0,0,114,243,0, -- 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, -- 101,90,9,102,117,108,108,95,112,97,116,104,114,177,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 114,13,1,0,0,224,7,0,0,115,68,0,0,0,0,3, -- 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, -- 12,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, -- 22,1,10,1,15,1,12,1,32,4,15,2,22,1,22,1, -- 25,1,16,1,12,1,32,1,6,1,19,1,15,1,12,1, -- 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, -- 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, -- 0,9,0,0,0,13,0,0,0,67,0,0,0,115,14,1, -- 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, -- 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, -- 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, -- 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, -- 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, -- 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, -- 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, -- 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, -- 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, -- 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, -- 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, -- 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, -- 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, -- 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, -- 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, -- 114,10,1,100,4,0,100,5,0,132,0,0,124,2,0,68, -- 131,1,0,124,0,0,95,17,0,110,0,0,100,6,0,83, -- 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, -- 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, -- 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, -- 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, -- 114,101,99,116,111,114,121,46,114,0,0,0,0,114,116,0, -- 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,28, -- 0,0,0,104,0,0,124,0,0,93,18,0,125,1,0,124, -- 1,0,106,0,0,131,0,0,146,2,0,113,6,0,83,114, -- 4,0,0,0,41,1,114,139,0,0,0,41,2,114,22,0, -- 0,0,90,2,102,110,114,4,0,0,0,114,4,0,0,0, -- 114,5,0,0,0,250,9,60,115,101,116,99,111,109,112,62, -- 42,8,0,0,115,2,0,0,0,9,0,122,41,70,105,108, -- 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, -- 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, -- 116,99,111,109,112,62,78,41,18,114,35,0,0,0,114,3, -- 0,0,0,90,7,108,105,115,116,100,105,114,114,45,0,0, -- 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, -- 114,114,111,114,218,15,80,101,114,109,105,115,115,105,111,110, -- 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, -- 116,111,114,121,69,114,114,111,114,114,7,0,0,0,114,8, -- 0,0,0,114,9,0,0,0,114,89,1,0,0,114,90,1, -- 0,0,114,121,0,0,0,114,47,0,0,0,114,139,0,0, -- 0,218,3,97,100,100,114,10,0,0,0,114,91,1,0,0, -- 41,9,114,71,0,0,0,114,35,0,0,0,90,8,99,111, -- 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, -- 102,102,105,120,95,99,111,110,116,101,110,116,115,114,71,1, -- 0,0,114,67,0,0,0,114,65,1,0,0,114,57,1,0, -- 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,93,1,0,0,13, -- 8,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, -- 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, -- 27,2,6,1,17,1,9,1,18,1,122,22,70,105,108,101, -- 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, -- 104,101,99,1,0,0,0,0,0,0,0,3,0,0,0,3, -- 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, -- 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, -- 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, -- 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, -- 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, -- 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, -- 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, -- 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, -- 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, -- 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, -- 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, -- 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, -- 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, -- 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, -- 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, -- 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, -- 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, -- 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, -- 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, -- 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, -- 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, -- 0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0, -- 131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124, -- 0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0, -- 0,136,1,0,140,1,0,83,41,3,122,45,80,97,116,104, -- 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, -- 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, -- 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, -- 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, -- 115,117,112,112,111,114,116,101,100,114,35,0,0,0,41,2, -- 114,46,0,0,0,114,153,0,0,0,41,1,114,35,0,0, -- 0,41,2,114,11,1,0,0,114,92,1,0,0,114,4,0, -- 0,0,114,5,0,0,0,218,24,112,97,116,104,95,104,111, -- 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, -- 114,54,8,0,0,115,6,0,0,0,0,2,12,1,21,1, -- 122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,116, -- 104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,46, -- 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, -- 108,101,70,105,110,100,101,114,114,4,0,0,0,41,3,114, -- 11,1,0,0,114,92,1,0,0,114,99,1,0,0,114,4, -- 0,0,0,41,2,114,11,1,0,0,114,92,1,0,0,114, -- 5,0,0,0,218,9,112,97,116,104,95,104,111,111,107,44, -- 8,0,0,115,4,0,0,0,0,10,21,6,122,20,70,105, -- 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, -- 111,107,99,1,0,0,0,0,0,0,0,1,0,0,0,2, -- 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, -- 0,0,124,0,0,106,1,0,131,1,0,83,41,2,78,122, -- 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, -- 41,41,2,114,47,0,0,0,114,35,0,0,0,41,1,114, -- 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,114,101,0,0,0,62,8,0,0,115,2,0,0, -- 0,0,1,122,19,70,105,108,101,70,105,110,100,101,114,46, -- 95,95,114,101,112,114,95,95,41,15,114,57,0,0,0,114, -- 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,72, -- 0,0,0,114,74,1,0,0,114,172,0,0,0,114,14,1, -- 0,0,114,165,0,0,0,114,85,1,0,0,114,13,1,0, -- 0,114,93,1,0,0,114,18,1,0,0,114,100,1,0,0, -- 114,101,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,5,0,0,0,114,86,1,0,0,178,7, -- 0,0,115,20,0,0,0,12,7,6,2,12,14,12,4,6, -- 2,12,12,12,5,15,45,12,31,18,18,114,86,1,0,0, -- 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, -- 0,64,0,0,0,115,46,0,0,0,101,0,0,90,1,0, -- 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, -- 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, -- 0,90,5,0,100,6,0,83,41,7,218,18,95,73,109,112, -- 111,114,116,76,111,99,107,67,111,110,116,101,120,116,122,36, -- 67,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32, -- 102,111,114,32,116,104,101,32,105,109,112,111,114,116,32,108, -- 111,99,107,46,99,1,0,0,0,0,0,0,0,1,0,0, -- 0,1,0,0,0,67,0,0,0,115,14,0,0,0,116,0, -- 0,106,1,0,131,0,0,1,100,1,0,83,41,2,122,24, -- 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, -- 114,116,32,108,111,99,107,46,78,41,2,114,106,0,0,0, -- 114,3,1,0,0,41,1,114,71,0,0,0,114,4,0,0, -- 0,114,4,0,0,0,114,5,0,0,0,114,75,0,0,0, -- 72,8,0,0,115,2,0,0,0,0,2,122,28,95,73,109, -- 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, -- 95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,0, -- 0,0,4,0,0,0,1,0,0,0,67,0,0,0,115,14, -+ 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, -+ 0,67,0,0,0,115,13,0,0,0,100,3,0,124,0,0, -+ 95,0,0,100,2,0,83,41,4,122,31,73,110,118,97,108, -+ 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, -+ 111,114,121,32,109,116,105,109,101,46,114,30,0,0,0,78, -+ 114,139,0,0,0,41,1,114,89,1,0,0,41,1,114,72, -+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,114,75,1,0,0,201,7,0,0,115,2,0,0,0, -+ 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, -+ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, -+ 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, -+ 0,67,0,0,0,115,59,0,0,0,124,0,0,106,0,0, -+ 124,1,0,131,1,0,125,2,0,124,2,0,100,1,0,107, -+ 8,0,114,37,0,100,1,0,103,0,0,102,2,0,83,124, -+ 2,0,106,1,0,124,2,0,106,2,0,112,55,0,103,0, -+ 0,102,2,0,83,41,2,122,197,84,114,121,32,116,111,32, -+ 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, -+ 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, -+ 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, -+ 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, -+ 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, -+ 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, -+ 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, -+ 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, -+ 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, -+ 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, -+ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, -+ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, -+ 3,114,14,1,0,0,114,170,0,0,0,114,221,0,0,0, -+ 41,3,114,72,0,0,0,114,159,0,0,0,114,178,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,166,0,0,0,207,7,0,0,115,8,0,0,0,0,7, -+ 15,1,12,1,10,1,122,22,70,105,108,101,70,105,110,100, -+ 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,6, -+ 0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,67, -+ 0,0,0,115,40,0,0,0,124,1,0,124,2,0,124,3, -+ 0,131,2,0,125,6,0,116,0,0,124,2,0,124,3,0, -+ 100,1,0,124,6,0,100,2,0,124,4,0,131,2,2,83, -+ 41,3,78,114,170,0,0,0,114,221,0,0,0,41,1,114, -+ 240,0,0,0,41,7,114,72,0,0,0,114,244,0,0,0, -+ 114,159,0,0,0,114,36,0,0,0,114,229,0,0,0,114, -+ 13,1,0,0,114,170,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,86,1,0,0,219,7,0, -+ 0,115,6,0,0,0,0,1,15,1,18,1,122,20,70,105, -+ 108,101,70,105,110,100,101,114,46,95,103,101,116,95,115,112, -+ 101,99,78,99,3,0,0,0,0,0,0,0,14,0,0,0, -+ 15,0,0,0,67,0,0,0,115,240,1,0,0,100,1,0, -+ 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, -+ 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, -+ 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, -+ 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, -+ 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, -+ 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, -+ 123,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, -+ 0,0,95,7,0,110,0,0,116,9,0,131,0,0,114,156, -+ 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, -+ 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, -+ 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, -+ 0,114,51,1,116,13,0,124,0,0,106,2,0,124,4,0, -+ 131,2,0,125,8,0,120,103,0,124,0,0,106,14,0,68, -+ 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, -+ 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, -+ 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,211, -+ 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, -+ 124,8,0,103,1,0,124,2,0,131,5,0,83,113,211,0, -+ 87,116,17,0,124,8,0,131,1,0,125,3,0,110,0,0, -+ 120,126,0,124,0,0,106,14,0,68,93,115,0,92,2,0, -+ 125,9,0,125,10,0,116,13,0,124,0,0,106,2,0,124, -+ 4,0,124,9,0,23,131,2,0,125,12,0,116,18,0,100, -+ 6,0,106,19,0,124,12,0,131,1,0,100,7,0,100,3, -+ 0,131,1,1,1,124,7,0,124,9,0,23,124,6,0,107, -+ 6,0,114,61,1,116,15,0,124,12,0,131,1,0,114,176, -+ 1,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, -+ 100,8,0,124,2,0,131,5,0,83,113,61,1,113,61,1, -+ 87,124,3,0,114,236,1,116,18,0,100,9,0,106,19,0, -+ 124,8,0,131,1,0,131,1,0,1,116,20,0,124,1,0, -+ 100,8,0,131,2,0,125,13,0,124,8,0,103,1,0,124, -+ 13,0,95,21,0,124,13,0,83,100,8,0,83,41,11,122, -+ 125,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, -+ 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, -+ 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, -+ 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, -+ 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, -+ 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, -+ 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, -+ 45,111,102,45,112,111,114,116,105,111,110,115,41,46,70,114, -+ 117,0,0,0,114,116,0,0,0,114,30,0,0,0,114,73, -+ 0,0,0,122,9,116,114,121,105,110,103,32,123,125,114,146, -+ 0,0,0,78,122,25,112,111,115,115,105,98,108,101,32,110, -+ 97,109,101,115,112,97,99,101,32,102,111,114,32,123,125,114, -+ 139,0,0,0,41,22,114,33,0,0,0,114,40,0,0,0, -+ 114,36,0,0,0,114,4,0,0,0,114,46,0,0,0,114, -+ 54,1,0,0,114,41,0,0,0,114,89,1,0,0,218,11, -+ 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, -+ 114,92,1,0,0,114,140,0,0,0,114,91,1,0,0,114, -+ 29,0,0,0,114,88,1,0,0,114,45,0,0,0,114,86, -+ 1,0,0,114,47,0,0,0,114,153,0,0,0,114,48,0, -+ 0,0,114,217,0,0,0,114,221,0,0,0,41,14,114,72, -+ 0,0,0,114,159,0,0,0,114,13,1,0,0,90,12,105, -+ 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, -+ 108,95,109,111,100,117,108,101,114,184,0,0,0,90,5,99, -+ 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, -+ 108,101,90,9,98,97,115,101,95,112,97,116,104,114,58,1, -+ 0,0,114,244,0,0,0,90,13,105,110,105,116,95,102,105, -+ 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, -+ 104,114,178,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,114,14,1,0,0,224,7,0,0,115,68, -+ 0,0,0,0,3,6,1,19,1,3,1,34,1,13,1,11, -+ 1,15,1,10,1,12,2,9,1,9,1,15,2,9,1,6, -+ 2,12,1,18,1,22,1,10,1,15,1,12,1,32,4,15, -+ 2,22,1,22,1,25,1,16,1,12,1,32,1,6,1,19, -+ 1,15,1,12,1,4,1,122,20,70,105,108,101,70,105,110, -+ 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, -+ 0,0,0,0,0,0,9,0,0,0,13,0,0,0,67,0, -+ 0,0,115,14,1,0,0,124,0,0,106,0,0,125,1,0, -+ 121,31,0,116,1,0,106,2,0,124,1,0,112,33,0,116, -+ 1,0,106,3,0,131,0,0,131,1,0,125,2,0,87,110, -+ 33,0,4,116,4,0,116,5,0,116,6,0,102,3,0,107, -+ 10,0,114,75,0,1,1,1,103,0,0,125,2,0,89,110, -+ 1,0,88,116,7,0,106,8,0,106,9,0,100,1,0,131, -+ 1,0,115,112,0,116,10,0,124,2,0,131,1,0,124,0, -+ 0,95,11,0,110,111,0,116,10,0,131,0,0,125,3,0, -+ 120,90,0,124,2,0,68,93,82,0,125,4,0,124,4,0, -+ 106,12,0,100,2,0,131,1,0,92,3,0,125,5,0,125, -+ 6,0,125,7,0,124,6,0,114,191,0,100,3,0,106,13, -+ 0,124,5,0,124,7,0,106,14,0,131,0,0,131,2,0, -+ 125,8,0,110,6,0,124,5,0,125,8,0,124,3,0,106, -+ 15,0,124,8,0,131,1,0,1,113,128,0,87,124,3,0, -+ 124,0,0,95,11,0,116,7,0,106,8,0,106,9,0,116, -+ 16,0,131,1,0,114,10,1,100,4,0,100,5,0,132,0, -+ 0,124,2,0,68,131,1,0,124,0,0,95,17,0,110,0, -+ 0,100,6,0,83,41,7,122,68,70,105,108,108,32,116,104, -+ 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, -+ 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, -+ 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, -+ 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, -+ 0,0,114,117,0,0,0,122,5,123,125,46,123,125,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,83, -+ 0,0,0,115,28,0,0,0,104,0,0,124,0,0,93,18, -+ 0,125,1,0,124,1,0,106,0,0,131,0,0,146,2,0, -+ 113,6,0,83,114,5,0,0,0,41,1,114,140,0,0,0, -+ 41,2,114,23,0,0,0,90,2,102,110,114,5,0,0,0, -+ 114,5,0,0,0,114,6,0,0,0,250,9,60,115,101,116, -+ 99,111,109,112,62,42,8,0,0,115,2,0,0,0,9,0, -+ 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, -+ 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, -+ 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,36, -+ 0,0,0,114,4,0,0,0,90,7,108,105,115,116,100,105, -+ 114,114,46,0,0,0,218,17,70,105,108,101,78,111,116,70, -+ 111,117,110,100,69,114,114,111,114,218,15,80,101,114,109,105, -+ 115,115,105,111,110,69,114,114,111,114,218,18,78,111,116,65, -+ 68,105,114,101,99,116,111,114,121,69,114,114,111,114,114,8, -+ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,90,1, -+ 0,0,114,91,1,0,0,114,122,0,0,0,114,48,0,0, -+ 0,114,140,0,0,0,218,3,97,100,100,114,11,0,0,0, -+ 114,92,1,0,0,41,9,114,72,0,0,0,114,36,0,0, -+ 0,90,8,99,111,110,116,101,110,116,115,90,21,108,111,119, -+ 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, -+ 116,115,114,72,1,0,0,114,68,0,0,0,114,66,1,0, -+ 0,114,58,1,0,0,90,8,110,101,119,95,110,97,109,101, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 94,1,0,0,13,8,0,0,115,34,0,0,0,0,2,9, -+ 1,3,1,31,1,22,3,11,3,18,1,18,7,9,1,13, -+ 1,24,1,6,1,27,2,6,1,17,1,9,1,18,1,122, -+ 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, -+ 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, -+ 3,0,0,0,3,0,0,0,7,0,0,0,115,25,0,0, -+ 0,135,0,0,135,1,0,102,2,0,100,1,0,100,2,0, -+ 134,0,0,125,2,0,124,2,0,83,41,3,97,20,1,0, -+ 0,65,32,99,108,97,115,115,32,109,101,116,104,111,100,32, -+ 119,104,105,99,104,32,114,101,116,117,114,110,115,32,97,32, -+ 99,108,111,115,117,114,101,32,116,111,32,117,115,101,32,111, -+ 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,10, -+ 32,32,32,32,32,32,32,32,119,104,105,99,104,32,119,105, -+ 108,108,32,114,101,116,117,114,110,32,97,110,32,105,110,115, -+ 116,97,110,99,101,32,117,115,105,110,103,32,116,104,101,32, -+ 115,112,101,99,105,102,105,101,100,32,108,111,97,100,101,114, -+ 115,32,97,110,100,32,116,104,101,32,112,97,116,104,10,32, -+ 32,32,32,32,32,32,32,99,97,108,108,101,100,32,111,110, -+ 32,116,104,101,32,99,108,111,115,117,114,101,46,10,10,32, -+ 32,32,32,32,32,32,32,73,102,32,116,104,101,32,112,97, -+ 116,104,32,99,97,108,108,101,100,32,111,110,32,116,104,101, -+ 32,99,108,111,115,117,114,101,32,105,115,32,110,111,116,32, -+ 97,32,100,105,114,101,99,116,111,114,121,44,32,73,109,112, -+ 111,114,116,69,114,114,111,114,32,105,115,10,32,32,32,32, -+ 32,32,32,32,114,97,105,115,101,100,46,10,10,32,32,32, -+ 32,32,32,32,32,99,1,0,0,0,0,0,0,0,1,0, -+ 0,0,4,0,0,0,19,0,0,0,115,46,0,0,0,116, -+ 0,0,124,0,0,131,1,0,115,33,0,116,1,0,100,1, -+ 0,100,2,0,124,0,0,131,1,1,130,1,0,110,0,0, -+ 136,0,0,124,0,0,136,1,0,140,1,0,83,41,3,122, -+ 45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105, -+ 109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101, -+ 114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30, -+ 111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115, -+ 32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,36, -+ 0,0,0,41,2,114,47,0,0,0,114,154,0,0,0,41, -+ 1,114,36,0,0,0,41,2,114,12,1,0,0,114,93,1, -+ 0,0,114,5,0,0,0,114,6,0,0,0,218,24,112,97, -+ 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, -+ 70,105,110,100,101,114,54,8,0,0,115,6,0,0,0,0, -+ 2,12,1,21,1,122,54,70,105,108,101,70,105,110,100,101, -+ 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, -+ 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, -+ 111,114,95,70,105,108,101,70,105,110,100,101,114,114,5,0, -+ 0,0,41,3,114,12,1,0,0,114,93,1,0,0,114,100, -+ 1,0,0,114,5,0,0,0,41,2,114,12,1,0,0,114, -+ 93,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, -+ 104,111,111,107,44,8,0,0,115,4,0,0,0,0,10,21, -+ 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, -+ 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, -+ 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, -+ 0,100,1,0,106,0,0,124,0,0,106,1,0,131,1,0, -+ 83,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, -+ 40,123,33,114,125,41,41,2,114,48,0,0,0,114,36,0, -+ 0,0,41,1,114,72,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,114,102,0,0,0,62,8,0, -+ 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, -+ 110,100,101,114,46,95,95,114,101,112,114,95,95,41,15,114, -+ 58,0,0,0,114,57,0,0,0,114,59,0,0,0,114,60, -+ 0,0,0,114,73,0,0,0,114,75,1,0,0,114,173,0, -+ 0,0,114,15,1,0,0,114,166,0,0,0,114,86,1,0, -+ 0,114,14,1,0,0,114,94,1,0,0,114,19,1,0,0, -+ 114,101,1,0,0,114,102,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,87, -+ 1,0,0,178,7,0,0,115,20,0,0,0,12,7,6,2, -+ 12,14,12,4,6,2,12,12,12,5,15,45,12,31,18,18, -+ 114,87,1,0,0,99,0,0,0,0,0,0,0,0,0,0, -+ 0,0,2,0,0,0,64,0,0,0,115,46,0,0,0,101, -+ 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, -+ 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, -+ 100,5,0,132,0,0,90,5,0,100,6,0,83,41,7,218, -+ 18,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, -+ 101,120,116,122,36,67,111,110,116,101,120,116,32,109,97,110, -+ 97,103,101,114,32,102,111,114,32,116,104,101,32,105,109,112, -+ 111,114,116,32,108,111,99,107,46,99,1,0,0,0,0,0, -+ 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,14, - 0,0,0,116,0,0,106,1,0,131,0,0,1,100,1,0, -- 83,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, -- 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, -- 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, -- 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, -- 46,78,41,2,114,106,0,0,0,114,107,0,0,0,41,4, -- 114,71,0,0,0,90,8,101,120,99,95,116,121,112,101,90, -- 9,101,120,99,95,118,97,108,117,101,90,13,101,120,99,95, -- 116,114,97,99,101,98,97,99,107,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,114,81,0,0,0,76,8,0, -- 0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,114, -- 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, -- 120,105,116,95,95,78,41,6,114,57,0,0,0,114,56,0, -- 0,0,114,58,0,0,0,114,59,0,0,0,114,75,0,0, -- 0,114,81,0,0,0,114,4,0,0,0,114,4,0,0,0, -- 114,4,0,0,0,114,5,0,0,0,114,101,1,0,0,68, -- 8,0,0,115,6,0,0,0,12,2,6,2,12,4,114,101, -- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, -- 4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,0, -- 106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,0, -- 125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,107, -- 0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,1, -- 0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,0, -- 0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,0, -- 131,2,0,83,124,4,0,83,41,6,122,50,82,101,115,111, -- 108,118,101,32,97,32,114,101,108,97,116,105,118,101,32,109, -- 111,100,117,108,101,32,110,97,109,101,32,116,111,32,97,110, -- 32,97,98,115,111,108,117,116,101,32,111,110,101,46,114,116, -- 0,0,0,114,29,0,0,0,122,50,97,116,116,101,109,112, -- 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, -- 111,114,116,32,98,101,121,111,110,100,32,116,111,112,45,108, -- 101,118,101,108,32,112,97,99,107,97,103,101,114,84,0,0, -- 0,122,5,123,125,46,123,125,41,4,114,34,0,0,0,114, -- 31,0,0,0,114,133,0,0,0,114,47,0,0,0,41,5, -- 114,67,0,0,0,218,7,112,97,99,107,97,103,101,218,5, -- 108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,115, -- 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,13,95,114,101,115,111,108,118,101,95,110,97,109,101,81, -- 8,0,0,115,10,0,0,0,0,2,22,1,18,1,15,1, -- 10,1,114,104,1,0,0,99,3,0,0,0,0,0,0,0, -- 4,0,0,0,3,0,0,0,67,0,0,0,115,47,0,0, -- 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, -- 125,3,0,124,3,0,100,0,0,107,8,0,114,34,0,100, -- 0,0,83,116,1,0,124,1,0,124,3,0,131,2,0,83, -- 41,1,78,41,2,114,14,1,0,0,114,173,0,0,0,41, -- 4,114,77,1,0,0,114,67,0,0,0,114,35,0,0,0, -- 114,169,0,0,0,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, -- 95,108,101,103,97,99,121,90,8,0,0,115,8,0,0,0, -- 0,3,18,1,12,1,4,1,114,105,1,0,0,99,3,0, -- 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, -- 0,0,115,34,1,0,0,116,0,0,106,1,0,115,28,0, -- 116,2,0,106,3,0,100,1,0,116,4,0,131,2,0,1, -- 110,0,0,124,0,0,116,0,0,106,5,0,107,6,0,125, -- 3,0,120,240,0,116,0,0,106,1,0,68,93,225,0,125, -- 4,0,116,6,0,131,0,0,143,93,0,1,121,13,0,124, -- 4,0,106,7,0,125,5,0,87,110,54,0,4,116,8,0, -- 107,10,0,114,138,0,1,1,1,116,9,0,124,4,0,124, -- 0,0,124,1,0,131,3,0,125,6,0,124,6,0,100,2, -- 0,107,8,0,114,134,0,119,53,0,110,0,0,89,110,19, -- 0,88,124,5,0,124,0,0,124,1,0,124,2,0,131,3, -- 0,125,6,0,87,100,2,0,81,88,124,6,0,100,2,0, -- 107,9,0,114,53,0,124,3,0,12,114,15,1,124,0,0, -- 116,0,0,106,5,0,107,6,0,114,15,1,116,0,0,106, -- 5,0,124,0,0,25,125,7,0,121,13,0,124,7,0,106, -- 10,0,125,8,0,87,110,22,0,4,116,8,0,107,10,0, -- 114,247,0,1,1,1,124,6,0,83,89,113,19,1,88,124, -- 8,0,100,2,0,107,8,0,114,8,1,124,6,0,83,124, -- 8,0,83,113,22,1,124,6,0,83,113,53,0,113,53,0, -- 87,100,2,0,83,100,2,0,83,41,3,122,23,70,105,110, -- 100,32,97,32,109,111,100,117,108,101,39,115,32,108,111,97, -- 100,101,114,46,122,22,115,121,115,46,109,101,116,97,95,112, -- 97,116,104,32,105,115,32,101,109,112,116,121,78,41,11,114, -- 7,0,0,0,218,9,109,101,116,97,95,112,97,116,104,114, -- 166,0,0,0,114,167,0,0,0,114,168,0,0,0,114,73, -- 0,0,0,114,101,1,0,0,114,13,1,0,0,114,209,0, -- 0,0,114,105,1,0,0,114,208,0,0,0,41,9,114,67, -- 0,0,0,114,35,0,0,0,114,12,1,0,0,90,9,105, -- 115,95,114,101,108,111,97,100,114,77,1,0,0,114,13,1, -- 0,0,114,177,0,0,0,114,179,0,0,0,114,208,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,10,95,102,105,110,100,95,115,112,101,99,99,8,0,0, -- 115,48,0,0,0,0,2,9,1,19,4,15,1,16,1,10, -- 1,3,1,13,1,13,1,18,1,12,1,11,2,24,1,12, -- 2,22,1,13,1,3,1,13,1,13,4,9,2,12,1,4, -- 2,7,2,11,2,114,107,1,0,0,99,3,0,0,0,0, -- 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, -- 194,0,0,0,116,0,0,124,0,0,116,1,0,131,2,0, -- 115,45,0,116,2,0,100,1,0,106,3,0,116,4,0,124, -- 0,0,131,1,0,131,1,0,131,1,0,130,1,0,110,0, -- 0,124,2,0,100,2,0,107,0,0,114,72,0,116,5,0, -- 100,3,0,131,1,0,130,1,0,110,0,0,124,1,0,114, -- 156,0,116,0,0,124,1,0,116,1,0,131,2,0,115,108, -- 0,116,2,0,100,4,0,131,1,0,130,1,0,113,156,0, -- 124,1,0,116,6,0,106,7,0,107,7,0,114,156,0,100, -- 5,0,125,3,0,116,8,0,124,3,0,106,3,0,124,1, -- 0,131,1,0,131,1,0,130,1,0,113,156,0,110,0,0, -- 124,0,0,12,114,190,0,124,2,0,100,2,0,107,2,0, -- 114,190,0,116,5,0,100,6,0,131,1,0,130,1,0,110, -- 0,0,100,7,0,83,41,8,122,28,86,101,114,105,102,121, -- 32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,34, -- 115,97,110,101,34,46,122,31,109,111,100,117,108,101,32,110, -- 97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,44, -- 32,110,111,116,32,123,125,114,84,0,0,0,122,18,108,101, -- 118,101,108,32,109,117,115,116,32,98,101,32,62,61,32,48, -- 122,31,95,95,112,97,99,107,97,103,101,95,95,32,110,111, -- 116,32,115,101,116,32,116,111,32,97,32,115,116,114,105,110, -- 103,122,61,80,97,114,101,110,116,32,109,111,100,117,108,101, -- 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, -- 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, -- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, -- 122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,110, -- 97,109,101,78,41,9,114,192,0,0,0,114,82,1,0,0, -- 218,9,84,121,112,101,69,114,114,111,114,114,47,0,0,0, -- 114,66,0,0,0,114,133,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, -- 114,41,4,114,67,0,0,0,114,102,1,0,0,114,103,1, -- 0,0,114,171,0,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,13,95,115,97,110,105,116,121,95, -- 99,104,101,99,107,139,8,0,0,115,24,0,0,0,0,2, -- 15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1, -- 6,2,27,1,19,1,114,110,1,0,0,122,16,78,111,32, -- 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, -- 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, -- 12,0,0,0,67,0,0,0,115,52,1,0,0,100,0,0, -- 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, -- 2,0,25,125,3,0,124,3,0,114,178,0,124,3,0,116, -- 1,0,106,2,0,107,7,0,114,62,0,116,3,0,124,1, -- 0,124,3,0,131,2,0,1,110,0,0,124,0,0,116,1, -- 0,106,2,0,107,6,0,114,88,0,116,1,0,106,2,0, -- 124,0,0,25,83,116,1,0,106,2,0,124,3,0,25,125, -- 4,0,121,13,0,124,4,0,106,4,0,125,2,0,87,113, -- 178,0,4,116,5,0,107,10,0,114,174,0,1,1,1,116, -- 6,0,100,3,0,23,106,7,0,124,0,0,124,3,0,131, -- 2,0,125,5,0,116,8,0,124,5,0,100,4,0,124,0, -- 0,131,1,1,130,1,0,89,113,178,0,88,110,0,0,116, -- 9,0,124,0,0,124,2,0,131,2,0,125,6,0,124,6, -- 0,100,0,0,107,8,0,114,235,0,116,8,0,116,6,0, -- 106,7,0,124,0,0,131,1,0,100,4,0,124,0,0,131, -- 1,1,130,1,0,110,18,0,116,10,0,124,6,0,131,1, -- 0,106,11,0,131,0,0,125,7,0,124,3,0,114,48,1, -- 116,1,0,106,2,0,124,3,0,25,125,4,0,116,12,0, -- 124,4,0,124,0,0,106,0,0,100,1,0,131,1,0,100, -- 5,0,25,124,7,0,131,3,0,1,110,0,0,124,7,0, -- 83,41,6,78,114,116,0,0,0,114,84,0,0,0,122,23, -- 59,32,123,33,114,125,32,105,115,32,110,111,116,32,97,32, -- 112,97,99,107,97,103,101,114,67,0,0,0,114,115,0,0, -- 0,41,13,114,32,0,0,0,114,7,0,0,0,114,73,0, -- 0,0,114,114,0,0,0,114,246,0,0,0,114,209,0,0, -- 0,218,8,95,69,82,82,95,77,83,71,114,47,0,0,0, -- 114,153,0,0,0,114,107,1,0,0,114,174,0,0,0,114, -- 6,1,0,0,114,61,0,0,0,41,8,114,67,0,0,0, -- 218,7,105,109,112,111,114,116,95,114,35,0,0,0,114,233, -- 0,0,0,90,13,112,97,114,101,110,116,95,109,111,100,117, -- 108,101,114,171,0,0,0,114,177,0,0,0,114,179,0,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,100, -- 95,117,110,108,111,99,107,101,100,159,8,0,0,115,42,0, -- 0,0,0,1,6,1,19,1,6,1,15,1,16,2,15,1, -- 11,1,13,1,3,1,13,1,13,1,22,1,26,1,15,1, -- 12,1,30,2,18,1,6,2,13,1,32,1,114,113,1,0, -- 0,99,2,0,0,0,0,0,0,0,2,0,0,0,10,0, -- 0,0,67,0,0,0,115,36,0,0,0,116,0,0,124,0, -- 0,131,1,0,143,18,0,1,116,1,0,124,0,0,124,1, -- 0,131,2,0,83,87,100,1,0,81,88,100,1,0,83,41, -- 2,122,54,70,105,110,100,32,97,110,100,32,108,111,97,100, -- 32,116,104,101,32,109,111,100,117,108,101,44,32,97,110,100, -- 32,114,101,108,101,97,115,101,32,116,104,101,32,105,109,112, -- 111,114,116,32,108,111,99,107,46,78,41,2,114,103,0,0, -- 0,114,113,1,0,0,41,2,114,67,0,0,0,114,112,1, -- 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, -- 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, -- 100,186,8,0,0,115,4,0,0,0,0,2,13,1,114,114, -- 1,0,0,99,3,0,0,0,0,0,0,0,5,0,0,0, -- 4,0,0,0,67,0,0,0,115,172,0,0,0,116,0,0, -- 124,0,0,124,1,0,124,2,0,131,3,0,1,124,2,0, -- 100,1,0,107,4,0,114,49,0,116,1,0,124,0,0,124, -- 1,0,124,2,0,131,3,0,125,0,0,110,0,0,116,2, -- 0,106,3,0,131,0,0,1,124,0,0,116,4,0,106,5, -- 0,107,7,0,114,87,0,116,6,0,124,0,0,116,7,0, -- 131,2,0,83,116,4,0,106,5,0,124,0,0,25,125,3, -- 0,124,3,0,100,2,0,107,8,0,114,158,0,116,2,0, -- 106,8,0,131,0,0,1,100,3,0,106,9,0,124,0,0, -- 131,1,0,125,4,0,116,10,0,124,4,0,100,4,0,124, -- 0,0,131,1,1,130,1,0,110,0,0,116,11,0,124,0, -- 0,131,1,0,1,124,3,0,83,41,5,97,50,1,0,0, -- 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, -- 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, -- 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, -- 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, -- 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, -- 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, -- 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, -- 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, -- 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, -- 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, -- 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, -- 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, -- 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, -- 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, -- 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, -- 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, -- 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, -- 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, -- 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, -- 32,32,114,84,0,0,0,78,122,40,105,109,112,111,114,116, -- 32,111,102,32,123,125,32,104,97,108,116,101,100,59,32,78, -- 111,110,101,32,105,110,32,115,121,115,46,109,111,100,117,108, -- 101,115,114,67,0,0,0,41,12,114,110,1,0,0,114,104, -- 1,0,0,114,106,0,0,0,114,3,1,0,0,114,7,0, -- 0,0,114,73,0,0,0,114,114,1,0,0,218,11,95,103, -- 99,100,95,105,109,112,111,114,116,114,107,0,0,0,114,47, -- 0,0,0,114,153,0,0,0,114,112,0,0,0,41,5,114, -- 67,0,0,0,114,102,1,0,0,114,103,1,0,0,114,179, -- 0,0,0,114,151,0,0,0,114,4,0,0,0,114,4,0, -- 0,0,114,5,0,0,0,114,115,1,0,0,192,8,0,0, -- 115,26,0,0,0,0,9,16,1,12,1,21,1,10,1,15, -- 1,13,1,13,1,12,1,10,2,15,1,21,1,10,1,114, -- 115,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, -- 0,17,0,0,0,67,0,0,0,115,1,1,0,0,116,0, -- 0,124,0,0,100,1,0,131,2,0,114,253,0,100,2,0, -- 124,1,0,107,6,0,114,89,0,116,1,0,124,1,0,131, -- 1,0,125,1,0,124,1,0,106,2,0,100,2,0,131,1, -- 0,1,116,0,0,124,0,0,100,3,0,131,2,0,114,89, -- 0,124,1,0,106,3,0,124,0,0,106,4,0,131,1,0, -- 1,113,89,0,110,0,0,120,161,0,124,1,0,68,93,150, -- 0,125,3,0,116,0,0,124,0,0,124,3,0,131,2,0, -- 115,96,0,100,4,0,106,5,0,124,0,0,106,6,0,124, -- 3,0,131,2,0,125,4,0,121,17,0,116,7,0,124,2, -- 0,124,4,0,131,2,0,1,87,113,246,0,4,116,8,0, -- 107,10,0,114,242,0,1,125,5,0,1,122,53,0,116,9, -- 0,124,5,0,131,1,0,106,10,0,116,11,0,131,1,0, -- 114,221,0,124,5,0,106,12,0,124,4,0,107,2,0,114, -- 221,0,119,96,0,113,221,0,110,0,0,130,0,0,87,89, -- 100,5,0,100,5,0,125,5,0,126,5,0,88,113,246,0, -- 88,113,96,0,113,96,0,87,110,0,0,124,0,0,83,41, -- 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104, -- 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104, -- 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32, -- 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97, -- 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108, -- 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101, -- 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111, -- 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111, -- 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114, -- 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116, -- 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109, -- 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116, -- 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116, -- 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, -- 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32, -- 32,114,246,0,0,0,250,1,42,218,7,95,95,97,108,108, -- 95,95,122,5,123,125,46,123,125,78,41,13,114,60,0,0, -- 0,114,245,0,0,0,218,6,114,101,109,111,118,101,114,197, -- 0,0,0,114,117,1,0,0,114,47,0,0,0,114,57,0, -- 0,0,114,114,0,0,0,114,153,0,0,0,114,82,1,0, -- 0,114,9,0,0,0,218,15,95,69,82,82,95,77,83,71, -- 95,80,82,69,70,73,88,114,67,0,0,0,41,6,114,179, -- 0,0,0,218,8,102,114,111,109,108,105,115,116,114,112,1, -- 0,0,114,16,0,0,0,90,9,102,114,111,109,95,110,97, -- 109,101,114,40,1,0,0,114,4,0,0,0,114,4,0,0, -- 0,114,5,0,0,0,218,16,95,104,97,110,100,108,101,95, -- 102,114,111,109,108,105,115,116,216,8,0,0,115,34,0,0, -- 0,0,10,15,1,12,1,12,1,13,1,15,1,22,1,13, -- 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,9, -- 1,32,1,114,121,1,0,0,99,1,0,0,0,0,0,0, -- 0,2,0,0,0,2,0,0,0,67,0,0,0,115,78,0, -- 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, -- 0,124,1,0,100,2,0,107,8,0,114,74,0,124,0,0, -- 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, -- 114,74,0,124,1,0,106,1,0,100,5,0,131,1,0,100, -- 6,0,25,125,1,0,113,74,0,110,0,0,124,1,0,83, -- 41,7,122,167,67,97,108,99,117,108,97,116,101,32,119,104, -- 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, -- 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, -- 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, -- 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, -- 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, -- 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, -- 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, -- 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, -- 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, -- 110,111,119,110,46,10,10,32,32,32,32,114,250,0,0,0, -- 78,114,57,0,0,0,114,246,0,0,0,114,116,0,0,0, -- 114,84,0,0,0,41,2,114,93,0,0,0,114,32,0,0, -- 0,41,2,218,7,103,108,111,98,97,108,115,114,102,1,0, -- 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, -- 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, -- 101,95,95,248,8,0,0,115,12,0,0,0,0,7,15,1, -- 12,1,10,1,12,1,25,1,114,123,1,0,0,99,0,0, -- 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, -- 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, -- 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, -- 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, -- 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, -- 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, -- 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, -- 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, -- 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, -- 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, -- 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, -- 32,41,7,114,56,1,0,0,114,106,0,0,0,218,18,101, -- 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, -- 115,114,8,1,0,0,114,134,0,0,0,114,7,1,0,0, -- 114,232,0,0,0,41,3,90,10,101,120,116,101,110,115,105, -- 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, -- 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, -- 5,0,0,0,114,240,0,0,0,7,9,0,0,115,8,0, -- 0,0,0,5,18,1,12,1,12,1,114,240,0,0,0,99, -- 5,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, -- 67,0,0,0,115,227,0,0,0,124,4,0,100,1,0,107, -- 2,0,114,27,0,116,0,0,124,0,0,131,1,0,125,5, -- 0,110,54,0,124,1,0,100,2,0,107,9,0,114,45,0, -- 124,1,0,110,3,0,105,0,0,125,6,0,116,1,0,124, -- 6,0,131,1,0,125,7,0,116,0,0,124,0,0,124,7, -- 0,124,4,0,131,3,0,125,5,0,124,3,0,115,207,0, -- 124,4,0,100,1,0,107,2,0,114,122,0,116,0,0,124, -- 0,0,106,2,0,100,3,0,131,1,0,100,1,0,25,131, -- 1,0,83,124,0,0,115,132,0,124,5,0,83,116,3,0, -- 124,0,0,131,1,0,116,3,0,124,0,0,106,2,0,100, -- 3,0,131,1,0,100,1,0,25,131,1,0,24,125,8,0, -- 116,4,0,106,5,0,124,5,0,106,6,0,100,2,0,116, -- 3,0,124,5,0,106,6,0,131,1,0,124,8,0,24,133, -- 2,0,25,25,83,110,16,0,116,7,0,124,5,0,124,3, -- 0,116,0,0,131,3,0,83,100,2,0,83,41,4,97,214, -- 1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, -- 108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, -- 111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, -- 105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, -- 32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, -- 116,32,105,115,32,111,99,99,117,114,105,110,103,32,102,114, -- 111,109,10,32,32,32,32,116,111,32,104,97,110,100,108,101, -- 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, -- 115,46,32,84,104,101,32,39,108,111,99,97,108,115,39,32, -- 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111, -- 114,101,100,46,32,84,104,101,10,32,32,32,32,39,102,114, -- 111,109,108,105,115,116,39,32,97,114,103,117,109,101,110,116, -- 32,115,112,101,99,105,102,105,101,115,32,119,104,97,116,32, -- 115,104,111,117,108,100,32,101,120,105,115,116,32,97,115,32, -- 97,116,116,114,105,98,117,116,101,115,32,111,110,32,116,104, -- 101,32,109,111,100,117,108,101,10,32,32,32,32,98,101,105, -- 110,103,32,105,109,112,111,114,116,101,100,32,40,101,46,103, -- 46,32,96,96,102,114,111,109,32,109,111,100,117,108,101,32, -- 105,109,112,111,114,116,32,60,102,114,111,109,108,105,115,116, -- 62,96,96,41,46,32,32,84,104,101,32,39,108,101,118,101, -- 108,39,10,32,32,32,32,97,114,103,117,109,101,110,116,32, -- 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,112, -- 97,99,107,97,103,101,32,108,111,99,97,116,105,111,110,32, -- 116,111,32,105,109,112,111,114,116,32,102,114,111,109,32,105, -- 110,32,97,32,114,101,108,97,116,105,118,101,10,32,32,32, -- 32,105,109,112,111,114,116,32,40,101,46,103,46,32,96,96, -- 102,114,111,109,32,46,46,112,107,103,32,105,109,112,111,114, -- 116,32,109,111,100,96,96,32,119,111,117,108,100,32,104,97, -- 118,101,32,97,32,39,108,101,118,101,108,39,32,111,102,32, -- 50,41,46,10,10,32,32,32,32,114,84,0,0,0,78,114, -- 116,0,0,0,41,8,114,115,1,0,0,114,123,1,0,0, -- 114,121,0,0,0,114,31,0,0,0,114,7,0,0,0,114, -- 73,0,0,0,114,57,0,0,0,114,121,1,0,0,41,9, -- 114,67,0,0,0,114,122,1,0,0,218,6,108,111,99,97, -- 108,115,114,120,1,0,0,114,103,1,0,0,114,179,0,0, -- 0,90,8,103,108,111,98,97,108,115,95,114,102,1,0,0, -- 90,7,99,117,116,95,111,102,102,114,4,0,0,0,114,4, -- 0,0,0,114,5,0,0,0,218,10,95,95,105,109,112,111, -- 114,116,95,95,18,9,0,0,115,26,0,0,0,0,11,12, -- 1,15,2,24,1,12,1,18,1,6,3,12,1,23,1,6, -- 1,4,4,35,3,40,2,114,126,1,0,0,99,1,0,0, -- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, -- 0,115,68,0,0,0,116,0,0,106,1,0,124,0,0,131, -- 1,0,125,1,0,124,1,0,100,0,0,107,8,0,114,46, -- 0,116,2,0,100,1,0,124,0,0,23,131,1,0,130,1, -- 0,110,0,0,116,3,0,124,1,0,131,1,0,125,2,0, -- 124,2,0,106,4,0,131,0,0,83,41,2,78,122,25,110, -- 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, -- 101,32,110,97,109,101,100,32,41,5,114,10,1,0,0,114, -- 13,1,0,0,114,153,0,0,0,114,174,0,0,0,114,6, -- 1,0,0,41,3,114,67,0,0,0,114,177,0,0,0,114, -- 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, -- 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, -- 111,109,95,110,97,109,101,53,9,0,0,115,10,0,0,0, -- 0,1,15,1,12,1,19,1,12,1,114,127,1,0,0,99, -- 2,0,0,0,0,0,0,0,19,0,0,0,12,0,0,0, -- 67,0,0,0,115,232,2,0,0,124,1,0,97,0,0,124, -- 0,0,97,1,0,116,1,0,106,2,0,106,3,0,114,33, -- 0,116,4,0,97,5,0,110,6,0,116,6,0,97,5,0, -- 116,7,0,116,1,0,131,1,0,125,2,0,120,138,0,116, -- 1,0,106,8,0,106,9,0,131,0,0,68,93,121,0,92, -- 2,0,125,3,0,125,4,0,116,10,0,124,4,0,124,2, -- 0,131,2,0,114,67,0,124,3,0,116,1,0,106,11,0, -- 107,6,0,114,118,0,116,12,0,125,5,0,110,27,0,116, -- 0,0,106,13,0,124,3,0,131,1,0,114,67,0,116,14, -- 0,125,5,0,110,3,0,113,67,0,116,15,0,124,4,0, -- 124,5,0,131,2,0,125,6,0,116,16,0,124,6,0,131, -- 1,0,125,7,0,124,7,0,106,17,0,124,4,0,131,1, -- 0,1,113,67,0,113,67,0,87,116,1,0,106,8,0,116, -- 18,0,25,125,8,0,120,73,0,100,26,0,68,93,65,0, -- 125,9,0,124,9,0,116,1,0,106,8,0,107,7,0,114, -- 248,0,116,19,0,124,9,0,131,1,0,125,10,0,110,13, -- 0,116,1,0,106,8,0,124,9,0,25,125,10,0,116,20, -- 0,124,8,0,124,9,0,124,10,0,131,3,0,1,113,212, -- 0,87,100,5,0,100,6,0,103,1,0,102,2,0,100,7, -- 0,100,8,0,100,6,0,103,2,0,102,2,0,102,2,0, -- 125,11,0,120,146,0,124,11,0,68,93,126,0,92,2,0, -- 125,12,0,125,13,0,116,21,0,100,9,0,100,10,0,132, -- 0,0,124,13,0,68,131,1,0,131,1,0,115,108,1,116, -- 22,0,130,1,0,124,13,0,100,11,0,25,125,14,0,124, -- 12,0,116,1,0,106,8,0,107,6,0,114,150,1,116,1, -- 0,106,8,0,124,12,0,25,125,15,0,80,113,65,1,121, -- 17,0,116,19,0,124,12,0,131,1,0,125,15,0,80,87, -- 113,65,1,4,116,23,0,107,10,0,114,190,1,1,1,1, -- 119,65,1,89,113,65,1,88,113,65,1,87,116,23,0,100, -- 12,0,131,1,0,130,1,0,116,20,0,124,8,0,100,13, -- 0,124,15,0,131,3,0,1,116,20,0,124,8,0,100,14, -- 0,124,14,0,131,3,0,1,116,20,0,124,8,0,100,15, -- 0,100,16,0,106,24,0,124,13,0,131,1,0,131,3,0, -- 1,121,16,0,116,19,0,100,17,0,131,1,0,125,16,0, -- 87,110,24,0,4,116,23,0,107,10,0,114,50,2,1,1, -- 1,100,18,0,125,16,0,89,110,1,0,88,116,20,0,124, -- 8,0,100,17,0,124,16,0,131,3,0,1,116,19,0,100, -- 19,0,131,1,0,125,17,0,116,20,0,124,8,0,100,19, -- 0,124,17,0,131,3,0,1,124,12,0,100,7,0,107,2, -- 0,114,138,2,116,19,0,100,20,0,131,1,0,125,18,0, -- 116,20,0,124,8,0,100,21,0,124,18,0,131,3,0,1, -- 110,0,0,116,20,0,124,8,0,100,22,0,116,25,0,131, -- 0,0,131,3,0,1,116,26,0,106,27,0,116,0,0,106, -- 28,0,131,0,0,131,1,0,1,124,12,0,100,7,0,107, -- 2,0,114,228,2,116,29,0,106,30,0,100,23,0,131,1, -- 0,1,100,24,0,116,26,0,107,6,0,114,228,2,100,25, -- 0,116,31,0,95,32,0,113,228,2,110,0,0,100,18,0, -- 83,41,27,122,250,83,101,116,117,112,32,105,109,112,111,114, -- 116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,110, -- 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, -- 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, -- 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, -- 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, -- 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, -- 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, -- 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, -- 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, -- 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, -- 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, -- 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, -- 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, -- 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, -- 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,114, -- 49,0,0,0,114,166,0,0,0,218,8,98,117,105,108,116, -- 105,110,115,114,191,0,0,0,90,5,112,111,115,105,120,250, -- 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, -- 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, -- 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, -- 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, -- 100,1,0,83,41,2,114,29,0,0,0,78,41,1,114,31, -- 0,0,0,41,2,114,22,0,0,0,114,130,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,77, -- 0,0,0,105,9,0,0,115,2,0,0,0,6,0,122,25, -- 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, -- 60,103,101,110,101,120,112,114,62,114,84,0,0,0,122,30, -- 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, -- 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, -- 0,0,0,114,25,0,0,0,114,21,0,0,0,114,30,0, -- 0,0,114,85,0,0,0,78,114,111,0,0,0,90,6,119, -- 105,110,114,101,103,114,23,1,0,0,114,6,0,0,0,122, -- 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, -- 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, -- 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, -- 104,97,108,41,33,114,106,0,0,0,114,7,0,0,0,114, -- 117,0,0,0,114,118,0,0,0,114,120,0,0,0,114,232, -- 0,0,0,114,119,0,0,0,114,66,0,0,0,114,73,0, -- 0,0,218,5,105,116,101,109,115,114,192,0,0,0,114,157, -- 0,0,0,114,10,1,0,0,114,162,0,0,0,114,19,1, -- 0,0,114,247,0,0,0,114,174,0,0,0,114,254,0,0, -- 0,114,57,0,0,0,114,127,1,0,0,114,61,0,0,0, -- 218,3,97,108,108,114,100,0,0,0,114,153,0,0,0,114, -- 26,0,0,0,114,11,0,0,0,114,59,1,0,0,114,197, -- 0,0,0,114,124,1,0,0,114,134,0,0,0,114,223,0, -- 0,0,114,22,1,0,0,114,26,1,0,0,41,19,218,10, -- 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, -- 95,109,111,100,117,108,101,90,11,109,111,100,117,108,101,95, -- 116,121,112,101,114,67,0,0,0,114,179,0,0,0,114,169, -- 0,0,0,114,177,0,0,0,114,178,0,0,0,90,11,115, -- 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, -- 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, -- 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, -- 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, -- 114,21,0,0,0,114,25,0,0,0,90,9,111,115,95,109, -- 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, -- 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, -- 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, -- 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, -- 0,0,218,6,95,115,101,116,117,112,61,9,0,0,115,108, -- 0,0,0,0,9,6,1,6,2,12,1,9,2,6,3,12, -- 1,28,1,15,1,15,1,9,1,15,1,9,2,3,1,15, -- 1,12,1,20,3,13,1,13,1,15,1,15,2,13,1,20, -- 3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3, -- 1,12,1,5,1,13,1,12,2,12,1,16,1,16,1,25, -- 3,3,1,16,1,13,2,11,1,16,3,12,1,16,3,12, -- 1,12,1,19,3,19,1,19,1,12,1,13,1,12,1,114, -- 136,1,0,0,99,2,0,0,0,0,0,0,0,3,0,0, -- 0,3,0,0,0,67,0,0,0,115,136,0,0,0,116,0, -- 0,124,0,0,124,1,0,131,2,0,1,116,1,0,131,0, -- 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, -- 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, -- 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, -- 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, -- 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, -- 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, -- 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, -- 0,1,100,2,0,83,41,3,122,50,73,110,115,116,97,108, -- 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, -- 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, -- 110,32,111,102,32,105,109,112,111,114,116,46,114,130,1,0, -- 0,78,41,15,114,136,1,0,0,114,240,0,0,0,114,7, -- 0,0,0,114,78,1,0,0,114,197,0,0,0,114,86,1, -- 0,0,114,100,1,0,0,114,106,1,0,0,114,223,0,0, -- 0,114,10,1,0,0,114,19,1,0,0,114,3,0,0,0, -- 114,57,0,0,0,114,22,1,0,0,114,73,1,0,0,41, -- 3,114,134,1,0,0,114,135,1,0,0,90,17,115,117,112, -- 112,111,114,116,101,100,95,108,111,97,100,101,114,115,114,4, -- 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,95, -- 105,110,115,116,97,108,108,148,9,0,0,115,16,0,0,0, -- 0,2,13,1,9,1,28,1,16,1,16,1,15,1,19,1, -- 114,137,1,0,0,41,3,122,3,119,105,110,114,1,0,0, -- 0,114,2,0,0,0,41,92,114,59,0,0,0,114,10,0, -- 0,0,114,11,0,0,0,114,17,0,0,0,114,19,0,0, -- 0,114,28,0,0,0,114,38,0,0,0,114,39,0,0,0, -- 114,43,0,0,0,114,44,0,0,0,114,46,0,0,0,114, -- 55,0,0,0,114,65,0,0,0,114,68,0,0,0,114,66, -- 0,0,0,218,8,95,95,99,111,100,101,95,95,114,193,0, -- 0,0,114,69,0,0,0,114,109,0,0,0,114,92,0,0, -- 0,114,99,0,0,0,114,82,0,0,0,114,83,0,0,0, -- 114,102,0,0,0,114,103,0,0,0,114,105,0,0,0,114, -- 112,0,0,0,114,114,0,0,0,114,15,0,0,0,114,185, -- 0,0,0,114,14,0,0,0,114,18,0,0,0,90,17,95, -- 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, -- 114,125,0,0,0,114,134,0,0,0,114,119,0,0,0,114, -- 120,0,0,0,114,132,0,0,0,114,135,0,0,0,114,142, -- 0,0,0,114,144,0,0,0,114,152,0,0,0,114,156,0, -- 0,0,114,161,0,0,0,114,164,0,0,0,114,172,0,0, -- 0,114,180,0,0,0,114,190,0,0,0,114,195,0,0,0, -- 114,198,0,0,0,114,203,0,0,0,114,211,0,0,0,114, -- 212,0,0,0,114,216,0,0,0,114,173,0,0,0,218,6, -- 111,98,106,101,99,116,114,241,0,0,0,114,239,0,0,0, -- 114,247,0,0,0,114,174,0,0,0,114,9,1,0,0,114, -- 10,1,0,0,114,19,1,0,0,114,22,1,0,0,114,32, -- 1,0,0,114,33,1,0,0,114,48,1,0,0,114,8,1, -- 0,0,114,7,1,0,0,114,59,1,0,0,114,56,1,0, -- 0,114,60,1,0,0,114,251,0,0,0,114,73,1,0,0, -- 114,86,1,0,0,114,101,1,0,0,114,104,1,0,0,114, -- 105,1,0,0,114,107,1,0,0,114,110,1,0,0,114,119, -- 1,0,0,114,111,1,0,0,114,113,1,0,0,114,114,1, -- 0,0,114,115,1,0,0,114,121,1,0,0,114,123,1,0, -- 0,114,240,0,0,0,114,126,1,0,0,114,127,1,0,0, -- 114,136,1,0,0,114,137,1,0,0,114,4,0,0,0,114, -- 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, -- 60,109,111,100,117,108,101,62,8,0,0,0,115,170,0,0, -- 0,6,17,6,3,12,12,12,5,12,5,12,6,12,12,12, -- 10,12,9,12,5,12,7,15,22,12,8,12,4,15,4,19, -- 20,6,2,6,3,22,4,19,68,19,21,19,19,12,19,12, -- 20,12,114,22,1,18,2,6,2,9,2,9,1,9,2,15, -- 27,12,23,12,19,12,12,18,8,12,18,12,11,12,11,12, -- 17,12,16,21,55,21,12,18,10,12,14,12,36,19,27,19, -- 106,24,22,9,3,12,1,15,63,18,45,19,230,15,25,19, -- 70,19,71,19,63,19,24,22,110,19,41,25,43,25,16,6, -- 3,19,57,19,57,19,38,19,129,19,146,19,13,12,9,12, -- 9,15,40,12,17,6,1,10,2,12,27,12,6,18,24,12, -- 32,12,15,12,11,24,35,12,8,12,87, -+ 83,41,2,122,24,65,99,113,117,105,114,101,32,116,104,101, -+ 32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,2, -+ 114,107,0,0,0,114,4,1,0,0,41,1,114,72,0,0, -+ 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, -+ 114,76,0,0,0,72,8,0,0,115,2,0,0,0,0,2, -+ 122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,110, -+ 116,101,120,116,46,95,95,101,110,116,101,114,95,95,99,4, -+ 0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,67, -+ 0,0,0,115,14,0,0,0,116,0,0,106,1,0,131,0, -+ 0,1,100,1,0,83,41,2,122,60,82,101,108,101,97,115, -+ 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, -+ 107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,32, -+ 97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,112, -+ 116,105,111,110,115,46,78,41,2,114,107,0,0,0,114,108, -+ 0,0,0,41,4,114,72,0,0,0,90,8,101,120,99,95, -+ 116,121,112,101,90,9,101,120,99,95,118,97,108,117,101,90, -+ 13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,114,82,0, -+ 0,0,76,8,0,0,115,2,0,0,0,0,2,122,27,95, -+ 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, -+ 116,46,95,95,101,120,105,116,95,95,78,41,6,114,58,0, -+ 0,0,114,57,0,0,0,114,59,0,0,0,114,60,0,0, -+ 0,114,76,0,0,0,114,82,0,0,0,114,5,0,0,0, -+ 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, -+ 102,1,0,0,68,8,0,0,115,6,0,0,0,12,2,6, -+ 2,12,4,114,102,1,0,0,99,3,0,0,0,0,0,0, -+ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,91,0, -+ 0,0,124,1,0,106,0,0,100,1,0,124,2,0,100,2, -+ 0,24,131,2,0,125,3,0,116,1,0,124,3,0,131,1, -+ 0,124,2,0,107,0,0,114,55,0,116,2,0,100,3,0, -+ 131,1,0,130,1,0,110,0,0,124,3,0,100,4,0,25, -+ 125,4,0,124,0,0,114,87,0,100,5,0,106,3,0,124, -+ 4,0,124,0,0,131,2,0,83,124,4,0,83,41,6,122, -+ 50,82,101,115,111,108,118,101,32,97,32,114,101,108,97,116, -+ 105,118,101,32,109,111,100,117,108,101,32,110,97,109,101,32, -+ 116,111,32,97,110,32,97,98,115,111,108,117,116,101,32,111, -+ 110,101,46,114,117,0,0,0,114,30,0,0,0,122,50,97, -+ 116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118, -+ 101,32,105,109,112,111,114,116,32,98,101,121,111,110,100,32, -+ 116,111,112,45,108,101,118,101,108,32,112,97,99,107,97,103, -+ 101,114,85,0,0,0,122,5,123,125,46,123,125,41,4,114, -+ 35,0,0,0,114,32,0,0,0,114,134,0,0,0,114,48, -+ 0,0,0,41,5,114,68,0,0,0,218,7,112,97,99,107, -+ 97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,115, -+ 90,4,98,97,115,101,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,13,95,114,101,115,111,108,118,101,95, -+ 110,97,109,101,81,8,0,0,115,10,0,0,0,0,2,22, -+ 1,18,1,15,1,10,1,114,105,1,0,0,99,3,0,0, -+ 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, -+ 0,115,47,0,0,0,124,0,0,106,0,0,124,1,0,124, -+ 2,0,131,2,0,125,3,0,124,3,0,100,0,0,107,8, -+ 0,114,34,0,100,0,0,83,116,1,0,124,1,0,124,3, -+ 0,131,2,0,83,41,1,78,41,2,114,15,1,0,0,114, -+ 174,0,0,0,41,4,114,78,1,0,0,114,68,0,0,0, -+ 114,36,0,0,0,114,170,0,0,0,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,218,17,95,102,105,110,100, -+ 95,115,112,101,99,95,108,101,103,97,99,121,90,8,0,0, -+ 115,8,0,0,0,0,3,18,1,12,1,4,1,114,106,1, -+ 0,0,99,3,0,0,0,0,0,0,0,9,0,0,0,26, -+ 0,0,0,67,0,0,0,115,34,1,0,0,116,0,0,106, -+ 1,0,115,28,0,116,2,0,106,3,0,100,1,0,116,4, -+ 0,131,2,0,1,110,0,0,124,0,0,116,0,0,106,5, -+ 0,107,6,0,125,3,0,120,240,0,116,0,0,106,1,0, -+ 68,93,225,0,125,4,0,116,6,0,131,0,0,143,93,0, -+ 1,121,13,0,124,4,0,106,7,0,125,5,0,87,110,54, -+ 0,4,116,8,0,107,10,0,114,138,0,1,1,1,116,9, -+ 0,124,4,0,124,0,0,124,1,0,131,3,0,125,6,0, -+ 124,6,0,100,2,0,107,8,0,114,134,0,119,53,0,110, -+ 0,0,89,110,19,0,88,124,5,0,124,0,0,124,1,0, -+ 124,2,0,131,3,0,125,6,0,87,100,2,0,81,88,124, -+ 6,0,100,2,0,107,9,0,114,53,0,124,3,0,12,114, -+ 15,1,124,0,0,116,0,0,106,5,0,107,6,0,114,15, -+ 1,116,0,0,106,5,0,124,0,0,25,125,7,0,121,13, -+ 0,124,7,0,106,10,0,125,8,0,87,110,22,0,4,116, -+ 8,0,107,10,0,114,247,0,1,1,1,124,6,0,83,89, -+ 113,19,1,88,124,8,0,100,2,0,107,8,0,114,8,1, -+ 124,6,0,83,124,8,0,83,113,22,1,124,6,0,83,113, -+ 53,0,113,53,0,87,100,2,0,83,100,2,0,83,41,3, -+ 122,23,70,105,110,100,32,97,32,109,111,100,117,108,101,39, -+ 115,32,108,111,97,100,101,114,46,122,22,115,121,115,46,109, -+ 101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116, -+ 121,78,41,11,114,8,0,0,0,218,9,109,101,116,97,95, -+ 112,97,116,104,114,167,0,0,0,114,168,0,0,0,114,169, -+ 0,0,0,114,74,0,0,0,114,102,1,0,0,114,14,1, -+ 0,0,114,210,0,0,0,114,106,1,0,0,114,209,0,0, -+ 0,41,9,114,68,0,0,0,114,36,0,0,0,114,13,1, -+ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,78,1, -+ 0,0,114,14,1,0,0,114,178,0,0,0,114,180,0,0, -+ 0,114,209,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,10,95,102,105,110,100,95,115,112,101, -+ 99,99,8,0,0,115,48,0,0,0,0,2,9,1,19,4, -+ 15,1,16,1,10,1,3,1,13,1,13,1,18,1,12,1, -+ 11,2,24,1,12,2,22,1,13,1,3,1,13,1,13,4, -+ 9,2,12,1,4,2,7,2,11,2,114,108,1,0,0,99, -+ 3,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, -+ 67,0,0,0,115,194,0,0,0,116,0,0,124,0,0,116, -+ 1,0,131,2,0,115,45,0,116,2,0,100,1,0,106,3, -+ 0,116,4,0,124,0,0,131,1,0,131,1,0,131,1,0, -+ 130,1,0,110,0,0,124,2,0,100,2,0,107,0,0,114, -+ 72,0,116,5,0,100,3,0,131,1,0,130,1,0,110,0, -+ 0,124,1,0,114,156,0,116,0,0,124,1,0,116,1,0, -+ 131,2,0,115,108,0,116,2,0,100,4,0,131,1,0,130, -+ 1,0,113,156,0,124,1,0,116,6,0,106,7,0,107,7, -+ 0,114,156,0,100,5,0,125,3,0,116,8,0,124,3,0, -+ 106,3,0,124,1,0,131,1,0,131,1,0,130,1,0,113, -+ 156,0,110,0,0,124,0,0,12,114,190,0,124,2,0,100, -+ 2,0,107,2,0,114,190,0,116,5,0,100,6,0,131,1, -+ 0,130,1,0,110,0,0,100,7,0,83,41,8,122,28,86, -+ 101,114,105,102,121,32,97,114,103,117,109,101,110,116,115,32, -+ 97,114,101,32,34,115,97,110,101,34,46,122,31,109,111,100, -+ 117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101, -+ 32,115,116,114,44,32,110,111,116,32,123,125,114,85,0,0, -+ 0,122,18,108,101,118,101,108,32,109,117,115,116,32,98,101, -+ 32,62,61,32,48,122,31,95,95,112,97,99,107,97,103,101, -+ 95,95,32,110,111,116,32,115,101,116,32,116,111,32,97,32, -+ 115,116,114,105,110,103,122,61,80,97,114,101,110,116,32,109, -+ 111,100,117,108,101,32,123,33,114,125,32,110,111,116,32,108, -+ 111,97,100,101,100,44,32,99,97,110,110,111,116,32,112,101, -+ 114,102,111,114,109,32,114,101,108,97,116,105,118,101,32,105, -+ 109,112,111,114,116,122,17,69,109,112,116,121,32,109,111,100, -+ 117,108,101,32,110,97,109,101,78,41,9,114,193,0,0,0, -+ 114,83,1,0,0,218,9,84,121,112,101,69,114,114,111,114, -+ 114,48,0,0,0,114,67,0,0,0,114,134,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,218,11,83,121,115,116,101, -+ 109,69,114,114,111,114,41,4,114,68,0,0,0,114,103,1, -+ 0,0,114,104,1,0,0,114,172,0,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,13,95,115,97, -+ 110,105,116,121,95,99,104,101,99,107,139,8,0,0,115,24, -+ 0,0,0,0,2,15,1,30,1,12,1,15,1,6,1,15, -+ 1,15,1,15,1,6,2,27,1,19,1,114,111,1,0,0, -+ 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, -+ 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, -+ 0,8,0,0,0,12,0,0,0,67,0,0,0,115,52,1, -+ 0,0,100,0,0,125,2,0,124,0,0,106,0,0,100,1, -+ 0,131,1,0,100,2,0,25,125,3,0,124,3,0,114,178, -+ 0,124,3,0,116,1,0,106,2,0,107,7,0,114,62,0, -+ 116,3,0,124,1,0,124,3,0,131,2,0,1,110,0,0, -+ 124,0,0,116,1,0,106,2,0,107,6,0,114,88,0,116, -+ 1,0,106,2,0,124,0,0,25,83,116,1,0,106,2,0, -+ 124,3,0,25,125,4,0,121,13,0,124,4,0,106,4,0, -+ 125,2,0,87,113,178,0,4,116,5,0,107,10,0,114,174, -+ 0,1,1,1,116,6,0,100,3,0,23,106,7,0,124,0, -+ 0,124,3,0,131,2,0,125,5,0,116,8,0,124,5,0, -+ 100,4,0,124,0,0,131,1,1,130,1,0,89,113,178,0, -+ 88,110,0,0,116,9,0,124,0,0,124,2,0,131,2,0, -+ 125,6,0,124,6,0,100,0,0,107,8,0,114,235,0,116, -+ 8,0,116,6,0,106,7,0,124,0,0,131,1,0,100,4, -+ 0,124,0,0,131,1,1,130,1,0,110,18,0,116,10,0, -+ 124,6,0,131,1,0,106,11,0,131,0,0,125,7,0,124, -+ 3,0,114,48,1,116,1,0,106,2,0,124,3,0,25,125, -+ 4,0,116,12,0,124,4,0,124,0,0,106,0,0,100,1, -+ 0,131,1,0,100,5,0,25,124,7,0,131,3,0,1,110, -+ 0,0,124,7,0,83,41,6,78,114,117,0,0,0,114,85, -+ 0,0,0,122,23,59,32,123,33,114,125,32,105,115,32,110, -+ 111,116,32,97,32,112,97,99,107,97,103,101,114,68,0,0, -+ 0,114,116,0,0,0,41,13,114,33,0,0,0,114,8,0, -+ 0,0,114,74,0,0,0,114,115,0,0,0,114,247,0,0, -+ 0,114,210,0,0,0,218,8,95,69,82,82,95,77,83,71, -+ 114,48,0,0,0,114,154,0,0,0,114,108,1,0,0,114, -+ 175,0,0,0,114,7,1,0,0,114,62,0,0,0,41,8, -+ 114,68,0,0,0,218,7,105,109,112,111,114,116,95,114,36, -+ 0,0,0,114,234,0,0,0,90,13,112,97,114,101,110,116, -+ 95,109,111,100,117,108,101,114,172,0,0,0,114,178,0,0, -+ 0,114,180,0,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,23,95,102,105,110,100,95,97,110,100, -+ 95,108,111,97,100,95,117,110,108,111,99,107,101,100,159,8, -+ 0,0,115,42,0,0,0,0,1,6,1,19,1,6,1,15, -+ 1,16,2,15,1,11,1,13,1,3,1,13,1,13,1,22, -+ 1,26,1,15,1,12,1,30,2,18,1,6,2,13,1,32, -+ 1,114,114,1,0,0,99,2,0,0,0,0,0,0,0,2, -+ 0,0,0,10,0,0,0,67,0,0,0,115,36,0,0,0, -+ 116,0,0,124,0,0,131,1,0,143,18,0,1,116,1,0, -+ 124,0,0,124,1,0,131,2,0,83,87,100,1,0,81,88, -+ 100,1,0,83,41,2,122,54,70,105,110,100,32,97,110,100, -+ 32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101, -+ 44,32,97,110,100,32,114,101,108,101,97,115,101,32,116,104, -+ 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, -+ 2,114,104,0,0,0,114,114,1,0,0,41,2,114,68,0, -+ 0,0,114,113,1,0,0,114,5,0,0,0,114,5,0,0, -+ 0,114,6,0,0,0,218,14,95,102,105,110,100,95,97,110, -+ 100,95,108,111,97,100,186,8,0,0,115,4,0,0,0,0, -+ 2,13,1,114,115,1,0,0,99,3,0,0,0,0,0,0, -+ 0,5,0,0,0,4,0,0,0,67,0,0,0,115,172,0, -+ 0,0,116,0,0,124,0,0,124,1,0,124,2,0,131,3, -+ 0,1,124,2,0,100,1,0,107,4,0,114,49,0,116,1, -+ 0,124,0,0,124,1,0,124,2,0,131,3,0,125,0,0, -+ 110,0,0,116,2,0,106,3,0,131,0,0,1,124,0,0, -+ 116,4,0,106,5,0,107,7,0,114,87,0,116,6,0,124, -+ 0,0,116,7,0,131,2,0,83,116,4,0,106,5,0,124, -+ 0,0,25,125,3,0,124,3,0,100,2,0,107,8,0,114, -+ 158,0,116,2,0,106,8,0,131,0,0,1,100,3,0,106, -+ 9,0,124,0,0,131,1,0,125,4,0,116,10,0,124,4, -+ 0,100,4,0,124,0,0,131,1,1,130,1,0,110,0,0, -+ 116,11,0,124,0,0,131,1,0,1,124,3,0,83,41,5, -+ 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, -+ 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, -+ 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, -+ 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, -+ 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, -+ 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, -+ 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, -+ 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, -+ 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, -+ 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, -+ 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, -+ 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, -+ 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, -+ 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, -+ 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, -+ 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, -+ 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, -+ 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, -+ 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, -+ 46,10,10,32,32,32,32,114,85,0,0,0,78,122,40,105, -+ 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, -+ 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, -+ 109,111,100,117,108,101,115,114,68,0,0,0,41,12,114,111, -+ 1,0,0,114,105,1,0,0,114,107,0,0,0,114,4,1, -+ 0,0,114,8,0,0,0,114,74,0,0,0,114,115,1,0, -+ 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,108, -+ 0,0,0,114,48,0,0,0,114,154,0,0,0,114,113,0, -+ 0,0,41,5,114,68,0,0,0,114,103,1,0,0,114,104, -+ 1,0,0,114,180,0,0,0,114,152,0,0,0,114,5,0, -+ 0,0,114,5,0,0,0,114,6,0,0,0,114,116,1,0, -+ 0,192,8,0,0,115,26,0,0,0,0,9,16,1,12,1, -+ 21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, -+ 21,1,10,1,114,116,1,0,0,99,3,0,0,0,0,0, -+ 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,1, -+ 1,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, -+ 253,0,100,2,0,124,1,0,107,6,0,114,89,0,116,1, -+ 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, -+ 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, -+ 131,2,0,114,89,0,124,1,0,106,3,0,124,0,0,106, -+ 4,0,131,1,0,1,113,89,0,110,0,0,120,161,0,124, -+ 1,0,68,93,150,0,125,3,0,116,0,0,124,0,0,124, -+ 3,0,131,2,0,115,96,0,100,4,0,106,5,0,124,0, -+ 0,106,6,0,124,3,0,131,2,0,125,4,0,121,17,0, -+ 116,7,0,124,2,0,124,4,0,131,2,0,1,87,113,246, -+ 0,4,116,8,0,107,10,0,114,242,0,1,125,5,0,1, -+ 122,53,0,116,9,0,124,5,0,131,1,0,106,10,0,116, -+ 11,0,131,1,0,114,221,0,124,5,0,106,12,0,124,4, -+ 0,107,2,0,114,221,0,119,96,0,113,221,0,110,0,0, -+ 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, -+ 0,88,113,246,0,88,113,96,0,113,96,0,87,110,0,0, -+ 124,0,0,83,41,6,122,238,70,105,103,117,114,101,32,111, -+ 117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116, -+ 95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110, -+ 46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114, -+ 116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32, -+ 97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104, -+ 32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32, -+ 111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32, -+ 32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114, -+ 101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117, -+ 112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110, -+ 32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105, -+ 109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105, -+ 109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97, -+ 116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46, -+ 10,10,32,32,32,32,114,247,0,0,0,250,1,42,218,7, -+ 95,95,97,108,108,95,95,122,5,123,125,46,123,125,78,41, -+ 13,114,61,0,0,0,114,246,0,0,0,218,6,114,101,109, -+ 111,118,101,114,198,0,0,0,114,118,1,0,0,114,48,0, -+ 0,0,114,58,0,0,0,114,115,0,0,0,114,154,0,0, -+ 0,114,83,1,0,0,114,10,0,0,0,218,15,95,69,82, -+ 82,95,77,83,71,95,80,82,69,70,73,88,114,68,0,0, -+ 0,41,6,114,180,0,0,0,218,8,102,114,111,109,108,105, -+ 115,116,114,113,1,0,0,114,17,0,0,0,90,9,102,114, -+ 111,109,95,110,97,109,101,114,41,1,0,0,114,5,0,0, -+ 0,114,5,0,0,0,114,6,0,0,0,218,16,95,104,97, -+ 110,100,108,101,95,102,114,111,109,108,105,115,116,216,8,0, -+ 0,115,34,0,0,0,0,10,15,1,12,1,12,1,13,1, -+ 15,1,22,1,13,1,15,1,21,1,3,1,17,1,18,4, -+ 21,1,15,1,9,1,32,1,114,122,1,0,0,99,1,0, -+ 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, -+ 0,0,115,78,0,0,0,124,0,0,106,0,0,100,1,0, -+ 131,1,0,125,1,0,124,1,0,100,2,0,107,8,0,114, -+ 74,0,124,0,0,100,3,0,25,125,1,0,100,4,0,124, -+ 0,0,107,7,0,114,74,0,124,1,0,106,1,0,100,5, -+ 0,131,1,0,100,6,0,25,125,1,0,113,74,0,110,0, -+ 0,124,1,0,83,41,7,122,167,67,97,108,99,117,108,97, -+ 116,101,32,119,104,97,116,32,95,95,112,97,99,107,97,103, -+ 101,95,95,32,115,104,111,117,108,100,32,98,101,46,10,10, -+ 32,32,32,32,95,95,112,97,99,107,97,103,101,95,95,32, -+ 105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101, -+ 100,32,116,111,32,98,101,32,100,101,102,105,110,101,100,32, -+ 111,114,32,99,111,117,108,100,32,98,101,32,115,101,116,32, -+ 116,111,32,78,111,110,101,10,32,32,32,32,116,111,32,114, -+ 101,112,114,101,115,101,110,116,32,116,104,97,116,32,105,116, -+ 115,32,112,114,111,112,101,114,32,118,97,108,117,101,32,105, -+ 115,32,117,110,107,110,111,119,110,46,10,10,32,32,32,32, -+ 114,251,0,0,0,78,114,58,0,0,0,114,247,0,0,0, -+ 114,117,0,0,0,114,85,0,0,0,41,2,114,94,0,0, -+ 0,114,33,0,0,0,41,2,218,7,103,108,111,98,97,108, -+ 115,114,103,1,0,0,114,5,0,0,0,114,5,0,0,0, -+ 114,6,0,0,0,218,17,95,99,97,108,99,95,95,95,112, -+ 97,99,107,97,103,101,95,95,248,8,0,0,115,12,0,0, -+ 0,0,7,15,1,12,1,10,1,12,1,25,1,114,124,1, -+ 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, -+ 0,0,0,67,0,0,0,115,55,0,0,0,116,0,0,116, -+ 1,0,106,2,0,131,0,0,102,2,0,125,0,0,116,3, -+ 0,116,4,0,102,2,0,125,1,0,116,5,0,116,6,0, -+ 102,2,0,125,2,0,124,0,0,124,1,0,124,2,0,103, -+ 3,0,83,41,1,122,95,82,101,116,117,114,110,115,32,97, -+ 32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,97, -+ 115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,101, -+ 114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,116, -+ 101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,108, -+ 111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,41, -+ 46,10,32,32,32,32,41,7,114,57,1,0,0,114,107,0, -+ 0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,117, -+ 102,102,105,120,101,115,114,9,1,0,0,114,135,0,0,0, -+ 114,8,1,0,0,114,233,0,0,0,41,3,90,10,101,120, -+ 116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,101, -+ 90,8,98,121,116,101,99,111,100,101,114,5,0,0,0,114, -+ 5,0,0,0,114,6,0,0,0,114,241,0,0,0,7,9, -+ 0,0,115,8,0,0,0,0,5,18,1,12,1,12,1,114, -+ 241,0,0,0,99,5,0,0,0,0,0,0,0,9,0,0, -+ 0,5,0,0,0,67,0,0,0,115,227,0,0,0,124,4, -+ 0,100,1,0,107,2,0,114,27,0,116,0,0,124,0,0, -+ 131,1,0,125,5,0,110,54,0,124,1,0,100,2,0,107, -+ 9,0,114,45,0,124,1,0,110,3,0,105,0,0,125,6, -+ 0,116,1,0,124,6,0,131,1,0,125,7,0,116,0,0, -+ 124,0,0,124,7,0,124,4,0,131,3,0,125,5,0,124, -+ 3,0,115,207,0,124,4,0,100,1,0,107,2,0,114,122, -+ 0,116,0,0,124,0,0,106,2,0,100,3,0,131,1,0, -+ 100,1,0,25,131,1,0,83,124,0,0,115,132,0,124,5, -+ 0,83,116,3,0,124,0,0,131,1,0,116,3,0,124,0, -+ 0,106,2,0,100,3,0,131,1,0,100,1,0,25,131,1, -+ 0,24,125,8,0,116,4,0,106,5,0,124,5,0,106,6, -+ 0,100,2,0,116,3,0,124,5,0,106,6,0,131,1,0, -+ 124,8,0,24,133,2,0,25,25,83,110,16,0,116,7,0, -+ 124,5,0,124,3,0,116,0,0,131,3,0,83,100,2,0, -+ 83,41,4,97,214,1,0,0,73,109,112,111,114,116,32,97, -+ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, -+ 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, -+ 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, -+ 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, -+ 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, -+ 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, -+ 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, -+ 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, -+ 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, -+ 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, -+ 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, -+ 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, -+ 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, -+ 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, -+ 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, -+ 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, -+ 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, -+ 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, -+ 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, -+ 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, -+ 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, -+ 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, -+ 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, -+ 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, -+ 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, -+ 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, -+ 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, -+ 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, -+ 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,85, -+ 0,0,0,78,114,117,0,0,0,41,8,114,116,1,0,0, -+ 114,124,1,0,0,114,122,0,0,0,114,32,0,0,0,114, -+ 8,0,0,0,114,74,0,0,0,114,58,0,0,0,114,122, -+ 1,0,0,41,9,114,68,0,0,0,114,123,1,0,0,218, -+ 6,108,111,99,97,108,115,114,121,1,0,0,114,104,1,0, -+ 0,114,180,0,0,0,90,8,103,108,111,98,97,108,115,95, -+ 114,103,1,0,0,90,7,99,117,116,95,111,102,102,114,5, -+ 0,0,0,114,5,0,0,0,114,6,0,0,0,218,10,95, -+ 95,105,109,112,111,114,116,95,95,18,9,0,0,115,26,0, -+ 0,0,0,11,12,1,15,2,24,1,12,1,18,1,6,3, -+ 12,1,23,1,6,1,4,4,35,3,40,2,114,127,1,0, -+ 0,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, -+ 0,0,67,0,0,0,115,68,0,0,0,116,0,0,106,1, -+ 0,124,0,0,131,1,0,125,1,0,124,1,0,100,0,0, -+ 107,8,0,114,46,0,116,2,0,100,1,0,124,0,0,23, -+ 131,1,0,130,1,0,110,0,0,116,3,0,124,1,0,131, -+ 1,0,125,2,0,124,2,0,106,4,0,131,0,0,83,41, -+ 2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32, -+ 109,111,100,117,108,101,32,110,97,109,101,100,32,41,5,114, -+ 11,1,0,0,114,14,1,0,0,114,154,0,0,0,114,175, -+ 0,0,0,114,7,1,0,0,41,3,114,68,0,0,0,114, -+ 178,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,18,95,98,117,105,108,116, -+ 105,110,95,102,114,111,109,95,110,97,109,101,53,9,0,0, -+ 115,10,0,0,0,0,1,15,1,12,1,19,1,12,1,114, -+ 128,1,0,0,99,2,0,0,0,0,0,0,0,19,0,0, -+ 0,12,0,0,0,67,0,0,0,115,232,2,0,0,124,1, -+ 0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0, -+ 106,3,0,114,33,0,116,4,0,97,5,0,110,6,0,116, -+ 6,0,97,5,0,116,7,0,116,1,0,131,1,0,125,2, -+ 0,120,138,0,116,1,0,106,8,0,106,9,0,131,0,0, -+ 68,93,121,0,92,2,0,125,3,0,125,4,0,116,10,0, -+ 124,4,0,124,2,0,131,2,0,114,67,0,124,3,0,116, -+ 1,0,106,11,0,107,6,0,114,118,0,116,12,0,125,5, -+ 0,110,27,0,116,0,0,106,13,0,124,3,0,131,1,0, -+ 114,67,0,116,14,0,125,5,0,110,3,0,113,67,0,116, -+ 15,0,124,4,0,124,5,0,131,2,0,125,6,0,116,16, -+ 0,124,6,0,131,1,0,125,7,0,124,7,0,106,17,0, -+ 124,4,0,131,1,0,1,113,67,0,113,67,0,87,116,1, -+ 0,106,8,0,116,18,0,25,125,8,0,120,73,0,100,26, -+ 0,68,93,65,0,125,9,0,124,9,0,116,1,0,106,8, -+ 0,107,7,0,114,248,0,116,19,0,124,9,0,131,1,0, -+ 125,10,0,110,13,0,116,1,0,106,8,0,124,9,0,25, -+ 125,10,0,116,20,0,124,8,0,124,9,0,124,10,0,131, -+ 3,0,1,113,212,0,87,100,5,0,100,6,0,103,1,0, -+ 102,2,0,100,7,0,100,8,0,100,6,0,103,2,0,102, -+ 2,0,102,2,0,125,11,0,120,146,0,124,11,0,68,93, -+ 126,0,92,2,0,125,12,0,125,13,0,116,21,0,100,9, -+ 0,100,10,0,132,0,0,124,13,0,68,131,1,0,131,1, -+ 0,115,108,1,116,22,0,130,1,0,124,13,0,100,11,0, -+ 25,125,14,0,124,12,0,116,1,0,106,8,0,107,6,0, -+ 114,150,1,116,1,0,106,8,0,124,12,0,25,125,15,0, -+ 80,113,65,1,121,17,0,116,19,0,124,12,0,131,1,0, -+ 125,15,0,80,87,113,65,1,4,116,23,0,107,10,0,114, -+ 190,1,1,1,1,119,65,1,89,113,65,1,88,113,65,1, -+ 87,116,23,0,100,12,0,131,1,0,130,1,0,116,20,0, -+ 124,8,0,100,13,0,124,15,0,131,3,0,1,116,20,0, -+ 124,8,0,100,14,0,124,14,0,131,3,0,1,116,20,0, -+ 124,8,0,100,15,0,100,16,0,106,24,0,124,13,0,131, -+ 1,0,131,3,0,1,121,16,0,116,19,0,100,17,0,131, -+ 1,0,125,16,0,87,110,24,0,4,116,23,0,107,10,0, -+ 114,50,2,1,1,1,100,18,0,125,16,0,89,110,1,0, -+ 88,116,20,0,124,8,0,100,17,0,124,16,0,131,3,0, -+ 1,116,19,0,100,19,0,131,1,0,125,17,0,116,20,0, -+ 124,8,0,100,19,0,124,17,0,131,3,0,1,124,12,0, -+ 100,7,0,107,2,0,114,138,2,116,19,0,100,20,0,131, -+ 1,0,125,18,0,116,20,0,124,8,0,100,21,0,124,18, -+ 0,131,3,0,1,110,0,0,116,20,0,124,8,0,100,22, -+ 0,116,25,0,131,0,0,131,3,0,1,116,26,0,106,27, -+ 0,116,0,0,106,28,0,131,0,0,131,1,0,1,124,12, -+ 0,100,7,0,107,2,0,114,228,2,116,29,0,106,30,0, -+ 100,23,0,131,1,0,1,100,24,0,116,26,0,107,6,0, -+ 114,228,2,100,25,0,116,31,0,95,32,0,113,228,2,110, -+ 0,0,100,18,0,83,41,27,122,250,83,101,116,117,112,32, -+ 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, -+ 111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,117, -+ 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, -+ 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, -+ 109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,103, -+ 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, -+ 10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,32, -+ 110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,109, -+ 111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,110, -+ 100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,100, -+ 32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,105, -+ 110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,116, -+ 104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,115, -+ 32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,105, -+ 116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,10, -+ 32,32,32,32,114,50,0,0,0,114,167,0,0,0,218,8, -+ 98,117,105,108,116,105,110,115,114,192,0,0,0,90,5,112, -+ 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, -+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, -+ 0,0,0,115,33,0,0,0,124,0,0,93,23,0,125,1, -+ 0,116,0,0,124,1,0,131,1,0,100,0,0,107,2,0, -+ 86,1,113,3,0,100,1,0,83,41,2,114,30,0,0,0, -+ 78,41,1,114,32,0,0,0,41,2,114,23,0,0,0,114, -+ 131,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, -+ 0,0,0,114,78,0,0,0,105,9,0,0,115,2,0,0, -+ 0,6,0,122,25,95,115,101,116,117,112,46,60,108,111,99, -+ 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,85, -+ 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, -+ 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, -+ 32,110,116,114,4,0,0,0,114,26,0,0,0,114,22,0, -+ 0,0,114,31,0,0,0,114,86,0,0,0,78,114,112,0, -+ 0,0,90,6,119,105,110,114,101,103,114,24,1,0,0,114, -+ 7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,112, -+ 121,100,84,41,4,122,3,95,105,111,122,9,95,119,97,114, -+ 110,105,110,103,115,122,8,98,117,105,108,116,105,110,115,122, -+ 7,109,97,114,115,104,97,108,41,33,114,107,0,0,0,114, -+ 8,0,0,0,114,118,0,0,0,114,119,0,0,0,114,121, -+ 0,0,0,114,233,0,0,0,114,120,0,0,0,114,67,0, -+ 0,0,114,74,0,0,0,218,5,105,116,101,109,115,114,193, -+ 0,0,0,114,158,0,0,0,114,11,1,0,0,114,163,0, -+ 0,0,114,20,1,0,0,114,248,0,0,0,114,175,0,0, -+ 0,114,255,0,0,0,114,58,0,0,0,114,128,1,0,0, -+ 114,62,0,0,0,218,3,97,108,108,114,101,0,0,0,114, -+ 154,0,0,0,114,27,0,0,0,114,12,0,0,0,114,60, -+ 1,0,0,114,198,0,0,0,114,125,1,0,0,114,135,0, -+ 0,0,114,224,0,0,0,114,23,1,0,0,114,27,1,0, -+ 0,41,19,218,10,115,121,115,95,109,111,100,117,108,101,218, -+ 11,95,105,109,112,95,109,111,100,117,108,101,90,11,109,111, -+ 100,117,108,101,95,116,121,112,101,114,68,0,0,0,114,180, -+ 0,0,0,114,170,0,0,0,114,178,0,0,0,114,179,0, -+ 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90, -+ 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98, -+ 117,105,108,116,105,110,95,109,111,100,117,108,101,90,10,111, -+ 115,95,100,101,116,97,105,108,115,90,10,98,117,105,108,116, -+ 105,110,95,111,115,114,22,0,0,0,114,26,0,0,0,90, -+ 9,111,115,95,109,111,100,117,108,101,90,13,116,104,114,101, -+ 97,100,95,109,111,100,117,108,101,90,14,119,101,97,107,114, -+ 101,102,95,109,111,100,117,108,101,90,13,119,105,110,114,101, -+ 103,95,109,111,100,117,108,101,114,5,0,0,0,114,5,0, -+ 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,61, -+ 9,0,0,115,108,0,0,0,0,9,6,1,6,2,12,1, -+ 9,2,6,3,12,1,28,1,15,1,15,1,9,1,15,1, -+ 9,2,3,1,15,1,12,1,20,3,13,1,13,1,15,1, -+ 15,2,13,1,20,3,33,1,19,2,31,1,10,1,15,1, -+ 13,1,4,2,3,1,12,1,5,1,13,1,12,2,12,1, -+ 16,1,16,1,25,3,3,1,16,1,13,2,11,1,16,3, -+ 12,1,16,3,12,1,12,1,19,3,19,1,19,1,12,1, -+ 13,1,12,1,114,137,1,0,0,99,2,0,0,0,0,0, -+ 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,136, -+ 0,0,0,116,0,0,124,0,0,124,1,0,131,2,0,1, -+ 116,1,0,131,0,0,125,2,0,116,2,0,106,3,0,106, -+ 4,0,116,5,0,106,6,0,124,2,0,140,0,0,103,1, -+ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,9, -+ 0,131,1,0,1,116,2,0,106,7,0,106,8,0,116,10, -+ 0,131,1,0,1,116,11,0,106,12,0,100,1,0,107,2, -+ 0,114,116,0,116,2,0,106,7,0,106,8,0,116,13,0, -+ 131,1,0,1,110,0,0,116,2,0,106,7,0,106,8,0, -+ 116,14,0,131,1,0,1,100,2,0,83,41,3,122,50,73, -+ 110,115,116,97,108,108,32,105,109,112,111,114,116,108,105,98, -+ 32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110, -+ 116,97,116,105,111,110,32,111,102,32,105,109,112,111,114,116, -+ 46,114,131,1,0,0,78,41,15,114,137,1,0,0,114,241, -+ 0,0,0,114,8,0,0,0,114,79,1,0,0,114,198,0, -+ 0,0,114,87,1,0,0,114,101,1,0,0,114,107,1,0, -+ 0,114,224,0,0,0,114,11,1,0,0,114,20,1,0,0, -+ 114,4,0,0,0,114,58,0,0,0,114,23,1,0,0,114, -+ 74,1,0,0,41,3,114,135,1,0,0,114,136,1,0,0, -+ 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, -+ 101,114,115,114,5,0,0,0,114,5,0,0,0,114,6,0, -+ 0,0,218,8,95,105,110,115,116,97,108,108,148,9,0,0, -+ 115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,16, -+ 1,15,1,19,1,114,138,1,0,0,41,4,122,3,119,105, -+ 110,114,1,0,0,0,114,2,0,0,0,114,3,0,0,0, -+ 41,92,114,60,0,0,0,114,11,0,0,0,114,12,0,0, -+ 0,114,18,0,0,0,114,20,0,0,0,114,29,0,0,0, -+ 114,39,0,0,0,114,40,0,0,0,114,44,0,0,0,114, -+ 45,0,0,0,114,47,0,0,0,114,56,0,0,0,114,66, -+ 0,0,0,114,69,0,0,0,114,67,0,0,0,218,8,95, -+ 95,99,111,100,101,95,95,114,194,0,0,0,114,70,0,0, -+ 0,114,110,0,0,0,114,93,0,0,0,114,100,0,0,0, -+ 114,83,0,0,0,114,84,0,0,0,114,103,0,0,0,114, -+ 104,0,0,0,114,106,0,0,0,114,113,0,0,0,114,115, -+ 0,0,0,114,16,0,0,0,114,186,0,0,0,114,15,0, -+ 0,0,114,19,0,0,0,90,17,95,82,65,87,95,77,65, -+ 71,73,67,95,78,85,77,66,69,82,114,126,0,0,0,114, -+ 135,0,0,0,114,120,0,0,0,114,121,0,0,0,114,133, -+ 0,0,0,114,136,0,0,0,114,143,0,0,0,114,145,0, -+ 0,0,114,153,0,0,0,114,157,0,0,0,114,162,0,0, -+ 0,114,165,0,0,0,114,173,0,0,0,114,181,0,0,0, -+ 114,191,0,0,0,114,196,0,0,0,114,199,0,0,0,114, -+ 204,0,0,0,114,212,0,0,0,114,213,0,0,0,114,217, -+ 0,0,0,114,174,0,0,0,218,6,111,98,106,101,99,116, -+ 114,242,0,0,0,114,240,0,0,0,114,248,0,0,0,114, -+ 175,0,0,0,114,10,1,0,0,114,11,1,0,0,114,20, -+ 1,0,0,114,23,1,0,0,114,33,1,0,0,114,34,1, -+ 0,0,114,49,1,0,0,114,9,1,0,0,114,8,1,0, -+ 0,114,60,1,0,0,114,57,1,0,0,114,61,1,0,0, -+ 114,252,0,0,0,114,74,1,0,0,114,87,1,0,0,114, -+ 102,1,0,0,114,105,1,0,0,114,106,1,0,0,114,108, -+ 1,0,0,114,111,1,0,0,114,120,1,0,0,114,112,1, -+ 0,0,114,114,1,0,0,114,115,1,0,0,114,116,1,0, -+ 0,114,122,1,0,0,114,124,1,0,0,114,241,0,0,0, -+ 114,127,1,0,0,114,128,1,0,0,114,137,1,0,0,114, -+ 138,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5, -+ 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, -+ 101,62,8,0,0,0,115,170,0,0,0,6,17,6,3,12, -+ 12,12,5,12,5,12,6,12,12,12,10,12,9,12,5,12, -+ 7,15,22,12,8,12,4,15,4,19,20,6,2,6,3,22, -+ 4,19,68,19,21,19,19,12,19,12,20,12,114,22,1,18, -+ 2,6,2,9,2,9,1,9,2,15,27,12,23,12,19,12, -+ 12,18,8,12,18,12,11,12,11,12,17,12,16,21,55,21, -+ 12,18,10,12,14,12,36,19,27,19,106,24,22,9,3,12, -+ 1,15,63,18,45,19,230,15,25,19,70,19,71,19,63,19, -+ 24,22,110,19,41,25,43,25,16,6,3,19,57,19,57,19, -+ 38,19,129,19,146,19,13,12,9,12,9,15,40,12,17,6, -+ 1,10,2,12,27,12,6,18,24,12,32,12,15,12,11,24, -+ 35,12,8,12,87, - }; -diff -Nru orig/Python/marshal.c modified/Python/marshal.c ---- orig/Python/marshal.c 2015-02-03 19:49:05.000000000 +0800 -+++ modified/Python/marshal.c 2015-05-04 12:43:06.000000000 +0800 -@@ -13,17 +13,26 @@ - #include "code.h" - #include "marshal.h" - -+#ifdef __APPLE__ -+# include "TargetConditionals.h" -+#endif /* __APPLE__ */ -+ - #define ABS(x) ((x) < 0 ? -(x) : (x)) - - /* High water mark to determine when the marshalled object is dangerously deep - * and risks coring the interpreter. When the object stack gets this deep, - * raise an exception instead of continuing. - * On Windows debug builds, reduce this value. -+ * iOS also requires a reduced value. - */ - #if defined(MS_WINDOWS) && defined(_DEBUG) --#define MAX_MARSHAL_STACK_DEPTH 1500 -+# define MAX_MARSHAL_STACK_DEPTH 1500 - #else --#define MAX_MARSHAL_STACK_DEPTH 2000 -+# if TARGET_OS_IPHONE -+# define MAX_MARSHAL_STACK_DEPTH 1500 -+# else -+# define MAX_MARSHAL_STACK_DEPTH 2000 -+# endif /* TARGET_OS_IPHONE */ - #endif - - #define TYPE_NULL '0' -Binary files orig/Tools/iOS-test/.DS_Store and modified/Tools/iOS-test/.DS_Store differ -diff -Nru orig/Tools/iOS-test/app/iOS-test/main.py modified/Tools/iOS-test/app/iOS-test/main.py ---- orig/Tools/iOS-test/app/iOS-test/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app/iOS-test/main.py 2015-07-17 13:49:19.000000000 +0800 -@@ -0,0 +1,12 @@ -+from datetime import datetime -+import platform -+from test import regrtest -+ -+regrtest.start = datetime.now() -+print("Testing on %s" % platform.machine()) -+print("START:", regrtest.start) -+regrtest.main_in_temp_cwd() -+regrtest.end = datetime.now() -+print("END:", regrtest.end) -+print("Duration:", regrtest.end - regrtest.start) -+ -diff -Nru orig/Tools/iOS-test/app_packages/README modified/Tools/iOS-test/app_packages/README ---- orig/Tools/iOS-test/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/app_packages/README 2015-04-26 21:28:31.000000000 +0800 -@@ -0,0 +1 @@ -+This directory exists so that 3rd party packages can be installed here. -\ No newline at end of file -diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json ---- orig/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/AppIcon.appiconset/Contents.json 2015-07-04 17:34:59.000000000 +0800 -@@ -0,0 +1,58 @@ -+{ -+ "images" : [ -+ { -+ "idiom" : "iphone", -+ "size" : "29x29", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "iphone", -+ "size" : "40x40", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "iphone", -+ "size" : "60x60", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "iphone", -+ "size" : "60x60", -+ "scale" : "3x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "29x29", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "29x29", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "40x40", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "40x40", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "76x76", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "76x76", -+ "scale" : "2x" -+ } -+ ], -+ "info" : { -+ "version" : 1, -+ "author" : "xcode" -+ } -+} -\ No newline at end of file -diff -Nru orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json ---- orig/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-04-26 21:28:31.000000000 +0800 -@@ -0,0 +1,51 @@ -+{ -+ "images" : [ -+ { -+ "orientation" : "portrait", -+ "idiom" : "iphone", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "iphone", -+ "subtype" : "retina4", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "1x" -+ }, -+ { -+ "orientation" : "landscape", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "1x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "landscape", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ } -+ ], -+ "info" : { -+ "version" : 1, -+ "author" : "xcode" -+ } -+} -\ No newline at end of file -diff -Nru orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings ---- orig/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/en.lproj/InfoPlist.strings 2015-04-26 21:28:31.000000000 +0800 -@@ -0,0 +1 @@ -+/* Localized versions of Info.plist keys */ -diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist ---- orig/Tools/iOS-test/iOS-test/iOS-test-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Info.plist 2015-12-20 19:26:56.000000000 +0800 -@@ -0,0 +1,45 @@ -+ -+ -+ -+ -+ CFBundleDevelopmentRegion -+ en -+ CFBundleDisplayName -+ ${PRODUCT_NAME} -+ CFBundleExecutable -+ ${EXECUTABLE_NAME} -+ CFBundleIdentifier -+ $(PRODUCT_BUNDLE_IDENTIFIER) -+ CFBundleInfoDictionaryVersion -+ 6.0 -+ CFBundleName -+ ${PRODUCT_NAME} -+ CFBundlePackageType -+ APPL -+ CFBundleShortVersionString -+ 1.0 -+ CFBundleSignature -+ ???? -+ CFBundleVersion -+ 1.0 -+ LSRequiresIPhoneOS -+ -+ UIRequiredDeviceCapabilities -+ -+ armv7 -+ -+ UISupportedInterfaceOrientations -+ -+ UIInterfaceOrientationPortrait -+ UIInterfaceOrientationLandscapeLeft -+ UIInterfaceOrientationLandscapeRight -+ -+ UISupportedInterfaceOrientations~ipad -+ -+ UIInterfaceOrientationPortrait -+ UIInterfaceOrientationPortraitUpsideDown -+ UIInterfaceOrientationLandscapeLeft -+ UIInterfaceOrientationLandscapeRight -+ -+ -+ -diff -Nru orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch ---- orig/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/iOS-test-Prefix.pch 2015-04-26 21:28:31.000000000 +0800 -@@ -0,0 +1,16 @@ -+// -+// Prefix header -+// -+// The contents of this file are implicitly included at the beginning of every source file. -+// -+ -+#import -+ -+#ifndef __IPHONE_3_0 -+#warning "This project uses features only available in iOS SDK 3.0 and later." -+#endif -+ -+#ifdef __OBJC__ -+ #import -+ #import -+#endif -\ No newline at end of file -diff -Nru orig/Tools/iOS-test/iOS-test/main.m modified/Tools/iOS-test/iOS-test/main.m ---- orig/Tools/iOS-test/iOS-test/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test/main.m 2015-12-21 09:53:22.000000000 +0800 -@@ -0,0 +1,145 @@ -+// -+// main.m -+// A main module for starting Python projects under iOS. -+// -+ -+#import -+#import -+#include -+#include -+ -+int main(int argc, char *argv[]) { -+ int ret = 0; -+ unsigned int i; -+ NSString *tmp_path; -+ NSString *exe; -+ NSString *python_home; -+ wchar_t *wpython_home; -+ const char* main_script; -+ wchar_t** python_argv; -+ @autoreleasepool { -+ -+ NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; -+ -+ // Special environment to avoid writing bytecode because -+ // the process will not have write attribute on the device. -+ putenv("PYTHONDONTWRITEBYTECODE=1"); -+ -+ python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; -+ NSLog(@"PythonHome is: %@", python_home); -+ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); -+ Py_SetPythonHome(wpython_home); -+ -+ // iOS provides a specific directory for temp files. -+ tmp_path = [NSString stringWithFormat:@"TMP=%@/tmp", resourcePath, nil]; -+ putenv((char *)[tmp_path UTF8String]); -+ -+ // Since iOS doesn't allow dynamic linking, we have to know -+ // the name of the executable so that we can find the ctypes -+ // test objects. However, sys.argv[0] will be updated to -+ // reflect the script name; the TEST_EXECUTABLE environment -+ // variable provides the mechanism for specifying the filename. -+ exe = [NSString stringWithFormat:@"TEST_EXECUTABLE=%s", argv[0], nil]; -+ putenv((char *)[exe UTF8String]); -+ -+ NSLog(@"Initializing Python runtime..."); -+ Py_Initialize(); -+ -+ /******************************************************* -+ To tell lldb not to stop on signals, use the following commands: -+ process handle SIGPIPE -n true -p true -s false -+ process handle SIGINT -n true -p true -s false -+ process handle SIGXFSZ -n true -p true -s false -+ process handle SIGUSR1 -n true -p true -s false -+ process handle SIGUSR2 -n true -p true -s false -+ *******************************************************/ -+ -+ // Arguments to pass to test runner -+ char *test_args[] = { -+ "-j", "1", -+ "-u", "all,-audio,-curses,-largefile,-subprocess,-gui", -+// "-v", // Verbose test output -+ "-W", // Display test output on failure -+ -+ "-x", // Arguments are tests to *exclude* -+// ARM64 failures -+// "test_unicode", // # ctypes related; PyUnicode_FromFormat -+ -+// ARMv7 failures -+// "test_cmath", // math domain error -+// "test_ctypes", // DL loading? -+// "test_float", // rounding? -+// "test_math", // math domain error -+// "test_numeric_tower", // -+// "test_strtod", // -+ "test_importlib", // Thread locking problem -+ -+// Fails on BOTH -+// "test_ctypes", // DL loading? -+// "test_socket", // Fails due to bad domain? Fails on simulator, OS/X, too. -+// "test_threading", // ctypes related; missing symbol PyThreadState_SetAsyncExc -+ -+// Hard crash on BOTH -+ "test_bytes" // ctypes related; PyBytes_FromFormat -+ -+ }; -+ -+ // Set the name of the main script -+ main_script = [ -+ [[NSBundle mainBundle] pathForResource:@"Library/Application Support/org.python.iOS-test/app/iOS-test/main" -+ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; -+ -+ if (main_script == NULL) { -+ NSLog(@"Unable to locate app/iOS-test/main.py file"); -+ exit(-1); -+ } -+ -+ // Construct argv for the interpreter -+ int n_test_args = sizeof(test_args) / sizeof (*test_args) + 1; -+ -+ python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * n_test_args); -+ python_argv[0] = _Py_char2wchar(main_script, NULL); -+ for (i = 1; i < n_test_args; i++) { -+ python_argv[i] = _Py_char2wchar(test_args[i-1], NULL); -+ } -+ -+ PySys_SetArgv(n_test_args, python_argv); -+ -+ // If other modules are using thread, we need to initialize them before. -+ PyEval_InitThreads(); -+ -+ // Start the main.py script -+ NSLog(@"Running %s", main_script); -+ -+ @try { -+ FILE* fd = fopen(main_script, "r"); -+ if (fd == NULL) { -+ ret = 1; -+ NSLog(@"Unable to open main.py, abort."); -+ } else { -+ ret = PyRun_SimpleFileEx(fd, main_script, 1); -+ if (ret != 0) { -+ NSLog(@"Application quit abnormally!"); -+ } -+ } -+ } -+ @catch (NSException *exception) { -+ NSLog(@"Python runtime error: %@", [exception reason]); -+ } -+ @finally { -+ Py_Finalize(); -+ } -+ -+ PyMem_RawFree(wpython_home); -+ if (python_argv) { -+ for (i = 0; i < argc; i++) { -+ PyMem_RawFree(python_argv[i]); -+ } -+ PyMem_RawFree(python_argv); -+ } -+ NSLog(@"Leaving"); -+ } -+ -+ exit(ret); -+ return ret; -+} -\ No newline at end of file -diff -Nru orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj ---- orig/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/Tools/iOS-test/iOS-test.xcodeproj/project.pbxproj 2015-12-20 22:48:35.000000000 +0800 -@@ -0,0 +1,369 @@ -+// !$*UTF8*$! -+{ -+ archiveVersion = 1; -+ classes = { -+ }; -+ objectVersion = 46; -+ objects = { -+ -+/* Begin PBXBuildFile section */ -+ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE519190F4100A9926B /* Foundation.framework */; }; -+ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE719190F4100A9926B /* CoreGraphics.framework */; }; -+ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE919190F4100A9926B /* UIKit.framework */; }; -+ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 60796EEE19190F4100A9926B /* InfoPlist.strings */; }; -+ 60796EF219190F4100A9926B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60796EF119190F4100A9926B /* main.m */; }; -+ 60796EF819190F4100A9926B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60796EF719190F4100A9926B /* Images.xcassets */; }; -+ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; -+ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; -+ 60EAF0931C26F7310003B8F5 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */; }; -+ 60EAF0951C26F73D0003B8F5 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60EAF0941C26F73D0003B8F5 /* libz.tbd */; }; -+/* End PBXBuildFile section */ -+ -+/* Begin PBXFileReference section */ -+ 60796EE219190F4100A9926B /* iOS-test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-test.app"; sourceTree = BUILT_PRODUCTS_DIR; }; -+ 60796EE519190F4100A9926B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; -+ 60796EE719190F4100A9926B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; -+ 60796EE919190F4100A9926B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; -+ 60796EED19190F4100A9926B /* iOS-test-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS-test-Info.plist"; sourceTree = ""; }; -+ 60796EEF19190F4100A9926B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; -+ 60796EF119190F4100A9926B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; -+ 60796EF319190F4100A9926B /* iOS-test-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-test-Prefix.pch"; sourceTree = ""; }; -+ 60796EF719190F4100A9926B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; -+ 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; -+ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; -+ 60DBD4B01B47DEF700068095 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; -+ 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; -+ 60EAF0941C26F73D0003B8F5 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; -+ 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; -+/* End PBXFileReference section */ -+ -+/* Begin PBXFrameworksBuildPhase section */ -+ 60796EDF19190F4100A9926B /* Frameworks */ = { -+ isa = PBXFrameworksBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60EAF0951C26F73D0003B8F5 /* libz.tbd in Frameworks */, -+ 60EAF0931C26F7310003B8F5 /* libsqlite3.tbd in Frameworks */, -+ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */, -+ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */, -+ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */, -+ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */, -+ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXFrameworksBuildPhase section */ -+ -+/* Begin PBXGroup section */ -+ 60796ED919190F4100A9926B = { -+ isa = PBXGroup; -+ children = ( -+ 60796EEB19190F4100A9926B /* iOS-test */, -+ 60796EE419190F4100A9926B /* Frameworks */, -+ 60796EE319190F4100A9926B /* Products */, -+ ); -+ sourceTree = ""; -+ }; -+ 60796EE319190F4100A9926B /* Products */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796EE219190F4100A9926B /* iOS-test.app */, -+ ); -+ name = Products; -+ sourceTree = ""; -+ }; -+ 60796EE419190F4100A9926B /* Frameworks */ = { -+ isa = PBXGroup; -+ children = ( -+ 60EAF0941C26F73D0003B8F5 /* libz.tbd */, -+ 60EAF0921C26F7310003B8F5 /* libsqlite3.tbd */, -+ 60796F2B1919C70800A9926B /* Python.framework */, -+ 60796EE519190F4100A9926B /* Foundation.framework */, -+ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, -+ 60796EE719190F4100A9926B /* CoreGraphics.framework */, -+ 60796EE919190F4100A9926B /* UIKit.framework */, -+ ); -+ name = Frameworks; -+ sourceTree = ""; -+ }; -+ 60796EEB19190F4100A9926B /* iOS-test */ = { -+ isa = PBXGroup; -+ children = ( -+ 60DBD4B01B47DEF700068095 /* app */, -+ 60F0BABF191FC868006EC268 /* app_packages */, -+ 60796EF719190F4100A9926B /* Images.xcassets */, -+ 60796EEC19190F4100A9926B /* Supporting Files */, -+ ); -+ path = "iOS-test"; -+ sourceTree = ""; -+ }; -+ 60796EEC19190F4100A9926B /* Supporting Files */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796EED19190F4100A9926B /* iOS-test-Info.plist */, -+ 60796EEE19190F4100A9926B /* InfoPlist.strings */, -+ 60796EF119190F4100A9926B /* main.m */, -+ 60796EF319190F4100A9926B /* iOS-test-Prefix.pch */, -+ ); -+ name = "Supporting Files"; -+ sourceTree = ""; -+ }; -+/* End PBXGroup section */ -+ -+/* Begin PBXNativeTarget section */ -+ 60796EE119190F4100A9926B /* iOS-test */ = { -+ isa = PBXNativeTarget; -+ buildConfigurationList = 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "iOS-test" */; -+ buildPhases = ( -+ 60796F2F1919C7E700A9926B /* Refresh Python source */, -+ 60796EDE19190F4100A9926B /* Sources */, -+ 60796EDF19190F4100A9926B /* Frameworks */, -+ 60796EE019190F4100A9926B /* Resources */, -+ ); -+ buildRules = ( -+ ); -+ dependencies = ( -+ ); -+ name = "iOS-test"; -+ productName = "iOS-test"; -+ productReference = 60796EE219190F4100A9926B /* iOS-test.app */; -+ productType = "com.apple.product-type.application"; -+ }; -+/* End PBXNativeTarget section */ -+ -+/* Begin PBXProject section */ -+ 60796EDA19190F4100A9926B /* Project object */ = { -+ isa = PBXProject; -+ attributes = { -+ CLASSPREFIX = Py; -+ LastUpgradeCheck = 0720; -+ ORGANIZATIONNAME = "Python Software Foundation"; -+ TargetAttributes = { -+ 60796EE119190F4100A9926B = { -+ DevelopmentTeam = 383DLEZ2K4; -+ }; -+ }; -+ }; -+ buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "iOS-test" */; -+ compatibilityVersion = "Xcode 3.2"; -+ developmentRegion = English; -+ hasScannedForEncodings = 0; -+ knownRegions = ( -+ en, -+ ); -+ mainGroup = 60796ED919190F4100A9926B; -+ productRefGroup = 60796EE319190F4100A9926B /* Products */; -+ projectDirPath = ""; -+ projectRoot = ""; -+ targets = ( -+ 60796EE119190F4100A9926B /* iOS-test */, -+ ); -+ }; -+/* End PBXProject section */ -+ -+/* Begin PBXResourcesBuildPhase section */ -+ 60796EE019190F4100A9926B /* Resources */ = { -+ isa = PBXResourcesBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, -+ 60796EF819190F4100A9926B /* Images.xcassets in Resources */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXResourcesBuildPhase section */ -+ -+/* Begin PBXShellScriptBuildPhase section */ -+ 60796F2F1919C7E700A9926B /* Refresh Python source */ = { -+ isa = PBXShellScriptBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ ); -+ inputPaths = ( -+ ); -+ name = "Refresh Python source"; -+ outputPaths = ( -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ shellPath = /bin/sh; -+ shellScript = "mkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nmkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages/ $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources/lib/python`readlink $PROJECT_DIR/Python.framework/Versions/Current`/site-packages/\n"; -+ }; -+/* End PBXShellScriptBuildPhase section */ -+ -+/* Begin PBXSourcesBuildPhase section */ -+ 60796EDE19190F4100A9926B /* Sources */ = { -+ isa = PBXSourcesBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60796EF219190F4100A9926B /* main.m in Sources */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXSourcesBuildPhase section */ -+ -+/* Begin PBXVariantGroup section */ -+ 60796EEE19190F4100A9926B /* InfoPlist.strings */ = { -+ isa = PBXVariantGroup; -+ children = ( -+ 60796EEF19190F4100A9926B /* en */, -+ ); -+ name = InfoPlist.strings; -+ sourceTree = ""; -+ }; -+/* End PBXVariantGroup section */ -+ -+/* Begin XCBuildConfiguration section */ -+ 60796F0C19190F4100A9926B /* Debug */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ALWAYS_SEARCH_USER_PATHS = NO; -+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; -+ CLANG_CXX_LIBRARY = "libc++"; -+ CLANG_ENABLE_MODULES = YES; -+ CLANG_ENABLE_OBJC_ARC = YES; -+ CLANG_WARN_BOOL_CONVERSION = YES; -+ CLANG_WARN_CONSTANT_CONVERSION = YES; -+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; -+ CLANG_WARN_EMPTY_BODY = YES; -+ CLANG_WARN_ENUM_CONVERSION = YES; -+ CLANG_WARN_INT_CONVERSION = YES; -+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; -+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ COPY_PHASE_STRIP = NO; -+ ENABLE_BITCODE = NO; -+ ENABLE_TESTABILITY = YES; -+ GCC_C_LANGUAGE_STANDARD = gnu99; -+ GCC_DYNAMIC_NO_PIC = NO; -+ GCC_OPTIMIZATION_LEVEL = 0; -+ GCC_PREPROCESSOR_DEFINITIONS = ( -+ "DEBUG=1", -+ "$(inherited)", -+ ); -+ GCC_SYMBOLS_PRIVATE_EXTERN = NO; -+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; -+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; -+ GCC_WARN_UNDECLARED_SELECTOR = YES; -+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; -+ GCC_WARN_UNUSED_FUNCTION = YES; -+ GCC_WARN_UNUSED_VARIABLE = YES; -+ IPHONEOS_DEPLOYMENT_TARGET = 7.1; -+ ONLY_ACTIVE_ARCH = YES; -+ SDKROOT = iphoneos; -+ TARGETED_DEVICE_FAMILY = "1,2"; -+ }; -+ name = Debug; -+ }; -+ 60796F0D19190F4100A9926B /* Release */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ALWAYS_SEARCH_USER_PATHS = NO; -+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; -+ CLANG_CXX_LIBRARY = "libc++"; -+ CLANG_ENABLE_MODULES = YES; -+ CLANG_ENABLE_OBJC_ARC = YES; -+ CLANG_WARN_BOOL_CONVERSION = YES; -+ CLANG_WARN_CONSTANT_CONVERSION = YES; -+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; -+ CLANG_WARN_EMPTY_BODY = YES; -+ CLANG_WARN_ENUM_CONVERSION = YES; -+ CLANG_WARN_INT_CONVERSION = YES; -+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; -+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ COPY_PHASE_STRIP = YES; -+ ENABLE_BITCODE = NO; -+ ENABLE_NS_ASSERTIONS = NO; -+ GCC_C_LANGUAGE_STANDARD = gnu99; -+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; -+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; -+ GCC_WARN_UNDECLARED_SELECTOR = YES; -+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; -+ GCC_WARN_UNUSED_FUNCTION = YES; -+ GCC_WARN_UNUSED_VARIABLE = YES; -+ IPHONEOS_DEPLOYMENT_TARGET = 7.1; -+ SDKROOT = iphoneos; -+ TARGETED_DEVICE_FAMILY = "1,2"; -+ VALIDATE_PRODUCT = YES; -+ }; -+ name = Release; -+ }; -+ 60796F0F19190F4100A9926B /* Debug */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; -+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; -+ CODE_SIGN_IDENTITY = "iPhone Developer"; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ FRAMEWORK_SEARCH_PATHS = ( -+ "$(inherited)", -+ "$(PROJECT_DIR)", -+ ); -+ GCC_PRECOMPILE_PREFIX_HEADER = YES; -+ GCC_PREFIX_HEADER = "iOS-test/iOS-test-Prefix.pch"; -+ HEADER_SEARCH_PATHS = ( -+ "$(inherited)", -+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, -+ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", -+ ); -+ INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; -+ PRODUCT_BUNDLE_IDENTIFIER = "org.python.$(PRODUCT_NAME:rfc1034identifier)"; -+ PRODUCT_NAME = "$(TARGET_NAME)"; -+ PROVISIONING_PROFILE = ""; -+ USER_HEADER_SEARCH_PATHS = include/python2.7; -+ WRAPPER_EXTENSION = app; -+ }; -+ name = Debug; -+ }; -+ 60796F1019190F4100A9926B /* Release */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; -+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; -+ CODE_SIGN_IDENTITY = "iPhone Developer"; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ FRAMEWORK_SEARCH_PATHS = ( -+ "$(inherited)", -+ "$(PROJECT_DIR)", -+ ); -+ GCC_PRECOMPILE_PREFIX_HEADER = YES; -+ GCC_PREFIX_HEADER = "iOS-test/iOS-test-Prefix.pch"; -+ HEADER_SEARCH_PATHS = ( -+ "$(inherited)", -+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, -+ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", -+ ); -+ INFOPLIST_FILE = "iOS-test/iOS-test-Info.plist"; -+ PRODUCT_BUNDLE_IDENTIFIER = "org.python.$(PRODUCT_NAME:rfc1034identifier)"; -+ PRODUCT_NAME = "$(TARGET_NAME)"; -+ PROVISIONING_PROFILE = ""; -+ USER_HEADER_SEARCH_PATHS = include/python2.7; -+ WRAPPER_EXTENSION = app; -+ }; -+ name = Release; -+ }; -+/* End XCBuildConfiguration section */ -+ -+/* Begin XCConfigurationList section */ -+ 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "iOS-test" */ = { -+ isa = XCConfigurationList; -+ buildConfigurations = ( -+ 60796F0C19190F4100A9926B /* Debug */, -+ 60796F0D19190F4100A9926B /* Release */, -+ ); -+ defaultConfigurationIsVisible = 0; -+ defaultConfigurationName = Release; -+ }; -+ 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "iOS-test" */ = { -+ isa = XCConfigurationList; -+ buildConfigurations = ( -+ 60796F0F19190F4100A9926B /* Debug */, -+ 60796F1019190F4100A9926B /* Release */, -+ ); -+ defaultConfigurationIsVisible = 0; -+ defaultConfigurationName = Release; -+ }; -+/* End XCConfigurationList section */ -+ }; -+ rootObject = 60796EDA19190F4100A9926B /* Project object */; -+} -diff -Nru orig/config.sub modified/config.sub ---- orig/config.sub 2015-02-03 19:49:02.000000000 +0800 -+++ modified/config.sub 2015-02-15 08:25:31.000000000 +0800 -@@ -1512,6 +1512,8 @@ - ;; - -nacl*) - ;; -+ -ios*) -+ ;; - -none) - ;; - *) -diff -Nru orig/configure modified/configure ---- orig/configure 2015-02-03 19:49:02.000000000 +0800 -+++ modified/configure 2015-04-30 09:18:43.000000000 +0800 -@@ -3290,6 +3290,9 @@ - *-*-cygwin*) - ac_sys_system=Cygwin - ;; -+ *-apple-ios) -+ ac_sys_system=iOS -+ ;; - *) - # for now, limit cross builds to known configurations - MACHDEP="unknown" -@@ -3332,6 +3335,15 @@ - _host_cpu=$host_cpu - esac - ;; -+ *-apple-ios) -+ case "$host_cpu" in -+ arm*) -+ _host_cpu=arm -+ ;; -+ *) -+ _host_cpu=$host_cpu -+ esac -+ ;; - *-*-cygwin*) - _host_cpu= - ;; -@@ -3411,6 +3423,9 @@ - define_xopen_source=no;; - Darwin/1[0-9].*) - define_xopen_source=no;; -+ # On iOS, defining _POSIX_C_SOURCE also disables platform specific features. -+ iOS/*) -+ define_xopen_source=no;; - # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but - # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined - # or has another value. By not (re)defining it, the defaults come in place. -@@ -5993,11 +6008,17 @@ - fi - - if test "$cross_compiling" = yes; then -- case "$READELF" in -- readelf|:) -- as_fn_error $? "readelf for the host is required for cross builds" "$LINENO" 5 -- ;; -- esac -+ case "$host" in -+ *-apple-ios) -+ # readelf not required for iOS cross builds. -+ ;; -+ *) -+ case "$READELF" in -+ readelf|:) -+ as_fn_error $? "readelf for the host is required for cross builds" "$LINENO" 5 -+ ;; -+ esac -+ esac - fi - - -@@ -10421,6 +10442,8 @@ - hp*|HP*) DYNLOADFILE="dynload_hpux.o";; - # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() - Darwin/[0156]\..*) DYNLOADFILE="dynload_next.o";; -+ # Disable dynamic loading on iOS -+ iOS/*) DYNLOADFILE="dynload_stub.o";; - *) - # use dynload_shlib.c and dlopen() if we have it; otherwise stub - # out any dynamic loading -@@ -16732,7 +16755,17 @@ - echo "creating Modules/Setup.local" >&6 - if test ! -f Modules/Setup.local - then -- echo "# Edit this file for local setup changes" >Modules/Setup.local -+ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM -+ then -+ echo "# Edit this file for local setup changes" >Modules/Setup.local -+ else -+ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local -+ then -+ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local -+ else -+ cat Modules/Setup.embedded Modules/Setup.$_PYTHON_HOST_PLATFORM > Modules/Setup.local -+ fi -+ fi - fi - - echo "creating Makefile" >&6 -diff -Nru orig/configure.ac modified/configure.ac ---- orig/configure.ac 2015-02-25 21:21:37.000000000 +0800 -+++ modified/configure.ac 2015-04-30 09:18:57.000000000 +0800 -@@ -373,6 +373,9 @@ - *-*-cygwin*) - ac_sys_system=Cygwin - ;; -+ *-apple-ios) -+ ac_sys_system=iOS -+ ;; - *) - # for now, limit cross builds to known configurations - MACHDEP="unknown" -@@ -415,6 +418,15 @@ - _host_cpu=$host_cpu - esac - ;; -+ *-apple-ios) -+ case "$host_cpu" in -+ arm*) -+ _host_cpu=arm -+ ;; -+ *) -+ _host_cpu=$host_cpu -+ esac -+ ;; - *-*-cygwin*) - _host_cpu= - ;; -@@ -491,6 +503,9 @@ - define_xopen_source=no;; - Darwin/1@<:@0-9@:>@.*) - define_xopen_source=no;; -+ # On iOS, defining _POSIX_C_SOURCE also disables platform specific features. -+ iOS/*) -+ define_xopen_source=no;; - # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but - # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined - # or has another value. By not (re)defining it, the defaults come in place. -@@ -1023,11 +1038,17 @@ - - AC_CHECK_TOOLS([READELF], [readelf], [:]) - if test "$cross_compiling" = yes; then -- case "$READELF" in -- readelf|:) -- AC_MSG_ERROR([readelf for the host is required for cross builds]) -- ;; -- esac -+ case "$host" in -+ *-apple-ios) -+ # readelf not required for iOS cross builds. -+ ;; -+ *) -+ case "$READELF" in -+ readelf|:) -+ AC_MSG_ERROR([readelf for the host is required for cross builds]) -+ ;; -+ esac -+ esac - fi - AC_SUBST(READELF) - -@@ -2898,6 +2919,8 @@ - hp*|HP*) DYNLOADFILE="dynload_hpux.o";; - # Use dynload_next.c only on 10.2 and below, which don't have native dlopen() - Darwin/@<:@0156@:>@\..*) DYNLOADFILE="dynload_next.o";; -+ # Disable dynamic loading on iOS -+ iOS/*) DYNLOADFILE="dynload_stub.o";; - *) - # use dynload_shlib.c and dlopen() if we have it; otherwise stub - # out any dynamic loading -@@ -4826,7 +4849,17 @@ - echo "creating Modules/Setup.local" >&AS_MESSAGE_FD - if test ! -f Modules/Setup.local - then -- echo "# Edit this file for local setup changes" >Modules/Setup.local -+ if test ! -f Modules/Setup.$_PYTHON_HOST_PLATFORM -+ then -+ echo "# Edit this file for local setup changes" >Modules/Setup.local -+ else -+ if test -f Modules/Setup.$_PYTHON_HOST_PLATFORM.local -+ then -+ cp Modules/Setup.$_PYTHON_HOST_PLATFORM.local Modules/Setup.local -+ else -+ cat Modules/Setup.embedded Modules/Setup.$_PYTHON_HOST_PLATFORM > Modules/Setup.local -+ fi -+ fi - fi - - echo "creating Makefile" >&AS_MESSAGE_FD -diff -Nru orig/iOS/Makefile modified/iOS/Makefile ---- orig/iOS/Makefile 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/Makefile 2015-07-04 13:38:21.000000000 +0800 -@@ -0,0 +1,248 @@ -+# This is a "Meta-makefile" for building an iOS-compatible Python.framework. -+# It invokes the base makefile multiple times, once for each hardware platform -+# that needs to be supported; then it combines the products into a single "fat" -+# binary. -+ -+IOS_DIR=$(shell pwd) -+ -+# Extract the Python version from the master configure.ac -+PYTHON_VERSION=$(shell grep "m4_define.PYTHON_VERSION," ../configure.ac | sed "s/m4_define(PYTHON_VERSION, \(.*\))/\1/") -+ -+# Build identifier of the build OS. -+BUILD_OS_ID=x86_64-apple-darwin$(shell uname -r) -+ -+# 32 bit iOS Simulator build commands and flags -+IOS_SIMULATOR_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -+IOS_SIMULATOR_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 -+IOS_SIMULATOR_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT) -miphoneos-version-min=7.0 -+ -+# 64 bit iOS Simulator build commands and flags -+IOS_SIMULATOR_64_SDK_ROOT=$(shell xcrun --sdk iphonesimulator --show-sdk-path) -+IOS_SIMULATOR_64_CC=$(shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 -+IOS_SIMULATOR_64_LD=$(shell xcrun -find -sdk iphonesimulator ld) -arch x86_64 --sysroot=$(IOS_SIMULATOR_64_SDK_ROOT) -miphoneos-version-min=7.0 -+ -+# iOS ARMV7 build commands and flags -+IOS_ARMV7_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 -+IOS_ARMV7_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7 --sysroot=$(IOS_ARMV7_SDK_ROOT) -miphoneos-version-min=7.0 -+ -+# iOS ARMV7S build commands and flags -+IOS_ARMV7S_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARMV7S_CC=$(shell xcrun -find -sdk iphoneos clang) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 -+IOS_ARMV7S_LD=$(shell xcrun -find -sdk iphoneos ld) -arch armv7s --sysroot=$(IOS_ARMV7S_SDK_ROOT) -miphoneos-version-min=7.0 -+ -+# iOS ARM64 build commands and flags -+IOS_ARM64_SDK_ROOT=$(shell xcrun --sdk iphoneos --show-sdk-path) -+IOS_ARM64_CC=$(shell xcrun -find -sdk iphoneos clang) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 -+IOS_ARM64_LD=$(shell xcrun -find -sdk iphoneos ld) -arch arm64 --sysroot=$(IOS_ARM64_SDK_ROOT) -miphoneos-version-min=7.0 -+ -+ -+.PHONY: libs test all clean distclean _framework -+ -+all: libs test -+ -+libs: ../Python.framework -+ -+test: ../Tools/iOS-test/Python.framework -+ -+clean: -+ rm -rf build -+ rm -rf ../Python.framework -+ rm -rf ../Tools/iOS-test/Python.framework -+ -+distclean: clean -+ rm -rf XCode-sample/sample.xcodeproj/project.xcworkspace -+ rm -rf XCode-sample/sample.xcodeproj/xcuserdata -+ rm -rf XCode-sample/Python.framework -+ rm -rf ../Tools/iOS-test/sample.xcodeproj/project.xcworkspace -+ rm -rf ../Tools/iOS-test/sample.xcodeproj/xcuserdata -+ rm -rf ../Tools/iOS-test/Python.framework -+ -+build/host/bin/python$(PYTHON_VERSION): -+ # Configure and make the local build, providing compiled resources. -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ cd .. && ./configure --prefix=$(IOS_DIR)/build/host --without-ensurepip -+ cd .. && make -+ cd .. && make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf host.tar.gz host && rm -rf host -+ -+build/ios-simulator-i386.tar.gz: build/host/bin/python$(PYTHON_VERSION) -+ # Configure and build Simulator library -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ # Restore host Python -+ cd build && tar zxvf host.tar.gz -+ # Configure and build target Python -+ cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=i386-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_SIMULATOR_CC)" LD="$(IOS_SIMULATOR_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-simulator-i386 \ -+ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ -+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-simulator-i386.tar.gz ios-simulator-i386 && rm -rf ios-simulator-i386 -+ -+build/ios-simulator-x86_64.tar.gz: build/host/bin/python$(PYTHON_VERSION) -+ # Configure and build Simulator library -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ # Restore host Python -+ cd build && tar zxvf host.tar.gz -+ # Configure and build target Python -+ cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=x86_64-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_SIMULATOR_64_CC)" LD="$(IOS_SIMULATOR_64_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-simulator-x86_64 \ -+ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ -+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-simulator-x86_64.tar.gz ios-simulator-x86_64 && rm -rf ios-simulator-x86_64 -+ -+build/ios-armv7.tar.gz: build/host/bin/python$(PYTHON_VERSION) -+ # Configure and build ARMv7 library -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ # Restore host Python -+ cd build && tar zxvf host.tar.gz -+ # Configure and build target Python -+ cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=armv7-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_ARMV7_CC)" LD="$(IOS_ARMV7_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-armv7 \ -+ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ -+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-armv7.tar.gz ios-armv7 && rm -rf ios-armv7 -+ -+build/ios-armv7s.tar.gz: build/host/bin/python$(PYTHON_VERSION) -+ # Configure and build ARMv7s library -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ # Restore host Python -+ cd build && tar zxvf host.tar.gz -+ # Configure and build target Python -+ cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=armv7s-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_ARMV7S_CC)" LD="$(IOS_ARMV7S_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-armv7s \ -+ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ -+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-armv7s.tar.gz ios-armv7s && rm -rf ios-armv7s -+ -+build/ios-arm64.tar.gz: build/host/bin/python$(PYTHON_VERSION) -+ # Configure and build ARM64 library -+ if test -f ../Makefile; then cd .. && make distclean; fi -+ # Restore host Python -+ cd build && tar zxvf host.tar.gz -+ # Configure and build target Python -+ cd .. && \ -+ PATH=$(IOS_DIR)/build/host/bin:$(PATH) ./configure \ -+ --host=aarch64-apple-ios --build=$(BUILD_OS_ID) \ -+ CC="$(IOS_ARM64_CC)" LD="$(IOS_ARM64_LD)" \ -+ --prefix=$(IOS_DIR)/build/ios-arm64 \ -+ --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ -+ ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make -+ cd .. && PATH=$(IOS_DIR)/build/host/bin:$(PATH) make install -+ # Now pack away all the built artefacts so that the top level distclean doesn't touch them -+ cd build && tar zcvf ios-arm64.tar.gz ios-arm64 && rm -rf ios-arm64 -+ -+../Python.framework: build/ios-simulator-i386.tar.gz build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-armv7s.tar.gz build/ios-arm64.tar.gz -+ FRAMEWORK_DIR=../Python.framework PRUNED=yes $(MAKE) _framework -+ -+../Tools/iOS-test/Python.framework: build/ios-simulator-i386.tar.gz build/ios-simulator-x86_64.tar.gz build/ios-armv7.tar.gz build/ios-armv7s.tar.gz build/ios-arm64.tar.gz -+ FRAMEWORK_DIR=../Tools/iOS-test/Python.framework $(MAKE) _framework -+ -+########################################################################## -+# A meta-task for building an iOS framework. -+# -+# The test system framework and the production framework are very similar, -+# but the production framework can be significantly pruned and compressed. -+# However, other than that detail, the process of creating the respective -+# frameworks is identical. -+# -+# This meta target allows you to invoke a recursive make call with a -+# _framework target. The framework will be built in the $(FRAMEWORK_DIR) -+# directory; if $(PRUNED) is defined, it will be pruned and compressed. -+########################################################################## -+_framework: -+ # Unpack the archived install directories -+ cd build && tar zxvf ios-simulator-i386.tar.gz -+ cd build && tar zxvf ios-simulator-x86_64.tar.gz -+ cd build && tar zxvf ios-armv7.tar.gz -+ cd build && tar zxvf ios-armv7s.tar.gz -+ cd build && tar zxvf ios-arm64.tar.gz -+ -+ # Create the framework directory and set it as the current version -+ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/ -+ cd $(FRAMEWORK_DIR)/Versions && ln -fs $(PYTHON_VERSION) Current -+ -+ # Copy the headers. The headers are the same for every platform, except for pyconfig.h; -+ # use the x86_64 simulator build because reasons. -+ cp -r build/ios-simulator-x86_64/include/python$(PYTHON_VERSION) $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers -+ -+ # The only headers that change between versions is pyconfig.h; copy each supported version... -+ cp build/ios-simulator-i386/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-i386.h -+ cp build/ios-simulator-x86_64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-x86_64.h -+ # ARMv7 and ARMv7S headers are the same; don't copy this one. -+ # cp build/ios-armv7s/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7s.h -+ cp build/ios-armv7/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-armv7.h -+ cp build/ios-arm64/include/python$(PYTHON_VERSION)/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig-arm64.h -+ # ... and then copy in a master pyconfig.h to unify them all. -+ cp include/pyconfig.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig.h -+ -+ # Link the current Headers to the top level -+ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Headers -+ -+ # Copy the standard library from the simulator build. Again, the -+ # pure Python standard library is the same on every platform; -+ # use the simulator version because reasons. -+ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources -+ cp -r build/ios-simulator-x86_64/lib $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources -+ -+ # Copy Python.h and pyconfig.h into the resources include directory -+ mkdir -p $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) -+ cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/pyconfig*.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) -+ cp -r $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Headers/Python.h $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/include/python$(PYTHON_VERSION) -+ -+ # Remove the pieces of the resources directory that aren't needed: -+ # libpython.a isn't needed in the lib directory -+ rm -f $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/libpython$(PYTHON_VERSION).a -+ # pkgconfig isn't needed on the device -+ rm -rf $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/pkgconfig -+ -+ # If a pruned framework has been requested, do the pruning and compression. -+ if test -n "$(PRUNED)"; then \ -+ cd $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Resources/lib/python$(PYTHON_VERSION); \ -+ rm -rf *test* lib* bsddb curses ensurepip hotshot idlelib tkinter turtledemo wsgiref \ -+ config-$(PYTHON_VERSION) ctypes/test distutils/tests site-packages sqlite3/test; \ -+ find . -name "*.pyc" -exec rm -rf {} \; ; \ -+ zip -r ../python$(subst .,,$(PYTHON_VERSION)).zip *; \ -+ rm -rf *; \ -+ fi -+ -+ # Link the current Resources to the top level -+ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Resources -+ -+ # Create a fat binary for the libPython library -+ xcrun lipo -create -output \ -+ $(FRAMEWORK_DIR)/Versions/$(PYTHON_VERSION)/Python \ -+ build/ios-simulator-i386/lib/libpython$(PYTHON_VERSION).a \ -+ build/ios-simulator-x86_64/lib/libpython$(PYTHON_VERSION).a \ -+ build/ios-armv7/lib/libpython$(PYTHON_VERSION).a \ -+ build/ios-armv7s/lib/libpython$(PYTHON_VERSION).a \ -+ build/ios-arm64/lib/libpython$(PYTHON_VERSION).a \ -+ ; -+ -+ # Link the current Python library to the top level -+ cd $(FRAMEWORK_DIR) && ln -fs Versions/Current/Python -diff -Nru orig/iOS/README modified/iOS/README ---- orig/iOS/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/README 2015-12-20 18:59:33.000000000 +0800 -@@ -0,0 +1,165 @@ -+==================== -+Python on iOS README -+==================== -+ -+:Authors: -+ Russell Keith-Magee (2015) -+ -+:Version: 3.4.2 -+ -+This document provides a overview of eccentricities of building and using -+Python on iOS. -+ -+Build instructions -+================== -+ -+The iOS build must be run on an Mac with XCode installed. To build the iOS -+framework, unpack the Python sources, move into the iOS subdirectory, and -+run ``make``. There are no configuration options to this build process - -+it will use XCode utilities to identify the location of compilers, -+resource directories, and so on. -+ -+The build process will configure and build Python 6 times, producing: -+ -+ * A "host" version of Python -+ * A version of Python compiled for the x86-64 iOS Simulator -+ * A version of Python compiled for the i386 iOS Simulator -+ * A version of Python compiled for ARM64 iOS devices -+ * A version of Python compiled for ARMv7s iOS devices -+ * A version of Python compiled for ARMv7 iOS devices -+ -+Build products will be "installed" into iOS/build. The built products will -+then be combined into a single "fat" ``Python.framework`` that can be added to -+an XCode project. The resulting framework will be located in the root -+directory of the Python source tree. -+ -+A ``make clean`` target also exists to clean out all build products; -+``make distclean`` will clean out all user-specific files from the test and -+sample projects. -+ -+Test instructions -+----------------- -+ -+The ``Tools`` directory contains an ``iOS-Test`` project that enables you to -+run the Python regression test suite. When you run ``make`` in the iOS -+directory, a copy of ``Python.framework`` will also be installed into this -+test project. -+ -+To run the test project, load the project into XCode, and run (either on a -+device or in the simulator). The test suite takes around 20 minutes to run on -+an iPhone5S. -+ -+.. note:: If you run the test project in debug mode, the XCode debugger will -+ stop whenever a signal is raised. The Python regression test suite checks -+ a number of signal handlers, and the test suite will stop mid-execution -+ when this occurs. -+ -+ To disable this signal handling, set a breakpoint at the start of -+ ``main.c``; when execution stops at the breakpoint, run the following -+ commands in the debugger (at the ``(lldb)`` prompt in the console log -+ window):: -+ -+ process handle SIGPIPE -n true -p true -s false -+ process handle SIGINT -n true -p true -s false -+ process handle SIGXFSZ -n true -p true -s false -+ process handle SIGUSR1 -n true -p true -s false -+ process handle SIGUSR2 -n true -p true -s false -+ -+ Unfortunately, this has to be done every time the test suite is executed. -+ -+iOS-specific details -+==================== -+ -+* ``import sys; sys.platform`` will report as "ios", regardless of whether you -+ are on a simulator or a real platform. -+ -+* ``import platform; platform.machine()`` will return the device identifier. -+ For example, an iPhone 5S will return "iPhone6,2" -+ -+* The following modules are not currently supported: -+ -+ - ``bsddb`` -+ - ``bz2`` -+ - ``curses`` -+ - ``dbm`` -+ - ``gdbm`` -+ - ``hotshot`` -+ - ``idlelib`` -+ - ``lzma`` -+ - ``nis`` -+ - ``ossaudiodev`` -+ - ``readline`` -+ - ``spwd`` -+ - ``sqlite3`` -+ - ``ssl`` -+ - ``tkinter`` -+ - ``turtledemo`` -+ - ``wsgiref`` -+ -+* Due to limitations in using dynamic loading on iOS, binary Python modules must be -+ statically-linked into the executable. The framework package produced by the iOS -+ ``make install`` statically links all the supported standard library modules. -+ If you have a third-party Python binary module, you'll need to incorporate the -+ source files for that module into the sources for your own app. -+ -+ If you want to add or remove a binary module from the set that is included in the -+ Python library, you can do so by providing module setup files for each platform. -+ There are three default module configuration files: -+ -+ - ``Modules/Setup.ios-aarch64`` for ARM64 iOS builds -+ - ``Modules/Setup.ios-arm`` for ARMv7 iOS builds -+ - ``Modules/Setup.ios-x86_64`` for x86_64 iOS simulator builds -+ -+ If you copy these files to a ``.local`` version (e.g., -+ ``Modules/Setup.ios-aarch64.local``), the local version will override the -+ default. You can then make modifications to the modules that will be included -+ in the iOS framework, and the flags passed to the compiler when compiling those -+ modules. -+ -+Adding Python to an iOS project -+=============================== -+ -+The iOS subdirectory contains a sample XCode 6.1 project to demonstrate how -+Python can be added to an iOS project. After building the Python iOS framework, -+copy it into the ``iOS/XCode-sample`` directory. You should end up with a directory -+structure that looks like this:: -+ -+ XCode-sample/ -+ Python.framework/ - Manually copied into the project -+ app/ -+ sample/ -+ __init__.py -+ main.py - The Python script to be executed -+ app_packages/ - A directory that will be added to the `PYTHONPATH` at runtime -+ sample -+ Images.xcassets -+ en.lproj -+ main.c - The main() definition for the iOS application -+ sample-Info.plist -+ sample-Prefix.pch -+ sample.xcodeproj - The XCode project file -+ -+If you open the project file is project and run it, you should get output -+similar to the following:: -+ -+ 2015-03-14 22:15:19.595 sample[84454:22100187] PythonHome is: /Users/rkm/Library/Developer/CoreSimulator/Devices/19FE988F-E5C3-4A6C-8752-C12DE9BF079D/data/Containers/Bundle/Application/A949B323-FD20-4C76-B370-99AFF294E9D5/sample.app -+ 2015-03-14 22:15:19.597 sample[84454:22100187] Initializing Python runtime -+ 2015-03-14 22:15:19.758 sample[84454:22100187] Running /Users/rkm/Library/Developer/CoreSimulator/Devices/19FE988F-E5C3-4A6C-8752-C12DE9BF079D/data/Containers/Bundle/Application/A949B323-FD20-4C76-B370-99AFF294E9D5/sample.app/app/sample/main.py -+ Hello, World. -+ 2015-03-14 22:15:19.792 sample[84454:22100187] Leaving -+ -+You can now modify the provide Python source code, import and use -+code from the Python standard library, and add third-party modules to -+app_packages. -+ -+The sample app is a console-only app, so it isn't of any real practical use. -+Python can be embedded into any Objective-C project using the normal Python -+APIs for embedding; but if you want to write a full iOS app in Python, or -+you want to access iOS services from within embedded code, you'll need to -+bridge between the Objective-C environment and the Python environment. -+This binding isn't something that Python does out of the box; you'll need -+to use a third-party library like `Rubicon ObjC`_, `Pyobjus`_ or `PyObjC`_. -+ -+.. _Rubicon ObjC: http://pybee.org/rubicon -+.. _Pyobjus: http://pyobjus.readthedocs.org/ -+.. _PyObjC: https://pythonhosted.org/pyobjc/ -Binary files orig/iOS/XCode-sample/.DS_Store and modified/iOS/XCode-sample/.DS_Store differ -diff -Nru orig/iOS/XCode-sample/app/sample/main.py modified/iOS/XCode-sample/app/sample/main.py ---- orig/iOS/XCode-sample/app/sample/main.py 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app/sample/main.py 2015-03-14 22:02:09.000000000 +0800 -@@ -0,0 +1,3 @@ -+ -+if __name__ == '__main__': -+ print("Hello, World.") -diff -Nru orig/iOS/XCode-sample/app_packages/README modified/iOS/XCode-sample/app_packages/README ---- orig/iOS/XCode-sample/app_packages/README 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/app_packages/README 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1 @@ -+This directory exists so that 3rd party packages can be installed here. -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json ---- orig/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/AppIcon.appiconset/Contents.json 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1,53 @@ -+{ -+ "images" : [ -+ { -+ "idiom" : "iphone", -+ "size" : "29x29", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "iphone", -+ "size" : "40x40", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "iphone", -+ "size" : "60x60", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "29x29", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "29x29", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "40x40", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "40x40", -+ "scale" : "2x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "76x76", -+ "scale" : "1x" -+ }, -+ { -+ "idiom" : "ipad", -+ "size" : "76x76", -+ "scale" : "2x" -+ } -+ ], -+ "info" : { -+ "version" : 1, -+ "author" : "xcode" -+ } -+} -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json ---- orig/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1,51 @@ -+{ -+ "images" : [ -+ { -+ "orientation" : "portrait", -+ "idiom" : "iphone", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "iphone", -+ "subtype" : "retina4", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "1x" -+ }, -+ { -+ "orientation" : "landscape", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "1x" -+ }, -+ { -+ "orientation" : "portrait", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ }, -+ { -+ "orientation" : "landscape", -+ "idiom" : "ipad", -+ "extent" : "full-screen", -+ "minimum-system-version" : "7.0", -+ "scale" : "2x" -+ } -+ ], -+ "info" : { -+ "version" : 1, -+ "author" : "xcode" -+ } -+} -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings ---- orig/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/en.lproj/InfoPlist.strings 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1 @@ -+/* Localized versions of Info.plist keys */ -diff -Nru orig/iOS/XCode-sample/sample/main.m modified/iOS/XCode-sample/sample/main.m ---- orig/iOS/XCode-sample/sample/main.m 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/main.m 2015-07-04 23:12:05.000000000 +0800 -@@ -0,0 +1,112 @@ -+// -+// main.m -+// A main module for starting Python projects under iOS. -+// -+ -+#import -+#import -+#include -+#include -+ -+int main(int argc, char *argv[]) { -+ int ret = 0; -+ unsigned int i; -+ NSString *tmp_path; -+ NSString *python_home; -+ wchar_t *wpython_home; -+ const char* main_script; -+ wchar_t** python_argv; -+ -+ @autoreleasepool { -+ -+ NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; -+ -+ // Special environment to prefer .pyo; also, don't write bytecode -+ // because the process will not have write permissions on the device. -+ putenv("PYTHONOPTIMIZE=1"); -+ putenv("PYTHONDONTWRITEBYTECODE=1"); -+ -+ python_home = [NSString stringWithFormat:@"%@/Library/Python.framework/Resources", resourcePath, nil]; -+ NSLog(@"PythonHome is: %@", python_home); -+ wpython_home = _Py_char2wchar([python_home UTF8String], NULL); -+ Py_SetPythonHome(wpython_home); -+ -+ // iOS provides a specific directory for temp files. -+ tmp_path = [NSString stringWithFormat:@"TMP=%@/tmp", resourcePath, nil]; -+ putenv((char *)[tmp_path UTF8String]); -+ -+ NSLog(@"Initializing Python runtime"); -+ Py_Initialize(); -+ -+ // Set the name of the main script -+ main_script = [ -+ [[NSBundle mainBundle] pathForResource:@"Library/Application Support/org.python.sample/app/sample/main" -+ ofType:@"py"] cStringUsingEncoding:NSUTF8StringEncoding]; -+ -+ if (main_script == NULL) { -+ NSLog(@"Unable to locate app/sample/main.py file"); -+ exit(-1); -+ } -+ -+ // Construct argv for the interpreter -+ python_argv = PyMem_RawMalloc(sizeof(wchar_t*) * argc); -+ -+ python_argv[0] = _Py_char2wchar(main_script, NULL); -+ for (i = 1; i < argc; i++) { -+ python_argv[i] = _Py_char2wchar(argv[i], NULL); -+ } -+ -+ PySys_SetArgv(argc, python_argv); -+ -+ // If other modules are using threads, we need to initialize them. -+ PyEval_InitThreads(); -+ -+ // Start the main.py script -+ NSLog(@"Running %s", main_script); -+ -+ @try { -+ FILE* fd = fopen(main_script, "r"); -+ if (fd == NULL) { -+ ret = 1; -+ NSLog(@"Unable to open main.py, abort."); -+ } else { -+ ret = PyRun_SimpleFileEx(fd, main_script, 1); -+ if (ret != 0) { -+ NSLog(@"Application quit abnormally!"); -+ } else { -+ // In a normal iOS application, the following line is what -+ // actually runs the application. It requires that the -+ // Objective-C runtime environment has a class named -+ // "PythonAppDelegate". This project doesn't define -+ // one, because Objective-C bridging isn't something -+ // Python does out of the box. You'll need to use -+ // a library like Rubicon-ObjC [1], Pyobjus [2] or -+ // PyObjC [3] if you want to run an *actual* iOS app. -+ // [1] http://pybee.org/rubicon -+ // [2] http://pyobjus.readthedocs.org/ -+ // [3] https://pythonhosted.org/pyobjc/ -+ -+ UIApplicationMain(argc, argv, nil, @"PythonAppDelegate"); -+ } -+ } -+ } -+ @catch (NSException *exception) { -+ NSLog(@"Python runtime error: %@", [exception reason]); -+ } -+ @finally { -+ Py_Finalize(); -+ } -+ -+ PyMem_RawFree(wpython_home); -+ if (python_argv) { -+ for (i = 0; i < argc; i++) { -+ PyMem_RawFree(python_argv[i]); -+ } -+ PyMem_RawFree(python_argv); -+ } -+ NSLog(@"Leaving"); -+ } -+ -+ exit(ret); -+ return ret; -+} -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample/sample-Info.plist modified/iOS/XCode-sample/sample/sample-Info.plist ---- orig/iOS/XCode-sample/sample/sample-Info.plist 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Info.plist 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1,45 @@ -+ -+ -+ -+ -+ CFBundleDevelopmentRegion -+ en -+ CFBundleDisplayName -+ ${PRODUCT_NAME} -+ CFBundleExecutable -+ ${EXECUTABLE_NAME} -+ CFBundleIdentifier -+ com.example.${PRODUCT_NAME:rfc1034identifier} -+ CFBundleInfoDictionaryVersion -+ 6.0 -+ CFBundleName -+ ${PRODUCT_NAME} -+ CFBundlePackageType -+ APPL -+ CFBundleShortVersionString -+ 1.0 -+ CFBundleSignature -+ ???? -+ CFBundleVersion -+ 1.0 -+ LSRequiresIPhoneOS -+ -+ UIRequiredDeviceCapabilities -+ -+ armv7 -+ -+ UISupportedInterfaceOrientations -+ -+ UIInterfaceOrientationPortrait -+ UIInterfaceOrientationLandscapeLeft -+ UIInterfaceOrientationLandscapeRight -+ -+ UISupportedInterfaceOrientations~ipad -+ -+ UIInterfaceOrientationPortrait -+ UIInterfaceOrientationPortraitUpsideDown -+ UIInterfaceOrientationLandscapeLeft -+ UIInterfaceOrientationLandscapeRight -+ -+ -+ -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample/sample-Prefix.pch modified/iOS/XCode-sample/sample/sample-Prefix.pch ---- orig/iOS/XCode-sample/sample/sample-Prefix.pch 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample/sample-Prefix.pch 2015-03-14 21:57:52.000000000 +0800 -@@ -0,0 +1,16 @@ -+// -+// Prefix header -+// -+// The contents of this file are implicitly included at the beginning of every source file. -+// -+ -+#import -+ -+#ifndef __IPHONE_3_0 -+#warning "This project uses features only available in iOS SDK 3.0 and later." -+#endif -+ -+#ifdef __OBJC__ -+ #import -+ #import -+#endif -\ No newline at end of file -diff -Nru orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj ---- orig/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/XCode-sample/sample.xcodeproj/project.pbxproj 2015-07-04 23:17:10.000000000 +0800 -@@ -0,0 +1,353 @@ -+// !$*UTF8*$! -+{ -+ archiveVersion = 1; -+ classes = { -+ }; -+ objectVersion = 46; -+ objects = { -+ -+/* Begin PBXBuildFile section */ -+ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE519190F4100A9926B /* Foundation.framework */; }; -+ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE719190F4100A9926B /* CoreGraphics.framework */; }; -+ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796EE919190F4100A9926B /* UIKit.framework */; }; -+ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 60796EEE19190F4100A9926B /* InfoPlist.strings */; }; -+ 60796EF219190F4100A9926B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60796EF119190F4100A9926B /* main.m */; }; -+ 60796EF819190F4100A9926B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60796EF719190F4100A9926B /* Images.xcassets */; }; -+ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1819190FBB00A9926B /* libz.dylib */; }; -+ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F1F1919174D00A9926B /* libsqlite3.dylib */; }; -+ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F2B1919C70800A9926B /* Python.framework */; }; -+ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60796F38191CDBBA00A9926B /* CoreFoundation.framework */; }; -+/* End PBXBuildFile section */ -+ -+/* Begin PBXFileReference section */ -+ 60796EE219190F4100A9926B /* sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; -+ 60796EE519190F4100A9926B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; -+ 60796EE719190F4100A9926B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; -+ 60796EE919190F4100A9926B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; -+ 60796EED19190F4100A9926B /* sample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "sample-Info.plist"; sourceTree = ""; }; -+ 60796EEF19190F4100A9926B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; -+ 60796EF119190F4100A9926B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; -+ 60796EF319190F4100A9926B /* sample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "sample-Prefix.pch"; sourceTree = ""; }; -+ 60796EF719190F4100A9926B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; -+ 60796F1819190FBB00A9926B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; -+ 60796F1F1919174D00A9926B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; -+ 60796F2B1919C70800A9926B /* Python.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Python.framework; sourceTree = ""; }; -+ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; -+ 60F0BABD191FC83F006EC268 /* app */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app; sourceTree = SOURCE_ROOT; }; -+ 60F0BABF191FC868006EC268 /* app_packages */ = {isa = PBXFileReference; lastKnownFileType = folder; path = app_packages; sourceTree = SOURCE_ROOT; }; -+/* End PBXFileReference section */ -+ -+/* Begin PBXFrameworksBuildPhase section */ -+ 60796EDF19190F4100A9926B /* Frameworks */ = { -+ isa = PBXFrameworksBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60796F39191CDBBA00A9926B /* CoreFoundation.framework in Frameworks */, -+ 60796F2C1919C70800A9926B /* Python.framework in Frameworks */, -+ 60796F201919174D00A9926B /* libsqlite3.dylib in Frameworks */, -+ 60796F1919190FBB00A9926B /* libz.dylib in Frameworks */, -+ 60796EE819190F4100A9926B /* CoreGraphics.framework in Frameworks */, -+ 60796EEA19190F4100A9926B /* UIKit.framework in Frameworks */, -+ 60796EE619190F4100A9926B /* Foundation.framework in Frameworks */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXFrameworksBuildPhase section */ -+ -+/* Begin PBXGroup section */ -+ 60796ED919190F4100A9926B = { -+ isa = PBXGroup; -+ children = ( -+ 60796EEB19190F4100A9926B /* sample */, -+ 60796EE419190F4100A9926B /* Frameworks */, -+ 60796EE319190F4100A9926B /* Products */, -+ ); -+ sourceTree = ""; -+ }; -+ 60796EE319190F4100A9926B /* Products */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796EE219190F4100A9926B /* sample.app */, -+ ); -+ name = Products; -+ sourceTree = ""; -+ }; -+ 60796EE419190F4100A9926B /* Frameworks */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796F1F1919174D00A9926B /* libsqlite3.dylib */, -+ 60796F1819190FBB00A9926B /* libz.dylib */, -+ 60796F38191CDBBA00A9926B /* CoreFoundation.framework */, -+ 60796EE719190F4100A9926B /* CoreGraphics.framework */, -+ 60796EE519190F4100A9926B /* Foundation.framework */, -+ 60796F2B1919C70800A9926B /* Python.framework */, -+ 60796EE919190F4100A9926B /* UIKit.framework */, -+ ); -+ name = Frameworks; -+ sourceTree = ""; -+ }; -+ 60796EEB19190F4100A9926B /* sample */ = { -+ isa = PBXGroup; -+ children = ( -+ 60F0BABD191FC83F006EC268 /* app */, -+ 60F0BABF191FC868006EC268 /* app_packages */, -+ 60796EF719190F4100A9926B /* Images.xcassets */, -+ 60796EEC19190F4100A9926B /* Supporting Files */, -+ ); -+ path = sample; -+ sourceTree = ""; -+ }; -+ 60796EEC19190F4100A9926B /* Supporting Files */ = { -+ isa = PBXGroup; -+ children = ( -+ 60796EED19190F4100A9926B /* sample-Info.plist */, -+ 60796EEE19190F4100A9926B /* InfoPlist.strings */, -+ 60796EF119190F4100A9926B /* main.m */, -+ 60796EF319190F4100A9926B /* sample-Prefix.pch */, -+ ); -+ name = "Supporting Files"; -+ sourceTree = ""; -+ }; -+/* End PBXGroup section */ -+ -+/* Begin PBXNativeTarget section */ -+ 60796EE119190F4100A9926B /* sample */ = { -+ isa = PBXNativeTarget; -+ buildConfigurationList = 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "sample" */; -+ buildPhases = ( -+ 60796F2F1919C7E700A9926B /* Refresh Python source */, -+ 60796EDE19190F4100A9926B /* Sources */, -+ 60796EDF19190F4100A9926B /* Frameworks */, -+ 60796EE019190F4100A9926B /* Resources */, -+ ); -+ buildRules = ( -+ ); -+ dependencies = ( -+ ); -+ name = sample; -+ productName = sample; -+ productReference = 60796EE219190F4100A9926B /* sample.app */; -+ productType = "com.apple.product-type.application"; -+ }; -+/* End PBXNativeTarget section */ -+ -+/* Begin PBXProject section */ -+ 60796EDA19190F4100A9926B /* Project object */ = { -+ isa = PBXProject; -+ attributes = { -+ CLASSPREFIX = Py; -+ LastUpgradeCheck = 0630; -+ ORGANIZATIONNAME = "Example Corp"; -+ }; -+ buildConfigurationList = 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "sample" */; -+ compatibilityVersion = "Xcode 3.2"; -+ developmentRegion = English; -+ hasScannedForEncodings = 0; -+ knownRegions = ( -+ en, -+ ); -+ mainGroup = 60796ED919190F4100A9926B; -+ productRefGroup = 60796EE319190F4100A9926B /* Products */; -+ projectDirPath = ""; -+ projectRoot = ""; -+ targets = ( -+ 60796EE119190F4100A9926B /* sample */, -+ ); -+ }; -+/* End PBXProject section */ -+ -+/* Begin PBXResourcesBuildPhase section */ -+ 60796EE019190F4100A9926B /* Resources */ = { -+ isa = PBXResourcesBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60796EF019190F4100A9926B /* InfoPlist.strings in Resources */, -+ 60796EF819190F4100A9926B /* Images.xcassets in Resources */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXResourcesBuildPhase section */ -+ -+/* Begin PBXShellScriptBuildPhase section */ -+ 60796F2F1919C7E700A9926B /* Refresh Python source */ = { -+ isa = PBXShellScriptBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ ); -+ inputPaths = ( -+ ); -+ name = "Refresh Python source"; -+ outputPaths = ( -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ shellPath = /bin/sh; -+ shellScript = "mkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nmkdir -p $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/lib $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/Python.framework/Resources/include $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Application\\ Support/org.python.$PROJECT_NAME\nrsync -pvtrL --exclude .hg --exclude .svn --exclude .git $PROJECT_DIR/app_packages/ $BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Library/Python.framework/Resources/lib/python`readlink $PROJECT_DIR/Python.framework/Versions/Current`/site-packages/\n"; -+ }; -+/* End PBXShellScriptBuildPhase section */ -+ -+/* Begin PBXSourcesBuildPhase section */ -+ 60796EDE19190F4100A9926B /* Sources */ = { -+ isa = PBXSourcesBuildPhase; -+ buildActionMask = 2147483647; -+ files = ( -+ 60796EF219190F4100A9926B /* main.m in Sources */, -+ ); -+ runOnlyForDeploymentPostprocessing = 0; -+ }; -+/* End PBXSourcesBuildPhase section */ -+ -+/* Begin PBXVariantGroup section */ -+ 60796EEE19190F4100A9926B /* InfoPlist.strings */ = { -+ isa = PBXVariantGroup; -+ children = ( -+ 60796EEF19190F4100A9926B /* en */, -+ ); -+ name = InfoPlist.strings; -+ sourceTree = ""; -+ }; -+/* End PBXVariantGroup section */ -+ -+/* Begin XCBuildConfiguration section */ -+ 60796F0C19190F4100A9926B /* Debug */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ALWAYS_SEARCH_USER_PATHS = NO; -+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; -+ CLANG_CXX_LIBRARY = "libc++"; -+ CLANG_ENABLE_MODULES = YES; -+ CLANG_ENABLE_OBJC_ARC = YES; -+ CLANG_WARN_BOOL_CONVERSION = YES; -+ CLANG_WARN_CONSTANT_CONVERSION = YES; -+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; -+ CLANG_WARN_EMPTY_BODY = YES; -+ CLANG_WARN_ENUM_CONVERSION = YES; -+ CLANG_WARN_INT_CONVERSION = YES; -+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; -+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ COPY_PHASE_STRIP = NO; -+ GCC_C_LANGUAGE_STANDARD = gnu99; -+ GCC_DYNAMIC_NO_PIC = NO; -+ GCC_OPTIMIZATION_LEVEL = 0; -+ GCC_PREPROCESSOR_DEFINITIONS = ( -+ "DEBUG=1", -+ "$(inherited)", -+ ); -+ GCC_SYMBOLS_PRIVATE_EXTERN = NO; -+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; -+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; -+ GCC_WARN_UNDECLARED_SELECTOR = YES; -+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; -+ GCC_WARN_UNUSED_FUNCTION = YES; -+ GCC_WARN_UNUSED_VARIABLE = YES; -+ IPHONEOS_DEPLOYMENT_TARGET = 7.1; -+ ONLY_ACTIVE_ARCH = YES; -+ SDKROOT = iphoneos; -+ TARGETED_DEVICE_FAMILY = "1,2"; -+ }; -+ name = Debug; -+ }; -+ 60796F0D19190F4100A9926B /* Release */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ALWAYS_SEARCH_USER_PATHS = NO; -+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; -+ CLANG_CXX_LIBRARY = "libc++"; -+ CLANG_ENABLE_MODULES = YES; -+ CLANG_ENABLE_OBJC_ARC = YES; -+ CLANG_WARN_BOOL_CONVERSION = YES; -+ CLANG_WARN_CONSTANT_CONVERSION = YES; -+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; -+ CLANG_WARN_EMPTY_BODY = YES; -+ CLANG_WARN_ENUM_CONVERSION = YES; -+ CLANG_WARN_INT_CONVERSION = YES; -+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; -+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; -+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; -+ COPY_PHASE_STRIP = YES; -+ ENABLE_NS_ASSERTIONS = NO; -+ GCC_C_LANGUAGE_STANDARD = gnu99; -+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES; -+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; -+ GCC_WARN_UNDECLARED_SELECTOR = YES; -+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; -+ GCC_WARN_UNUSED_FUNCTION = YES; -+ GCC_WARN_UNUSED_VARIABLE = YES; -+ IPHONEOS_DEPLOYMENT_TARGET = 7.1; -+ SDKROOT = iphoneos; -+ TARGETED_DEVICE_FAMILY = "1,2"; -+ VALIDATE_PRODUCT = YES; -+ }; -+ name = Release; -+ }; -+ 60796F0F19190F4100A9926B /* Debug */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; -+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; -+ FRAMEWORK_SEARCH_PATHS = ( -+ "$(inherited)", -+ "$(PROJECT_DIR)", -+ ); -+ GCC_PRECOMPILE_PREFIX_HEADER = YES; -+ GCC_PREFIX_HEADER = "sample/sample-Prefix.pch"; -+ HEADER_SEARCH_PATHS = ( -+ "$(inherited)", -+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, -+ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", -+ ); -+ INFOPLIST_FILE = "sample/sample-Info.plist"; -+ PRODUCT_NAME = "$(TARGET_NAME)"; -+ USER_HEADER_SEARCH_PATHS = include/python2.7; -+ WRAPPER_EXTENSION = app; -+ }; -+ name = Debug; -+ }; -+ 60796F1019190F4100A9926B /* Release */ = { -+ isa = XCBuildConfiguration; -+ buildSettings = { -+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; -+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; -+ FRAMEWORK_SEARCH_PATHS = ( -+ "$(inherited)", -+ "$(PROJECT_DIR)", -+ ); -+ GCC_PRECOMPILE_PREFIX_HEADER = YES; -+ GCC_PREFIX_HEADER = "sample/sample-Prefix.pch"; -+ HEADER_SEARCH_PATHS = ( -+ "$(inherited)", -+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, -+ "\"$(PROJECT_DIR)/Python.framework/Resources/include/python2.7\"", -+ ); -+ INFOPLIST_FILE = "sample/sample-Info.plist"; -+ PRODUCT_NAME = "$(TARGET_NAME)"; -+ USER_HEADER_SEARCH_PATHS = include/python2.7; -+ WRAPPER_EXTENSION = app; -+ }; -+ name = Release; -+ }; -+/* End XCBuildConfiguration section */ -+ -+/* Begin XCConfigurationList section */ -+ 60796EDD19190F4100A9926B /* Build configuration list for PBXProject "sample" */ = { -+ isa = XCConfigurationList; -+ buildConfigurations = ( -+ 60796F0C19190F4100A9926B /* Debug */, -+ 60796F0D19190F4100A9926B /* Release */, -+ ); -+ defaultConfigurationIsVisible = 0; -+ defaultConfigurationName = Release; -+ }; -+ 60796F0E19190F4100A9926B /* Build configuration list for PBXNativeTarget "sample" */ = { -+ isa = XCConfigurationList; -+ buildConfigurations = ( -+ 60796F0F19190F4100A9926B /* Debug */, -+ 60796F1019190F4100A9926B /* Release */, -+ ); -+ defaultConfigurationIsVisible = 0; -+ defaultConfigurationName = Release; -+ }; -+/* End XCConfigurationList section */ -+ }; -+ rootObject = 60796EDA19190F4100A9926B /* Project object */; -+} -diff -Nru orig/iOS/include/pyconfig.h modified/iOS/include/pyconfig.h ---- orig/iOS/include/pyconfig.h 1970-01-01 08:00:00.000000000 +0800 -+++ modified/iOS/include/pyconfig.h 2015-05-05 08:36:22.000000000 +0800 -@@ -0,0 +1,15 @@ -+#ifdef __arm__ -+#include "pyconfig-armv7.h" -+#endif -+ -+#ifdef __arm64__ -+#include "pyconfig-arm64.h" -+#endif -+ -+#ifdef __i386__ -+#include "pyconfig-i386.h" -+#endif -+ -+#ifdef __x86_64__ -+#include "pyconfig-x86_64.h" -+#endif -\ No newline at end of file -diff -Nru orig/setup.py modified/setup.py ---- orig/setup.py 2015-02-03 19:49:05.000000000 +0800 -+++ modified/setup.py 2015-04-26 07:48:53.000000000 +0800 -@@ -252,7 +252,13 @@ - - build_ext.build_extensions(self) - -- longest = max([len(e.name) for e in self.extensions]) -+ # If there are any missing modules, use the longest name to -+ # set the column width for the list of missing modules. -+ if missing: -+ longest = max([len(m) for m in missing]) -+ else: -+ longest = 0 -+ - if self.failed: - longest = max(longest, max([len(name) for name in self.failed])) - diff --git a/patch/Python/Setup.embedded b/patch/Python/Setup.embedded deleted file mode 100644 index 3c19d7f2..00000000 --- a/patch/Python/Setup.embedded +++ /dev/null @@ -1,87 +0,0 @@ -##################################################################### -# Static compilation instructions for all binary modules. -##################################################################### - -_bisect _bisectmodule.c -_bz2 _bz2module.c -I$(srcdir)/../bzip2/include -L$(srcdir)/../bzip2/lib -lbz2 -_codecs_cn cjkcodecs/_codecs_cn.c -_codecs_hk cjkcodecs/_codecs_hk.c -_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -_codecs_jp cjkcodecs/_codecs_jp.c -_codecs_kr cjkcodecs/_codecs_kr.c -_codecs_tw cjkcodecs/_codecs_tw.c -_crypt _cryptmodule.c -_csv _csv.c -_datetime _datetimemodule.c -_elementtree _elementtree.c \ - -I$(srcdir)/Modules/expat - -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -_heapq _heapqmodule.c -_json _json.c -_lsprof _lsprof.o rotatingtree.c -_lzma _lzmamodule.c -I$(srcdir)/../xz/include -L$(srcdir)/../xz/lib -llzma -_md5 md5module.c -_multibytecodec cjkcodecs/multibytecodec.c -_multiprocessing _multiprocessing/multiprocessing.c _multiprocessing/semaphore.c -_opcode _opcode.c -_pickle _pickle.c -_posixsubprocess _posixsubprocess.c -_random _randommodule.c -_sha1 sha1module.c -_sha256 sha256module.c -_sha512 sha512module.c -_socket socketmodule.c -_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ - _sqlite/cache.c \ - _sqlite/connection.c \ - _sqlite/cursor.c \ - _sqlite/microprotocols.c \ - _sqlite/module.c \ - _sqlite/prepare_protocol.c \ - _sqlite/row.c \ - _sqlite/statement.c \ - _sqlite/util.c -_ssl _ssl.c -I$(srcdir)/../OpenSSL.framework/Headers -framework OpenSSL -F$(srcdir)/.. -DUSE_SSL -_struct _struct.c -array arraymodule.c -audioop audioop.c -binascii binascii.c -cmath cmathmodule.c _math.c -fcntl fcntlmodule.c -grp grpmodule.c -math mathmodule.c -mmap mmapmodule.c -parser parsermodule.c -pyexpat expat/xmlparse.c \ - expat/xmlrole.c \ - expat/xmltok.c \ - pyexpat.c \ - -I$(srcdir)/Modules/expat \ - -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI -resource resource.c -select selectmodule.c -syslog syslogmodule.c -termios termios.c -unicodedata unicodedata.c -zlib zlibmodule.c -I$(prefix)/include -lz - -##################################################################### -# Testing modules -##################################################################### -_ctypes_test _ctypes/_ctypes_test.c -_testbuffer _testbuffer.c -_testcapi _testcapimodule.c -_testimportmultiple _testimportmultiple.c - -##################################################################### -# Modules that require additional frameworks -##################################################################### -#_curses _cursesmodule.c -lcurses -ltermcap -#_curses_panel _curses_panel.c -lpanel -lncurses -#_dbm _dbmmodule.c -#_gdbm _gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm -#_tkinter _tkinter.c tkappinit.c -DWITH_APPINIT -I... -L... -#nis nismodule.c -lnsl -#ossaudiodev -#readline readline.c -lreadline -ltermcap -#spwd spwdmodule.c diff --git a/patch/Python/lib-exclude.lst b/patch/Python/lib-exclude.lst deleted file mode 100644 index 7367ffa9..00000000 --- a/patch/Python/lib-exclude.lst +++ /dev/null @@ -1,14 +0,0 @@ -config-* -ctypes/test/* -curses/* -distutils/tests/* -ensurepip/* -idlelib/* -lib2to3/tests/* -site-packages/* -sqlite3/test/* -test/* -tkinter/* -turtle.py -turtledemo/* -wsgiref/* From 0c9310dc902c28314c9054c557c743f61e2fc837 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Thu, 7 Jul 2016 16:01:44 +0800 Subject: [PATCH 45/51] Tweak layout of README. --- README.rst | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.rst b/README.rst index 275f6b3a..447f0aa9 100644 --- a/README.rst +++ b/README.rst @@ -51,22 +51,22 @@ Python versions are supported: * `Python 2.7.12 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ * `Python 3.4.5 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ * `Python 3.5.2 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ From 4c2c83e457af11d6e329dbbc6c38d57d9d730ae0 Mon Sep 17 00:00:00 2001 From: Dima Tisnek Date: Thu, 26 Jan 2017 09:56:48 +0100 Subject: [PATCH 46/51] 3.5-b2 releases --- README.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 447f0aa9..00a9782d 100644 --- a/README.rst +++ b/README.rst @@ -65,8 +65,8 @@ Python versions are supported: * `Python 3.5.2 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ From 01fe0f83ed550da6a11322a5be4ab3f46ccb618a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 28 Jan 2017 15:02:09 +0800 Subject: [PATCH 47/51] Updated links for latest builds. --- README.rst | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/README.rst b/README.rst index 00a9782d..2eb41f7d 100644 --- a/README.rst +++ b/README.rst @@ -23,6 +23,7 @@ for watchOS. This should enable the code to run on: - iPhone 6 Plus - iPhone 6s - iPhone 6s Plus + - iPhone 7 * iPad Pro * iPad - iPad 2 @@ -49,24 +50,24 @@ The master branch of this repository has no content; there is an independent branch for each supported version of Python. The following Python versions are supported: -* `Python 2.7.12 `__: +* `Python 2.7.13 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ -* `Python 3.4.5 `__: +* `Python 3.4.6 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ -* `Python 3.5.2 `__: +* `Python 3.5.3 `__: - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ + * `macOS `__ + * `iOS `__ + * `tvOS `__ + * `watchOS `__ From 6a499cff921a4ba9fb90335522f7a43499c52d0c Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 6 Nov 2017 14:08:37 +0800 Subject: [PATCH 48/51] Updated links for support projects. --- Makefile | 438 ----------------------------------------------------- README.rst | 59 ++------ 2 files changed, 9 insertions(+), 488 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index c8605d7f..00000000 --- a/Makefile +++ /dev/null @@ -1,438 +0,0 @@ -# -# Useful targets: -# - all - build everything -# - macOS - build everything for macOS -# - iOS - build everything for iOS -# - tvOS - build everything for tvOS -# - watchOS - build everything for watchOS -# - OpenSSL.framework-macOS - build OpenSSL.framework for macOS -# - OpenSSL.framework-iOS - build OpenSSL.framework for iOS -# - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS -# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS -# - BZip2.framework-macOS - build BZip2.framework for macOS -# - BZip2.framework-iOS - build BZip2.framework for iOS -# - BZip2.framework-tvOS - build BZip2.framework for tvOS -# - BZip2.framework-watchOS - build BZip2.framework for watchOS -# - XZ.framework-macOS - build XZ.framework for macOS -# - XZ.framework-iOS - build XZ.framework for iOS -# - XZ.framework-tvOS - build XZ.framework for tvOS -# - XZ.framework-watchOS - build XZ.framework for watchOS -# - Python.framework-macOS - build Python.framework for macOS -# - Python.framework-iOS - build Python.framework for iOS -# - Python.framework-tvOS - build Python.framework for tvOS -# - Python.framework-watchOS - build Python.framework for watchOS - -# Current director -PROJECT_DIR=$(shell pwd) - -BUILD_NUMBER=6 - -# Version of packages that will be compiled by this meta-package -PYTHON_VERSION=3.4.2 -PYTHON_VER=$(basename $(PYTHON_VERSION)) - -OPENSSL_VERSION_NUMBER=1.0.2 -OPENSSL_REVISION=h -OPENSSL_VERSION=$(OPENSSL_VERSION_NUMBER)$(OPENSSL_REVISION) - -BZIP2_VERSION=1.0.6 - -XZ_VERSION=5.2.2 - -# Supported OS -OS=macOS iOS tvOS watchOS - -# macOS targets -TARGETS-macOS=macosx.x86_64 - -# iOS targets -TARGETS-iOS=iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64 -CFLAGS-iOS=-miphoneos-version-min=7.0 -CFLAGS-iphoneos.armv7=-fembed-bitcode -CFLAGS-iphoneos.armv7s=-fembed-bitcode -CFLAGS-iphoneos.arm64=-fembed-bitcode - -# tvOS targets -TARGETS-tvOS=appletvsimulator.x86_64 appletvos.arm64 -CFLAGS-tvOS=-mtvos-version-min=9.0 -CFLAGS-appletvos.arm64=-fembed-bitcode -PYTHON_CONFIGURE-tvOS=ac_cv_func_sigaltstack=no - -# watchOS targets -TARGETS-watchOS=watchsimulator.i386 watchos.armv7k -CFLAGS-watchOS=-mwatchos-version-min=2.0 -CFLAGS-watchos.armv7k=-fembed-bitcode -PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack=no - -# override machine types for arm64 -MACHINE_DETAILED-arm64=aarch64 -MACHINE_SIMPLE-arm64=arm - -all: $(foreach os,$(OS),$(os)) - -# Clean all builds -clean: - rm -rf build dist - -# Full clean - includes all downloaded products -distclean: clean - rm -rf downloads - -downloads: downloads/openssl-$(OPENSSL_VERSION).tgz downloads/bzip2-$(BZIP2_VERSION).tgz downloads/xz-$(XZ_VERSION).tgz downloads/Python-$(PYTHON_VERSION).tgz - -########################################################################### -# OpenSSL -# These build instructions adapted from the scripts developed by -# Felix Shchulze (@x2on) https://github.com/x2on/OpenSSL-for-iPhone -########################################################################### - -# Clean the OpenSSL project -clean-OpenSSL: - rm -rf build/*/openssl-$(OPENSSL_VERSION)-* \ - build/*/libssl.a build/*/libcrypto.a \ - build/*/OpenSSL.framework - -# Download original OpenSSL source code archive. -downloads/openssl-$(OPENSSL_VERSION).tgz: - mkdir -p downloads - -if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi - if [ ! -e downloads/openssl-$(OPENSSL_VERSION).tgz ]; then curl --fail -L http://openssl.org/source/old/$(OPENSSL_VERSION_NUMBER)/openssl-$(OPENSSL_VERSION).tar.gz -o downloads/openssl-$(OPENSSL_VERSION).tgz; fi - - -########################################################################### -# BZip2 -########################################################################### - -# Clean the bzip2 project -clean-bzip2: - rm -rf build/*/bzip2-$(BZIP2_VERSION)-* \ - build/*/bzip2 - -# Download original OpenSSL source code archive. -downloads/bzip2-$(BZIP2_VERSION).tgz: - mkdir -p downloads - if [ ! -e downloads/bzip2-$(BZIP2_VERSION).tgz ]; then curl --fail -L http://www.bzip.org/$(BZIP2_VERSION)/bzip2-$(BZIP2_VERSION).tar.gz -o downloads/bzip2-$(BZIP2_VERSION).tgz; fi - -########################################################################### -# XZ (LZMA) -########################################################################### - -# Clean the XZ project -clean-xz: - rm -rf build/*/xz-$(XZ_VERSION)-* \ - build/*/xz - -# Download original OpenSSL source code archive. -downloads/xz-$(XZ_VERSION).tgz: - mkdir -p downloads - if [ ! -e downloads/xz-$(XZ_VERSION).tgz ]; then curl --fail -L http://tukaani.org/xz/xz-$(XZ_VERSION).tar.gz -o downloads/xz-$(XZ_VERSION).tgz; fi - -########################################################################### -# Python -########################################################################### - -# Clean the Python project -clean-Python: - rm -rf \ - build/*/Python-$(PYTHON_VERSION)-* \ - build/*/libpython$(PYTHON_VER).a \ - build/*/pyconfig-*.h \ - build/*/Python.framework - -# Download original Python source code archive. -downloads/Python-$(PYTHON_VERSION).tgz: - mkdir -p downloads - if [ ! -e downloads/Python-$(PYTHON_VERSION).tgz ]; then curl -L https://www.python.org/ftp/python/$(PYTHON_VERSION)/Python-$(PYTHON_VERSION).tgz > downloads/Python-$(PYTHON_VERSION).tgz; fi - -PYTHON_DIR-macOS=build/macOS/Python-$(PYTHON_VERSION)-macosx.x86_64 -PYTHON_HOST=$(PYTHON_DIR-macOS)/dist/lib/libpython$(PYTHON_VER).a - -# Build for specified target (from $(TARGETS)) -# -# Parameters: -# - $1 - target -# - $2 - OS -define build-target -ARCH-$1=$$(subst .,,$$(suffix $1)) -ifdef MACHINE_DETAILED-$$(ARCH-$1) -MACHINE_DETAILED-$1=$$(MACHINE_DETAILED-$$(ARCH-$1)) -else -MACHINE_DETAILED-$1=$$(ARCH-$1) -endif -ifdef MACHINE_SIMPLE-$$(ARCH-$1) -MACHINE_SIMPLE-$1=$$(MACHINE_SIMPLE-$$(ARCH-$1)) -else -MACHINE_SIMPLE-$1=$$(ARCH-$1) -endif -SDK-$1=$$(basename $1) - -SDK_ROOT-$1=$$(shell xcrun --sdk $$(SDK-$1) --show-sdk-path) -CC-$1=xcrun --sdk $$(SDK-$1) clang\ - -arch $$(ARCH-$1) --sysroot=$$(SDK_ROOT-$1) $$(CFLAGS-$2) $$(CFLAGS-$1) -LDFLAGS-$1=-arch $$(ARCH-$1) -isysroot=$$(SDK_ROOT-$1) - -OPENSSL_DIR-$1=build/$2/openssl-$(OPENSSL_VERSION)-$1 -BZIP2_DIR-$1=build/$2/bzip2-$(BZIP2_VERSION)-$1 -XZ_DIR-$1=build/$2/xz-$(XZ_VERSION)-$1 -PYTHON_DIR-$1=build/$2/Python-$(PYTHON_VERSION)-$1 -pyconfig.h-$1=pyconfig-$$(ARCH-$1).h - -# Unpack OpenSSL -$$(OPENSSL_DIR-$1)/Makefile: downloads/openssl-$(OPENSSL_VERSION).tgz - # Unpack sources - mkdir -p $$(OPENSSL_DIR-$1) - tar zxf downloads/openssl-$(OPENSSL_VERSION).tgz --strip-components 1 -C $$(OPENSSL_DIR-$1) -ifeq ($$(findstring simulator,$$(SDK-$1)),) - # Tweak ui_openssl.c - sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" $$(OPENSSL_DIR-$1)/crypto/ui/ui_openssl.c -endif -ifeq ($$(findstring iphone,$$(SDK-$1)),) - # Patch apps/speed.c to not use fork() since it's not available on tvOS - sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' $$(OPENSSL_DIR-$1)/apps/speed.c - # Patch Configure to build for tvOS or watchOS, not iOS - LC_ALL=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' $$(OPENSSL_DIR-$1)/Configure -endif - - # Configure the build -ifeq ($2,macOS) - cd $$(OPENSSL_DIR-$1) && \ - CC="$$(CC-$1)" \ - ./Configure darwin64-x86_64-cc --openssldir=$(PROJECT_DIR)/$$(OPENSSL_DIR-$1) -else - cd $$(OPENSSL_DIR-$1) && \ - CC="$$(CC-$1)" \ - CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ - CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ - ./Configure iphoneos-cross no-asm --openssldir=$(PROJECT_DIR)/$$(OPENSSL_DIR-$1) -endif - -# Build OpenSSL -$$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/Makefile - # Make the build - cd $$(OPENSSL_DIR-$1) && \ - CC="$$(CC-$1)" \ - CROSS_TOP="$$(dir $$(SDK_ROOT-$1)).." \ - CROSS_SDK="$$(notdir $$(SDK_ROOT-$1))" \ - make all - -# Unpack BZip2 -$$(BZIP2_DIR-$1)/Makefile: downloads/bzip2-$(BZIP2_VERSION).tgz - # Unpack sources - mkdir -p $$(BZIP2_DIR-$1) - tar zxf downloads/bzip2-$(BZIP2_VERSION).tgz --strip-components 1 -C $$(BZIP2_DIR-$1) - # Patch sources to use correct compiler - sed -ie 's#CC=gcc#CC=$$(CC-$1)#' $$(BZIP2_DIR-$1)/Makefile - # Patch sources to use correct install directory - sed -ie 's#PREFIX=/usr/local#PREFIX=$(PROJECT_DIR)/build/$2/bzip2#' $$(BZIP2_DIR-$1)/Makefile - -# Build BZip2 -$$(BZIP2_DIR-$1)/libbz2.a: $$(BZIP2_DIR-$1)/Makefile - cd $$(BZIP2_DIR-$1) && make install - -# Unpack XZ -$$(XZ_DIR-$1)/Makefile: downloads/xz-$(XZ_VERSION).tgz - # Unpack sources - mkdir -p $$(XZ_DIR-$1) - tar zxf downloads/xz-$(XZ_VERSION).tgz --strip-components 1 -C $$(XZ_DIR-$1) - # Configure the build - cd $$(XZ_DIR-$1) && ./configure \ - CC="$$(CC-$1)" \ - LDFLAGS="$$(LDFLAGS-$1)" \ - --disable-shared --enable-static \ - --host=$$(MACHINE_SIMPLE-$1)-apple-darwin \ - --prefix=$(PROJECT_DIR)/build/$2/xz - -# Build XZ -$$(XZ_DIR-$1)/src/liblzma/.libs/liblzma.a: $$(XZ_DIR-$1)/Makefile - cd $$(XZ_DIR-$1) && make && make install - -# Unpack Python -$$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST) - # Unpack target Python - mkdir -p $$(PYTHON_DIR-$1) - tar zxf downloads/Python-$(PYTHON_VERSION).tgz --strip-components 1 -C $$(PYTHON_DIR-$1) - # Apply target Python patches - cd $$(PYTHON_DIR-$1) && patch -p1 < $(PROJECT_DIR)/patch/Python/Python.patch - - # Configure target Python -ifeq ($2,macOS) - cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) ./configure \ - CC="$$(CC-$1)" LD="$$(CC-$1)" \ - --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ - --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ - $$(PYTHON_CONFIGURE-$2) -else - cp -f $(PROJECT_DIR)/patch/Python/Setup.embedded $$(PYTHON_DIR-$1)/Modules/Setup.embedded - cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) ./configure \ - CC="$$(CC-$1)" LD="$$(CC-$1)" \ - --host=$$(MACHINE_DETAILED-$1)-apple-ios --build=x86_64-apple-darwin$(shell uname -r) \ - --prefix=$(PROJECT_DIR)/$$(PYTHON_DIR-$1)/dist \ - --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \ - ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \ - $$(PYTHON_CONFIGURE-$2) -endif - -# Build Python -$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: build/$2/OpenSSL.framework build/$2/BZip2.framework build/$2/XZ.framework $$(PYTHON_DIR-$1)/Makefile - # Build target Python - cd $$(PYTHON_DIR-$1) && PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) make all install - -build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/pyconfig.h - cp -f $$^ $$@ - -# Dump vars (for test) -vars-$1: - @echo "ARCH-$1: $$(ARCH-$1)" - @echo "MACHINE_DETAILED-$1: $$(MACHINE_DETAILED-$1)" - @echo "SDK-$1: $$(SDK-$1)" - @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1)" - @echo "CC-$1: $$(CC-$1)" -endef - -# -# Install target pyconfig.h -# Parameters: -# - $1 - target -# - $2 - framework directory -define install-target-pyconfig -endef - -# -# Build for specified OS (from $(OS)) -# Parameters: -# - $1 - OS -define build -$$(foreach target,$$(TARGETS-$1),$$(eval $$(call build-target,$$(target),$1))) - -OPENSSL_FRAMEWORK-$1=build/$1/OpenSSL.framework -BZIP2_FRAMEWORK-$1=build/$1/BZip2.framework -XZ_FRAMEWORK-$1=build/$1/XZ.framework -PYTHON_FRAMEWORK-$1=build/$1/Python.framework -PYTHON_RESOURCES-$1=$$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Resources - -$1: dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz - -clean-$1: - rm -rf build/$1 - -dist/Python-$(PYTHON_VERSION)-$1-support.b$(BUILD_NUMBER).tar.gz: $$(OPENSSL_FRAMEWORK-$1) $$(PYTHON_FRAMEWORK-$1) - mkdir -p dist - tar zcvf $$@ -C build/$1 $$(notdir $$^) - -# Build OpenSSL.framework -OpenSSL.framework-$1: $$(OPENSSL_FRAMEWORK-$1) - -$$(OPENSSL_FRAMEWORK-$1): build/$1/libssl.a build/$1/libcrypto.a - # Create framework directory structure - mkdir -p $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION) - - # Copy the headers - cp -f -r $$(OPENSSL_DIR-$$(firstword $$(TARGETS-$1)))/include $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/Headers - - # Create the fat library - xcrun libtool -no_warning_for_no_symbols -static \ - -o $$(OPENSSL_FRAMEWORK-$1)/Versions/$(OPENSSL_VERSION)/OpenSSL $$^ - - # Create symlinks - ln -fs $(OPENSSL_VERSION) $$(OPENSSL_FRAMEWORK-$1)/Versions/Current - ln -fs Versions/Current/Headers $$(OPENSSL_FRAMEWORK-$1) - ln -fs Versions/Current/OpenSSL $$(OPENSSL_FRAMEWORK-$1) - -build/$1/libssl.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target))/libssl.a) - mkdir -p build/$1 - xcrun lipo -create -output $$@ $$^ - -build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target))/libcrypto.a) - mkdir -p build/$1 - xcrun lipo -create -output $$@ $$^ - -# Build BZip2.framework -BZip2.framework-$1: $$(BZIP2_FRAMEWORK-$1) - -$$(BZIP2_FRAMEWORK-$1): build/$1/bzip2/lib/libbz2.a - # Create framework directory structure - mkdir -p $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION) - - # Copy the headers - cp -f -r build/$1/bzip2/include $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION)/Headers - - # Create the fat library - xcrun libtool -no_warning_for_no_symbols -static \ - -o $$(BZIP2_FRAMEWORK-$1)/Versions/$(BZIP2_VERSION)/bzip2 $$^ - - # Create symlinks - ln -fs $(BZIP2_VERSION) $$(BZIP2_FRAMEWORK-$1)/Versions/Current - ln -fs Versions/Current/Headers $$(BZIP2_FRAMEWORK-$1) - ln -fs Versions/Current/bzip2 $$(BZIP2_FRAMEWORK-$1) - -build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1),$$(BZIP2_DIR-$$(target))/libbz2.a) - mkdir -p build/$1 - xcrun lipo -create -o $$@ $$^ - -# Build XZ.framework -XZ.framework-$1: $$(XZ_FRAMEWORK-$1) - -$$(XZ_FRAMEWORK-$1): build/$1/xz/lib/liblzma.a - # Create framework directory structure - mkdir -p $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION) - - # Copy the headers - cp -f -r build/$1/xz/include $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION)/Headers - - # Create the fat library - xcrun libtool -no_warning_for_no_symbols -static \ - -o $$(XZ_FRAMEWORK-$1)/Versions/$(XZ_VERSION)/xz $$^ - - # Create symlinks - ln -fs $(XZ_VERSION) $$(XZ_FRAMEWORK-$1)/Versions/Current - ln -fs Versions/Current/Headers $$(XZ_FRAMEWORK-$1) - ln -fs Versions/Current/xz $$(XZ_FRAMEWORK-$1) - -build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1),$$(XZ_DIR-$$(target))/src/liblzma/.libs/liblzma.a) - mkdir -p build/$1 - xcrun lipo -create -o $$@ $$^ - -Python.framework-$1: $$(PYTHON_FRAMEWORK-$1) - -# Build Python.framework -$$(PYTHON_FRAMEWORK-$1): build/$1/libpython$(PYTHON_VER).a $$(foreach target,$$(TARGETS-$1),build/$1/$$(pyconfig.h-$$(target))) - mkdir -p $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) - - # Copy the headers. The headers are the same for every platform, except for pyconfig.h - cp -f -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/include/python$(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers - cp -f $$(filter %.h,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers - cp -f $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/iOS/include/pyconfig.h $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers - - # Copy Python.h and pyconfig.h into the resources include directory - cp -f -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/pyconfig*.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) - cp -f -r $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Headers/Python.h $$(PYTHON_RESOURCES-$1)/include/python$(PYTHON_VER) - - # Copy the standard library from the simulator build -ifneq ($(TEST),) - cp -f -r $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib $$(PYTHON_RESOURCES-$1) - # Remove the pieces of the resources directory that aren't needed: - rm -f $$(PYTHON_RESOURCES-$1)/lib/libpython$(PYTHON_VER).a - rm -rf $$(PYTHON_RESOURCES-$1)/lib/pkgconfig -else - mkdir -p $$(PYTHON_RESOURCES-$1)/lib - cd $$(PYTHON_DIR-$$(firstword $$(TARGETS-$1)))/dist/lib/python$(PYTHON_VER) && \ - zip -x@$(PROJECT_DIR)/patch/Python/lib-exclude.lst -r $(PROJECT_DIR)/$$(PYTHON_RESOURCES-$1)/lib/python$(subst .,,$(PYTHON_VER)) * -endif - - # Copy fat library - cp -f $$(filter %.a,$$^) $$(PYTHON_FRAMEWORK-$1)/Versions/$(PYTHON_VER)/Python - - # Create symlinks - ln -fs $(PYTHON_VER) $$(PYTHON_FRAMEWORK-$1)/Versions/Current - ln -fs Versions/Current/Headers $$(PYTHON_FRAMEWORK-$1) - ln -fs Versions/Current/Resources $$(PYTHON_FRAMEWORK-$1) - ln -fs Versions/Current/Python $$(PYTHON_FRAMEWORK-$1) - -# Build libpython fat library -build/$1/libpython$(PYTHON_VER).a: $$(foreach target,$$(TARGETS-$1),$$(PYTHON_DIR-$$(target))/dist/lib/libpython$(PYTHON_VER).a) - # Create a fat binary for the libPython library - mkdir -p build/$1 - xcrun lipo -create -output $$@ $$^ -endef - -$(foreach os,$(OS),$(eval $(call build,$(os)))) diff --git a/README.rst b/README.rst index 2eb41f7d..949df572 100644 --- a/README.rst +++ b/README.rst @@ -11,38 +11,13 @@ The binaries support the ``$(ARCHS_STANDARD)`` set - that is, x86_64 for macOS, armv7 and arm64 for iOS devices, arm64 for appleTV devices, and armv7k for watchOS. This should enable the code to run on: -* MacBook (including Pro & Air) +* MacBook * iMac * Mac Pro -* iPhone - - iPhone 4s - - iPhone 5 - - iPhone 5c - - iPhone 5s - - iPhone 6 - - iPhone 6 Plus - - iPhone 6s - - iPhone 6s Plus - - iPhone 7 -* iPad Pro +* iPhone (4s or later) * iPad - - iPad 2 - - iPad (3rd gen) - - iPad (4th gen) - - iPad Air - - iPad Air 2 - - iPad retina -* iPad Mini - - iPad Mini (1st gen) - - iPad Mini 2 - - iPad Mini 3 - - iPad Mini 4 -* iPod Touch - - iPod Touch (4th gen) - - iPod Touch (5th gen) - - iPod Touch (6th gen) -* Apple TV - - 4th gen +* iPod Touch (4th gen or later) +* Apple TV (4th gen or later) * Apple Watch @@ -50,24 +25,8 @@ The master branch of this repository has no content; there is an independent branch for each supported version of Python. The following Python versions are supported: -* `Python 2.7.13 `__: - - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ - -* `Python 3.4.6 `__: - - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ - -* `Python 3.5.3 `__: - - * `macOS `__ - * `iOS `__ - * `tvOS `__ - * `watchOS `__ - +* `Python 2.7 `__: +* `Python 3.4 `__: +* `Python 3.5 `__: +* `Python 3.6 `__: +.. * `Python 3.7 `__: From 379e7970bbdbb5774fc3192edd630e170cf537b4 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Mon, 6 Nov 2017 18:29:09 +0800 Subject: [PATCH 49/51] Added 3.7 to the supported list. --- README.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 949df572..adfb5213 100644 --- a/README.rst +++ b/README.rst @@ -25,8 +25,8 @@ The master branch of this repository has no content; there is an independent branch for each supported version of Python. The following Python versions are supported: -* `Python 2.7 `__: -* `Python 3.4 `__: -* `Python 3.5 `__: -* `Python 3.6 `__: -.. * `Python 3.7 `__: +* `Python 2.7 `__ +* `Python 3.4 `__ +* `Python 3.5 `__ +* `Python 3.6 `__ +* `Python 3.7 `__ From ca4d9d21b6c8e1f8edb2d20d9771ee404f06533d Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 9 Dec 2017 10:03:43 +0800 Subject: [PATCH 50/51] Commented out Python 3.7 support. --- LICENSE | 2 +- README.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index 7c545232..8c4e7efb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014-2016 Russell Keith-Magee. +Copyright (c) 2014-2017 Russell Keith-Magee. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.rst b/README.rst index adfb5213..a60ff09e 100644 --- a/README.rst +++ b/README.rst @@ -29,4 +29,4 @@ Python versions are supported: * `Python 3.4 `__ * `Python 3.5 `__ * `Python 3.6 `__ -* `Python 3.7 `__ +.. * `Python 3.7 `__ From d30c0e478940d95436b0dd6e3bcfc0e9494b601a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Wed, 28 Feb 2018 08:43:31 +0800 Subject: [PATCH 51/51] Corrected the description of the output format of the project. --- README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index a60ff09e..6eb936f6 100644 --- a/README.rst +++ b/README.rst @@ -5,10 +5,11 @@ This is a meta-package for building a version of Python that can be embedded into a macOS, iOS, tvOS or watchOS project. It works by downloading, patching, and building a fat binary of Python and -selected pre-requisites, and packaging them both in Apple Framework format. +selected pre-requisites, and packaging them as static libraries that can be +included in an Xcode project. The binaries support the ``$(ARCHS_STANDARD)`` set - that is, x86_64 for -macOS, armv7 and arm64 for iOS devices, arm64 for appleTV devices, and armv7k +macOS, armv7 and arm64 for iOS devices, arm64 for AppleTV devices, and armv7k for watchOS. This should enable the code to run on: * MacBook @@ -20,7 +21,6 @@ for watchOS. This should enable the code to run on: * Apple TV (4th gen or later) * Apple Watch - The master branch of this repository has no content; there is an independent branch for each supported version of Python. The following Python versions are supported: